conductor-install 0.0.3 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,9 +6,9 @@
6
6
 
7
7
  [English](./README.md) | [中文](./README_zh.md) | [日本語](./README_ja.md) | [한국어](./README_ko.md)
8
8
 
9
- **Conductor Install** is a standalone command-line tool designed to bring the [Conductor](https://github.com/gemini-cli-extensions/conductor) spec-driven development methodology to *any* coding environment.
9
+ **Conductor Install** is a standalone command-line tool designed to bring the [Conductor](https://github.com/gemini-cli-extensions/conductor) spec-driven development methodology to *any* coding agent environment.
10
10
 
11
- Originally tied to the Gemini CLI extension, this project aims to decouple the methodology, allowing developers to install and initialize Conductor workflows in their projects so they can be leveraged by **any** AI Coding Agent (e.g., Claude Code, Cursor, VS Code Copilot, Codex) or IDE.
11
+ The Conductor methodology was originally tied to the Gemini CLI extension. This project decouples it, allowing developers to install and configure Conductor workflows in their projects so they can be leveraged by **any** AI Coding Agent (e.g., Claude Code, Cursor, VS Code Copilot, Codex) or IDE.
12
12
 
13
13
  ## 🎯 Goals
14
14
 
@@ -20,6 +20,30 @@ Originally tied to the Gemini CLI extension, this project aims to decouple the m
20
20
 
21
21
  ### 1. Setup Conductor in Your Project
22
22
 
23
+ ```text
24
+ conductor-install [path] [options]
25
+
26
+ Positionals:
27
+ path Directory to install Conductor[string] [default: "."]
28
+
29
+ Options:
30
+ -a, --agent Specify the coding agent
31
+ [string] [choices: "opencode", "claude-code",
32
+ "antigravity", "cursor", "vscode-copilot", "codex",
33
+ "windsurf", "cline", "gemini"]
34
+ -r, --repo Git repository URL for conductor
35
+ [string] [default:
36
+ "https://github.com/gemini-cli-extensions/conductor"]
37
+ -b, --branch Branch name for conductor repository
38
+ [string] [default: "main"]
39
+ -s, --scope Installation scope (project or global)
40
+ [string] [choices: "project", "global"]
41
+ -f, --force Force overwrite existing installation
42
+ [boolean] [default: false]
43
+ -h, --help Show help [boolean]
44
+ -v, --version Show version number [boolean]
45
+ ```
46
+
23
47
  To initialize Conductor in your project, simply run the following command in your project root:
24
48
 
25
49
  ```bash
@@ -67,10 +91,12 @@ This will verify the environment and install the necessary Conductor files:
67
91
 
68
92
  Once installed, you can instruct your AI Agent to perform Conductor tasks using the installed commands. For example:
69
93
 
70
- - `@agent /conductor:setup` - Initialize the project structure.
71
- - `@agent /conductor:newTrack` - Start a new feature or bug fix track.
72
- - `@agent /conductor:implement` - Implement the selected track.
73
- - `@agent /conductor:status` - Check the status of current tracks.
94
+ - `/conductor:setup` - Initialize the project structure.
95
+ - `/conductor:newTrack` - Start a new feature or bug fix track.
96
+ - `/conductor:implement` - Implement the selected track.
97
+ - `/conductor:review` - Review the completed track work against guidelines and the plan.
98
+ - `/conductor:revert` - Revert previous work.
99
+ - `/conductor:status` - Check the status of current tracks.
74
100
 
75
101
  *Note: The exact invocation syntax depends on your specific agent's slash command or file context capabilities.*
76
102
 
@@ -33,75 +33,48 @@ var import_helpers = require("yargs/helpers");
33
33
 
34
34
  // src/cli/prompt.ts
35
35
  var import_select = __toESM(require("@inquirer/select"), 1);
36
- async function promptForInstallScope(agent) {
37
- const isCodex = agent === "codex";
38
- const isCline = agent === "cline";
39
- const choices = isCodex ? [{ name: "Global (User Home Directory)", value: "global" }] : [{ name: "Project (Current Directory)", value: "project" }];
40
- const answer = await (0, import_select.default)({
41
- message: "Select installation method:",
42
- choices,
43
- default: isCodex ? "global" : "project"
44
- });
45
- return answer;
46
- }
47
- async function promptForAgent() {
48
- const answer = await (0, import_select.default)({
49
- message: "Select your coding agent:",
50
- choices: [
51
- {
52
- name: "OpenCode",
53
- value: "opencode",
54
- description: "The open source AI coding agent"
55
- },
56
- {
57
- name: "Claude Code",
58
- value: "claude-code",
59
- description: "Anthropic's coding assistant"
60
- },
61
- {
62
- name: "Antigravity",
63
- value: "antigravity",
64
- description: "Google's agentic coding assistant"
65
- },
66
- {
67
- name: "Cursor",
68
- value: "cursor",
69
- description: "Cursor IDE's AI agent"
70
- },
71
- {
72
- name: "VS Code Copilot",
73
- value: "vscode-copilot",
74
- description: "VS Code Copilot's Prompt Files"
75
- },
76
- {
77
- name: "Codex",
78
- value: "codex",
79
- description: "OpenAI Codex Agent"
80
- },
81
- {
82
- name: "Windsurf",
83
- value: "windsurf",
84
- description: "Windsurf Cascade AI Agent"
85
- },
86
- {
87
- name: "Cline",
88
- value: "cline",
89
- description: "Cline AI coding assistant"
90
- },
91
- {
92
- name: "Gemini CLI",
93
- value: "gemini",
94
- description: "Google Gemini CLI agent"
95
- }
96
- ],
97
- default: "opencode"
98
- });
99
- return answer;
100
- }
101
36
 
102
- // src/generators/default/strategy.ts
103
- var import_path2 = require("path");
104
- var import_fs_extra2 = __toESM(require("fs-extra"), 1);
37
+ // src/generators/opencode/config.ts
38
+ var opencodeConfig = {
39
+ agentType: "opencode",
40
+ agentDir: ".opencode",
41
+ commandsDir: "commands",
42
+ displayName: "OpenCode",
43
+ protocolFilename: "AGENTS.md",
44
+ description: "The open source AI coding agent"
45
+ };
46
+
47
+ // src/generators/claude-code/config.ts
48
+ var claudeCodeConfig = {
49
+ agentType: "claude-code",
50
+ agentDir: ".claude",
51
+ commandsDir: "commands",
52
+ displayName: "Claude Code",
53
+ protocolFilename: "CLAUDE.md",
54
+ description: "Anthropic's coding assistant"
55
+ };
56
+
57
+ // src/generators/antigravity/config.ts
58
+ var antigravityConfig = {
59
+ agentType: "antigravity",
60
+ agentDir: ".agent",
61
+ commandsDir: "workflows",
62
+ displayName: "Antigravity",
63
+ protocolFilename: "GEMINI.md",
64
+ description: "Google's agentic coding assistant"
65
+ };
66
+
67
+ // src/generators/cursor/config.ts
68
+ var cursorConfig = {
69
+ agentType: "cursor",
70
+ agentDir: ".cursor",
71
+ commandsDir: "commands",
72
+ displayName: "Cursor",
73
+ protocolFilename: "AGENTS.md",
74
+ description: "Cursor IDE's AI agent"
75
+ };
76
+
77
+ // src/generators/vscode-copilot/strategy.ts
105
78
  var import_smol_toml = require("smol-toml");
106
79
 
107
80
  // src/utils/template.ts
@@ -192,12 +165,196 @@ async function loadTemplate(templatePath, repo, branch) {
192
165
  return (0, import_promises.readFile)(fullPath, "utf-8");
193
166
  }
194
167
 
195
- // src/generators/default/strategy.ts
168
+ // src/generators/vscode-copilot/strategy.ts
169
+ var VsCodeCopilotContentStrategy = class {
170
+ process(templateContent, options) {
171
+ const { installPath, agentType, fixedAgent } = options;
172
+ const parsed = (0, import_smol_toml.parse)(templateContent);
173
+ if (!parsed.prompt) {
174
+ return null;
175
+ }
176
+ let prompt = parsed.prompt;
177
+ prompt = prompt.replace(/__\$\$CODE_AGENT_INSTALL_PATH\$\$__/g, installPath);
178
+ const finalContent = substituteVariables(prompt, { agent_type: agentType });
179
+ return `---
180
+ description: ${parsed.description || ""}
181
+ agent: ${fixedAgent}
182
+ ---
183
+ ${finalContent}`;
184
+ }
185
+ };
186
+ var vscodeCopilotContentStrategy = new VsCodeCopilotContentStrategy();
187
+
188
+ // src/generators/vscode-copilot/config.ts
189
+ var vscodeCopilotConfig = {
190
+ agentType: "vscode-copilot",
191
+ agentDir: ".github",
192
+ commandsDir: "prompts",
193
+ displayName: "VS Code Copilot",
194
+ protocolFilename: "AGENTS.md",
195
+ description: "VS Code Copilot's Prompt Files",
196
+ extension: ".prompt.md",
197
+ fixedAgent: "agent",
198
+ strategy: {
199
+ content: vscodeCopilotContentStrategy
200
+ }
201
+ };
202
+
203
+ // src/generators/codex/config.ts
204
+ var codexConfig = {
205
+ agentType: "codex",
206
+ agentDir: ".codex",
207
+ commandsDir: "prompts",
208
+ displayName: "Codex",
209
+ protocolFilename: "AGENTS.md",
210
+ description: "OpenAI Codex Agent",
211
+ extension: ".md"
212
+ };
213
+
214
+ // src/generators/windsurf/config.ts
215
+ var windsurfConfig = {
216
+ agentType: "windsurf",
217
+ agentDir: ".windsurf",
218
+ commandsDir: "workflows",
219
+ displayName: "Windsurf",
220
+ protocolFilename: "AGENTS.md",
221
+ description: "Windsurf Cascade AI Agent"
222
+ };
223
+
224
+ // src/generators/cline/strategy.ts
225
+ var import_smol_toml2 = require("smol-toml");
226
+ var ClineContentStrategy = class {
227
+ process(templateContent, options) {
228
+ const { installPath, agentType, commandName } = options;
229
+ const parsed = (0, import_smol_toml2.parse)(templateContent);
230
+ if (!parsed.prompt) {
231
+ return null;
232
+ }
233
+ let prompt = parsed.prompt;
234
+ prompt = prompt.replace(/__\$\$CODE_AGENT_INSTALL_PATH\$\$__/g, installPath);
235
+ const finalContent = substituteVariables(prompt, { agent_type: agentType });
236
+ const title = commandName ? commandName.charAt(0).toUpperCase() + commandName.slice(1) : "Command";
237
+ return `# Conductor ${title}${parsed.description ? "\n\n" + parsed.description + "\n\n" : "\n\n"}${finalContent}`;
238
+ }
239
+ };
240
+ var clineContentStrategy = new ClineContentStrategy();
241
+
242
+ // src/generators/cline/config.ts
243
+ var clineConfig = {
244
+ agentType: "cline",
245
+ agentDir: ".clinerules",
246
+ commandsDir: "workflows",
247
+ displayName: "Cline",
248
+ protocolFilename: "AGENTS.md",
249
+ description: "Cline AI coding assistant",
250
+ strategy: {
251
+ content: clineContentStrategy
252
+ }
253
+ };
254
+
255
+ // src/generators/gemini/strategy.ts
256
+ var import_path2 = require("path");
257
+ var import_fs_extra2 = __toESM(require("fs-extra"), 1);
258
+ var import_smol_toml3 = require("smol-toml");
196
259
  var { writeFile } = import_fs_extra2.default;
