@teambit/host-initializer 0.0.703 → 0.0.705

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.
@@ -152,7 +152,7 @@ const handlePromptError = err => {
152
152
  throw err;
153
153
  };
154
154
  class HostInitializerMain {
155
- static async init(absPath, noGit = false, noPackageJson = false, reset = false, resetNew = false, resetLaneNew = false, resetHard = false, resetScope = false, force = false, workspaceConfigProps = {}, generator, agent) {
155
+ static async init(absPath, noGit = false, noPackageJson = false, reset = false, resetNew = false, resetLaneNew = false, resetHard = false, resetScope = false, force = false, workspaceConfigProps = {}, generator, agent, options = {}) {
156
156
  const consumerInfo = await (0, _workspaceModules().getWorkspaceInfo)(absPath || process.cwd());
157
157
  // if "bit init" was running without any flags, the user is probably trying to init a new workspace but wasn't aware
158
158
  // that he's already in a workspace.
@@ -192,20 +192,108 @@ class HostInitializerMain {
192
192
  const writtenConsumer = await consumer.write();
193
193
  const created = !consumerInfo?.path;
194
194
  let agentFileWritten;
195
+ let mcpFileWritten;
195
196
  if (created) {
196
197
  agentFileWritten = await HostInitializerMain.writeAgentInstructions(consumerPath, agent);
198
+ // Keep `.mcp.json` in sync with the agent template, which tells the
199
+ // agent that the workspace ships a Cloud MCP config. Skipped only when
200
+ // the caller (interactive init) knows the user explicitly opted out.
201
+ if (!options.skipDefaultMcp) {
202
+ mcpFileWritten = await HostInitializerMain.writeDefaultMcpConfig(consumerPath);
203
+ }
197
204
  }
198
205
  return {
199
206
  created,
200
207
  consumer: writtenConsumer,
201
- agentFileWritten
208
+ agentFileWritten,
209
+ mcpFileWritten
202
210
  };
203
211
  }
204
212
 
213
+ /**
214
+ * Write a baseline `.mcp.json` at the workspace root containing the
215
+ * Bit Cloud MCP server entry. This file is picked up automatically by
216
+ * Claude Code and Visual Studio 2026; other agents (Cursor, Windsurf,
217
+ * Copilot, Codex) need their own per-tool config, which the interactive
218
+ * init flow writes when the user picks one of them.
219
+ *
220
+ * Idempotent — `setupCloudMcp` merges into any existing `.mcp.json`,
221
+ * preserving other server entries.
222
+ */
223
+ static async writeDefaultMcpConfig(projectPath) {
224
+ try {
225
+ await _mcp().McpConfigWriter.setupCloudMcp('claude-code', projectPath);
226
+ return '.mcp.json';
227
+ } catch {
228
+ // Never fail init because of MCP file writing.
229
+ return undefined;
230
+ }
231
+ }
232
+
205
233
  /**
206
234
  * Supported agent targets and their output file paths (relative to workspace root).
207
235
  */
208
236
 
237
+ /**
238
+ * Read the AGENTS.md template that ships with this aspect, picking the
239
+ * Git-integrated variant when the workspace has a `.git` directory.
240
+ * The Git variant tells the agent to use Git branches and to leave
241
+ * `bit snap`/`bit export` to CI — the Bit-lanes workflow only applies
242
+ * to non-Git workspaces.
243
+ */
244
+ static async loadAgentsTemplate(projectPath) {
245
+ const isGit = await HostInitializerMain.hasGitDirectory(projectPath);
246
+ const templateName = isGit ? 'agents-template-git.md' : 'agents-template.md';
247
+ return _fsExtra().default.readFile(path().join(__dirname, templateName), 'utf8');
248
+ }
249
+
250
+ /**
251
+ * Write Cloud-MCP-compatible agent instructions for the selected editor.
252
+ * Body is the universal AGENTS.md template — not the CLI-MCP rules — so
253
+ * it doesn't reference tools that exist only on the local stdio server.
254
+ * Claude Code targets `.claude/rules/bit.md` (auto-loaded per its memory
255
+ * docs, no manual @-import needed). Cursor/Copilot reuse the existing
256
+ * per-editor rules paths with the Cloud content. Codex/Windsurf fall back
257
+ * to `AGENTS.md`.
258
+ */
259
+ static async writeMcpAgentRules(editor, projectPath) {
260
+ const content = await HostInitializerMain.loadAgentsTemplate(projectPath);
261
+ const editorLower = editor.toLowerCase();
262
+ if (editorLower === 'claude-code') {
263
+ const rel = path().join('.claude', 'rules', 'bit.md');
264
+ const abs = path().join(projectPath, rel);
265
+ await _fsExtra().default.ensureDir(path().dirname(abs));
266
+ await _fsExtra().default.writeFile(abs, content);
267
+ return rel;
268
+ }
269
+
270
+ // McpConfigWriter rules-file key for the small subset of Cloud editors
271
+ // whose existing rules paths already auto-load (Cursor via alwaysApply
272
+ // frontmatter, GitHub Copilot via applyTo).
273
+ const rulesEditor = {
274
+ cursor: 'cursor',
275
+ copilot: 'vscode'
276
+ }[editorLower];
277
+ if (rulesEditor) {
278
+ const absPath = await _mcp().McpConfigWriter.writeRulesFile(rulesEditor, {
279
+ isGlobal: false,
280
+ workspaceDir: projectPath,
281
+ content
282
+ });
283
+ return path().relative(projectPath, absPath);
284
+ }
285
+
286
+ // Codex / Windsurf — write AGENTS.md. skipGitCheck=true bypasses the
287
+ // git-presence guard in writeAgentInstructions, since the interactive
288
+ // flow only runs in git repos.
289
+ return HostInitializerMain.writeAgentInstructions(projectPath, undefined, true);
290
+ }
291
+
292
+ /**
293
+ * All known agent instruction file paths. Used to detect whether a workspace
294
+ * already contains any agent configuration.
295
+ */
296
+
209
297
  /**
210
298
  * Write AI agent instructions into the workspace.
211
299
  *
@@ -230,12 +318,7 @@ class HostInitializerMain {
230
318
  if (await HostInitializerMain.hasExistingAgentFile(projectPath)) return undefined;
231
319
  const targetFile = agent ? HostInitializerMain.AGENT_FILE_MAP[agent] : 'AGENTS.md';
232
320
  const targetPath = path().join(projectPath, targetFile);
233
-
234
- // Read the shared template content.
235
- const templatePath = path().join(__dirname, 'agents-template.md');
236
- const content = await _fsExtra().default.readFile(templatePath, 'utf8');
237
-
238
- // Some formats require frontmatter.
321
+ const content = await HostInitializerMain.loadAgentsTemplate(projectPath);
239
322
  const finalContent = HostInitializerMain.wrapWithFrontmatter(targetFile, content);
240
323
  await _fsExtra().default.ensureDir(path().dirname(targetPath));
241
324
  await _fsExtra().default.writeFile(targetPath, finalContent);
@@ -267,16 +350,12 @@ class HostInitializerMain {
267
350
  }
268
351
 
269
352
  /**
270
- * Check if the directory contains a .git folder
353
+ * Check whether the directory is inside a Git workspace.
354
+ * Accepts both `.git` as a directory (standard checkout) and `.git` as a
355
+ * file (Git worktrees and submodules store a `gitdir:` pointer file there).
271
356
  */
272
357
  static async hasGitDirectory(projectPath) {
273
- try {
274
- const gitPath = path().join(projectPath, '.git');
275
- const stat = await _fsExtra().default.stat(gitPath);
276
- return stat.isDirectory();
277
- } catch {
278
- return false;
279
- }
358
+ return _fsExtra().default.pathExists(path().join(projectPath, '.git'));
280
359
  }
281
360
 
282
361
  /**
@@ -350,14 +429,16 @@ class HostInitializerMain {
350
429
  }
351
430
 
352
431
  /**
353
- * Prompt user for MCP server configuration
432
+ * Prompt user for Cloud MCP configuration. Bit Cloud hosts an HTTP MCP
433
+ * server at https://mcp.bit.cloud/mcp — agents connect to it directly,
434
+ * no local `bit` process needed. See https://bit.cloud/docs/connect.
354
435
  */
355
436
  static async promptForMcpServer() {
356
437
  try {
357
438
  const setupMcp = await (0, _enquirer().prompt)({
358
439
  type: 'toggle',
359
440
  name: 'setupMcp',
360
- message: 'Would you like to set up the MCP server for AI-powered development?',
441
+ message: 'Would you like to connect Bit Cloud MCP to an AI coding agent?',
361
442
  enabled: 'Yes',
362
443
  disabled: 'No',
363
444
  cancel: promptCancel
@@ -366,8 +447,11 @@ class HostInitializerMain {
366
447
  return null;
367
448
  }
368
449
  const editorChoices = [{
369
- name: 'vscode',
370
- message: 'VS Code'
450
+ name: 'claude-code',
451
+ message: 'Claude Code'
452
+ }, {
453
+ name: 'codex',
454
+ message: 'Codex'
371
455
  }, {
372
456
  name: 'cursor',
373
457
  message: 'Cursor'
@@ -375,22 +459,15 @@ class HostInitializerMain {
375
459
  name: 'windsurf',
376
460
  message: 'Windsurf'
377
461
  }, {
378
- name: 'roo',
379
- message: 'Roo Code'
380
- }, {
381
- name: 'cline',
382
- message: 'Cline'
383
- }, {
384
- name: 'claude-code',
385
- message: 'Claude Code'
462
+ name: 'copilot',
463
+ message: 'GitHub Copilot'
386
464
  }];
387
465
  const editorResponse = await (0, _enquirer().prompt)({
388
466
  type: 'select',
389
467
  name: 'editor',
390
- message: 'Which editor would you like to configure?',
468
+ message: 'Which agent would you like to configure?',
391
469
  choices: editorChoices,
392
470
  initial: 0,
393
- // Default to VS Code
394
471
  cancel: promptCancel
395
472
  });
396
473
  return editorResponse.editor;
@@ -433,38 +510,45 @@ node_modules
433
510
  }
434
511
 
435
512
  /**
436
- * Set up MCP server configuration for the selected editor
513
+ * Write Bit Cloud MCP configuration for the selected agent.
514
+ * Cloud MCP is an HTTP server hosted by Bit, so no rules/instructions
515
+ * file is written — agents discover capabilities from the server itself.
437
516
  */
438
517
  static async setupMcpServer(editor, projectPath) {
439
- // Set up MCP server configuration
440
- const setupOptions = {
441
- isGlobal: false,
442
- workspaceDir: projectPath,
443
- consumerProject: false
444
- };
445
- await _mcp().McpConfigWriter.setupEditor(editor, setupOptions);
518
+ await _mcp().McpConfigWriter.setupCloudMcp(editor, projectPath);
519
+ }
446
520
 
447
- // Write rules file for the editor
448
- const rulesOptions = {
449
- isGlobal: false,
450
- workspaceDir: projectPath,
451
- consumerProject: false
452
- };
453
- await _mcp().McpConfigWriter.writeRulesFile(editor, rulesOptions);
521
+ /**
522
+ * Per-agent hint to verify the Cloud MCP connection and trigger the
523
+ * OAuth authentication flow. The MCP server requires auth via the
524
+ * `mcp:connect` scope — the agent surfaces the OAuth URL on first use.
525
+ */
526
+ static getMcpVerifyHint(editor) {
527
+ switch (editor.toLowerCase()) {
528
+ case 'claude-code':
529
+ return `Run ${_chalk().default.cyan('/mcp')} in Claude Code to verify the connection and authenticate`;
530
+ case 'cursor':
531
+ return `Open ${_chalk().default.cyan('Cursor Settings → MCP')} to verify the connection and authenticate`;
532
+ case 'windsurf':
533
+ return `Open ${_chalk().default.cyan('Windsurf Settings → MCP')} to verify the connection and authenticate`;
534
+ case 'copilot':
535
+ return `Run ${_chalk().default.cyan('MCP: List Servers')} from the VS Code command palette to verify the connection`;
536
+ case 'codex':
537
+ return `Restart Codex to load the MCP server; it will prompt for authentication on first use`;
538
+ default:
539
+ return `Open your agent's MCP settings to verify the connection`;
540
+ }
454
541
  }
455
542
 
456
543
  /**
457
- * Run interactive mode for Git repositories
544
+ * Run interactive mode for Git repositories.
545
+ * The caller (InitCmd) is responsible for invoking setupMcpServer
546
+ * when `mcpEditor` is returned, so the user sees a status line.
458
547
  */
459
548
  static async runInteractiveMode(projectPath) {
460
549
  const selectedEnv = await HostInitializerMain.promptForEnvironment();
461
550
  const useExternalPackageManager = await HostInitializerMain.promptForPackageManager();
462
551
  const mcpEditor = await HostInitializerMain.promptForMcpServer();
463
-
464
- // Set up MCP server if user selected an editor
465
- if (mcpEditor) {
466
- await HostInitializerMain.setupMcpServer(mcpEditor, projectPath);
467
- }
468
552
  await HostInitializerMain.updateGitignore(projectPath);
469
553
  return {
470
554
  generator: selectedEnv || undefined,
@@ -477,7 +561,7 @@ node_modules
477
561
  /**
478
562
  * Generate the final initialization message
479
563
  */
480
- static generateInitMessage(created, reset, resetHard, resetScope, interactiveConfig, agentFileWritten) {
564
+ static generateInitMessage(created, reset, resetHard, resetScope, interactiveConfig, agentFileWritten, mcpFileWritten) {
481
565
  let initMessage = (0, _cli().formatSuccessSummary)('initialized a bit workspace.');
482
566
  if (!created) initMessage = (0, _cli().formatHint)('successfully re-initialized a bit workspace.');
483
567
  if (reset) initMessage = (0, _cli().formatHint)('your bit workspace has been reset successfully.');
@@ -486,6 +570,9 @@ node_modules
486
570
  if (agentFileWritten) {
487
571
  initMessage += (0, _cli().formatHint)(`\n Created ${_chalk().default.cyan(agentFileWritten)} — instructions for AI agents working in this workspace`);
488
572
  }
573
+ if (mcpFileWritten) {
574
+ initMessage += (0, _cli().formatHint)(`\n Created ${_chalk().default.cyan(mcpFileWritten)} — Bit Cloud MCP for AI agents (picked up by Claude Code, Visual Studio)`);
575
+ }
489
576
 
490
577
  // Add additional information for interactive mode
491
578
  if (interactiveConfig) {
@@ -497,7 +584,10 @@ node_modules
497
584
  initMessage += `\n Environment: ${_chalk().default.cyan(interactiveConfig.generator)}`;
498
585
  }
499
586
  if (interactiveConfig.mcpEditor) {
500
- initMessage += `\n MCP server configured for: ${_chalk().default.cyan(interactiveConfig.mcpEditor)}`;
587
+ const displayName = _mcp().McpConfigWriter.getEditorDisplayName(interactiveConfig.mcpEditor);
588
+ initMessage += `\n Bit Cloud MCP connected to: ${_chalk().default.cyan(displayName)}`;
589
+ const verifyHint = HostInitializerMain.getMcpVerifyHint(interactiveConfig.mcpEditor);
590
+ if (verifyHint) initMessage += (0, _cli().formatHint)(`\n ${verifyHint}`);
501
591
  }
502
592
  if (interactiveConfig.externalPackageManager) {
503
593
  initMessage += `\n External package manager mode enabled`;
@@ -522,10 +612,6 @@ _defineProperty(HostInitializerMain, "AGENT_FILE_MAP", {
522
612
  cursor: '.cursor/rules/bit.mdc',
523
613
  copilot: '.github/copilot-instructions.md'
524
614
  });
525
- /**
526
- * All known agent instruction file paths. Used to detect whether a workspace
527
- * already contains any agent configuration.
528
- */
529
615
  _defineProperty(HostInitializerMain, "ALL_AGENT_FILES", ['AGENTS.md', 'CLAUDE.md', '.cursorrules', '.cursor/rules', '.github/copilot-instructions.md']);
530
616
  _defineProperty(HostInitializerMain, "slots", []);
531
617
  _defineProperty(HostInitializerMain, "dependencies", [_cli().CLIAspect, _logger().LoggerAspect]);
@@ -1 +1 @@
1
- {"version":3,"names":["_fsExtra","data","_interopRequireDefault","require","path","_interopRequireWildcard","_chalk","_enquirer","_scopeModules","_workspaceModules","_legacy","_objects","_toolboxFs","_config","_mcp","_cli","_objectsWithoutConsumer","_hostInitializer","_initCmd","_createConsumer","_logger","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","promptCancel","handlePromptError","err","Error","HostInitializerMain","init","absPath","noGit","noPackageJson","reset","resetNew","resetLaneNew","resetHard","resetScope","force","workspaceConfigProps","generator","agent","consumerInfo","getWorkspaceInfo","process","cwd","consumerPath","name","basename","resetConsumer","consumer","createConsumer","scopePath","findScopePath","Scope","throwForOutOfSyncScope","writtenConsumer","write","created","agentFileWritten","writeAgentInstructions","projectPath","skipGitCheck","AGENT_FILE_MAP","supported","join","hasGitDirectory","undefined","hasExistingAgentFile","targetFile","targetPath","templatePath","__dirname","content","fs","readFile","finalContent","wrapWithFrontmatter","ensureDir","dirname","writeFile","rel","ALL_AGENT_FILES","pathExists","gitPath","stat","isDirectory","hasWorkspaceInitialized","isExist","WorkspaceConfig","Boolean","promptForEnvironment","envChoices","message","response","prompt","type","choices","initial","cancel","environment","promptForPackageManager","enabled","disabled","useExternalPackageManager","promptForMcpServer","setupMcp","editorChoices","editorResponse","editor","updateGitignore","gitignorePath","bitGitignoreSection","exists","includes","appendFile","trim","setupMcpServer","setupOptions","isGlobal","workspaceDir","consumerProject","McpConfigWriter","setupEditor","rulesOptions","writeRulesFile","runInteractiveMode","selectedEnv","mcpEditor","externalPackageManager","defaultDirectory","generateInitMessage","interactiveConfig","initMessage","formatSuccessSummary","formatHint","chalk","cyan","formatTitle","provider","cli","loggerMain","logger","createLogger","HostInitializerAspect","id","hostInitializerMain","initCmd","InitCmd","register","exports","claude","cursor","copilot","CLIAspect","LoggerAspect","MainRuntime","addRuntime","_default","bitMap","isEmpty","scope","getPath","objectsPath","Repository","getPathByScopePath","dirExist","hasObjects","isDirEmpty","ObjectsWithoutConsumer"],"sources":["host-initializer.main.runtime.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport * as path from 'path';\nimport chalk from 'chalk';\nimport { prompt } from 'enquirer';\nimport { findScopePath } from '@teambit/scope.modules.find-scope-path';\nimport type { Consumer } from '@teambit/legacy.consumer';\nimport { getWorkspaceInfo } from '@teambit/workspace.modules.workspace-locator';\nimport { Scope } from '@teambit/legacy.scope';\nimport { Repository } from '@teambit/objects';\nimport { isDirEmpty } from '@teambit/toolbox.fs.is-dir-empty';\nimport type { WorkspaceExtensionProps } from '@teambit/config';\nimport { WorkspaceConfig } from '@teambit/config';\nimport type { SetupOptions, RulesOptions } from '@teambit/mcp.mcp-config-writer';\nimport { McpConfigWriter } from '@teambit/mcp.mcp-config-writer';\nimport type { CLIMain } from '@teambit/cli';\nimport { CLIAspect, MainRuntime, formatSuccessSummary, formatHint, formatTitle } from '@teambit/cli';\nimport { ObjectsWithoutConsumer } from './objects-without-consumer';\nimport { HostInitializerAspect } from './host-initializer.aspect';\nimport { InitCmd } from './init-cmd';\nimport { createConsumer, resetConsumer } from './create-consumer';\nimport type { LoggerMain } from '@teambit/logger';\nimport { LoggerAspect } from '@teambit/logger';\n\nexport interface InteractiveConfig {\n generator?: string;\n externalPackageManager: boolean;\n defaultDirectory: string;\n mcpEditor?: string;\n}\n\n/**\n * Reusable cancel function for prompts\n * By default, canceling the prompt via Ctrl+c throws an empty string.\n * The custom cancel function prevents that behavior.\n * Otherwise, Bit CLI would print an error and confuse users.\n * See related issue: https://github.com/enquirer/enquirer/issues/225\n */\nconst promptCancel = () => {\n // Empty function to prevent default behavior\n};\n\n/**\n * Handle prompt errors consistently\n */\nconst handlePromptError = (err: any): never => {\n if (!err || err === '') {\n // for some reason, when the user clicks Ctrl+C, the error is an empty string\n throw new Error('The prompt has been canceled');\n }\n throw err;\n};\n\nexport class HostInitializerMain {\n static async init(\n absPath?: string,\n noGit = false,\n noPackageJson = false,\n reset = false,\n resetNew = false,\n resetLaneNew = false,\n resetHard = false,\n resetScope = false,\n force = false,\n workspaceConfigProps: WorkspaceExtensionProps = {},\n generator?: string,\n agent?: string\n ): Promise<{ created: boolean; consumer: Consumer; agentFileWritten?: string }> {\n const consumerInfo = await getWorkspaceInfo(absPath || process.cwd());\n // if \"bit init\" was running without any flags, the user is probably trying to init a new workspace but wasn't aware\n // that he's already in a workspace.\n if (\n !absPath &&\n consumerInfo?.path &&\n consumerInfo.path !== process.cwd() &&\n !reset &&\n !resetHard &&\n !resetScope &&\n !resetNew &&\n !resetLaneNew\n ) {\n throw new Error(\n `error: unable to init a new workspace in an inner directory of an existing workspace at \"${consumerInfo.path}\"`\n );\n }\n const consumerPath = consumerInfo?.path || absPath || process.cwd();\n\n workspaceConfigProps = {\n ...workspaceConfigProps,\n name: workspaceConfigProps.name || path.basename(consumerPath),\n };\n\n if (reset || resetHard) {\n await resetConsumer(consumerPath, resetHard, noGit);\n }\n let consumer: Consumer | undefined;\n try {\n consumer = await createConsumer(consumerPath, noGit, noPackageJson, workspaceConfigProps, generator);\n } catch {\n // it's possible that at this stage the consumer fails to load due to scope issues.\n // still we want to load it to include its instance of \"scope.json\", so then later when \"consumer.write()\", we\n // don't lose some scope metadata\n }\n if (resetScope) {\n const scopePath = findScopePath(consumerPath);\n if (!scopePath) throw new Error(`fatal: scope not found in the path: ${consumerPath}`);\n await Scope.reset(scopePath, true);\n }\n if (!consumer) consumer = await createConsumer(consumerPath, noGit, noPackageJson, workspaceConfigProps);\n if (!force && !resetScope) {\n await throwForOutOfSyncScope(consumer);\n }\n if (resetNew) {\n await consumer.resetNew();\n }\n if (resetLaneNew) {\n await consumer.resetLaneNew();\n }\n const writtenConsumer = await consumer.write();\n const created = !consumerInfo?.path;\n let agentFileWritten: string | undefined;\n if (created) {\n agentFileWritten = await HostInitializerMain.writeAgentInstructions(consumerPath, agent);\n }\n return { created, consumer: writtenConsumer, agentFileWritten };\n }\n\n /**\n * Supported agent targets and their output file paths (relative to workspace root).\n */\n static readonly AGENT_FILE_MAP: Record<string, string> = {\n claude: 'CLAUDE.md',\n cursor: '.cursor/rules/bit.mdc',\n copilot: '.github/copilot-instructions.md',\n };\n\n /**\n * All known agent instruction file paths. Used to detect whether a workspace\n * already contains any agent configuration.\n */\n static readonly ALL_AGENT_FILES = [\n 'AGENTS.md',\n 'CLAUDE.md',\n '.cursorrules',\n '.cursor/rules',\n '.github/copilot-instructions.md',\n ];\n\n /**\n * Write AI agent instructions into the workspace.\n *\n * - Skips if .git exists (git repos use the interactive init flow).\n * - Skips if any known agent instruction file already exists.\n * - When `agent` is provided, writes to the tool-specific path (e.g. CLAUDE.md).\n * - When `agent` is omitted, writes the universal AGENTS.md.\n *\n * Returns the relative path of the file written, or undefined if skipped.\n */\n static async writeAgentInstructions(\n projectPath: string,\n agent?: string,\n skipGitCheck = false\n ): Promise<string | undefined> {\n if (agent && !HostInitializerMain.AGENT_FILE_MAP[agent]) {\n const supported = Object.keys(HostInitializerMain.AGENT_FILE_MAP).join(', ');\n throw new Error(`unknown --agent value \"${agent}\". supported values: ${supported}`);\n }\n try {\n // Don't write in git repos — they use the interactive flow.\n // Callers like `bit new` set skipGitCheck because they always create a fresh workspace.\n if (!skipGitCheck && (await HostInitializerMain.hasGitDirectory(projectPath))) return undefined;\n\n // Don't write if any agent file already exists.\n if (await HostInitializerMain.hasExistingAgentFile(projectPath)) return undefined;\n\n const targetFile = agent ? HostInitializerMain.AGENT_FILE_MAP[agent] : 'AGENTS.md';\n const targetPath = path.join(projectPath, targetFile);\n\n // Read the shared template content.\n const templatePath = path.join(__dirname, 'agents-template.md');\n const content = await fs.readFile(templatePath, 'utf8');\n\n // Some formats require frontmatter.\n const finalContent = HostInitializerMain.wrapWithFrontmatter(targetFile, content);\n\n await fs.ensureDir(path.dirname(targetPath));\n await fs.writeFile(targetPath, finalContent);\n return targetFile;\n } catch {\n // Don't fail initialization if the agent file cannot be written.\n return undefined;\n }\n }\n\n /**\n * Check if any known agent instruction file or directory already exists.\n */\n static async hasExistingAgentFile(projectPath: string): Promise<boolean> {\n for (const rel of HostInitializerMain.ALL_AGENT_FILES) {\n if (await fs.pathExists(path.join(projectPath, rel))) return true;\n }\n return false;\n }\n\n /**\n * Wrap template content with tool-specific frontmatter where required.\n */\n static wrapWithFrontmatter(targetFile: string, content: string): string {\n if (targetFile === '.cursor/rules/bit.mdc') {\n return ['---', 'description: Bit workspace instructions', 'alwaysApply: true', '---', '', content].join('\\n');\n }\n return content;\n }\n\n /**\n * Check if the directory contains a .git folder\n */\n static async hasGitDirectory(projectPath: string): Promise<boolean> {\n try {\n const gitPath = path.join(projectPath, '.git');\n const stat = await fs.stat(gitPath);\n return stat.isDirectory();\n } catch {\n return false;\n }\n }\n\n /**\n * Check if the directory already has a bit workspace initialized\n */\n static async hasWorkspaceInitialized(projectPath: string): Promise<boolean> {\n try {\n const isExist = await WorkspaceConfig.isExist(projectPath);\n return Boolean(isExist);\n } catch {\n return false;\n }\n }\n\n /**\n * Prompt user for environment selection\n */\n static async promptForEnvironment(): Promise<string | null> {\n const envChoices = [\n { name: 'none', message: 'None (default)' },\n { name: 'bitdev.node/node-env', message: 'Node.js environment' },\n { name: 'bitdev.react/react-env', message: 'React environment' },\n { name: 'bitdev.vue/vue-env', message: 'Vue environment' },\n { name: 'bitdev.angular/angular-env', message: 'Angular environment' },\n { name: 'bitdev.symphony/envs/symphony-env', message: 'Symphony environment' },\n ];\n\n try {\n const response = (await prompt({\n type: 'select',\n name: 'environment',\n message: 'Which environment would you like to use?',\n choices: envChoices,\n initial: 0, // Default to 'none'\n cancel: promptCancel,\n } as any)) as { environment: string };\n\n return response.environment === 'none' ? null : response.environment;\n } catch (err: any) {\n return handlePromptError(err);\n }\n }\n\n /**\n * Prompt user for package manager preference\n */\n static async promptForPackageManager(): Promise<boolean> {\n try {\n const response = (await prompt({\n type: 'toggle',\n name: 'useExternalPackageManager',\n message: 'Would you like to use your own package manager (npm/yarn/pnpm) instead of Bit?',\n enabled: 'Yes',\n disabled: 'No',\n cancel: promptCancel,\n } as any)) as { useExternalPackageManager: boolean };\n\n return response.useExternalPackageManager;\n } catch (err: any) {\n return handlePromptError(err);\n }\n }\n\n /**\n * Prompt user for MCP server configuration\n */\n static async promptForMcpServer(): Promise<string | null> {\n try {\n const setupMcp = (await prompt({\n type: 'toggle',\n name: 'setupMcp',\n message: 'Would you like to set up the MCP server for AI-powered development?',\n enabled: 'Yes',\n disabled: 'No',\n cancel: promptCancel,\n } as any)) as { setupMcp: boolean };\n\n if (!setupMcp.setupMcp) {\n return null;\n }\n\n const editorChoices = [\n { name: 'vscode', message: 'VS Code' },\n { name: 'cursor', message: 'Cursor' },\n { name: 'windsurf', message: 'Windsurf' },\n { name: 'roo', message: 'Roo Code' },\n { name: 'cline', message: 'Cline' },\n { name: 'claude-code', message: 'Claude Code' },\n ];\n\n const editorResponse = (await prompt({\n type: 'select',\n name: 'editor',\n message: 'Which editor would you like to configure?',\n choices: editorChoices,\n initial: 0, // Default to VS Code\n cancel: promptCancel,\n } as any)) as { editor: string };\n\n return editorResponse.editor;\n } catch (err: any) {\n return handlePromptError(err);\n }\n }\n\n /**\n * Create or update .gitignore file with Bit-specific entries\n */\n static async updateGitignore(projectPath: string): Promise<void> {\n const gitignorePath = path.join(projectPath, '.gitignore');\n const bitGitignoreSection = `\n# Bit\n.bit\npublic\n# Bit files - generated during bit ws-config write command\ntsconfig.json\n.eslintrc.json\n.prettierrc.cjs\n# allow tsconfig from the env's config dir to be tracked\n!**/config/tsconfig.json\nnode_modules\n`;\n try {\n const exists = await fs.pathExists(gitignorePath);\n if (exists) {\n const content = await fs.readFile(gitignorePath, 'utf8');\n if (!content.includes('# Bit')) {\n await fs.appendFile(gitignorePath, bitGitignoreSection);\n }\n } else {\n await fs.writeFile(gitignorePath, bitGitignoreSection.trim());\n }\n } catch {\n // Don't fail the initialization if gitignore update fails\n // Note: Console logging is handled by the caller\n }\n }\n\n /**\n * Set up MCP server configuration for the selected editor\n */\n static async setupMcpServer(editor: string, projectPath: string): Promise<void> {\n // Set up MCP server configuration\n const setupOptions: SetupOptions = {\n isGlobal: false,\n workspaceDir: projectPath,\n consumerProject: false,\n };\n\n await McpConfigWriter.setupEditor(editor, setupOptions);\n\n // Write rules file for the editor\n const rulesOptions: RulesOptions = {\n isGlobal: false,\n workspaceDir: projectPath,\n consumerProject: false,\n };\n\n await McpConfigWriter.writeRulesFile(editor, rulesOptions);\n }\n\n /**\n * Run interactive mode for Git repositories\n */\n static async runInteractiveMode(projectPath: string): Promise<InteractiveConfig> {\n const selectedEnv = await HostInitializerMain.promptForEnvironment();\n const useExternalPackageManager = await HostInitializerMain.promptForPackageManager();\n const mcpEditor = await HostInitializerMain.promptForMcpServer();\n\n // Set up MCP server if user selected an editor\n if (mcpEditor) {\n await HostInitializerMain.setupMcpServer(mcpEditor, projectPath);\n }\n\n await HostInitializerMain.updateGitignore(projectPath);\n\n return {\n generator: selectedEnv || undefined,\n externalPackageManager: useExternalPackageManager,\n defaultDirectory: 'bit-components/{scope}/{name}',\n mcpEditor: mcpEditor || undefined,\n };\n }\n\n /**\n * Generate the final initialization message\n */\n static generateInitMessage(\n created: boolean,\n reset: boolean,\n resetHard: boolean,\n resetScope: boolean,\n interactiveConfig: InteractiveConfig | null,\n agentFileWritten?: string\n ): string {\n let initMessage = formatSuccessSummary('initialized a bit workspace.');\n\n if (!created) initMessage = formatHint('successfully re-initialized a bit workspace.');\n if (reset) initMessage = formatHint('your bit workspace has been reset successfully.');\n if (resetHard) initMessage = formatHint('your bit workspace has been hard-reset successfully.');\n if (resetScope) initMessage = formatHint('your local scope has been reset successfully.');\n\n if (agentFileWritten) {\n initMessage += formatHint(\n `\\n Created ${chalk.cyan(agentFileWritten)} — instructions for AI agents working in this workspace`\n );\n }\n\n // Add additional information for interactive mode\n if (interactiveConfig) {\n initMessage += `\\n\\n${formatTitle('Additional Information')}`;\n const defaultDirectory = interactiveConfig?.defaultDirectory || 'bit-components/{scope}/{name}';\n initMessage += `\\n Components will be created in: ${chalk.cyan(defaultDirectory)}`;\n initMessage += `\\n For CI/CD setup, visit: https://bit.dev/docs/getting-started/collaborate/exporting-components#custom-ci/cd-setup`;\n\n if (interactiveConfig.generator) {\n initMessage += `\\n Environment: ${chalk.cyan(interactiveConfig.generator)}`;\n }\n\n if (interactiveConfig.mcpEditor) {\n initMessage += `\\n MCP server configured for: ${chalk.cyan(interactiveConfig.mcpEditor)}`;\n }\n\n if (interactiveConfig.externalPackageManager) {\n initMessage += `\\n External package manager mode enabled`;\n initMessage += formatHint(\n `\\n Run ${chalk.cyan('pnpm install')} (or ${chalk.cyan('yarn install')}/${chalk.cyan('npm install')}) to install dependencies`\n );\n } else if (interactiveConfig.generator) {\n initMessage += formatHint(`\\n Run ${chalk.cyan('bit install')} to install dependencies`);\n }\n }\n\n return initMessage;\n }\n\n static slots = [];\n static dependencies = [CLIAspect, LoggerAspect];\n static runtime = MainRuntime;\n static async provider([cli, loggerMain]: [CLIMain, LoggerMain]) {\n const logger = loggerMain.createLogger(HostInitializerAspect.id);\n const hostInitializerMain = new HostInitializerMain();\n const initCmd = new InitCmd(hostInitializerMain, logger);\n cli.register(initCmd);\n return hostInitializerMain;\n }\n}\n\nHostInitializerAspect.addRuntime(HostInitializerMain);\n\nexport default HostInitializerMain;\n\n/**\n * throw an error when .bitmap is empty but a scope has objects.\n * a user may got into this state for reasons such as:\n * 1. deleting manually .bitmap hoping to re-start Bit from scratch. (probably unaware of `--reset-hard` flag).\n * 2. switching to a branch where Bit wasn't initialized\n * in which case, it's better to stop and show an error describing what needs to be done.\n * it can always be ignored by entering `--force` flag.\n */\nasync function throwForOutOfSyncScope(consumer: Consumer): Promise<void> {\n if (!consumer.bitMap.isEmpty()) return;\n const scopePath = consumer.scope.getPath();\n const objectsPath = Repository.getPathByScopePath(scopePath);\n const dirExist = await fs.pathExists(objectsPath);\n if (!dirExist) return;\n const hasObjects = !(await isDirEmpty(objectsPath));\n if (hasObjects) {\n throw new ObjectsWithoutConsumer(scopePath);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_fsExtra","data","_interopRequireDefault","require","path","_interopRequireWildcard","_chalk","_enquirer","_scopeModules","_workspaceModules","_legacy","_objects","_toolboxFs","_config","_mcp","_cli","_objectsWithoutConsumer","_hostInitializer","_initCmd","_createConsumer","_logger","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","promptCancel","handlePromptError","err","Error","HostInitializerMain","init","absPath","noGit","noPackageJson","reset","resetNew","resetLaneNew","resetHard","resetScope","force","workspaceConfigProps","generator","agent","options","consumerInfo","getWorkspaceInfo","process","cwd","consumerPath","name","basename","resetConsumer","consumer","createConsumer","scopePath","findScopePath","Scope","throwForOutOfSyncScope","writtenConsumer","write","created","agentFileWritten","mcpFileWritten","writeAgentInstructions","skipDefaultMcp","writeDefaultMcpConfig","projectPath","McpConfigWriter","setupCloudMcp","undefined","loadAgentsTemplate","isGit","hasGitDirectory","templateName","fs","readFile","join","__dirname","writeMcpAgentRules","editor","content","editorLower","toLowerCase","rel","abs","ensureDir","dirname","writeFile","rulesEditor","cursor","copilot","writeRulesFile","isGlobal","workspaceDir","relative","skipGitCheck","AGENT_FILE_MAP","supported","hasExistingAgentFile","targetFile","targetPath","finalContent","wrapWithFrontmatter","ALL_AGENT_FILES","pathExists","hasWorkspaceInitialized","isExist","WorkspaceConfig","Boolean","promptForEnvironment","envChoices","message","response","prompt","type","choices","initial","cancel","environment","promptForPackageManager","enabled","disabled","useExternalPackageManager","promptForMcpServer","setupMcp","editorChoices","editorResponse","updateGitignore","gitignorePath","bitGitignoreSection","exists","includes","appendFile","trim","setupMcpServer","getMcpVerifyHint","chalk","cyan","runInteractiveMode","selectedEnv","mcpEditor","externalPackageManager","defaultDirectory","generateInitMessage","interactiveConfig","initMessage","formatSuccessSummary","formatHint","formatTitle","displayName","getEditorDisplayName","verifyHint","provider","cli","loggerMain","logger","createLogger","HostInitializerAspect","id","hostInitializerMain","initCmd","InitCmd","register","exports","claude","CLIAspect","LoggerAspect","MainRuntime","addRuntime","_default","bitMap","isEmpty","scope","getPath","objectsPath","Repository","getPathByScopePath","dirExist","hasObjects","isDirEmpty","ObjectsWithoutConsumer"],"sources":["host-initializer.main.runtime.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport * as path from 'path';\nimport chalk from 'chalk';\nimport { prompt } from 'enquirer';\nimport { findScopePath } from '@teambit/scope.modules.find-scope-path';\nimport type { Consumer } from '@teambit/legacy.consumer';\nimport { getWorkspaceInfo } from '@teambit/workspace.modules.workspace-locator';\nimport { Scope } from '@teambit/legacy.scope';\nimport { Repository } from '@teambit/objects';\nimport { isDirEmpty } from '@teambit/toolbox.fs.is-dir-empty';\nimport type { WorkspaceExtensionProps } from '@teambit/config';\nimport { WorkspaceConfig } from '@teambit/config';\nimport { McpConfigWriter } from '@teambit/mcp.mcp-config-writer';\nimport type { CLIMain } from '@teambit/cli';\nimport { CLIAspect, MainRuntime, formatSuccessSummary, formatHint, formatTitle } from '@teambit/cli';\nimport { ObjectsWithoutConsumer } from './objects-without-consumer';\nimport { HostInitializerAspect } from './host-initializer.aspect';\nimport { InitCmd } from './init-cmd';\nimport { createConsumer, resetConsumer } from './create-consumer';\nimport type { LoggerMain } from '@teambit/logger';\nimport { LoggerAspect } from '@teambit/logger';\n\nexport interface InteractiveConfig {\n generator?: string;\n externalPackageManager: boolean;\n defaultDirectory: string;\n mcpEditor?: string;\n /** Relative path of the agent instructions file written in the interactive flow. */\n agentFileWritten?: string;\n}\n\n/**\n * Reusable cancel function for prompts\n * By default, canceling the prompt via Ctrl+c throws an empty string.\n * The custom cancel function prevents that behavior.\n * Otherwise, Bit CLI would print an error and confuse users.\n * See related issue: https://github.com/enquirer/enquirer/issues/225\n */\nconst promptCancel = () => {\n // Empty function to prevent default behavior\n};\n\n/**\n * Handle prompt errors consistently\n */\nconst handlePromptError = (err: any): never => {\n if (!err || err === '') {\n // for some reason, when the user clicks Ctrl+C, the error is an empty string\n throw new Error('The prompt has been canceled');\n }\n throw err;\n};\n\nexport class HostInitializerMain {\n static async init(\n absPath?: string,\n noGit = false,\n noPackageJson = false,\n reset = false,\n resetNew = false,\n resetLaneNew = false,\n resetHard = false,\n resetScope = false,\n force = false,\n workspaceConfigProps: WorkspaceExtensionProps = {},\n generator?: string,\n agent?: string,\n options: { skipDefaultMcp?: boolean } = {}\n ): Promise<{ created: boolean; consumer: Consumer; agentFileWritten?: string; mcpFileWritten?: string }> {\n const consumerInfo = await getWorkspaceInfo(absPath || process.cwd());\n // if \"bit init\" was running without any flags, the user is probably trying to init a new workspace but wasn't aware\n // that he's already in a workspace.\n if (\n !absPath &&\n consumerInfo?.path &&\n consumerInfo.path !== process.cwd() &&\n !reset &&\n !resetHard &&\n !resetScope &&\n !resetNew &&\n !resetLaneNew\n ) {\n throw new Error(\n `error: unable to init a new workspace in an inner directory of an existing workspace at \"${consumerInfo.path}\"`\n );\n }\n const consumerPath = consumerInfo?.path || absPath || process.cwd();\n\n workspaceConfigProps = {\n ...workspaceConfigProps,\n name: workspaceConfigProps.name || path.basename(consumerPath),\n };\n\n if (reset || resetHard) {\n await resetConsumer(consumerPath, resetHard, noGit);\n }\n let consumer: Consumer | undefined;\n try {\n consumer = await createConsumer(consumerPath, noGit, noPackageJson, workspaceConfigProps, generator);\n } catch {\n // it's possible that at this stage the consumer fails to load due to scope issues.\n // still we want to load it to include its instance of \"scope.json\", so then later when \"consumer.write()\", we\n // don't lose some scope metadata\n }\n if (resetScope) {\n const scopePath = findScopePath(consumerPath);\n if (!scopePath) throw new Error(`fatal: scope not found in the path: ${consumerPath}`);\n await Scope.reset(scopePath, true);\n }\n if (!consumer) consumer = await createConsumer(consumerPath, noGit, noPackageJson, workspaceConfigProps);\n if (!force && !resetScope) {\n await throwForOutOfSyncScope(consumer);\n }\n if (resetNew) {\n await consumer.resetNew();\n }\n if (resetLaneNew) {\n await consumer.resetLaneNew();\n }\n const writtenConsumer = await consumer.write();\n const created = !consumerInfo?.path;\n let agentFileWritten: string | undefined;\n let mcpFileWritten: string | undefined;\n if (created) {\n agentFileWritten = await HostInitializerMain.writeAgentInstructions(consumerPath, agent);\n // Keep `.mcp.json` in sync with the agent template, which tells the\n // agent that the workspace ships a Cloud MCP config. Skipped only when\n // the caller (interactive init) knows the user explicitly opted out.\n if (!options.skipDefaultMcp) {\n mcpFileWritten = await HostInitializerMain.writeDefaultMcpConfig(consumerPath);\n }\n }\n return { created, consumer: writtenConsumer, agentFileWritten, mcpFileWritten };\n }\n\n /**\n * Write a baseline `.mcp.json` at the workspace root containing the\n * Bit Cloud MCP server entry. This file is picked up automatically by\n * Claude Code and Visual Studio 2026; other agents (Cursor, Windsurf,\n * Copilot, Codex) need their own per-tool config, which the interactive\n * init flow writes when the user picks one of them.\n *\n * Idempotent — `setupCloudMcp` merges into any existing `.mcp.json`,\n * preserving other server entries.\n */\n static async writeDefaultMcpConfig(projectPath: string): Promise<string | undefined> {\n try {\n await McpConfigWriter.setupCloudMcp('claude-code', projectPath);\n return '.mcp.json';\n } catch {\n // Never fail init because of MCP file writing.\n return undefined;\n }\n }\n\n /**\n * Supported agent targets and their output file paths (relative to workspace root).\n */\n static readonly AGENT_FILE_MAP: Record<string, string> = {\n claude: 'CLAUDE.md',\n cursor: '.cursor/rules/bit.mdc',\n copilot: '.github/copilot-instructions.md',\n };\n\n /**\n * Read the AGENTS.md template that ships with this aspect, picking the\n * Git-integrated variant when the workspace has a `.git` directory.\n * The Git variant tells the agent to use Git branches and to leave\n * `bit snap`/`bit export` to CI — the Bit-lanes workflow only applies\n * to non-Git workspaces.\n */\n private static async loadAgentsTemplate(projectPath: string): Promise<string> {\n const isGit = await HostInitializerMain.hasGitDirectory(projectPath);\n const templateName = isGit ? 'agents-template-git.md' : 'agents-template.md';\n return fs.readFile(path.join(__dirname, templateName), 'utf8');\n }\n\n /**\n * Write Cloud-MCP-compatible agent instructions for the selected editor.\n * Body is the universal AGENTS.md template — not the CLI-MCP rules — so\n * it doesn't reference tools that exist only on the local stdio server.\n * Claude Code targets `.claude/rules/bit.md` (auto-loaded per its memory\n * docs, no manual @-import needed). Cursor/Copilot reuse the existing\n * per-editor rules paths with the Cloud content. Codex/Windsurf fall back\n * to `AGENTS.md`.\n */\n static async writeMcpAgentRules(editor: string, projectPath: string): Promise<string | undefined> {\n const content = await HostInitializerMain.loadAgentsTemplate(projectPath);\n const editorLower = editor.toLowerCase();\n\n if (editorLower === 'claude-code') {\n const rel = path.join('.claude', 'rules', 'bit.md');\n const abs = path.join(projectPath, rel);\n await fs.ensureDir(path.dirname(abs));\n await fs.writeFile(abs, content);\n return rel;\n }\n\n // McpConfigWriter rules-file key for the small subset of Cloud editors\n // whose existing rules paths already auto-load (Cursor via alwaysApply\n // frontmatter, GitHub Copilot via applyTo).\n const rulesEditor = { cursor: 'cursor', copilot: 'vscode' }[editorLower];\n if (rulesEditor) {\n const absPath = await McpConfigWriter.writeRulesFile(rulesEditor, {\n isGlobal: false,\n workspaceDir: projectPath,\n content,\n });\n return path.relative(projectPath, absPath);\n }\n\n // Codex / Windsurf — write AGENTS.md. skipGitCheck=true bypasses the\n // git-presence guard in writeAgentInstructions, since the interactive\n // flow only runs in git repos.\n return HostInitializerMain.writeAgentInstructions(projectPath, undefined, true);\n }\n\n /**\n * All known agent instruction file paths. Used to detect whether a workspace\n * already contains any agent configuration.\n */\n static readonly ALL_AGENT_FILES = [\n 'AGENTS.md',\n 'CLAUDE.md',\n '.cursorrules',\n '.cursor/rules',\n '.github/copilot-instructions.md',\n ];\n\n /**\n * Write AI agent instructions into the workspace.\n *\n * - Skips if .git exists (git repos use the interactive init flow).\n * - Skips if any known agent instruction file already exists.\n * - When `agent` is provided, writes to the tool-specific path (e.g. CLAUDE.md).\n * - When `agent` is omitted, writes the universal AGENTS.md.\n *\n * Returns the relative path of the file written, or undefined if skipped.\n */\n static async writeAgentInstructions(\n projectPath: string,\n agent?: string,\n skipGitCheck = false\n ): Promise<string | undefined> {\n if (agent && !HostInitializerMain.AGENT_FILE_MAP[agent]) {\n const supported = Object.keys(HostInitializerMain.AGENT_FILE_MAP).join(', ');\n throw new Error(`unknown --agent value \"${agent}\". supported values: ${supported}`);\n }\n try {\n // Don't write in git repos — they use the interactive flow.\n // Callers like `bit new` set skipGitCheck because they always create a fresh workspace.\n if (!skipGitCheck && (await HostInitializerMain.hasGitDirectory(projectPath))) return undefined;\n\n // Don't write if any agent file already exists.\n if (await HostInitializerMain.hasExistingAgentFile(projectPath)) return undefined;\n\n const targetFile = agent ? HostInitializerMain.AGENT_FILE_MAP[agent] : 'AGENTS.md';\n const targetPath = path.join(projectPath, targetFile);\n\n const content = await HostInitializerMain.loadAgentsTemplate(projectPath);\n const finalContent = HostInitializerMain.wrapWithFrontmatter(targetFile, content);\n\n await fs.ensureDir(path.dirname(targetPath));\n await fs.writeFile(targetPath, finalContent);\n return targetFile;\n } catch {\n // Don't fail initialization if the agent file cannot be written.\n return undefined;\n }\n }\n\n /**\n * Check if any known agent instruction file or directory already exists.\n */\n static async hasExistingAgentFile(projectPath: string): Promise<boolean> {\n for (const rel of HostInitializerMain.ALL_AGENT_FILES) {\n if (await fs.pathExists(path.join(projectPath, rel))) return true;\n }\n return false;\n }\n\n /**\n * Wrap template content with tool-specific frontmatter where required.\n */\n static wrapWithFrontmatter(targetFile: string, content: string): string {\n if (targetFile === '.cursor/rules/bit.mdc') {\n return ['---', 'description: Bit workspace instructions', 'alwaysApply: true', '---', '', content].join('\\n');\n }\n return content;\n }\n\n /**\n * Check whether the directory is inside a Git workspace.\n * Accepts both `.git` as a directory (standard checkout) and `.git` as a\n * file (Git worktrees and submodules store a `gitdir:` pointer file there).\n */\n static async hasGitDirectory(projectPath: string): Promise<boolean> {\n return fs.pathExists(path.join(projectPath, '.git'));\n }\n\n /**\n * Check if the directory already has a bit workspace initialized\n */\n static async hasWorkspaceInitialized(projectPath: string): Promise<boolean> {\n try {\n const isExist = await WorkspaceConfig.isExist(projectPath);\n return Boolean(isExist);\n } catch {\n return false;\n }\n }\n\n /**\n * Prompt user for environment selection\n */\n static async promptForEnvironment(): Promise<string | null> {\n const envChoices = [\n { name: 'none', message: 'None (default)' },\n { name: 'bitdev.node/node-env', message: 'Node.js environment' },\n { name: 'bitdev.react/react-env', message: 'React environment' },\n { name: 'bitdev.vue/vue-env', message: 'Vue environment' },\n { name: 'bitdev.angular/angular-env', message: 'Angular environment' },\n { name: 'bitdev.symphony/envs/symphony-env', message: 'Symphony environment' },\n ];\n\n try {\n const response = (await prompt({\n type: 'select',\n name: 'environment',\n message: 'Which environment would you like to use?',\n choices: envChoices,\n initial: 0, // Default to 'none'\n cancel: promptCancel,\n } as any)) as { environment: string };\n\n return response.environment === 'none' ? null : response.environment;\n } catch (err: any) {\n return handlePromptError(err);\n }\n }\n\n /**\n * Prompt user for package manager preference\n */\n static async promptForPackageManager(): Promise<boolean> {\n try {\n const response = (await prompt({\n type: 'toggle',\n name: 'useExternalPackageManager',\n message: 'Would you like to use your own package manager (npm/yarn/pnpm) instead of Bit?',\n enabled: 'Yes',\n disabled: 'No',\n cancel: promptCancel,\n } as any)) as { useExternalPackageManager: boolean };\n\n return response.useExternalPackageManager;\n } catch (err: any) {\n return handlePromptError(err);\n }\n }\n\n /**\n * Prompt user for Cloud MCP configuration. Bit Cloud hosts an HTTP MCP\n * server at https://mcp.bit.cloud/mcp — agents connect to it directly,\n * no local `bit` process needed. See https://bit.cloud/docs/connect.\n */\n static async promptForMcpServer(): Promise<string | null> {\n try {\n const setupMcp = (await prompt({\n type: 'toggle',\n name: 'setupMcp',\n message: 'Would you like to connect Bit Cloud MCP to an AI coding agent?',\n enabled: 'Yes',\n disabled: 'No',\n cancel: promptCancel,\n } as any)) as { setupMcp: boolean };\n\n if (!setupMcp.setupMcp) {\n return null;\n }\n\n const editorChoices = [\n { name: 'claude-code', message: 'Claude Code' },\n { name: 'codex', message: 'Codex' },\n { name: 'cursor', message: 'Cursor' },\n { name: 'windsurf', message: 'Windsurf' },\n { name: 'copilot', message: 'GitHub Copilot' },\n ];\n\n const editorResponse = (await prompt({\n type: 'select',\n name: 'editor',\n message: 'Which agent would you like to configure?',\n choices: editorChoices,\n initial: 0,\n cancel: promptCancel,\n } as any)) as { editor: string };\n\n return editorResponse.editor;\n } catch (err: any) {\n return handlePromptError(err);\n }\n }\n\n /**\n * Create or update .gitignore file with Bit-specific entries\n */\n static async updateGitignore(projectPath: string): Promise<void> {\n const gitignorePath = path.join(projectPath, '.gitignore');\n const bitGitignoreSection = `\n# Bit\n.bit\npublic\n# Bit files - generated during bit ws-config write command\ntsconfig.json\n.eslintrc.json\n.prettierrc.cjs\n# allow tsconfig from the env's config dir to be tracked\n!**/config/tsconfig.json\nnode_modules\n`;\n try {\n const exists = await fs.pathExists(gitignorePath);\n if (exists) {\n const content = await fs.readFile(gitignorePath, 'utf8');\n if (!content.includes('# Bit')) {\n await fs.appendFile(gitignorePath, bitGitignoreSection);\n }\n } else {\n await fs.writeFile(gitignorePath, bitGitignoreSection.trim());\n }\n } catch {\n // Don't fail the initialization if gitignore update fails\n // Note: Console logging is handled by the caller\n }\n }\n\n /**\n * Write Bit Cloud MCP configuration for the selected agent.\n * Cloud MCP is an HTTP server hosted by Bit, so no rules/instructions\n * file is written — agents discover capabilities from the server itself.\n */\n static async setupMcpServer(editor: string, projectPath: string): Promise<void> {\n await McpConfigWriter.setupCloudMcp(editor, projectPath);\n }\n\n /**\n * Per-agent hint to verify the Cloud MCP connection and trigger the\n * OAuth authentication flow. The MCP server requires auth via the\n * `mcp:connect` scope — the agent surfaces the OAuth URL on first use.\n */\n static getMcpVerifyHint(editor: string): string {\n switch (editor.toLowerCase()) {\n case 'claude-code':\n return `Run ${chalk.cyan('/mcp')} in Claude Code to verify the connection and authenticate`;\n case 'cursor':\n return `Open ${chalk.cyan('Cursor Settings → MCP')} to verify the connection and authenticate`;\n case 'windsurf':\n return `Open ${chalk.cyan('Windsurf Settings → MCP')} to verify the connection and authenticate`;\n case 'copilot':\n return `Run ${chalk.cyan('MCP: List Servers')} from the VS Code command palette to verify the connection`;\n case 'codex':\n return `Restart Codex to load the MCP server; it will prompt for authentication on first use`;\n default:\n return `Open your agent's MCP settings to verify the connection`;\n }\n }\n\n /**\n * Run interactive mode for Git repositories.\n * The caller (InitCmd) is responsible for invoking setupMcpServer\n * when `mcpEditor` is returned, so the user sees a status line.\n */\n static async runInteractiveMode(projectPath: string): Promise<InteractiveConfig> {\n const selectedEnv = await HostInitializerMain.promptForEnvironment();\n const useExternalPackageManager = await HostInitializerMain.promptForPackageManager();\n const mcpEditor = await HostInitializerMain.promptForMcpServer();\n\n await HostInitializerMain.updateGitignore(projectPath);\n\n return {\n generator: selectedEnv || undefined,\n externalPackageManager: useExternalPackageManager,\n defaultDirectory: 'bit-components/{scope}/{name}',\n mcpEditor: mcpEditor || undefined,\n };\n }\n\n /**\n * Generate the final initialization message\n */\n static generateInitMessage(\n created: boolean,\n reset: boolean,\n resetHard: boolean,\n resetScope: boolean,\n interactiveConfig: InteractiveConfig | null,\n agentFileWritten?: string,\n mcpFileWritten?: string\n ): string {\n let initMessage = formatSuccessSummary('initialized a bit workspace.');\n\n if (!created) initMessage = formatHint('successfully re-initialized a bit workspace.');\n if (reset) initMessage = formatHint('your bit workspace has been reset successfully.');\n if (resetHard) initMessage = formatHint('your bit workspace has been hard-reset successfully.');\n if (resetScope) initMessage = formatHint('your local scope has been reset successfully.');\n\n if (agentFileWritten) {\n initMessage += formatHint(\n `\\n Created ${chalk.cyan(agentFileWritten)} — instructions for AI agents working in this workspace`\n );\n }\n\n if (mcpFileWritten) {\n initMessage += formatHint(\n `\\n Created ${chalk.cyan(mcpFileWritten)} — Bit Cloud MCP for AI agents (picked up by Claude Code, Visual Studio)`\n );\n }\n\n // Add additional information for interactive mode\n if (interactiveConfig) {\n initMessage += `\\n\\n${formatTitle('Additional Information')}`;\n const defaultDirectory = interactiveConfig?.defaultDirectory || 'bit-components/{scope}/{name}';\n initMessage += `\\n Components will be created in: ${chalk.cyan(defaultDirectory)}`;\n initMessage += `\\n For CI/CD setup, visit: https://bit.dev/docs/getting-started/collaborate/exporting-components#custom-ci/cd-setup`;\n\n if (interactiveConfig.generator) {\n initMessage += `\\n Environment: ${chalk.cyan(interactiveConfig.generator)}`;\n }\n\n if (interactiveConfig.mcpEditor) {\n const displayName = McpConfigWriter.getEditorDisplayName(interactiveConfig.mcpEditor);\n initMessage += `\\n Bit Cloud MCP connected to: ${chalk.cyan(displayName)}`;\n const verifyHint = HostInitializerMain.getMcpVerifyHint(interactiveConfig.mcpEditor);\n if (verifyHint) initMessage += formatHint(`\\n ${verifyHint}`);\n }\n\n if (interactiveConfig.externalPackageManager) {\n initMessage += `\\n External package manager mode enabled`;\n initMessage += formatHint(\n `\\n Run ${chalk.cyan('pnpm install')} (or ${chalk.cyan('yarn install')}/${chalk.cyan('npm install')}) to install dependencies`\n );\n } else if (interactiveConfig.generator) {\n initMessage += formatHint(`\\n Run ${chalk.cyan('bit install')} to install dependencies`);\n }\n }\n\n return initMessage;\n }\n\n static slots = [];\n static dependencies = [CLIAspect, LoggerAspect];\n static runtime = MainRuntime;\n static async provider([cli, loggerMain]: [CLIMain, LoggerMain]) {\n const logger = loggerMain.createLogger(HostInitializerAspect.id);\n const hostInitializerMain = new HostInitializerMain();\n const initCmd = new InitCmd(hostInitializerMain, logger);\n cli.register(initCmd);\n return hostInitializerMain;\n }\n}\n\nHostInitializerAspect.addRuntime(HostInitializerMain);\n\nexport default HostInitializerMain;\n\n/**\n * throw an error when .bitmap is empty but a scope has objects.\n * a user may got into this state for reasons such as:\n * 1. deleting manually .bitmap hoping to re-start Bit from scratch. (probably unaware of `--reset-hard` flag).\n * 2. switching to a branch where Bit wasn't initialized\n * in which case, it's better to stop and show an error describing what needs to be done.\n * it can always be ignored by entering `--force` flag.\n */\nasync function throwForOutOfSyncScope(consumer: Consumer): Promise<void> {\n if (!consumer.bitMap.isEmpty()) return;\n const scopePath = consumer.scope.getPath();\n const objectsPath = Repository.getPathByScopePath(scopePath);\n const dirExist = await fs.pathExists(objectsPath);\n if (!dirExist) return;\n const hasObjects = !(await isDirEmpty(objectsPath));\n if (hasObjects) {\n throw new ObjectsWithoutConsumer(scopePath);\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/dist/init-cmd.js CHANGED
@@ -53,6 +53,13 @@ function _cli() {
53
53
  };
54
54
  return data;
55
55
  }
56
+ function _mcp() {
57
+ const data = require("@teambit/mcp.mcp-config-writer");
58
+ _mcp = function () {
59
+ return data;
60
+ };
61
+ return data;
62
+ }
56
63
  function _hostInitializerMain() {
57
64
  const data = require("./host-initializer.main.runtime");
58
65
  _hostInitializerMain = function () {
@@ -101,12 +108,12 @@ supports various reset options to recover from corrupted state or restart from s
101
108
  this.logger.console(_chalk().default.cyan('🔧 Interactive setup for existing Git repository\n'));
102
109
  try {
103
110
  const interactiveConfig = await _hostInitializerMain().HostInitializerMain.runInteractiveMode(projectPath);
104
-
105
- // Set up MCP server if user selected an editor
106
111
  if (interactiveConfig.mcpEditor) {
107
- this.logger.console(_chalk().default.cyan(`\n🔧 Setting up MCP server for ${interactiveConfig.mcpEditor}...`));
112
+ const displayName = _mcp().McpConfigWriter.getEditorDisplayName(interactiveConfig.mcpEditor);
113
+ this.logger.console(_chalk().default.cyan(`\nConnecting Bit Cloud MCP to ${displayName}...`));
108
114
  await _hostInitializerMain().HostInitializerMain.setupMcpServer(interactiveConfig.mcpEditor, projectPath);
109
- this.logger.console(_chalk().default.green(`✅ MCP server configured for ${interactiveConfig.mcpEditor}`));
115
+ this.logger.console((0, _cli().formatSuccessSummary)(`Bit Cloud MCP connected to ${displayName}`));
116
+ interactiveConfig.agentFileWritten = await _hostInitializerMain().HostInitializerMain.writeMcpAgentRules(interactiveConfig.mcpEditor, projectPath);
110
117
  }
111
118
  return interactiveConfig;
112
119
  } catch (error) {
@@ -155,11 +162,20 @@ supports various reset options to recover from corrupted state or restart from s
155
162
 
156
163
  // Resolve agent flag: true means no specific type (use default AGENTS.md), string means a specific tool.
157
164
  const agentType = agent === true ? undefined : agent || undefined;
165
+
166
+ // Skip the baseline `.mcp.json` only when the user explicitly opted out
167
+ // of Cloud MCP in interactive mode. All other paths (non-interactive,
168
+ // skip-interactive, no .git) still write it so it stays consistent with
169
+ // the agent template that mentions a Cloud MCP config.
170
+ const userOptedOutOfMcp = interactiveConfig !== null && !interactiveConfig.mcpEditor;
158
171
  const {
159
172
  created,
160
- agentFileWritten
161
- } = await _hostInitializerMain().HostInitializerMain.init(path, standalone, noPackageJson, reset, resetNew, resetLaneNew, resetHard, resetScope, force, workspaceExtensionProps, interactiveConfig?.generator || generator, agentType);
162
- return _hostInitializerMain().HostInitializerMain.generateInitMessage(created, reset, resetHard, resetScope, interactiveConfig, agentFileWritten);
173
+ agentFileWritten,
174
+ mcpFileWritten
175
+ } = await _hostInitializerMain().HostInitializerMain.init(path, standalone, noPackageJson, reset, resetNew, resetLaneNew, resetHard, resetScope, force, workspaceExtensionProps, interactiveConfig?.generator || generator, agentType, {
176
+ skipDefaultMcp: userOptedOutOfMcp
177
+ });
178
+ return _hostInitializerMain().HostInitializerMain.generateInitMessage(created, reset, resetHard, resetScope, interactiveConfig, interactiveConfig?.agentFileWritten ?? agentFileWritten, mcpFileWritten);
163
179
  }
164
180
  }
165
181
  exports.InitCmd = InitCmd;