@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.
- package/agents-template-git.md +342 -0
- package/agents-template.md +67 -38
- package/dist/agents-template-git.md +342 -0
- package/dist/agents-template.md +67 -38
- package/dist/host-initializer.main.runtime.d.ts +54 -6
- package/dist/host-initializer.main.runtime.js +143 -57
- package/dist/host-initializer.main.runtime.js.map +1 -1
- package/dist/init-cmd.js +23 -7
- package/dist/init-cmd.js.map +1 -1
- package/package.json +4 -4
- /package/dist/{preview-1779129522483.js → preview-1779199603540.js} +0 -0
|
@@ -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
|
|
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
|
-
|
|
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
|
|
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
|
|
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: '
|
|
370
|
-
message: '
|
|
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: '
|
|
379
|
-
message: '
|
|
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
|
|
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
|
-
*
|
|
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
|
-
|
|
440
|
-
|
|
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
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
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
|
-
|
|
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":";;;;;;AAAA,SAAAA,SAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,QAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAG,KAAA;EAAA,MAAAH,IAAA,GAAAI,uBAAA,CAAAF,OAAA;EAAAC,IAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAK,OAAA;EAAA,MAAAL,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAG,MAAA,YAAAA,CAAA;IAAA,OAAAL,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAM,UAAA;EAAA,MAAAN,IAAA,GAAAE,OAAA;EAAAI,SAAA,YAAAA,CAAA;IAAA,OAAAN,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAO,cAAA;EAAA,MAAAP,IAAA,GAAAE,OAAA;EAAAK,aAAA,YAAAA,CAAA;IAAA,OAAAP,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAQ,kBAAA;EAAA,MAAAR,IAAA,GAAAE,OAAA;EAAAM,iBAAA,YAAAA,CAAA;IAAA,OAAAR,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAS,QAAA;EAAA,MAAAT,IAAA,GAAAE,OAAA;EAAAO,OAAA,YAAAA,CAAA;IAAA,OAAAT,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAU,SAAA;EAAA,MAAAV,IAAA,GAAAE,OAAA;EAAAQ,QAAA,YAAAA,CAAA;IAAA,OAAAV,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAW,WAAA;EAAA,MAAAX,IAAA,GAAAE,OAAA;EAAAS,UAAA,YAAAA,CAAA;IAAA,OAAAX,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAY,QAAA;EAAA,MAAAZ,IAAA,GAAAE,OAAA;EAAAU,OAAA,YAAAA,CAAA;IAAA,OAAAZ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAa,KAAA;EAAA,MAAAb,IAAA,GAAAE,OAAA;EAAAW,IAAA,YAAAA,CAAA;IAAA,OAAAb,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAc,KAAA;EAAA,MAAAd,IAAA,GAAAE,OAAA;EAAAY,IAAA,YAAAA,CAAA;IAAA,OAAAd,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAe,wBAAA;EAAA,MAAAf,IAAA,GAAAE,OAAA;EAAAa,uBAAA,YAAAA,CAAA;IAAA,OAAAf,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAgB,iBAAA;EAAA,MAAAhB,IAAA,GAAAE,OAAA;EAAAc,gBAAA,YAAAA,CAAA;IAAA,OAAAhB,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAiB,SAAA;EAAA,MAAAjB,IAAA,GAAAE,OAAA;EAAAe,QAAA,YAAAA,CAAA;IAAA,OAAAjB,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAkB,gBAAA;EAAA,MAAAlB,IAAA,GAAAE,OAAA;EAAAgB,eAAA,YAAAA,CAAA;IAAA,OAAAlB,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAmB,QAAA;EAAA,MAAAnB,IAAA,GAAAE,OAAA;EAAAiB,OAAA,YAAAA,CAAA;IAAA,OAAAnB,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAA+C,SAAAI,wBAAAgB,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAlB,uBAAA,YAAAA,CAAAgB,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAAA,SAAApB,uBAAAmB,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAK,UAAA,GAAAL,CAAA,KAAAU,OAAA,EAAAV,CAAA;AAAA,SAAAmB,QAAAnB,CAAA,EAAAG,CAAA,QAAAF,CAAA,GAAAe,MAAA,CAAAI,IAAA,CAAApB,CAAA,OAAAgB,MAAA,CAAAK,qBAAA,QAAAf,CAAA,GAAAU,MAAA,CAAAK,qBAAA,CAAArB,CAAA,GAAAG,CAAA,KAAAG,CAAA,GAAAA,CAAA,CAAAgB,MAAA,WAAAnB,CAAA,WAAAa,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,EAAAoB,UAAA,OAAAtB,CAAA,CAAAuB,IAAA,CAAAC,KAAA,CAAAxB,CAAA,EAAAK,CAAA,YAAAL,CAAA;AAAA,SAAAyB,cAAA1B,CAAA,aAAAG,CAAA,MAAAA,CAAA,GAAAwB,SAAA,CAAAC,MAAA,EAAAzB,CAAA,UAAAF,CAAA,WAAA0B,SAAA,CAAAxB,CAAA,IAAAwB,SAAA,CAAAxB,CAAA,QAAAA,CAAA,OAAAgB,OAAA,CAAAH,MAAA,CAAAf,CAAA,OAAA4B,OAAA,WAAA1B,CAAA,IAAA2B,eAAA,CAAA9B,CAAA,EAAAG,CAAA,EAAAF,CAAA,CAAAE,CAAA,SAAAa,MAAA,CAAAe,yBAAA,GAAAf,MAAA,CAAAgB,gBAAA,CAAAhC,CAAA,EAAAgB,MAAA,CAAAe,yBAAA,CAAA9B,CAAA,KAAAkB,OAAA,CAAAH,MAAA,CAAAf,CAAA,GAAA4B,OAAA,WAAA1B,CAAA,IAAAa,MAAA,CAAAC,cAAA,CAAAjB,CAAA,EAAAG,CAAA,EAAAa,MAAA,CAAAE,wBAAA,CAAAjB,CAAA,EAAAE,CAAA,iBAAAH,CAAA;AAAA,SAAA8B,gBAAA9B,CAAA,EAAAG,CAAA,EAAAF,CAAA,YAAAE,CAAA,GAAA8B,cAAA,CAAA9B,CAAA,MAAAH,CAAA,GAAAgB,MAAA,CAAAC,cAAA,CAAAjB,CAAA,EAAAG,CAAA,IAAA+B,KAAA,EAAAjC,CAAA,EAAAsB,UAAA,MAAAY,YAAA,MAAAC,QAAA,UAAApC,CAAA,CAAAG,CAAA,IAAAF,CAAA,EAAAD,CAAA;AAAA,SAAAiC,eAAAhC,CAAA,QAAAM,CAAA,GAAA8B,YAAA,CAAApC,CAAA,uCAAAM,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAA8B,aAAApC,CAAA,EAAAE,CAAA,2BAAAF,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAD,CAAA,GAAAC,CAAA,CAAAqC,MAAA,CAAAC,WAAA,kBAAAvC,CAAA,QAAAO,CAAA,GAAAP,CAAA,CAAAe,IAAA,CAAAd,CAAA,EAAAE,CAAA,uCAAAI,CAAA,SAAAA,CAAA,YAAAiC,SAAA,yEAAArC,CAAA,GAAAsC,MAAA,GAAAC,MAAA,EAAAzC,CAAA;AAW/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM0C,YAAY,GAAGA,CAAA,KAAM;EACzB;AAAA,CACD;;AAED;AACA;AACA;AACA,MAAMC,iBAAiB,GAAIC,GAAQ,IAAY;EAC7C,IAAI,CAACA,GAAG,IAAIA,GAAG,KAAK,EAAE,EAAE;IACtB;IACA,MAAM,IAAIC,KAAK,CAAC,8BAA8B,CAAC;EACjD;EACA,MAAMD,GAAG;AACX,CAAC;AAEM,MAAME,mBAAmB,CAAC;EAC/B,aAAaC,IAAIA,CACfC,OAAgB,EAChBC,KAAK,GAAG,KAAK,EACbC,aAAa,GAAG,KAAK,EACrBC,KAAK,GAAG,KAAK,EACbC,QAAQ,GAAG,KAAK,EAChBC,YAAY,GAAG,KAAK,EACpBC,SAAS,GAAG,KAAK,EACjBC,UAAU,GAAG,KAAK,EAClBC,KAAK,GAAG,KAAK,EACbC,oBAA6C,GAAG,CAAC,CAAC,EAClDC,SAAkB,EAClBC,KAAc,EACdC,OAAqC,GAAG,CAAC,CAAC,EAC6D;IACvG,MAAMC,YAAY,GAAG,MAAM,IAAAC,oCAAgB,EAACd,OAAO,IAAIe,OAAO,CAACC,GAAG,CAAC,CAAC,CAAC;IACrE;IACA;IACA,IACE,CAAChB,OAAO,IACRa,YAAY,EAAE/E,IAAI,IAClB+E,YAAY,CAAC/E,IAAI,KAAKiF,OAAO,CAACC,GAAG,CAAC,CAAC,IACnC,CAACb,KAAK,IACN,CAACG,SAAS,IACV,CAACC,UAAU,IACX,CAACH,QAAQ,IACT,CAACC,YAAY,EACb;MACA,MAAM,IAAIR,KAAK,CACb,4FAA4FgB,YAAY,CAAC/E,IAAI,GAC/G,CAAC;IACH;IACA,MAAMmF,YAAY,GAAGJ,YAAY,EAAE/E,IAAI,IAAIkE,OAAO,IAAIe,OAAO,CAACC,GAAG,CAAC,CAAC;IAEnEP,oBAAoB,GAAAhC,aAAA,CAAAA,aAAA,KACfgC,oBAAoB;MACvBS,IAAI,EAAET,oBAAoB,CAACS,IAAI,IAAIpF,IAAI,CAAD,CAAC,CAACqF,QAAQ,CAACF,YAAY;IAAC,EAC/D;IAED,IAAId,KAAK,IAAIG,SAAS,EAAE;MACtB,MAAM,IAAAc,+BAAa,EAACH,YAAY,EAAEX,SAAS,EAAEL,KAAK,CAAC;IACrD;IACA,IAAIoB,QAA8B;IAClC,IAAI;MACFA,QAAQ,GAAG,MAAM,IAAAC,gCAAc,EAACL,YAAY,EAAEhB,KAAK,EAAEC,aAAa,EAAEO,oBAAoB,EAAEC,SAAS,CAAC;IACtG,CAAC,CAAC,MAAM;MACN;MACA;MACA;IAAA;IAEF,IAAIH,UAAU,EAAE;MACd,MAAMgB,SAAS,GAAG,IAAAC,6BAAa,EAACP,YAAY,CAAC;MAC7C,IAAI,CAACM,SAAS,EAAE,MAAM,IAAI1B,KAAK,CAAC,uCAAuCoB,YAAY,EAAE,CAAC;MACtF,MAAMQ,eAAK,CAACtB,KAAK,CAACoB,SAAS,EAAE,IAAI,CAAC;IACpC;IACA,IAAI,CAACF,QAAQ,EAAEA,QAAQ,GAAG,MAAM,IAAAC,gCAAc,EAACL,YAAY,EAAEhB,KAAK,EAAEC,aAAa,EAAEO,oBAAoB,CAAC;IACxG,IAAI,CAACD,KAAK,IAAI,CAACD,UAAU,EAAE;MACzB,MAAMmB,sBAAsB,CAACL,QAAQ,CAAC;IACxC;IACA,IAAIjB,QAAQ,EAAE;MACZ,MAAMiB,QAAQ,CAACjB,QAAQ,CAAC,CAAC;IAC3B;IACA,IAAIC,YAAY,EAAE;MAChB,MAAMgB,QAAQ,CAAChB,YAAY,CAAC,CAAC;IAC/B;IACA,MAAMsB,eAAe,GAAG,MAAMN,QAAQ,CAACO,KAAK,CAAC,CAAC;IAC9C,MAAMC,OAAO,GAAG,CAAChB,YAAY,EAAE/E,IAAI;IACnC,IAAIgG,gBAAoC;IACxC,IAAIC,cAAkC;IACtC,IAAIF,OAAO,EAAE;MACXC,gBAAgB,GAAG,MAAMhC,mBAAmB,CAACkC,sBAAsB,CAACf,YAAY,EAAEN,KAAK,CAAC;MACxF;MACA;MACA;MACA,IAAI,CAACC,OAAO,CAACqB,cAAc,EAAE;QAC3BF,cAAc,GAAG,MAAMjC,mBAAmB,CAACoC,qBAAqB,CAACjB,YAAY,CAAC;MAChF;IACF;IACA,OAAO;MAAEY,OAAO;MAAER,QAAQ,EAAEM,eAAe;MAAEG,gBAAgB;MAAEC;IAAe,CAAC;EACjF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,aAAaG,qBAAqBA,CAACC,WAAmB,EAA+B;IACnF,IAAI;MACF,MAAMC,sBAAe,CAACC,aAAa,CAAC,aAAa,EAAEF,WAAW,CAAC;MAC/D,OAAO,WAAW;IACpB,CAAC,CAAC,MAAM;MACN;MACA,OAAOG,SAAS;IAClB;EACF;;EAEA;AACF;AACA;;EAOE;AACF;AACA;AACA;AACA;AACA;AACA;EACE,aAAqBC,kBAAkBA,CAACJ,WAAmB,EAAmB;IAC5E,MAAMK,KAAK,GAAG,MAAM1C,mBAAmB,CAAC2C,eAAe,CAACN,WAAW,CAAC;IACpE,MAAMO,YAAY,GAAGF,KAAK,GAAG,wBAAwB,GAAG,oBAAoB;IAC5E,OAAOG,kBAAE,CAACC,QAAQ,CAAC9G,IAAI,CAAD,CAAC,CAAC+G,IAAI,CAACC,SAAS,EAAEJ,YAAY,CAAC,EAAE,MAAM,CAAC;EAChE;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,aAAaK,kBAAkBA,CAACC,MAAc,EAAEb,WAAmB,EAA+B;IAChG,MAAMc,OAAO,GAAG,MAAMnD,mBAAmB,CAACyC,kBAAkB,CAACJ,WAAW,CAAC;IACzE,MAAMe,WAAW,GAAGF,MAAM,CAACG,WAAW,CAAC,CAAC;IAExC,IAAID,WAAW,KAAK,aAAa,EAAE;MACjC,MAAME,GAAG,GAAGtH,IAAI,CAAD,CAAC,CAAC+G,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC;MACnD,MAAMQ,GAAG,GAAGvH,IAAI,CAAD,CAAC,CAAC+G,IAAI,CAACV,WAAW,EAAEiB,GAAG,CAAC;MACvC,MAAMT,kBAAE,CAACW,SAAS,CAACxH,IAAI,CAAD,CAAC,CAACyH,OAAO,CAACF,GAAG,CAAC,CAAC;MACrC,MAAMV,kBAAE,CAACa,SAAS,CAACH,GAAG,EAAEJ,OAAO,CAAC;MAChC,OAAOG,GAAG;IACZ;;IAEA;IACA;IACA;IACA,MAAMK,WAAW,GAAG;MAAEC,MAAM,EAAE,QAAQ;MAAEC,OAAO,EAAE;IAAS,CAAC,CAACT,WAAW,CAAC;IACxE,IAAIO,WAAW,EAAE;MACf,MAAMzD,OAAO,GAAG,MAAMoC,sBAAe,CAACwB,cAAc,CAACH,WAAW,EAAE;QAChEI,QAAQ,EAAE,KAAK;QACfC,YAAY,EAAE3B,WAAW;QACzBc;MACF,CAAC,CAAC;MACF,OAAOnH,IAAI,CAAD,CAAC,CAACiI,QAAQ,CAAC5B,WAAW,EAAEnC,OAAO,CAAC;IAC5C;;IAEA;IACA;IACA;IACA,OAAOF,mBAAmB,CAACkC,sBAAsB,CAACG,WAAW,EAAEG,SAAS,EAAE,IAAI,CAAC;EACjF;;EAEA;AACF;AACA;AACA;;EASE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,aAAaN,sBAAsBA,CACjCG,WAAmB,EACnBxB,KAAc,EACdqD,YAAY,GAAG,KAAK,EACS;IAC7B,IAAIrD,KAAK,IAAI,CAACb,mBAAmB,CAACmE,cAAc,CAACtD,KAAK,CAAC,EAAE;MACvD,MAAMuD,SAAS,GAAGnG,MAAM,CAACI,IAAI,CAAC2B,mBAAmB,CAACmE,cAAc,CAAC,CAACpB,IAAI,CAAC,IAAI,CAAC;MAC5E,MAAM,IAAIhD,KAAK,CAAC,0BAA0Bc,KAAK,wBAAwBuD,SAAS,EAAE,CAAC;IACrF;IACA,IAAI;MACF;MACA;MACA,IAAI,CAACF,YAAY,KAAK,MAAMlE,mBAAmB,CAAC2C,eAAe,CAACN,WAAW,CAAC,CAAC,EAAE,OAAOG,SAAS;;MAE/F;MACA,IAAI,MAAMxC,mBAAmB,CAACqE,oBAAoB,CAAChC,WAAW,CAAC,EAAE,OAAOG,SAAS;MAEjF,MAAM8B,UAAU,GAAGzD,KAAK,GAAGb,mBAAmB,CAACmE,cAAc,CAACtD,KAAK,CAAC,GAAG,WAAW;MAClF,MAAM0D,UAAU,GAAGvI,IAAI,CAAD,CAAC,CAAC+G,IAAI,CAACV,WAAW,EAAEiC,UAAU,CAAC;MAErD,MAAMnB,OAAO,GAAG,MAAMnD,mBAAmB,CAACyC,kBAAkB,CAACJ,WAAW,CAAC;MACzE,MAAMmC,YAAY,GAAGxE,mBAAmB,CAACyE,mBAAmB,CAACH,UAAU,EAAEnB,OAAO,CAAC;MAEjF,MAAMN,kBAAE,CAACW,SAAS,CAACxH,IAAI,CAAD,CAAC,CAACyH,OAAO,CAACc,UAAU,CAAC,CAAC;MAC5C,MAAM1B,kBAAE,CAACa,SAAS,CAACa,UAAU,EAAEC,YAAY,CAAC;MAC5C,OAAOF,UAAU;IACnB,CAAC,CAAC,MAAM;MACN;MACA,OAAO9B,SAAS;IAClB;EACF;;EAEA;AACF;AACA;EACE,aAAa6B,oBAAoBA,CAAChC,WAAmB,EAAoB;IACvE,KAAK,MAAMiB,GAAG,IAAItD,mBAAmB,CAAC0E,eAAe,EAAE;MACrD,IAAI,MAAM7B,kBAAE,CAAC8B,UAAU,CAAC3I,IAAI,CAAD,CAAC,CAAC+G,IAAI,CAACV,WAAW,EAAEiB,GAAG,CAAC,CAAC,EAAE,OAAO,IAAI;IACnE;IACA,OAAO,KAAK;EACd;;EAEA;AACF;AACA;EACE,OAAOmB,mBAAmBA,CAACH,UAAkB,EAAEnB,OAAe,EAAU;IACtE,IAAImB,UAAU,KAAK,uBAAuB,EAAE;MAC1C,OAAO,CAAC,KAAK,EAAE,yCAAyC,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,EAAEnB,OAAO,CAAC,CAACJ,IAAI,CAAC,IAAI,CAAC;IAC/G;IACA,OAAOI,OAAO;EAChB;;EAEA;AACF;AACA;AACA;AACA;EACE,aAAaR,eAAeA,CAACN,WAAmB,EAAoB;IAClE,OAAOQ,kBAAE,CAAC8B,UAAU,CAAC3I,IAAI,CAAD,CAAC,CAAC+G,IAAI,CAACV,WAAW,EAAE,MAAM,CAAC,CAAC;EACtD;;EAEA;AACF;AACA;EACE,aAAauC,uBAAuBA,CAACvC,WAAmB,EAAoB;IAC1E,IAAI;MACF,MAAMwC,OAAO,GAAG,MAAMC,yBAAe,CAACD,OAAO,CAACxC,WAAW,CAAC;MAC1D,OAAO0C,OAAO,CAACF,OAAO,CAAC;IACzB,CAAC,CAAC,MAAM;MACN,OAAO,KAAK;IACd;EACF;;EAEA;AACF;AACA;EACE,aAAaG,oBAAoBA,CAAA,EAA2B;IAC1D,MAAMC,UAAU,GAAG,CACjB;MAAE7D,IAAI,EAAE,MAAM;MAAE8D,OAAO,EAAE;IAAiB,CAAC,EAC3C;MAAE9D,IAAI,EAAE,sBAAsB;MAAE8D,OAAO,EAAE;IAAsB,CAAC,EAChE;MAAE9D,IAAI,EAAE,wBAAwB;MAAE8D,OAAO,EAAE;IAAoB,CAAC,EAChE;MAAE9D,IAAI,EAAE,oBAAoB;MAAE8D,OAAO,EAAE;IAAkB,CAAC,EAC1D;MAAE9D,IAAI,EAAE,4BAA4B;MAAE8D,OAAO,EAAE;IAAsB,CAAC,EACtE;MAAE9D,IAAI,EAAE,mCAAmC;MAAE8D,OAAO,EAAE;IAAuB,CAAC,CAC/E;IAED,IAAI;MACF,MAAMC,QAAQ,GAAI,MAAM,IAAAC,kBAAM,EAAC;QAC7BC,IAAI,EAAE,QAAQ;QACdjE,IAAI,EAAE,aAAa;QACnB8D,OAAO,EAAE,0CAA0C;QACnDI,OAAO,EAAEL,UAAU;QACnBM,OAAO,EAAE,CAAC;QAAE;QACZC,MAAM,EAAE5F;MACV,CAAQ,CAA6B;MAErC,OAAOuF,QAAQ,CAACM,WAAW,KAAK,MAAM,GAAG,IAAI,GAAGN,QAAQ,CAACM,WAAW;IACtE,CAAC,CAAC,OAAO3F,GAAQ,EAAE;MACjB,OAAOD,iBAAiB,CAACC,GAAG,CAAC;IAC/B;EACF;;EAEA;AACF;AACA;EACE,aAAa4F,uBAAuBA,CAAA,EAAqB;IACvD,IAAI;MACF,MAAMP,QAAQ,GAAI,MAAM,IAAAC,kBAAM,EAAC;QAC7BC,IAAI,EAAE,QAAQ;QACdjE,IAAI,EAAE,2BAA2B;QACjC8D,OAAO,EAAE,gFAAgF;QACzFS,OAAO,EAAE,KAAK;QACdC,QAAQ,EAAE,IAAI;QACdJ,MAAM,EAAE5F;MACV,CAAQ,CAA4C;MAEpD,OAAOuF,QAAQ,CAACU,yBAAyB;IAC3C,CAAC,CAAC,OAAO/F,GAAQ,EAAE;MACjB,OAAOD,iBAAiB,CAACC,GAAG,CAAC;IAC/B;EACF;;EAEA;AACF;AACA;AACA;AACA;EACE,aAAagG,kBAAkBA,CAAA,EAA2B;IACxD,IAAI;MACF,MAAMC,QAAQ,GAAI,MAAM,IAAAX,kBAAM,EAAC;QAC7BC,IAAI,EAAE,QAAQ;QACdjE,IAAI,EAAE,UAAU;QAChB8D,OAAO,EAAE,gEAAgE;QACzES,OAAO,EAAE,KAAK;QACdC,QAAQ,EAAE,IAAI;QACdJ,MAAM,EAAE5F;MACV,CAAQ,CAA2B;MAEnC,IAAI,CAACmG,QAAQ,CAACA,QAAQ,EAAE;QACtB,OAAO,IAAI;MACb;MAEA,MAAMC,aAAa,GAAG,CACpB;QAAE5E,IAAI,EAAE,aAAa;QAAE8D,OAAO,EAAE;MAAc,CAAC,EAC/C;QAAE9D,IAAI,EAAE,OAAO;QAAE8D,OAAO,EAAE;MAAQ,CAAC,EACnC;QAAE9D,IAAI,EAAE,QAAQ;QAAE8D,OAAO,EAAE;MAAS,CAAC,EACrC;QAAE9D,IAAI,EAAE,UAAU;QAAE8D,OAAO,EAAE;MAAW,CAAC,EACzC;QAAE9D,IAAI,EAAE,SAAS;QAAE8D,OAAO,EAAE;MAAiB,CAAC,CAC/C;MAED,MAAMe,cAAc,GAAI,MAAM,IAAAb,kBAAM,EAAC;QACnCC,IAAI,EAAE,QAAQ;QACdjE,IAAI,EAAE,QAAQ;QACd8D,OAAO,EAAE,0CAA0C;QACnDI,OAAO,EAAEU,aAAa;QACtBT,OAAO,EAAE,CAAC;QACVC,MAAM,EAAE5F;MACV,CAAQ,CAAwB;MAEhC,OAAOqG,cAAc,CAAC/C,MAAM;IAC9B,CAAC,CAAC,OAAOpD,GAAQ,EAAE;MACjB,OAAOD,iBAAiB,CAACC,GAAG,CAAC;IAC/B;EACF;;EAEA;AACF;AACA;EACE,aAAaoG,eAAeA,CAAC7D,WAAmB,EAAiB;IAC/D,MAAM8D,aAAa,GAAGnK,IAAI,CAAD,CAAC,CAAC+G,IAAI,CAACV,WAAW,EAAE,YAAY,CAAC;IAC1D,MAAM+D,mBAAmB,GAAG;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;IACG,IAAI;MACF,MAAMC,MAAM,GAAG,MAAMxD,kBAAE,CAAC8B,UAAU,CAACwB,aAAa,CAAC;MACjD,IAAIE,MAAM,EAAE;QACV,MAAMlD,OAAO,GAAG,MAAMN,kBAAE,CAACC,QAAQ,CAACqD,aAAa,EAAE,MAAM,CAAC;QACxD,IAAI,CAAChD,OAAO,CAACmD,QAAQ,CAAC,OAAO,CAAC,EAAE;UAC9B,MAAMzD,kBAAE,CAAC0D,UAAU,CAACJ,aAAa,EAAEC,mBAAmB,CAAC;QACzD;MACF,CAAC,MAAM;QACL,MAAMvD,kBAAE,CAACa,SAAS,CAACyC,aAAa,EAAEC,mBAAmB,CAACI,IAAI,CAAC,CAAC,CAAC;MAC/D;IACF,CAAC,CAAC,MAAM;MACN;MACA;IAAA;EAEJ;;EAEA;AACF;AACA;AACA;AACA;EACE,aAAaC,cAAcA,CAACvD,MAAc,EAAEb,WAAmB,EAAiB;IAC9E,MAAMC,sBAAe,CAACC,aAAa,CAACW,MAAM,EAAEb,WAAW,CAAC;EAC1D;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOqE,gBAAgBA,CAACxD,MAAc,EAAU;IAC9C,QAAQA,MAAM,CAACG,WAAW,CAAC,CAAC;MAC1B,KAAK,aAAa;QAChB,OAAO,OAAOsD,gBAAK,CAACC,IAAI,CAAC,MAAM,CAAC,2DAA2D;MAC7F,KAAK,QAAQ;QACX,OAAO,QAAQD,gBAAK,CAACC,IAAI,CAAC,uBAAuB,CAAC,4CAA4C;MAChG,KAAK,UAAU;QACb,OAAO,QAAQD,gBAAK,CAACC,IAAI,CAAC,yBAAyB,CAAC,4CAA4C;MAClG,KAAK,SAAS;QACZ,OAAO,OAAOD,gBAAK,CAACC,IAAI,CAAC,mBAAmB,CAAC,4DAA4D;MAC3G,KAAK,OAAO;QACV,OAAO,sFAAsF;MAC/F;QACE,OAAO,yDAAyD;IACpE;EACF;;EAEA;AACF;AACA;AACA;AACA;EACE,aAAaC,kBAAkBA,CAACxE,WAAmB,EAA8B;IAC/E,MAAMyE,WAAW,GAAG,MAAM9G,mBAAmB,CAACgF,oBAAoB,CAAC,CAAC;IACpE,MAAMa,yBAAyB,GAAG,MAAM7F,mBAAmB,CAAC0F,uBAAuB,CAAC,CAAC;IACrF,MAAMqB,SAAS,GAAG,MAAM/G,mBAAmB,CAAC8F,kBAAkB,CAAC,CAAC;IAEhE,MAAM9F,mBAAmB,CAACkG,eAAe,CAAC7D,WAAW,CAAC;IAEtD,OAAO;MACLzB,SAAS,EAAEkG,WAAW,IAAItE,SAAS;MACnCwE,sBAAsB,EAAEnB,yBAAyB;MACjDoB,gBAAgB,EAAE,+BAA+B;MACjDF,SAAS,EAAEA,SAAS,IAAIvE;IAC1B,CAAC;EACH;;EAEA;AACF;AACA;EACE,OAAO0E,mBAAmBA,CACxBnF,OAAgB,EAChB1B,KAAc,EACdG,SAAkB,EAClBC,UAAmB,EACnB0G,iBAA2C,EAC3CnF,gBAAyB,EACzBC,cAAuB,EACf;IACR,IAAImF,WAAW,GAAG,IAAAC,2BAAoB,EAAC,8BAA8B,CAAC;IAEtE,IAAI,CAACtF,OAAO,EAAEqF,WAAW,GAAG,IAAAE,iBAAU,EAAC,8CAA8C,CAAC;IACtF,IAAIjH,KAAK,EAAE+G,WAAW,GAAG,IAAAE,iBAAU,EAAC,iDAAiD,CAAC;IACtF,IAAI9G,SAAS,EAAE4G,WAAW,GAAG,IAAAE,iBAAU,EAAC,sDAAsD,CAAC;IAC/F,IAAI7G,UAAU,EAAE2G,WAAW,GAAG,IAAAE,iBAAU,EAAC,+CAA+C,CAAC;IAEzF,IAAItF,gBAAgB,EAAE;MACpBoF,WAAW,IAAI,IAAAE,iBAAU,EACvB,eAAeX,gBAAK,CAACC,IAAI,CAAC5E,gBAAgB,CAAC,yDAC7C,CAAC;IACH;IAEA,IAAIC,cAAc,EAAE;MAClBmF,WAAW,IAAI,IAAAE,iBAAU,EACvB,eAAeX,gBAAK,CAACC,IAAI,CAAC3E,cAAc,CAAC,0EAC3C,CAAC;IACH;;IAEA;IACA,IAAIkF,iBAAiB,EAAE;MACrBC,WAAW,IAAI,OAAO,IAAAG,kBAAW,EAAC,wBAAwB,CAAC,EAAE;MAC7D,MAAMN,gBAAgB,GAAGE,iBAAiB,EAAEF,gBAAgB,IAAI,+BAA+B;MAC/FG,WAAW,IAAI,sCAAsCT,gBAAK,CAACC,IAAI,CAACK,gBAAgB,CAAC,EAAE;MACnFG,WAAW,IAAI,sHAAsH;MAErI,IAAID,iBAAiB,CAACvG,SAAS,EAAE;QAC/BwG,WAAW,IAAI,oBAAoBT,gBAAK,CAACC,IAAI,CAACO,iBAAiB,CAACvG,SAAS,CAAC,EAAE;MAC9E;MAEA,IAAIuG,iBAAiB,CAACJ,SAAS,EAAE;QAC/B,MAAMS,WAAW,GAAGlF,sBAAe,CAACmF,oBAAoB,CAACN,iBAAiB,CAACJ,SAAS,CAAC;QACrFK,WAAW,IAAI,mCAAmCT,gBAAK,CAACC,IAAI,CAACY,WAAW,CAAC,EAAE;QAC3E,MAAME,UAAU,GAAG1H,mBAAmB,CAAC0G,gBAAgB,CAACS,iBAAiB,CAACJ,SAAS,CAAC;QACpF,IAAIW,UAAU,EAAEN,WAAW,IAAI,IAAAE,iBAAU,EAAC,OAAOI,UAAU,EAAE,CAAC;MAChE;MAEA,IAAIP,iBAAiB,CAACH,sBAAsB,EAAE;QAC5CI,WAAW,IAAI,2CAA2C;QAC1DA,WAAW,IAAI,IAAAE,iBAAU,EACvB,WAAWX,gBAAK,CAACC,IAAI,CAAC,cAAc,CAAC,QAAQD,gBAAK,CAACC,IAAI,CAAC,cAAc,CAAC,IAAID,gBAAK,CAACC,IAAI,CAAC,aAAa,CAAC,2BACtG,CAAC;MACH,CAAC,MAAM,IAAIO,iBAAiB,CAACvG,SAAS,EAAE;QACtCwG,WAAW,IAAI,IAAAE,iBAAU,EAAC,WAAWX,gBAAK,CAACC,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC;MAC3F;IACF;IAEA,OAAOQ,WAAW;EACpB;EAKA,aAAaO,QAAQA,CAAC,CAACC,GAAG,EAAEC,UAAU,CAAwB,EAAE;IAC9D,MAAMC,MAAM,GAAGD,UAAU,CAACE,YAAY,CAACC,wCAAqB,CAACC,EAAE,CAAC;IAChE,MAAMC,mBAAmB,GAAG,IAAIlI,mBAAmB,CAAC,CAAC;IACrD,MAAMmI,OAAO,GAAG,KAAIC,kBAAO,EAACF,mBAAmB,EAAEJ,MAAM,CAAC;IACxDF,GAAG,CAACS,QAAQ,CAACF,OAAO,CAAC;IACrB,OAAOD,mBAAmB;EAC5B;AACF;AAACI,OAAA,CAAAtI,mBAAA,GAAAA,mBAAA;AAAAjB,eAAA,CA3fYiB,mBAAmB,oBAyG2B;EACvDuI,MAAM,EAAE,WAAW;EACnB3E,MAAM,EAAE,uBAAuB;EAC/BC,OAAO,EAAE;AACX,CAAC;AAAA9E,eAAA,CA7GUiB,mBAAmB,qBAwKI,CAChC,WAAW,EACX,WAAW,EACX,cAAc,EACd,eAAe,EACf,iCAAiC,CAClC;AAAAjB,eAAA,CA9KUiB,mBAAmB,WAiff,EAAE;AAAAjB,eAAA,CAjfNiB,mBAAmB,kBAkfR,CAACwI,gBAAS,EAAEC,sBAAY,CAAC;AAAA1J,eAAA,CAlfpCiB,mBAAmB,aAmfb0I,kBAAW;AAU9BV,wCAAqB,CAACW,UAAU,CAAC3I,mBAAmB,CAAC;AAAC,IAAA4I,QAAA,GAAAN,OAAA,CAAA3K,OAAA,GAEvCqC,mBAAmB;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe4B,sBAAsBA,CAACL,QAAkB,EAAiB;EACvE,IAAI,CAACA,QAAQ,CAACsH,MAAM,CAACC,OAAO,CAAC,CAAC,EAAE;EAChC,MAAMrH,SAAS,GAAGF,QAAQ,CAACwH,KAAK,CAACC,OAAO,CAAC,CAAC;EAC1C,MAAMC,WAAW,GAAGC,qBAAU,CAACC,kBAAkB,CAAC1H,SAAS,CAAC;EAC5D,MAAM2H,QAAQ,GAAG,MAAMvG,kBAAE,CAAC8B,UAAU,CAACsE,WAAW,CAAC;EACjD,IAAI,CAACG,QAAQ,EAAE;EACf,MAAMC,UAAU,GAAG,EAAE,MAAM,IAAAC,uBAAU,EAACL,WAAW,CAAC,CAAC;EACnD,IAAII,UAAU,EAAE;IACd,MAAM,KAAIE,gDAAsB,EAAC9H,SAAS,CAAC;EAC7C;AACF","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
|
-
|
|
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(
|
|
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
|
-
|
|
162
|
-
|
|
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;
|