conductor-init 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -136,45 +136,75 @@ npm create conductor-flow --repo https://github.com/your-org/custom-conductor --
136
136
  npm create conductor-flow [path] [options]
137
137
 
138
138
  Positionals:
139
- path Directory to install Conductor [string] [default: "."]
139
+ path Directory to install Conductor [string] [default: "."]
140
140
 
141
141
  Options:
142
142
  -a, --agent Specify the coding agent
143
- [string] [choices: "opencode", "claude-code", "antigravity", "cursor",
144
- "github-copilot", "codex", "windsurf", "cline", "kilo-code", "roo-code",
145
- "qwen-code", "factory-droid", "gemini"]
146
- -r, --repo Git repository URL for templates. Without this flag,
147
- interactive template source selection is shown. [string]
148
- -b, --branch Branch name for template repository
149
- [string] [default: "main"]
150
- -s, --scope Installation scope (project or global)
151
- [string] [choices: "project", "global"]
152
- -g, --git-ignore Configure git ignore for Conductor files (gitignore: add to
153
- .gitignore, exclude: add to .git/info/exclude, none: remove
154
- entries) [string] [choices: "gitignore", "exclude", "none"]
155
- -f, --force Force overwrite existing installation
156
- [boolean] [default: false]
157
- -h, --help Show help [boolean]
158
- -v, --version Show version number [boolean]
143
+ [string] [choices: "opencode", "claude-code", "antigravity", "cursor", "github-copilot", "codex", "windsurf", "cline", "kilo-code", "roo-code", "qwen-code", "factory-droid", "gemini"]
144
+ -r, --repo Git repository URL for templates. Without this flag, interactive template source selection is shown. [string]
145
+ -b, --branch Branch name for template repository [string] [default: "main"]
146
+ -s, --scope Installation scope (project or global) [string] [choices: "project", "global"]
147
+ -g, --git-ignore Configure git ignore for Conductor files (gitignore: add to .gitignore, exclude: add to .git/info/exclude, none: remove entries) [string] [choices: "gitignore", "exclude", "none"]
148
+ -f, --force Force overwrite existing installation [boolean] [default: false]
149
+ --reset Clear saved preferences and show all prompts [boolean] [default: false]
150
+ -h, --help Show help [boolean]
151
+ -v, --version Show version number [boolean]
159
152
 
160
153
  Examples:
161
- npm create conductor-flow Install with interactive prompts
162
- (template source selection)
163
- npm create conductor-flow --agent Install for Claude Code agent
164
- claude-code
165
- npm create conductor-flow --repo Use custom template repository
166
- https://github.com/user/templates
167
- npm create conductor-flow --git-ignore Add Conductor files to .gitignore
168
- gitignore
169
- npm create conductor-flow --git-ignore Add Conductor files to
170
- exclude .git/info/exclude
171
- npm create conductor-flow --git-ignore Remove Conductor entries from git
172
- none ignore
154
+ npm create conductor-flow Install with interactive prompts (template source selection)
155
+ npm create conductor-flow --agent claude-code Install for Claude Code agent
156
+ npm create conductor-flow --repo https://github.com/user/templates Use custom template repository
157
+ npm create conductor-flow --git-ignore gitignore Add Conductor files to .gitignore
158
+ npm create conductor-flow --git-ignore exclude Add Conductor files to .git/info/exclude
159
+ npm create conductor-flow --git-ignore none Remove Conductor entries from git ignore
160
+ npm create conductor-flow --reset Clear saved preferences and show all prompts
173
161
  ```
174
162
 
175
163
 
164
+ ### Configuration Persistence
165
+
166
+ The CLI remembers your preferences between runs, so you don't have to specify the same options every time.
167
+
168
+ **What's Saved:**
169
+ - Agent selection (`--agent`)
170
+ - Template source (`--repo`, `--branch`)
171
+ - Git ignore preference (`--git-ignore`)
172
+
173
+ **How It Works:**
174
+ 1. On first run, select your preferences interactively or via flags
175
+ 2. On subsequent runs, saved preferences are automatically applied
176
+ 3. CLI flags always override saved preferences
177
+
178
+ **Example:**
179
+
180
+ ```bash
181
+ # First run - specify your preferences
182
+ npm create conductor-flow --agent claude-code --git-ignore exclude
183
+
184
+ # Future runs - automatically uses claude-code and exclude
185
+ npm create conductor-flow
186
+ # Output: [Config] Using saved agent: claude-code
187
+ # Output: [Config] Using saved git-ignore: exclude
188
+ ```
189
+
190
+ **Reset Preferences:**
191
+
192
+ To clear saved preferences and start fresh with all prompts:
193
+
194
+ ```bash
195
+ npm create conductor-flow --reset
196
+ ```
197
+
198
+ **Configuration Location:**
199
+
200
+ Preferences are stored following the XDG Base Directory Specification:
201
+ - **macOS**: `~/Library/Application Support/create-conductor-flow/config.json`
202
+ - **Linux**: `~/.config/create-conductor-flow/config.json`
203
+ - **Windows**: `%APPDATA%\create-conductor-flow\config.json`
204
+
176
205
  ### 3. Shell Completion for Global Installation(Advanced Setup)
177
206
 
207
+
178
208
  Enable tab completion for specific shells (Bash, Zsh) to make using `conductor-init` easier.
179
209
 
180
210
  #### Global Installation
@@ -0,0 +1,62 @@
1
+ import er from"yargs";import{hideBin as tr}from"yargs/helpers";import De from"@inquirer/select";var V={agentType:"opencode",agentDir:".opencode",commandsDir:"commands",displayName:"OpenCode",protocolFilename:"AGENTS.md",description:"The open source AI coding agent"};var Y={agentType:"claude-code",agentDir:".claude",commandsDir:"commands",displayName:"Claude Code",protocolFilename:"CLAUDE.md",description:"Anthropic's coding assistant"};var W={agentType:"antigravity",agentDir:".agent",commandsDir:"workflows",displayName:"Antigravity",protocolFilename:"GEMINI.md",description:"Google's agentic coding assistant"};var q={agentType:"cursor",agentDir:".cursor",commandsDir:"commands",displayName:"Cursor",protocolFilename:"AGENTS.md",description:"Cursor IDE's AI agent"};import{parse as lo}from"smol-toml";import{readFile as ro}from"fs/promises";import{join as nt,resolve as tt}from"path";import{fileURLToPath as no}from"url";import{execSync as ot}from"child_process";import{createHash as io}from"crypto";import M from"fs-extra";import{join as Ze}from"path";import{homedir as Qt}from"os";import j from"fs-extra";import{join as T}from"path";import{homedir as qe,platform as Xe}from"os";import R from"fs-extra";var O="create-conductor-flow",Jt="config.json";function ze(){if(process.env.CONDUCTOR_CONFIG_DIR)return process.env.CONDUCTOR_CONFIG_DIR;if(process.env.XDG_CONFIG_HOME)return T(process.env.XDG_CONFIG_HOME,O);let t=qe();switch(Xe()){case"win32":return T(process.env.APPDATA||T(t,"AppData","Roaming"),O);case"darwin":return T(t,".config",O);default:return T(t,".config",O)}}function Ke(){if(process.env.CONDUCTOR_CACHE_DIR)return process.env.CONDUCTOR_CACHE_DIR;if(process.env.XDG_CACHE_HOME)return T(process.env.XDG_CACHE_HOME,O);let t=qe();switch(Xe()){case"win32":return T(process.env.LOCALAPPDATA||T(t,"AppData","Local"),O);case"darwin":return T(t,".cache",O);default:return T(t,".cache",O)}}function xe(){return T(ze(),Jt)}async function Ae(){try{let t=xe();if(!await R.pathExists(t))return{};let e=await R.readFile(t,"utf-8"),o=JSON.parse(e);return typeof o!="object"||o===null||Array.isArray(o)?(console.warn("[Config] Invalid config format, using defaults"),{}):o}catch(t){return t instanceof SyntaxError&&console.warn("[Config] Config file corrupted, using defaults"),{}}}async function Je(t){let e=xe(),o=ze();await R.ensureDir(o);let n={...await Ae(),...t};await R.writeJson(e,n,{spaces:2})}async function Qe(){let t=xe();await R.pathExists(t)&&await R.remove(t)}var Zt=".gemini/cache/conductor",eo="templates";function to(){return process.env.CONDUCTOR_LEGACY_CACHE_DIR?process.env.CONDUCTOR_LEGACY_CACHE_DIR:Ze(Qt(),Zt)}function Se(){return Ze(Ke(),eo)}async function oo(t){return await j.pathExists(t)?(await j.readdir(t)).length===0:!0}async function et(){let t=to(),e=Se();try{return await j.pathExists(t)?await oo(e)?(console.log(`[Migration] Migrating cache from ${t} to ${e}...`),await j.ensureDir(e),await j.copy(t,e,{overwrite:!1}),console.log("[Migration] Cache migration completed successfully"),console.log(`[Migration] You can safely remove the old cache at: ${t}`),!0):(console.log("[Migration] New cache already exists, skipping migration"),console.log(`[Migration] You can safely remove the old cache at: ${t}`),!1):!1}catch(o){return console.warn("[Migration] Failed to migrate cache:",o instanceof Error?o.message:o),!1}}var rt=no(new URL(".",import.meta.url)),D="https://github.com/gemini-cli-extensions/conductor",E="main";function so(t=D,e=E){let o=io("md5").update(`${t}#${e}`).digest("hex");return nt(Se(),o)}function it(t=D,e=E){return so(t,e)}async function ao(t=D,e=E){let o=it(t,e);if(M.existsSync(o))try{console.log(`Updating templates from ${t} [${e}]...`),ot("git pull --rebase",{cwd:o,stdio:["ignore","ignore","pipe"]})}catch(r){console.warn(`Failed to update templates (using cached version): ${r instanceof Error?r.message:String(r)}`)}else{await M.ensureDir(o),console.log(`Downloading templates from ${t} [${e}]...`);try{ot(`git clone ${t} --branch ${e} --depth 1 .`,{cwd:o,stdio:["ignore","ignore","pipe"]})}catch(r){throw await M.remove(o),new Error(`Failed to clone templates: ${r instanceof Error?r.message:String(r)}`)}}}function h(t,e){return t.replace(/\{(\w+)\}/g,(o,r)=>Object.prototype.hasOwnProperty.call(e,r)?e[r]:o)}function co(){let t=tt(rt,"conductor");return M.existsSync(t)?t:tt(rt,"../conductor")}async function st(t,e){if(!t){let o=co();if(await M.pathExists(o))return console.log("use bundled Conductor templates"),o}return await ao(t,e),it(t,e)}async function at(t,e){let o=nt(e,t);return ro(o,"utf-8")}var Te=class{process(e,o){let{installPath:r,agentType:n,fixedAgent:i}=o,s=lo(e);if(!s.prompt)return null;let l=s.prompt;l=l.replace(/__\$\$CODE_AGENT_INSTALL_PATH\$\$__/g,r);let p=h(l,{agent_type:n});return`---
2
+ description: ${s.description||""}
3
+ agent: ${i}
4
+ ---
5
+ ${p}`}},ct=new Te;var X={agentType:"github-copilot",agentDir:".github",commandsDir:"prompts",displayName:"Github Copilot",protocolFilename:"AGENTS.md",description:"Github Copilot's Prompt Files",extension:".prompt.md",fixedAgent:"agent",strategy:{content:ct}};var z={agentType:"codex",agentDir:".codex",commandsDir:"prompts",displayName:"Codex",protocolFilename:"AGENTS.md",description:"OpenAI Codex Agent",extension:".md"};var K={agentType:"windsurf",agentDir:".windsurf",commandsDir:"workflows",displayName:"Windsurf",protocolFilename:"AGENTS.md",description:"Windsurf Cascade AI Agent"};import{parse as po}from"smol-toml";var we=class{process(e,o){let{installPath:r,agentType:n,commandName:i}=o,s=po(e);if(!s.prompt)return null;let l=s.prompt;l=l.replace(/__\$\$CODE_AGENT_INSTALL_PATH\$\$__/g,r);let p=h(l,{agent_type:n});return`# Conductor ${i?i.charAt(0).toUpperCase()+i.slice(1):"Command"}${s.description?`
6
+
7
+ `+s.description+`
8
+
9
+ `:`
10
+
11
+ `}${p}`}},lt=new we;var J={agentType:"cline",agentDir:".clinerules",commandsDir:"workflows",displayName:"Cline",protocolFilename:"AGENTS.md",description:"Cline AI coding assistant",strategy:{content:lt}};import{join as go}from"path";import mo from"fs-extra";import{parse as uo}from"smol-toml";var{writeFile:fo}=mo,Ie=class{process(e,o){let{installPath:r,agentType:n}=o;if(!uo(e).prompt)return null;let s=e.replace(/__\$\$CODE_AGENT_INSTALL_PATH\$\$__/g,r);return h(s,{agent_type:n})}},Ee=class{async write(e){let{targetDir:o,agentDir:r,commandsDir:n,commandName:i,extension:s,content:l}=e,p=`${i}${s}`;await fo(go(o,r,n,p),l)}},pt=new Ie,gt=new Ee;var Q={agentType:"gemini",agentDir:".gemini",commandsDir:"commands/conductor",displayName:"Gemini CLI",protocolFilename:"GEMINI.md",description:"Google Gemini CLI agent",extension:".toml",usesPrefix:!1,strategy:{content:pt,file:gt}};import{parse as yo}from"smol-toml";var ve=class{process(e,o){let{installPath:r,agentType:n,commandName:i}=o,s=yo(e);if(!s.prompt)return null;let l=s.prompt;l=l.replace(/__\$\$CODE_AGENT_INSTALL_PATH\$\$__/g,r);let p=h(l,{agent_type:n});return`# Conductor ${i?i.charAt(0).toUpperCase()+i.slice(1):"Command"}${s.description?`
12
+
13
+ `+s.description+`
14
+
15
+ `:`
16
+
17
+ `}${p}`}},mt=new ve;var Z={agentType:"kilo-code",agentDir:".kilocode",commandsDir:"workflows",displayName:"Kilo Code",protocolFilename:"AGENTS.md",description:"Kilo Code AI coding assistant",strategy:{content:mt}};import{parse as Co}from"smol-toml";var Oe=class{process(e,o){let{installPath:r,agentType:n,commandName:i}=o,s=Co(e);if(!s.prompt)return null;let l=s.prompt;l=l.replace("__$$CODE_AGENT_INSTALL_PATH$$__",r);let p=h(l,{agent_type:n});return`# Conductor ${i?i.charAt(0).toUpperCase()+i.slice(1):"Command"}${s.description?`
18
+
19
+ `+s.description+`
20
+
21
+ `:`
22
+
23
+ `}${p}`}},ft=new Oe;var ee={agentType:"roo-code",agentDir:".roo",commandsDir:"commands",displayName:"Roo Code",protocolFilename:"AGENTS.md",description:"Roo Code AI coding assistant",strategy:{content:ft}};import{parse as ho}from"smol-toml";var be=class{process(e,o){let{installPath:r,agentType:n}=o,i=ho(e);if(!i.prompt)return null;let s=i.prompt;s=s.replace("__$$CODE_AGENT_INSTALL_PATH$$__",r);let l=h(s,{agent_type:n}),p="";return i.description&&(p=`---
24
+ description: "${i.description.replace(/"/g,'\\"')}"
25
+ ---
26
+
27
+ `),`${p}${l}`}},dt=new be;var te={agentType:"qwen-code",agentDir:".qwen",commandsDir:"commands",displayName:"Qwen Code",protocolFilename:"AGENTS.md",description:"Qwen Code AI coding assistant",strategy:{content:dt}};import{parse as _o}from"smol-toml";var Ne=class{process(e,o){let{installPath:r,agentType:n}=o,i=_o(e);if(!i.prompt)return null;let s=i.prompt;s=s.replace("__$$CODE_AGENT_INSTALL_PATH$$__",r);let l=h(s,{agent_type:n}),p="";return i.description&&(p=`---
28
+ description: "${i.description.replace(/"/g,'\\"')}"
29
+ ---
30
+
31
+ `),`${p}${l}`}},ut=new Ne;var oe={agentType:"factory-droid",agentDir:".factory",commandsDir:"commands",displayName:"Factory Droid",protocolFilename:"AGENTS.md",description:"Factory Droid AI coding assistant",strategy:{content:ut}};var G=[V,Y,W,q,X,z,K,J,Z,ee,te,oe,Q];async function yt(t){let e=t==="codex",o=t==="cline";return await De({message:"Select installation method:",choices:e?[{name:"Global (User Home Directory)",value:"global"}]:[{name:"Project (Current Directory)",value:"project"}],default:e?"global":"project"})}async function Ct(){let t=G.map(o=>{let{displayName:r,agentType:n,protocolFilename:i,agentDir:s,commandsDir:l,description:p}=o,C=p||`${r} agent`,y=`\x1B[90m(${i}, ${s}/${l})\x1B[0m`;return{name:`${r} ${y}`,value:n,description:C}});return await De({message:"Select your coding agent:",choices:t,default:"opencode",loop:!0})}async function ht(){return await De({message:"Configure git ignore for Conductor files?",choices:[{name:"Add to .gitignore",value:"gitignore",description:"Add Conductor entries to the project's .gitignore file"},{name:"Add to .git/info/exclude",value:"exclude",description:"Add Conductor entries to .git/info/exclude (local only, not shared)"},{name:"Remove existing entries",value:"none",description:"Remove Conductor entries from both .gitignore and .git/info/exclude"},{name:"Don't configure git ignore",value:void 0,description:"Skip git ignore configuration"}],default:void 0})}import{join as xo}from"path";import Ao from"fs-extra";import{parse as To}from"smol-toml";var U="conductor-";var{writeFile:So}=Ao,Re=class{process(e,o){let{installPath:r,agentType:n}=o,i=To(e);if(!i.prompt)return null;let s=i.prompt;s=s.replace(/__\$\$CODE_AGENT_INSTALL_PATH\$\$__/g,r),s=s.replace(/\/conductor:/g,`/${U}`);let l=h(s,{agent_type:n});return i.description?`---
32
+ description: ${i.description}
33
+ ---
34
+ ${l}`:l}},Ge=class{async write(e){let{targetDir:o,agentDir:r,commandsDir:n,commandName:i,extension:s,content:l}=e,p=`${U}${i}${s}`;await So(xo(o,r,n,p),l)}},_t=new Re,xt=new Ge;import{join as x}from"path";import wo from"@inquirer/select";import St from"fs-extra";var{existsSync:b,ensureDir:At,copy:Fe}=St,I=class{constructor(e){this.config=e}async validate(e,o){if(!b(e))throw new Error(`Target directory does not exist: ${e}`);let{agentDir:r,commandsDir:n,displayName:i,extension:s,usesPrefix:l}=this.config,y=`${l!==!1?U:""}setup${s||".md"}`,f=x(e,r,n,y),_=x(e,r,"conductor");if(b(_)&&b(f))throw new Error(`Conductor (${i}) is already installed in: ${e}`);return e}async generate(e,o,r,n,i){let{agentDir:s,commandsDir:l,agentType:p}=this.config,C=x(e,s),y=x(C,l),f=x(s,"conductor");o==="global"&&(f=`~/${s}/conductor`),await At(y),await At(x(C,"conductor"));let _=await st(r,n);try{let d=x(_,"templates"),S=x(C,"conductor","templates");await Fe(d,S)}catch(d){console.warn("Failed to copy templates directory:",d)}let{protocolFilename:P}=this.config;if(P)try{let d=x(_,"GEMINI.md"),S=x(e,P);if(b(d)){let N=!0;b(S)&&!i&&(N=await wo({message:`The protocol file '${P}' already exists. Do you want to overwrite it?`,choices:[{value:!0,name:"Overwrite"},{value:!1,name:"Skip"}]})),N&&await Fe(d,S)}}catch(d){console.warn("Failed to handle protocol file:",d)}let L=[];try{let d=x(_,"commands/conductor");if(b(d)){let S=await St.readdir(d);Array.isArray(S)&&(L=S.filter(N=>N.endsWith(".toml")).map(N=>N.replace(/\.toml$/,"")))}}catch(d){console.warn("Failed to discover commands:",d)}L.length===0?(console.log("No commands discovered, using default commands"),L=["setup","newTrack","implement","status","revert","review"]):console.log(`Discovered commands: ${L.join(", ")}`);let zt=this.config.extension||".md",Kt=this.config.fixedAgent;for(let d of L)try{let S=await at(x("commands","conductor",`${d}.toml`),_),We=(this.config.strategy?.content||_t).process(S,{installPath:f,agentType:p,fixedAgent:Kt,commandName:d});We&&await(this.config.strategy?.file||xt).write({targetDir:e,agentDir:s,commandsDir:l,commandName:d,extension:zt,content:We})}catch(S){console.warn(`Failed to process ${d}:`,S)}let Ve=x(_,"templates/workflow.md"),Ye=x(e,"conductor/workflow.md");if(b(Ye)&&b(Ve))try{await Fe(Ve,Ye),console.log("\u2714 conductor/workflow.md synced")}catch(d){console.warn("Failed to handle workflow file:",d)}else console.warn("Workflow template not found, skipping workflow file sync")}};function u(t){return new I(t)}var re=class{generator=u(V);validate(e,o){return this.generator.validate(e,o)}generate(e,o,r,n,i){return this.generator.generate(e,o,r,n,i)}};var ne=class{generator=u(Y);validate(e,o){return this.generator.validate(e,o)}generate(e,o,r,n,i){return this.generator.generate(e,o,r,n,i)}};var ie=class{generator=u(W);validate(e,o){return this.generator.validate(e,o)}generate(e,o,r,n,i){return this.generator.generate(e,o,r,n,i)}};var se=class{generator=u(q);validate(e,o){return this.generator.validate(e,o)}generate(e,o,r,n,i){return this.generator.generate(e,o,r,n,i)}};var ae=class{generator=u(X);validate(e,o){return this.generator.validate(e,o)}generate(e,o,r,n,i){return this.generator.generate(e,o,r,n,i)}};import{homedir as Tt}from"os";var ce=class{generator=u(z);validate(e,o){return o==="global"&&(e=Tt()),this.generator.validate(e,o)}generate(e,o,r,n,i){return o==="global"&&(e=Tt()),this.generator.generate(e,o,r,n,i)}};var le=class{generator=u(K);validate(e,o){return this.generator.validate(e,o)}generate(e,o,r,n,i){return this.generator.generate(e,o,r,n,i)}};var pe=class{generator=u(J);validate(e,o){return this.generator.validate(e,o)}generate(e,o,r,n,i){return this.generator.generate(e,o,r,n,i)}};var ge=class{generator=u(Q);async validate(e,o){if(o==="global")throw new Error("Gemini CLI agent only supports project-level installation");return this.generator.validate(e,o)}async generate(e,o,r,n,i){if(o==="global")throw new Error("Gemini CLI agent only supports project-level installation");return this.generator.generate(e,o,r,n,i)}};var me=class{generator=u(Z);validate(e,o){return this.generator.validate(e,o)}generate(e,o,r,n,i){return this.generator.generate(e,o,r,n,i)}};var fe=class extends I{constructor(){super(ee)}};var de=class extends I{constructor(){super(te)}};var ue=class extends I{constructor(){super(oe)}};function wt(t){switch(t){case"claude-code":return new ne;case"antigravity":return new ie;case"cursor":return new se;case"github-copilot":return new ae;case"codex":return new ce;case"windsurf":return new le;case"cline":return new pe;case"kilo-code":return new me;case"roo-code":return new fe;case"qwen-code":return new de;case"factory-droid":return new ue;case"gemini":return new ge;default:return new re}}import{resolve as Fo}from"path";import $o from"@inquirer/select";import{join as $e}from"path";import{readFile as Pe,writeFile as It,access as Io,mkdir as Eo}from"fs/promises";import{constants as vo}from"fs";var Et="# Conductor";function vt(t){let e=G.find(r=>r.agentType===t);if(!e)return[];let o=[];return e.agentDir&&o.push(e.agentDir),e.protocolFilename&&o.push(e.protocolFilename),o}function B(t){return t.replace(/\/+$/,"")}async function Le(t){try{return await Io(t,vo.F_OK),!0}catch{return!1}}async function Oo(t,e){let o=[],r=[];if(!await Le(t))return{existing:[],missing:[...e]};let i=(await Pe(t,"utf-8")).split(`
35
+ `).map(s=>B(s.trim()));for(let s of e){let l=B(s);i.includes(l)?o.push(s):r.push(s)}return{existing:o,missing:r}}async function Ot(t,e){let{existing:o,missing:r}=await Oo(t,e);if(r.length===0)return{added:[],skipped:o};let n="";await Le(t)&&(n=await Pe(t,"utf-8")),n.length>0&&!n.endsWith(`
36
+ `)&&(n+=`
37
+ `),n+=`
38
+ ${Et}
39
+ `;for(let s of r)n+=`${s}
40
+ `;let i=$e(t,"..");return await Eo(i,{recursive:!0}),await It(t,n,"utf-8"),{added:r,skipped:o}}async function je(t,e){if(!await Le(t))return{removed:[]};let r=(await Pe(t,"utf-8")).split(`
41
+ `),n=e.map(B),i=[],s=[];for(let y of r){let f=B(y.trim());if(f!==Et){if(n.includes(f)){let _=e.find(P=>B(P)===f);_&&!i.includes(_)&&i.push(_);continue}s.push(y)}}let l=[],p=!1;for(let y of s){let f=y.trim()==="";f&&p||(l.push(y),p=f)}for(;l.length>0&&l[l.length-1].trim()==="";)l.pop();let C=l.length>0?l.join(`
42
+ `)+`
43
+ `:"";return await It(t,C,"utf-8"),{removed:i}}function ye(t,e){return e==="gitignore"?$e(t,".gitignore"):$e(t,".git","info","exclude")}async function bt(t,e,o){let r=vt(o);return r.length===0?{action:"none",entries:[],message:`No git ignore entries found for agent ${o}`}:e==="none"?await No(t,r):await bo(t,e,r)}async function bo(t,e,o){let r=ye(t,e),n=await Ot(r,o);if(n.added.length===0)return{action:"skipped",entries:n.skipped,message:"Git ignore entries already present, skipping.",targetFiles:[r]};let i=e==="gitignore"?".gitignore":".git/info/exclude";return{action:"added",entries:n.added,message:`Added ${n.added.length} entries to ${i}: ${n.added.join(", ")}`,targetFiles:[r]}}async function No(t,e){let o=ye(t,"gitignore"),r=ye(t,"exclude"),n=await je(o,e),i=await je(r,e),s=[...new Set([...n.removed,...i.removed])];if(s.length===0)return{action:"none",entries:[],message:"No Conductor git ignore entries found."};let l=[],p=[];return n.removed.length>0&&(l.push(o),p.push(`.gitignore (${n.removed.length})`)),i.removed.length>0&&(l.push(r),p.push(`.git/info/exclude (${i.removed.length})`)),{action:"removed",entries:s,message:`Removed entries from: ${p.join(", ")}`,targetFiles:l}}import Do from"@inquirer/select";import Nt from"@inquirer/input";var v={SELECT_SOURCE_MESSAGE:"Select template source:",BUNDLED_LABEL:"Bundled Templates (Offline)",BUNDLED_DESCRIPTION:"Use built-in templates, no network required",OFFICIAL_LABEL:"Official Repository (Latest)",OFFICIAL_DESCRIPTION:"Fetch latest from official repository",CUSTOM_LABEL:"Custom Repository",CUSTOM_DESCRIPTION:"Specify your own repository and branch",CUSTOM_REPO_PROMPT:"Enter repository URL:",CUSTOM_BRANCH_PROMPT:"Enter branch name:"},Ce={USING_BUNDLED:"Using bundled Conductor templates",DOWNLOADING_FROM:(t,e)=>`Downloading templates from ${t} [${e}]...`,NON_INTERACTIVE_BUNDLED:"Non-interactive mode detected. Using bundled templates."};function Ro(){return!(process.env.CI==="true"||!process.stdin.isTTY)}function Go(t){if(!t||t.trim().length===0)return"Repository URL is required";let e=t.trim();return e.startsWith("https://")||e.startsWith("git@")||e.startsWith("/")||e.startsWith("./")||e.startsWith("../")?!0:"Invalid repository URL. Please provide an HTTPS URL, SSH URL, or local path."}async function Dt(){if(!Ro())return console.log(Ce.NON_INTERACTIVE_BUNDLED),{source:"bundled"};switch(await Do({message:v.SELECT_SOURCE_MESSAGE,choices:[{name:v.BUNDLED_LABEL,value:"bundled",description:v.BUNDLED_DESCRIPTION},{name:v.OFFICIAL_LABEL,value:"official",description:v.OFFICIAL_DESCRIPTION},{name:v.CUSTOM_LABEL,value:"custom",description:v.CUSTOM_DESCRIPTION}],default:"bundled"})){case"bundled":return{source:"bundled"};case"official":return{source:"official",repo:D,branch:E};case"custom":{let e=await Nt({message:v.CUSTOM_REPO_PROMPT,validate:Go}),o=await Nt({message:v.CUSTOM_BRANCH_PROMPT,default:E});return{source:"custom",repo:e.trim(),branch:o.trim()||E}}default:return{source:"bundled"}}}function Rt(t){switch(t.source){case"bundled":return{repo:void 0,branch:void 0};case"official":case"custom":return{repo:t.repo,branch:t.branch};default:return{repo:void 0,branch:void 0}}}async function Gt(t){let e=Fo(process.cwd(),t.path),o=t.force??!1,r=t.config??{};try{console.log(`Initializing Conductor in: ${e}`);let n;t.agent?(n=t.agent,console.log(`Using provided agent: ${n}`)):r.agent?(n=r.agent,console.log(`[Config] Using saved agent: ${n}`)):(console.log("Step 1: Prompting for agent selection..."),n=await Ct(),console.log(`\u2714 Selected agent: ${n}`));let i;t.scope?(i=t.scope,console.log(`Using provided scope: ${i}`)):i=await yt(n),console.log(`\u2714 Selected scope: ${i}`);let s=t.gitIgnore;t.gitIgnore&&i==="global"?(console.warn("\u26A0 --git-ignore flag is only supported for project scope. Skipping git ignore configuration."),s=void 0):!t.gitIgnore&&i==="project"&&(r.gitIgnore?(s=r.gitIgnore,console.log(`[Config] Using saved git-ignore: ${s}`)):s=await ht());let l=t.repo,p=t.branch;if(t.repo)console.log(`Using provided repository: ${t.repo}`),t.branch&&console.log(`Using provided branch: ${t.branch}`);else if(r.repo)l=r.repo,p=r.branch??p,console.log(`[Config] Using saved template source: ${l} [${p}]`);else{let f=await Dt(),_=Rt(f);l=_.repo,p=_.branch,f.source==="bundled"?console.log(`\u2714 ${Ce.USING_BUNDLED}`):l&&console.log(`\u2714 ${Ce.DOWNLOADING_FROM(l,p||"main")}`)}let C=wt(n);console.log(`
44
+ Step 3: Validating project directory...`);let y;try{y=await C.validate(e,i)}catch(f){if(f instanceof Error&&f.message.includes("already installed"))if(o)console.log("\u26A0 Force mode: Overwriting existing installation"),y=e;else if(await $o({message:`${f.message}
45
+ Do you want to overwrite the existing installation?`,choices:[{value:!0,name:"Yes, overwrite"},{value:!1,name:"No, cancel"}]}))console.log("Overwriting existing installation..."),y=e;else{console.log("Installation cancelled.");return}else throw f}if(console.log(`\u2714 Validation complete: ${y}`),console.log(`
46
+ Step 4: Generating files...`),await C.generate(y,i,l,p,o),console.log("\u2714 Files generated"),s){console.log(`
47
+ Step 5: Configuring git ignore...`);let f=await bt(y,s,n);console.log(`\u2714 ${f.message}`)}console.log(`
48
+ Saving preferences...`),await Je({agent:n,repo:l,branch:p,gitIgnore:s}),console.log("\u2714 Preferences saved"),console.log(`
49
+ \u2714 Conductor initialized successfully!`)}catch(n){console.error(`
50
+ \u2718 Installation failed:`,n instanceof Error?n.message:n),process.exit(1)}}import Jo from"gradient-string";var Ft=(t=0)=>e=>`\x1B[${e+t}m`,$t=(t=0)=>e=>`\x1B[${38+t};5;${e}m`,Pt=(t=0)=>(e,o,r)=>`\x1B[${38+t};2;${e};${o};${r}m`,g={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},Jc=Object.keys(g.modifier),Po=Object.keys(g.color),Lo=Object.keys(g.bgColor),Qc=[...Po,...Lo];function jo(){let t=new Map;for(let[e,o]of Object.entries(g)){for(let[r,n]of Object.entries(o))g[r]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},o[r]=g[r],t.set(n[0],n[1]);Object.defineProperty(g,e,{value:o,enumerable:!1})}return Object.defineProperty(g,"codes",{value:t,enumerable:!1}),g.color.close="\x1B[39m",g.bgColor.close="\x1B[49m",g.color.ansi=Ft(),g.color.ansi256=$t(),g.color.ansi16m=Pt(),g.bgColor.ansi=Ft(10),g.bgColor.ansi256=$t(10),g.bgColor.ansi16m=Pt(10),Object.defineProperties(g,{rgbToAnsi256:{value(e,o,r){return e===o&&o===r?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(o/255*5)+Math.round(r/255*5)},enumerable:!1},hexToRgb:{value(e){let o=/[a-f\d]{6}|[a-f\d]{3}/i.exec(e.toString(16));if(!o)return[0,0,0];let[r]=o;r.length===3&&(r=[...r].map(i=>i+i).join(""));let n=Number.parseInt(r,16);return[n>>16&255,n>>8&255,n&255]},enumerable:!1},hexToAnsi256:{value:e=>g.rgbToAnsi256(...g.hexToRgb(e)),enumerable:!1},ansi256ToAnsi:{value(e){if(e<8)return 30+e;if(e<16)return 90+(e-8);let o,r,n;if(e>=232)o=((e-232)*10+8)/255,r=o,n=o;else{e-=16;let l=e%36;o=Math.floor(e/36)/5,r=Math.floor(l/6)/5,n=l%6/5}let i=Math.max(o,r,n)*2;if(i===0)return 30;let s=30+(Math.round(n)<<2|Math.round(r)<<1|Math.round(o));return i===2&&(s+=60),s},enumerable:!1},rgbToAnsi:{value:(e,o,r)=>g.ansi256ToAnsi(g.rgbToAnsi256(e,o,r)),enumerable:!1},hexToAnsi:{value:e=>g.ansi256ToAnsi(g.hexToAnsi256(e)),enumerable:!1}}),g}var Mo=jo(),w=Mo;import Me from"process";import Uo from"os";import Lt from"tty";function A(t,e=globalThis.Deno?globalThis.Deno.args:Me.argv){let o=t.startsWith("-")?"":t.length===1?"-":"--",r=e.indexOf(o+t),n=e.indexOf("--");return r!==-1&&(n===-1||r<n)}var{env:m}=Me,he;A("no-color")||A("no-colors")||A("color=false")||A("color=never")?he=0:(A("color")||A("colors")||A("color=true")||A("color=always"))&&(he=1);function Bo(){if("FORCE_COLOR"in m)return m.FORCE_COLOR==="true"?1:m.FORCE_COLOR==="false"?0:m.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(m.FORCE_COLOR,10),3)}function ko(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function Ho(t,{streamIsTTY:e,sniffFlags:o=!0}={}){let r=Bo();r!==void 0&&(he=r);let n=o?he:r;if(n===0)return 0;if(o){if(A("color=16m")||A("color=full")||A("color=truecolor"))return 3;if(A("color=256"))return 2}if("TF_BUILD"in m&&"AGENT_NAME"in m)return 1;if(t&&!e&&n===void 0)return 0;let i=n||0;if(m.TERM==="dumb")return i;if(Me.platform==="win32"){let s=Uo.release().split(".");return Number(s[0])>=10&&Number(s[2])>=10586?Number(s[2])>=14931?3:2:1}if("CI"in m)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(s=>s in m)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(s=>s in m)||m.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in m)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(m.TEAMCITY_VERSION)?1:0;if(m.COLORTERM==="truecolor"||m.TERM==="xterm-kitty"||m.TERM==="xterm-ghostty"||m.TERM==="wezterm")return 3;if("TERM_PROGRAM"in m){let s=Number.parseInt((m.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(m.TERM_PROGRAM){case"iTerm.app":return s>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(m.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(m.TERM)||"COLORTERM"in m?1:i}function jt(t,e={}){let o=Ho(t,{streamIsTTY:t&&t.isTTY,...e});return ko(o)}var Vo={stdout:jt({isTTY:Lt.isatty(1)}),stderr:jt({isTTY:Lt.isatty(2)})},Mt=Vo;function Ut(t,e,o){let r=t.indexOf(e);if(r===-1)return t;let n=e.length,i=0,s="";do s+=t.slice(i,r)+e+o,i=r+n,r=t.indexOf(e,i);while(r!==-1);return s+=t.slice(i),s}function Bt(t,e,o,r){let n=0,i="";do{let s=t[r-1]==="\r";i+=t.slice(n,s?r-1:r)+e+(s?`\r
51
+ `:`
52
+ `)+o,n=r+1,r=t.indexOf(`
53
+ `,n)}while(r!==-1);return i+=t.slice(n),i}var{stdout:kt,stderr:Ht}=Mt,Ue=Symbol("GENERATOR"),F=Symbol("STYLER"),k=Symbol("IS_EMPTY"),Vt=["ansi","ansi","ansi256","ansi16m"],$=Object.create(null),Yo=(t,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let o=kt?kt.level:0;t.level=e.level===void 0?o:e.level};var Wo=t=>{let e=(...o)=>o.join(" ");return Yo(e,t),Object.setPrototypeOf(e,H.prototype),e};function H(t){return Wo(t)}Object.setPrototypeOf(H.prototype,Function.prototype);for(let[t,e]of Object.entries(w))$[t]={get(){let o=_e(this,ke(e.open,e.close,this[F]),this[k]);return Object.defineProperty(this,t,{value:o}),o}};$.visible={get(){let t=_e(this,this[F],!0);return Object.defineProperty(this,"visible",{value:t}),t}};var Be=(t,e,o,...r)=>t==="rgb"?e==="ansi16m"?w[o].ansi16m(...r):e==="ansi256"?w[o].ansi256(w.rgbToAnsi256(...r)):w[o].ansi(w.rgbToAnsi(...r)):t==="hex"?Be("rgb",e,o,...w.hexToRgb(...r)):w[o][t](...r),qo=["rgb","hex","ansi256"];for(let t of qo){$[t]={get(){let{level:o}=this;return function(...r){let n=ke(Be(t,Vt[o],"color",...r),w.color.close,this[F]);return _e(this,n,this[k])}}};let e="bg"+t[0].toUpperCase()+t.slice(1);$[e]={get(){let{level:o}=this;return function(...r){let n=ke(Be(t,Vt[o],"bgColor",...r),w.bgColor.close,this[F]);return _e(this,n,this[k])}}}}var Xo=Object.defineProperties(()=>{},{...$,level:{enumerable:!0,get(){return this[Ue].level},set(t){this[Ue].level=t}}}),ke=(t,e,o)=>{let r,n;return o===void 0?(r=t,n=e):(r=o.openAll+t,n=e+o.closeAll),{open:t,close:e,openAll:r,closeAll:n,parent:o}},_e=(t,e,o)=>{let r=(...n)=>zo(r,n.length===1?""+n[0]:n.join(" "));return Object.setPrototypeOf(r,Xo),r[Ue]=t,r[F]=e,r[k]=o,r},zo=(t,e)=>{if(t.level<=0||!e)return t[k]?"":e;let o=t[F];if(o===void 0)return e;let{openAll:r,closeAll:n}=o;if(e.includes("\x1B"))for(;o!==void 0;)e=Ut(e,o.close,o.open),o=o.parent;let i=e.indexOf(`
54
+ `);return i!==-1&&(e=Bt(e,n,r,i)),r+e+n};Object.defineProperties(H.prototype,$);var Ko=H(),gl=H({level:Ht?Ht.level:0});var Yt=Ko;import Wt from"fs";import He from"path";import{fileURLToPath as Qo}from"url";var Zo=`
55
+ __________ _ ______ __ __________________ ____ ________ ____ _ __
56
+ / ____/ __ \\/ | / / __ \\/ / / / ____/_ __/ __ \\/ __ \\ / ____/ / / __ \\| | / /
57
+ / / / / / / |/ / / / / / / / / / / / / / / /_/ / / /_ / / / / / /| | /| / /
58
+ / /___/ /_/ / /| / /_/ / /_/ / /___ / / / /_/ / _, _/ / __/ / /___/ /_/ / | |/ |/ /
59
+ \\____/\\____/_/ |_/_____/\\____/\\____/ /_/ \\____/_/ |_| /_/ /_____/\\____/ |__/|__/
60
+
61
+ `;function qt(){let t=He.dirname(Qo(import.meta.url)),e=He.join(t,"../package.json");Wt.existsSync(e)||(e=He.join(t,"../../package.json"));let r=JSON.parse(Wt.readFileSync(e,"utf-8")).version;console.log(Yt.dim(` v${r} | Scaffolding for Gemini Conductor
62
+ `))}function Xt(){console.log(Jo("cyan","green")(Zo))}async function or(t){let e=er(tr(process.argv));return process.env.COLUMNS&&e.wrap(parseInt(process.env.COLUMNS)),await e.scriptName(t).usage("$0 [path] [options]").positional("path",{describe:"Directory to install Conductor",default:".",type:"string"}).option("agent",{alias:"a",describe:"Specify the coding agent",type:"string",choices:G.map(o=>o.agentType)}).option("repo",{alias:"r",describe:"Git repository URL for templates. Without this flag, interactive template source selection is shown.",type:"string"}).coerce("repo",o=>o===""?D:o).option("branch",{alias:"b",describe:"Branch name for template repository",type:"string",default:E}).option("scope",{alias:"s",describe:"Installation scope (project or global)",type:"string",choices:["project","global"]}).option("git-ignore",{alias:"g",describe:"Configure git ignore for Conductor files (gitignore: add to .gitignore, exclude: add to .git/info/exclude, none: remove entries)",type:"string",choices:["gitignore","exclude","none"]}).coerce("git-ignore",o=>o===""?"exclude":o).option("force",{alias:"f",describe:"Force overwrite existing installation",type:"boolean",default:!1}).option("reset",{describe:"Clear saved preferences and show all prompts",type:"boolean",default:!1}).example("$0","Install with interactive prompts (template source selection)").example("$0 --agent claude-code","Install for Claude Code agent").example("$0 --repo https://github.com/user/templates","Use custom template repository").example("$0 --git-ignore gitignore","Add Conductor files to .gitignore").example("$0 --git-ignore exclude","Add Conductor files to .git/info/exclude").example("$0 --git-ignore none","Remove Conductor entries from git ignore").example("$0 --reset","Clear saved preferences and show all prompts").help().alias("h","help").version().alias("v","version").completion("completion",!1).parseAsync()}async function bl(t){!process.env.CONDUCTOR_NO_BANNER&&!process.argv.includes("completion")&&!process.argv.includes("--get-yargs-completions")&&(Xt(),qt());let e=await or(t),o=e._[0];if(process.argv.includes("completion")||process.argv.includes("--get-yargs-completions"))return;let r={};e.reset?(console.log("[Config] Clearing saved preferences..."),await Qe()):(r=await Ae(),Object.keys(r).length>0&&console.log("[Config] Loaded saved preferences")),await et(),await Gt({...e,path:o||e.path||".",gitIgnore:e["git-ignore"],$0:"conductor-init",_:e._,config:r})}export{bl as a};
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{a as r}from"./chunk-SFEQONKN.js";r("conductor-init").catch(o=>{console.error("Error:",o instanceof Error?o.message:o),process.exit(1)});
2
+ import{a as r}from"./chunk-J2Z6BQJV.js";r("conductor-init").catch(o=>{console.error("Error:",o instanceof Error?o.message:o),process.exit(1)});
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{a as r}from"./chunk-SFEQONKN.js";r("npm create conductor-flow").catch(o=>{console.error("Error:",o instanceof Error?o.message:o),process.exit(1)});
2
+ import{a as r}from"./chunk-J2Z6BQJV.js";r("npm create conductor-flow").catch(o=>{console.error("Error:",o instanceof Error?o.message:o),process.exit(1)});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "conductor-init",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Conductor Scaffolding CLI - Generate spec-driven, portable Gemini Conductor workflows for any coding agent",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [
@@ -1,61 +0,0 @@
1
- import Go from"yargs";import{hideBin as Fo}from"yargs/helpers";import Ie from"@inquirer/select";var M={agentType:"opencode",agentDir:".opencode",commandsDir:"commands",displayName:"OpenCode",protocolFilename:"AGENTS.md",description:"The open source AI coding agent"};var B={agentType:"claude-code",agentDir:".claude",commandsDir:"commands",displayName:"Claude Code",protocolFilename:"CLAUDE.md",description:"Anthropic's coding assistant"};var k={agentType:"antigravity",agentDir:".agent",commandsDir:"workflows",displayName:"Antigravity",protocolFilename:"GEMINI.md",description:"Google's agentic coding assistant"};var V={agentType:"cursor",agentDir:".cursor",commandsDir:"commands",displayName:"Cursor",protocolFilename:"AGENTS.md",description:"Cursor IDE's AI agent"};import{parse as kt}from"smol-toml";import{readFile as Pt}from"fs/promises";import{join as Ve,resolve as Me}from"path";import{fileURLToPath as Lt}from"url";import{homedir as jt}from"os";import{execSync as Be}from"child_process";import{createHash as Ut}from"crypto";import $ from"fs-extra";var ke=Lt(new URL(".",import.meta.url)),v="https://github.com/gemini-cli-extensions/conductor",b="main";function He(t=v,e=b){let o=Ut("md5").update(`${t}#${e}`).digest("hex");return Ve(jt(),".gemini/cache/conductor",o)}async function Mt(t=v,e=b){let o=He(t,e);if($.existsSync(o))try{console.log(`Updating templates from ${t} [${e}]...`),Be("git pull --rebase",{cwd:o,stdio:["ignore","ignore","pipe"]})}catch(r){console.warn(`Failed to update templates (using cached version): ${r instanceof Error?r.message:String(r)}`)}else{await $.ensureDir(o),console.log(`Downloading templates from ${t} [${e}]...`);try{Be(`git clone ${t} --branch ${e} --depth 1 .`,{cwd:o,stdio:["ignore","ignore","pipe"]})}catch(r){throw await $.remove(o),new Error(`Failed to clone templates: ${r instanceof Error?r.message:String(r)}`)}}}function C(t,e){return t.replace(/\{(\w+)\}/g,(o,r)=>Object.prototype.hasOwnProperty.call(e,r)?e[r]:o)}function Bt(){let t=Me(ke,"conductor");return $.existsSync(t)?t:Me(ke,"../conductor")}async function We(t,e){if(!t){let o=Bt();if(await $.pathExists(o))return console.log("use bundled Conductor templates"),o}return await Mt(t,e),He(t,e)}async function Ye(t,e){let o=Ve(e,t);return Pt(o,"utf-8")}var ye=class{process(e,o){let{installPath:r,agentType:n,fixedAgent:i}=o,s=kt(e);if(!s.prompt)return null;let l=s.prompt;l=l.replace(/__\$\$CODE_AGENT_INSTALL_PATH\$\$__/g,r);let p=C(l,{agent_type:n});return`---
2
- description: ${s.description||""}
3
- agent: ${i}
4
- ---
5
- ${p}`}},qe=new ye;var H={agentType:"github-copilot",agentDir:".github",commandsDir:"prompts",displayName:"Github Copilot",protocolFilename:"AGENTS.md",description:"Github Copilot's Prompt Files",extension:".prompt.md",fixedAgent:"agent",strategy:{content:qe}};var W={agentType:"codex",agentDir:".codex",commandsDir:"prompts",displayName:"Codex",protocolFilename:"AGENTS.md",description:"OpenAI Codex Agent",extension:".md"};var Y={agentType:"windsurf",agentDir:".windsurf",commandsDir:"workflows",displayName:"Windsurf",protocolFilename:"AGENTS.md",description:"Windsurf Cascade AI Agent"};import{parse as Vt}from"smol-toml";var Ce=class{process(e,o){let{installPath:r,agentType:n,commandName:i}=o,s=Vt(e);if(!s.prompt)return null;let l=s.prompt;l=l.replace(/__\$\$CODE_AGENT_INSTALL_PATH\$\$__/g,r);let p=C(l,{agent_type:n});return`# Conductor ${i?i.charAt(0).toUpperCase()+i.slice(1):"Command"}${s.description?`
6
-
7
- `+s.description+`
8
-
9
- `:`
10
-
11
- `}${p}`}},ze=new Ce;var q={agentType:"cline",agentDir:".clinerules",commandsDir:"workflows",displayName:"Cline",protocolFilename:"AGENTS.md",description:"Cline AI coding assistant",strategy:{content:ze}};import{join as Ht}from"path";import Wt from"fs-extra";import{parse as qt}from"smol-toml";var{writeFile:Yt}=Wt,_e=class{process(e,o){let{installPath:r,agentType:n}=o;if(!qt(e).prompt)return null;let s=e.replace(/__\$\$CODE_AGENT_INSTALL_PATH\$\$__/g,r);return C(s,{agent_type:n})}},he=class{async write(e){let{targetDir:o,agentDir:r,commandsDir:n,commandName:i,extension:s,content:l}=e,p=`${i}${s}`;await Yt(Ht(o,r,n,p),l)}},Ke=new _e,Xe=new he;var z={agentType:"gemini",agentDir:".gemini",commandsDir:"commands/conductor",displayName:"Gemini CLI",protocolFilename:"GEMINI.md",description:"Google Gemini CLI agent",extension:".toml",usesPrefix:!1,strategy:{content:Ke,file:Xe}};import{parse as zt}from"smol-toml";var xe=class{process(e,o){let{installPath:r,agentType:n,commandName:i}=o,s=zt(e);if(!s.prompt)return null;let l=s.prompt;l=l.replace(/__\$\$CODE_AGENT_INSTALL_PATH\$\$__/g,r);let p=C(l,{agent_type:n});return`# Conductor ${i?i.charAt(0).toUpperCase()+i.slice(1):"Command"}${s.description?`
12
-
13
- `+s.description+`
14
-
15
- `:`
16
-
17
- `}${p}`}},Je=new xe;var K={agentType:"kilo-code",agentDir:".kilocode",commandsDir:"workflows",displayName:"Kilo Code",protocolFilename:"AGENTS.md",description:"Kilo Code AI coding assistant",strategy:{content:Je}};import{parse as Kt}from"smol-toml";var Ae=class{process(e,o){let{installPath:r,agentType:n,commandName:i}=o,s=Kt(e);if(!s.prompt)return null;let l=s.prompt;l=l.replace("__$$CODE_AGENT_INSTALL_PATH$$__",r);let p=C(l,{agent_type:n});return`# Conductor ${i?i.charAt(0).toUpperCase()+i.slice(1):"Command"}${s.description?`
18
-
19
- `+s.description+`
20
-
21
- `:`
22
-
23
- `}${p}`}},Qe=new Ae;var X={agentType:"roo-code",agentDir:".roo",commandsDir:"commands",displayName:"Roo Code",protocolFilename:"AGENTS.md",description:"Roo Code AI coding assistant",strategy:{content:Qe}};import{parse as Xt}from"smol-toml";var Se=class{process(e,o){let{installPath:r,agentType:n}=o,i=Xt(e);if(!i.prompt)return null;let s=i.prompt;s=s.replace("__$$CODE_AGENT_INSTALL_PATH$$__",r);let l=C(s,{agent_type:n}),p="";return i.description&&(p=`---
24
- description: "${i.description.replace(/"/g,'\\"')}"
25
- ---
26
-
27
- `),`${p}${l}`}},Ze=new Se;var J={agentType:"qwen-code",agentDir:".qwen",commandsDir:"commands",displayName:"Qwen Code",protocolFilename:"AGENTS.md",description:"Qwen Code AI coding assistant",strategy:{content:Ze}};import{parse as Jt}from"smol-toml";var Te=class{process(e,o){let{installPath:r,agentType:n}=o,i=Jt(e);if(!i.prompt)return null;let s=i.prompt;s=s.replace("__$$CODE_AGENT_INSTALL_PATH$$__",r);let l=C(s,{agent_type:n}),p="";return i.description&&(p=`---
28
- description: "${i.description.replace(/"/g,'\\"')}"
29
- ---
30
-
31
- `),`${p}${l}`}},et=new Te;var Q={agentType:"factory-droid",agentDir:".factory",commandsDir:"commands",displayName:"Factory Droid",protocolFilename:"AGENTS.md",description:"Factory Droid AI coding assistant",strategy:{content:et}};var N=[M,B,k,V,H,W,Y,q,K,X,J,Q,z];async function tt(t){let e=t==="codex",o=t==="cline";return await Ie({message:"Select installation method:",choices:e?[{name:"Global (User Home Directory)",value:"global"}]:[{name:"Project (Current Directory)",value:"project"}],default:e?"global":"project"})}async function ot(){let t=N.map(o=>{let{displayName:r,agentType:n,protocolFilename:i,agentDir:s,commandsDir:l,description:p}=o,d=p||`${r} agent`,f=`\x1B[90m(${i}, ${s}/${l})\x1B[0m`;return{name:`${r} ${f}`,value:n,description:d}});return await Ie({message:"Select your coding agent:",choices:t,default:"opencode",loop:!0})}async function rt(){return await Ie({message:"Configure git ignore for Conductor files?",choices:[{name:"Add to .gitignore",value:"gitignore",description:"Add Conductor entries to the project's .gitignore file"},{name:"Add to .git/info/exclude",value:"exclude",description:"Add Conductor entries to .git/info/exclude (local only, not shared)"},{name:"Remove existing entries",value:"none",description:"Remove Conductor entries from both .gitignore and .git/info/exclude"},{name:"Don't configure git ignore",value:void 0,description:"Skip git ignore configuration"}],default:void 0})}import{join as Qt}from"path";import Zt from"fs-extra";import{parse as to}from"smol-toml";var P="conductor-";var{writeFile:eo}=Zt,we=class{process(e,o){let{installPath:r,agentType:n}=o,i=to(e);if(!i.prompt)return null;let s=i.prompt;s=s.replace(/__\$\$CODE_AGENT_INSTALL_PATH\$\$__/g,r),s=s.replace(/\/conductor:/g,`/${P}`);let l=C(s,{agent_type:n});return i.description?`---
32
- description: ${i.description}
33
- ---
34
- ${l}`:l}},be=class{async write(e){let{targetDir:o,agentDir:r,commandsDir:n,commandName:i,extension:s,content:l}=e,p=`${P}${i}${s}`;await eo(Qt(o,r,n,p),l)}},nt=new we,it=new be;import{join as h}from"path";import oo from"@inquirer/select";import at from"fs-extra";var{existsSync:E,ensureDir:st,copy:Ee}=at,I=class{constructor(e){this.config=e}async validate(e,o){if(!E(e))throw new Error(`Target directory does not exist: ${e}`);let{agentDir:r,commandsDir:n,displayName:i,extension:s,usesPrefix:l}=this.config,f=`${l!==!1?P:""}setup${s||".md"}`,_=h(e,r,n,f),A=h(e,r,"conductor");if(E(A)&&E(_))throw new Error(`Conductor (${i}) is already installed in: ${e}`);return e}async generate(e,o,r,n,i){let{agentDir:s,commandsDir:l,agentType:p}=this.config,d=h(e,s),f=h(d,l),_=h(s,"conductor");o==="global"&&(_=`~/${s}/conductor`),await st(f),await st(h(d,"conductor"));let A=await We(r,n);try{let u=h(A,"templates"),S=h(d,"conductor","templates");await Ee(u,S)}catch(u){console.warn("Failed to copy templates directory:",u)}let{protocolFilename:G}=this.config;if(G)try{let u=h(A,"GEMINI.md"),S=h(e,G);if(E(u)){let O=!0;E(S)&&!i&&(O=await oo({message:`The protocol file '${G}' already exists. Do you want to overwrite it?`,choices:[{value:!0,name:"Overwrite"},{value:!1,name:"Skip"}]})),O&&await Ee(u,S)}}catch(u){console.warn("Failed to handle protocol file:",u)}let F=[];try{let u=h(A,"commands/conductor");if(E(u)){let S=await at.readdir(u);Array.isArray(S)&&(F=S.filter(O=>O.endsWith(".toml")).map(O=>O.replace(/\.toml$/,"")))}}catch(u){console.warn("Failed to discover commands:",u)}F.length===0?(console.log("No commands discovered, using default commands"),F=["setup","newTrack","implement","status","revert","review"]):console.log(`Discovered commands: ${F.join(", ")}`);let Ft=this.config.extension||".md",$t=this.config.fixedAgent;for(let u of F)try{let S=await Ye(h("commands","conductor",`${u}.toml`),A),Ue=(this.config.strategy?.content||nt).process(S,{installPath:_,agentType:p,fixedAgent:$t,commandName:u});Ue&&await(this.config.strategy?.file||it).write({targetDir:e,agentDir:s,commandsDir:l,commandName:u,extension:Ft,content:Ue})}catch(S){console.warn(`Failed to process ${u}:`,S)}let Le=h(A,"templates/workflow.md"),je=h(e,"conductor/workflow.md");if(E(je)&&E(Le))try{await Ee(Le,je),console.log("\u2714 conductor/workflow.md synced")}catch(u){console.warn("Failed to handle workflow file:",u)}else console.warn("Workflow template not found, skipping workflow file sync")}};function y(t){return new I(t)}var Z=class{generator=y(M);validate(e,o){return this.generator.validate(e,o)}generate(e,o,r,n,i){return this.generator.generate(e,o,r,n,i)}};var ee=class{generator=y(B);validate(e,o){return this.generator.validate(e,o)}generate(e,o,r,n,i){return this.generator.generate(e,o,r,n,i)}};var te=class{generator=y(k);validate(e,o){return this.generator.validate(e,o)}generate(e,o,r,n,i){return this.generator.generate(e,o,r,n,i)}};var oe=class{generator=y(V);validate(e,o){return this.generator.validate(e,o)}generate(e,o,r,n,i){return this.generator.generate(e,o,r,n,i)}};var re=class{generator=y(H);validate(e,o){return this.generator.validate(e,o)}generate(e,o,r,n,i){return this.generator.generate(e,o,r,n,i)}};import{homedir as ct}from"os";var ne=class{generator=y(W);validate(e,o){return o==="global"&&(e=ct()),this.generator.validate(e,o)}generate(e,o,r,n,i){return o==="global"&&(e=ct()),this.generator.generate(e,o,r,n,i)}};var ie=class{generator=y(Y);validate(e,o){return this.generator.validate(e,o)}generate(e,o,r,n,i){return this.generator.generate(e,o,r,n,i)}};var se=class{generator=y(q);validate(e,o){return this.generator.validate(e,o)}generate(e,o,r,n,i){return this.generator.generate(e,o,r,n,i)}};var ae=class{generator=y(z);async validate(e,o){if(o==="global")throw new Error("Gemini CLI agent only supports project-level installation");return this.generator.validate(e,o)}async generate(e,o,r,n,i){if(o==="global")throw new Error("Gemini CLI agent only supports project-level installation");return this.generator.generate(e,o,r,n,i)}};var ce=class{generator=y(K);validate(e,o){return this.generator.validate(e,o)}generate(e,o,r,n,i){return this.generator.generate(e,o,r,n,i)}};var le=class extends I{constructor(){super(X)}};var pe=class extends I{constructor(){super(J)}};var me=class extends I{constructor(){super(Q)}};function lt(t){switch(t){case"claude-code":return new ee;case"antigravity":return new te;case"cursor":return new oe;case"github-copilot":return new re;case"codex":return new ne;case"windsurf":return new ie;case"cline":return new se;case"kilo-code":return new ce;case"roo-code":return new le;case"qwen-code":return new pe;case"factory-droid":return new me;case"gemini":return new ae;default:return new Z}}import{resolve as go}from"path";import fo from"@inquirer/select";import{join as Oe}from"path";import{readFile as ve,writeFile as pt,access as ro,mkdir as no}from"fs/promises";import{constants as io}from"fs";var mt="# Conductor";function gt(t){let e=N.find(r=>r.agentType===t);if(!e)return[];let o=[];return e.agentDir&&o.push(e.agentDir),e.protocolFilename&&o.push(e.protocolFilename),o}function L(t){return t.replace(/\/+$/,"")}async function Ne(t){try{return await ro(t,io.F_OK),!0}catch{return!1}}async function so(t,e){let o=[],r=[];if(!await Ne(t))return{existing:[],missing:[...e]};let i=(await ve(t,"utf-8")).split(`
35
- `).map(s=>L(s.trim()));for(let s of e){let l=L(s);i.includes(l)?o.push(s):r.push(s)}return{existing:o,missing:r}}async function ft(t,e){let{existing:o,missing:r}=await so(t,e);if(r.length===0)return{added:[],skipped:o};let n="";await Ne(t)&&(n=await ve(t,"utf-8")),n.length>0&&!n.endsWith(`
36
- `)&&(n+=`
37
- `),n+=`
38
- ${mt}
39
- `;for(let s of r)n+=`${s}
40
- `;let i=Oe(t,"..");return await no(i,{recursive:!0}),await pt(t,n,"utf-8"),{added:r,skipped:o}}async function Re(t,e){if(!await Ne(t))return{removed:[]};let r=(await ve(t,"utf-8")).split(`
41
- `),n=e.map(L),i=[],s=[];for(let f of r){let _=L(f.trim());if(_!==mt){if(n.includes(_)){let A=e.find(G=>L(G)===_);A&&!i.includes(A)&&i.push(A);continue}s.push(f)}}let l=[],p=!1;for(let f of s){let _=f.trim()==="";_&&p||(l.push(f),p=_)}for(;l.length>0&&l[l.length-1].trim()==="";)l.pop();let d=l.length>0?l.join(`
42
- `)+`
43
- `:"";return await pt(t,d,"utf-8"),{removed:i}}function ge(t,e){return e==="gitignore"?Oe(t,".gitignore"):Oe(t,".git","info","exclude")}async function dt(t,e,o){let r=gt(o);return r.length===0?{action:"none",entries:[],message:`No git ignore entries found for agent ${o}`}:e==="none"?await co(t,r):await ao(t,e,r)}async function ao(t,e,o){let r=ge(t,e),n=await ft(r,o);if(n.added.length===0)return{action:"skipped",entries:n.skipped,message:"Git ignore entries already present, skipping.",targetFiles:[r]};let i=e==="gitignore"?".gitignore":".git/info/exclude";return{action:"added",entries:n.added,message:`Added ${n.added.length} entries to ${i}: ${n.added.join(", ")}`,targetFiles:[r]}}async function co(t,e){let o=ge(t,"gitignore"),r=ge(t,"exclude"),n=await Re(o,e),i=await Re(r,e),s=[...new Set([...n.removed,...i.removed])];if(s.length===0)return{action:"none",entries:[],message:"No Conductor git ignore entries found."};let l=[],p=[];return n.removed.length>0&&(l.push(o),p.push(`.gitignore (${n.removed.length})`)),i.removed.length>0&&(l.push(r),p.push(`.git/info/exclude (${i.removed.length})`)),{action:"removed",entries:s,message:`Removed entries from: ${p.join(", ")}`,targetFiles:l}}import lo from"@inquirer/select";import ut from"@inquirer/input";var w={SELECT_SOURCE_MESSAGE:"Select template source:",BUNDLED_LABEL:"Bundled Templates (Offline)",BUNDLED_DESCRIPTION:"Use built-in templates, no network required",OFFICIAL_LABEL:"Official Repository (Latest)",OFFICIAL_DESCRIPTION:"Fetch latest from official repository",CUSTOM_LABEL:"Custom Repository",CUSTOM_DESCRIPTION:"Specify your own repository and branch",CUSTOM_REPO_PROMPT:"Enter repository URL:",CUSTOM_BRANCH_PROMPT:"Enter branch name:"},fe={USING_BUNDLED:"Using bundled Conductor templates",DOWNLOADING_FROM:(t,e)=>`Downloading templates from ${t} [${e}]...`,NON_INTERACTIVE_BUNDLED:"Non-interactive mode detected. Using bundled templates."};function po(){return!(process.env.CI==="true"||!process.stdin.isTTY)}function mo(t){if(!t||t.trim().length===0)return"Repository URL is required";let e=t.trim();return e.startsWith("https://")||e.startsWith("git@")||e.startsWith("/")||e.startsWith("./")||e.startsWith("../")?!0:"Invalid repository URL. Please provide an HTTPS URL, SSH URL, or local path."}async function yt(){if(!po())return console.log(fe.NON_INTERACTIVE_BUNDLED),{source:"bundled"};switch(await lo({message:w.SELECT_SOURCE_MESSAGE,choices:[{name:w.BUNDLED_LABEL,value:"bundled",description:w.BUNDLED_DESCRIPTION},{name:w.OFFICIAL_LABEL,value:"official",description:w.OFFICIAL_DESCRIPTION},{name:w.CUSTOM_LABEL,value:"custom",description:w.CUSTOM_DESCRIPTION}],default:"bundled"})){case"bundled":return{source:"bundled"};case"official":return{source:"official",repo:v,branch:b};case"custom":{let e=await ut({message:w.CUSTOM_REPO_PROMPT,validate:mo}),o=await ut({message:w.CUSTOM_BRANCH_PROMPT,default:b});return{source:"custom",repo:e.trim(),branch:o.trim()||b}}default:return{source:"bundled"}}}function Ct(t){switch(t.source){case"bundled":return{repo:void 0,branch:void 0};case"official":case"custom":return{repo:t.repo,branch:t.branch};default:return{repo:void 0,branch:void 0}}}async function _t(t){let e=go(process.cwd(),t.path),o=t.force??!1;try{console.log(`Initializing Conductor in: ${e}`);let r;t.agent?(r=t.agent,console.log(`Using provided agent: ${r}`)):(console.log("Step 1: Prompting for agent selection..."),r=await ot(),console.log(`\u2714 Selected agent: ${r}`));let n;t.scope?(n=t.scope,console.log(`Using provided scope: ${n}`)):n=await tt(r),console.log(`\u2714 Selected scope: ${n}`);let i=t.gitIgnore;t.gitIgnore&&n==="global"?(console.warn("\u26A0 --git-ignore flag is only supported for project scope. Skipping git ignore configuration."),i=void 0):!t.gitIgnore&&n==="project"&&(i=await rt());let s=t.repo,l=t.branch;if(t.repo)console.log(`Using provided repository: ${t.repo}`),t.branch&&console.log(`Using provided branch: ${t.branch}`);else{let f=await yt(),_=Ct(f);s=_.repo,l=_.branch,f.source==="bundled"?console.log(`\u2714 ${fe.USING_BUNDLED}`):s&&console.log(`\u2714 ${fe.DOWNLOADING_FROM(s,l||"main")}`)}let p=lt(r);console.log(`
44
- Step 3: Validating project directory...`);let d;try{d=await p.validate(e,n)}catch(f){if(f instanceof Error&&f.message.includes("already installed"))if(o)console.log("\u26A0 Force mode: Overwriting existing installation"),d=e;else if(await fo({message:`${f.message}
45
- Do you want to overwrite the existing installation?`,choices:[{value:!0,name:"Yes, overwrite"},{value:!1,name:"No, cancel"}]}))console.log("Overwriting existing installation..."),d=e;else{console.log("Installation cancelled.");return}else throw f}if(console.log(`\u2714 Validation complete: ${d}`),console.log(`
46
- Step 4: Generating files...`),await p.generate(d,n,s,l,o),console.log("\u2714 Files generated"),i){console.log(`
47
- Step 5: Configuring git ignore...`);let f=await dt(d,i,r);console.log(`\u2714 ${f.message}`)}console.log(`
48
- \u2714 Conductor initialized successfully!`)}catch(r){console.error(`
49
- \u2718 Installation failed:`,r instanceof Error?r.message:r),process.exit(1)}}import No from"gradient-string";var ht=(t=0)=>e=>`\x1B[${e+t}m`,xt=(t=0)=>e=>`\x1B[${38+t};5;${e}m`,At=(t=0)=>(e,o,r)=>`\x1B[${38+t};2;${e};${o};${r}m`,m={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},hc=Object.keys(m.modifier),uo=Object.keys(m.color),yo=Object.keys(m.bgColor),xc=[...uo,...yo];function Co(){let t=new Map;for(let[e,o]of Object.entries(m)){for(let[r,n]of Object.entries(o))m[r]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},o[r]=m[r],t.set(n[0],n[1]);Object.defineProperty(m,e,{value:o,enumerable:!1})}return Object.defineProperty(m,"codes",{value:t,enumerable:!1}),m.color.close="\x1B[39m",m.bgColor.close="\x1B[49m",m.color.ansi=ht(),m.color.ansi256=xt(),m.color.ansi16m=At(),m.bgColor.ansi=ht(10),m.bgColor.ansi256=xt(10),m.bgColor.ansi16m=At(10),Object.defineProperties(m,{rgbToAnsi256:{value(e,o,r){return e===o&&o===r?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(o/255*5)+Math.round(r/255*5)},enumerable:!1},hexToRgb:{value(e){let o=/[a-f\d]{6}|[a-f\d]{3}/i.exec(e.toString(16));if(!o)return[0,0,0];let[r]=o;r.length===3&&(r=[...r].map(i=>i+i).join(""));let n=Number.parseInt(r,16);return[n>>16&255,n>>8&255,n&255]},enumerable:!1},hexToAnsi256:{value:e=>m.rgbToAnsi256(...m.hexToRgb(e)),enumerable:!1},ansi256ToAnsi:{value(e){if(e<8)return 30+e;if(e<16)return 90+(e-8);let o,r,n;if(e>=232)o=((e-232)*10+8)/255,r=o,n=o;else{e-=16;let l=e%36;o=Math.floor(e/36)/5,r=Math.floor(l/6)/5,n=l%6/5}let i=Math.max(o,r,n)*2;if(i===0)return 30;let s=30+(Math.round(n)<<2|Math.round(r)<<1|Math.round(o));return i===2&&(s+=60),s},enumerable:!1},rgbToAnsi:{value:(e,o,r)=>m.ansi256ToAnsi(m.rgbToAnsi256(e,o,r)),enumerable:!1},hexToAnsi:{value:e=>m.ansi256ToAnsi(m.hexToAnsi256(e)),enumerable:!1}}),m}var _o=Co(),T=_o;import De from"process";import ho from"os";import St from"tty";function x(t,e=globalThis.Deno?globalThis.Deno.args:De.argv){let o=t.startsWith("-")?"":t.length===1?"-":"--",r=e.indexOf(o+t),n=e.indexOf("--");return r!==-1&&(n===-1||r<n)}var{env:g}=De,de;x("no-color")||x("no-colors")||x("color=false")||x("color=never")?de=0:(x("color")||x("colors")||x("color=true")||x("color=always"))&&(de=1);function xo(){if("FORCE_COLOR"in g)return g.FORCE_COLOR==="true"?1:g.FORCE_COLOR==="false"?0:g.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(g.FORCE_COLOR,10),3)}function Ao(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function So(t,{streamIsTTY:e,sniffFlags:o=!0}={}){let r=xo();r!==void 0&&(de=r);let n=o?de:r;if(n===0)return 0;if(o){if(x("color=16m")||x("color=full")||x("color=truecolor"))return 3;if(x("color=256"))return 2}if("TF_BUILD"in g&&"AGENT_NAME"in g)return 1;if(t&&!e&&n===void 0)return 0;let i=n||0;if(g.TERM==="dumb")return i;if(De.platform==="win32"){let s=ho.release().split(".");return Number(s[0])>=10&&Number(s[2])>=10586?Number(s[2])>=14931?3:2:1}if("CI"in g)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(s=>s in g)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(s=>s in g)||g.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in g)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(g.TEAMCITY_VERSION)?1:0;if(g.COLORTERM==="truecolor"||g.TERM==="xterm-kitty"||g.TERM==="xterm-ghostty"||g.TERM==="wezterm")return 3;if("TERM_PROGRAM"in g){let s=Number.parseInt((g.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(g.TERM_PROGRAM){case"iTerm.app":return s>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(g.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(g.TERM)||"COLORTERM"in g?1:i}function Tt(t,e={}){let o=So(t,{streamIsTTY:t&&t.isTTY,...e});return Ao(o)}var To={stdout:Tt({isTTY:St.isatty(1)}),stderr:Tt({isTTY:St.isatty(2)})},It=To;function wt(t,e,o){let r=t.indexOf(e);if(r===-1)return t;let n=e.length,i=0,s="";do s+=t.slice(i,r)+e+o,i=r+n,r=t.indexOf(e,i);while(r!==-1);return s+=t.slice(i),s}function bt(t,e,o,r){let n=0,i="";do{let s=t[r-1]==="\r";i+=t.slice(n,s?r-1:r)+e+(s?`\r
50
- `:`
51
- `)+o,n=r+1,r=t.indexOf(`
52
- `,n)}while(r!==-1);return i+=t.slice(n),i}var{stdout:Et,stderr:Ot}=It,Ge=Symbol("GENERATOR"),R=Symbol("STYLER"),j=Symbol("IS_EMPTY"),vt=["ansi","ansi","ansi256","ansi16m"],D=Object.create(null),Io=(t,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let o=Et?Et.level:0;t.level=e.level===void 0?o:e.level};var wo=t=>{let e=(...o)=>o.join(" ");return Io(e,t),Object.setPrototypeOf(e,U.prototype),e};function U(t){return wo(t)}Object.setPrototypeOf(U.prototype,Function.prototype);for(let[t,e]of Object.entries(T))D[t]={get(){let o=ue(this,$e(e.open,e.close,this[R]),this[j]);return Object.defineProperty(this,t,{value:o}),o}};D.visible={get(){let t=ue(this,this[R],!0);return Object.defineProperty(this,"visible",{value:t}),t}};var Fe=(t,e,o,...r)=>t==="rgb"?e==="ansi16m"?T[o].ansi16m(...r):e==="ansi256"?T[o].ansi256(T.rgbToAnsi256(...r)):T[o].ansi(T.rgbToAnsi(...r)):t==="hex"?Fe("rgb",e,o,...T.hexToRgb(...r)):T[o][t](...r),bo=["rgb","hex","ansi256"];for(let t of bo){D[t]={get(){let{level:o}=this;return function(...r){let n=$e(Fe(t,vt[o],"color",...r),T.color.close,this[R]);return ue(this,n,this[j])}}};let e="bg"+t[0].toUpperCase()+t.slice(1);D[e]={get(){let{level:o}=this;return function(...r){let n=$e(Fe(t,vt[o],"bgColor",...r),T.bgColor.close,this[R]);return ue(this,n,this[j])}}}}var Eo=Object.defineProperties(()=>{},{...D,level:{enumerable:!0,get(){return this[Ge].level},set(t){this[Ge].level=t}}}),$e=(t,e,o)=>{let r,n;return o===void 0?(r=t,n=e):(r=o.openAll+t,n=e+o.closeAll),{open:t,close:e,openAll:r,closeAll:n,parent:o}},ue=(t,e,o)=>{let r=(...n)=>Oo(r,n.length===1?""+n[0]:n.join(" "));return Object.setPrototypeOf(r,Eo),r[Ge]=t,r[R]=e,r[j]=o,r},Oo=(t,e)=>{if(t.level<=0||!e)return t[j]?"":e;let o=t[R];if(o===void 0)return e;let{openAll:r,closeAll:n}=o;if(e.includes("\x1B"))for(;o!==void 0;)e=wt(e,o.close,o.open),o=o.parent;let i=e.indexOf(`
53
- `);return i!==-1&&(e=bt(e,n,r,i)),r+e+n};Object.defineProperties(U.prototype,D);var vo=U(),Gc=U({level:Ot?Ot.level:0});var Nt=vo;import Rt from"fs";import Pe from"path";import{fileURLToPath as Ro}from"url";var Do=`
54
- __________ _ ______ __ __________________ ____ ________ ____ _ __
55
- / ____/ __ \\/ | / / __ \\/ / / / ____/_ __/ __ \\/ __ \\ / ____/ / / __ \\| | / /
56
- / / / / / / |/ / / / / / / / / / / / / / / /_/ / / /_ / / / / / /| | /| / /
57
- / /___/ /_/ / /| / /_/ / /_/ / /___ / / / /_/ / _, _/ / __/ / /___/ /_/ / | |/ |/ /
58
- \\____/\\____/_/ |_/_____/\\____/\\____/ /_/ \\____/_/ |_| /_/ /_____/\\____/ |__/|__/
59
-
60
- `;function Dt(){let t=Pe.dirname(Ro(import.meta.url)),e=Pe.join(t,"../package.json");Rt.existsSync(e)||(e=Pe.join(t,"../../package.json"));let r=JSON.parse(Rt.readFileSync(e,"utf-8")).version;console.log(Nt.dim(` v${r} | Scaffolding for Gemini Conductor
61
- `))}function Gt(){console.log(No("cyan","green")(Do))}async function $o(t){return await Go(Fo(process.argv)).scriptName(t).usage("$0 [path] [options]").positional("path",{describe:"Directory to install Conductor",default:".",type:"string"}).option("agent",{alias:"a",describe:"Specify the coding agent",type:"string",choices:N.map(e=>e.agentType)}).option("repo",{alias:"r",describe:"Git repository URL for templates. Without this flag, interactive template source selection is shown.",type:"string"}).coerce("repo",e=>e===""?v:e).option("branch",{alias:"b",describe:"Branch name for template repository",type:"string",default:b}).option("scope",{alias:"s",describe:"Installation scope (project or global)",type:"string",choices:["project","global"]}).option("git-ignore",{alias:"g",describe:"Configure git ignore for Conductor files (gitignore: add to .gitignore, exclude: add to .git/info/exclude, none: remove entries)",type:"string",choices:["gitignore","exclude","none"]}).coerce("git-ignore",e=>e===""?"exclude":e).option("force",{alias:"f",describe:"Force overwrite existing installation",type:"boolean",default:!1}).example("$0","Install with interactive prompts (template source selection)").example("$0 --agent claude-code","Install for Claude Code agent").example("$0 --repo https://github.com/user/templates","Use custom template repository").example("$0 --git-ignore gitignore","Add Conductor files to .gitignore").example("$0 --git-ignore exclude","Add Conductor files to .git/info/exclude").example("$0 --git-ignore none","Remove Conductor entries from git ignore").help().alias("h","help").version().alias("v","version").completion("completion",!1).parseAsync()}async function Kc(t){!process.env.CONDUCTOR_NO_BANNER&&!process.argv.includes("completion")&&!process.argv.includes("--get-yargs-completions")&&(Gt(),Dt());let e=await $o(t),o=e._[0];process.argv.includes("completion")||process.argv.includes("--get-yargs-completions")||await _t({...e,path:o||e.path||".",gitIgnore:e["git-ignore"],$0:"conductor-init",_:e._})}export{Kc as a};