260
+ var GeminiContentStrategy = class {
261
+ process(templateContent, options) {
262
+ const { installPath, agentType } = options;
263
+ const parsed = (0, import_smol_toml3.parse)(templateContent);
264
+ if (!parsed.prompt) {
265
+ return null;
266
+ }
267
+ const content = templateContent.replace(/__\$\$CODE_AGENT_INSTALL_PATH\$\$__/g, installPath);
268
+ return substituteVariables(content, { agent_type: agentType });
269
+ }
270
+ };
271
+ var GeminiFileStrategy = class {
272
+ async write(options) {
273
+ const { targetDir, agentDir, commandsDir, commandName, extension, content } = options;
274
+ const fileName = `${commandName}${extension}`;
275
+ await writeFile((0, import_path2.join)(targetDir, agentDir, commandsDir, fileName), content);
276
+ }
277
+ };
278
+ var geminiContentStrategy = new GeminiContentStrategy();
279
+ var geminiFileStrategy = new GeminiFileStrategy();
280
+
281
+ // src/generators/gemini/config.ts
282
+ var geminiConfig = {
283
+ agentType: "gemini",
284
+ agentDir: ".gemini",
285
+ commandsDir: "commands/conductor",
286
+ displayName: "Gemini CLI",
287
+ protocolFilename: "GEMINI.md",
288
+ description: "Google Gemini CLI agent",
289
+ extension: ".toml",
290
+ usesPrefix: false,
291
+ strategy: {
292
+ content: geminiContentStrategy,
293
+ file: geminiFileStrategy
294
+ }
295
+ };
296
+
297
+ // src/generators/registry.ts
298
+ var ALL_AGENT_CONFIGS = [
299
+ opencodeConfig,
300
+ claudeCodeConfig,
301
+ antigravityConfig,
302
+ cursorConfig,
303
+ vscodeCopilotConfig,
304
+ codexConfig,
305
+ windsurfConfig,
306
+ clineConfig,
307
+ geminiConfig
308
+ ];
309
+
310
+ // src/cli/prompt.ts
311
+ async function promptForInstallScope(agent) {
312
+ const isCodex = agent === "codex";
313
+ const isCline = agent === "cline";
314
+ const choices = isCodex ? [{ name: "Global (User Home Directory)", value: "global" }] : [{ name: "Project (Current Directory)", value: "project" }];
315
+ const answer = await (0, import_select.default)({
316
+ message: "Select installation method:",
317
+ choices,
318
+ default: isCodex ? "global" : "project"
319
+ });
320
+ return answer;
321
+ }
322
+ async function promptForAgent() {
323
+ const choices = ALL_AGENT_CONFIGS.map((config) => {
324
+ const {
325
+ displayName,
326
+ agentType,
327
+ protocolFilename,
328
+ agentDir,
329
+ commandsDir,
330
+ description
331
+ } = config;
332
+ const finalDescription = description || `${displayName} agent`;
333
+ const pathInfo = `\x1B[90m(${protocolFilename}, ${agentDir}/${commandsDir})\x1B[0m`;
334
+ return {
335
+ name: `${displayName} ${pathInfo}`,
336
+ value: agentType,
337
+ description: finalDescription
338
+ };
339
+ });
340
+ const answer = await (0, import_select.default)({
341
+ message: "Select your coding agent:",
342
+ choices,
343
+ default: "opencode",
344
+ loop: true
345
+ });
346
+ return answer;
347
+ }
348
+
349
+ // src/generators/default/strategy.ts
350
+ var import_path3 = require("path");
351
+ var import_fs_extra3 = __toESM(require("fs-extra"), 1);
352
+ var import_smol_toml4 = require("smol-toml");
353
+ var { writeFile: writeFile2 } = import_fs_extra3.default;
197
354
  var DefaultContentStrategy = class {
198
355
  process(templateContent, options) {
199
356
  const { installPath, agentType } = options;
200
- const parsed = (0, import_smol_toml.parse)(templateContent);
357
+ const parsed = (0, import_smol_toml4.parse)(templateContent);
201
358
  if (!parsed.prompt) {
202
359
  return null;
203
360
  }
@@ -217,26 +374,17 @@ var DefaultFileStrategy = class {
217
374
  async write(options) {
218
375
  const { targetDir, agentDir, commandsDir, commandName, extension, content } = options;
219
376
  const fileName = `conductor:${commandName}${extension}`;
220
- await writeFile((0, import_path2.join)(targetDir, agentDir, commandsDir, fileName), content);
377
+ await writeFile2((0, import_path3.join)(targetDir, agentDir, commandsDir, fileName), content);
221
378
  }
222
379
  };
223
380
  var defaultContentStrategy = new DefaultContentStrategy();
224
381
  var defaultFileStrategy = new DefaultFileStrategy();
225
382
 
226
- // src/generators/opencode/config.ts
227
- var opencodeConfig = {
228
- agentType: "opencode",
229
- agentDir: ".opencode",
230
- commandsDir: "commands",
231
- displayName: "OpenCode",
232
- protocolFilename: "AGENTS.md"
233
- };
234
-
235
383
  // src/generators/ConfigurableGenerator.ts
236
- var import_path3 = require("path");
384
+ var import_path4 = require("path");
237
385
  var import_select2 = __toESM(require("@inquirer/select"), 1);
238
- var import_fs_extra3 = __toESM(require("fs-extra"), 1);
239
- var { existsSync, ensureDir, writeFile: writeFile2, copy } = import_fs_extra3.default;
386
+ var import_fs_extra4 = __toESM(require("fs-extra"), 1);
387
+ var { existsSync, ensureDir, writeFile: writeFile3, copy } = import_fs_extra4.default;
240
388
  var ConfigurableGenerator = class {
241
389
  constructor(config) {
242
390
  this.config = config;
@@ -249,8 +397,8 @@ var ConfigurableGenerator = class {
249
397
  const ext = extension || ".md";
250
398
  const prefix = usesPrefix !== false ? "conductor:" : "";
251
399
  const setupFileName = `${prefix}setup${ext}`;
252
- const setupFile = (0, import_path3.join)(targetDir, agentDir, commandsDir, setupFileName);
253
- const conductorPath = (0, import_path3.join)(targetDir, agentDir, "conductor");
400
+ const setupFile = (0, import_path4.join)(targetDir, agentDir, commandsDir, setupFileName);
401
+ const conductorPath = (0, import_path4.join)(targetDir, agentDir, "conductor");
254
402
  if (existsSync(conductorPath) && existsSync(setupFile)) {
255
403
  throw new Error(
256
404
  `Conductor (${displayName}) is already installed in: ${targetDir}`
@@ -260,18 +408,18 @@ var ConfigurableGenerator = class {
260
408
  }
261
409
  async generate(targetDir, scope, repo, branch, force) {
262
410
  const { agentDir, commandsDir, agentType } = this.config;
263
- const agentPath = (0, import_path3.join)(targetDir, agentDir);
264
- const targetCommandsDir = (0, import_path3.join)(agentPath, commandsDir);
265
- let installPath = (0, import_path3.join)(agentDir, "conductor");
411
+ const agentPath = (0, import_path4.join)(targetDir, agentDir);
412
+ const targetCommandsDir = (0, import_path4.join)(agentPath, commandsDir);
413
+ let installPath = (0, import_path4.join)(agentDir, "conductor");
266
414
  if (scope === "global") {
267
415
  installPath = `~/${agentDir}/conductor`;
268
416
  }
269
417
  await ensureDir(targetCommandsDir);
270
- await ensureDir((0, import_path3.join)(agentPath, "conductor"));
418
+ await ensureDir((0, import_path4.join)(agentPath, "conductor"));
271
419
  const templateRoot = await getTemplateRoot(repo, branch);
272
420
  try {
273
- const templateSource = (0, import_path3.join)(templateRoot, "templates");
274
- const templateDest = (0, import_path3.join)(agentPath, "conductor", "templates");
421
+ const templateSource = (0, import_path4.join)(templateRoot, "templates");
422
+ const templateDest = (0, import_path4.join)(agentPath, "conductor", "templates");
275
423
  await copy(templateSource, templateDest);
276
424
  } catch (e) {
277
425
  console.warn("Failed to copy templates directory:", e);
@@ -279,8 +427,8 @@ var ConfigurableGenerator = class {
279
427
  const { protocolFilename } = this.config;
280
428
  if (protocolFilename) {
281
429
  try {
282
- const protocolSource = (0, import_path3.join)(templateRoot, "GEMINI.md");
283
- const protocolDest = (0, import_path3.join)(targetDir, agentDir, protocolFilename);
430
+ const protocolSource = (0, import_path4.join)(templateRoot, "GEMINI.md");
431
+ const protocolDest = (0, import_path4.join)(targetDir, protocolFilename);
284
432
  if (existsSync(protocolSource)) {
285
433
  let shouldCopy = true;
286
434
  if (existsSync(protocolDest) && !force) {
@@ -358,15 +506,6 @@ var OpenCodeGenerator = class {
358
506
  }
359
507
  };
360
508
 
361
- // src/generators/claude-code/config.ts
362
- var claudeCodeConfig = {
363
- agentType: "claude-code",
364
- agentDir: ".claude",
365
- commandsDir: "commands",
366
- displayName: "Claude Code",
367
- protocolFilename: "CLAUDE.md"
368
- };
369
-
370
509
  // src/generators/claude-code/generator.ts
371
510
  var ClaudeCodeGenerator = class {
372
511
  generator = createGenerator(claudeCodeConfig);
@@ -378,15 +517,6 @@ var ClaudeCodeGenerator = class {
378
517
  }
379
518
  };
380
519
 
381
- // src/generators/antigravity/config.ts
382
- var antigravityConfig = {
383
- agentType: "antigravity",
384
- agentDir: ".agent",
385
- commandsDir: "workflows",
386
- displayName: "Antigravity",
387
- protocolFilename: "GEMINI.md"
388
- };
389
-
390
520
  // src/generators/antigravity/generator.ts
391
521
  var AntigravityGenerator = class {
392
522
  generator = createGenerator(antigravityConfig);
@@ -398,15 +528,6 @@ var AntigravityGenerator = class {
398
528
  }
399
529
  };
400
530
 
401
- // src/generators/cursor/config.ts
402
- var cursorConfig = {
403
- agentType: "cursor",
404
- agentDir: ".cursor",
405
- commandsDir: "commands",
406
- displayName: "Cursor",
407
- protocolFilename: "AGENTS.md"
408
- };
409
-
410
531
  // src/generators/cursor/generator.ts
411
532
  var CursorGenerator = class {
412
533
  generator = createGenerator(cursorConfig);
@@ -418,41 +539,6 @@ var CursorGenerator = class {
418
539
  }
419
540
  };
420
541
 
421
- // src/generators/vscode-copilot/strategy.ts
422
- var import_smol_toml2 = require("smol-toml");
423
- var VsCodeCopilotContentStrategy = class {
424
- process(templateContent, options) {
425
- const { installPath, agentType, fixedAgent } = options;
426
- const parsed = (0, import_smol_toml2.parse)(templateContent);
427
- if (!parsed.prompt) {
428
- return null;
429
- }
430
- let prompt = parsed.prompt;
431
- prompt = prompt.replace(/__\$\$CODE_AGENT_INSTALL_PATH\$\$__/g, installPath);
432
- const finalContent = substituteVariables(prompt, { agent_type: agentType });
433
- return `---
434
- description: ${parsed.description || ""}
435
- agent: ${fixedAgent}
436
- ---
437
- ${finalContent}`;
438
- }
439
- };
440
- var vscodeCopilotContentStrategy = new VsCodeCopilotContentStrategy();
441
-
442
- // src/generators/vscode-copilot/config.ts
443
- var vscodeCopilotConfig = {
444
- agentType: "vscode-copilot",
445
- agentDir: ".github",
446
- commandsDir: "prompts",
447
- displayName: "VS Code Copilot",
448
- protocolFilename: "AGENTS.md",
449
- extension: ".prompt.md",
450
- fixedAgent: "agent",
451
- strategy: {
452
- content: vscodeCopilotContentStrategy
453
- }
454
- };
455
-
456
542
  // src/generators/vscode-copilot/generator.ts
457
543
  var VSCodeCopilotGenerator = class {
458
544
  generator = createGenerator(vscodeCopilotConfig);
@@ -464,16 +550,6 @@ var VSCodeCopilotGenerator = class {
464
550
  }
465
551
  };
466
552
 
467
- // src/generators/codex/config.ts
468
- var codexConfig = {
469
- agentType: "codex",
470
- agentDir: ".codex",
471
- commandsDir: "prompts",
472
- displayName: "Codex",
473
- protocolFilename: "AGENTS.md",
474
- extension: ".md"
475
- };
476
-
477
553
  // src/generators/codex/generator.ts
478
554
  var import_os2 = require("os");
479
555
  var CodexGenerator = class {
@@ -492,15 +568,6 @@ var CodexGenerator = class {
492
568
  }
493
569
  };
494
570
 
495
- // src/generators/windsurf/config.ts
496
- var windsurfConfig = {
497
- agentType: "windsurf",
498
- agentDir: ".windsurf",
499
- commandsDir: "workflows",
500
- displayName: "Windsurf",
501
- protocolFilename: "AGENTS.md"
502
- };
503
-
504
571
  // src/generators/windsurf/generator.ts
505
572
  var WindsurfGenerator = class {
506
573
  generator = createGenerator(windsurfConfig);
@@ -512,36 +579,6 @@ var WindsurfGenerator = class {
512
579
  }
513
580
  };
514
581
 
515
- // src/generators/cline/strategy.ts
516
- var import_smol_toml3 = require("smol-toml");
517
- var ClineContentStrategy = class {
518
- process(templateContent, options) {
519
- const { installPath, agentType, commandName } = options;
520
- const parsed = (0, import_smol_toml3.parse)(templateContent);
521
- if (!parsed.prompt) {
522
- return null;
523
- }
524
- let prompt = parsed.prompt;
525
- prompt = prompt.replace(/__\$\$CODE_AGENT_INSTALL_PATH\$\$__/g, installPath);
526
- const finalContent = substituteVariables(prompt, { agent_type: agentType });
527
- const title = commandName ? commandName.charAt(0).toUpperCase() + commandName.slice(1) : "Command";
528
- return `# Conductor ${title}${parsed.description ? "\n\n" + parsed.description + "\n\n" : "\n\n"}${finalContent}`;
529
- }
530
- };
531
- var clineContentStrategy = new ClineContentStrategy();
532
-
533
- // src/generators/cline/config.ts
534
- var clineConfig = {
535
- agentType: "cline",
536
- agentDir: ".clinerules",
537
- commandsDir: "workflows",
538
- displayName: "Cline",
539
- protocolFilename: "AGENTS.md",
540
- strategy: {
541
- content: clineContentStrategy
542
- }
543
- };
544
-
545
582
  // src/generators/cline/generator.ts
546
583
  var ClineGenerator = class {
547
584
  generator = createGenerator(clineConfig);
@@ -553,47 +590,6 @@ var ClineGenerator = class {
553
590
  }
554
591
  };
555
592
 
556
- // src/generators/gemini/strategy.ts
557
- var import_path4 = require("path");
558
- var import_fs_extra4 = __toESM(require("fs-extra"), 1);
559
- var import_smol_toml4 = require("smol-toml");
560
- var { writeFile: writeFile3 } = import_fs_extra4.default;
561
- var GeminiContentStrategy = class {
562
- process(templateContent, options) {
563
- const { installPath, agentType } = options;
564
- const parsed = (0, import_smol_toml4.parse)(templateContent);
565
- if (!parsed.prompt) {
566
- return null;
567
- }
568
- const content = templateContent.replace(/__\$\$CODE_AGENT_INSTALL_PATH\$\$__/g, installPath);
569
- return substituteVariables(content, { agent_type: agentType });
570
- }
571
- };
572
- var GeminiFileStrategy = class {
573
- async write(options) {
574
- const { targetDir, agentDir, commandsDir, commandName, extension, content } = options;
575
- const fileName = `${commandName}${extension}`;
576
- await writeFile3((0, import_path4.join)(targetDir, agentDir, commandsDir, fileName), content);
577
- }
578
- };
579
- var geminiContentStrategy = new GeminiContentStrategy();
580
- var geminiFileStrategy = new GeminiFileStrategy();
581
-
582
- // src/generators/gemini/config.ts
583
- var geminiConfig = {
584
- agentType: "gemini",
585
- agentDir: ".gemini",
586
- commandsDir: "commands/conductor",
587
- displayName: "Gemini CLI",
588
- protocolFilename: "GEMINI.md",
589
- extension: ".toml",
590
- usesPrefix: false,
591
- strategy: {
592
- content: geminiContentStrategy,
593
- file: geminiFileStrategy
594
- }
595
- };
596
-
597
593
  // src/generators/gemini/generator.ts
598
594
  var GeminiGenerator = class {
599
595
  generator = createGenerator(geminiConfig);
@@ -750,12 +746,14 @@ async function main() {
750
746
  ]
751
747
  }).option("repo", {
752
748
  alias: "r",
753
- describe: "Git repository URL for templates",
754
- type: "string"
749
+ describe: "Git repository URL for conductor",
750
+ type: "string",
751
+ default: DEFAULT_REPO
755
752
  }).option("branch", {
756
753
  alias: "b",
757
- describe: "Branch name for templates",
758
- type: "string"
754
+ describe: "Branch name for conductor repository",
755
+ type: "string",
756
+ default: DEFAULT_BRANCH
759
757
  }).option("scope", {
760
758
  alias: "s",
761
759
  describe: "Installation scope (project or global)",
@@ -766,7 +764,7 @@ async function main() {
766
764
  describe: "Force overwrite existing installation",
767
765
  type: "boolean",
768
766
  default: false
769
- }).help().version().parseAsync();
767
+ }).help().alias("h", "help").version().alias("v", "version").parseAsync();
770
768
  const pathArg = argv._[0];
771
769
  await installHandler({
772
770
  ...argv,