@sanity/cli 6.6.0 → 6.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -4
- package/dist/actions/auth/login/login.js +4 -1
- package/dist/actions/auth/login/login.js.map +1 -1
- package/dist/actions/build/buildApp.js +4 -5
- package/dist/actions/build/buildApp.js.map +1 -1
- package/dist/actions/build/buildStaticFiles.js +12 -4
- package/dist/actions/build/buildStaticFiles.js.map +1 -1
- package/dist/actions/build/buildStudio.js +6 -14
- package/dist/actions/build/buildStudio.js.map +1 -1
- package/dist/actions/build/{getStudioEnvironmentVariables.js → getEnvironmentVariables.js} +15 -19
- package/dist/actions/build/getEnvironmentVariables.js.map +1 -0
- package/dist/actions/deploy/deployStudio.js +1 -2
- package/dist/actions/deploy/deployStudio.js.map +1 -1
- package/dist/actions/deploy/deployStudioSchemasAndManifests.js +1 -2
- package/dist/actions/deploy/deployStudioSchemasAndManifests.js.map +1 -1
- package/dist/actions/deploy/deployStudioSchemasAndManifests.worker.js +1 -1
- package/dist/actions/deploy/deployStudioSchemasAndManifests.worker.js.map +1 -1
- package/dist/actions/dev/startStudioDevServer.js +1 -1
- package/dist/actions/dev/startStudioDevServer.js.map +1 -1
- package/dist/actions/documents/validateDocuments.worker.js +1 -2
- package/dist/actions/documents/validateDocuments.worker.js.map +1 -1
- package/dist/actions/graphql/SchemaError.js +1 -1
- package/dist/actions/graphql/SchemaError.js.map +1 -1
- package/dist/actions/init/initAction.js +32 -1
- package/dist/actions/init/initAction.js.map +1 -1
- package/dist/actions/init/scaffoldTemplate.js +32 -18
- package/dist/actions/init/scaffoldTemplate.js.map +1 -1
- package/dist/actions/init/templates/index.js +2 -0
- package/dist/actions/init/templates/index.js.map +1 -1
- package/dist/actions/init/templates/pageBuilder.js +32 -0
- package/dist/actions/init/templates/pageBuilder.js.map +1 -0
- package/dist/actions/init/types.js +2 -1
- package/dist/actions/init/types.js.map +1 -1
- package/dist/actions/manifest/extractManifest.js +1 -1
- package/dist/actions/manifest/extractManifest.js.map +1 -1
- package/dist/actions/manifest/extractManifest.worker.js +1 -1
- package/dist/actions/manifest/extractManifest.worker.js.map +1 -1
- package/dist/actions/mcp/editorConfigs.js +51 -11
- package/dist/actions/mcp/editorConfigs.js.map +1 -1
- package/dist/actions/mcp/promptForMCPSetup.js +16 -11
- package/dist/actions/mcp/promptForMCPSetup.js.map +1 -1
- package/dist/actions/mcp/setupMCP.js +180 -61
- package/dist/actions/mcp/setupMCP.js.map +1 -1
- package/dist/actions/mcp/types.js.map +1 -1
- package/dist/actions/schema/deploySchemas.js +1 -1
- package/dist/actions/schema/deploySchemas.js.map +1 -1
- package/dist/actions/schema/extractSanityWorkspace.worker.js +1 -1
- package/dist/actions/schema/extractSanityWorkspace.worker.js.map +1 -1
- package/dist/actions/schema/extractSchema.js +1 -4
- package/dist/actions/schema/extractSchema.js.map +1 -1
- package/dist/actions/schema/extractSchemaWatcher.js +1 -4
- package/dist/actions/schema/extractSchemaWatcher.js.map +1 -1
- package/dist/actions/schema/getExtractOptions.js +8 -18
- package/dist/actions/schema/getExtractOptions.js.map +1 -1
- package/dist/actions/schema/types.js +0 -6
- package/dist/actions/schema/types.js.map +1 -1
- package/dist/actions/schema/validateAction.js +1 -1
- package/dist/actions/schema/validateAction.js.map +1 -1
- package/dist/actions/schema/validateSchema.worker.js +1 -2
- package/dist/actions/schema/validateSchema.worker.js.map +1 -1
- package/dist/actions/schema/watchExtractSchema.js +1 -1
- package/dist/actions/schema/watchExtractSchema.js.map +1 -1
- package/dist/actions/skills/readSkillState.js +54 -0
- package/dist/actions/skills/readSkillState.js.map +1 -0
- package/dist/actions/skills/setupSkills.js +73 -0
- package/dist/actions/skills/setupSkills.js.map +1 -0
- package/dist/commands/build.js +9 -22
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/cors/add.js +5 -5
- package/dist/commands/cors/add.js.map +1 -1
- package/dist/commands/datasets/export.js +9 -0
- package/dist/commands/datasets/export.js.map +1 -1
- package/dist/commands/docs/read.js +33 -12
- package/dist/commands/docs/read.js.map +1 -1
- package/dist/commands/init.js +12 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/manifest/extract.js +1 -2
- package/dist/commands/manifest/extract.js.map +1 -1
- package/dist/commands/mcp/configure.js +2 -1
- package/dist/commands/mcp/configure.js.map +1 -1
- package/dist/commands/schemas/deploy.js +1 -2
- package/dist/commands/schemas/deploy.js.map +1 -1
- package/dist/exports/_internal.d.ts +2 -1
- package/dist/exports/_internal.js +1 -1
- package/dist/exports/_internal.js.map +1 -1
- package/dist/server/devServer.js +25 -4
- package/dist/server/devServer.js.map +1 -1
- package/dist/server/previewServer.js +1 -1
- package/dist/server/previewServer.js.map +1 -1
- package/dist/services/mcp.js +1 -1
- package/dist/services/mcp.js.map +1 -1
- package/dist/telemetry/init.telemetry.js.map +1 -1
- package/oclif.manifest.json +17 -1
- package/package.json +17 -18
- package/templates/page-builder/README.md +9 -0
- package/templates/page-builder/schemaTypes/hero.js +31 -0
- package/templates/page-builder/schemaTypes/index.js +19 -0
- package/templates/page-builder/static/.gitkeep +0 -0
- package/dist/actions/build/buildDebug.js +0 -4
- package/dist/actions/build/buildDebug.js.map +0 -1
- package/dist/actions/build/buildVendorDependencies.js +0 -149
- package/dist/actions/build/buildVendorDependencies.js.map +0 -1
- package/dist/actions/build/checkStudioDependencyVersions.js +0 -155
- package/dist/actions/build/checkStudioDependencyVersions.js.map +0 -1
- package/dist/actions/build/createExternalFromImportMap.js +0 -11
- package/dist/actions/build/createExternalFromImportMap.js.map +0 -1
- package/dist/actions/build/decorateIndexWithAutoGeneratedWarning.js +0 -13
- package/dist/actions/build/decorateIndexWithAutoGeneratedWarning.js.map +0 -1
- package/dist/actions/build/decorateIndexWithBridgeScript.js +0 -17
- package/dist/actions/build/decorateIndexWithBridgeScript.js.map +0 -1
- package/dist/actions/build/decorateIndexWithStagingScript.js +0 -16
- package/dist/actions/build/decorateIndexWithStagingScript.js.map +0 -1
- package/dist/actions/build/getAppEnvVars.js +0 -9
- package/dist/actions/build/getAppEnvVars.js.map +0 -1
- package/dist/actions/build/getEntryModule.js +0 -46
- package/dist/actions/build/getEntryModule.js.map +0 -1
- package/dist/actions/build/getPossibleDocumentComponentLocations.js +0 -11
- package/dist/actions/build/getPossibleDocumentComponentLocations.js.map +0 -1
- package/dist/actions/build/getStudioEnvVars.js +0 -9
- package/dist/actions/build/getStudioEnvVars.js.map +0 -1
- package/dist/actions/build/getStudioEnvironmentVariables.js.map +0 -1
- package/dist/actions/build/getViteConfig.js +0 -219
- package/dist/actions/build/getViteConfig.js.map +0 -1
- package/dist/actions/build/normalizeBasePath.js +0 -9
- package/dist/actions/build/normalizeBasePath.js.map +0 -1
- package/dist/actions/build/renderDocument.js +0 -50
- package/dist/actions/build/renderDocument.js.map +0 -1
- package/dist/actions/build/renderDocument.worker.js +0 -9
- package/dist/actions/build/renderDocument.worker.js.map +0 -1
- package/dist/actions/build/renderDocumentWorker/addTimestampImportMapScriptToHtml.js +0 -79
- package/dist/actions/build/renderDocumentWorker/addTimestampImportMapScriptToHtml.js.map +0 -1
- package/dist/actions/build/renderDocumentWorker/components/BasicDocument.js +0 -61
- package/dist/actions/build/renderDocumentWorker/components/BasicDocument.js.map +0 -1
- package/dist/actions/build/renderDocumentWorker/components/DefaultDocument.js +0 -165
- package/dist/actions/build/renderDocumentWorker/components/DefaultDocument.js.map +0 -1
- package/dist/actions/build/renderDocumentWorker/components/Favicons.js +0 -28
- package/dist/actions/build/renderDocumentWorker/components/Favicons.js.map +0 -1
- package/dist/actions/build/renderDocumentWorker/components/GlobalErrorHandler.js +0 -178
- package/dist/actions/build/renderDocumentWorker/components/GlobalErrorHandler.js.map +0 -1
- package/dist/actions/build/renderDocumentWorker/components/NoJavascript.js +0 -51
- package/dist/actions/build/renderDocumentWorker/components/NoJavascript.js.map +0 -1
- package/dist/actions/build/renderDocumentWorker/getDocumentComponent.js +0 -41
- package/dist/actions/build/renderDocumentWorker/getDocumentComponent.js.map +0 -1
- package/dist/actions/build/renderDocumentWorker/getDocumentHtml.js +0 -55
- package/dist/actions/build/renderDocumentWorker/getDocumentHtml.js.map +0 -1
- package/dist/actions/build/renderDocumentWorker/renderDocumentWorker.js +0 -31
- package/dist/actions/build/renderDocumentWorker/renderDocumentWorker.js.map +0 -1
- package/dist/actions/build/renderDocumentWorker/tryLoadDocumentComponent.js +0 -30
- package/dist/actions/build/renderDocumentWorker/tryLoadDocumentComponent.js.map +0 -1
- package/dist/actions/build/renderDocumentWorker/types.js +0 -5
- package/dist/actions/build/renderDocumentWorker/types.js.map +0 -1
- package/dist/actions/build/writeSanityRuntime.js +0 -64
- package/dist/actions/build/writeSanityRuntime.js.map +0 -1
- package/dist/actions/docs/normalizeDocsPath.js +0 -15
- package/dist/actions/docs/normalizeDocsPath.js.map +0 -1
- package/dist/actions/schema/extractSanitySchema.worker.js +0 -33
- package/dist/actions/schema/extractSanitySchema.worker.js.map +0 -1
- package/dist/actions/schema/formatSchemaValidation.js +0 -78
- package/dist/actions/schema/formatSchemaValidation.js.map +0 -1
- package/dist/actions/schema/matchSchemaPattern.js +0 -22
- package/dist/actions/schema/matchSchemaPattern.js.map +0 -1
- package/dist/actions/schema/runSchemaExtraction.js +0 -39
- package/dist/actions/schema/runSchemaExtraction.js.map +0 -1
- package/dist/actions/schema/utils/SchemaExtractionError.js +0 -10
- package/dist/actions/schema/utils/SchemaExtractionError.js.map +0 -1
- package/dist/actions/schema/utils/extractValidationFromSchemaError.js +0 -12
- package/dist/actions/schema/utils/extractValidationFromSchemaError.js.map +0 -1
- package/dist/constants.js +0 -8
- package/dist/constants.js.map +0 -1
- package/dist/server/vite/plugin-sanity-build-entries.js +0 -67
- package/dist/server/vite/plugin-sanity-build-entries.js.map +0 -1
- package/dist/server/vite/plugin-sanity-favicons.js +0 -72
- package/dist/server/vite/plugin-sanity-favicons.js.map +0 -1
- package/dist/server/vite/plugin-sanity-runtime-rewrite.js +0 -18
- package/dist/server/vite/plugin-sanity-runtime-rewrite.js.map +0 -1
- package/dist/server/vite/plugin-schema-extraction.js +0 -201
- package/dist/server/vite/plugin-schema-extraction.js.map +0 -1
- package/dist/telemetry/build.telemetry.js +0 -13
- package/dist/telemetry/build.telemetry.js.map +0 -1
- package/dist/telemetry/extractSchema.telemetry.js +0 -18
- package/dist/telemetry/extractSchema.telemetry.js.map +0 -1
- package/dist/util/getWorkspace.js +0 -18
- package/dist/util/getWorkspace.js.map +0 -1
|
@@ -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\
|
|
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,
|
|
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":"
|
|
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 {
|
|
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 {
|
|
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
|
|
@@ -1 +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\n/**\n * Environment abstraction for editor detection.\n *\n * Detect functions receive this instead of using module-level imports, making\n * each function independently testable without global mocks.\n */\nexport interface DetectionEnv {\n env: Record<string, string | undefined>\n /** Run a CLI command to check if a tool is installed. Rejects on failure. */\n execCommand: (cmd: string, args: string[]) => Promise<void>\n existsSync: (p: string) => boolean\n homedir: string\n platform: NodeJS.Platform\n}\n\n/** Create the real detection environment backed by process/OS globals. */\nexport function createDetectionEnv(): DetectionEnv {\n return {\n env: process.env,\n execCommand: (cmd, args) => execa(cmd, args, {stdio: 'pipe', timeout: 5000}).then(() => {}),\n existsSync,\n homedir: os.homedir(),\n platform: process.platform,\n }\n}\n\ninterface EditorConfig {\n /** Builds the server config with API token. If oauthOnly is true, the token is not used */\n buildServerConfig: (token: string) => Record<string, unknown>\n configKey: string\n /** Returns the config file path if editor is detected, null otherwise */\n detect: (env: DetectionEnv) => Promise<string | null>\n format: 'jsonc' | 'toml'\n /** Extracts the auth token from a parsed Sanity server config block */\n readToken: (serverConfig: Record<string, unknown>) => string | undefined\n\n /** If true, this editor uses OAuth natively and does not need an embedded API token */\n oauthOnly?: boolean\n}\n\n/**\n * The Sanity MCP server uses OAuth by default\n * If a token is provided, the server will not use OAuth instead tool calls will use the API token\n */\nconst defaultHttpConfig = (token?: string) => {\n const defaultConfig: Record<string, unknown> = {\n type: 'http',\n url: MCP_SERVER_URL,\n }\n\n if (token) {\n defaultConfig.headers = {Authorization: `Bearer ${token}`}\n }\n\n return defaultConfig\n}\n\n// -- Detect functions --\n\nasync function detectClaudeCode(ctx: DetectionEnv): Promise<string | null> {\n try {\n await ctx.execCommand('claude', ['--version'])\n return path.join(ctx.homedir, '.claude.json')\n } catch {\n return null\n }\n}\n\nasync function detectAntigravity(ctx: DetectionEnv): Promise<string | null> {\n const antigravityDir = path.join(ctx.homedir, '.gemini/antigravity')\n return ctx.existsSync(antigravityDir) ? path.join(antigravityDir, 'mcp_config.json') : null\n}\n\nexport function getVSCodeUserDir(\n ctx: DetectionEnv,\n variant: 'insiders' | 'stable' = 'stable',\n): string | null {\n switch (ctx.platform) {\n case 'darwin': {\n return path.join(\n ctx.homedir,\n variant === 'insiders'\n ? 'Library/Application Support/Code - Insiders/User'\n : 'Library/Application Support/Code/User',\n )\n }\n case 'win32': {\n if (!ctx.env.APPDATA) return null\n return path.join(\n ctx.env.APPDATA,\n variant === 'insiders' ? 'Code - Insiders/User' : 'Code/User',\n )\n }\n default: {\n return path.join(\n ctx.homedir,\n variant === 'insiders' ? '.config/Code - Insiders/User' : '.config/Code/User',\n )\n }\n }\n}\n\nasync function detectCline(ctx: DetectionEnv): Promise<string | null> {\n const vscodeUserDir = getVSCodeUserDir(ctx)\n if (!vscodeUserDir) return null\n const clineConfigDir = path.join(vscodeUserDir, 'globalStorage/saoudrizwan.claude-dev/settings')\n return ctx.existsSync(clineConfigDir)\n ? path.join(clineConfigDir, 'cline_mcp_settings.json')\n : null\n}\n\nasync function detectClineCli(ctx: DetectionEnv): Promise<string | null> {\n const clineHome = ctx.env.CLINE_DIR || path.join(ctx.homedir, '.cline')\n if (!ctx.existsSync(clineHome)) return null\n return path.join(clineHome, 'data/settings/cline_mcp_settings.json')\n}\n\nasync function detectCodexCli(ctx: DetectionEnv): Promise<string | null> {\n try {\n await ctx.execCommand('codex', ['--version'])\n const codexHome = ctx.env.CODEX_HOME || path.join(ctx.homedir, '.codex')\n return path.join(codexHome, 'config.toml')\n } catch {\n return null\n }\n}\n\nasync function detectCursor(ctx: DetectionEnv): Promise<string | null> {\n const cursorDir = path.join(ctx.homedir, '.cursor')\n return ctx.existsSync(cursorDir) ? path.join(cursorDir, 'mcp.json') : null\n}\n\nasync function detectGeminiCli(ctx: DetectionEnv): Promise<string | null> {\n // Antigravity stores its config under ~/.gemini/antigravity, so checking\n // only the parent ~/.gemini directory causes false Gemini CLI detection.\n const settingsPath = path.join(ctx.homedir, '.gemini/settings.json')\n return ctx.existsSync(settingsPath) ? settingsPath : null\n}\n\nasync function detectGitHubCopilotCli(ctx: DetectionEnv): Promise<string | null> {\n const copilotDir =\n ctx.platform === 'linux' && ctx.env.XDG_CONFIG_HOME\n ? path.join(ctx.env.XDG_CONFIG_HOME, 'copilot')\n : path.join(ctx.homedir, '.copilot')\n return ctx.existsSync(copilotDir) ? path.join(copilotDir, 'mcp-config.json') : null\n}\n\nasync function detectOpenCode(ctx: DetectionEnv): Promise<string | null> {\n try {\n await ctx.execCommand('opencode', ['--version'])\n return path.join(ctx.homedir, '.config/opencode/opencode.json')\n } catch {\n return null\n }\n}\n\nasync function detectVSCode(ctx: DetectionEnv): Promise<string | null> {\n const configDir = getVSCodeUserDir(ctx)\n return configDir && ctx.existsSync(configDir) ? path.join(configDir, 'mcp.json') : null\n}\n\nasync function detectVSCodeInsiders(ctx: DetectionEnv): Promise<string | null> {\n const configDir = getVSCodeUserDir(ctx, 'insiders')\n return configDir && ctx.existsSync(configDir) ? path.join(configDir, 'mcp.json') : null\n}\n\nasync function detectZed(ctx: DetectionEnv): Promise<string | null> {\n let configDir: string | null = null\n switch (ctx.platform) {\n case 'win32': {\n if (ctx.env.APPDATA) {\n configDir = path.join(ctx.env.APPDATA, 'Zed')\n }\n break\n }\n default: {\n configDir = path.join(ctx.homedir, '.config/zed')\n }\n }\n return configDir && ctx.existsSync(configDir) ? path.join(configDir, 'settings.json') : null\n}\n\nasync function detectMCPorter(ctx: DetectionEnv): Promise<string | null> {\n const mcporterDir = path.join(ctx.homedir, '.mcporter')\n if (!ctx.existsSync(mcporterDir)) return null\n\n const jsonPath = path.join(mcporterDir, 'mcporter.json')\n const jsoncPath = path.join(mcporterDir, 'mcporter.jsonc')\n if (ctx.existsSync(jsonPath)) return jsonPath\n if (ctx.existsSync(jsoncPath)) return jsoncPath\n return jsonPath\n}\n\n// -- Read token helpers --\n\n/**\n * Extract a Bearer token from a headers-like object.\n * Looks for `Authorization: \"Bearer <token>\"` and returns the token portion.\n */\nfunction extractBearerToken(headers: unknown): string | undefined {\n if (typeof headers !== 'object' || headers === null) return undefined\n const auth = (headers as Record<string, unknown>).Authorization\n if (typeof auth !== 'string') return undefined\n const match = auth.match(/^Bearer\\s+(.+)$/)\n return match?.[1]\n}\n\nfunction readTokenFromHeaders(serverConfig: Record<string, unknown>): string | undefined {\n return extractBearerToken(serverConfig.headers)\n}\n\nfunction readTokenFromHttpHeaders(serverConfig: Record<string, unknown>): string | undefined {\n return extractBearerToken(serverConfig.http_headers)\n}\n\n// -- Defaults & build server config functions --\n\n/** Most editors share these values — entries only need to declare `detect` + any overrides. */\nconst EDITOR_DEFAULTS = {\n buildServerConfig: defaultHttpConfig,\n configKey: 'mcpServers',\n format: 'jsonc' as const,\n oauthOnly: false,\n readToken: readTokenFromHeaders,\n}\n\nfunction buildAntigravityServerConfig(token: string): Record<string, unknown> {\n return {\n headers: {Authorization: `Bearer ${token}`},\n serverUrl: MCP_SERVER_URL,\n }\n}\n\nfunction buildClineServerConfig(token: string): Record<string, unknown> {\n return {\n disabled: false,\n headers: {Authorization: `Bearer ${token}`},\n type: 'streamableHttp',\n url: MCP_SERVER_URL,\n }\n}\n\nfunction buildCodexCliServerConfig(token: string): Record<string, unknown> {\n return {\n http_headers: {Authorization: `Bearer ${token}`},\n type: 'http',\n url: MCP_SERVER_URL,\n }\n}\n\nfunction buildGitHubCopilotCliServerConfig(token: string): Record<string, unknown> {\n return {\n headers: {Authorization: `Bearer ${token}`},\n tools: ['*'],\n type: 'http',\n url: MCP_SERVER_URL,\n }\n}\n\nfunction buildOpenCodeServerConfig(token: string): Record<string, unknown> {\n return {\n headers: {Authorization: `Bearer ${token}`},\n type: 'remote',\n url: MCP_SERVER_URL,\n }\n}\n\nfunction buildZedServerConfig(token: string): Record<string, unknown> {\n return {\n headers: {Authorization: `Bearer ${token}`},\n settings: {},\n url: MCP_SERVER_URL,\n }\n}\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 *\n * Each entry includes a doc URL pointing to the source of truth for its\n * config path and format. When updating a path, verify against the linked\n * documentation first.\n */\nexport const EDITOR_CONFIGS = {\n // Doc: https://support.google.com/gemini/answer/16255176 (Antigravity / Project Mariner)\n Antigravity: {\n ...EDITOR_DEFAULTS,\n buildServerConfig: buildAntigravityServerConfig,\n detect: detectAntigravity,\n },\n // Doc: https://docs.anthropic.com/en/docs/claude-code/mcp\n // Path: ~/.claude.json Key: mcpServers\n 'Claude Code': {...EDITOR_DEFAULTS, detect: detectClaudeCode},\n // Doc: https://github.com/cline/cline — VS Code extension (saoudrizwan.claude-dev)\n // Path: <VS Code User>/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json\n Cline: {...EDITOR_DEFAULTS, buildServerConfig: buildClineServerConfig, detect: detectCline},\n // Doc: https://github.com/cline/cline — standalone CLI mode\n // Path: $CLINE_DIR || ~/.cline/data/settings/cline_mcp_settings.json\n 'Cline CLI': {\n ...EDITOR_DEFAULTS,\n buildServerConfig: buildClineServerConfig,\n detect: detectClineCli,\n },\n // Doc: https://platform.openai.com/docs/guides/tools-remote-mcp#codex-cli\n // Path: $CODEX_HOME || ~/.codex/config.toml Key: mcp_servers Format: TOML\n 'Codex CLI': {\n ...EDITOR_DEFAULTS,\n buildServerConfig: buildCodexCliServerConfig,\n configKey: 'mcp_servers',\n detect: detectCodexCli,\n format: 'toml' as const,\n readToken: readTokenFromHttpHeaders,\n },\n // Doc: https://docs.cursor.com/context/model-context-protocol\n // Path: ~/.cursor/mcp.json Key: mcpServers\n Cursor: {\n ...EDITOR_DEFAULTS,\n detect: detectCursor,\n oauthOnly: true,\n },\n // Doc: https://googlegemini.wiki/gemini-cli/mcp-servers\n // Path: ~/.gemini/settings.json Key: mcpServers\n 'Gemini CLI': {...EDITOR_DEFAULTS, detect: detectGeminiCli},\n // Doc: https://docs.github.com/en/copilot/customizing-copilot/extending-copilot-coding-agent-with-mcp\n // Path: ~/.copilot/mcp-config.json (or $XDG_CONFIG_HOME/copilot on Linux) Key: mcpServers\n 'GitHub Copilot CLI': {\n ...EDITOR_DEFAULTS,\n buildServerConfig: buildGitHubCopilotCliServerConfig,\n detect: detectGitHubCopilotCli,\n },\n // Doc: https://github.com/nicobailon/mcporter\n // Path: ~/.mcporter/mcporter.{json,jsonc} Key: mcpServers\n MCPorter: {...EDITOR_DEFAULTS, detect: detectMCPorter},\n // Doc: https://opencode.ai/docs/config\n // Path: ~/.config/opencode/opencode.json Key: mcp\n OpenCode: {\n ...EDITOR_DEFAULTS,\n buildServerConfig: buildOpenCodeServerConfig,\n configKey: 'mcp',\n detect: detectOpenCode,\n },\n // Doc: https://code.visualstudio.com/docs/copilot/chat/mcp-servers\n // Path: <VS Code User dir>/mcp.json Key: servers\n 'VS Code': {...EDITOR_DEFAULTS, configKey: 'servers', detect: detectVSCode},\n // Doc: https://code.visualstudio.com/docs/copilot/chat/mcp-servers\n // Path: <VS Code Insiders User dir>/mcp.json Key: servers\n 'VS Code Insiders': {...EDITOR_DEFAULTS, configKey: 'servers', detect: detectVSCodeInsiders},\n // Doc: https://zed.dev/docs/assistant/model-context-protocol\n // Path: ~/.config/zed/settings.json (or $APPDATA/Zed on Windows) Key: context_servers\n Zed: {\n ...EDITOR_DEFAULTS,\n buildServerConfig: buildZedServerConfig,\n configKey: 'context_servers',\n detect: detectZed,\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","createDetectionEnv","env","process","execCommand","cmd","args","stdio","timeout","then","homedir","platform","defaultHttpConfig","token","defaultConfig","type","url","headers","Authorization","detectClaudeCode","ctx","join","detectAntigravity","antigravityDir","getVSCodeUserDir","variant","APPDATA","detectCline","vscodeUserDir","clineConfigDir","detectClineCli","clineHome","CLINE_DIR","detectCodexCli","codexHome","CODEX_HOME","detectCursor","cursorDir","detectGeminiCli","settingsPath","detectGitHubCopilotCli","copilotDir","XDG_CONFIG_HOME","detectOpenCode","detectVSCode","configDir","detectVSCodeInsiders","detectZed","detectMCPorter","mcporterDir","jsonPath","jsoncPath","extractBearerToken","undefined","auth","match","readTokenFromHeaders","serverConfig","readTokenFromHttpHeaders","http_headers","EDITOR_DEFAULTS","buildServerConfig","configKey","format","oauthOnly","readToken","buildAntigravityServerConfig","serverUrl","buildClineServerConfig","disabled","buildCodexCliServerConfig","buildGitHubCopilotCliServerConfig","tools","buildOpenCodeServerConfig","buildZedServerConfig","settings","EDITOR_CONFIGS","Antigravity","detect","Cline","Cursor","MCPorter","OpenCode","Zed"],"mappings":"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"}
|
|
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\n/**\n * Environment abstraction for editor detection.\n *\n * Detect functions receive this instead of using module-level imports, making\n * each function independently testable without global mocks.\n */\nexport interface DetectionEnv {\n env: Record<string, string | undefined>\n /** Run a CLI command to check if a tool is installed. Rejects on failure. */\n execCommand: (cmd: string, args: string[]) => Promise<void>\n existsSync: (p: string) => boolean\n homedir: string\n platform: NodeJS.Platform\n}\n\n/** Create the real detection environment backed by process/OS globals. */\nexport function createDetectionEnv(): DetectionEnv {\n return {\n env: process.env,\n execCommand: (cmd, args) => execa(cmd, args, {stdio: 'pipe', timeout: 5000}).then(() => {}),\n existsSync,\n homedir: os.homedir(),\n platform: process.platform,\n }\n}\n\ninterface EditorConfig {\n /** Builds the server config with API token. If oauthOnly is true, the token is not used */\n buildServerConfig: (token: string) => Record<string, unknown>\n configKey: string\n /** Returns the config file path if editor is detected, null otherwise */\n detect: (env: DetectionEnv) => Promise<string | null>\n format: 'jsonc' | 'toml'\n /** Extracts the auth token from a parsed Sanity server config block */\n readToken: (serverConfig: Record<string, unknown>) => string | undefined\n\n /** If true, this editor uses OAuth natively and does not need an embedded API token */\n oauthOnly?: boolean\n /**\n * Corresponding `--agent` value for the `skills` CLI (https://github.com/vercel-labs/skills).\n * Omit when the editor has no skills CLI equivalent.\n */\n skillsCliAgent?: string\n}\n\n/**\n * The Sanity MCP server uses OAuth by default\n * If a token is provided, the server will not use OAuth instead tool calls will use the API token\n */\nconst defaultHttpConfig = (token?: string) => {\n const defaultConfig: Record<string, unknown> = {\n type: 'http',\n url: MCP_SERVER_URL,\n }\n\n if (token) {\n defaultConfig.headers = {Authorization: `Bearer ${token}`}\n }\n\n return defaultConfig\n}\n\n// -- Detect functions --\n\nasync function detectClaudeCode(ctx: DetectionEnv): Promise<string | null> {\n try {\n await ctx.execCommand('claude', ['--version'])\n return path.join(ctx.homedir, '.claude.json')\n } catch {\n return null\n }\n}\n\nasync function detectAntigravity(ctx: DetectionEnv): Promise<string | null> {\n const antigravityDir = path.join(ctx.homedir, '.gemini/antigravity')\n return ctx.existsSync(antigravityDir) ? path.join(antigravityDir, 'mcp_config.json') : null\n}\n\nexport function getVSCodeUserDir(\n ctx: DetectionEnv,\n variant: 'insiders' | 'stable' = 'stable',\n): string | null {\n switch (ctx.platform) {\n case 'darwin': {\n return path.join(\n ctx.homedir,\n variant === 'insiders'\n ? 'Library/Application Support/Code - Insiders/User'\n : 'Library/Application Support/Code/User',\n )\n }\n case 'win32': {\n if (!ctx.env.APPDATA) return null\n return path.join(\n ctx.env.APPDATA,\n variant === 'insiders' ? 'Code - Insiders/User' : 'Code/User',\n )\n }\n default: {\n return path.join(\n ctx.homedir,\n variant === 'insiders' ? '.config/Code - Insiders/User' : '.config/Code/User',\n )\n }\n }\n}\n\nasync function detectCline(ctx: DetectionEnv): Promise<string | null> {\n const vscodeUserDir = getVSCodeUserDir(ctx)\n if (!vscodeUserDir) return null\n const clineConfigDir = path.join(vscodeUserDir, 'globalStorage/saoudrizwan.claude-dev/settings')\n return ctx.existsSync(clineConfigDir)\n ? path.join(clineConfigDir, 'cline_mcp_settings.json')\n : null\n}\n\nasync function detectClineCli(ctx: DetectionEnv): Promise<string | null> {\n const clineHome = ctx.env.CLINE_DIR || path.join(ctx.homedir, '.cline')\n if (!ctx.existsSync(clineHome)) return null\n return path.join(clineHome, 'data/settings/cline_mcp_settings.json')\n}\n\nasync function detectCodexCli(ctx: DetectionEnv): Promise<string | null> {\n try {\n await ctx.execCommand('codex', ['--version'])\n const codexHome = ctx.env.CODEX_HOME || path.join(ctx.homedir, '.codex')\n return path.join(codexHome, 'config.toml')\n } catch {\n return null\n }\n}\n\nasync function detectCursor(ctx: DetectionEnv): Promise<string | null> {\n const cursorDir = path.join(ctx.homedir, '.cursor')\n return ctx.existsSync(cursorDir) ? path.join(cursorDir, 'mcp.json') : null\n}\n\nasync function detectGeminiCli(ctx: DetectionEnv): Promise<string | null> {\n // Antigravity stores its config under ~/.gemini/antigravity, so checking\n // only the parent ~/.gemini directory causes false Gemini CLI detection.\n const settingsPath = path.join(ctx.homedir, '.gemini/settings.json')\n return ctx.existsSync(settingsPath) ? settingsPath : null\n}\n\nasync function detectGitHubCopilotCli(ctx: DetectionEnv): Promise<string | null> {\n const copilotDir =\n ctx.platform === 'linux' && ctx.env.XDG_CONFIG_HOME\n ? path.join(ctx.env.XDG_CONFIG_HOME, 'copilot')\n : path.join(ctx.homedir, '.copilot')\n return ctx.existsSync(copilotDir) ? path.join(copilotDir, 'mcp-config.json') : null\n}\n\nasync function detectOpenCode(ctx: DetectionEnv): Promise<string | null> {\n try {\n await ctx.execCommand('opencode', ['--version'])\n return path.join(ctx.homedir, '.config/opencode/opencode.json')\n } catch {\n return null\n }\n}\n\nasync function detectVSCode(ctx: DetectionEnv): Promise<string | null> {\n const configDir = getVSCodeUserDir(ctx)\n return configDir && ctx.existsSync(configDir) ? path.join(configDir, 'mcp.json') : null\n}\n\nasync function detectVSCodeInsiders(ctx: DetectionEnv): Promise<string | null> {\n const configDir = getVSCodeUserDir(ctx, 'insiders')\n return configDir && ctx.existsSync(configDir) ? path.join(configDir, 'mcp.json') : null\n}\n\nasync function detectZed(ctx: DetectionEnv): Promise<string | null> {\n let configDir: string | null = null\n switch (ctx.platform) {\n case 'win32': {\n if (ctx.env.APPDATA) {\n configDir = path.join(ctx.env.APPDATA, 'Zed')\n }\n break\n }\n default: {\n configDir = path.join(ctx.homedir, '.config/zed')\n }\n }\n return configDir && ctx.existsSync(configDir) ? path.join(configDir, 'settings.json') : null\n}\n\nasync function detectMCPorter(ctx: DetectionEnv): Promise<string | null> {\n const mcporterDir = path.join(ctx.homedir, '.mcporter')\n if (!ctx.existsSync(mcporterDir)) return null\n\n const jsonPath = path.join(mcporterDir, 'mcporter.json')\n const jsoncPath = path.join(mcporterDir, 'mcporter.jsonc')\n if (ctx.existsSync(jsonPath)) return jsonPath\n if (ctx.existsSync(jsoncPath)) return jsoncPath\n return jsonPath\n}\n\n// -- Read token helpers --\n\n/**\n * Extract a Bearer token from a headers-like object.\n * Looks for `Authorization: \"Bearer <token>\"` and returns the token portion.\n */\nfunction extractBearerToken(headers: unknown): string | undefined {\n if (typeof headers !== 'object' || headers === null) return undefined\n const auth = (headers as Record<string, unknown>).Authorization\n if (typeof auth !== 'string') return undefined\n const match = auth.match(/^Bearer\\s+(.+)$/)\n return match?.[1]\n}\n\nfunction readTokenFromHeaders(serverConfig: Record<string, unknown>): string | undefined {\n return extractBearerToken(serverConfig.headers)\n}\n\nfunction readTokenFromHttpHeaders(serverConfig: Record<string, unknown>): string | undefined {\n return extractBearerToken(serverConfig.http_headers)\n}\n\n// -- Defaults & build server config functions --\n\n/** Most editors share these values — entries only need to declare `detect` + any overrides. */\nconst EDITOR_DEFAULTS = {\n buildServerConfig: defaultHttpConfig,\n configKey: 'mcpServers',\n format: 'jsonc' as const,\n oauthOnly: false,\n readToken: readTokenFromHeaders,\n}\n\nfunction buildAntigravityServerConfig(token: string): Record<string, unknown> {\n return {\n headers: {Authorization: `Bearer ${token}`},\n serverUrl: MCP_SERVER_URL,\n }\n}\n\nfunction buildClineServerConfig(token: string): Record<string, unknown> {\n return {\n disabled: false,\n headers: {Authorization: `Bearer ${token}`},\n type: 'streamableHttp',\n url: MCP_SERVER_URL,\n }\n}\n\nfunction buildCodexCliServerConfig(token: string): Record<string, unknown> {\n return {\n http_headers: {Authorization: `Bearer ${token}`},\n type: 'http',\n url: MCP_SERVER_URL,\n }\n}\n\nfunction buildGitHubCopilotCliServerConfig(token: string): Record<string, unknown> {\n return {\n headers: {Authorization: `Bearer ${token}`},\n tools: ['*'],\n type: 'http',\n url: MCP_SERVER_URL,\n }\n}\n\nfunction buildOpenCodeServerConfig(token: string): Record<string, unknown> {\n return {\n headers: {Authorization: `Bearer ${token}`},\n type: 'remote',\n url: MCP_SERVER_URL,\n }\n}\n\nfunction buildZedServerConfig(token: string): Record<string, unknown> {\n return {\n headers: {Authorization: `Bearer ${token}`},\n settings: {},\n url: MCP_SERVER_URL,\n }\n}\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 *\n * Each entry includes a doc URL pointing to the source of truth for its\n * config path and format. When updating a path, verify against the linked\n * documentation first.\n */\nexport const EDITOR_CONFIGS = {\n // Doc: https://support.google.com/gemini/answer/16255176 (Antigravity / Project Mariner)\n Antigravity: {\n ...EDITOR_DEFAULTS,\n buildServerConfig: buildAntigravityServerConfig,\n detect: detectAntigravity,\n skillsCliAgent: 'antigravity',\n },\n // Doc: https://docs.anthropic.com/en/docs/claude-code/mcp\n // Path: ~/.claude.json Key: mcpServers\n 'Claude Code': {\n ...EDITOR_DEFAULTS,\n detect: detectClaudeCode,\n oauthOnly: true,\n skillsCliAgent: 'claude-code',\n },\n // Doc: https://github.com/cline/cline — VS Code extension (saoudrizwan.claude-dev)\n // Path: <VS Code User>/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json\n Cline: {\n ...EDITOR_DEFAULTS,\n buildServerConfig: buildClineServerConfig,\n detect: detectCline,\n skillsCliAgent: 'cline',\n },\n // Doc: https://github.com/cline/cline — standalone CLI mode\n // Path: $CLINE_DIR || ~/.cline/data/settings/cline_mcp_settings.json\n 'Cline CLI': {\n ...EDITOR_DEFAULTS,\n buildServerConfig: buildClineServerConfig,\n detect: detectClineCli,\n skillsCliAgent: 'cline',\n },\n // Doc: https://platform.openai.com/docs/guides/tools-remote-mcp#codex-cli\n // Path: $CODEX_HOME || ~/.codex/config.toml Key: mcp_servers Format: TOML\n 'Codex CLI': {\n ...EDITOR_DEFAULTS,\n buildServerConfig: buildCodexCliServerConfig,\n configKey: 'mcp_servers',\n detect: detectCodexCli,\n format: 'toml' as const,\n readToken: readTokenFromHttpHeaders,\n skillsCliAgent: 'codex',\n },\n // Doc: https://docs.cursor.com/context/model-context-protocol\n // Path: ~/.cursor/mcp.json Key: mcpServers\n Cursor: {\n ...EDITOR_DEFAULTS,\n detect: detectCursor,\n oauthOnly: true,\n skillsCliAgent: 'cursor',\n },\n // Doc: https://googlegemini.wiki/gemini-cli/mcp-servers\n // Path: ~/.gemini/settings.json Key: mcpServers\n 'Gemini CLI': {...EDITOR_DEFAULTS, detect: detectGeminiCli, skillsCliAgent: 'gemini-cli'},\n // Doc: https://docs.github.com/en/copilot/customizing-copilot/extending-copilot-coding-agent-with-mcp\n // Path: ~/.copilot/mcp-config.json (or $XDG_CONFIG_HOME/copilot on Linux) Key: mcpServers\n 'GitHub Copilot CLI': {\n ...EDITOR_DEFAULTS,\n buildServerConfig: buildGitHubCopilotCliServerConfig,\n detect: detectGitHubCopilotCli,\n skillsCliAgent: 'github-copilot',\n },\n // Doc: https://github.com/nicobailon/mcporter\n // Path: ~/.mcporter/mcporter.{json,jsonc} Key: mcpServers\n MCPorter: {...EDITOR_DEFAULTS, detect: detectMCPorter},\n // Doc: https://opencode.ai/docs/config\n // Path: ~/.config/opencode/opencode.json Key: mcp\n OpenCode: {\n ...EDITOR_DEFAULTS,\n buildServerConfig: buildOpenCodeServerConfig,\n configKey: 'mcp',\n detect: detectOpenCode,\n skillsCliAgent: 'opencode',\n },\n // Doc: https://code.visualstudio.com/docs/copilot/chat/mcp-servers\n // Path: <VS Code User dir>/mcp.json Key: servers\n // VS Code uses GitHub Copilot for AI features; skills are installed via the\n // `github-copilot` agent (see https://code.visualstudio.com/docs/copilot/customization/agent-skills).\n 'VS Code': {\n ...EDITOR_DEFAULTS,\n configKey: 'servers',\n detect: detectVSCode,\n skillsCliAgent: 'github-copilot',\n },\n // Doc: https://code.visualstudio.com/docs/copilot/chat/mcp-servers\n // Path: <VS Code Insiders User dir>/mcp.json Key: servers\n 'VS Code Insiders': {\n ...EDITOR_DEFAULTS,\n configKey: 'servers',\n detect: detectVSCodeInsiders,\n skillsCliAgent: 'github-copilot',\n },\n // Doc: https://zed.dev/docs/assistant/model-context-protocol\n // Path: ~/.config/zed/settings.json (or $APPDATA/Zed on Windows) Key: context_servers\n // Zed doesn't support agent skills - https://github.com/zed-industries/zed/issues/49057\n Zed: {\n ...EDITOR_DEFAULTS,\n buildServerConfig: buildZedServerConfig,\n configKey: 'context_servers',\n detect: detectZed,\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\nexport function getSkillsCliAgent(editorName: EditorName): string | undefined {\n if (editorName in EDITOR_CONFIGS) {\n const config = EDITOR_CONFIGS[editorName]\n return 'skillsCliAgent' in config ? config.skillsCliAgent : undefined\n }\n}\n\n/**\n * Skills-CLI agent ID → display name. Mirrors `displayName` from\n * `~/git/skills/src/agents.ts` for the subset of agents we install for. Used\n * to match `skills list --json` output (which keys by display name) against\n * our editors.\n */\nconst SKILLS_CLI_AGENT_DISPLAY_NAMES: Record<string, string> = {\n antigravity: 'Antigravity',\n 'claude-code': 'Claude Code',\n cline: 'Cline',\n codex: 'Codex',\n cursor: 'Cursor',\n 'gemini-cli': 'Gemini CLI',\n 'github-copilot': 'GitHub Copilot',\n opencode: 'OpenCode',\n}\n\n/** Display name used by the skills CLI for the given editor, if it has a mapping. */\nexport function getSkillsCliAgentDisplayName(editorName: EditorName): string | undefined {\n const agent = getSkillsCliAgent(editorName)\n return agent ? SKILLS_CLI_AGENT_DISPLAY_NAMES[agent] : undefined\n}\n"],"names":["existsSync","os","path","execa","MCP_SERVER_URL","createDetectionEnv","env","process","execCommand","cmd","args","stdio","timeout","then","homedir","platform","defaultHttpConfig","token","defaultConfig","type","url","headers","Authorization","detectClaudeCode","ctx","join","detectAntigravity","antigravityDir","getVSCodeUserDir","variant","APPDATA","detectCline","vscodeUserDir","clineConfigDir","detectClineCli","clineHome","CLINE_DIR","detectCodexCli","codexHome","CODEX_HOME","detectCursor","cursorDir","detectGeminiCli","settingsPath","detectGitHubCopilotCli","copilotDir","XDG_CONFIG_HOME","detectOpenCode","detectVSCode","configDir","detectVSCodeInsiders","detectZed","detectMCPorter","mcporterDir","jsonPath","jsoncPath","extractBearerToken","undefined","auth","match","readTokenFromHeaders","serverConfig","readTokenFromHttpHeaders","http_headers","EDITOR_DEFAULTS","buildServerConfig","configKey","format","oauthOnly","readToken","buildAntigravityServerConfig","serverUrl","buildClineServerConfig","disabled","buildCodexCliServerConfig","buildGitHubCopilotCliServerConfig","tools","buildOpenCodeServerConfig","buildZedServerConfig","settings","EDITOR_CONFIGS","Antigravity","detect","skillsCliAgent","Cline","Cursor","MCPorter","OpenCode","Zed","getSkillsCliAgent","editorName","config","SKILLS_CLI_AGENT_DISPLAY_NAMES","antigravity","cline","codex","cursor","opencode","getSkillsCliAgentDisplayName","agent"],"mappings":"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"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { checkbox } from '@sanity/cli-core/ux';
|
|
2
|
-
function getEditorLabel(
|
|
2
|
+
function getEditorLabel(choice) {
|
|
3
|
+
const { action, editor } = choice;
|
|
4
|
+
if (action === 'skill-only') {
|
|
5
|
+
return `${editor.name} (skill only — MCP already configured)`;
|
|
6
|
+
}
|
|
3
7
|
if (editor.configured && editor.authStatus === 'unauthorized') {
|
|
4
8
|
return `${editor.name} (auth expired)`;
|
|
5
9
|
}
|
|
@@ -9,25 +13,26 @@ function getEditorLabel(editor) {
|
|
|
9
13
|
return editor.name;
|
|
10
14
|
}
|
|
11
15
|
/**
|
|
12
|
-
* Prompt user to select
|
|
16
|
+
* Prompt the user to select editors for MCP / skills setup. The caller is
|
|
17
|
+
* responsible for classifying editors into actions (see `EditorAction`) and
|
|
18
|
+
* for choosing an appropriate prompt message.
|
|
13
19
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*/ export async function promptForMCPSetup(
|
|
17
|
-
const editorChoices =
|
|
20
|
+
* Returns the subset of `choices` the user kept, or `null` when the user
|
|
21
|
+
* deselected everything.
|
|
22
|
+
*/ export async function promptForMCPSetup({ choices, message }) {
|
|
23
|
+
const editorChoices = choices.map((choice)=>({
|
|
18
24
|
checked: true,
|
|
19
|
-
name: getEditorLabel(
|
|
20
|
-
value:
|
|
25
|
+
name: getEditorLabel(choice),
|
|
26
|
+
value: choice.editor.name
|
|
21
27
|
}));
|
|
22
28
|
const selectedNames = await checkbox({
|
|
23
29
|
choices: editorChoices,
|
|
24
|
-
message
|
|
30
|
+
message
|
|
25
31
|
});
|
|
26
|
-
// User can deselect all to skip
|
|
27
32
|
if (!selectedNames || selectedNames.length === 0) {
|
|
28
33
|
return null;
|
|
29
34
|
}
|
|
30
|
-
return
|
|
35
|
+
return choices.filter((c)=>selectedNames.includes(c.editor.name));
|
|
31
36
|
}
|
|
32
37
|
|
|
33
38
|
//# sourceMappingURL=promptForMCPSetup.js.map
|
|
@@ -1 +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\nfunction getEditorLabel(
|
|
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/** Action to take for an editor in the combined MCP + skills setup prompt. */\nexport type EditorAction = 'mcp-and-skill' | 'mcp-only' | 'skill-only'\n\nexport interface EditorChoice {\n action: EditorAction\n editor: Editor\n}\n\nfunction getEditorLabel(choice: EditorChoice): string {\n const {action, editor} = choice\n if (action === 'skill-only') {\n return `${editor.name} (skill only — MCP already configured)`\n }\n if (editor.configured && editor.authStatus === 'unauthorized') {\n return `${editor.name} (auth expired)`\n }\n if (editor.configured && !editor.existingToken) {\n return `${editor.name} (missing credentials)`\n }\n return editor.name\n}\n\ninterface PromptOptions {\n choices: EditorChoice[]\n message: string\n}\n\n/**\n * Prompt the user to select editors for MCP / skills setup. The caller is\n * responsible for classifying editors into actions (see `EditorAction`) and\n * for choosing an appropriate prompt message.\n *\n * Returns the subset of `choices` the user kept, or `null` when the user\n * deselected everything.\n */\nexport async function promptForMCPSetup({\n choices,\n message,\n}: PromptOptions): Promise<EditorChoice[] | null> {\n const editorChoices = choices.map((choice) => ({\n checked: true,\n name: getEditorLabel(choice),\n value: choice.editor.name,\n }))\n\n const selectedNames = await checkbox({\n choices: editorChoices,\n message,\n })\n\n if (!selectedNames || selectedNames.length === 0) {\n return null\n }\n\n return choices.filter((c) => selectedNames.includes(c.editor.name))\n}\n"],"names":["checkbox","getEditorLabel","choice","action","editor","name","configured","authStatus","existingToken","promptForMCPSetup","choices","message","editorChoices","map","checked","value","selectedNames","length","filter","c","includes"],"mappings":"AAAA,SAAQA,QAAQ,QAAO,sBAAqB;AAY5C,SAASC,eAAeC,MAAoB;IAC1C,MAAM,EAACC,MAAM,EAAEC,MAAM,EAAC,GAAGF;IACzB,IAAIC,WAAW,cAAc;QAC3B,OAAO,GAAGC,OAAOC,IAAI,CAAC,sCAAsC,CAAC;IAC/D;IACA,IAAID,OAAOE,UAAU,IAAIF,OAAOG,UAAU,KAAK,gBAAgB;QAC7D,OAAO,GAAGH,OAAOC,IAAI,CAAC,eAAe,CAAC;IACxC;IACA,IAAID,OAAOE,UAAU,IAAI,CAACF,OAAOI,aAAa,EAAE;QAC9C,OAAO,GAAGJ,OAAOC,IAAI,CAAC,sBAAsB,CAAC;IAC/C;IACA,OAAOD,OAAOC,IAAI;AACpB;AAOA;;;;;;;CAOC,GACD,OAAO,eAAeI,kBAAkB,EACtCC,OAAO,EACPC,OAAO,EACO;IACd,MAAMC,gBAAgBF,QAAQG,GAAG,CAAC,CAACX,SAAY,CAAA;YAC7CY,SAAS;YACTT,MAAMJ,eAAeC;YACrBa,OAAOb,OAAOE,MAAM,CAACC,IAAI;QAC3B,CAAA;IAEA,MAAMW,gBAAgB,MAAMhB,SAAS;QACnCU,SAASE;QACTD;IACF;IAEA,IAAI,CAACK,iBAAiBA,cAAcC,MAAM,KAAK,GAAG;QAChD,OAAO;IACT;IAEA,OAAOP,QAAQQ,MAAM,CAAC,CAACC,IAAMH,cAAcI,QAAQ,CAACD,EAAEf,MAAM,CAACC,IAAI;AACnE"}
|