command-code 0.17.1 → 0.17.2
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/dist/index.mjs +1 -1
- package/package.json +1 -1
- package/vsix/commandcode-vscode.vsix +0 -0
package/dist/index.mjs
CHANGED
|
@@ -250,4 +250,4 @@ import*as e from"path";import t,{join as n,dirname as r,relative as s,resolve as
|
|
|
250
250
|
)
|
|
251
251
|
`}),index("subscriptions_owner_idx").on(e.userId,e.orgId)])),b2(Bb)}}),gE=__esm({"../shared/src/database/schema/free-credits-audit.ts"(){Nt(),fh(),rE(),Sh(),Ub=sql`(SELECT NULLIF(current_setting('app.current_user_id', true), '')::uuid)`,Wb=sql`users`,c(Qb=Pp("free_credits_audit",{id:uuid("id").defaultRandom().primaryKey(),date:date("date").notNull().unique(),totalCreditsGiven:numeric("total_credits_given").notNull(),syncedAt:timestamp("synced_at",{withTimezone:!0}).notNull()},e=>[index("free_credits_audit_date_idx").on(e.date),pgPolicy("free_credits_audit_select_admin",{as:"permissive",to:"app_user",for:"select",using:sql`(SELECT admin FROM ${Wb} WHERE id = ${Ub})`}),pgPolicy("free_credits_audit_insert_admin",{as:"permissive",to:"app_user",for:"insert",withCheck:sql`(SELECT admin FROM ${Wb} WHERE id = ${Ub})`}),pgPolicy("free_credits_audit_update_admin",{as:"permissive",to:"app_user",for:"update",using:sql`(SELECT admin FROM ${Wb} WHERE id = ${Ub})`}),pgPolicy("free_credits_audit_delete_admin",{as:"permissive",to:"app_user",for:"delete",using:sql`(SELECT admin FROM ${Wb} WHERE id = ${Ub})`})])),b2(Qb)}}),hE=__esm({"../shared/src/database/schema/follows.ts"(){Nt(),fh(),Sh(),rE(),sE(),oE(),Gb=sql`(SELECT NULLIF(current_setting('app.current_user_id', true), '')::uuid)`,c(Hb=Pp("follows",{id:uuid("id").defaultRandom().primaryKey(),followerId:uuid("follower_id").references(()=>eb.id,{onUpdate:"cascade",onDelete:"cascade"}).notNull(),followedUserId:uuid("followed_user_id").references(()=>eb.id,{onUpdate:"cascade",onDelete:"cascade"}),followedOrgId:uuid("followed_org_id").references(()=>nb.id,{onUpdate:"cascade",onDelete:"cascade"}),createdAt:timestamp("created_at",{withTimezone:!0}).defaultNow().notNull()},e=>[check("follows_exactly_one_target",sql`(followed_user_id IS NOT NULL AND followed_org_id IS NULL) OR (followed_user_id IS NULL AND followed_org_id IS NOT NULL)`),check("follows_no_self_follow",sql`follower_id != followed_user_id OR followed_user_id IS NULL`),uniqueIndex("follows_user_unique").on(e.followerId,e.followedUserId).where(sql`followed_user_id IS NOT NULL`),uniqueIndex("follows_org_unique").on(e.followerId,e.followedOrgId).where(sql`followed_org_id IS NOT NULL`),index("follows_follower_idx").on(e.followerId),index("follows_followed_user_idx").on(e.followedUserId),index("follows_followed_org_idx").on(e.followedOrgId),pgPolicy("follows_select_all",{for:"select",to:"app_user",using:sql`true`}),pgPolicy("follows_insert_own",{for:"insert",to:"app_user",withCheck:sql`follower_id = ${Gb}`}),pgPolicy("follows_delete_own",{for:"delete",to:"app_user",using:sql`follower_id = ${Gb}`}),pgPolicy("follows_select_public",{for:"select",to:"public_user",using:sql`true`})])),b2(Hb)}}),fE=__esm({"../shared/src/database/schema/index.ts"(){Nt(),oE(),iE(),aE(),sE(),lE(),cE(),uE(),dE(),mE(),pE(),gE(),hE()}}),yE=__esm({"../shared/src/database/config/database.ts"(){Nt(),eu(),fE()}}),wE=__esm({"../shared/src/database/index.ts"(){Nt(),yE(),fE()}}),SE=__esm({"../shared/src/index.ts"(){Nt(),jl(),zl(),Yl(),Jl(),Xl(),Ot(),Rt(),wE()}}),bE=__esm({"src/api/request.ts"(){Nt(),Qs(),hi(),Vr(),Tr(),cr(),SE(),Vb=class{static{__name(this,"Request")}config;constructor(e){this.config=e}async send(e){const{endpoint:t}=e,n=this.buildUrl({endpoint:t}),r=trackAPICallStart({method:e.method,endpoint:t}),s=await this.buildHeaders({headers:e.headers,span:r.span});let o;try{o=await this.makeRequest({url:n,options:e,headers:s})}catch(e){const t=new si({cause:e instanceof Error?e:void 0});throw r.end({statusCode:0,error:t}),t}if(!o.ok){const{error:e}=await this.handleErrorResponse({response:o});throw r.end({statusCode:o.status,error:e}),e}return r.end({statusCode:o.status}),e.stream?o.body:o.json()}buildUrl({endpoint:e}){return`${this.config.baseUrl}${e}`}async buildHeaders({headers:e,span:t}){const n=await getAuthKey(),r=getTraceId(),s=t?.spanContext(),o=r&&s?.spanId?`00-${r}-${s.spanId}-01`:void 0,i=getTelemetryEnv(),a="prod"===i?"production":i;return{"Content-Type":"application/json",[wt.CLI_ENVIRONMENT]:a,...n?{Authorization:`Bearer ${n}`}:{},...o?{traceparent:o}:{},...e}}async makeRequest({url:e,options:t,headers:n}){const r=new AbortController,s=this.config.timeout?setTimeout(()=>r.abort(),this.config.timeout):null;try{const o=await fetch(e,{headers:n,method:t.method,body:t.body?JSON.stringify(t.body):void 0,signal:t.signal??r.signal});return s&&clearTimeout(s),o}catch(e){throw s&&clearTimeout(s),e}}async handleErrorResponse({response:e}){let t;try{t=await e.json()}catch{t=await e.text()}const n={};return e.headers.forEach((e,t)=>{n[t]=e}),{error:ri.generate(e.status,t,e.statusText,n),errorBody:t}}async post(e){return this.send({...e,method:"POST"})}async get(e){return this.send({...e,method:"GET"})}async put(e){return this.send({...e,method:"PUT"})}async delete(e){return this.send({...e,method:"DELETE"})}}}}),EE=__esm({"src/utils/strip-ide-context.ts"(){Nt(),Kb=__name(e=>e.replace(/<ide-context>[\s\S]*?<\/ide-context>\s*/g,""),"stripIdeContext")}}),CE=__esm({"src/sessions/index.ts"(){Nt(),Jo(),Ci(),Ot(),Vr(),$n(),EE(),Yb=class _SessionManager{static{__name(this,"SessionManager")}sessionId;projectPath;sessionFilePath;messageIdMap=new Map;lastMessageId=null;gitBranch;lastSavedMessagesHash="";static getProjectsBasePath(){return t.join(f.homedir(),".commandcode","projects")}static getCurrentProjectDirName(){return Ne(process.cwd())}constructor(e){this.sessionId=e||crypto.randomUUID();const n=_SessionManager.getCurrentProjectDirName();this.projectPath=t.join(_SessionManager.getProjectsBasePath(),n),this.sessionFilePath=t.join(this.projectPath,`${this.sessionId}.jsonl`);try{this.gitBranch=I("git rev-parse --abbrev-ref HEAD",{encoding:"utf8",stdio:["pipe","pipe","ignore"]}).trim()}catch{this.gitBranch="-"}}async initializeProject(){try{return await L.mkdir(this.projectPath,{recursive:!0}),!0}catch(e){return console.error("Error initializing project:",e),trackError({error:sanitizeErrorForTelemetry({error:e instanceof Error?e:new Error(String(e)),label:"project_init_failed"}),context:{component:Br.SESSION_MANAGER,heading:"Project initialization failed"}}),!1}}async isProjectInitialized(){try{return(await L.stat(this.projectPath)).isDirectory()}catch{return!1}}async saveMessages(e,t){try{if(0===e.length)return;const n=JSON.stringify(e);if(n===this.lastSavedMessagesHash)return;await this.initializeProject();const r=[];for(const n of e){const e=crypto.randomUUID(),s={id:e,timestamp:n.meta.timestamp,sessionId:this.sessionId,parentId:this.lastMessageId,role:n.message.role,content:n.message.content,gitBranch:this.gitBranch,metadata:{...n.meta,...t?.metadata||{}}};r.push(JSON.stringify(s)),this.lastMessageId=e}await L.writeFile(this.sessionFilePath,r.join("\n")+"\n"),this.lastSavedMessagesHash=n}catch(e){console.error("Failed to save messages to session:",e)}}async loadMessages(e){const n=e||this.sessionId,r=t.join(this.projectPath,`${n}.jsonl`);try{const e=(await L.readFile(r,"utf-8")).trim().split("\n").filter(e=>e.trim()),t=[];let n=0;for(const r of e)try{const e=JSON.parse(r);"user"!==e.role&&"assistant"!==e.role||t.push({message:{role:e.role,content:e.content},meta:{timestamp:e.timestamp,source:"cli",...e.metadata||{}}})}catch(e){n++,console.error("Error parsing session line:",e)}return{messages:t,corruptedLines:n,totalLines:e.length}}catch(e){return console.error("Error loading messages:",e),{messages:[],corruptedLines:0,totalLines:0}}}reconstructFeedFromMessages(e){const t=[];for(const n of e){const e=n.message,r=Date.now(),s=crypto.randomUUID();if("user"===e.role){let n="";if("string"==typeof e.content)n=e.content;else if(Array.isArray(e.content))for(const t of e.content)if("text"===t.type)n+=t.text;else if("tool_result"===t.type)continue;n=Kb(n),n&&t.push({id:s,timestamp:r,role:"user",input:n,images:[]})}else if("assistant"===e.role){let n="";if("string"==typeof e.content)t.push({id:s,timestamp:r,role:"assistant",input:e.content,images:[]});else if(Array.isArray(e.content)){for(const r of e.content)if("text"===r.type)n+=r.text;else if("tool_use"===r.type){n.trim()&&(t.push({id:crypto.randomUUID(),timestamp:Date.now(),role:"assistant",input:n.trim(),images:[]}),n="");const e=Ho(r.name,r.input);t.push({id:crypto.randomUUID(),timestamp:Date.now(),role:"tool",name:r.name,input:e,output:"Completed",images:[]})}else if("server_tool_use"===r.type){n.trim()&&(t.push({id:crypto.randomUUID(),timestamp:Date.now(),role:"assistant",input:n.trim(),images:[]}),n="");const e=Ho(r.name,r.input);t.push({id:crypto.randomUUID(),timestamp:Date.now(),role:"tool",name:r.name,input:e,output:"Completed",images:[]})}n.trim()&&t.push({id:crypto.randomUUID(),timestamp:Date.now(),role:"assistant",input:n.trim(),images:[]})}}}return t}async loadSession(e){const n=e||this.sessionId,r=t.join(this.projectPath,`${n}.jsonl`);try{const e=(await L.readFile(r,"utf-8")).trim().split("\n"),t=[];for(const n of e)if(n.trim())try{const e=JSON.parse(n);t.push(e)}catch(e){console.error("Error parsing session line:",e)}return t}catch(e){return console.error("Error loading session:",e),[]}}convertToFeedEntries(e){return e.map(e=>{const t={id:e.id,timestamp:new Date(e.timestamp).getTime(),role:e.role,metadata:e.metadata};return"object"==typeof e.content&&null!==e.content&&"input"in e.content?{...t,input:e.content.input,output:e.content.output,...e.content.name?{name:e.content.name}:{},...e.content.command?{command:e.content.command}:{}}:{...t,input:"string"==typeof e.content?e.content:JSON.stringify(e.content)}})}convertToAnthropicMessages(e){return e.filter(e=>"user"===e.role||"assistant"===e.role).map(e=>{let t;if(t="string"==typeof e.content?e.content:e.content&&"object"==typeof e.content?e.content.input||JSON.stringify(e.content):"","user"===e.role&&e.metadata?.fileReferences)try{t=reconstructContent(t,e.metadata.fileReferences)}catch(e){console.error("Failed to reconstruct file content from session:",e)}return{role:e.role,content:t}})}static async isProjectInitialized(){const e=_SessionManager.getProjectsBasePath(),n=_SessionManager.getCurrentProjectDirName(),r=t.join(e,n);try{return(await L.stat(r)).isDirectory()}catch{return!1}}static async initializeProject(){const e=_SessionManager.getProjectsBasePath(),n=_SessionManager.getCurrentProjectDirName(),r=t.join(e,n);try{return await L.mkdir(r,{recursive:!0}),!0}catch(e){return console.error("Error initializing project directory:",e),!1}}static async listSessions(){const e=_SessionManager.getCurrentProjectDirName(),n=t.join(_SessionManager.getProjectsBasePath(),e);try{try{await L.access(n)}catch{return[]}const e=(await L.readdir(n)).filter(e=>e.endsWith(".jsonl")&&!e.includes(".prompts.")&&!e.includes(".checkpoints.")),r=[];for(const s of e){const e=s.replace(".jsonl",""),o=t.join(n,s);try{const t=await L.stat(o),s=(await L.readFile(o,"utf-8")).trim().split("\n").filter(e=>e.trim());if(s.length>0){let o="",i="";const a=JSON.parse(s[0]);a.gitBranch&&(i=a.gitBranch);for(const e of s){const t=JSON.parse(e);if("user"===t.role){if("string"==typeof t.content)o=t.content;else if(Array.isArray(t.content)){for(const e of t.content)if("text"===e.type){o=e.text;break}}else t.content?.input&&(o=t.content.input);if(o)break}}o=Kb(o);const l=await _SessionManager.loadSessionMetaForId(e,n),u=l?.title;r.push({id:e,createdAt:t.birthtime.toISOString(),lastModified:t.mtime.toISOString(),firstMessage:o||"No messages",title:u||void 0,messageCount:s.length,projectPath:n,gitBranch:i||"-"})}}catch(t){console.error(`Error processing session ${e}:`,t)}}return r.sort((e,t)=>new Date(t.lastModified).getTime()-new Date(e.lastModified).getTime())}catch(e){return console.error("Error listing sessions:",e),[]}}getSessionId(){return this.sessionId}async saveShareInfo(e){const n=t.join(this.projectPath,`${this.sessionId}.share.json`);try{await L.writeFile(n,JSON.stringify(e,null,2))}catch(e){console.error("Failed to save share info:",e)}}async loadShareInfo(){const e=t.join(this.projectPath,`${this.sessionId}.share.json`);try{const t=await L.readFile(e,"utf-8");return JSON.parse(t)}catch(e){return null}}async deleteShareInfo(){const e=t.join(this.projectPath,`${this.sessionId}.share.json`);try{await L.unlink(e)}catch(e){}}getMetaFilePath(){return t.join(this.projectPath,`${this.sessionId}.meta.json`)}async loadSessionMeta(){try{const e=await L.readFile(this.getMetaFilePath(),"utf-8");return JSON.parse(e)}catch(e){return e instanceof SyntaxError&&dlog("Session",`Corrupt session meta file: ${this.getMetaFilePath()}`),null}}async saveSessionMeta(e){try{const t={...await this.loadSessionMeta(),...e};await L.writeFile(this.getMetaFilePath(),JSON.stringify(t,null,2))}catch(e){dlog("Session",`Failed to save session meta: ${e}`)}}async saveSessionTitle(e){await this.saveSessionMeta({title:e})}async loadSessionTitle(){const e=await this.loadSessionMeta();return e?.title||null}static async loadSessionMetaForId(e,n){const r=t.join(n,`${e}.meta.json`);try{const e=await L.readFile(r,"utf-8");return JSON.parse(e)}catch(e){return null}}getCheckpointsFilePath(){return t.join(this.projectPath,`${this.sessionId}.checkpoints.jsonl`)}async saveSnapshot(e){const{snapshot:t,isUpdate:n}=e,r=this.getCheckpointsFilePath();try{await this.initializeProject();const e={type:"file-history-snapshot",messageId:t.messageId,snapshot:t,isSnapshotUpdate:n};if(n){let n=[];try{n=(await L.readFile(r,"utf-8")).trim().split("\n").filter(e=>e.trim()).map(e=>JSON.parse(e))}catch{}const s=n.findIndex(e=>e.messageId===t.messageId);-1!==s?n[s]=e:n.push(e);const o=n.map(e=>JSON.stringify(e)).join("\n")+"\n";await L.writeFile(r,o)}else await L.appendFile(r,JSON.stringify(e)+"\n")}catch(e){console.error("Failed to save checkpoint snapshot:",e)}}async loadSnapshots(){const e=this.getCheckpointsFilePath();try{const t=(await L.readFile(e,"utf-8")).trim().split("\n").filter(e=>e.trim()),n=[];for(const e of t)try{const t=JSON.parse(e);"file-history-snapshot"===t.type&&n.push(t.snapshot)}catch{}return n}catch{return[]}}async deleteSnapshotsAfter(e){const{messageId:t,inclusive:n=!1}=e,r=this.getCheckpointsFilePath();try{const e=(await L.readFile(r,"utf-8")).trim().split("\n").filter(e=>e.trim()).map(e=>JSON.parse(e)),s=e.findIndex(e=>e.messageId===t);if(-1===s)return;const o=(n?e.slice(0,s):e.slice(0,s+1)).map(e=>JSON.stringify(e)).join("\n")+"\n";await L.writeFile(r,o)}catch{}}getMessageAtIndex(e){const{index:t,messages:n}=e;if(t<0||t>=n.length)return null;const r=n[t];let s="";if("string"==typeof r.message.content)s=r.message.content;else if(Array.isArray(r.message.content))for(const e of r.message.content)"text"===e.type&&(s+=e.text);return s=Kb(s),{messageId:r.meta.messageId||crypto.randomUUID(),content:s}}getMessageIndexById(e){const{messageId:t,messages:n}=e;return n.findIndex(e=>e.meta.messageId===t)}getMessageCount(e){const{messages:t}=e;return t.length}async truncateMessagesAtIndex(e){const{index:t,messages:n}=e,r=n.slice(0,t);return r.length>0&&await this.saveMessages(r),r}}}});function getRequest(){return nE||(nE=new Vb({baseUrl:getApiBaseUrl()})),nE}function stableStringify(e){return null==e||"object"!=typeof e?JSON.stringify(e):Array.isArray(e)?"["+e.map(stableStringify).join(",")+"]":"{"+Object.keys(e).sort().map(t=>JSON.stringify(t)+":"+stableStringify(e[t])).join(",")+"}"}function generateCacheKey(e,t){return`${e}:${stableStringify(t)}`}function buildRequestBody(e){return{config:getEnvironmentContext(),memory:"",taste:"",skills:"",params:{tools:[],messages:[{role:"user",content:e}],model:vt,max_tokens:eE,temperature:tE,stream:!0},threadId:crypto.randomUUID()}}async function getAuthHeaders(){const e=await getConfiguredProvider(),t=await isOAuthEnforced();let n;e===Ct.ANTHROPIC&&(n=await on.getValidAccessToken(),validateOAuthToken({token:n,provider:e}));const r={[wt.PROJECT_SLUG]:Yb.getCurrentProjectDirName(),[wt.INTERNAL_TEAM_FLAG_HEADER]:t.toString()};return n&&(r[wt.OAUTH_TOKEN]=`Bearer ${n}`),r}async function generateToolDescription(e,t){const n=generateCacheKey(e,t),r=Xb.get(n);if(r)return Xb.delete(n),Xb.set(n,r),dlog(`[ToolDescription] cache hit for ${e}: "${r}"`),r;dlog(`[ToolDescription] generating for ${e}`);try{const e=getRequest(),r=await getAuthHeaders(),s=buildRequestBody(createPrompt(t));dlog(`[ToolDescription] calling ${St.ALPHA.GENERATE} with model: ${vt}`);const o=e.post({endpoint:St.ALPHA.GENERATE,body:s,headers:r,stream:!0}),i=await Promise.race([o,new Promise((e,t)=>setTimeout(()=>t(new Error("Timeout")),5e3))]);if(!i)return dlog("[ToolDescription] no response stream"),null;dlog("[ToolDescription] got response stream");const a=je.fromReadableStream(i);let l="",u=null;if(a.on("text",e=>{l+=e}),a.on("error",e=>{u=e}),await a.finalMessage(),u)throw u;dlog(`[ToolDescription] raw response: "${l}"`);const d=cleanDescription(l);if(d){if(Xb.size>=Jb){const e=Xb.keys().next().value;void 0!==e&&Xb.delete(e)}Xb.set(n,d),dlog(`[ToolDescription] cached: "${d}"`)}else dlog("[ToolDescription] description rejected after cleaning");return d}catch(t){return dlog(`[ToolDescription] failed for ${e}: ${t instanceof Error?t.message:String(t)}`),null}}function sanitize(e){return String(e).replace(/[\r\n\t\f\v]+/g," ").replace(/\s+/g," ").trim().slice(0,Zb)}function createPrompt(e){return`Precisely describe what this command does in active voice. Never use a word like "complex" or "risk" in description. Start with a verb, capital letter, no period. Never say you need to see more or that the command is incomplete — always describe what the command does based on what you see.\n\nFor simple commands (git, npm, standard CLI tools), keep it brief (5-10 words):\n- ls → "List files in current directory"\n- git status → "Show working tree status"\n- npm install → "Install package dependencies"\n\nFor piped commands or obscure flags, add enough context to clarify what it does:\n- find . -name "*.tmp" -exec rm {} \\; → "Find and delete all .tmp files recursively"\n- git reset --hard origin/main → "Discard all local changes and match remote main"\n- curl -s url | jq '.data[]' → "Fetch JSON from URL and extract data array elements"\n\nCommand: ${`${sanitize(e.command||"")} ${sanitize(Array.isArray(e.args)?e.args.join(" "):e.args||"")}`.trim()}\n\nDescription:`}function cleanDescription(e){let t=e.trim().replace(/^["']|["']$/g,"").replace(/\.$/,"").trim();return t.length>0&&(t=t.charAt(0).toUpperCase()+t.slice(1)),t.split(/\s+/).length<3?null:t}var vE=__esm({"src/utils/tool-description-generator.ts"(){Nt(),Ot(),bE(),ts(),dn(),CE(),en(),nr(),ar(),$n(),Jb=100,Xb=new Map,Zb=4e3,eE=80,tE=.3,nE=null,__name(getRequest,"getRequest"),__name(stableStringify,"stableStringify"),__name(generateCacheKey,"generateCacheKey"),__name(buildRequestBody,"buildRequestBody"),__name(getAuthHeaders,"getAuthHeaders"),__name(generateToolDescription,"generateToolDescription"),__name(sanitize,"sanitize"),__name(createPrompt,"createPrompt"),__name(cleanDescription,"cleanDescription")}});function isPlanPath(e){const{filePath:n}=e;if(!n||"string"!=typeof n)return!1;const r=f.homedir(),s=n.startsWith("~/")?t.join(r,n.slice(2)):n,o=t.resolve(s),i=t.join(r,".commandcode","plans");return o.startsWith(i+t.sep)||o===i}var TE,kE,_E,PE=__esm({"src/utils/plan-path-validator.ts"(){Nt(),Ot(),__name(isPlanPath,"isPlanPath")}});function getToolsForMode(e){const{allTools:t,mode:n}=e;return"standard"===n||"auto-accept"===n?t.filter(e=>!kE.includes(e.name)):"plan"===n?t.filter(e=>!TE.includes(e.name)&&!_E.includes(e.name)):t.filter(e=>!kE.includes(e.name))}function isToolAllowedInMode(e){const{toolName:t,mode:n,toolParams:r}=e;if(!t||"string"!=typeof t)return{allowed:!1,reason:"Invalid tool name provided."};if("standard"===n||"auto-accept"===n)return{allowed:!0};if("plan"===n){if(isMcpTool(t))return{allowed:!1,reason:"MCP tools are not available in plan mode. Press Shift+Tab to exit plan mode first."};if("write_file"===t&&r?.filePath){const e=r.filePath;return isPlanPath({filePath:e})?{allowed:!0}:{allowed:!1,reason:`Cannot write to "${e}" in plan mode. Use the full absolute path ~/.commandcode/plans/<filename>.md to write plan files.`}}return TE.includes(t)?{allowed:!1,reason:`Tool "${t}" is not available in plan mode. Plan mode is read-only. Press Shift+Tab to exit plan mode.`}:{allowed:!0}}return{allowed:!1,reason:`Invalid permission mode "${n}". Please restart the application.`}}var AE,xE,IE,NE,RE=__esm({"src/tools/get-tools-for-mode.ts"(){Nt(),PE(),po(),TE=["edit_file","delete_file","shell_command","todo_write","kill_shell"],kE=["exit_plan_mode"],_E=["enter_plan_mode"],__name(getToolsForMode,"getToolsForMode"),__name(isToolAllowedInMode,"isToolAllowedInMode")}});function estimateTokens(e){let t=0;if("string"==typeof e)t=estimateTextTokens(e),(e.startsWith("{")||e.startsWith("["))&&(t=Math.ceil(t*NE));else if(Array.isArray(e))t=e.reduce((e,t)=>e+estimateTokens(t),0);else if(t=3,"string"==typeof e.content)t+=estimateTextTokens(e.content);else if(Array.isArray(e.content))for(const n of e.content)if("text"===n.type&&"text"in n)t+=estimateTextTokens(n.text);else if("image"===n.type&&"source"in n&&"base64"===n.source.type)t+=estimateImageTokens(n.source.data);else if("tool_use"===n.type)t+=5,"name"in n&&n.name&&(t+=estimateTextTokens(n.name)),"input"in n&&n.input&&(t+=estimateTextTokens(JSON.stringify(n.input))*NE);else if("tool_result"===n.type&&(t+=3,"content"in n&&n.content))if("string"==typeof n.content)t+=estimateTextTokens(n.content);else if(Array.isArray(n.content))for(const e of n.content)"text"===e.type&&"text"in e&&(t+=estimateTextTokens(e.text));return Math.ceil(t)}function estimateTextTokens(e){if(!e)return 0;let t=e.length/IE;const n=.1*e.split(/\s+/).length;return Math.max(0,Math.ceil(t-n))}function estimateImageTokens(e){const t=getImageDimensions(e);return t?Math.ceil(t.width*t.height/750):Math.ceil(1228.8)}function getImageDimensions(e){try{const t=Buffer.from(e,"base64");if("89504e470d0a1a0a"===t.subarray(0,8).toString("hex")){return{width:t.readUInt32BE(16),height:t.readUInt32BE(20)}}if(255===t[0]&&216===t[1])for(let e=2;e<t.length-10;e++)if(255===t[e]&&(192===t[e+1]||194===t[e+1])){const n=t.readUInt16BE(e+5);return{width:t.readUInt16BE(e+7),height:n}}}catch(e){}return null}function exceedsOutputTokenLimit(e){return estimateTokens(e)>AE}function getOversizedOutputError(e,t){return"Output too large (max 25,000 tokens allowed). Try using grep or ripgrep with more specific patterns to filter results."}function checkToolOutputTokensLimit(e,t){return exceedsOutputTokenLimit(e)?(estimateTokens(e),"Output too large (max 25,000 tokens allowed). Try using grep or ripgrep with more specific patterns to filter results."):e}function calculateUsageFromResponse(e){return(e.input_tokens||0)+(e.cache_read_input_tokens||0)+(e.cache_creation_input_tokens||0)+(e.output_tokens||0)}var $E=__esm({"src/utils/tokens.ts"(){Nt(),jr(),AE=Dr,xE=2e5,IE=3.5,NE=1.1,__name(estimateTokens,"estimateTokens"),__name(estimateTextTokens,"estimateTextTokens"),__name(estimateImageTokens,"estimateImageTokens"),__name(getImageDimensions,"getImageDimensions"),__name(exceedsOutputTokenLimit,"exceedsOutputTokenLimit"),__name(getOversizedOutputError,"getOversizedOutputError"),__name(checkToolOutputTokensLimit,"checkToolOutputTokensLimit"),__name(calculateUsageFromResponse,"calculateUsageFromResponse")}});function sleep(e){const{delay:t,signal:n}=e;return new Promise((e,r)=>{if(n?.aborted)return r(new Error("Interrupted by user"));const s=setTimeout(()=>{n?.removeEventListener("abort",onAbort),e()},t);function onAbort(){clearTimeout(s),n?.removeEventListener("abort",onAbort),r(new Error("Interrupted by user"))}__name(onAbort,"onAbort"),n?.addEventListener("abort",onAbort,{once:!0})})}var LE,ME=__esm({"src/utils/sleep.ts"(){Nt(),__name(sleep,"sleep")}}),OE=__esm({"src/utils/logger.ts"(){Nt(),$n(),LE=class{static{__name(this,"Logger")}prefix;constructor(e="CLI"){this.prefix=e}info(e){console.log(`[${this.prefix}] ${be.info} ${e}`)}success(e){console.log(`[${this.prefix}] ${be.tick} ${e}`)}error(e){console.error(`[${this.prefix}] ${be.cross} ${e}`)}warn(e){console.warn(`[${this.prefix}] ${be.warning} ${e}`)}debug(e,t){dlog(`[${this.prefix}] ${e}`,t)}}}});function getEnterpriseMemoryPath(){switch(h.platform()){case"darwin":return"/Library/Application Support/CommandCode/AGENTS.md";case"win32":return e.join("C:","ProgramData","CommandCode","AGENTS.md");default:return"/etc/.commandcode/AGENTS.md"}}function getUserMemoryPath(){const t=h.homedir();return e.join(t,".commandcode","AGENTS.md")}function getProjectMemoryPaths(t){return[e.join(t,"AGENTS.md"),e.join(t,".commandcode","AGENTS.md")]}async function discoverMemoryFiles(e){const t=[],n=getEnterpriseMemoryPath();t.push({type:"enterprise",path:n,exists:E(n),description:"Organization-wide instructions"});const r=process.cwd();if(r){const e=getProjectMemoryPaths(r);for(const n of e)if(E(n)){t.push({type:"project",path:n,exists:!0,description:"Team-shared project instructions"});break}t.find(e=>"project"===e.type)||t.push({type:"project",path:e[0],exists:!1,description:"Team-shared project instructions"})}const s=getUserMemoryPath();return t.push({type:"user",path:s,exists:E(s),description:"Personal preferences for all projects"}),t}async function loadMemoryFile(e){try{return E(e)&&k(e).isFile()?await $.readFile(e,"utf-8"):null}catch(t){return console.error(`Error reading memory file ${e}:`,t),null}}function getCodeBlockRegex(){return/```[\s\S]*?```|`[^`]+`/g}function getImportRegex(){return/(?:^|[\s\n])@((?:~\/)?[^\s\n]+(?:\.[^\s\n]+)?)/gm}async function processImports(t,n,r=0,s=5){if(r>=s)return t;const o=[],i=t.replace(/```[\s\S]*?```|`[^`]+`/g,e=>(o.push(e),`__CODE_BLOCK_${o.length-1}__`)),a=Array.from(i.matchAll(/(?:^|[\s\n])@((?:~\/)?[^\s\n]+(?:\.[^\s\n]+)?)/gm));let l=i;for(const t of a){const o=t[1];let i=o;o.startsWith("~/")?i=e.join(h.homedir(),o.slice(2)):e.isAbsolute(o)||(i=e.resolve(e.dirname(n),o));const a=await loadMemoryFile(i);if(a){const e=await processImports(a,i,r+1,s);l=l.replace(t[0],`\n# Imported from ${o}\n${e}\n`)}}return l=l.replace(/__CODE_BLOCK_(\d+)__/g,(e,t)=>o[parseInt(t)]),l}async function loadAllMemories(t,n){const r=new Map,s=getEnterpriseMemoryPath();if(E(s)){const e=await loadMemoryFile(s);if(e){const t=await processImports(e,s);r.set(s,t)}}const o=getUserMemoryPath();if(E(o)){const e=await loadMemoryFile(o);if(e){const t=await processImports(e,o);r.set(o,t)}}const i=[e.join(t,"AGENTS.md"),e.join(t,".commandcode","AGENTS.md")];for(const e of i)if(E(e)){const t=await loadMemoryFile(e);if(t){const n=await processImports(t,e);r.set(e,n)}break}if(n&&n.length>0)for(const s of n){const n=e.isAbsolute(s)?e.dirname(s):e.dirname(e.resolve(t,s));if(n.startsWith(t)&&n!==t){const s=[];let o=n;for(;o.startsWith(t)&&o!==t;)s.push(o),o=e.dirname(o);for(const t of s.reverse()){const n=[e.join(t,"AGENTS.md"),e.join(t,".commandcode","AGENTS.md")];for(const e of n)if(E(e)&&!r.has(e)){const t=await loadMemoryFile(e);if(t){const n=await processImports(t,e);r.set(e,n)}break}}}}return r}async function openInEditor(t){const n=process.env.EDITOR||process.env.VISUAL||"code",r=e.dirname(t);return E(r)||await $.mkdir(r,{recursive:!0}),E(t)||await $.writeFile(t,"# AGENTS.md\n\n","utf-8"),new Promise((e,r)=>{const s=N(n,[t],{stdio:"inherit",shell:!0});s.on("exit",t=>{0===t?e():r(new Error(`Editor exited with code ${t}`))}),s.on("error",e=>{console.error("Error opening memory file. Please ensure you have an editor set up."),r(e)})})}async function initProjectMemory(t){const n=e.join(t,"AGENTS.md");return E(n)||await $.writeFile(n,"# Memory\n\n## Project Overview\nSee @README.md for project overview and @package.json for available npm/pnpm commands for this project.\n\n## Code Style Guidelines\n- Use descriptive variable names\n- Follow existing patterns in the codebase\n- Extract complex conditions into meaningful boolean variables\n\n## Architecture Notes\nAdd important architectural decisions and patterns here.\n\n## Common Workflows\nDocument frequently used workflows and commands here.\n","utf-8"),n}async function getMemoryContent(t){try{const n=process.cwd(),r=await loadAllMemories(n,t);if(0===r.size)return null;const s=[],o=getEnterpriseMemoryPath(),i=getUserMemoryPath(),a=[e.join(n,"AGENTS.md"),e.join(n,".commandcode","AGENTS.md")];r.has(o)&&s.push(`# Memory from: ${o}\n\n${r.get(o)}`),r.has(i)&&s.push(`# Memory from: ${i}\n\n${r.get(i)}`);for(const e of a)if(r.has(e)){s.push(`# Memory from: ${e}\n\n${r.get(e)}`);break}for(const[e,t]of r)e===o||e===i||a.includes(e)||s.push(`# Memory from: ${e}\n\n${t}`);return s.join("\n\n---\n\n")}catch(e){return null}}var DE,qE=__esm({"src/utils/memory.ts"(){Nt(),Ot(),__name(getEnterpriseMemoryPath,"getEnterpriseMemoryPath"),__name(getUserMemoryPath,"getUserMemoryPath"),__name(getProjectMemoryPaths,"getProjectMemoryPaths"),__name(discoverMemoryFiles,"discoverMemoryFiles"),__name(loadMemoryFile,"loadMemoryFile"),__name(getCodeBlockRegex,"getCodeBlockRegex"),__name(getImportRegex,"getImportRegex"),__name(processImports,"processImports"),__name(loadAllMemories,"loadAllMemories"),__name(openInEditor,"openInEditor"),__name(initProjectMemory,"initProjectMemory"),__name(getMemoryContent,"getMemoryContent")}});function agentToTool(t,n){const{clientTools:r,serverTools:s,toolsMap:o,displayNameToToolName:i}=n;return{name:t.name,description:t.description,input_schema:{type:"object",properties:{messages:{type:"array",description:"Messages to pass to the agent",items:{type:"object"}}},required:["messages"]},execute:__name(async(n,a)=>{let l=null;const u=Date.now();let d=null;try{const m=a?.permissionMode||"standard",p=filterToolsForMode({tools:getAvailableTools(t,{clientTools:r,serverTools:s,toolsMap:o,displayNameToToolName:i}),clientTools:r,serverTools:s,mode:m});let g=Date.now();const h=10,f=[];if(a?.onFeedUpdate){const e=Ho(t.name,n);l=qo({name:t.name,input:e}),a.onFeedUpdate(l)}d=setInterval(()=>{if(a?.onFeedUpdate&&l){const e=Date.now(),t=Math.floor((e-u)/1e3);l={...l,metadata:{...l.metadata,elapsedSeconds:t}},a.onFeedUpdate(l)}},1e3);const y=await getConfiguredProvider(),w=await isOAuthEnforced();let S;y===Ct.ANTHROPIC&&(S=await on.getValidAccessToken(),validateOAuthToken({token:S,provider:y}));const b=getApiBaseUrl(),E=new Vb({baseUrl:b});let C=0;const v=[];let T=n?.messages;if("string"==typeof T)try{T=JSON.parse(T)}catch(e){T=[]}if(Array.isArray(T)&&T.length>0)for(const e of T)if("object"==typeof e&&"content"in e){const t=e.content;"string"==typeof t&&v.push({role:"user",content:t})}const k={stream:!0,messages:v,max_tokens:64e3,system:t.systemPrompt,temperature:.3,tools:p,model:`anthropic:${getConfiguredModel()}`},_=await isTasteLearningEnabled(),P={[wt.PROJECT_SLUG]:Yb.getCurrentProjectDirName(),[wt.TASTE_LEARNING]:_.toString(),[wt.INTERNAL_TEAM_FLAG_HEADER]:w.toString()};S&&(P[wt.OAUTH_TOKEN]=`Bearer ${S}`);const A=getEnvironmentContext(),x=await getMemoryContent([]),I=crypto.randomUUID();let N="",R=!0;const $=__name(()=>{DE.debug("[Agent] Abort signal triggered, stopping immediately"),R=!1,d&&(clearInterval(d),d=null)},"abortHandler");a?.abortSignal&&a.abortSignal.addEventListener("abort",$);try{for(;R;){if(a?.abortSignal?.aborted)throw DE.debug("[Agent] Detected abort signal, stopping conversation"),new Error("Interrupted by user");const t=await callAPIWithRetry({request:E,body:{mode:"custom-agent",config:A,memory:x,threadId:I,params:{...k,messages:v}},headers:P,abortSignal:a?.abortSignal,onTextDelta:__name(e=>{C+=estimateTokens(e);const t=Date.now();if(a?.onFeedUpdate&&l&&t-g>=h){const e=Math.floor((t-u)/1e3);l={...l,metadata:{...l.metadata,tokensUsed:C,elapsedSeconds:e}},a.onFeedUpdate(l),g=t}},"onTextDelta")});if(a?.abortSignal?.aborted)throw new Error("Interrupted by user");t.usage&&(C=calculateUsageFromResponse(t.usage));const n=t.content.filter(e=>"tool_use"===e.type);if(N=t.content.filter(e=>"server_tool_use"===e.type).length>0?processServerToolBlocks(t,a):t.content.filter(e=>"text"===e.type).map(e=>e.text).join(""),0===n.length){const e=t.content.filter(e=>"text"!==e.type||e.text.trim().length>0);e.length>0&&v.push({role:"assistant",content:e}),R=!1;break}const r=t.content.filter(e=>"text"!==e.type||e.text.trim().length>0);r.length>0&&v.push({role:"assistant",content:r});const s=[],o=new Set;let i=!1;for(const t of n){if(a?.abortSignal?.aborted)throw new Error("Interrupted by user");let n=t.input;try{const r=Ms.includes(t.name),p=Os.includes(t.name)?generateToolDescription(t.name,n).catch(()=>null):Promise.resolve(null);if(r&&a?.onPermissionRequest){d&&(clearInterval(d),d=null);const e=await p;if(!await a.onPermissionRequest(t.name,n,e)){DE.debug(`Permission denied for tool: ${t.name}`),i=!0;break}d=setInterval(()=>{if(a?.onFeedUpdate&&l){const e=Date.now(),t=Math.floor((e-u)/1e3);l={...l,metadata:{...l.metadata,elapsedSeconds:t}},a.onFeedUpdate(l)}},1e3)}if("object"==typeof n&&null!==n){const r={...n};let s=!1;const o=["path","file_path","absolutePath","filePath","directory","folder"];for(const t of o)if(t in r&&"string"==typeof r[t]){const n=r[t];if(!e.isAbsolute(n)){const o=e.resolve(process.cwd(),n);r[t]=o,s=!0,DE.debug(`Converted '${t}': '${n}' -> '${o}'`)}}"paths"in r&&Array.isArray(r.paths)&&(r.paths=r.paths.map(t=>"string"!=typeof t||e.isAbsolute(t)?t:(s=!0,e.resolve(process.cwd(),t)))),s?(n=r,DE.debug(`Resolved input for ${t.name}: ${Ho(t.name,n)}`)):DE.debug(`No path resolution needed for ${t.name}: ${Ho(t.name,n)}`)}if(a?.onFeedUpdate&&l){const e=Ho(t.name,n);f.push({name:t.name,input:e}),f.length>3&&f.shift();const r=Date.now(),s=Math.floor((r-u)/1e3);l={...l,metadata:{isAgent:!0,status:"running",startTime:u,tokensUsed:C,elapsedSeconds:s,recentTools:[...f]}},DE.debug(`Updating agent with recentTools (${f.length} tools): ${JSON.stringify(f)}`),a.onFeedUpdate(l)}const g=await executeTool(t.name,n,{abortSignal:a?.abortSignal,permissionMode:m});if(a?.abortSignal?.aborted)throw new Error("Interrupted by user");const h=checkToolOutputTokensLimit(g,t.name);if(s.push({type:"tool_result",tool_use_id:t.id,content:h}),o.add(t.id),a?.onFeedUpdate&&l){const e=Date.now(),t=Math.floor((e-u)/1e3);l={...l,metadata:{isAgent:!0,status:"running",startTime:u,tokensUsed:C,elapsedSeconds:t,recentTools:[...f]}},a.onFeedUpdate(l)}DE.debug(`Tool executed successfully: ${t.name}`)}catch(e){const n=e instanceof Error?e.message:"Unknown error";s.push({type:"tool_result",tool_use_id:t.id,content:`Error: ${n}`,is_error:!0}),o.add(t.id),DE.error(`Tool execution failed: ${t.name} - ${n}`)}}if(i){const e=v[v.length-1];if("assistant"===e?.role&&Array.isArray(e.content)){const t=e.content.filter(e=>"tool_use"===e.type?o.has(e.id):"text"===e.type);t.length>0?e.content=t:v.pop()}R=!1;break}const p=[...s];v.push({role:"user",content:p})}}finally{a?.abortSignal&&a.abortSignal.removeEventListener("abort",$)}if(d&&(clearInterval(d),d=null),a?.onFeedUpdate&&l){const e=Date.now(),t=(e-u)/1e3;l={...l,output:N||"DONE",metadata:{isAgent:!0,status:"done",startTime:u,endTime:e,tokensUsed:C,elapsedSeconds:t}},a.onFeedUpdate(l)}return N||"DONE"}catch(e){if(d&&(clearInterval(d),d=null),a?.onFeedUpdate&&l){const t=Date.now(),n=(t-u)/1e3,r=e instanceof Error?e.message:"Unknown error",s="Interrupted by user"===r||a?.abortSignal?.aborted;l={...l,output:r,metadata:{isAgent:!0,status:s?"interrupted":"error",startTime:u,endTime:t,tokensUsed:l?.metadata?.tokensUsed||0,elapsedSeconds:n}},a.onFeedUpdate(l)}throw e}},"execute")}}function filterToolsForMode(e){const{tools:t,clientTools:n,serverTools:r,mode:s}=e;if("standard"===s||"auto-accept"===s)return t;const o=t.filter(e=>n.includes(e)),i=t.filter(e=>r.includes(e));return[...getToolsForMode({allTools:o,mode:s}),...i]}function getAvailableTools(e,t){const{clientTools:n,serverTools:r,toolsMap:s,displayNameToToolName:o}=t;let i=[];if("*"===e.tools)i=[...n,...r];else if("string"==typeof e.tools&&e.tools){const t=e.tools.split(",").map(e=>e.trim());for(const e of t){let t=o[e];if(!t&&s.has(e)&&(t=e),t){const e=s.get(t);if(e)i.push(e);else{const e=r.find(e=>e.name===t);e&&i.push(e)}}}}else if(Array.isArray(e.tools))for(const t of e.tools){let e=o[t];if(!e&&s.has(t)&&(e=t),e){const t=s.get(e);if(t)i.push(t);else{const t=r.find(t=>t.name===e);t&&i.push(t)}}}return i}async function callAPIWithRetry(e){const{request:t,body:n,headers:r,abortSignal:s,onTextDelta:o}=e;let i=null;for(let e=0;e<5;e++){if(s?.aborted)throw new Error("Interrupted by user");try{const e=await t.post({body:n,stream:!0,endpoint:St.ALPHA.GENERATE,signal:s,headers:r}),i=je.fromReadableStream(e);o&&i.on("text",o);let a=null;i.on("error",e=>{a="AbortError"===e.name||s?.aborted?new Error("Interrupted by user"):e});const l=await i.finalMessage();if(a)throw a;return l}catch(t){if(i=t,s?.aborted)throw new Error("Interrupted by user");if(isNonRetryableError(t,s))throw formatAPIError(t,s);if(!isRetryableError(t)||4===e)throw formatAPIError(t,s);const n=200*Math.pow(2,e);DE.debug(`API Error (attempt ${e+1}/5): ${t.message}. Retrying in ${n}ms...`),await sleep({delay:n,signal:s})}}throw i||new Error("Failed to get response after retries")}function isNonRetryableError(e,t){return"Interrupted by user"===e?.message||"Insufficient credits"===e?.message||"AbortError"===e?.name||e?.message?.includes("aborted")||t?.aborted||e instanceof oi&&400===e.status&&e.message?.toLowerCase().includes("insufficient credits")||e instanceof ai||403===e?.status}function isRetryableError(e){return!!e?.message&&!!['Unexpected event order, got error before "message_start"',"API Error: Unexpected event order","Body is unusable: Body has already been read"].some(t=>e.message.includes(t))}function formatAPIError(e,t){if("Interrupted by user"===e?.message||"AbortError"===e?.name||e?.message?.includes("aborted")||e?.message?.includes("interrupted")||"ECONNABORTED"===e?.code||t?.aborted)return new Error("Interrupted by user");if(e instanceof oi&&400===e.status&&e.message?.toLowerCase().includes("insufficient credits"))return new Error("Insufficient credits");if(e instanceof ai||403===e?.status)return e;if(e?.message?.startsWith("Error:"))return e;let n="Error: ";return e.message?n+="Something went wrong. Please try again or contact support if the issue persists.":e.toString?n+=e.toString():n+="Unknown error occurred",new Error(n)}function processServerToolBlocks(e,t){if(0===e.content.filter(e=>"server_tool_use"===e.type).length)return"";let n="";const r=e.content;for(const e of r)if("text"===e.type)n+=e.text;else if("server_tool_use"===e.type&&(n.trim()&&t?.onFeedUpdate&&(n=""),t?.onFeedUpdate)){const{message:n,isError:s}=Ls({serverToolBlock:e,contentBlocks:r}),o=Ho(e.name,e.input),i={id:`${e.name}-server-${Date.now()}`,timestamp:Date.now(),role:"tool",name:e.name,input:o,output:s?jo(n):n};t.onFeedUpdate(i)}return e.content.filter(e=>"text"===e.type).map(e=>e.text).join("")}var FE,jE,zE=__esm({"src/tools/agents/execute.ts"(){Nt(),Ot(),dn(),ar(),bE(),ts(),en(),hi(),JE(),vE(),Gs(),RE(),$E(),ME(),OE(),Jo(),qE(),CE(),nr(),Gs(),DE=new LE("AgentExecutor"),__name(agentToTool,"agentToTool"),__name(filterToolsForMode,"filterToolsForMode"),__name(getAvailableTools,"getAvailableTools"),__name(callAPIWithRetry,"callAPIWithRetry"),__name(isNonRetryableError,"isNonRetryableError"),__name(isRetryableError,"isRetryableError"),__name(formatAPIError,"formatAPIError"),__name(processServerToolBlocks,"processServerToolBlocks")}});function initializeAgentManager(e){jE=e}async function loadAgentTools(){if(!jE)throw new Error("Agent manager not initialized. Call initializeAgentManager first.");FE.clear();for(const e of vl){const t=agentToTool(e,jE);FE.set(t.name,t)}const{personal:e,project:t}=await loadAllAgents(),n=[...e,...t];for(const e of n){const t=agentToTool(e,jE);FE.set(t.name,t)}}async function getAgentTools(){return 0===FE.size&&await loadAgentTools(),Array.from(FE.values())}async function getAgentTool(e){return 0===FE.size&&await loadAgentTools(),FE.get(e)}var BE=__esm({"src/tools/agents/manager.ts"(){Nt(),Fl(),zE(),_l(),FE=new Map,jE=null,__name(initializeAgentManager,"initializeAgentManager"),__name(loadAgentTools,"loadAgentTools"),__name(getAgentTools,"getAgentTools"),__name(getAgentTool,"getAgentTool")}}),UE=__esm({"src/tools/agents/index.ts"(){Nt(),BE()}});function isPathInTasteDirectory(t){const{filePath:n,projectRoot:r}=t,s=e.join(r,".commandcode","taste"),o=e.normalize(e.resolve(r,n)),i=e.normalize(s);return o.startsWith(i)}function getTasteFileInfo(t){const n=e.normalize(e.resolve(t)),r=e.normalize(e.join(process.cwd(),".commandcode","taste")),s=e.normalize(e.join(h.homedir(),".commandcode","taste"));let o=null;if(n.startsWith(r)?o=r:n.startsWith(s)&&(o=s),!o)return{isTaste:!1};if(!n.endsWith("taste.md"))return{isTaste:!1};const i=e.relative(o,n).split(e.sep);return 1===i.length?{isTaste:!0}:2===i.length?{isTaste:!0,category:i[0]}:{isTaste:!1}}function getTasteAccessError(){return"Error: Cannot modify taste files (.commandcode/taste/). These files are managed automatically by the learning system."}var WE,QE,GE,HE,VE,KE,YE=__esm({"src/utils/taste-path-validator.ts"(){Nt(),Ot(),__name(isPathInTasteDirectory,"isPathInTasteDirectory"),__name(getTasteFileInfo,"getTasteFileInfo"),__name(getTasteAccessError,"getTasteAccessError")}});function isAgentTool(e){return!HE.has(e)&&!isMcpTool(e)}async function executeTool(e,t,n){if(isMcpTool(e)){const n=trackToolStart({toolName:e});try{const r=await executeMcpTool({prefixedName:e,args:t});return r.success?(n.end({status:"success"}),r.result??"Tool executed successfully"):(n.end({status:"error",error:new Error(r.error)}),`Error: ${r.error}`)}catch(e){const t=sanitizeErrorForTelemetry({error:e instanceof Error?e:new Error(String(e)),label:"mcp_tool_error"});return n.end({status:"error",error:t}),`Error: ${e instanceof Error?e.message:String(e)}`}}const r=n?.permissionMode||"standard",s=isToolAllowedInMode({toolName:e,mode:r,toolParams:t});if(!s.allowed)throw new Error(s.reason||`Tool "${e}" not allowed in ${r} mode`);let o=GE.get(e);if(o||(o=await getAgentTool(e)),!o){const t=await getAgentTools(),n=[...Array.from(GE.keys()),...t.map(e=>e.name)];throw new Error(`Tool "${e}" not found. Available tools: ${n.join(", ")}`)}if(("write_file"===e||"edit_file"===e)&&!0!==n?.allowTasteWrite){const e=t.filePath,n=isPathInTasteDirectory({filePath:e,projectRoot:process.cwd()});if(e&&n)throw new Error("Error: Cannot modify taste files (.commandcode/taste/). These files are managed automatically by the learning system.".replace("Error: ",""))}const i=trackToolStart({toolName:e});try{let r;return r=(!GE.has(e)||!0===o.acceptsCallbacks)&&n?await o.execute(t,n):await o.execute(t),i.end({status:"success"}),r}catch(e){if(e instanceof Error&&"Interrupted by user"===e.message){const t=sanitizeErrorForTelemetry({error:e,label:"tool_interrupted"});throw i.end({status:"error",error:t}),e}if(e instanceof Error){const t=sanitizeErrorForTelemetry({error:e,label:"tool_error"});return i.end({status:"error",error:t}),`Error: ${e.message}`}return i.end({status:"error",error:new Error("Unknown error occurred")}),"Error: Unknown error occurred"}}async function getToolSchemas(e){const t=e?.mode||"standard",n=null!==sl()?[...WE]:WE.filter(e=>e.name!==Is.GET_DIAGNOSTICS),r=await getAgentTools(),s=getToolsForMode({allTools:n,mode:t}).map(e=>({name:e.name,description:e.description,input_schema:e.input_schema})),o=r.map(e=>({name:e.name,description:e.description,input_schema:e.input_schema}));let i=[];return"plan"!==t&&getMcpConnectionManager().isInitialized&&(i=getAllMcpToolSchemas()),[...s,...o,...i,...QE]}function toPascalCase(e){return e.split("_").map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(" ")}var JE=__esm({"src/tools/index.ts"(){Nt(),xi(),Gi(),Xi(),aa(),pa(),ba(),Pa(),Ra(),Ma(),qa(),Wa(),pl(),gl(),hl(),fl(),yl(),kl(),Sl(),Gs(),po(),mo(),UE(),YE(),Vr(),RE(),WE=[vi,Bi,Ki,ta,ua,fa,va,Ia,$a,Oa,ja,Ha,Va,Ka,El],QE=[Ya,Ja],GE=new Map(WE.map(e=>[e.name,e])),HE=new Set([...WE.map(e=>e.name),...QE.map(e=>e.name)]),__name(isAgentTool,"isAgentTool"),__name(executeTool,"executeTool"),__name(getToolSchemas,"getToolSchemas"),__name(toPascalCase,"toPascalCase"),VE={},WE.forEach(e=>{VE[e.name]=toPascalCase(e.name)}),QE.forEach(e=>{VE[e.name]=toPascalCase(e.name)}),KE={},Object.entries(VE).forEach(([e,t])=>{KE[t]=e}),initializeAgentManager({clientTools:WE,serverTools:QE,toolsMap:GE,displayNameToToolName:KE})}});function parseEmbeddedErrorJSON(e){const t=e.indexOf("{");if(-1===t)return null;try{const n=JSON.parse(e.slice(t));if(n?.error?.message){const r=e.slice(0,t).trim();return{status:/^\d+$/.test(r)?Number(r):null,type:n.error.type||null,message:n.error.message}}}catch{}return null}function parseErrorLine(e){try{const t=JSON.parse(e);if("error"===t?.type&&t?.error?.type&&t?.error?.message)return{type:t.error.type,message:t.error.message}}catch{}return null}function interceptStreamErrors(e){const{responseStream:t}=e;let n=null,r="";const s=new TextDecoder,o=new TransformStream({transform(e,t){const o=s.decode(e,{stream:!0});r+=o;const i=r.split("\n");r=i.pop()??"";for(const e of i){const r=e.trim();if(!r){t.enqueue((new TextEncoder).encode(e+"\n"));continue}const s=parseErrorLine(r);if(s)return n=s,void t.error(new Error(`Error: Stream error: ${s.type} - ${s.message}`));t.enqueue((new TextEncoder).encode(e+"\n"))}},flush(e){const t=r.trim();if(t){const s=parseErrorLine(t);if(s)return n=s,void e.error(new Error(`Error: Stream error: ${s.type} - ${s.message}`));e.enqueue((new TextEncoder).encode(r))}}});return{stream:t.pipeThrough(o),getStreamError:__name(()=>n,"getStreamError")}}var XE,ZE,eC=__esm({"src/utils/stream-error-interceptor.ts"(){Nt(),__name(parseEmbeddedErrorJSON,"parseEmbeddedErrorJSON"),__name(parseErrorLine,"parseErrorLine"),__name(interceptStreamErrors,"interceptStreamErrors")}}),tC=__esm({"src/utils/learning-events.ts"(){Nt(),XE=class extends Re{static{__name(this,"LearningEventsStore")}events=[];maxEvents=50;_observerHasRun=!1;_importHasStarted=!1;_learningComplete=!1;get observerHasRun(){return this._observerHasRun}markObserverRun(){this._observerHasRun=!0}get importHasStarted(){return this._importHasStarted}markImportStarted(){this._importHasStarted=!0}get learningComplete(){return this._learningComplete}markLearningComplete(){this._learningComplete=!0,this.emit("learning-complete")}addEvent(e){const{type:t,message:n,details:r,step:s,label:o,sessionCount:i,promptCount:a,learningCount:l,categories:u,storage:d}=e,m={id:crypto.randomUUID(),timestamp:new Date,type:t,message:n,details:r,step:s,label:o,sessionCount:i,promptCount:a,learningCount:l,categories:u,storage:d};this.events.unshift(m),this.events.length>this.maxEvents&&(this.events=this.events.slice(0,this.maxEvents)),this.emit("new-event",m)}getEvents(){return[...this.events]}getLatestEvent(){return this.events.length>0?this.events[0]:null}clear(){this.events=[],this.emit("cleared")}reset(){this.events=[],this._observerHasRun=!1,this._importHasStarted=!1,this._learningComplete=!1,this.emit("reset")}},ZE=new XE}});function extractLearningWithConfidence(e){const{line:t}=e,n=t.match(/^-?\s*(.+?)\.\s+Confidence:\s*(\d+\.?\d*)/);return n?{text:n[1].trim(),confidence:parseFloat(n[2])}:null}function extractLearnings(e){const{text:t}=e;return t.split("\n").filter(e=>e.trim().startsWith("-")).map(e=>extractLearningWithConfidence({line:e})).filter(Boolean)}function compareLearnings(e){const{oldText:t,newText:n}=e,r=extractLearnings({text:t}),s=extractLearnings({text:n}),o=new Map(r.map(e=>[e.text,e.confidence])),i=[],a=[],l=[];return s.forEach(e=>{const t=o.get(e.text);void 0===t?i.push(e):e.confidence>t?a.push({text:e.text,oldConfidence:t,newConfidence:e.confidence}):e.confidence<t&&l.push({text:e.text,oldConfidence:t,newConfidence:e.confidence})}),{added:i,upgraded:a,downgraded:l}}var nC,rC,sC,oC,iC,aC,lC,cC,uC,dC,mC,pC=__esm({"src/utils/learning-parser.ts"(){Nt(),__name(extractLearningWithConfidence,"extractLearningWithConfidence"),__name(extractLearnings,"extractLearnings"),__name(compareLearnings,"compareLearnings")}}),gC=__esm({"src/agent/learning-agent.ts"(){Nt(),Ot(),dn(),CE(),JE(),ME(),$n(),tC(),pC(),OE(),nr(),ar(),Vr(),nC=new LE("LearningAgent"),rC=class{static{__name(this,"LearningAgent")}lastProcessedMessageIndex=-1;isProcessing=!1;pendingMessages=null;maxTurns=20;maxApiRetries=3;request;projectRoot;tasteDir;sessionId;abortSignal;constructor(t){this.request=t.request,this.sessionId=t.sessionId,this.projectRoot=t.projectRoot,this.tasteDir=e.join(t.projectRoot,".commandcode","taste")}updateRequest(e){this.request=e}setAbortSignal(e){this.abortSignal=e}async checkAndProcess(e){const{messages:t}=e;if(this.isProcessing)return this.pendingMessages=t,{success:!0};if(0===t.filter((e,t)=>t>this.lastProcessedMessageIndex&&"user"===e.role).length)return{success:!0};this.isProcessing=!0;try{for(await this.runLearningLoop({messages:t}),this.lastProcessedMessageIndex=t.length-1;null!==this.pendingMessages;){const e=this.pendingMessages;this.pendingMessages=null,e.filter((e,t)=>t>this.lastProcessedMessageIndex&&"user"===e.role).length>0&&(await this.runLearningLoop({messages:e}),this.lastProcessedMessageIndex=e.length-1)}return{success:!0}}catch(e){const n=e instanceof Error?e.message:String(e);return dlog(`[LearningAgent] ERROR: ${n}`),trackError({error:sanitizeErrorForTelemetry({error:e instanceof Error?e:new Error(String(e)),label:"learning_pass_failed"}),context:{component:Br.LEARNING_AGENT,heading:"Learning pass failed"}}),ZE.addEvent({type:"error",message:"learning pass failed",details:n}),this.lastProcessedMessageIndex=t.length-1,{success:!1}}finally{this.isProcessing=!1}}async runLearningLoop(e){const{messages:t}=e,n=["analyzing deltas","computing embeddings","updating weights","refining patterns","processing signals","extracting features","tuning parameters","optimizing priors"],r=n[Math.floor(Math.random()*n.length)];ZE.addEvent({type:"analyzing",message:r}),await this.initializeTasteDirectory();const s=await this.getTasteStructure(),o=t.length-this.lastProcessedMessageIndex-1,i=Math.max(20,o),a=Math.max(0,t.length-i),l=t.slice(a);let u=0,d=!1;dlog(`[LearningAgent] analyzing ${o} new messages for patterns`);const m=[{role:"user",content:`Current taste structure:\n${s}\n\nRecent conversation:\n${JSON.stringify(l,null,2)}`}];for(;u<this.maxTurns;){const e=await this.callLearningAPI({conversation:m}),t=this.extractToolCalls({content:e.content});if(0===t.length){const t=e.content.filter(e=>"text"===e.type);t.length>0&&dlog(`[LearningAgent] result: ${(t[0].text||"").substring(0,150)}`);break}dlog(`[LearningAgent] using tools: ${t.map(e=>e.name).join(", ")}`);const{results:n,learningsFound:r}=await this.executeTools({toolCalls:t});r&&(d=!0,dlog("[LearningAgent] patterns found and saved")),m.push({role:"assistant",content:e.content}),m.push({role:"user",content:n}),u++}u>=this.maxTurns&&nC.debug("Learning loop reached max turns"),await this.reorganizeIfNeeded(),d||ZE.addEvent({type:"no_learnings",message:"no changes to taste"}),ZE.addEvent({type:"analyzed",message:"finished learning pass"})}extractToolCalls(e){const{content:t}=e;return t.filter(e=>"tool_use"===e.type)}async executeTools(e){const{toolCalls:t}=e,n=[];let r=!1;for(const e of t)try{this.validateTastePath({toolName:e.name,input:e.input});const t=this.adjustPathsForTaste({toolName:e.name,input:e.input});let s="",o="";if("write_file"===e.name||"edit_file"===e.name){const e=t;if(o=String(e.filePath||e.file_path||""),o)try{s=await w.promises.readFile(o,"utf-8")}catch{}}if("write_file"===e.name||"edit_file"===e.name){const e=t.filePath;e&&this.validateFinalTastePath(e)}const i=await executeTool(e.name,t,{allowTasteWrite:!0});let a="";if(("write_file"===e.name||"edit_file"===e.name)&&o)try{a=await w.promises.readFile(o,"utf-8")}catch{}if("write_file"===e.name||"edit_file"===e.name){r=!0;const e=o.replace(`${this.projectRoot}/`,""),t=compareLearnings({oldText:s,newText:a});(t.added.length||t.upgraded.length||t.downgraded.length)&&dlog(`[LearningAgent] taste: +${t.added.length} ↑${t.upgraded.length} ↓${t.downgraded.length} → ${e}`),t.added.forEach(t=>{ZE.addEvent({type:"learned",message:`learned: ${t.text} (${Math.round(100*t.confidence)}%)`,details:e})}),t.upgraded.forEach(t=>{ZE.addEvent({type:"learned",message:`upgraded: ${t.text} (${Math.round(100*t.oldConfidence)}% → ${Math.round(100*t.newConfidence)}%)`,details:e})}),t.downgraded.forEach(t=>{ZE.addEvent({type:"learned",message:`downgraded: ${t.text} (${Math.round(100*t.oldConfidence)}% → ${Math.round(100*t.newConfidence)}%)`,details:e})})}n.push({type:"tool_result",tool_use_id:e.id,content:i})}catch(t){n.push({type:"tool_result",tool_use_id:e.id,is_error:!0,content:t instanceof Error?t.message:String(t)})}return{results:n,learningsFound:r}}validateTastePath(t){const{toolName:n,input:r}=t,s={read_file:"absolutePath",write_file:"filePath",edit_file:"filePath",read_directory:"path"}[n];if(!s||!r[s])return;const o=String(r[s]);if(e.isAbsolute(o))throw new Error(`Security: ${n} received absolute path. Only taste-relative paths are allowed (e.g., ".commandcode/taste/cli/taste.md" or ".commandcode/taste/taste.md"). Attempted: ${o}`);const i=e.normalize(o);if(i.startsWith(".."))throw new Error(`Security: ${n} path traversal attempt detected. Attempted: ${o}`);const a=e.join(this.tasteDir,i);if(!e.normalize(a).startsWith(this.tasteDir))throw new Error(`Security: ${n} can only access files within .commandcode/taste/. Attempted: ${o}`)}adjustPathsForTaste(t){const{toolName:n,input:r}=t,s={...r},o={read_file:"absolutePath",write_file:"filePath",edit_file:"filePath",read_directory:"path"}[n];if(o&&s[o]){const t=String(s[o]);let r;const i="write_file"===n||"edit_file"===n;if(e.isAbsolute(t)&&t.startsWith(this.tasteDir))if(i){if(!this.isValidTasteFilePath(t))throw new Error(`Invalid path: Absolute path in taste dir but wrong pattern: ${t}\n Must be: {project}/.commandcode/taste/taste.md or {project}/.commandcode/taste/{category}/taste.md`);r=t}else r=t;else{if(e.isAbsolute(t))throw new Error(`Invalid path: Absolute path outside taste directory: ${t}`);const n=e.normalize(t);if(n.startsWith(".."))throw new Error(`Security: Path traversal attempt detected: ${t}`);if(r=n.startsWith(".commandcode/taste")||n.startsWith(".commandcode"+e.sep+"taste")?n.replace(/^\.commandcode[/\\]taste/,this.tasteDir):e.join(this.tasteDir,n),r=e.normalize(r),!r.startsWith(this.tasteDir))throw new Error(`Security: Resolved path escapes taste directory: ${t} -> ${r}`);if(i&&!this.isValidTasteFilePath(r))throw new Error(`Invalid adjusted path: ${r}\n Must be: {project}/.commandcode/taste/taste.md or {project}/.commandcode/taste/{category}/taste.md`)}s[o]=r}return s}isValidTasteFilePath(e){return[/\.commandcode\/taste\/taste\.md$/,/\.commandcode\/taste\/[^/]+\/taste\.md$/].some(t=>t.test(e))}validateFinalTastePath(e){if(!this.isValidTasteFilePath(e))throw new Error(`Security: Invalid taste file path. Only allowed:\n - {project}/.commandcode/taste/taste.md\n - {project}/.commandcode/taste/{category}/taste.md\nAttempted: ${e}`)}async initializeTasteDirectory(){if(!w.existsSync(this.tasteDir)){w.mkdirSync(this.tasteDir,{recursive:!0});const t=e.join(this.tasteDir,"taste.md");w.writeFileSync(t,"","utf-8")}}async reorganizeIfNeeded(){const t=e.join(this.tasteDir,"taste.md");if(!w.existsSync(t))return!1;const n=w.readFileSync(t,"utf-8"),r=this.parseCategories({content:n}).filter(e=>e.learningCount>5);if(0===r.length)return!1;let s=n;for(const t of r){const n=t.name.toLowerCase().replace(/\s+/g,"-"),r=e.join(this.tasteDir,n),o=e.join(r,"taste.md");w.mkdirSync(r,{recursive:!0}),ZE.addEvent({type:"refactored",message:`moved: ${t.name} package`,details:`moved to ${n}/taste.md`});const i=`# ${t.name}\n${t.learnings.join("\n")}\n`;w.writeFileSync(o,i,"utf-8");const a=`# ${t.name}\nSee [${n}/taste.md](${n}/taste.md)\n`;s=s.replace(t.fullSection,a)}return w.writeFileSync(t,s,"utf-8"),!0}parseCategories(e){const{content:t}=e,n=[],r=t.split(/^# /gm).filter(e=>e.trim());for(const e of r){const t=e.split("\n"),r=t[0].trim();if(e.includes("See ["))continue;const s=t.filter(e=>e.trim().startsWith("- ")&&e.includes("Confidence:"));s.length>0&&n.push({name:r,learningCount:s.length,learnings:s,fullSection:`# ${e}`})}return n}async getTasteStructure(){return w.existsSync(this.tasteDir)?await this.buildTree({dir:this.tasteDir,prefix:""}):"(empty - no taste files yet)"}async buildTree(t){const{dir:n,prefix:r}=t,s=w.readdirSync(n,{withFileTypes:!0});let o="";for(let t=0;t<s.length;t++){const i=s[t],a=t===s.length-1,l=a?"└── ":"├── ";if(i.isDirectory()){o+=`${r}${l}${i.name}/\n`;const t=r+(a?" ":"│ ");o+=await this.buildTree({dir:e.join(n,i.name),prefix:t})}else if("taste.md"===i.name){const t=(w.readFileSync(e.join(n,i.name),"utf-8").match(/^- .*Confidence:.*$/gm)||[]).length;o+=`${r}${l}${i.name} (${t} learnings)\n`}else o+=`${r}${l}${i.name}\n`}return o}async getTasteTools(){const e=await getToolSchemas(),t=["read_file","write_file","edit_file","read_directory"];return e.filter(e=>t.includes(e.name)).map(e=>({name:e.name,description:e.description,input_schema:e.input_schema}))}async callLearningAPI(e){const{conversation:t}=e,n=await getConfiguredProvider(),r=await isOAuthEnforced();let s;n===Ct.ANTHROPIC&&(s=await on.getValidAccessToken(),validateOAuthToken({token:s,provider:n}));const o={[wt.PROJECT_SLUG]:Yb.getCurrentProjectDirName(),[wt.INTERNAL_TEAM_FLAG_HEADER]:r.toString()};s&&(o[wt.OAUTH_TOKEN]=`Bearer ${s}`);const i=await this.getTasteTools(),a=`anthropic:${getConfiguredModel()}`;dlog(`[LearningAgent] calling API (model: ${a})`);const l={conversation:t,tools:i,model:a,threadId:this.sessionId};let u=0,d=null;for(;u<=this.maxApiRetries;)try{const e=await this.request.post({endpoint:St.ALPHA.TASTE.LEARN,body:l,headers:o,signal:this.abortSignal});return dlog("[LearningAgent] API response received"),e}catch(e){if(d=e instanceof Error?e:new Error(String(e)),u++,this.abortSignal?.aborted)throw dlog("[LearningAgent] abort detected - stopping retries immediately"),new Error("Interrupted by user");const t=e?.status;if(t&&t>=400&&t<500)throw dlog(`[LearningAgent] API error: ${d.message}`),trackError({error:sanitizeErrorForTelemetry({error:d,label:"learning_api_client_error"}),context:{component:Br.LEARNING_AGENT,heading:"Learning API client error (no retry)","http.status":t}}),d;if(u>this.maxApiRetries)throw dlog(`[LearningAgent] API failed after ${this.maxApiRetries} retries`),trackError({error:sanitizeErrorForTelemetry({error:d,label:"learning_api_max_retries"}),context:{component:Br.LEARNING_AGENT,heading:"Learning API failed after retries","retry.count":this.maxApiRetries,"retry.attempts_made":u}}),d;const n=1e3*Math.pow(2,u);dlog(`[LearningAgent] retrying API call (${u}/${this.maxApiRetries})`),await sleep({delay:n,signal:this.abortSignal})}throw d||new Error("API call failed")}static async isInitialized(t){const{projectRoot:n}=t,r=e.join(n,".commandcode","taste");return w.existsSync(r)}}}}),hC=__esm({"src/agent/compact-agent.ts"(){Nt(),Ot(),dn(),CE(),en(),nr(),ar(),$n(),sC="claude-haiku-4-5-20251001",oC=class{static{__name(this,"CompactAgent")}request;sessionId;maxApiRetries=3;constructor(e){this.request=e.request,this.sessionId=e.sessionId}updateRequest(e){this.request=e}async compactMessages(e){const{messages:t}=e;dlog(`[CompactAgent] compacting ${t.length} messages`);try{const e=await this.callCompactAPI({messages:t});return dlog(`[CompactAgent] compaction complete: ${e.summary.length} chars`),e}catch(e){throw dlog(`[CompactAgent] ERROR: ${e instanceof Error?e.message:String(e)}`),e}}async callCompactAPI(e){const{messages:t}=e,n=await getConfiguredProvider(),r=await isOAuthEnforced();let s;n===Ct.ANTHROPIC&&(s=await on.getValidAccessToken(),validateOAuthToken({token:s,provider:n}));const o={[wt.PROJECT_SLUG]:Yb.getCurrentProjectDirName(),[wt.INTERNAL_TEAM_FLAG_HEADER]:r.toString()};s&&(o[wt.OAUTH_TOKEN]=`Bearer ${s}`);const i=t.map(e=>{const t=e.role;let n="";return"string"==typeof e.content?n=e.content:Array.isArray(e.content)&&(n=e.content.filter(e=>"text"===e.type).map(e=>e.text||"").join("\n")),`[${t}]: ${n}`}).join("\n\n"),a={config:getEnvironmentContext(),memory:"",taste:"",skills:"",params:{tools:[],system:"Your task is to create a detailed summary of the conversation so far, paying close attention to the user's explicit requests and your previous actions.\nThis summary should be thorough in capturing technical details, code patterns, and architectural decisions that would be essential for continuing development work without losing context.\n\nBefore providing your final summary, wrap your analysis in <analysis> tags to organize your thoughts and ensure you've covered all necessary points. In your analysis process:\n\n1. Chronologically analyze each message and section of the conversation. For each section thoroughly identify:\n - The user's explicit requests and intents\n - Your approach to addressing the user's requests\n - Key decisions, technical concepts and code patterns\n - Specific details like:\n - file names\n - full code snippets\n - function signatures\n - file edits\n - Errors that you ran into and how you fixed them\n - Pay special attention to specific user feedback that you received, especially if the user told you to do something differently.\n2. Double-check for technical accuracy and completeness, addressing each required element thoroughly.\n\nYour summary should include the following sections:\n\n1. Primary Request and Intent: Capture all of the user's explicit requests and intents in detail\n2. Key Technical Concepts: List all important technical concepts, technologies, and frameworks discussed.\n3. Files and Code Sections: Enumerate specific files and code sections examined, modified, or created. Pay special attention to the most recent messages and include full code snippets where applicable and include a summary of why this file read or edit is important.\n4. Errors and fixes: List all errors that you ran into, and how you fixed them. Pay special attention to specific user feedback that you received, especially if the user told you to do something differently.\n5. Problem Solving: Document problems solved and any ongoing troubleshooting efforts.\n6. All user messages: List ALL user messages that are not tool results. These are critical for understanding the users' feedback and changing intent.\n7. Pending Tasks: Outline any pending tasks that you have explicitly been asked to work on.\n8. Current Work: Describe in detail precisely what was being worked on immediately before this summary request, paying special attention to the most recent messages from both user and assistant. Include file names and code snippets where applicable.\n9. Optional Next Step: List the next step that you will take that is related to the most recent work you were doing. IMPORTANT: ensure that this step is DIRECTLY in line with the user's most recent explicit requests, and the task you were working on immediately before this summary request. If your last task was concluded, then only list next steps if they are explicitly in line with the users request. Do not start on tangential requests or really old requests that were already completed without confirming with the user first.\n If there is a next step, include direct quotes from the most recent conversation showing exactly what task you were working on and where you left off. This should be verbatim to ensure there's no drift in task interpretation.\n\nHere's an example of how your output should be structured:\n\n<example>\n<analysis>\n[Your thought process, ensuring all points are covered thoroughly and accurately]\n</analysis>\n\n<summary>\n1. Primary Request and Intent:\n [Detailed description]\n\n2. Key Technical Concepts:\n - [Concept 1]\n - [Concept 2]\n - [...]\n\n3. Files and Code Sections:\n - [File Name 1]\n - [Summary of why this file is important]\n - [Summary of the changes made to this file, if any]\n - [Important Code Snippet]\n - [File Name 2]\n - [Important Code Snippet]\n - [...]\n\n4. Errors and fixes:\n - [Detailed description of error 1]:\n - [How you fixed the error]\n - [User feedback on the error if any]\n - [...]\n\n5. Problem Solving:\n [Description of solved problems and ongoing troubleshooting]\n\n6. All user messages:\n - [Detailed non tool use user message]\n - [...]\n\n7. Pending Tasks:\n - [Task 1]\n - [Task 2]\n - [...]\n\n8. Current Work:\n [Precise description of current work]\n\n9. Optional Next Step:\n [Optional Next step to take]\n\n</summary>\n</example>\n\nPlease provide your summary based on the conversation so far, following this structure and ensuring precision and thoroughness in your response.\n\nThere may be additional summarization instructions provided in the included context. If so, remember to follow these instructions when creating the above summary. Examples of instructions include:\n<example>\n## Compact Instructions\nWhen summarizing the conversation focus on typescript code changes and also remember the mistakes you made and how you fixed them.\n</example>\n\n<example>\n# Summary instructions\nWhen you are using compact - please focus on test output and code changes. Include file reads verbatim.\n</example>",messages:[{role:"user",content:`Please summarize the following conversation.\n\n${i}`}],model:`anthropic:${sC}`,max_tokens:16e3,stream:!0},threadId:this.sessionId};let l=0,u=null;for(;l<=this.maxApiRetries;)try{dlog(`[CompactAgent] calling ${St.ALPHA.GENERATE} with model: ${sC}`);const e=await this.request.post({endpoint:St.ALPHA.GENERATE,body:a,headers:o,stream:!0});if(!e)throw new Error("No response stream received");const t=je.fromReadableStream(e);let n="",r=null;t.on("text",e=>{n+=e}),t.on("error",e=>{r=e});const s=await t.finalMessage();if(r)throw r;return dlog("[CompactAgent] API response received"),{summary:n,tokensUsed:{input:s.usage.input_tokens,output:s.usage.output_tokens}}}catch(e){u=e instanceof Error?e:new Error(String(e)),l++;const t=e?.status;if(t&&t>=400&&t<500)throw dlog(`[CompactAgent] API error: ${u.message}`),u;if(l>this.maxApiRetries)throw dlog(`[CompactAgent] API failed after ${this.maxApiRetries} retries`),u;const n=1e3*Math.pow(2,l);dlog(`[CompactAgent] retrying API call (${l}/${this.maxApiRetries})`),await new Promise(e=>setTimeout(e,n))}throw u||new Error("Compact API call failed")}}}});function migrateHeader(e){const{content:t}=e;if(t.includes(iC))return t.includes(lC)?t:t.includes(aC)?t.replace(/\n{0,2}\[cmd\]: https:\/\/commandcode\.ai\/\n?/g,"").replace(iC,lC):t.replace(iC,lC);let n=t;return n.includes(aC)&&(n=n.replace(/\n{0,2}\[cmd\]: https:\/\/commandcode\.ai\/\n?/g,"")),dC.test(n)?n=n.replace(dC,`$1${lC}`):mC.test(n)&&(n=n.replace(mC,`$1${lC}`)),n}var fC=__esm({"src/commands/taste/utils/header-migration.ts"(){Nt(),lC=`${iC="# Taste (Continuously Learned by [CommandCode][cmd])"}\n\n${aC="[cmd]: https://commandcode.ai/"}`,cC="# Taste (Continuously Learned by CommandCode)",uC="# Taste (Continuously Learned by CommandCode.ai)",dC=/^(\s*)# Taste \(Continuously Learned by CommandCode\)(?!\.ai)/,mC=/^(\s*)# Taste \(Continuously Learned by CommandCode\.ai\)/,__name(migrateHeader,"migrateHeader")}});async function getTasteContent(){try{const t=process.cwd(),n=e.join(t,".commandcode","taste","taste.md");if(!E(n))return null;const r=await $.readFile(n,"utf-8"),s=r.trim();return s&&s!==lC&&s!==iC&&s!==uC&&s!==cC?r:null}catch(e){return null}}var yC,wC,SC=__esm({"src/utils/taste/get-taste-content.ts"(){Nt(),Ot(),fC(),__name(getTasteContent,"getTasteContent")}});function extractMessageText(e){if("string"==typeof e)return e;if(!Array.isArray(e))return"";let t="";for(const n of e)"text"===n.type&&(t+=n.text);return t}async function buildAuthHeaders(){const e=await getConfiguredProvider(),t=await isOAuthEnforced(),n={[wt.PROJECT_SLUG]:Yb.getCurrentProjectDirName(),[wt.INTERNAL_TEAM_FLAG_HEADER]:t.toString()};if(e===Ct.ANTHROPIC){const e=await on.getValidAccessToken();e&&(n[wt.OAUTH_TOKEN]=`Bearer ${e}`)}return n}function hasUserAndAssistantMessage(e){let t=!1,n=!1;for(const r of e)if("user"===r.message.role&&(t=!0),"assistant"===r.message.role&&(n=!0),t&&n)return!0;return!1}async function generateSessionTitle(e){const{messages:t,sessionManager:n,request:r}=e;if(!hasUserAndAssistantMessage(t))return;if(await n.loadSessionTitle())return;let s="",o="";for(const e of t)if(s||"user"!==e.message.role||(s=extractMessageText(e.message.content).slice(0,wC)),o||"assistant"!==e.message.role||(o=extractMessageText(e.message.content).slice(0,wC)),s&&o)break;if(!s||!o)return;const i=`${yC}\n\nSession description:\n<description>User: ${s}\n\n---\n\nAssistant: ${o}</description>\n\nGenerate the session title now.`,a={config:getEnvironmentContext(),memory:"",taste:"",skills:"",params:{tools:[],messages:[{role:"user",content:i}],model:vt,max_tokens:50,temperature:.3,stream:!0},threadId:n.getSessionId()},l=await buildAuthHeaders(),u=await r.post({endpoint:St.ALPHA.GENERATE,body:a,headers:l,stream:!0}),d=je.fromReadableStream(u);let m="";d.on("text",e=>{m+=e}),await d.finalMessage(),m=m.trim(),m&&(await n.saveSessionTitle(m),dlog("Session",`Title generated: ${m}`))}var bC,EC,CC,vC=__esm({"src/chat/title-generator.ts"(){Nt(),dn(),CE(),en(),nr(),ar(),$n(),Ot(),yC="You are generating a succinct session title for a coding session based on the provided description.\n\nThe title should be:\n- Clear, concise, and accurately reflect the task\n- No more than 6 words\n- Easy to understand by a general audience\n- Free of unnecessary jargon (use technical terms only if essential)\n- Written in sentence case (capitalize only the first word and proper nouns)\n\nReturn only the title as a plain string, not JSON.\n\nExample titles:\nAdd retry logic to API\nSimplify error handling flow\nClean up unused components",wC=1e3,__name(extractMessageText,"extractMessageText"),__name(buildAuthHeaders,"buildAuthHeaders"),__name(hasUserAndAssistantMessage,"hasUserAndAssistantMessage"),__name(generateSessionTitle,"generateSessionTitle")}}),TC={};__export(TC,{ContextEngine:()=>CC});var kC,_C=__esm({"src/chat/context-engine.ts"(){Nt(),Zo(),dn(),gi(),hi(),Ci(),Jo(),Gs(),JE(),ME(),eC(),OE(),YE(),$E(),CE(),Vr(),ji(),ts(),bE(),Jl(),Ot(),en(),nr(),ar(),qE(),gC(),hC(),SC(),$n(),vC(),vE(),bC=new LE("ContextEngine"),EC=200,CC=class{static{__name(this,"ContextEngine")}request;messages=[];anthropic=null;callbacks;sessionManager;abortController=null;requestInterrupted=!1;contextTokensUsed=0;currentInteractionTokens=0;syncQueue=Promise.resolve();lastFileContexts=[];titleGenerationInFlight=!1;learningAgent;compactAgent;checkpointManager;constructor(e,t){const n=getApiBaseUrl();this.request=new Vb({baseUrl:n}),this.callbacks=e,this.sessionManager=new Yb(t),this.learningAgent=new rC({request:this.request,sessionId:this.sessionManager.getSessionId(),projectRoot:process.cwd()}),this.compactAgent=new oC({request:this.request,sessionId:this.sessionManager.getSessionId()}),this.checkpointManager=initializeCheckpointService({sessionId:this.sessionManager.getSessionId()}),this.setupCheckpointSessionStore()}refreshRequest(){const e=getApiBaseUrl();this.request=new Vb({baseUrl:e}),this.learningAgent.updateRequest(this.request),this.compactAgent.updateRequest(this.request)}createSessionStoreAdapter(){return{saveSnapshot:__name(async e=>{await this.sessionManager.saveSnapshot(e)},"saveSnapshot"),loadSnapshots:__name(async()=>this.sessionManager.loadSnapshots(),"loadSnapshots"),deleteSnapshotsAfter:__name(async e=>{await this.sessionManager.deleteSnapshotsAfter(e)},"deleteSnapshotsAfter"),getMessageAtIndex:__name(e=>this.sessionManager.getMessageAtIndex({index:e.index,messages:this.messages}),"getMessageAtIndex"),getMessageIndexById:__name(e=>this.sessionManager.getMessageIndexById({messageId:e.messageId,messages:this.messages}),"getMessageIndexById"),truncateMessagesAtIndex:__name(async e=>{const t=await this.sessionManager.truncateMessagesAtIndex({index:e.index,messages:this.messages});this.messages=t},"truncateMessagesAtIndex"),getMessageCount:__name(()=>this.sessionManager.getMessageCount({messages:this.messages}),"getMessageCount")}}setupCheckpointSessionStore(){this.checkpointManager.setSessionStore({sessionStore:this.createSessionStoreAdapter()}),this.checkpointManager.runCleanup().catch(()=>{})}async interrupt(e=!1){if(this.requestInterrupted=!0,this.abortController){this.abortController.abort(),this.abortController=null,bC.debug("LLM request interrupted by user");const t=this.messages[this.messages.length-1];if("assistant"===t?.message.role&&Array.isArray(t.message.content)){const n=t.message.content.filter(e=>"tool_use"===e.type),r=[];if(n.length>0){const e=n.map(e=>({type:"tool_result",tool_use_id:e.id,content:"Interrupted by user",is_error:!0}));r.push(...e),bC.debug(`Added tool_result blocks for ${e.length} interrupted tool calls`)}e&&r.push({type:"text",text:"Interrupted by user"}),r.length>0&&this.addMessageAndSync(this.createMessageWithMeta({role:"user",content:r}))}if(e){const e=Ao("Interrupted by user");this.sessionManager.saveMessages(this.messages,e).catch(e=>bC.error(`Failed to save interruption to session: ${e}`))}}}async sendMessage(e,t,n,r){let s=e,o=[];try{const t=await processFileReferences(e);if(s=t.processedContent,o=t.fileReferences,o.length>0){const e=o.map(e=>e.resolvedPath);this.lastFileContexts=[...new Set([...this.lastFileContexts,...e])]}}catch(e){console.error("File reference processing failed:",e)}n&&(s=`${n}\n\n${s}`);const i=Ao(r??e);t&&t.length>0&&(i.metadata={...i.metadata,images:t}),o&&o.length>0&&(i.metadata={...i.metadata,fileReferences:o}),this.callbacks.onFeedUpdate(i);const a=[];t&&t.length>0&&t.forEach(e=>{a.push({type:"image",source:{type:"base64",media_type:e.mediaType,data:e.data}})}),s.trim()&&a.push({type:"text",text:s});const l={role:"user",content:a},u=crypto.randomUUID(),d=this.createMessageWithMeta(l,{messageId:u});this.addMessageAndSync(d),this.checkpointManager.createSnapshot({messageId:u}).catch(e=>bC.error(`Failed to create checkpoint snapshot: ${e}`)),this.sessionManager.saveMessages(this.messages,i).catch(e=>bC.error(`Failed to save messages to session: ${e}`)),this.triggerLearningAgent();const m=await this.processMessages();return this.triggerTitleGeneration(),m}triggerLearningAgent(){(async()=>{try{if(!await isTasteLearningEnabled())return;const e=this.getRawMessages();await this.learningAgent.checkAndProcess({messages:e})}catch(e){bC.error(`Learning agent failed: ${e instanceof Error?e.message:String(e)}`)}})()}triggerTitleGeneration(){this.titleGenerationInFlight||(this.titleGenerationInFlight=!0,generateSessionTitle({messages:this.messages,sessionManager:this.sessionManager,request:this.request}).catch(e=>{dlog("Session",`Title generation failed: ${e instanceof Error?e.message:String(e)}`)}).finally(()=>{this.titleGenerationInFlight=!1}))}async processMessages(){let e="";this.requestInterrupted=!1,this.abortController=new AbortController,this.learningAgent.setAbortSignal(this.abortController.signal);let t=!1;for(;;)try{this.checkIfInterrupted(),t||(this.initializeInteractionTokens(),t=!0);const{body:n,headers:r}=await this.prepareAPICall(),s=await this.callAPIWithRetry({body:n,headers:r});this.checkIfInterrupted(),this.updateContextUsage(s),await this.checkAndCompactIfNeeded();const o=s.content.filter(e=>"tool_use"===e.type),i=s.content.filter(e=>"server_tool_use"===e.type);if(e=i.length>0?this.processServerToolBlocks(s):s.content.filter(e=>"text"===e.type).map(e=>e.text).join(""),0===o.length){const t=s.content.filter(e=>"text"!==e.type||e.text.trim().length>0);if(t.length>0&&this.addMessageAndSync(this.createMessageWithMeta({role:"assistant",content:t})),e.trim()&&0===i.length){const t=Io(e);this.callbacks.onFeedUpdate(t),this.sessionManager.saveMessages(this.messages,t).catch(e=>bC.error(`Failed to save messages: ${e}`))}if(0!==i.length&&this.sessionManager.saveMessages(this.messages).catch(e=>bC.error(`Failed to save messages: ${e}`)),this.callbacks.getQueuedMessages){const e=this.callbacks.getQueuedMessages();if(e.length>0){const t=[];for(const n of e){t.push({type:"text",text:n});const e=Ao(n);this.callbacks.onFeedUpdate(e)}this.addMessageAndSync(this.createMessageWithMeta({role:"user",content:t})),this.sessionManager.saveMessages(this.messages).catch(e=>bC.error(`Failed to save messages: ${e}`)),this.triggerLearningAgent();continue}}break}const a=s.content.filter(e=>"text"!==e.type||e.text.trim().length>0);if(a.length>0&&this.addMessageAndSync(this.createMessageWithMeta({role:"assistant",content:a})),e.trim()){const t=Io(e);this.callbacks.onFeedUpdate(t)}const l=await this.executeToolBlocks({toolBlocks:o}),{toolResults:u,executedToolIds:d,permissionDenied:m}=l;if(m){const e=this.messages[this.messages.length-1];if("assistant"===e?.message.role&&Array.isArray(e.message.content)){const t=e.message.content.filter(e=>"tool_use"===e.type?d.has(e.id):"text"===e.type);t.length>0?e.message.content=t:this.messages.pop()}break}const p=[...u];if(this.callbacks.getQueuedMessages){const e=this.callbacks.getQueuedMessages();if(e.length>0)for(const t of e){p.push({type:"text",text:t});const e=Ao(t);this.callbacks.onFeedUpdate(e)}}this.addMessageAndSync(this.createMessageWithMeta({role:"user",content:p})),this.sessionManager.saveMessages(this.messages).catch(e=>bC.error(`Failed to save messages: ${e}`))}catch(e){throw this.isNonRetryableError(e)&&bC.debug("Request interrupted or insufficient credits"),e}return this.abortController=null,e}getHistory(){return[...this.messages]}async loadSession(e){const{messages:t,corruptedLines:n,totalLines:r}=await this.sessionManager.loadMessages(e);this.messages=t,this.triggerTitleGeneration();try{await this.loadCheckpoints()}catch(t){bC.error(`Failed to load checkpoints for session ${e}: ${t}`)}const s=this.sessionManager.reconstructFeedFromMessages(t);return bC.debug(`Loaded session ${e} with ${t.length} messages (${n} corrupted lines)`),{feedEntries:s,corruptedLines:n,totalLines:r}}getMessages(){return[...this.messages]}getRawMessages(){return this.sanitizeMessagesForAPI(this.messages.map(e=>e.message))}sanitizeMessagesForAPI(e){const t=[];for(const n of e){if("user"===n.role&&Array.isArray(n.content)){const e=t.length>0?t[t.length-1]:null,r=new Set;if("assistant"===e?.role&&Array.isArray(e.content))for(const t of e.content)"tool_use"===t.type&&r.add(t.id);const s=n.content.filter(e=>"tool_result"!==e.type||r.has(e.tool_use_id));s.length>0&&t.push({...n,content:s});continue}const e=t.length>0?t[t.length-1]:null;if(e&&e.role===n.role){const t=Array.isArray(e.content)?e.content:[{type:"text",text:e.content}],r=Array.isArray(n.content)?n.content:[{type:"text",text:n.content}];e.content=[...t,...r];continue}t.push({...n})}return t}getSessionId(){return this.sessionManager.getSessionId()}getSessionManager(){return this.sessionManager}getContextTokensUsed(){return this.contextTokensUsed}isRequestInProgress(){return null!==this.abortController}async manualCompact(){if(this.messages.length<=2)return{tokensSaved:0,didCompact:!1};bC.debug(`Manual compact: ${this.messages.length} messages`);const e=this.contextTokensUsed;return await this.summarizeAndCompact(),{tokensSaved:Math.max(0,e-this.contextTokensUsed),didCompact:!0}}async compactConversation({preserveCurrentInteraction:e=!1}={preserveCurrentInteraction:!1}){const t=this.messages.length,n=this.contextTokensUsed;let r=-1;if(e)for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if("user"===t.message.role){const n=t.message.content;if(!Array.isArray(n)){r=e;break}if(!n.some(e=>"tool_result"===e.type)){r=e;break}}}let s=0;const o=[];for(let t=0;t<this.messages.length;t++){const n=this.messages[t],i=n.message.role;if(e&&t>=r&&-1!==r)o.push(n);else{if("user"===i){const e=n.message.content;if(Array.isArray(e)){if(e.some(e=>"tool_result"===e.type)){s+=estimateTokens(n.message);continue}o.push(n)}else o.push(n)}else if("assistant"===i){const e=n.message.content;if(Array.isArray(e)){const t=e.filter(e=>"tool_use"===e.type);for(const e of t)s+=estimateTokens({role:"assistant",content:[e]});const r=e.filter(e=>"text"===e.type&&e.text?.trim());r.length>0?o.push({...n,message:{...n.message,content:r}}):s+=estimateTokens(n.message)}else"string"==typeof e&&e.trim()&&o.push(n)}"user"!==i&&"assistant"!==i&&(s+=estimateTokens(n.message))}}this.messages=o,await this.sessionManager.saveMessages(this.messages);const i=Math.max(0,n-s);return this.contextTokensUsed=i,this.callbacks.onContextUsageUpdate?.({current:i,limit:xE}),{messagesRemoved:t-o.length,tokensSaved:s}}createMessageWithMeta(e,t={}){return{message:e,meta:{timestamp:(new Date).toISOString(),source:"cli",...t}}}extractFilePathFromTool(e,t){try{switch(e){case"read_file":case"write_file":case"edit_file":return t.absolutePath||t.file_path||t.filePath||t.path;case"read_directory":case"grep":return t.path;case"read_multiple_files":const e=t.include||[];return Array.isArray(e)&&e.length>0?e[0]:void 0;default:return}}catch{return}}addMessageAndSync(e){this.messages.push(e);const t=this.callbacks.getShareInfo?.();t&&(this.syncQueue=this.syncQueue.then(async()=>{try{await this.syncMessageToShare(t,e)}catch(e){}}))}async syncMessageToShare(e,t){try{const n=$l.sanitizeMessage(t,global.COMMAND_CODE_CWD||process.cwd()),r={sessionId:e.sessionId,secret:e.secret,message:n};await this.request.post({body:r,endpoint:St.ALPHA.SHARE.APPEND})}catch(e){throw e}}checkIfInterrupted(){if(this.requestInterrupted||this.abortController?.signal.aborted)throw new Error("Interrupted by user")}initializeInteractionTokens(){const e=this.messages[this.messages.length-1];this.currentInteractionTokens=estimateTokens(e.message)}async prepareAPICall(){const e=this.callbacks.getPermissionMode?.()||"standard",t=await getToolSchemas({mode:e}),n=await getConfiguredProvider(),r=await isOAuthEnforced();let s;n&&this.callbacks.onProviderChange&&this.callbacks.onProviderChange(n),n===Ct.ANTHROPIC&&(s=await on.getValidAccessToken(),validateOAuthToken({token:s,provider:n}));const o={tools:t,stream:!0,max_tokens:64e3,temperature:.3,messages:this.getRawMessages(),model:`anthropic:${getConfiguredModel()}`},i={config:getEnvironmentContext(),memory:await getMemoryContent(this.lastFileContexts),taste:await getTasteContent(),skills:generateSkillsXML(await loadAllSkillSummaries())||null,params:o,threadId:this.sessionManager.getSessionId(),permissionMode:e};bC.debug(`calling API (${o.model}, ${this.messages.length} msgs, ${t.length} tools)`);const a=await isTasteLearningEnabled(),l={[wt.PROJECT_SLUG]:Yb.getCurrentProjectDirName(),[wt.TASTE_LEARNING]:a.toString(),[wt.INTERNAL_TEAM_FLAG_HEADER]:r.toString()};return s&&(l[wt.OAUTH_TOKEN]=`Bearer ${s}`),{body:i,headers:l}}async callAPIWithRetry(e){let t=null;for(let n=0;n<10;n++){let r;try{const t=interceptStreamErrors({responseStream:await this.request.post({body:e.body,stream:!0,endpoint:St.ALPHA.GENERATE,signal:this.abortController?.signal,headers:e.headers})}),n=t.stream;r=t.getStreamError;const s=je.fromReadableStream(n);s.on("text",e=>{this.currentInteractionTokens+=estimateTokens(e),this.callbacks.onInteractionTokenUpdate&&this.callbacks.onInteractionTokenUpdate(this.currentInteractionTokens)});let o=null;s.on("error",e=>{o="AbortError"===e.name||this.abortController?.signal.aborted?new Error("Interrupted by user"):e});const i=await s.finalMessage();if(o)throw o;return this.callbacks.onRetryUpdate?.(null),i}catch(e){const s=r?.(),o=s?Object.assign(new Error(s.message),{type:s.type,error:{type:s.type,message:s.message}}):e;if(t=o,this.requestInterrupted||this.abortController?.signal.aborted)throw this.callbacks.onRetryUpdate?.(null),new Error("Interrupted by user");if(this.isNonRetryableError(o))throw trackError({error:sanitizeErrorForTelemetry({error:o instanceof Error?o:new Error(String(o)),label:"non_retryable_api_error"}),context:{component:Br.CONTEXT_ENGINE,heading:"Non-retryable API error",code:o?.status||o?.statusCode}}),this.formatAPIError(o);if(9===n)throw this.callbacks.onRetryUpdate?.(null),trackError({error:sanitizeErrorForTelemetry({error:o instanceof Error?o:new Error(String(o)),label:"max_retries_exceeded"}),context:{heading:"Max retries exceeded",component:Br.CONTEXT_ENGINE,code:o?.status||o?.statusCode,"retry.attempts":10}}),this.formatAPIError(o);trackError({error:sanitizeErrorForTelemetry({error:o instanceof Error?o:new Error(String(o)),label:"generate_retry_attempt"}),context:{heading:"Generate API retry",component:Br.CONTEXT_ENGINE,code:o?.status||o?.statusCode,"retry.attempt":n+1,"retry.max":10}});const i=Math.min(n,10),a=100*Math.pow(2,i),l=Math.max(a,1e3),u=Math.min(l,1e4);n>=2&&this.callbacks.onRetryUpdate?.(n+1),await sleep({delay:u,signal:this.abortController?.signal})}}throw t||new Error("Failed to get response after retries")}isNonRetryableError(e){const{message:t}=this.extractErrorMessage(e),n=t?.toLowerCase()||"",r="Interrupted by user"===t||"AbortError"===e?.name||n.includes("aborted")||this.requestInterrupted||this.abortController?.signal.aborted,s="Insufficient credits"===t||n.includes("insufficient credits"),o=e instanceof ii||401===e?.status||e instanceof ai||403===e?.status,i=e?.type||e?.error?.type,a="rate_limit_error"===i||429===e?.status||n.includes("rate limit"),l="overloaded_error"===i||529===e?.status||n.includes("overloaded");return r||s||o||a||l}extractErrorMessage(e){dlog("Extracting error message from:",e);const t=e?.status||e?.statusCode||null;if(e?.error?.message){const n=parseEmbeddedErrorJSON(e.error.message);return n?{...n,status:n.status||t}:{status:t,type:e.error.type||null,message:e.error.message}}const n=e?.message;if("string"==typeof n){const e=parseEmbeddedErrorJSON(n);if(e)return{...e,status:e.status||t}}return{status:t,type:e?.type||null,message:e?.message||null}}formatAPIError(e){if("Interrupted by user"===e?.message||"AbortError"===e?.name||e?.message?.includes("aborted")||e?.message?.includes("interrupted")||"ECONNABORTED"===e?.code||this.requestInterrupted||this.abortController?.signal.aborted)return new Error("Interrupted by user");const t=this.extractErrorMessage(e),n=t.status,r=t.type,s=t.message;dlog("API error occurred:",e),dlog("Extracted error details:",t),dlog("Error type:",r),dlog("Error message:",s);const o=s?.toLowerCase().includes("insufficient credits");if(o)return new Error("Insufficient credits");const i=s?.toLowerCase().includes("oauth authentication required");if(i)return e;if(e instanceof ai||403===e?.status)return e;if(e instanceof ii||401===e?.status)return new Error('Error: Authentication failed. Your API key may be invalid or expired. Run "cmd login" to sign in again.');const a=getSupportId();let l="";if(s)if(s.includes("Invalid 'Authorization' header"))l='Error: Authentication failed. Run "cmd login" to sign in again.';else{let e=s;for(;e.startsWith("Error: ");)e=e.substring(7);e.includes("Unexpected event order")&&(e="The API returned an error. This may be due to high traffic or a temporary issue.");let t=e.replace(/(?<!\.)Anthropic(?!\.)/gi,"Command Code");t.length>EC&&(t=t.substring(0,EC)+"..."),l=`Error: ${[n,r?r.charAt(0).toUpperCase()+r.slice(1):null,t].filter(Boolean).join(" ")}`;const o=s.toLowerCase(),i="overloaded_error"===r||o.includes("overloaded"),u="rate_limit_error"===r||o.includes("rate limit");l+=i?"\n\nThe API is currently experiencing high traffic. Please try again in a moment.":u?'\n\nYou can wait a moment and try again, or type "continue" to retry.':'\n\nType "continue" to try again. If the issue persists, contact support: https://commandcode.ai/discord',"unknown"!==a&&(l+=`\nRequest ID: ${a}`)}else if(e.toString){const t=e.toString();l=t.length>EC?t.substring(0,EC)+"...":t}else l="Error: Unknown error occurred";return new Error(l)}async executeToolBlocks(e){const t=new Set;let n=!1;const r=[],s=[];for(const o of e.toolBlocks){this.checkIfInterrupted();const e=crypto.randomUUID(),i=Ms.includes(o.name),a=Os.includes(o.name)?this.getToolDescription(o):Promise.resolve(null);let l=null;try{i&&this.callbacks.onPermissionRequest&&(l=await a);const t=await this.checkToolPermission(o,l);if(t.needsPermission&&!t.allowed){this.handlePermissionDenied(o,e),n=!0;break}}catch(n){const r=n instanceof Error?n.message:"Permission check failed";this.showToolError(o,r,e,l),s.push({toolBlock:o,toolResult:{type:"tool_result",tool_use_id:o.id,content:`Error: ${r}`,is_error:!0}}),t.add(o.id);continue}null===l&&(l=await a),r.push({toolBlock:o,entryId:e,description:l})}const o=[];for(const{toolBlock:e,toolResult:n}of s)o.push(n),t.add(e.id);if(r.length>0){const e=await Promise.allSettled(r.map(async({toolBlock:e,entryId:t,description:n})=>{this.checkIfInterrupted();const r="edit_file"===e.name?await resolveEditStartLine({filePath:e.input.filePath,oldContent:e.input.oldValue}).catch(()=>{}):void 0,s=await this.executeSingleTool(e);return isAgentTool(e.name)||this.showToolSuccess(e,s,t,n,r),{toolBlock:e,toolResult:{type:"tool_result",tool_use_id:e.id,content:s}}}));for(let n=0;n<e.length;n++){const s=e[n],{toolBlock:i,entryId:a,description:l}=r[n];if("fulfilled"===s.status)o.push(s.value.toolResult),t.add(i.id);else{const e=s.reason instanceof Error?s.reason.message:"Unknown error";"Interrupted by user"===e&&isAgentTool(i.name)?t.add(i.id):(o.push({type:"tool_result",tool_use_id:i.id,content:`Error: ${e}`,is_error:!0}),t.add(i.id),this.showToolError(i,e,a,l))}}}return{toolResults:o,executedToolIds:t,permissionDenied:n}}async getToolDescription(e){try{return await Promise.race([generateToolDescription(e.name,e.input),new Promise(e=>setTimeout(()=>e(null),6e3))])}catch(t){return bC.debug(`Failed to generate description for ${e.name}: ${t instanceof Error?t.message:"Unknown error"}`),this.callbacks.onToolDescriptionError&&this.callbacks.onToolDescriptionError(e.name,t),null}}async checkToolPermission(e,t){return Ms.includes(e.name)&&this.callbacks.onPermissionRequest?{needsPermission:!0,allowed:await this.callbacks.onPermissionRequest(e.name,e.input,t)}:{needsPermission:!1,allowed:!0}}async executeSingleTool(e){const t=this.callbacks.getPermissionMode?.()||"standard",n=await executeTool(e.name,e.input,{onPermissionRequest:this.callbacks.onPermissionRequest,onQuestionRequest:this.callbacks.onQuestionRequest,abortSignal:this.abortController?.signal,onFeedUpdate:this.callbacks.onFeedUpdate,permissionMode:t});this.checkIfInterrupted();const r=checkToolOutputTokensLimit(n,e.name),s=estimateTokens(r);return this.currentInteractionTokens+=s,this.callbacks.onInteractionTokenUpdate&&this.callbacks.onInteractionTokenUpdate(this.currentInteractionTokens),r}handlePermissionDenied(e,t){const n=Ho(e.name,e.input),r={..."edit_file"===e.name?e.input:{},permissionDenied:!0},s={...No(e.name,n,r),id:t},o=Fo(s,"No (tell Command Code what to do differently)");this.callbacks.onFeedUpdate(o)}showToolSuccess(e,t,n,r,s){let o="edit_file"===e.name?{...e.input,...void 0!==s?{startLine:s}:{}}:void 0;if("read_file"===e.name){const t=e.input.absolutePath||e.input.filePath||e.input.file_path||e.input.path;if(t){const e=getTasteFileInfo(t);e.isTaste&&(o={...o||{},isTasteFile:!0,tasteCategory:e.category})}}const i={...e.input,...o?.isTasteFile?{isTasteFile:o.isTasteFile}:{},...o?.tasteCategory?{tasteCategory:o.tasteCategory}:{}},a=Ho(e.name,i),l={...No(e.name,a,o),id:n,...r?{description:r}:{}},u=Fo(l,t);this.callbacks.onFeedUpdate(u)}showToolError(e,t,n,r){const s=Ho(e.name,e.input),o="edit_file"===e.name?{...e.input,permissionDenied:!0}:void 0,i={...No(e.name,s,o),id:n,...r?{description:r}:{}},a=Fo(i,jo(t));this.callbacks.onFeedUpdate(a)}processServerToolBlocks(e){if(0===e.content.filter(e=>"server_tool_use"===e.type).length)return"";let t="";const n=e.content;for(const e of n)if("text"===e.type)t+=e.text;else if("server_tool_use"===e.type){if(t.trim()){const e=Io(t.trim());this.callbacks.onFeedUpdate(e),t=""}const{message:r,isError:s}=Ls({serverToolBlock:e,contentBlocks:n}),o=Ho(e.name,e.input),i=No(e.name,o),a=Fo(i,s?jo(r):r);this.callbacks.onFeedUpdate(a)}if(t.trim()){const e=Io(t.trim());this.callbacks.onFeedUpdate(e)}return e.content.filter(e=>"text"===e.type).map(e=>e.text).join("")}updateContextUsage(e){if(!("usage"in e))return;const t=e.usage;if(!t?.input_tokens)return;const n=calculateUsageFromResponse(t);this.contextTokensUsed=n,this.callbacks.onContextUsageUpdate&&this.callbacks.onContextUsageUpdate({current:this.contextTokensUsed,limit:xE})}async checkAndCompactIfNeeded(){const e=Math.floor(xE*At.TIER_1_THRESHOLD),t=Math.floor(xE*At.TIER_2_THRESHOLD),n=Math.floor(xE*At.TIER_3_THRESHOLD);try{if(this.contextTokensUsed>n){bC.debug(`Context tokens (${this.contextTokensUsed}) exceeded Tier 3 threshold (${n}), triggering summarization`),this.callbacks.onStatusUpdate?.("Context limit reached. Auto-compacting the conversation...");const e=this.contextTokensUsed;await this.summarizeAndCompact();const t=Math.max(0,e-this.contextTokensUsed);return void this.emitAutoCompactInfo(t)}if(this.contextTokensUsed>t){bC.debug(`Context tokens (${this.contextTokensUsed}) exceeded Tier 2 threshold (${t}), removing all except last ${At.TIER_2_KEEP_COUNT} tool calls`);const e=await this.removeToolCallsExceptLast(At.TIER_2_KEEP_COUNT);return bC.debug(`Tier 2 compaction completed: removed ${e.toolsRemoved} tool calls, saved ${e.tokensSaved} tokens`),void this.emitAutoCompactInfo(e.tokensSaved)}if(this.contextTokensUsed>e){const t=this.countToolCalls(),n=At.TIER_1_KEEP_COUNT;if(t>n){bC.debug(`Context tokens (${this.contextTokensUsed}) exceeded Tier 1 threshold (${e}), keeping last ${n} tool calls`);const t=await this.removeToolCallsExceptLast(n);bC.debug(`Tier 1 compaction completed: removed ${t.toolsRemoved} tool calls, saved ${t.tokensSaved} tokens`),this.emitAutoCompactInfo(t.tokensSaved)}}}catch(e){bC.debug(`Failed to automatically compact conversation: ${e}`)}}emitAutoCompactInfo(e){e>0&&this.callbacks.onFeedUpdate(xo(`Auto-compacted conversation, saved ~${e.toLocaleString()} tokens.`,{isAutoCompact:!0}))}countToolCalls(){let e=0;for(const t of this.messages){const n=t.message.content;if(Array.isArray(n))for(const t of n)"tool_use"===t.type&&e++}return e}async removeToolCallsExceptLast(e){const t=this.contextTokensUsed;let n=0;const r=[];for(let e=0;e<this.messages.length;e++){const t=this.messages[e].message.content;if(Array.isArray(t))for(let n=0;n<t.length;n++)"tool_use"===t[n].type&&r.push({id:t[n].id,msgIndex:e,blockIndex:n})}const s=new Set(r.slice(-e).map(e=>e.id)),o=new Set(r.filter(e=>!s.has(e.id)).map(e=>e.id)),i=[];for(const e of this.messages){const t=e.message.role,r=e.message.content;if("user"===t&&Array.isArray(r)){const t=r.filter(e=>"tool_result"!==e.type||!o.has(e.tool_use_id)||(n+=estimateTokens({role:"user",content:[e]}),!1));if(0===t.length)continue;i.push({...e,message:{...e.message,content:t}});continue}if("assistant"===t&&Array.isArray(r)){const t=r.filter(e=>"tool_use"!==e.type||!o.has(e.id)||(n+=estimateTokens({role:"assistant",content:[e]}),!1));if(0===t.length)continue;i.push({...e,message:{...e.message,content:t}});continue}i.push(e)}this.messages=i,await this.sessionManager.saveMessages(this.messages);const a=Math.max(0,t-n);return this.contextTokensUsed=a,this.callbacks.onContextUsageUpdate?.({current:a,limit:xE}),{toolsRemoved:o.size,tokensSaved:n}}async summarizeAndCompact(){try{const{messagesToSummarize:e,messagesToKeep:t}=this.selectMessagesForSummarization();if(e.length<5)return bC.debug(`Not enough messages to summarize (${e.length}), falling back to Tier 2`),void await this.removeToolCallsExceptLast(At.TIER_2_KEEP_COUNT);bC.debug(`Summarizing ${e.length} older messages, keeping ${t.length} recent messages`);const n=e.map(e=>e.message),r=await this.compactAgent.compactMessages({messages:n});bC.debug(`Summarization complete: ${r.summary.length} chars, used ${r.tokensUsed.input}/${r.tokensUsed.output} tokens`);const s=this.createMessageWithMeta({role:"user",content:[{type:"text",text:`This is an auto-compacted summary of the earlier conversation that ran out of context.\n\n${r.summary}`}]},{isSummary:!0}),o=this.contextTokensUsed,i=e.reduce((e,t)=>e+estimateTokens(t.message),0);this.messages=[s,...t],await this.sessionManager.saveMessages(this.messages);const a=estimateTokens(s.message),l=Math.max(0,o-i+a);this.contextTokensUsed=l,this.callbacks.onContextUsageUpdate?.({current:l,limit:xE}),bC.debug(`Tier 3 summarization complete: reduced from ${o} to ~${l} tokens`)}catch(e){bC.debug(`Summarization failed, falling back to tool removal: ${e}`),await this.removeToolCallsExceptLast(At.TIER_2_KEEP_COUNT)}}selectMessagesForSummarization(){const e=At.KEEP_RECENT_TOKENS;let t=0,n=this.messages.length;for(let r=this.messages.length-1;r>=0;r--){const s=this.messages[r],o=estimateTokens(s.message);if(t+o>e){n=r+1;break}t+=o;const i=s.message.content;Array.isArray(i)&&i.some(e=>"tool_result"===e.type)}n=Math.min(n,this.messages.length-3),n=Math.max(0,n);let r=0;this.messages[0]?.meta?.isSummary&&(r=1);for(let e=r;e<n;e++){const t=this.messages[e].message.content;if(Array.isArray(t)&&t.some(e=>"image"===e.type)){n=e;break}}for(;n>r&&"user"===this.messages[n].message.role;)n--;return{messagesToSummarize:this.messages.slice(r,n),messagesToKeep:this.messages.slice(n),keepStartIndex:n}}getCheckpointManager(){return this.checkpointManager}listCheckpoints(){return this.checkpointManager.listCheckpoints()}hasCheckpoints(){return this.checkpointManager.hasCheckpoints()}async restoreToCheckpoint(e){const{messageId:t,mode:n}=e;this.checkpointManager.setSessionStore({sessionStore:this.createSessionStoreAdapter()});const r=this.sessionManager.getMessageIndexById({messageId:t,messages:this.messages});let s=0;if(-1!==r&&("conversation"===n||"both"===n))for(let e=r;e<this.messages.length;e++)s+=estimateTokens(this.messages[e].message);const o=await this.checkpointManager.restore({messageId:t,mode:n});return!o.success||"conversation"!==n&&"both"!==n||(this.contextTokensUsed=Math.max(0,this.contextTokensUsed-s),this.callbacks.onContextUsageUpdate&&this.callbacks.onContextUsageUpdate({current:this.contextTokensUsed,limit:xE})),o}async loadCheckpoints(){this.checkpointManager.setSessionStore({sessionStore:this.createSessionStoreAdapter()}),await this.checkpointManager.loadSnapshots()}isCheckpointingPaused(){return this.checkpointManager.isCheckpointingPaused()}getCheckpointPausedReason(){return this.checkpointManager.getPausedReason()}}}}),PC=__esm({"src/utils/clear-console.ts"(){Nt(),kC=__name(()=>process.stdout.write("win32"===process.platform?"[2J[0f":"[2J[3J[H"),"clearConsole")}});async function getAuthenticatedEntity(){const e=getApiBaseUrl(),t=new Vb({baseUrl:e});return await t.get({endpoint:St.ALPHA.WHOAMI})}var AC=__esm({"src/utils/get-entity.ts"(){Nt(),ts(),bE(),Ot(),__name(getAuthenticatedEntity,"getAuthenticatedEntity")}}),xC={};async function getBillingLink({billingLink:e,setBillingLink:t}){if(e)return e;try{const e=await getAuthKey();if(!e)return;const n=await getAuthenticatedEntity();if(e.startsWith("user_")){const e="https://commandcode.ai/settings/billing";return t(e),e}if(n.org){const e=`https://commandcode.ai/${n.org.login}/settings/billing`;return t(e),e}}catch{return"https://commandcode.ai/settings/billing"}}async function handleSubmit({role:e,input:t,images:n,ideContext:r,displayMessage:s,feed:o,setFeed:i,isCmdCodeBusy:a,setIsCmdCodeBusy:l,setQueuedMessages:u,setStatus:d,setInteractionTokens:m,updateStatus:p,setUpdateStatus:g,billingLink:h,setBillingLink:f,contextEngineRef:y,isSubmittingRef:w,setInput:S,setStaticKey:b,executeBash:E}){if(!t.length)return;if(p&&g(null),m(0),"bash"===e){if(w.current)return;w.current=!0;const e=Ro(t);return i([...o,e]),S(""),await E(t,e=>{i(e)},()=>{kC(),b(e=>e+1)}),void(w.current=!1)}if(a)return u(e=>[...e,s??t]),void S("");if(w.current)return;w.current=!0,l(!0),d(Wo()),S("");let C=!1;try{y.current&&await y.current.sendMessage(t,n,r,s)}catch(e){if("Interrupted by user"===e?.message||e?.message?.toLowerCase().includes("interrupt")||e?.message?.toLowerCase().includes("abort")||"InterruptedError"===e?.name||"AbortError"===e?.name||"ECONNABORTED"===e?.code)return void(C=!0);if(C=!0,"Insufficient credits"===e.message){d("Insufficient credits");const e=`You have insufficient credits to make this request. Please purchase more credits to continue using Command Code here: ${await getBillingLink({billingLink:h,setBillingLink:f})}`;return void i(t=>[...t,Lo(e)])}if(e.message.startsWith("Error:"))return d("Error"),void i(t=>[...t,Lo(e.message)]);d("Error");const t=e.message||"An unexpected error occurred";i(e=>[...e,Lo(t)])}finally{l(!1),C||d("Ready..."),w.current=!1}}__export(xC,{getBillingLink:()=>getBillingLink,handleSubmit:()=>handleSubmit});var IC=__esm({"src/tui/actions/submit.ts"(){Nt(),Jo(),Qs(),AC(),Ot(),PC(),__name(getBillingLink,"getBillingLink"),__name(handleSubmit,"handleSubmit")}});Nt(),Nt();var NC=process.argv.includes("-d")||process.argv.includes("--debug");NC&&(process.env.DEBUG="true"),NC||(process.removeAllListeners("warning"),process.on("warning",()=>{})),Nt(),Nt(),Vr();var{red:RC,yellow:$C,dim:LC}=Be,MC=__name(e=>{const{heading:t="ERROR: ",error:n,displayError:r=!0,exit:s=!0,skipTelemetry:o=!1}=e;if(n){if(o||trackError({error:sanitizeErrorForTelemetry({error:n,label:"cli_error"}),context:{component:Br.CLI_ERROR_HANDLER,heading:t}}),console.log(),r){if(console.log(`${Ue.error} ${RC(t)}`),console.log(`${Ue.error} ${RC("ERROR →")} ${n.name}`),console.log(`${Ue.info} ${RC("REASON →")} ${n.message}`),console.log(`${Ue.info} ${RC("ERROR STACK ↓ \n")} ${n.stack}\n`),isTelemetryInitialized()){const e=getSupportId();console.log(`${Ue.info} ${LC(`Request ID: ${e}`)}`),console.log(`${LC(" Share this ID with support to help debug your issue.")}\n`)}}else console.log(`${Ue.warning} ${$C(t)}\n`);if(!s)return!1;process.exit(0)}},"handleError");function handleUnhandledErrors(){process.on("unhandledRejection",e=>{const t=e instanceof Error?e:new Error(String(e));trackError({error:sanitizeErrorForTelemetry({error:t,label:"unhandled_rejection"}),context:{component:Br.UNHANDLED_REJECTION,heading:"Unhandled Promise Rejection"}}),MC({heading:ze`CRITICAL: Unhandled Promise Rejection!
|
|
252
252
|
This is an unexpected error. Please file a bug report at https://github.com/CommandCodeAI/command-code/issues/new`,error:t,skipTelemetry:!0,exit:!1}),shutdownTelemetry().finally(()=>{process.exit(1)})}),process.on("uncaughtException",e=>{trackError({error:sanitizeErrorForTelemetry({error:e,label:"uncaught_exception"}),context:{component:Br.UNCAUGHT_EXCEPTION,heading:"Uncaught Exception"}}),MC({heading:ze`CRITICAL: Uncaught Exception!
|
|
253
|
-
This is an unexpected error. Please file a bug report at https://github.com/CommandCodeAI/command-code/issues/new`,error:e,skipTelemetry:!0,exit:!1}),shutdownTelemetry().finally(()=>{process.exit(1)})})}Vr(),__name(handleUnhandledErrors,"handleUnhandledErrors"),Nt(),Nt(),Ot(),Qs(),Nt(),Ot();var OC="\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n░░░░░███████░███████░███████████░███████████░███████░████████░░░░████░░░░░\n░░░░░███░███░██░░███░███░███░███░███░███░███░███░███░███░░███░███████░░░░░\n░░░░░███░░░░░██░░███░███░███░███░███░███░███░███████░███░░███░███░███░░░░░\n░░░░░███░███░██░░███░███░███░███░███░███░███░███████░███░░███░███░███░░░░░\n░░░░░███████░███████░███░███░███░███░███░███░███░███░███░░███░███████░░░░░\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n",DC="\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n░░░███████░███████████░░░░████░░░\n░░░███░███░███░███░███░███████░░░\n░░░███░░░░░███░███░███░███░███░░░\n░░░███░███░███░███░███░███░███░░░\n░░░███████░███░███░███░███████░░░\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n";function getMaxLineWidth(e){return Math.max(...e.split("\n").map(e=>e.length))}__name(getMaxLineWidth,"getMaxLineWidth");var qC=getMaxLineWidth(OC),FC=getMaxLineWidth(DC),jC=qC+1,zC=FC+1;function getTerminalWidth(){return process.stdout.columns||80}__name(getTerminalWidth,"getTerminalWidth");var BC=__name(e=>{const t=e??getTerminalWidth();return t>=jC?OC:t>=zC?DC:UC},"getResponsiveCommandLogo"),UC="⌘ CMD\n";rr();var WC=__name(e=>{const t=e.trim().toLowerCase();return""===t||"y"===t||"yes"===t},"isAffirmative"),QC=__name(e=>{const t=__name(e=>({r:parseInt(e.slice(1,3),16),g:parseInt(e.slice(3,5),16),b:parseInt(e.slice(5,7),16)}),"hexToRgb"),n=t(Zn.START),r=t(Zn.END);return e.split("\n").map(e=>0===e.length?e:e.split("").map((t,s)=>{const o=e.length>1?s/(e.length-1):0,i=Math.round(n.r+(r.r-n.r)*o),a=Math.round(n.g+(r.g-n.g)*o),l=Math.round(n.b+(r.b-n.b)*o);return Be.rgb(i,a,l)(t)}).join("")).join("\n")},"applyViceGradient"),GC=__name(e=>{console.log(QC(BC())),console.log(""),console.log(`${be.warning} Authentication required to use Command Code.`),console.log("")},"showUnauthBanner"),HC=__name(async e=>{const t=We.createInterface({input:process.stdin,output:process.stdout});try{const n=await t.question(e);return t.close(),{answer:n,cancelled:!1}}catch{return t.close(),{answer:"",cancelled:!0}}},"promptYesNo"),VC=__name(async()=>{try{return await runLogin(),!!await getAuthKey()||(console.log(""),console.log(`${be.cross} Authentication failed. Please try again with: cmd login`),!1)}catch{return!1}},"attemptLogin"),KC=__name(()=>{console.log(""),console.log(`${be.info} You can authenticate later by running: cmd login`)},"showDeferredMessage"),YC=__name(()=>{console.log(""),console.log(`${be.info} Authentication cancelled. You can authenticate later with: cmd login`)},"showCancelledMessage");async function checkAuthAndPromptLogin(){try{if(await getAuthKey())return!0;GC(Mt());const{answer:e,cancelled:t}=await HC(`Would you like to sign in now? ${Be.dim("(y/n)")}: `);return t?(YC(),!1):WC(e)?(console.log(""),VC()):(KC(),!1)}catch(e){return console.error("Error checking authentication:",e),!1}}function getShellPathAndName(){const e=process.env.SHELL||"/bin/bash",t=e.split("/").pop()?.toLowerCase()||"bash";return{path:e,name:t}}function getShellType(e){return e.includes("bash")?"bash":e.includes("zsh")?"zsh":e.includes("fish")?"fish":"unknown"}function detectUserShell(){const{path:e,name:t}=getShellPathAndName();return"win32"===process.platform?{type:"unknown",path:e}:{type:getShellType(t),path:e}}__name(checkAuthAndPromptLogin,"checkAuthAndPromptLogin"),Nt(),Nt(),Nt(),Nt(),jr(),Nt(),__name(getShellPathAndName,"getShellPathAndName"),__name(getShellType,"getShellType"),__name(detectUserShell,"detectUserShell");var JC=["no job control","cannot set terminal process group"],XC=null;function getShellInfo(){return XC||(XC=detectUserShell()),XC}__name(getShellInfo,"getShellInfo");var ZC=__name(async(e,t={})=>{const{timeout:n=3e4,cwd:r=process.cwd(),env:s=process.env}=t;return new Promise(t=>{let o=!1;const i=__name(e=>{o||(o=!0,t(e))},"doResolve"),a=getShellInfo(),l="bash"===a.type||"zsh"===a.type,u=l?a.path:"/bin/bash",d=N(u,l?["-i","-c",e]:["-c",e],{cwd:r,env:{...s},stdio:["pipe","pipe","pipe"],detached:"win32"!==process.platform});d.stdin?.end();let m="",p="",g=null;n>0&&(g=setTimeout(()=>{if("win32"!==process.platform&&d.pid)try{process.kill(-d.pid,"SIGTERM")}catch{}d.kill("SIGTERM"),i({stdout:m,stderr:p+(p?"\n":"")+"[Command timed out]",exitCode:124,command:e})},n)),d.stdout?.on("data",t=>{try{const n=t.toString();if(m.length+n.length>Mr){if("win32"!==process.platform&&d.pid)try{process.kill(-d.pid,"SIGTERM")}catch{}return d.kill("SIGTERM"),void i({stdout:m,stderr:"Output too large (max 25,000 tokens allowed). Try limiting command output or redirecting to a file.",exitCode:1,command:e})}m+=n}catch(e){p+=`\n[Error processing stdout: ${e instanceof Error?e.message:"Unknown error"}]`,d.kill("SIGTERM")}}),d.stderr?.on("data",e=>{try{const t=e.toString();if(p.length+t.length>Or)return void(p+="\n[Error output truncated: too large]");p+=t}catch(e){p+=`\n[Error processing stderr: ${e instanceof Error?e.message:"Unknown error"}]`}}),d.on("close",t=>{g&&clearTimeout(g);const n=l?p.split("\n").filter(e=>!JC.some(t=>e.includes(t))).join("\n"):p;i({stdout:m.trim(),stderr:n.trim(),exitCode:t??0,command:e})}),d.on("error",t=>{g&&clearTimeout(g),i({stdout:m,stderr:p+`\n[Error: ${t.message}]`,exitCode:1,command:e})})})},"executeBashCommand"),ev=__name(e=>{let t="";return e.stdout&&(t+=e.stdout),e.stderr&&(t&&(t+="\n"),t+=e.stderr),0===e.exitCode||e.stderr||(t&&(t+="\n"),t+=`[Process exited with code ${e.exitCode}]`),t||"(No output)"},"formatBashOutput");Jo();var tv=__name(()=>{const[e,t]=W({isExecuting:!1,currentCommand:null});return{executeBash:V(async(e,n,r)=>{t({isExecuting:!0,currentCommand:e});try{const t=await ZC(e,{timeout:3e4,cwd:process.cwd()}),s=ev(t);n(t=>{const n=[...t];for(let t=n.length-1;t>=0;t--){const r=n[t];if("bash"===r.role&&"command"in r&&r.command===e&&!r.output){n[t]=Fo(r,s);break}}return n}),r()}catch(t){const s=t instanceof Error?t.message:"Unknown error occurred";n(t=>{const n=[...t];for(let t=n.length-1;t>=0;t--){const r=n[t];if("bash"===r.role&&"command"in r&&r.command===e&&!r.output){n[t]=Fo(r,`Error: ${s}`);break}}return n}),r()}finally{t({isExecuting:!1,currentCommand:null})}},[]),executionState:e}},"useBashExecution");function useUiOverlays(){const[e,t]=W(!1),[n,r]=W(!1),[s,o]=W(!1),[i,a]=W(!1),[l,u]=W(!1),[d,m]=W(!1),[p,g]=W(!1),[h,f]=W(!1),[y,w]=W(!1),[S,b]=W(!1),[E,C]=W(!1),[v,T]=W(!1),[k,_]=W(!1),[P,A]=W(0),[x,I]=W("off");return{showFileList:e,setShowFileList:t,showAgentsConfig:n,setShowAgentsConfig:r,showTasteConfig:s,setShowTasteConfig:o,showSkillsConfig:i,setShowSkillsConfig:a,showProviderSelector:l,setShowProviderSelector:u,showModelSelector:d,setShowModelSelector:m,showMemorySelector:p,setShowMemorySelector:g,showMcpManager:h,setShowMcpManager:f,showLearningFeed:y,setShowLearningFeed:w,showSessionSelector:S,setShowSessionSelector:b,showAddDirModal:E,setShowAddDirModal:C,showRewindSelector:v,setShowRewindSelector:T,showLoginOverlay:k,setShowLoginOverlay:_,staticKey:P,setStaticKey:A,transcriptMode:x,setTranscriptMode:I,expandedToolOutput:"off"!==x}}function useFeed(){const[e,t]=W([]),[n,r]=W([]),[s,o]=W([]),[i,a]=W(!1),l=Q([]);return G(()=>{l.current=s},[s]),{feed:e,setFeed:t,liveAgents:n,setLiveAgents:r,queuedMessages:s,setQueuedMessages:o,isCmdCodeBusy:i,setIsCmdCodeBusy:a,queuedMessagesRef:l}}function useSession(){const[e,t]=W(crypto.randomUUID()),[n,r]=W(!1);return{sessionId:e,setSessionId:t,sessionLoaded:n,setSessionLoaded:r,sessionLoadIdRef:Q(null)}}function useStatus(e){const[t,n]=W("Ready..."),r=Q(!1),[s,o]=W(""),i=Q(null),[a,l]=W(null),u=Q(a),[d,m]=W(null),[p,g]=W(!1),[h,f]=W(""),[y,w]=W(null),[S,b]=W(0),[E,C]=W(null),[v,T]=W(!1),[k,_]=W(e??null);G(()=>{u.current=a},[a]),G(()=>{if(k){const e=setTimeout(()=>{_(null)},3e4);return()=>clearTimeout(e)}},[k]);const P=__name(e=>{i.current&&clearTimeout(i.current),o(e),i.current=setTimeout(()=>{o(""),i.current=null},5e3)},"showHintMessage");return{status:t,setStatus:n,pinnedStatusRef:r,hintMessage:s,setHintMessage:o,hintTimerRef:i,shareInfo:a,setShareInfo:l,shareInfoRef:u,billingLink:d,setBillingLink:m,showShareNotification:p,setShowShareNotification:g,unshareNotificationMessage:h,setUnshareNotificationMessage:f,retryAttempt:y,setRetryAttempt:w,interactionTokens:S,setInteractionTokens:b,contextUsage:E,setContextUsage:C,tasteLearningEnabled:v,setTasteLearningEnabled:T,updateStatus:k,setUpdateStatus:_,showHintMessage:P}}function useAuth(){const[e,t]=W(null),[n,r]=W(getConfiguredModel()),[s,o]=W(!1),[i,a]=W(null),[l,u]=W(!1);return{currentProvider:e,setCurrentProvider:t,currentModel:n,setCurrentModel:r,isOAuthMode:s,setIsOAuthMode:o,authComponentInfo:i,setAuthComponentInfo:a,showProviderNotification:l,setShowProviderNotification:u,providerNotificationTimer:Q(null),modelNotificationTimer:Q(null)}}Nt(),__name(useUiOverlays,"useUiOverlays"),Nt(),__name(useFeed,"useFeed"),Nt(),__name(useSession,"useSession"),Nt(),__name(useStatus,"useStatus"),Nt(),nr(),__name(useAuth,"useAuth"),Nt(),Nt(),Nt(),Ot();var nv=class extends Re{static{__name(this,"PermissionsService")}config;configPath;projectRoot;constructor(e,n){super(),this.projectRoot=e,this.configPath=n||t.join(e,".commandcode","settings.local.json"),this.config=this.getDefaultConfig(),this.loadConfig()}getDefaultConfig(){return{enabled:!0,defaultScope:"session",autoApprove:{create:!1,edit:!1,delete:!1,execute:!1,shellCommands:!1},trustedPaths:[],trustedCommands:[],sessionPermissions:new Map,projectPermissions:new Map,sessionShellPermissions:new Map,projectShellPermissions:new Map}}async loadConfig(){try{const e=await L.readFile(this.configPath,"utf-8"),t=JSON.parse(e);t.permissions&&("acceptEdits"===t.permissions.defaultMode&&(this.config.autoApprove.create=!0,this.config.autoApprove.edit=!0,this.config.autoApprove.delete=!0,this.config.autoApprove.execute=!0),t.permissions.autoApprove&&(void 0!==t.permissions.autoApprove.create&&(this.config.autoApprove.create=t.permissions.autoApprove.create),void 0!==t.permissions.autoApprove.update&&(this.config.autoApprove.edit=t.permissions.autoApprove.update),void 0!==t.permissions.autoApprove.delete&&(this.config.autoApprove.delete=t.permissions.autoApprove.delete)),t.permissions.allow&&t.permissions.allow.forEach(e=>{if(e.startsWith("Bash(")&&e.endsWith(")")){const t=e.slice(5,-1);this.config.trustedCommands.push(t)}}))}catch(e){}}async requestPermission(e){if(!this.config.enabled)return{allowed:!0};const t=e.action;return this.config.autoApprove[e.action]||this.isTrustedPath(e.filePath)?{allowed:!0}:this.config.sessionPermissions.has(t)?{allowed:this.config.sessionPermissions.get(t)||!1,scope:"session"}:new Promise(t=>{this.emit("permission-request",e,n=>{this.handleUserChoice(e,n).then(t)})})}async handleUserChoice(e,t){const n=e.action,r="no"!==t.value;if(r&&t.scope)switch(t.scope){case"session":this.config.sessionPermissions.set(n,!0);break;case"project":await this.createCommandCodeSettings(),this.config.autoApprove.create=!0,this.config.autoApprove.edit=!0,this.config.autoApprove.delete=!0,this.config.autoApprove.execute=!0}return{allowed:r,scope:t.scope,dontAskAgain:"yes-project"===t.value}}getFileKey(e){const n=t.relative(this.projectRoot,e.filePath);return`${e.action}:${n}`}isTrustedPath(e){const n=t.relative(this.projectRoot,e);return this.config.trustedPaths.some(t=>n.startsWith(t)||e.startsWith(t))}async requestShellPermission(e){if(!this.config.enabled)return{allowed:!0};const t=this.getCommandKey(e);return this.config.autoApprove.shellCommands||this.isTrustedCommand(e.command)?{allowed:!0}:this.config.projectShellPermissions.has(t)?{allowed:this.config.projectShellPermissions.get(t)||!1,scope:"project"}:this.config.sessionShellPermissions.has(t)?{allowed:this.config.sessionShellPermissions.get(t)||!1,scope:"session"}:new Promise(t=>{this.emit("shell-permission-request",e,n=>{this.handleShellUserChoice(e,n).then(t)})})}async handleShellUserChoice(e,t){const n=this.getCommandKey(e),r="no"!==t.value;if(r&&t.scope)switch(t.scope){case"session":this.config.sessionShellPermissions.set(n,!0);break;case"project":await this.addCommandToSettings(e.command),this.config.projectShellPermissions.set(n,!0)}return{allowed:r,scope:t.scope,dontAskAgain:"yes-project"===t.value}}getCommandKey(e){return`${e.command.split(" ")[0]}:${e.args?Array.isArray(e.args)?e.args.join(" "):e.args:""}`.trim()}isTrustedCommand(e){return!!["ls","ls -la","ls -l","ls -R","pwd","grep","tree","find","stat","file","dirname","basename","grep","git status","git log","git diff","git branch"].some(t=>e===t||!!e.startsWith(t+" "))||this.config.trustedCommands.some(t=>{if(t===e)return!0;if(t.endsWith(":*")){const n=t.slice(0,-2);return e===n||e.startsWith(n+" ")}return e.startsWith(t)})}clearSessionPermissions(){this.config.sessionPermissions.clear(),this.config.sessionShellPermissions.clear()}clearProjectPermissions(){this.config.projectPermissions.clear(),this.config.projectShellPermissions.clear()}setAutoApprove(e,t){this.config.autoApprove[e]=t}addTrustedPath(e){this.config.trustedPaths.includes(e)||this.config.trustedPaths.push(e)}removeTrustedPath(e){const t=this.config.trustedPaths.indexOf(e);t>-1&&this.config.trustedPaths.splice(t,1)}addTrustedCommand(e){this.config.trustedCommands.includes(e)||this.config.trustedCommands.push(e)}removeTrustedCommand(e){const t=this.config.trustedCommands.indexOf(e);t>-1&&this.config.trustedCommands.splice(t,1)}setEnabled(e){this.config.enabled=e}getConfig(){return{...this.config}}async createCommandCodeSettings(){const e=t.join(this.projectRoot,".commandcode"),n=t.join(e,"settings.local.json");try{await L.mkdir(e,{recursive:!0});let t={permissions:{allow:[],deny:[],defaultMode:"acceptEdits"}};try{const e=await L.readFile(n,"utf-8"),r=JSON.parse(e);r.permissions&&r.permissions.allow&&(t.permissions.allow=[...new Set([...r.permissions.allow,...t.permissions.allow])]),r.permissions&&r.permissions.deny&&(t.permissions.deny=r.permissions.deny)}catch(e){}await L.writeFile(n,JSON.stringify(t,null,2),"utf-8")}catch(e){console.error("Failed to create .commandcode settings:",e)}}async addCommandToSettings(e){const n=t.join(this.projectRoot,".commandcode"),r=t.join(n,"settings.local.json"),s=`Bash(${e.split(" ")[0]}:*)`;try{let e;await L.mkdir(n,{recursive:!0});try{const t=await L.readFile(r,"utf-8");e=JSON.parse(t)}catch(t){e={permissions:{allow:[],deny:[],defaultMode:"ask"}}}e.permissions||(e.permissions={allow:[],deny:[],defaultMode:"ask"}),e.permissions.allow||(e.permissions.allow=[]),e.permissions.allow.includes(s)||e.permissions.allow.push(s),await L.writeFile(r,JSON.stringify(e,null,2),"utf-8")}catch(e){console.error("Failed to add command to .commandcode settings:",e)}}},rv=__name((e={})=>{const[t,n]=W(null),[r,s]=W(null),[o,i]=W(!1);return G(()=>{const t=e.projectRoot||process.cwd(),r=new nv(t);return r.on("permission-request",(t,n)=>{s(t),i(!0),e.onPermissionRequest&&e.onPermissionRequest(t),r._pendingCallback=n}),r.on("shell-permission-request",(t,n)=>{s(t),i(!0),e.onShellPermissionRequest&&e.onShellPermissionRequest(t),r._pendingShellCallback=n}),n(r),()=>{r.removeAllListeners()}},[e.projectRoot]),{requestPermission:V(async n=>{if(!t)return{allowed:!0};const r=await t.requestPermission(n);return e.onPermissionResponse&&e.onPermissionResponse(r),r},[t,e.onPermissionResponse]),requestShellPermission:V(async n=>{if(!t)return{allowed:!0};const r=await t.requestShellPermission(n);return e.onPermissionResponse&&e.onPermissionResponse(r),r},[t,e.onPermissionResponse]),respondToPrompt:V(e=>{if(t)if(t._pendingShellCallback){const n=t._pendingShellCallback;t._pendingShellCallback=null,n(e),s(null),i(!1)}else if(t._pendingCallback){const n=t._pendingCallback;t._pendingCallback=null,n(e),s(null),i(!1)}},[t]),clearSessionPermissions:V(()=>{t?.clearSessionPermissions()},[t]),clearProjectPermissions:V(()=>{t?.clearProjectPermissions()},[t]),setAutoApprove:V((e,n)=>{t?.setAutoApprove(e,n)},[t]),setEnabled:V(e=>{t?.setEnabled(e)},[t]),currentRequest:r,isPrompting:o,service:t}},"usePermissions");function applyAutoAcceptMode(e){const{enabled:t,service:n}=e,r="auto-accept"===("boolean"==typeof t?t?"auto-accept":"standard":t),s=["create","edit","delete","execute","shellCommands"];for(const e of s)n.setAutoApprove(e,r)}function usePermissionMode({initialPermissionMode:e,dangerouslySkipPermissions:t=!1,setPendingPermission:n,setStatus:r,contextEngineRef:s}){const[o,i]=W(()=>e||(t?"auto-accept":"standard")),a=Q(o);G(()=>{a.current=o},[o]);const{requestShellPermission:l,service:u,respondToPrompt:d,clearSessionPermissions:m,setEnabled:p}=rv({projectRoot:process.cwd(),onPermissionRequest:__name(e=>{n({toolName:"edit"===e.action?"edit_file":"create"===e.action?"write_file":"delete"===e.action?"delete_file":"edit_file",params:e,resolve:__name(e=>{},"resolve")}),s.current&&r("Waiting for file edit permission...")},"onPermissionRequest"),onShellPermissionRequest:__name(e=>{n({toolName:"shell_command",params:e,resolve:__name(e=>{},"resolve")}),s.current&&r("Waiting for shell command permission...")},"onShellPermissionRequest"),onPermissionResponse:__name(e=>{e.allowed?r("Permission granted"):r("Permission denied")},"onPermissionResponse")});return G(()=>{u&&applyAutoAcceptMode({enabled:o,service:u})},[o,u]),{permissionMode:o,setPermissionMode:i,permissionModeRef:a,permissionsService:u,respondToPrompt:d,clearSessionPermissions:m}}function usePendingOps(){const[e,t]=W(null),[n,r]=W(null);return{pendingPermission:e,setPendingPermission:t,pendingQuestion:n,setPendingQuestion:r}}function useOnboarding(){const[e,t]=W(!1),[n,r]=W(!1),[s,o]=W(!0),[i,a]=W(!1),[l,u]=W(!1),[d,m]=W(null),[p,g]=W(!1);return{showTrustPrompt:e,setShowTrustPrompt:t,projectTrusted:n,setProjectTrusted:r,checkingProject:s,setCheckingProject:o,showTasteOnboarding:i,setShowTasteOnboarding:a,onboardingComplete:l,setOnboardingComplete:u,tasteOnboardingEntryId:d,setTasteOnboardingEntryId:m,autoLearnTaste:p,setAutoLearnTaste:g,tasteOnboardingCheckedRef:Q(!1)}}function useExit(){const[e,t]=W(!1),[n,r]=W(null),s=Q(null),o=Q(0),i=Q(null),a=V(()=>{s.current=null,r(null),i.current&&(clearTimeout(i.current),i.current=null)},[]);return{shouldExit:e,setShouldExit:t,pendingExitKey:n,setPendingExitKey:r,pendingExitKeyRef:s,lastExitKeyTimeRef:o,exitConfirmationTimeoutRef:i,resetPendingExitKey:a}}function createKillShellPermissionRequest(e){const t=e.port?`port ${e.port}`:`PID ${e.pid}`;return{command:"kill",args:t,description:`Terminate process on ${t}`}}function buildShellPermissionRequest(e,t){const n=e.args,r=Array.isArray(n)?n.join(" "):"string"==typeof n?n:"";return{command:"string"==typeof e.command?e.command:"",args:"string"==typeof n?n:Array.isArray(n)?n.join(" "):void 0,workingDirectory:"string"==typeof e.directory?e.directory:void 0,description:t??`Execute shell command: ${String(e.command??"")} ${r}`}}function getFileAction(e){return e.includes("write")?"create":e.includes("delete")?"delete":"edit"}function buildFilePermissionRequest(e,t){const n="edit_file"===e?t.oldValue:void 0,r="edit_file"===e?t.newValue:void 0;return{action:getFileAction(e),filePath:String(t.filePath??t.file_path??t.path??t.absolutePath??"unknown"),description:"string"==typeof t.description?t.description:`${e} operation`,oldContent:"string"==typeof n?n:void 0,newContent:"string"==typeof r?r:void 0}}function useContextEngine({sessionId:e,sessionLoaded:t,showSessionSelector:n,projectTrusted:r,setFeed:s,setLiveAgents:o,setQueuedMessages:i,queuedMessagesRef:a,setStatus:l,pinnedStatusRef:u,setRetryAttempt:d,setInteractionTokens:m,setContextUsage:p,setCurrentProvider:g,shareInfoRef:h,permissionsService:f,permissionModeRef:y,setPendingQuestion:w,contextEngineRef:S}){const b=V(t=>({onFeedUpdate:__name(e=>{const t=!0===e.metadata?.isAgent,n=e.metadata?.status;if(!t||"running"!==n)return t&&n&&"running"!==n?(o(t=>t.filter(t=>t.id!==e.id)),void s(t=>[...t,e])):void s(t=>[...t,e]);o(t=>{const n=t.findIndex(t=>t.id===e.id);if(-1!==n){const r=[...t];return r[n]=e,r}return[...t,e]})},"onFeedUpdate"),getQueuedMessages:__name(()=>{const e=[...a.current];return a.current=[],i([]),e},"getQueuedMessages"),onInteractionTokenUpdate:__name(e=>{m(e)},"onInteractionTokenUpdate"),onContextUsageUpdate:__name(e=>{p(e)},"onContextUsageUpdate"),onRetryUpdate:__name(e=>{d(e)},"onRetryUpdate"),onProviderChange:__name(e=>{g(e)},"onProviderChange"),onStatusUpdate:__name(e=>{u.current=!0,l(e)},"onStatusUpdate"),onPermissionRequest:__name(async(e,t,n)=>{const r=t??{};if(!f)return!0;if("shell_command"===e){const e=buildShellPermissionRequest(r,n);return(await f.requestShellPermission(e)).allowed}if("kill_shell"===e){const e=createKillShellPermissionRequest(r);return(await f.requestShellPermission(e)).allowed}const s=buildFilePermissionRequest(e,r);return(await f.requestPermission(s)).allowed},"onPermissionRequest"),onQuestionRequest:__name(async e=>new Promise((t,n)=>{w({params:e,resolve:t,reject:n}),l("Waiting for your response...")}),"onQuestionRequest"),getShareInfo:__name(()=>{const n=h.current;return n?{sessionId:t??e,secret:n.secret}:null},"getShareInfo"),getPermissionMode:__name(()=>y.current,"getPermissionMode")}),[f,e]);return G(()=>{S.current||!r||n||t||(S.current=new CC(b(),e))},[e,n,t,r,b,S]),{createContextEngineCallbacks:b}}Nt(),__name(applyAutoAcceptMode,"applyAutoAcceptMode"),__name(usePermissionMode,"usePermissionMode"),Nt(),__name(usePendingOps,"usePendingOps"),Nt(),__name(useOnboarding,"useOnboarding"),Nt(),__name(useExit,"useExit"),Nt(),_C(),__name(createKillShellPermissionRequest,"createKillShellPermissionRequest"),__name(buildShellPermissionRequest,"buildShellPermissionRequest"),__name(getFileAction,"getFileAction"),__name(buildFilePermissionRequest,"buildFilePermissionRequest"),__name(useContextEngine,"useContextEngine"),Nt(),Nt(),Nt(),$n();var sv=class{static{__name(this,"PromptHistoryManager")}buffer=[];filePath;initialized=!1;writeQueue=[];flushTimer=null;writeFailures=0;isFlushing=!1;cleanupPromise=null;constructor(){this.filePath=e.join(h.homedir(),".commandcode","history.jsonl")}async init(){if(!this.initialized){try{const e=(await $.readFile(this.filePath,"utf-8")).trim().split("\n").filter(Boolean).slice(-100);let t=0;this.buffer=e.map(e=>{try{return JSON.parse(e).p}catch{return t++,""}}).filter(Boolean),t>0&&dlog(`[PromptHistory] Skipped ${t} corrupted entries`)}catch(e){e instanceof Error&&"code"in e&&"ENOENT"===e.code||dlog(`[PromptHistory] Failed to load history: ${e instanceof Error?e.message:String(e)}`),this.buffer=[]}this.initialized=!0}}add(e){if(!e||0===e.trim().length)return;const t=e.length>500?e.slice(0,500)+"...":e;this.buffer.push(t),this.buffer.length>500&&(this.buffer=this.buffer.slice(-500)),this.writeQueue.push({p:t,t:Date.now()}),this.scheduleFlush()}getAt(e){if(e<0||e>=this.buffer.length)return;const t=this.buffer.length-1-e;return this.buffer[t]}count(){return this.buffer.length}getAll(){return[...this.buffer]}isInitialized(){return this.initialized}scheduleFlush(){this.flushTimer||(this.flushTimer=setTimeout(async()=>{this.flushTimer=null,await this.flush()},100))}async flush(){if(0===this.writeQueue.length)return;if(this.isFlushing)return void this.scheduleFlush();if(this.writeFailures>=3)return void(this.writeQueue=[]);this.isFlushing=!0;const t=this.writeQueue;this.writeQueue=[];try{const n=e.dirname(this.filePath);await $.mkdir(n,{recursive:!0});const r=t.map(e=>JSON.stringify(e)).join("\n")+"\n";await $.appendFile(this.filePath,r),this.writeFailures=0,await this.rotateIfNeeded()}catch(e){this.writeFailures++;const n=e instanceof Error?e.message:String(e);this.writeFailures<3?(this.writeQueue.unshift(...t),dlog(`[PromptHistory] Write failed, retrying (${this.writeFailures}/3): ${n}`)):dlog(`[PromptHistory] Write disabled after 3 failures: ${n}`)}finally{this.isFlushing=!1}}async rotateIfNeeded(){try{const e=await $.stat(this.filePath);if(e.size<=5242880)return;dlog(`[PromptHistory] File size ${e.size} exceeds threshold, rotating`);const t=(await $.readFile(this.filePath,"utf-8")).trim().split("\n").filter(Boolean),n=t.slice(-100);await $.writeFile(this.filePath,n.join("\n")+"\n"),dlog(`[PromptHistory] Rotated: kept ${n.length} of ${t.length} entries`)}catch(e){dlog(`[PromptHistory] Rotation failed (non-critical): ${e instanceof Error?e.message:String(e)}`)}}async cleanup(){return this.cleanupPromise||(this.cleanupPromise=this.performCleanup().finally(()=>{this.cleanupPromise=null})),this.cleanupPromise}async performCleanup(){this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=null);const e=Date.now();for(;this.isFlushing;){if(Date.now()-e>=5e3){dlog("[PromptHistory] Cleanup timed out waiting for flush after 5000ms");break}await new Promise(e=>setTimeout(e,10))}await this.flush()}};function createHistoryManager(){return new sv}__name(createHistoryManager,"createHistoryManager"),CE(),Zo(),ar(),nr(),Nt(),Ot(),fC();var ov=class{static{__name(this,"TasteManager")}static async initializeProject(){const t=process.cwd(),n=e.join(t,".commandcode","taste");await $.mkdir(n,{recursive:!0});const r=e.join(n,"taste.md");try{await $.access(r);const e=await $.readFile(r,"utf-8"),t=migrateHeader({content:e});t!==e&&await $.writeFile(r,t,"utf-8")}catch{await $.writeFile(r,lC+"\n\n","utf-8")}}static async isInitialized(){const t=process.cwd(),n=e.join(t,".commandcode","taste");try{return await $.access(n),!0}catch{return!1}}};mo(),nr(),PC(),Nt(),_C(),Jo(),PC(),Nt(),Ot(),Jl(),bE(),ts();var{setText:iv}=Qe;async function loadShareInfo({contextEngineRef:e,setShareInfo:t}){const n=e.current?.getSessionManager();if(n){const e=await n.loadShareInfo();e&&t({url:e.url,secret:e.secret})}}async function handleShareCommand({sessionId:e,shareInfo:t,setShareInfo:n,setStatus:r,setShowShareNotification:s,contextEngineRef:o}){if(e){if(t)return await iv(t.url),r(""),s(!0),void setTimeout(()=>{s(!1)},3e3);try{r("Creating share link...");const t=o.current?.getMessages()||[],i=$l.sanitizeMessages(t,global.COMMAND_CODE_CWD||process.cwd()),a=new Vb({baseUrl:getApiBaseUrl()}),l=await a.post({endpoint:St.ALPHA.SHARE.CREATE,body:{sessionId:e,messages:i}});n({url:l.url,secret:l.secret});const u=o.current?.getSessionManager();u&&await u.saveShareInfo({url:l.url,secret:l.secret}),await iv(l.url),r(""),s(!0),setTimeout(()=>{s(!1)},5e3)}catch(e){r(`Failed to create share: ${e instanceof Error?e.message:"Unknown error"}`)}}else r("No active session to share")}async function handleUnshareCommand({sessionId:e,shareInfo:t,setShareInfo:n,setStatus:r,setUnshareNotificationMessage:s,contextEngineRef:o}){if(e){if(!t)return s("NOT SHARED: Session is not currently shared"),void setTimeout(()=>s(""),5e3);try{r("Removing share link...");const i=new Vb({baseUrl:getApiBaseUrl()});await i.delete({endpoint:St.ALPHA.SHARE.DELETE,body:{sessionId:e,secret:t.secret}});const a=o.current?.getSessionManager();a&&await a.deleteShareInfo(),s("UNSHARED: Sharing has stopped"),r(""),n(null),setTimeout(()=>{s("")},5e3)}catch(e){const t=`Failed to unshare: ${e instanceof Error?e.message:"Unknown error"}`;r(t),setTimeout(()=>r(""),5e3)}}else r("No active session to unshare")}async function handleSelectSession({selectedSessionId:e,sessionLoadIdRef:t,contextEngineRef:n,setFeed:r,setLiveAgents:s,setSessionId:o,setShowSessionSelector:i,setSessionLoaded:a,setPermissionMode:l,setStaticKey:u,setShareInfo:d,createContextEngineCallbacks:m}){const p=crypto.randomUUID();t.current=p;try{r([]),s([]),n.current=null,l("standard"),o(e),i(!1),a(!0),n.current=new CC(m(e),e);const{feedEntries:g,corruptedLines:h,totalLines:f}=await n.current.loadSession(e);if(t.current!==p)return;await loadShareInfo({contextEngineRef:n,setShareInfo:d});const y=[];if(0===g.length&&f>0&&y.push(Lo(`Session could not be loaded. ${f} lines could not be parsed.`)),0===g.length&&0===f&&y.push(xo("Session loaded but contains no messages.")),g.length>0&&(h>0&&y.push(xo(`Warning: ${h} message(s) could not be loaded.`)),y.push(...g)),t.current!==p)return;r(y),kC(),u(e=>e+1)}catch(e){if(t.current!==p)return;console.error("Failed to load session:",e);const n=e instanceof Error?e.message:"Unknown error";r([Lo(`Failed to load session: ${n}. Starting fresh session.`)]),i(!1),a(!1),o(crypto.randomUUID())}}async function handleNewSession({contextEngineRef:e,setFeed:t,setLiveAgents:n,setSessionId:r,setShowSessionSelector:s,setSessionLoaded:o,setPermissionMode:i}){t([]),n([]),e.current=null,i("standard"),r(crypto.randomUUID()),s(!1),o(!1)}function useStartup({resume:e,continueLatest:t,trust:n,initialPrompt:r,stdout:s,feedState:o,sessionState:i,statusState:a,authState:l,onboarding:u,uiOverlays:d,permissionState:m,contextEngineRef:p,isSubmittingRef:g,initialPromptSubmittedRef:h,historyManagerRef:f,executeBash:y,createContextEngineCallbacks:w,setInput:S}){const b=V(async()=>{try{const e=await isTasteLearningEnabled();a.setTasteLearningEnabled(e),e&&await ov.initializeProject()}catch{}},[a.setTasteLearningEnabled]),E=V(async()=>{const e=await getConfiguredProvider();l.setCurrentProvider(e);const t=await isOAuthEnforced();l.setIsOAuthMode(t)},[l.setCurrentProvider,l.setIsOAuthMode]),C=V(()=>{const e=getMcpConnectionManager();e.isInitialized||e.initialize().catch(()=>{})},[]),v=V(e=>{handleSelectSession({selectedSessionId:e,sessionLoadIdRef:i.sessionLoadIdRef,contextEngineRef:p,setFeed:o.setFeed,setLiveAgents:o.setLiveAgents,setSessionId:i.setSessionId,setShowSessionSelector:d.setShowSessionSelector,setSessionLoaded:i.setSessionLoaded,setPermissionMode:m.setPermissionMode,setStaticKey:d.setStaticKey,setShareInfo:a.setShareInfo,createContextEngineCallbacks:w})},[i,o,d,m,a,p,w]),T=V(async()=>{if(t){const e=await Yb.listSessions();return void(e.length>0&&v(e[0].id))}e&&d.setShowSessionSelector(!0)},[t,e,v,d]);G(()=>{(async()=>{await Yb.isProjectInitialized()?(u.setProjectTrusted(!0),u.setCheckingProject(!1),b(),E(),C(),await T()):n?(await Yb.initializeProject(),u.setProjectTrusted(!0),u.setCheckingProject(!1),b(),E(),C(),await T()):isDirectoryEmpty()?(await Yb.initializeProject(),u.setProjectTrusted(!0),u.setCheckingProject(!1),b(),E(),C()):(u.setShowTrustPrompt(!0),u.setCheckingProject(!1))})()},[e,t,n]),G(()=>{if(!u.projectTrusted)return;const e=createHistoryManager();return f.current=e,e.init(),()=>{e.cleanup()}},[u.projectTrusted]),G(()=>{if(!s)return;const e=__name(()=>{d.showLearningFeed||(kC(),d.setStaticKey(e=>e+1))},"handleResize");return s.on("resize",e),()=>{s.off("resize",e)}},[s]),G(()=>{r&&u.projectTrusted&&!u.checkingProject&&p.current&&!d.showSessionSelector&&!h.current&&(h.current=!0,handleSubmit({role:"user",input:r,feed:o.feed,setFeed:o.setFeed,isCmdCodeBusy:o.isCmdCodeBusy,setIsCmdCodeBusy:o.setIsCmdCodeBusy,setQueuedMessages:o.setQueuedMessages,setStatus:a.setStatus,setInteractionTokens:a.setInteractionTokens,updateStatus:a.updateStatus,setUpdateStatus:a.setUpdateStatus,billingLink:a.billingLink,setBillingLink:a.setBillingLink,contextEngineRef:p,isSubmittingRef:g,setInput:S,setStaticKey:d.setStaticKey,executeBash:y}))},[r,u.projectTrusted,u.checkingProject,d.showSessionSelector]);const k=Q(null);k.current={feed:o.feed,setFeed:o.setFeed,isCmdCodeBusy:o.isCmdCodeBusy,setIsCmdCodeBusy:o.setIsCmdCodeBusy,setQueuedMessages:o.setQueuedMessages,setStatus:a.setStatus,setInteractionTokens:a.setInteractionTokens,updateStatus:a.updateStatus,setUpdateStatus:a.setUpdateStatus,billingLink:a.billingLink,setBillingLink:a.setBillingLink,contextEngineRef:p,isSubmittingRef:g,setInput:S,setStaticKey:d.setStaticKey,executeBash:y,role:"",input:""};const _=V(async({role:e,input:t,images:n,ideContext:r})=>handleSubmit({...k.current,role:e,input:t,images:n,ideContext:r}),[]);return{loadTasteStatus:b,loadCurrentProvider:E,initializeMcpInBackground:C,onSubmit:_}}__name(loadShareInfo,"loadShareInfo"),__name(handleShareCommand,"handleShareCommand"),__name(handleUnshareCommand,"handleUnshareCommand"),__name(handleSelectSession,"handleSelectSession"),__name(handleNewSession,"handleNewSession"),IC(),__name(useStartup,"useStartup"),Nt(),dn(),Jo(),un(),Nt(),Ot(),$n(),Nt();var av={"claude-code":"Claude Code",cursor:"Cursor",aider:"Aider",cline:"Cline",codex:"Codex","pi-agent":"Pi Agent",factory:"Factory"};function getAgentDisplayName(e){return av[e]||e}function getProjectDirName(e){return e.replace(/\//g,"-")}function getGlobalProjectSettingsDir(t=process.cwd()){const n=Ne(t);return e.join(f.homedir(),".commandcode","projects",n)}function getGlobalProjectSettingsPath(t=process.cwd()){return e.join(getGlobalProjectSettingsDir(t),"settings.json")}async function loadGlobalProjectSettings(e=process.cwd()){try{const t=getGlobalProjectSettingsPath(e),n=await $.readFile(t,"utf-8");return JSON.parse(n)}catch{return{}}}async function saveGlobalProjectSettings(t,n=process.cwd()){try{const r=getGlobalProjectSettingsPath(n),s=e.dirname(r);await $.mkdir(s,{recursive:!0}),await $.writeFile(r,JSON.stringify(t,null,2))}catch(e){const t=e instanceof Error?e.message:String(e);dlog("Error saving global project settings:",e),ZE.addEvent({type:"error",message:`Failed to save global project settings: ${t}`})}}async function loadLocalProjectSettings(t=process.cwd()){try{const n=e.join(t,".commandcode","settings.local.json"),r=await $.readFile(n,"utf-8");return JSON.parse(r)}catch{return{}}}async function loadMergedProjectSettings(e=process.cwd()){try{const t=mergeSettings(await loadGlobalProjectSettings(e),await loadLocalProjectSettings(e)),n=t.tasteOnboarding,r=n?.learnedSessions?.["claude-code"]?.length||0;return dlog(`[Config] project settings loaded (taste: ${n?.completed?"complete":n?.skipped?"skipped":"pending"}, learned: ${r} sessions)`),t}catch(e){return dlog("[Settings] error loading",e),{}}}function mergeSettings(e,t){const n={...e};return t.tasteOnboarding&&(n.tasteOnboarding={...e.tasteOnboarding,...t.tasteOnboarding},(e.tasteOnboarding?.learnedSessions||t.tasteOnboarding?.learnedSessions)&&(n.tasteOnboarding.learnedSessions={...e.tasteOnboarding?.learnedSessions,...t.tasteOnboarding?.learnedSessions})),n}__name(getAgentDisplayName,"getAgentDisplayName"),__name(getProjectDirName,"getProjectDirName"),Nt(),$n(),tC(),Ot(),__name(getGlobalProjectSettingsDir,"getGlobalProjectSettingsDir"),__name(getGlobalProjectSettingsPath,"getGlobalProjectSettingsPath"),__name(loadGlobalProjectSettings,"loadGlobalProjectSettings"),__name(saveGlobalProjectSettings,"saveGlobalProjectSettings"),__name(loadLocalProjectSettings,"loadLocalProjectSettings"),__name(loadMergedProjectSettings,"loadMergedProjectSettings"),__name(mergeSettings,"mergeSettings"),Nt(),$n();var lv=e.join(h.homedir(),".codex","sessions");async function readSessionMeta(e){try{const t=_(e,{encoding:"utf8"}),n=Ge.createInterface({input:t,crlfDelay:1/0});for await(const e of n)if(e.trim()){try{const r=JSON.parse(e);if("session_meta"===r.type&&r.payload?.cwd)return n.close(),t.destroy(),{cwd:r.payload.cwd,id:r.payload.id,timestamp:r.payload.timestamp}}catch{}break}return n.close(),t.destroy(),null}catch{return null}}async function findAllSessionFiles(t,n){const r=[];try{await $.access(t)}catch{return dlog("[Codex] sessions directory not found"),[]}try{const s=await $.readdir(t);for(const o of s){if(!/^\d{4}$/.test(o))continue;const s=e.join(t,o);if(!(await $.stat(s)).isDirectory())continue;const i=await $.readdir(s);for(const t of i){if(!/^\d{2}$/.test(t))continue;const i=e.join(s,t);if(!(await $.stat(i)).isDirectory())continue;const a=await $.readdir(i);for(const s of a){if(!/^\d{2}$/.test(s))continue;const a=e.join(i,s);if(!(await $.stat(a)).isDirectory())continue;n?.({phase:"scanning",totalFiles:r.length,processedFiles:0,matchedSessions:0,currentDir:`${o}/${t}/${s}`});const l=(await $.readdir(a)).filter(e=>e.endsWith(".jsonl")&&e.startsWith("rollout-")).map(t=>e.join(a,t));r.push(...l)}}}}catch(e){dlog("[Codex] error scanning sessions",e)}return r}async function processFilesInBatches(e,t,n=10,r){const s=[];for(let o=0;o<e.length;o+=n){const i=e.slice(o,o+n),a=await Promise.all(i.map(t));for(const e of a)null!==e&&s.push(e);r?.(Math.min(o+n,e.length),e.length)}return s}async function findCodexSessions(t,n,r=0){const s=t||process.cwd(),o=[];dlog(`[Codex] scanning for project: ${s}`);const i=await findAllSessionFiles(lv,n);if(0===i.length)return dlog("[Codex] no session files found"),n?.({phase:"complete",totalFiles:0,processedFiles:0,matchedSessions:0}),[];dlog(`[Codex] found ${i.length} session files to scan`),n?.({phase:"reading",totalFiles:i.length,processedFiles:0,matchedSessions:0});let a=0;const l=await processFilesInBatches(i,async t=>{const n=await readSessionMeta(t);if(!n)return null;if(n.cwd===s)try{const r=await $.stat(t),s=e.basename(t,".jsonl");return{id:n.id||s,filePath:t,createdAt:new Date(n.timestamp||r.birthtime),lastModified:r.mtime,messageCount:0,agent:"codex",projectDir:n.cwd}}catch{return null}return null},10,(e,t)=>{a=o.length,n?.({phase:"reading",totalFiles:t,processedFiles:e,matchedSessions:a})});o.push(...l);const u=r>0?o.slice(0,r):o;return dlog(`[Codex] matched ${u.length} sessions for project`),n?.({phase:"complete",totalFiles:i.length,processedFiles:i.length,matchedSessions:u.length}),u.sort((e,t)=>t.lastModified.getTime()-e.lastModified.getTime())}async function findCodexSessionIds(e){return(await findCodexSessions(e)).map(e=>e.id)}async function extractCodexPrompts(e){const t=[];try{const n=(await $.readFile(e,"utf-8")).trim().split("\n");for(const e of n)if(e.trim())try{const n=JSON.parse(e);if("event_msg"===n.type&&"user_message"===n.payload?.type&&n.payload?.message){const e=n.payload.message;"string"==typeof e&&e.trim()&&t.push(e.trim())}}catch{continue}t.length>0&&dlog(`[Codex] extracted ${t.length} prompts from session`)}catch(t){dlog(`[Codex] failed to extract prompts: ${e}`,t)}return t}async function loadProjectSettings(){return loadMergedProjectSettings()}async function saveProjectSettings(e){await saveGlobalProjectSettings(e)}function isOnboardingDone(e){return!0===e?.skipped||!0===e?.completed}function buildAgentSessionsList(e){return Object.entries(e).filter(([e,t])=>t&&t.length>0).map(([e,t])=>({agent:e,sessionIds:t,displayName:getAgentDisplayName(e)}))}async function checkOnboardingConditions(){try{const e=(await loadProjectSettings()).tasteOnboarding,t=e?.learnedSessions||{},n=e?.skippedSessions||{},r={};for(const e of new Set([...Object.keys(t),...Object.keys(n)]))r[e]=[...t[e]||[],...n[e]||[]];const s=await findNewSessions(r),o=(s["claude-code"]?.length||0)+(s.codex?.length||0);return o>0?(dlog(`[Onboarding] found ${o} new sessions to learn from`),{shouldTrigger:!0,reason:"has_sessions",sessionCount:o,hasTasteContent:!0,agentSessions:buildAgentSessionsList(s)}):(isOnboardingDone(e)?dlog(`[Onboarding] ${e?.skipped?"user skipped":"already completed"}, no new sessions`):dlog("[Onboarding] no sessions to learn from, skipping"),{shouldTrigger:!1,reason:"skip",sessionCount:0,hasTasteContent:isOnboardingDone(e),agentSessions:[]})}catch(e){return dlog("[Onboarding] error checking conditions",e),{shouldTrigger:!1,reason:"skip",sessionCount:0,hasTasteContent:!1,agentSessions:[]}}}async function getSessionFilesFromDir(e){try{return(await $.readdir(e)).filter(e=>e.endsWith(".jsonl")&&!e.includes(".checkpoints")).map(e=>e.replace(".jsonl",""))}catch{return[]}}async function findNewSessions(t){const n={},r=t["claude-code"]||[],s=t.codex||[];try{const t=e.join(h.homedir(),".claude","projects");await $.access(t);const s=getProjectDirName(process.cwd()),o=(await $.readdir(t)).filter(e=>e===s);for(const s of o){const o=e.join(t,s);if((await $.stat(o)).isDirectory()){const e=await getSessionFilesFromDir(o);e.length>0&&(n["claude-code"]=e.filter(e=>!r.includes(e)))}}dlog(`[Sessions] claude-code: ${n["claude-code"]?.length||0} new, ${r.length} learned`)}catch{dlog("[Sessions] claude projects dir not found")}try{const e=await findCodexSessionIds();e.length>0&&(n.codex=e.filter(e=>!s.includes(e)));dlog(`[Sessions] codex: ${n.codex?.length||0} new, ${s.length} learned`)}catch{dlog("[Sessions] codex sessions not found")}return n}async function markSessionsAsLearned(e,t){const n=await loadProjectSettings();n.tasteOnboarding||(n.tasteOnboarding={}),n.tasteOnboarding.learnedSessions||(n.tasteOnboarding.learnedSessions={});const r=n.tasteOnboarding.learnedSessions[e]||[];if(n.tasteOnboarding.learnedSessions[e]=Array.from(new Set([...r,...t])),n.tasteOnboarding.skippedSessions?.[e]){const r=new Set(t);n.tasteOnboarding.skippedSessions[e]=n.tasteOnboarding.skippedSessions[e].filter(e=>!r.has(e)),0===n.tasteOnboarding.skippedSessions[e].length&&delete n.tasteOnboarding.skippedSessions[e]}n.tasteOnboarding.lastLearningDate=(new Date).toISOString(),await saveProjectSettings(n)}async function markOnboardingSkipped(){const e=await loadProjectSettings();e.tasteOnboarding||(e.tasteOnboarding={}),e.tasteOnboarding.skipped=!0;try{const t=e.tasteOnboarding.learnedSessions||{},n=await findNewSessions(t);e.tasteOnboarding.skippedSessions||(e.tasteOnboarding.skippedSessions={});for(const[t,r]of Object.entries(n))if(r.length>0){const n=e.tasteOnboarding.skippedSessions[t]||[];e.tasteOnboarding.skippedSessions[t]=Array.from(new Set([...n,...r]))}}catch{dlog("[Onboarding] failed to record skipped sessions, skip flag still set")}await saveProjectSettings(e)}async function markOnboardingCompleted(){const e=await loadProjectSettings();e.tasteOnboarding||(e.tasteOnboarding={}),e.tasteOnboarding.completed=!0,await saveProjectSettings(e)}async function triggerTasteOnboarding({projectTrusted:e,onboardingComplete:t,isOnboardingMode:n,tasteOnboardingCheckedRef:r,setIsOnboardingMode:s}){if(e)if(t)dlog("[Onboarding] skipped - already completed");else if(n)dlog("[Onboarding] skipped - already showing");else if(r.current)dlog("[Onboarding] skipped - already checked this session");else{r.current=!0,dlog("[Onboarding] checking if taste learning should start...");try{const e=await checkOnboardingConditions();e.shouldTrigger?(dlog(`[Onboarding] starting taste learning (${e.reason})`),s(!0)):dlog("[Onboarding] not needed")}catch(e){dlog("[Onboarding] error",e)}}else dlog("[Onboarding] skipped - project not yet trusted")}function useLifecycle({exit:e,feedState:t,exitState:n,statusState:r,authState:s,onboarding:o,uiOverlays:i,skipOnboarding:a}){G(()=>{if(n.shouldExit){r.hintTimerRef.current&&clearTimeout(r.hintTimerRef.current),n.exitConfirmationTimeoutRef.current&&clearTimeout(n.exitConfirmationTimeoutRef.current),s.providerNotificationTimer.current&&clearTimeout(s.providerNotificationTimer.current),s.modelNotificationTimer.current&&clearTimeout(s.modelNotificationTimer.current);try{e()}catch{process.exit(0)}}},[n.shouldExit,e]),G(()=>()=>{r.hintTimerRef.current&&clearTimeout(r.hintTimerRef.current),n.exitConfirmationTimeoutRef.current&&clearTimeout(n.exitConfirmationTimeoutRef.current),s.providerNotificationTimer.current&&clearTimeout(s.providerNotificationTimer.current),s.modelNotificationTimer.current&&clearTimeout(s.modelNotificationTimer.current)},[]),G(()=>{(async()=>{if("anthropic"===s.currentProvider&&s.isOAuthMode)try{await on.getValidAccessToken()||r.setStatus("OAuth setup required. Use /provider to select Claude and authenticate.")}catch{r.setStatus("OAuth setup required. Use /provider to select Claude and authenticate.")}})()},[s.currentProvider,s.isOAuthMode]),G(()=>{if(!t.isCmdCodeBusy)return void(r.pinnedStatusRef.current=!1);if(null!==r.retryAttempt)return;const e=setInterval(()=>{r.pinnedStatusRef.current||r.setStatus(Wo())},7e3);return()=>clearInterval(e)},[t.isCmdCodeBusy,r.retryAttempt]),G(()=>{a||triggerTasteOnboarding({projectTrusted:o.projectTrusted,onboardingComplete:o.onboardingComplete,isOnboardingMode:o.showTasteOnboarding,tasteOnboardingCheckedRef:o.tasteOnboardingCheckedRef,setIsOnboardingMode:o.setShowTasteOnboarding})},[o.projectTrusted,o.onboardingComplete,o.showTasteOnboarding,a]),G(()=>{if(o.showTasteOnboarding&&!o.tasteOnboardingEntryId){const e=Mo();o.setTasteOnboardingEntryId(e.id),t.setFeed(t=>[...t,e])}!o.showTasteOnboarding&&o.tasteOnboardingEntryId&&(t.setFeed(e=>e.filter(e=>e.id!==o.tasteOnboardingEntryId)),o.setTasteOnboardingEntryId(null))},[o.showTasteOnboarding,o.tasteOnboardingEntryId])}__name(readSessionMeta,"readSessionMeta"),__name(findAllSessionFiles,"findAllSessionFiles"),__name(processFilesInBatches,"processFilesInBatches"),__name(findCodexSessions,"findCodexSessions"),__name(findCodexSessionIds,"findCodexSessionIds"),__name(extractCodexPrompts,"extractCodexPrompts"),__name(loadProjectSettings,"loadProjectSettings"),__name(saveProjectSettings,"saveProjectSettings"),__name(isOnboardingDone,"isOnboardingDone"),__name(buildAgentSessionsList,"buildAgentSessionsList"),__name(checkOnboardingConditions,"checkOnboardingConditions"),__name(getSessionFilesFromDir,"getSessionFilesFromDir"),__name(findNewSessions,"findNewSessions"),__name(markSessionsAsLearned,"markSessionsAsLearned"),__name(markOnboardingSkipped,"markOnboardingSkipped"),__name(markOnboardingCompleted,"markOnboardingCompleted"),__name(triggerTasteOnboarding,"triggerTasteOnboarding"),__name(useLifecycle,"useLifecycle"),Nt(),PC(),CE(),Jo(),Nt(),ln(),ar(),PC(),Ot(),Nt();var cv=" ";function useKeyboard({showTasteConfig:e,showSkillsConfig:t,showProviderSelector:n,showModelSelector:r,showMemorySelector:s,showMcpManager:o,showLearningFeed:i,showRewindSelector:a,showLoginOverlay:l,showAddDirModal:u,authComponentInfo:d,setShowLearningFeed:m,setShowModelSelector:p,setStaticKey:g,transcriptMode:h,setTranscriptMode:f,isCmdCodeBusy:y,liveAgents:w,queuedMessagesRef:S,setInput:b,setQueuedMessages:E,setFeed:C,setLiveAgents:v,setIsCmdCodeBusy:T,setRetryAttempt:k,setStatus:_,pendingExitKey:P,setPendingExitKey:A,pendingExitKeyRef:x,lastExitKeyTimeRef:I,exitConfirmationTimeoutRef:N,resetPendingExitKey:R,pendingPermission:$,setPendingPermission:L,pendingQuestion:M,setPendingQuestion:O,setShouldExit:D,contextEngineRef:q,handleToggleAutoAccept:F,handleDoubleEscapeEmpty:j,respondToPrompt:z,createErrorEntry:B}){const U=__name(()=>{if(!q.current)return;q.current.interrupt(!0);const e=w.length>0;if(T(!1),k(null),v([]),_("Interrupted by user"),!e){const e=B("Interrupted by user");C(t=>[...t,e])}if(S.current.length>0){const e=S.current.join("\n");b(t=>t?e+"\n"+t:e),E([]),S.current=[]}},"handleInterrupt");Z((w,S)=>{if(S.shift&&S.tab||"[Z"===w)F();else if(e||t||n||r||s||o||d||i||a||l||u)P&&R();else{if(""===w||S.ctrl&&"c"===w){if(y&&q.current)return void U();const e=Date.now(),t=e-I.current;return I.current=e,"ctrl-c"===x.current&&t<2e3?(N.current&&(clearTimeout(N.current),N.current=null),void D(!0)):(b(()=>""),x.current="ctrl-c",A("ctrl-c"),N.current&&clearTimeout(N.current),void(N.current=setTimeout(()=>{x.current=null,A(null),N.current=null},2e3)))}if(S.ctrl&&"t"===w)return kC(),m(!i),void g(e=>e+1);if(getIsExpandToolShortcut(S,w))return kC(),f("off"===h?"limited":"off"),void g(e=>e+1);if(S.ctrl&&"e"===w&&"off"!==h)return kC(),f("limited"===h?"full":"limited"),void g(e=>e+1);if(S.meta&&"p"===w||isAltP(w))p(!0);else if(S.escape){if(M)return M.reject(new Error("Question cancelled by user")),O(null),void _("Question cancelled");if($)return z({label:"No, and tell Command Code what to do differently",value:"no",description:"Deny and provide feedback",scope:void 0}),$.resolve(!1),L(null),void _("Permission denied");y&&q.current&&U()}}})}function useHandlers({resume:e,feedState:t,onboarding:n,uiOverlays:r,exitState:s,pendingOps:o,permissionState:i,statusState:a,authState:l,contextEngineRef:u,loadTasteStatus:d,loadCurrentProvider:m,setInput:p}){const g=V(()=>{i.setPermissionMode(e=>{let t="standard";if("standard"===e&&(t="auto-accept"),"auto-accept"===e&&(t="plan"),"auto-accept"===t&&o.pendingPermission){const e={label:"Yes",value:"yes",description:"Allow this action",scope:void 0};i.respondToPrompt(e),o.pendingPermission.resolve(!0),o.setPendingPermission(null)}return"plan"===t&&o.pendingPermission&&(o.pendingPermission.resolve(!1),o.setPendingPermission(null)),t})},[i.setPermissionMode,i.respondToPrompt,o.pendingPermission,o.setPendingPermission]),h=V(()=>{const e=!t.isCmdCodeBusy&&!o.pendingPermission&&!o.pendingQuestion,n=u.current?.hasCheckpoints()??!1;e&&n&&r.setShowRewindSelector(!0)},[t.isCmdCodeBusy,o.pendingPermission,o.pendingQuestion,r.setShowRewindSelector]),f=V(s=>{if(n.setOnboardingComplete(!0),n.setShowTasteOnboarding(!1),n.setAutoLearnTaste(!1),kC(),s?.skipped){const e=xo("",{isTasteSkip:!0});t.setFeed(t=>[...t,e])}r.setStaticKey(e=>e+1),e&&r.setShowSessionSelector(!0)},[e,n,r,t]),y=V(async()=>{try{if(await Yb.initializeProject(),n.setShowTrustPrompt(!1),e)return console.log("No conversations found to resume."),void s.setShouldExit(!0);n.setProjectTrusted(!0),d(),m()}catch(e){console.error("Failed to initialize project:",e),n.setShowTrustPrompt(!1),s.setShouldExit(!0)}},[e,n,s,d,m]),w=V(()=>{s.setShouldExit(!0)},[s.setShouldExit]);return useKeyboard({showTasteConfig:r.showTasteConfig,showSkillsConfig:r.showSkillsConfig,showProviderSelector:r.showProviderSelector,showModelSelector:r.showModelSelector,showMemorySelector:r.showMemorySelector,showMcpManager:r.showMcpManager,showLearningFeed:r.showLearningFeed,showRewindSelector:r.showRewindSelector,showLoginOverlay:r.showLoginOverlay,showAddDirModal:r.showAddDirModal,authComponentInfo:l.authComponentInfo,setShowLearningFeed:r.setShowLearningFeed,setShowModelSelector:r.setShowModelSelector,setStaticKey:r.setStaticKey,transcriptMode:r.transcriptMode,setTranscriptMode:r.setTranscriptMode,isCmdCodeBusy:t.isCmdCodeBusy,liveAgents:t.liveAgents,queuedMessagesRef:t.queuedMessagesRef,setInput:p,setQueuedMessages:t.setQueuedMessages,setFeed:t.setFeed,setLiveAgents:t.setLiveAgents,setIsCmdCodeBusy:t.setIsCmdCodeBusy,setRetryAttempt:a.setRetryAttempt,setStatus:a.setStatus,pendingExitKey:s.pendingExitKey,setPendingExitKey:s.setPendingExitKey,pendingExitKeyRef:s.pendingExitKeyRef,lastExitKeyTimeRef:s.lastExitKeyTimeRef,exitConfirmationTimeoutRef:s.exitConfirmationTimeoutRef,resetPendingExitKey:s.resetPendingExitKey,pendingPermission:o.pendingPermission,setPendingPermission:o.setPendingPermission,pendingQuestion:o.pendingQuestion,setPendingQuestion:o.setPendingQuestion,setShouldExit:s.setShouldExit,contextEngineRef:u,handleToggleAutoAccept:g,handleDoubleEscapeEmpty:h,respondToPrompt:i.respondToPrompt,createErrorEntry:Lo}),{handleToggleAutoAccept:g,handleDoubleEscapeEmpty:h,handleTasteOnboardingComplete:f,handleTrust:y,handleNoTrust:w}}__name(useKeyboard,"useKeyboard"),__name(useHandlers,"useHandlers"),Nt(),Nt(),Ot(),Jo(),ir(),Nt();var uv='You are an expert code reviewer. Do follow these steps:\n\nGather PR context using the GitHub CLI:\n1. When no PR number is given, list open PRs with `gh pr list` and ask which one to review\n2. Fetch PR metadata via `gh pr view <number>`\n3. Retrieve the changeset with `gh pr diff <number>`\n4. One go gather context: Run gh pr view <number> && echo "---DIFF---" && gh pr diff <number>\n5. Analyze the changes and provide a thorough code review that includes:\n\t- Overview of the PR is doing\n\t- Analysis of the code quality and style\n\t- Give specific suggestions for improvement\n\t- Highlight any potential bugs/issues or risks\n\t- Score PR on a scale of 1-5 based on overall table with quality and readiness for merging\nKeep your review concise, less wordy, but thorough.\nFocus on:\n- Correctness of code\n- Following project conventions\n- Performance issues and implications\n- Test coverage\n- Security considerations\n\nBe less wordy. If you make a table, don\'t go over 60pts.\nFormat your review in sections and bullets.';function buildReviewPrompt({prNumber:e}){const t=e.trim();return t?`${uv}\n\nReview PR number: ${t}`:`${uv}\n\nReview PR number: `}function loadCustomCommands(){const e=[],n=t.join(process.cwd(),".commandcode","commands"),r=t.join(f.homedir(),".commandcode","commands");function loadCommandsFromDirectory(n,r,s=""){if(S.existsSync(n))try{const o=S.readdirSync(n,{withFileTypes:!0});for(const i of o){const o=t.join(n,i.name);if(i.isDirectory())loadCommandsFromDirectory(o,r,s?`${s}/${i.name}`:i.name);else if(i.isFile()&&i.name.endsWith(".md")){const n=t.basename(i.name,".md"),a=S.readFileSync(o,"utf-8").trim();e.push({name:n,source:r,content:a,subdirectory:s})}}}catch(e){}}return __name(loadCommandsFromDirectory,"loadCommandsFromDirectory"),loadCommandsFromDirectory(r,"user"),loadCommandsFromDirectory(n,"project"),e}function customCommandsToMenuItems(e){return e.map(e=>{const t=`/${e.name}`;let n;return n=e.subdirectory?"project"===e.source?`(project: ${e.subdirectory})`:`(user: ${e.subdirectory})`:"project"===e.source?"(project)":"(user)",{command:t,description:`${e.content.replace(/[\r\n]+/g," ").replace(/\s+/g," ").trim()} ${n}`}})}function getCustomCommandContent(e){const t=loadCustomCommands(),n=e.startsWith("/")?e.substring(1):e,r=t.find(e=>e.name===n);return r?r.content:null}__name(buildReviewPrompt,"buildReviewPrompt"),Nt(),Nt(),Ot(),Nt(),Ot(),__name(loadCustomCommands,"loadCustomCommands"),__name(customCommandsToMenuItems,"customCommandsToMenuItems"),__name(getCustomCommandContent,"getCustomCommandContent"),ir(),Nt();var dv=["Code","Code - Insiders","VSCodium","Cursor"],mv="Code",pv={key:"shift+enter",command:"workbench.action.terminal.sendSequence",args:{text:"\r"},when:"terminalFocus"},gv=__name(e=>m(e).href,"formatPathForTerminal"),hv=__name(e=>{switch(e){case"darwin":return["Library","Application Support"];case"win32":return["AppData","Roaming"];default:return[".config"]}},"getConfigPathSegments"),fv=__name(({home:t,configSegments:n,variant:r})=>e.join(t,...n,r,"User","keybindings.json"),"buildKeybindingsPath"),yv=__name(({home:t,configSegments:n,variants:r})=>{for(const s of r){const r=fv({home:t,configSegments:n,variant:s});if(w.existsSync(e.dirname(r)))return s}return null},"findExistingVariant"),wv=__name(e=>{if(!e||"object"!=typeof e)return!1;const t=e;return"shift+enter"===t.key&&Sv(t.when)},"isTerminalShiftEnterBinding"),Sv=__name(e=>"string"==typeof e?e.includes("terminalFocus"):!!Array.isArray(e)&&e.some(e=>"string"==typeof e&&e.includes("terminalFocus")),"hasTerminalFocusCondition"),bv=__name(e=>{const t=He(e).trim();return!t||/^\[\s*\]$/.test(t)},"isEmptyKeybindingsContent"),Ev=__name(e=>/,\s*[}\]]/s.test(e),"hasTrailingComma"),Cv=__name(({error:e,content:t})=>{const n=e.message;return Ev(t)&&(n.includes("Expected double-quoted property name")||n.includes("Unexpected token")||n.includes("is not valid JSON"))?"Invalid JSON: trailing comma detected. Remove the comma before the closing bracket.":n.includes("Expected")&&n.includes(",")&&n.includes("or")?"Invalid JSON: missing comma between elements.":n.includes("Unterminated string")||n.includes("Bad string")?"Invalid JSON: unterminated string. Check for missing closing quotes.":"Invalid JSON syntax. Please check the file format."},"formatJsonParseError"),vv=__name(e=>{let t="",n=!1,r=!1;for(let s=0;s<e.length;s++){const o=e[s];if(n)t+=o,r?r=!1:"\\"===o?r=!0:'"'===o&&(n=!1);else if('"'!==o){if(","===o){let t=s+1;for(;t<e.length&&/\s/.test(e[t]);)t++;if("}"===e[t]||"]"===e[t])continue}t+=o}else n=!0,t+=o}return t},"removeTrailingCommas"),Tv=__name(e=>{try{const t=He(e),n=vv(t);return{success:!0,data:JSON.parse(n)}}catch(t){return t instanceof Error?{success:!1,error:Cv({error:t,content:e})}:{success:!1,error:"Unknown parse error"}}},"safeParseJson"),kv=__name(({message:e,keybindingsPath:t})=>({success:!0,message:e,details:gv(t)}),"createSuccessResult"),_v=__name(({message:e,keybindingsPath:t})=>({success:!1,message:e,details:gv(t)}),"createErrorResult"),Pv=__name(()=>{const t=h.homedir(),n=h.platform();if(process.env.VSCODE_PORTABLE)return e.join(process.env.VSCODE_PORTABLE,"user-data","User","keybindings.json");const r=hv(n);if(!r)return fv({home:t,configSegments:[".config"],variant:mv});const s=yv({home:t,configSegments:r,variants:dv});return fv({home:t,configSegments:r,variant:s??mv})},"getVSCodeKeybindingsPath"),Av=__name(e=>{const t={hasCompatible:!1,hasConflicting:!1};for(const n of e)wv(n)&&(n.command===pv.command&&n.args?.text===pv.args.text?t.hasCompatible=!0:(t.hasConflicting=!0,t.conflictingText="string"==typeof n.args?.text?n.args.text:n.command));return t},"checkExistingShiftEnterBindings"),xv=__name(t=>{try{if(!w.existsSync(t)){const n=e.dirname(t);return w.existsSync(n)||w.mkdirSync(n,{recursive:!0}),{rawContent:"",keybindings:[]}}const n=w.readFileSync(t,"utf-8");if(bv(n))return{rawContent:n,keybindings:[]};const r=Tv(n.trim());return r.success?Array.isArray(r.data)?{rawContent:n,keybindings:r.data}:_v({message:"VSCode keybindings.json does not contain an array. Please fix the file format.",keybindingsPath:t}):_v({message:`Failed to parse existing VSCode key bindings: ${r.error}`,keybindingsPath:t})}catch(e){const n=e instanceof Error?e.message:"Unknown error";return _v({message:`Failed to read keybindings file: ${n}`,keybindingsPath:t})}},"readKeybindingsFile"),Iv=__name(({rawContent:e,keybindingsPath:t})=>{const n=JSON.stringify(pv,null,2);if(bv(e))return`[\n${n}\n]\n`;const r=e.lastIndexOf("]");if(-1===r)return _v({message:"VSCode keybindings.json is malformed (missing closing bracket).",keybindingsPath:t});const s=e.lastIndexOf("}",r);return-1===s?_v({message:"VSCode keybindings.json is malformed (missing closing brace).",keybindingsPath:t}):e.substring(0,s+1)+",\n"+n+e.substring(s+1)},"generateNewContent");function setupVSCodeTerminal(){const e=Pv();try{const t=xv(e);if("success"in t)return t;const{rawContent:n,keybindings:r}=t,s=Av(r);if(s.hasConflicting)return _v({message:"Conflicting VSCode terminal Shift+Enter key binding already exists. Please remove the key binding and try again.",keybindingsPath:e});if(s.hasCompatible)return kv({message:"VSCode terminal Shift+Enter key binding already configured.",keybindingsPath:e});const o=Iv({rawContent:n,keybindingsPath:e});return"string"!=typeof o?o:(w.writeFileSync(e,o,"utf-8"),kv({message:"Installed VSCode terminal Shift+Enter key binding",keybindingsPath:e}))}catch(t){return _v({message:`Failed to configure VSCode key binding: ${t instanceof Error?t.message:"Unknown error"}`,keybindingsPath:e})}}function isVSCodeTerminal(){return"vscode"===process.env.TERM_PROGRAM}__name(setupVSCodeTerminal,"setupVSCodeTerminal"),__name(isVSCodeTerminal,"isVSCodeTerminal"),jr(),rr();var Nv=(e=>(e.INIT="/init",e.EXIT="/exit",e.HELP="/help",e.CLEAR="/clear",e.SHARE="/share",e.TASTE="/taste",e.LEARN_TASTE="/learn-taste",e.SKILLS="/skills",e.RESUME="/resume",e.MEMORY="/memory",e.UNSHARE="/unshare",e.PROVIDER="/provider",e.MODEL="/model",e.AGENTS="/agents",e.MCP="/mcp",e.COMPACT="/compact",e.REWIND="/rewind",e.LOGIN="/login",e.LOGOUT="/logout",e.FEEDBACK="/feedback",e.TERMINAL_SETUP="/terminal-setup",e.IDE_SETUP="/ide",e.ADD_DIR="/add-dir",e.REVIEW="/review",e.PR_COMMENTS="/pr-comments",e))(Nv||{}),Rv=new Set(["/exit","/clear","/help","/share","/unshare","/taste","/learn-taste","/skills","/resume","/provider","/model","/memory","/init","/agents","/mcp","/compact","/rewind","/login","/logout","/feedback","/terminal-setup","/ide","/add-dir","/pr-comments"]),$v=[{command:"/add-dir",description:"Add directory to workspace context"},{command:"/agents",description:"Manage agent configurations"},{command:"/clear",description:"Clear the conversation history (reset, new)"},{command:"/compact",description:"Compact the conversation history"},{command:"/exit",description:"Exit Command Code"},{command:"/feedback",description:"Share feedback or report bugs"},{command:"/help",description:"Show available shortcuts"},{command:"/ide",description:"Install extension to fetch IDE context"},{command:"/init",description:"Initialize AGENTS.md for this project"},{command:"/learn-taste",description:"Learn taste from sessions with other coding agents (Claude Code, Cursor, etc)"},{command:"/login",description:"Authenticate with CommandCode via browser"},{command:"/logout",description:"Remove stored authentication"},{command:"/mcp",description:"Manage MCP server connections"},{command:"/memory",description:"Manage Command Code memory"},{command:"/model",description:"Switch between Command Code models"},{command:"/pr-comments",description:"Fetch all PR comments for current branch"},{command:"/provider",description:"Select AI provider (Command Code or Anthropic)"},{command:"/resume",description:"Resume a past conversation"},{command:"/review",description:"Review a pull request (optional PR number)"},{command:"/rewind",description:"Restore to a previous checkpoint (Press Esc twice)"},{command:"/share",description:"Share conversation (copy link to clipboard)"},{command:"/skills",description:"Browse and open agent skills"},{command:"/taste",description:"Manage Taste learning and usage"},{command:"/terminal-setup",description:"Setup VSCode keybindings"},{command:"/unshare",description:"Stop sharing conversation"}],Lv=__name(({onSelectCommand:e,onInsertCommand:t,onClose:n,searchQuery:r=""})=>{const[s,o]=W(0),[i,a]=W(0),{stdout:l}=X(),u=l?.columns??80,d=Math.max(20,u-22-2-1-2),m=H(()=>{const e=[...customCommandsToMenuItems(loadCustomCommands()),...$v.filter(e=>!("/provider"===e.command&&!isInternalTeamFlagEnforced()||"/terminal-setup"===e.command&&!isVSCodeTerminal()))];if(!r)return e;const t=r.toLowerCase();return e.map(e=>{const n=e.command.toLowerCase(),r=e.description.toLowerCase();let s=0;return n.startsWith("/"+t)?s+=100:n.includes(t)&&(s+=50),r.includes(t)&&(s+=25),{...e,score:s}}).filter(e=>e.score>0).sort((e,t)=>t.score-e.score).map(({score:e,...t})=>t)},[r]),p=H(()=>{const e=i,t=Math.min(e+8,m.length);return m.slice(e,t)},[m,i]);return G(()=>{o(0),a(0)},[r]),Z((r,l)=>{if(l.escape)n();else if(l.upArrow)o(e=>{const t=Math.max(0,e-1);return t<i&&a(t),t});else if(l.downArrow)o(e=>{const t=Math.min(m.length-1,e+1);return t>=i+8&&a(Math.max(0,t-8+1)),t});else{if(l.return){const t=m[s];return void(t&&e(t.command))}if(l.tab||l.rightArrow){const e=m[s];return void(e&&t(e.command))}}}),0===m.length?B.createElement(K,{flexDirection:"column",paddingLeft:2},B.createElement(Y,{color:Ln.DIM},"No commands found")):(m.length,B.createElement(K,{flexDirection:"column",paddingLeft:1},B.createElement(K,{columnGap:2},B.createElement(K,{flexDirection:"column",width:22},p.map((e,t)=>{const n=i+t;return B.createElement(Y,{key:n,color:s===n?Ln.WHITE:Ln.DIM,wrap:"truncate"},e.command)})),B.createElement(K,{flexDirection:"column"},p.map((e,t)=>{const n=i+t;return B.createElement(Y,{key:n,color:s===n?Ln.WHITE:Ln.DIM,wrap:"truncate"},truncateString({text:e.description,maxChars:d}))})))))},"CommandMenu");qE(),Nt(),Nt(),ar(),rr();var Mv=__name(e=>({darwin:"macOS",linux:"Linux",win32:"Windows",freebsd:"FreeBSD",sunos:"SunOS"}[e]||e),"getPlatformName"),Ov=__name(e=>{const t=Math.floor(e/86400),n=Math.floor(e%86400/3600),r=Math.floor(e%3600/60);return t>0?`${t}d ${n}h ${r}m`:n>0?`${n}h ${r}m`:`${r}m`},"formatUptime"),Dv=__name(({icon:e,label:t,children:n})=>B.createElement(Y,null,B.createElement(Y,{color:Ln.CYAN},e," "),B.createElement(Y,{dimColor:!0},t.padEnd(12)),n),"Row"),qv=__name(({title:e})=>B.createElement(Y,null,B.createElement(Y,{color:Ln.GRAY},"───"),B.createElement(Y,{color:Ln.WHITE}," ",e," "),B.createElement(Y,{color:Ln.GRAY},"─".repeat(35))),"Header"),Fv=__name(({title:e,marginTop:t=0,children:n})=>B.createElement(K,{flexDirection:"column",marginTop:t},B.createElement(qv,{title:e}),B.createElement(K,{flexDirection:"column",paddingY:1},n)),"Section"),jv=__name(({cpuCount:e,totalMem:t})=>B.createElement(Fv,{title:"System Information"},B.createElement(Dv,{icon:be.bullet,label:"Date"},B.createElement(Y,null,formatDate())),B.createElement(Dv,{icon:be.pointer,label:"Platform"},B.createElement(Y,{color:Ln.GREEN},Mv(h.platform())),B.createElement(Y,{dimColor:!0}," ","(",h.platform(),", ",h.arch(),")")),B.createElement(Dv,{icon:be.triangleUp,label:"Hostname"},B.createElement(Y,null,h.hostname())),B.createElement(Dv,{icon:be.bullet,label:"User"},B.createElement(Y,{color:Ln.YELLOW},h.userInfo().username)),B.createElement(Dv,{icon:be.bullet,label:"CPUs"},B.createElement(Y,{color:Ln.MAGENTA},e," cores")),B.createElement(Dv,{icon:be.bullet,label:"Memory"},B.createElement(Y,{color:Ln.CYAN},t," GB")),B.createElement(Dv,{icon:be.play,label:"Uptime"},B.createElement(Y,null,Ov(h.uptime()))),B.createElement(Dv,{icon:be.arrowRight,label:"Home"},B.createElement(Y,{dimColor:!0},h.homedir())),B.createElement(Dv,{icon:be.pointer,label:"Shell"},B.createElement(Y,null,process.env.SHELL||"N/A")),B.createElement(Dv,{icon:be.bullet,label:"Node"},B.createElement(Y,{color:Ln.GREEN},process.version))),"SystemInfoSection"),zv=__name(({cpus:e})=>B.createElement(Fv,{title:"CPU Details",marginTop:1},e.map((e,t)=>B.createElement(Dv,{key:t,icon:be.bullet,label:`Core ${t}`},B.createElement(Y,null,e.model.trim()),B.createElement(Y,{color:Ln.YELLOW}," @ ",e.speed," MHz")))),"CPUDetailsSection"),Bv=__name(({networkInterfaces:e})=>B.createElement(Fv,{title:"Network",marginTop:1},Object.entries(e).map(([e,t])=>{const n=t?.filter(e=>"IPv4"===e.family&&!e.internal);return n&&0!==n.length?n.map((t,n)=>B.createElement(Dv,{key:`${e}-${n}`,icon:be.bullet,label:e},B.createElement(Y,{color:Ln.GREEN},t.address))):null})),"NetworkSection"),Uv=__name(({cpus:e,totalMem:t,networkInterfaces:n,verbose:r})=>B.createElement(K,{flexDirection:"column"},B.createElement(Y,null,"System Information"),B.createElement(Y,null,"─".repeat(40)),B.createElement(Y,null,"Date ",formatDate()),B.createElement(Y,null,"Platform ",Mv(h.platform())," (",h.platform(),","," ",h.arch(),")"),B.createElement(Y,null,"Hostname ",h.hostname()),B.createElement(Y,null,"User ",h.userInfo().username),B.createElement(Y,null,"CPUs ",e.length," cores"),B.createElement(Y,null,"Memory ",t," GB"),B.createElement(Y,null,"Uptime ",Ov(h.uptime())),B.createElement(Y,null,"Home ",h.homedir()),B.createElement(Y,null,"Shell ",process.env.SHELL||"N/A"),B.createElement(Y,null,"Node ",process.version),r&&B.createElement(B.Fragment,null,B.createElement(Y,null,"\n","CPU Details"),B.createElement(Y,null,"─".repeat(40)),e.map((e,t)=>B.createElement(Y,{key:t},"Core ",String(t).padEnd(10),e.model," @ ",e.speed," MHz")),B.createElement(Y,null,"\n","Network"),B.createElement(Y,null,"─".repeat(40)),Object.entries(n).map(([e,t])=>t?.filter(e=>"IPv4"===e.family&&!e.internal).map((t,n)=>B.createElement(Y,{key:`${e}-${n}`},e.padEnd(12),t.address))))),"PlainTextInfo"),Wv=__name(({cpus:e,totalMem:t,networkInterfaces:n,verbose:r})=>B.createElement(K,{flexDirection:"column"},B.createElement(jv,{cpuCount:e.length,totalMem:t}),r&&B.createElement(zv,{cpus:e}),r&&B.createElement(Bv,{networkInterfaces:n})),"StyledInfo"),Qv=__name(({verbose:e=!1,text:t=!1})=>{const{exit:n}=te();G(()=>{const e=setTimeout(()=>n(),50);return()=>clearTimeout(e)},[n]);const r=h.cpus(),s=h.networkInterfaces(),o=Math.round(h.totalmem()/1024/1024/1024);return t?B.createElement(Uv,{cpus:r,totalMem:o,networkInterfaces:s,verbose:e}):B.createElement(Wv,{cpus:r,totalMem:o,networkInterfaces:s,verbose:e})},"InfoUI"),Gv={"iTerm.app":"iTerm2",Apple_Terminal:"Terminal",WezTerm:"WezTerm",Hyper:"Hyper",Alacritty:"Alacritty"},Hv=__name((e,t)=>{const n=process.env[e];return!!n&&n.toLowerCase().includes(t)},"hasEnvContaining"),Vv=__name(()=>{if(process.env.CURSOR_TRACE_ID)return"Cursor";if(Hv("__CFBundleIdentifier","com.todesktop"))return"Cursor";const e=[process.env.VSCODE_GIT_ASKPASS_MAIN,process.env.VSCODE_GIT_ASKPASS_NODE,process.env.GIT_ASKPASS].filter(Boolean);for(const t of e){const e=t.toLowerCase();if(e.includes("cursor"))return"Cursor";if(e.includes("windsurf"))return"Windsurf"}return"vscode"===process.env.TERM_PROGRAM&&"1"===process.env.VSCODE_INJECTION?"VSCode":null},"detectIDE"),Kv=__name(()=>{const e=Vv();if(e)return e;const t=process.env.TERM_PROGRAM;return t&&Gv[t]?Gv[t]:t||process.env.TERMINAL_EMULATOR||"Unknown"},"getTerminalName"),Yv=__name(()=>{if("win32"===f.platform()){const e=process.env.COMSPEC;return e?a(e):process.env.SHELL?a(process.env.SHELL):"cmd.exe"}if(process.env.FISH_VERSION)return"fish";if(process.env.ZSH_VERSION)return"zsh";if(process.env.BASH_VERSION)return"bash";try{const e=process.ppid;if(e){const t=I(`ps -p ${e} -o comm=`,{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(t){const e=a(t).replace(/^-/,"");if(e&&"node"!==e)return e}}}catch{}const e=process.env.SHELL;return e?a(e):"N/A"},"getShellName"),Jv=__name(()=>{const e=Vv();if(!e)return"N/A";const t=process.env.TERM_PROGRAM_VERSION;return t?`${e} ${t}`:e},"getIDEInfo"),Xv=__name(()=>{try{const e=I("cmd --version",{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(e)return e}catch{}return"Unknown"},"getCommandCodeVersion");function getSystemInfo(){return{os:Mv(f.platform()),terminal:Kv(),shell:Yv(),version:Xv(),ide:Jv()}}function buildGitHubIssueUrl(e){const t=getSystemInfo(),n=new URLSearchParams;if(n.append("template","1.bug_report.yml"),e){const t=e.slice(0,256).trim();t&&n.append("title",t)}return n.append("version",t.version),n.append("os",t.os),n.append("terminal",t.terminal),n.append("shell",t.shell),`https://github.com/CommandCodeAI/command-code/issues/new?${n.toString()}`}function createOSC8Link(e,t,n=!0){return`${n?"[33m":""}]8;;${e}${t||e}]8;;${n?"[0m":""}`}function parsePositionalArguments(e){const{input:t}=e;if(!t.trim())return[];const n=[];let r="",s=!1,o="";for(let e=0;e<t.length;e++){const i=t[e];'"'!==i&&"'"!==i||s?i===o&&s?(s=!1,o=""):" "!==i||s?r+=i:(r.trim()&&n.push(r.trim()),r=""):(s=!0,o=i)}return r.trim()&&n.push(r.trim()),n}function parseCommandInput(e){const{input:t}=e,n=t.trim();if(!n.startsWith("/"))return null;const r=n.indexOf(" ");if(-1===r)return{commandName:n,rawArguments:"",positionalArgs:[]};const s=n.substring(0,r),o=n.substring(r+1).trim();return{commandName:s,rawArguments:o,positionalArgs:parsePositionalArguments({input:o})}}function processCommandTemplate(e){const{template:t,rawArguments:n,positionalArgs:r}=e;let s=t;return s=s.replace(/\$ARGUMENTS/g,n),s=s.replace(/\$(\d+)/g,(e,t)=>{const n=parseInt(t,10)-1;return n>=0&&n<r.length?r[n]:""}),{content:s}}async function handleCompactCommand({contextEngineRef:e,setFeed:t,setStatus:n,setIsCmdCodeBusy:r,setContextUsage:s,setStaticKey:o}){if(e.current)if(e.current.isRequestInProgress())t(e=>[...e,xo("Cannot compact while Command Code is working. Please wait for the current operation to complete.")]);else try{r(!0),n("Compacting conversation...");const i=await e.current.manualCompact();kC(),o(e=>e+1);let a="Compacted conversation.";i.didCompact||(a="Conversation is already compact."),i.didCompact&&i.tokensSaved>0&&(a=`Compacted conversation, saved ~${i.tokensSaved.toLocaleString()} tokens.`),t(e=>[...e,xo(a)]),r(!1),n("Ready..."),s({current:e.current.getContextTokensUsed()||0,limit:xE})}catch(e){const s=`Failed to compact conversation: ${e instanceof Error?e.message:"Unknown error"}`;t(e=>[...e,Lo(s)]),r(!1),n("Ready...")}else t(e=>[...e,xo("No active conversation to compact.")])}function handleRewindCommand({contextEngineRef:e,setFeed:t,setShowRewindSelector:n}){e.current?e.current.hasCheckpoints()?n(!0):t(e=>[...e,xo("No checkpoints available. Start sending messages to create checkpoints.")]):t(e=>[...e,xo("No active conversation to rewind.")])}async function handleRewindSelect({messageId:e,mode:t,contextEngineRef:n,setFeed:r,setStatus:s,setShowRewindSelector:o,setStaticKey:i,setInput:a}){if(o(!1),n.current)try{const o=n.current.listCheckpoints().find(t=>t.messageId===e);s("Restoring checkpoint...");const l=await n.current.restoreToCheckpoint({messageId:e,mode:t});if(l.success){const e=n.current.getSessionManager(),t=n.current.getMessages();r(e.reconstructFeedFromMessages(t)),kC(),i(e=>e+1),o?.userPrompt&&a(o.userPrompt);const u=[];l.filesRestored>0&&u.push(`${l.filesRestored} file${l.filesRestored>1?"s":""} restored`),l.filesDeleted>0&&u.push(`${l.filesDeleted} file${l.filesDeleted>1?"s":""} deleted`),l.messagesRemoved>0&&u.push(`${l.messagesRemoved} message${l.messagesRemoved>1?"s":""} removed`);const d=u.length>0?`Restored to checkpoint: ${u.join(", ")}.`:"Restored to checkpoint.";return r(e=>[...e,xo(d)]),void s("Ready...")}r(e=>[...e,Lo(`Failed to restore: ${l.error}`)]),s("Restore failed")}catch(e){const t=`Failed to restore checkpoint: ${e instanceof Error?e.message:"Unknown error"}`;r(e=>[...e,Lo(t)]),s("Ready...")}}function handleRewindCancel({setShowRewindSelector:e}){e(!1)}async function handleLoginCommand({setFeed:e,setShowLoginOverlay:t}){const n=Lt();if(await getAuthKey(n)){let t="";try{const e=await loadCredentials();t=e?.userName||""}catch(e){process.env.DEBUG&&console.error("Failed to load credentials for display:",e)}const n=t&&"API Key"!==t&&"Manual API Key"!==t?` as ${t}`:"";return void e(e=>[...e,xo(`Already logged in${n}`)])}t(!0)}function handleLoginComplete({success:e,message:t,setShowLoginOverlay:n,setFeed:r,setStatus:s,contextEngineRef:o}){if(n(!1),!e)return r(e=>[...e,Lo(t)]),void s("Ready...");r(e=>[...e,xo(t)]),o.current&&o.current.refreshRequest(),s("Ready...")}function handleLoginCancel({setShowLoginOverlay:e,setFeed:t,setStatus:n}){e(!1),t(e=>[...e,xo("Authentication cancelled.")]),n("Ready...")}async function handleLogoutCommand({setFeed:e,contextEngineRef:t}){const n=await performLogout();if(!n.success)return void e(e=>[...e,Lo(`Logout failed: ${n.error}`)]);if(t.current&&t.current.refreshRequest(),!n.wasAuthenticated)return void e(e=>[...e,xo("Not currently authenticated.")]);const r=n.warnings.length>0?`Successfully logged out from Command Code. Warnings: ${n.warnings.join(", ")}`:"Successfully logged out from Command Code.";e(e=>[...e,xo(r)])}__name(getSystemInfo,"getSystemInfo"),__name(buildGitHubIssueUrl,"buildGitHubIssueUrl"),Nt(),__name(createOSC8Link,"createOSC8Link"),Nt(),__name(parsePositionalArguments,"parsePositionalArguments"),__name(parseCommandInput,"parseCommandInput"),__name(processCommandTemplate,"processCommandTemplate"),PC(),Nt(),Jo(),PC(),$E(),__name(handleCompactCommand,"handleCompactCommand"),Nt(),Jo(),PC(),__name(handleRewindCommand,"handleRewindCommand"),__name(handleRewindSelect,"handleRewindSelect"),__name(handleRewindCancel,"handleRewindCancel"),Nt(),Jo(),Qs(),Jr(),xs(),Ot(),__name(handleLoginCommand,"handleLoginCommand"),__name(handleLoginComplete,"handleLoginComplete"),__name(handleLoginCancel,"handleLoginCancel"),__name(handleLogoutCommand,"handleLogoutCommand"),Nt(),Sl(),$n(),nr();var Zv=Ve(x);function getVsixPath(){try{const e=t.dirname(u(import.meta.url)),n=t.join(e,"..","vsix","commandcode-vscode.vsix");return S.existsSync(n)?n:null}catch{return null}}async function getExtensionStatus(e){if(!e)return{installed:!1,version:null,connected:!1};const[t,n]=await Promise.all([checkInstalled(e),dl.isAvailable(500)]);return{...t,connected:n}}async function checkInstalled(e){try{const{stdout:t}=await Zv(`${e} --list-extensions --show-versions`,{timeout:5e3}),n=t.match(new RegExp("commandcode.commandcode-vscode@([\\d.]+)","i"));return n?{installed:!0,version:n[1]}:{installed:!1,version:null}}catch{return{installed:!1,version:null}}}async function installExtension(e){if(!e)return{success:!1,error:"No IDE detected"};const t=getVsixPath();if(!t)return{success:!1,error:"VSIX not bundled"};try{return await Zv(`${e} --install-extension "${t}" --force`,{timeout:3e4}),dlog(`[IDE] Extension installed for ${e}`),{success:!0}}catch(e){return{success:!1,error:e instanceof Error?e.message:String(e)}}}function installExtensionAsync(e){e&&installExtension(e).catch(()=>{})}async function isAutoInstallEnabled(){try{return!1!==(await loadUserConfig()).autoInstallExtension}catch{return!0}}__name(getVsixPath,"getVsixPath"),__name(getExtensionStatus,"getExtensionStatus"),__name(checkInstalled,"checkInstalled"),__name(installExtension,"installExtension"),__name(installExtensionAsync,"installExtensionAsync"),__name(isAutoInstallEnabled,"isAutoInstallEnabled");var eT={code:"VS Code",cursor:"Cursor",windsurf:"Windsurf"};async function ensureExtensionInstalled(){if(process.env.CI)return;const e=sl();e&&await isAutoInstallEnabled()&&((await getExtensionStatus(e)).installed||installExtensionAsync(e))}function formatSetupResult(e){const t={connected:Be.green("✔"),installed:Be.green("✔"),needs_reload:Be.yellow("◌"),failed:Be.red("✖"),not_in_ide:Be.yellow("◌")},n={connected:`Connected to ${e.ide}`,installed:`Installed for ${e.ide}`,needs_reload:`${e.ide} extension needs reload`,failed:e.ide?`${e.ide} install failed`:"Install failed",not_in_ide:"Not in IDE"};return["",`${t[e.status]} ${n[e.status]}`,...(e.details??[]).map(e=>Be.dim(` ${e}`)),""]}async function runIDESetup(){const e=sl(),t=e?eT[e]||e:null;if(!e)return{status:"not_in_ide",ide:null,details:["Run Command Code from IDE's integrated terminal."]};const n=new dl,r=await n.connect(500);if(n.disconnect(),r)return{status:"connected",ide:t};const{installed:s}=await checkInstalled(e);return s?{status:"needs_reload",ide:t,details:['Reload IDE window to activate (Cmd+Shift+P → "Reload Window").']}:(await installExtension(e)).success?{status:"installed",ide:t,details:['Reload IDE window to activate (Cmd+Shift+P → "Reload Window").']}:{status:"failed",ide:t,details:[`Make sure "${e}" is available in your PATH.`,"Then run /ide to retry installation."]}}async function handleHelpCommand({setFeed:e}){const{createSystemEntry:t}=await Promise.resolve().then(()=>(Jo(),Yo));e(e=>[...e,t("KEYBOARD SHORTCUTS\nCOMMANDS")])}async function handleTerminalSetupCommand({setFeed:e}){const t=Ao(`/${Tt.TERMINAL_SETUP}`),n=setupVSCodeTerminal(),r=Oo(n.message,!n.success,n.details);e(e=>[...e,t,r])}async function handleIDESetupCommand({setFeed:e}){const t=await runIDESetup(),n=Do(t.status,t.ide,t.details);e(e=>[...e,n])}async function handleClearCommand({setFeed:e,setLiveAgents:t,setShareInfo:n,setShowShareNotification:r,setUnshareNotificationMessage:s,setStaticKey:o,setContextUsage:i,setInteractionTokens:a,contextEngineRef:l,setSessionId:u,createContextEngineCallbacks:d,clearSessionPermissions:m}){if(e([]),t([]),kC(),n(null),r(!1),s(""),l.current){const e=l.current.getSessionManager();e&&await e.deleteShareInfo(),l.current=null;const t=crypto.randomUUID();u(t),m();const{ContextEngine:n}=await Promise.resolve().then(()=>(_C(),TC));l.current=new n(d(t),t)}o(e=>e+1),i(null),a(0)}async function handleInitCommand({setFeed:e}){try{const t=process.cwd(),n=`Created AGENTS.md at ${await initProjectMemory(t)}. You can now edit it with /memory or open it in your editor.`;e(e=>[...e,xo(n)])}catch(t){const n=`Error: Failed to initialize AGENTS.md: ${t instanceof Error?t.message:"Unknown error"}`;e(e=>[...e,xo(n)])}}async function handleFeedbackCommand({setFeed:e},t){const n=buildGitHubIssueUrl(t);try{await ie(n,{wait:!1,background:!0}),e(e=>[...e,xo(`Opened ${createOSC8Link(n,"GitHub issue")} in your browser`)])}catch{const{createSystemEntry:t,createErrorEntry:r}=await Promise.resolve().then(()=>(Jo(),Yo));e(e=>[...e,r("Failed to open browser"),t(createOSC8Link(n,"Open GitHub issue manually"))])}}function handleLearnCommand({setAutoLearnTaste:e,setShowTasteOnboarding:t,setTasteOnboardingEntryId:n,setFeed:r}){e(!0),t(!0);const s=Mo();n(s.id),r(e=>[...e,s])}async function handleCommand(e,t){if(e.startsWith("/resume:")){const n=e.substring(8);return await handleSelectSession({selectedSessionId:n,sessionLoadIdRef:t.sessionLoadIdRef,contextEngineRef:t.contextEngineRef,setFeed:t.setFeed,setLiveAgents:t.setLiveAgents,setSessionId:t.setSessionId,setShowSessionSelector:t.setShowSessionSelector,setSessionLoaded:t.setSessionLoaded,setPermissionMode:t.setPermissionMode,setStaticKey:t.setStaticKey,setShareInfo:t.setShareInfo,createContextEngineCallbacks:t.createContextEngineCallbacks}),{status:"handled"}}const n=parseCommandInput({input:e});if(!n)return{status:"unknown"};const{commandName:r,rawArguments:s,positionalArgs:o}=n;if(Rv.has(r)&&s.trim().length>0)return{status:"unknown"};if("/exit"===r)return t.setShouldExit(!0),{status:"handled"};if("/clear"===r)return await handleClearCommand(t),{status:"handled"};if("/help"===r)return await handleHelpCommand(t),{status:"handled"};if("/share"===r)return await handleShareCommand({sessionId:t.sessionId,shareInfo:t.shareInfo,setShareInfo:t.setShareInfo,setStatus:t.setStatus,setShowShareNotification:t.setShowShareNotification,contextEngineRef:t.contextEngineRef}),{status:"handled"};if("/unshare"===r)return await handleUnshareCommand({sessionId:t.sessionId,shareInfo:t.shareInfo,setShareInfo:t.setShareInfo,setStatus:t.setStatus,setUnshareNotificationMessage:t.setUnshareNotificationMessage,contextEngineRef:t.contextEngineRef}),{status:"handled"};if("/taste"===r)return t.setShowTasteConfig(!0),{status:"handled"};if("/learn-taste"===r)return handleLearnCommand(t),{status:"handled"};if("/skills"===r)return t.setShowSkillsConfig(!0),{status:"handled"};if("/provider"===r)return isInternalTeamFlagEnforced()?(t.setShowProviderSelector(!0),{status:"handled"}):(t.setStatus("Provider selection not available"),{status:"handled"});if("/model"===r)return t.setShowModelSelector(!0),{status:"handled"};if("/memory"===r)return t.setShowMemorySelector(!0),{status:"handled"};if("/resume"===r)return t.setShowSessionSelector(!0),{status:"handled"};if("/init"===r)return await handleInitCommand(t),{status:"handled"};if("/agents"===r)return t.setShowAgentsConfig(!0),{status:"handled"};if("/mcp"===r)return t.setShowMcpManager(!0),{status:"handled"};if("/compact"===r)return await handleCompactCommand({contextEngineRef:t.contextEngineRef,setFeed:t.setFeed,setStatus:t.setStatus,setIsCmdCodeBusy:t.setIsCmdCodeBusy,setContextUsage:t.setContextUsage,setStaticKey:t.setStaticKey}),{status:"handled"};if("/rewind"===r)return handleRewindCommand({contextEngineRef:t.contextEngineRef,setFeed:t.setFeed,setShowRewindSelector:t.setShowRewindSelector}),{status:"handled"};if("/login"===r)return await handleLoginCommand({setFeed:t.setFeed,setShowLoginOverlay:t.setShowLoginOverlay}),{status:"handled"};if("/logout"===r)return await handleLogoutCommand({setFeed:t.setFeed,contextEngineRef:t.contextEngineRef}),{status:"handled"};if("/feedback"===r)return await handleFeedbackCommand(t),{status:"handled"};if("/terminal-setup"===r)return await handleTerminalSetupCommand(t),{status:"handled"};if("/ide"===r)return await handleIDESetupCommand(t),{status:"handled"};if("/add-dir"===r)return t.setShowAddDirModal(!0),{status:"handled"};if("/review"===r){const e=s.trim(),{handleSubmit:n}=await Promise.resolve().then(()=>(IC(),xC));return await n({input:buildReviewPrompt({prNumber:s}),role:"user",displayMessage:e?`/review ${e}`:"/review",feed:t.feed,setFeed:t.setFeed,isCmdCodeBusy:t.isCmdCodeBusy,setIsCmdCodeBusy:t.setIsCmdCodeBusy,setQueuedMessages:t.setQueuedMessages,setStatus:t.setStatus,setInteractionTokens:t.setInteractionTokens,updateStatus:t.updateStatus,setUpdateStatus:t.setUpdateStatus,billingLink:t.billingLink,setBillingLink:t.setBillingLink,contextEngineRef:t.contextEngineRef,isSubmittingRef:t.isSubmittingRef,setInput:t.setInput,setStaticKey:t.setStaticKey,executeBash:t.executeBash}),{status:"handled"}}if("/pr-comments"===r)return await handleSubmit({input:"Fetch and display all comments from the current GitHub pull request.\n\n Run these commands in order:\n\n 1. `gh pr view --json number,headRepository` — if this fails, reply \"No comments found.\" and stop.\n 2. `gh api --paginate '/repos/{owner}/{repo}/issues/NUMBER/comments' --jq '.[] | {body,\n user: .user.login, id, created_at}' > /tmp/pr-NUMBER-issue-comments.json`\n 3. `gh api --paginate '/repos/{owner}/{repo}/pulls/NUMBER/comments' --jq '.[] | {body,\n diff_hunk: (.diff_hunk | split(\"\n\") | .[-5:] | join(\"\n\")), path, line, user: .user.login,\n in_reply_to_id, id, created_at}' > /tmp/pr-NUMBER-review-comments.json`\n\n If both return empty, reply \"No comments found.\"\n\n `{owner}` and `{repo}` are gh template variables — write them literally, never substitute. Always\n use `--jq` (not piped `| jq`).\n\n Read the temp JSON files to build output comments directly in markdown using the format:\n\n ## PR Comments\n\n - @author (date):\n > body\n\n ## Review Comments\n\n - @author path#line:\n ```diff (replace ```suggestion code blocks with ```diff to avoid rendering errors)\n [diff_hunk]\n ```\n > body [replies indented by in_reply_to_id]\n\n Number the comments in the order they were created (created_at).\n No explanatory text, no horizontal rules. No extra space in the end.",role:"user",displayMessage:"/pr-comments",feed:t.feed,setFeed:t.setFeed,isCmdCodeBusy:t.isCmdCodeBusy,setIsCmdCodeBusy:t.setIsCmdCodeBusy,setQueuedMessages:t.setQueuedMessages,setStatus:t.setStatus,setInteractionTokens:t.setInteractionTokens,updateStatus:t.updateStatus,setUpdateStatus:t.setUpdateStatus,billingLink:t.billingLink,setBillingLink:t.setBillingLink,contextEngineRef:t.contextEngineRef,isSubmittingRef:t.isSubmittingRef,setInput:t.setInput,setStaticKey:t.setStaticKey,executeBash:t.executeBash}),{status:"handled"};const i=getCustomCommandContent(r);if(i){const e=processCommandTemplate({template:i,rawArguments:s,positionalArgs:o}),{handleSubmit:n}=await Promise.resolve().then(()=>(IC(),xC));return await n({input:e.content,role:"user",feed:t.feed,setFeed:t.setFeed,isCmdCodeBusy:t.isCmdCodeBusy,setIsCmdCodeBusy:t.setIsCmdCodeBusy,setQueuedMessages:t.setQueuedMessages,setStatus:t.setStatus,setInteractionTokens:t.setInteractionTokens,updateStatus:t.updateStatus,setUpdateStatus:t.setUpdateStatus,billingLink:t.billingLink,setBillingLink:t.setBillingLink,contextEngineRef:t.contextEngineRef,isSubmittingRef:t.isSubmittingRef,setInput:t.setInput,setStaticKey:t.setStaticKey,executeBash:t.executeBash}),{status:"handled"}}return{status:"unknown"}}function useCommandCtx({feedState:e,sessionState:t,statusState:n,uiOverlays:r,onboarding:s,exitState:o,permissionState:i,contextEngineRef:a,isSubmittingRef:l,executeBash:u,createContextEngineCallbacks:d,setInput:m}){const p=H(()=>({feed:e.feed,setFeed:e.setFeed,setLiveAgents:e.setLiveAgents,setQueuedMessages:e.setQueuedMessages,setStatus:n.setStatus,setInteractionTokens:n.setInteractionTokens,setContextUsage:n.setContextUsage,setStaticKey:r.setStaticKey,updateStatus:n.updateStatus,setUpdateStatus:n.setUpdateStatus,billingLink:n.billingLink,setBillingLink:n.setBillingLink,shareInfo:n.shareInfo,setShareInfo:n.setShareInfo,setShowShareNotification:n.setShowShareNotification,setUnshareNotificationMessage:n.setUnshareNotificationMessage,setShowTasteConfig:r.setShowTasteConfig,setShowSkillsConfig:r.setShowSkillsConfig,setShowProviderSelector:r.setShowProviderSelector,setShowModelSelector:r.setShowModelSelector,setShowMemorySelector:r.setShowMemorySelector,setShowAgentsConfig:r.setShowAgentsConfig,setShowMcpManager:r.setShowMcpManager,setShowRewindSelector:r.setShowRewindSelector,setShowAddDirModal:r.setShowAddDirModal,setShowLoginOverlay:r.setShowLoginOverlay,setShowTasteOnboarding:s.setShowTasteOnboarding,setAutoLearnTaste:s.setAutoLearnTaste,setTasteOnboardingEntryId:s.setTasteOnboardingEntryId,sessionId:t.sessionId,setSessionId:t.setSessionId,sessionLoadIdRef:t.sessionLoadIdRef,sessionLoaded:t.sessionLoaded,setSessionLoaded:t.setSessionLoaded,setShowSessionSelector:r.setShowSessionSelector,setPermissionMode:i.setPermissionMode,contextEngineRef:a,clearSessionPermissions:i.clearSessionPermissions,createContextEngineCallbacks:d,setShouldExit:o.setShouldExit,setInput:m,isSubmittingRef:l,isCmdCodeBusy:e.isCmdCodeBusy,setIsCmdCodeBusy:e.setIsCmdCodeBusy,executeBash:u}),[e,t,n,r,s,o,i,a,l,u,d,m]),g=Q(p);return g.current=p,{commandCtx:p,onCommand:V(e=>handleCommand(e,g.current),[])}}async function handleProviderSelect({provider:e,setCurrentProvider:t,setShowProviderSelector:n,setAuthComponentInfo:r,setStatus:s,setShowProviderNotification:o,providerNotificationTimer:i}){try{const a=getProviderConfig(e);if(a?.requiresAuth&&a.checkAuth&&!await a.checkAuth()&&a.authComponent)return void r({provider:e,Component:a.authComponent});await updateUserConfig({provider:e}),t(e),n(!1),s(`Provider set to ${getProviderDisplayName(e)}`),i.current&&clearTimeout(i.current),o(!0),i.current=setTimeout(()=>{o(!1),i.current=null},5e3)}catch(e){console.error("Failed to set provider:",e),s("Failed to set provider"),n(!1)}}function handleProviderCancel({setShowProviderSelector:e}){e(!1)}function handleAuthSuccess({authComponentInfo:e,setAuthComponentInfo:t,setShowProviderSelector:n,setCurrentProvider:r,setStatus:s,setShowProviderNotification:o,providerNotificationTimer:i}){e&&(t(null),n(!1),r(e.provider),s(`${getProviderDisplayName(e.provider)} authentication successful`),i.current&&clearTimeout(i.current),o(!0),i.current=setTimeout(()=>{o(!1),i.current=null},5e3))}function handleAuthCancel({setAuthComponentInfo:e}){e(null)}function getModelDisplayName(e){const t=Object.values(kt).find(t=>t.id===e);return t?t.name:e}async function handleModelSelect({modelId:e,setCurrentModel:t,setShowModelSelector:n,setStatus:r,modelNotificationTimer:s,setShowModelNotification:o}){try{await setSelectedModel({model:e}),t(e),n(!1),r(`Model set to ${getModelDisplayName(e)}`),s.current&&clearTimeout(s.current),o(!0),s.current=setTimeout(()=>{o(!1),s.current=null},5e3)}catch(e){console.error("Failed to set model:",e),r("Failed to set model"),n(!1)}}function handleModelCancel({setShowModelSelector:e}){e(!1)}__name(ensureExtensionInstalled,"ensureExtensionInstalled"),__name(formatSetupResult,"formatSetupResult"),__name(runIDESetup,"runIDESetup"),IC(),__name(handleHelpCommand,"handleHelpCommand"),__name(handleTerminalSetupCommand,"handleTerminalSetupCommand"),__name(handleIDESetupCommand,"handleIDESetupCommand"),__name(handleClearCommand,"handleClearCommand"),__name(handleInitCommand,"handleInitCommand"),__name(handleFeedbackCommand,"handleFeedbackCommand"),__name(handleLearnCommand,"handleLearnCommand"),__name(handleCommand,"handleCommand"),__name(useCommandCtx,"useCommandCtx"),Nt(),Nt(),ir(),nr(),__name(handleProviderSelect,"handleProviderSelect"),__name(handleProviderCancel,"handleProviderCancel"),__name(handleAuthSuccess,"handleAuthSuccess"),__name(handleAuthCancel,"handleAuthCancel"),Nt(),Ot(),nr(),__name(getModelDisplayName,"getModelDisplayName"),__name(handleModelSelect,"handleModelSelect"),__name(handleModelCancel,"handleModelCancel");var tT=__name(e=>{},"noopBool");function useMainActionCallbacks({feedState:e,sessionState:t,statusState:n,authState:r,uiOverlays:s,permissionState:o,contextEngineRef:i,createContextEngineCallbacks:a,setInput:l}){const u=Q({feedState:e,sessionState:t,statusState:n,authState:r,uiOverlays:s,permissionState:o,contextEngineRef:i,createContextEngineCallbacks:a,setInput:l});return u.current={feedState:e,sessionState:t,statusState:n,authState:r,uiOverlays:s,permissionState:o,contextEngineRef:i,createContextEngineCallbacks:a,setInput:l},{onSelectSession:V(e=>{const{feedState:t,sessionState:n,statusState:r,uiOverlays:s,permissionState:o,contextEngineRef:i,createContextEngineCallbacks:a}=u.current;handleSelectSession({selectedSessionId:e,sessionLoadIdRef:n.sessionLoadIdRef,contextEngineRef:i,setFeed:t.setFeed,setLiveAgents:t.setLiveAgents,setSessionId:n.setSessionId,setShowSessionSelector:s.setShowSessionSelector,setSessionLoaded:n.setSessionLoaded,setPermissionMode:o.setPermissionMode,setStaticKey:s.setStaticKey,setShareInfo:r.setShareInfo,createContextEngineCallbacks:a})},[]),onNewSession:V(()=>{const{feedState:e,sessionState:t,uiOverlays:n,permissionState:r,contextEngineRef:s}=u.current;handleNewSession({contextEngineRef:s,setFeed:e.setFeed,setLiveAgents:e.setLiveAgents,setSessionId:t.setSessionId,setShowSessionSelector:n.setShowSessionSelector,setSessionLoaded:t.setSessionLoaded,setPermissionMode:r.setPermissionMode})},[]),onRewindSelect:V(({messageId:e,mode:t})=>{const{feedState:n,statusState:r,uiOverlays:s,contextEngineRef:o,setInput:i}=u.current;handleRewindSelect({messageId:e,mode:t,contextEngineRef:o,setFeed:n.setFeed,setStatus:r.setStatus,setShowRewindSelector:s.setShowRewindSelector,setStaticKey:s.setStaticKey,setInput:i})},[]),onRewindCancel:V(()=>{handleRewindCancel({setShowRewindSelector:u.current.uiOverlays.setShowRewindSelector})},[]),onLoginComplete:V((e,t)=>{const{feedState:n,statusState:r,uiOverlays:s,contextEngineRef:o}=u.current;handleLoginComplete({success:e,message:t,setShowLoginOverlay:s.setShowLoginOverlay,setFeed:n.setFeed,setStatus:r.setStatus,contextEngineRef:o})},[]),onLoginCancel:V(()=>{const{feedState:e,statusState:t,uiOverlays:n}=u.current;handleLoginCancel({setShowLoginOverlay:n.setShowLoginOverlay,setFeed:e.setFeed,setStatus:t.setStatus})},[]),handleProviderSelect:V(e=>{const{authState:t,statusState:n,uiOverlays:r}=u.current;handleProviderSelect({provider:e,setCurrentProvider:t.setCurrentProvider,setShowProviderSelector:r.setShowProviderSelector,setAuthComponentInfo:t.setAuthComponentInfo,setStatus:n.setStatus,setShowProviderNotification:t.setShowProviderNotification,providerNotificationTimer:t.providerNotificationTimer})},[]),handleProviderCancel:V(()=>{handleProviderCancel({setShowProviderSelector:u.current.uiOverlays.setShowProviderSelector})},[]),handleModelSelect:V(e=>{const{authState:t,statusState:n,uiOverlays:r}=u.current;handleModelSelect({modelId:e,setCurrentModel:t.setCurrentModel,setShowModelSelector:r.setShowModelSelector,setStatus:n.setStatus,modelNotificationTimer:t.modelNotificationTimer,setShowModelNotification:tT})},[]),handleModelCancel:V(()=>{handleModelCancel({setShowModelSelector:u.current.uiOverlays.setShowModelSelector})},[]),handleAuthSuccess:V(()=>{const{authState:e,statusState:t,uiOverlays:n}=u.current;handleAuthSuccess({authComponentInfo:e.authComponentInfo,setAuthComponentInfo:e.setAuthComponentInfo,setShowProviderSelector:n.setShowProviderSelector,setCurrentProvider:e.setCurrentProvider,setStatus:t.setStatus,setShowProviderNotification:e.setShowProviderNotification,providerNotificationTimer:e.providerNotificationTimer})},[]),handleAuthCancel:V(()=>{handleAuthCancel({setAuthComponentInfo:u.current.authState.setAuthComponentInfo})},[])}}__name(useMainActionCallbacks,"useMainActionCallbacks"),Nt(),Nt(),Nt();var nT=__name(({staticKey:e})=>B.createElement(J,{items:[{staticKey:e}],key:e},()=>B.createElement(Y,{key:e},"\0")),"Responsive");Nt(),Ot(),rr();var rT=__name(({onTrust:e,onExit:t})=>{const{exit:n}=te(),[r,s]=W(1),o=process.cwd().replace(process.env.HOME||"","~");return Z((o,i)=>{i.upArrow||i.downArrow?s(1===r?2:1):i.return?1===r?e():(t(),n()):"1"===o?e():("2"===o||i.escape||i.ctrl&&"c"===o)&&(t(),n())}),B.createElement(K,{flexDirection:"column",borderStyle:"single",borderColor:Ln.YELLOW,padding:1},B.createElement(Y,{color:Ln.YELLOW,bold:!0},"Do you trust the files in this folder?"),B.createElement(K,{marginTop:1},B.createElement(Y,{color:Ln.GRAY},o)),B.createElement(K,{marginTop:1,flexDirection:"column"},B.createElement(Y,null,"Command Code may read files in this folder. Reading untrusted files may lead Command Code to behave in unexpected ways."),B.createElement(K,{marginTop:1},B.createElement(Y,null,"With your permission Command Code may execute files in this folder. Executing untrusted code is unsafe."))),B.createElement(K,{marginTop:1,flexDirection:"column"},B.createElement(K,null,B.createElement(Y,{color:1===r?Ln.CYAN:Ln.GRAY},1===r?be.pointer:" "," 1. Yes, proceed")),B.createElement(K,null,B.createElement(Y,{color:2===r?Ln.CYAN:Ln.GRAY},2===r?be.pointer:" "," 2. No, exit"))))},"TrustPrompt"),sT=U(__name(function TrustView2({staticKey:e,onTrust:t,onExit:n}){return B.createElement(B.Fragment,null,B.createElement(nT,{staticKey:e}),B.createElement(rT,{onTrust:t,onExit:n}))},"TrustView"));Nt(),Nt(),CE(),jr(),rr();var oT=__name(({onSelectSession:e,onNewSession:t})=>{const{exit:n}=te(),[r,s]=W([]),[o,i]=W(0),[a,l]=W(!0),[u,d]=W(0),m=30;G(()=>{p()},[]);const p=__name(async()=>{l(!0);const e=await Yb.listSessions();s(e),l(!1)},"loadSessions");if(Z((t,s)=>{s.upArrow?i(e=>{const t=Math.max(0,e-1);return t<u&&d(t),t}):s.downArrow?i(e=>{const t=Math.min(r.length-1,e+1);return t>=u+m&&d(t-m+1),t}):s.return?r.length>0&&e(r[o].id):(s.escape||s.ctrl&&"c"===t)&&n()}),a)return B.createElement(K,{flexDirection:"column",paddingLeft:2,paddingTop:1},B.createElement(Y,{color:Ln.GRAY},"Loading sessions..."));const g=__name(e=>{const t=new Date(e),n=(new Date).getTime()-t.getTime(),r=Math.floor(n/6e4),s=Math.floor(n/36e5),o=Math.floor(n/864e5),i=Math.floor(n/6048e5);return r<1?"just now":r<60?`${r} min ago`:s<24?`${s} hour${s>1?"s":""} ago`:o<7?`${o} day${o>1?"s":""} ago`:1===i?"1 week ago":`${i} weeks ago`},"formatRelativeTime"),h=__name(e=>truncateString({text:e,maxChars:Nr}),"truncateMessage");if(0===r.length)return B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Ln.GRAY},"No sessions available"));const f=r.slice(u,u+m),y=u;return B.createElement(K,{flexDirection:"column",paddingLeft:1,width:"100%"},r.length>m&&B.createElement(K,{marginBottom:1},B.createElement(Y,{color:Ln.DIM},"Showing ",u+1,"-",Math.min(u+m,r.length)," ","of ",r.length," sessions",u>0&&" (↑ for more)",u+m<r.length&&" (↓ for more)")),B.createElement(K,{columnGap:2,marginBottom:1},B.createElement(K,{width:7},B.createElement(Y,{color:Ln.GRAY}," ")),B.createElement(K,{width:13},B.createElement(Y,{color:Ln.GRAY},"Modified")),B.createElement(K,{width:11},B.createElement(Y,{color:Ln.GRAY},"# Messages")),B.createElement(K,{width:20},B.createElement(Y,{color:Ln.GRAY},"Git Branch")),B.createElement(K,null,B.createElement(Y,{color:Ln.GRAY},"Summary"))),B.createElement(K,{columnGap:2},B.createElement(K,{flexDirection:"column",width:7},f.map((e,t)=>{const n=y+t;return B.createElement(Y,{key:`sel-${n}`,color:o===n?Ln.CYAN:Ln.GRAY},o===n?`${be.pointer} ${n+1}.`:` ${n+1}.`)})),B.createElement(K,{flexDirection:"column",width:13},f.map((e,t)=>{const n=y+t;return B.createElement(Y,{key:`mod-${e.id}`,color:o===n?Ln.WHITE:Ln.GRAY},g(e.lastModified))})),B.createElement(K,{flexDirection:"column",width:11},f.map((e,t)=>{const n=y+t;return B.createElement(Y,{key:`msg-${e.id}`,color:o===n?Ln.WHITE:Ln.GRAY},e.messageCount)})),B.createElement(K,{flexDirection:"column",width:20},f.map((e,t)=>{const n=y+t;return B.createElement(Y,{key:`branch-${e.id}`,color:o===n?Ln.WHITE:Ln.GRAY,wrap:"truncate-end"},e.gitBranch||"-")})),B.createElement(K,{flexDirection:"column"},f.map((e,t)=>{const n=y+t;return B.createElement(Y,{key:`summary-${e.id}`,color:o===n?Ln.WHITE:Ln.GRAY},h(e.firstMessage))}))))},"SessionTable"),iT=U(__name(function SessionView2({onSelectSession:e,onNewSession:t}){return B.createElement(oT,{onSelectSession:e,onNewSession:t})},"SessionView"));Nt(),Nt(),vn(),rr();var aT=__name((e,t)=>{if(!e.startsWith("option_"))return null;const n=e.slice(7),r=parseInt(n,10);return Number.isNaN(r)||r<0||r>t?null:r},"parseOptionIndex"),lT=__name(({questions:e,currentIndex:t,answeredQuestions:n,isReviewPage:r,hideReview:s=!1})=>{if(s&&1===e.length)return null;const o=[];if(e.forEach((s,i)=>{const a=i===t&&!r,l=n.has(i);let u,d;a?(u=be.bullet,d=Ln.CYAN):l?(u=be.tick,d=Ln.GREEN):(u=be.circle,d=Ln.GRAY),o.push(B.createElement(Y,{key:i},B.createElement(Y,{color:d},u),B.createElement(Y,{color:a?Ln.CYAN:void 0}," ",s.header),i<e.length-1?B.createElement(Y,{dimColor:!0}," | "):null))}),!s){const e=r;o.push(B.createElement(Y,{key:"review"},B.createElement(Y,{dimColor:!0}," | "),B.createElement(Y,{color:e?Ln.CYAN:Ln.GRAY},e?be.bullet:be.circle),B.createElement(Y,{color:e?Ln.CYAN:void 0,bold:e}," ","Review")))}return B.createElement(K,null,o)},"TabIndicator"),cT=__name(({questions:e,onResponse:t,hideCustomInput:n=!1})=>{const[r,s]=W(0),[o,i]=W(new Map),a=Q(new Map),[l,u]=W(""),[d,m]=W(new Set),[p,g]=W(null),[h,f]=W(!1),[y,w]=W(!1),[S,b]=W(!1),[E,C]=W(null),[v,T]=W(!1),k=e[r],_=k?.multiSelect??!1,P=o.get(r),A=k?[...k.options.map((e,t)=>({label:e.label,value:`option_${t}`,description:e.description}))]:[],x=A.map((e,t)=>({label:` ${t+1}. ${e.label}`,value:e.value})),I=new Map(x.map((e,t)=>[e.label,A[t]])),N=__name(e=>{"submit"===e.value?D():"cancel"===e.value&&t({answers:[]})},"handleReviewSelect"),R=__name(()=>{if(!P||0===P.length)return 0;const e=P[0],t=k.options.findIndex(t=>t.label===e);return t>=0?t:0},"getInitialIndex"),$=__name(e=>{if(!h)if(_){const t=aT(e.value,k.options.length-1);if(null===t)return;const n=k.options[t]?.label||"";m(e=>{const t=new Set(e);return t.has(n)?t.delete(n):t.add(n),t})}else{const t=aT(e.value,k.options.length-1);if(null===t)return;f(!0);const n=k.options[t]?.label||"";O([n])}},"handleSelect"),L=__name(()=>{if(h)return;f(!0);const e=Array.from(d);O(e)},"handleMultiSelectDone"),M=__name(()=>{if(!h&&l.trim())if(_){const e=new Set(k.options.map(e=>e.label));m(t=>{const n=new Set;return t.forEach(t=>{e.has(t)&&n.add(t)}),n.add(l.trim()),n})}else f(!0),O([l.trim()])},"handleOtherSubmit"),O=__name(t=>{a.current.set(r,t);const o=new Map(a.current);i(o);const l=__name(t=>{const n=e[t],r=a.current.get(t);if(n?.multiSelect&&r){m(new Set(r));const e=r.find(e=>!n.options.some(t=>t.label===e));u(e||"")}else if(m(new Set),n?.multiSelect||1!==r?.length)u("");else{const e=r[0],t=!n?.options.some(t=>t.label===e);u(t&&e?e:"")}},"restoreStateForQuestion");if(r<e.length-1){const e=r+1;l(e),s(e),f(!1),b(!1),C(null),T(!1)}else if(e.every((e,t)=>o.has(t))){if(n&&1===e.length)return void D();m(new Set),u(""),w(!0),f(!1)}else{const t=e.findIndex((e,t)=>!o.has(t));-1!==t&&(l(t),s(t)),f(!1),b(!1),C(null),T(!1)}},"finishQuestion"),D=__name(()=>{const n=e.map((e,t)=>({questionIndex:t,selectedOptions:a.current.get(t)||[]}));t({answers:n})},"submitAnswers"),q=__name(t=>{w(!1),s(t),T(!1),b(!1),C(null);const n=e[t],r=a.current.get(t);if(n?.multiSelect&&r){m(new Set(r));const e=r.find(e=>!n.options.some(t=>t.label===e));u(e||"")}else if(m(new Set),n?.multiSelect||1!==r?.length)u("");else{const e=r[0],t=!n.options.some(t=>t.label===e);u(t&&e?e:"")}},"editQuestion"),F=__name(t=>{if(t<0||t>=e.length)return;_&&(d.size>0?a.current.set(r,Array.from(d)):a.current.delete(r),i(new Map(a.current))),f(!1),b(!1),C(null),T(!1);const n=e[t],o=a.current.get(t);if(n?.multiSelect&&o){m(new Set(o));const e=o.find(e=>!n.options.some(t=>t.label===e));u(e||"")}else if(m(new Set),n?.multiSelect||1!==o?.length)u("");else{const e=o[0],t=!n.options.some(t=>t.label===e);u(t&&e?e:"")}s(t)},"navigateToQuestion"),j=__name(()=>{if(!p||!_)return;if("done"===p.value)return;const e=aT(p.value,k.options.length-1);if(null===e)return;const t=k.options[e]?.label||"";m(e=>{const n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n})},"toggleMultiSelection");return Z((t,s)=>{if(" "===t&&_&&!S&&j(),"d"!==t||!_||S||y||L(),!y&&!h){if(s.downArrow&&!S&&!v&&!n&&p&&x.length>0&&p.value===x[x.length-1]?.value&&b(!0),s.upArrow&&!S&&!v&&p&&x.length>0&&p.value===x[0]?.value&&(_?T(!0):n||(b(!0),C(x.length-1))),s.upArrow&&S){b(!1),C(x.length-1);const e=x[x.length-1];e&&g(e)}if(s.downArrow&&S)if(b(!1),_)T(!0);else{C(0);const e=x[0];e&&g(e)}if(s.upArrow&&v&&(T(!1),b(!0)),s.downArrow&&v){T(!1),C(0);const e=x[0];e&&g(e)}s.return&&v&&_&&L()}if(h||S||v||(y?s.leftArrow&&q(e.length-1):s.leftArrow&&r>0?F(r-1):s.rightArrow&&(r<e.length-1?F(r+1):(_&&(d.size>0?a.current.set(r,Array.from(d)):a.current.delete(r),i(new Map(a.current))),w(!0)))),s.escape&&!h)if(y)w(!1);else if(S){b(!1);const e=E??x.length-1;C(e);const t=x[e];t&&g(t)}else if(v){T(!1);const e=x[x.length-1];e&&g(e)}}),k||y?y?B.createElement(K,{flexDirection:"column",borderStyle:"single",borderColor:Ln.GRAY,borderTop:!0,borderBottom:!1,borderLeft:!1,borderRight:!1,width:"100%"},B.createElement(K,{marginBottom:1},B.createElement(lT,{questions:e,currentIndex:e.length,answeredQuestions:new Set(o.keys()),isReviewPage:!0})),e.map((e,t)=>B.createElement(K,{key:t,marginBottom:1,flexDirection:"column"},B.createElement(Y,{dimColor:!0},t+1,". ",e.question),B.createElement(Y,{color:Ln.GREEN}," ",o.get(t)?.join(", ")||"No answer"))),B.createElement(Ke,{items:[{label:" 1. Submit",value:"submit"},{label:" 2. Cancel",value:"cancel"}],onSelect:N,initialIndex:0,indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:Ln.CYAN},e?be.pointer:" "),itemComponent:({label:e,isSelected:t})=>B.createElement(Y,{color:t?Ln.CYAN:Ln.WHITE},e)}),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},be.arrowLeft," to go back and edit"))):B.createElement(K,{flexDirection:"column",borderStyle:"single",borderColor:Ln.GRAY,borderTop:!0,borderBottom:!1,borderLeft:!1,borderRight:!1,width:"100%"},B.createElement(K,{marginBottom:1},B.createElement(lT,{questions:e,currentIndex:r,answeredQuestions:new Set(o.keys()),isReviewPage:!1,hideReview:n})),B.createElement(K,{marginBottom:1},B.createElement(Y,{bold:!0},k.question)),S||v?B.createElement(K,{flexDirection:"column"},x.map((e,t)=>{const n=I.get(e.label),r=_&&n&&d.has(n.label),s=!_&&n&&P?.includes(n.label),o=r||s;return B.createElement(K,{key:t,flexDirection:"column"},B.createElement(K,null,B.createElement(Y,null," "),B.createElement(Y,{color:o?Ln.GREEN:Ln.WHITE}," ",t+1,"."," "),_&&(o?B.createElement(Y,{color:Ln.GREEN},"[",be.tick,"]"," "):B.createElement(Y,{dimColor:!0},"[ ] ")),B.createElement(Y,{color:o?Ln.GREEN:Ln.WHITE},n?.label||""),!_&&o&&B.createElement(Y,{color:Ln.GREEN}," ",be.tick)),n?.description&&B.createElement(K,null,B.createElement(Y,null," "),B.createElement(Y,{dimColor:!0},_?" ":" ",n.description)))})):B.createElement(Ke,{key:`${r}-${E??"default"}`,items:x,initialIndex:E??R(),onSelect:$,onHighlight:g,indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:Ln.CYAN},e?be.pointer:" "),itemComponent:({label:e,isSelected:t})=>{const n=I.get(e),r=_&&n&&d.has(n.label),s=!_&&n&&P?.includes(n.label),o=r||s,i=e.match(/^\s*(\d+)\.\s*(.*)$/),a=i?.[1]||"",l=i?.[2]||e;return B.createElement(K,{flexDirection:"column"},B.createElement(K,null,B.createElement(Y,{color:t?Ln.CYAN:o?Ln.GREEN:Ln.WHITE}," ",a,"."," "),_&&(o?B.createElement(Y,{color:Ln.GREEN},"[",be.tick,"]"," "):B.createElement(Y,{dimColor:!0},"[ ] ")),B.createElement(Y,{color:t?Ln.CYAN:o?Ln.GREEN:Ln.WHITE},l),!_&&o&&B.createElement(Y,{color:Ln.GREEN}," ",be.tick)),n?.description&&B.createElement(Y,{dimColor:!0},_?" ":" ",n.description))}}),!n&&B.createElement(K,null,B.createElement(Y,{color:Ln.CYAN},S?be.pointer:" "),B.createElement(Y,{color:S?Ln.CYAN:void 0}," ",x.length+1,"."," "),_&&(d.has(l.trim())?B.createElement(Y,{color:Ln.GREEN},"[",be.tick,"] "):B.createElement(Y,{dimColor:!0},"[ ] ")),B.createElement(TextInput,{value:l,onChange:e=>{const t=e.replace(/\r\n/g," ").replace(/[\r\n]/g," "),n=l.trim();u(t),_&&m(e=>{const r=new Set(e);return n&&r.has(n)&&r.delete(n),t.trim()&&r.add(t.trim()),r})},onSubmit:M,placeholder:"Type something...",focus:S,stripBracketedPaste:!0})),_&&B.createElement(K,null,B.createElement(Y,{color:Ln.CYAN},v?be.pointer:" "),B.createElement(Y,{color:v?Ln.CYAN:void 0,bold:v}," ",r===e.length-1?"Submit":"Next")),e.length>1&&B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"Enter to select | Arrow keys to navigate | Esc to cancel"))):null},"QuestionPrompt");function QuestionView({pendingQuestion:e,setPermissionMode:t,setPendingQuestion:n,setStatus:r,setStaticKey:s}){return B.createElement(K,{marginY:1},B.createElement(cT,{questions:e.params.questions,hideCustomInput:e.params.hideCustomInput,onResponse:o=>{if(e.params.exitPlanMode){const e=o.answers[0]?.selectedOptions[0]||"";e.startsWith("Yes, auto-accept")?(t("auto-accept"),kC(),s(e=>e+1)):e.startsWith("Yes, exit")&&(t("standard"),kC(),s(e=>e+1))}if(e.params.enterPlanMode){const e=o.answers[0]?.selectedOptions[0];e?.startsWith("Yes")&&(t("plan"),kC(),s(e=>e+1))}e.resolve(o),n(null),r("Answers submitted")}}))}PC(),__name(QuestionView,"QuestionView"),Nt(),Nt(),Ot(),rr(),Nt(),Jo(),en(),ar(),rr(),Nt(),rr();var uT=class extends Xe{static{__name(this,"FixedTerminalRenderer")}text(e){if(e&&"object"==typeof e&&Array.isArray(e.tokens)&&e.tokens.length>0){try{const t=this.parser;if(t&&"function"==typeof t.parseInline)return t.parseInline(e.tokens)}catch{}return e.raw||e.text||String(e)}return super.text(e)}hr(){return"\n"+Be.dim("───")+"\n"}blockquote(e){return"object"==typeof e&&(e=this.parser.parse(e.tokens)),this.o.blockquote(e.trim()).split("\n").map(e=>`│ ${e}`).join("\n")+"\n\n"}listDepth=0;list(e,t=!1,n=""){let r;this.listDepth++;try{r=super.list(e,t,n),r=r.replace(/\n[ \t]*(?:\u001b\[0m)+[ \t]*(?=\n)/g,""),1===this.listDepth&&(r=r.replace(/^ /gm,""))}finally{this.listDepth--}return r}},dT=new Je;dT.setOptions({renderer:new uT({strong:Be.bold,em:Be.italic,del:Be.dim.strikethrough,codespan:Be.hex(Yn.CODE),code:Be.hex(Yn.CODE),heading:Be.bold,firstHeading:Be.bold.hex(Yn.HEADING).underline,link:Be.hex(Ln.CYAN),href:Be.hex(Ln.CYAN).underline,blockquote:Be.hex(Ln.GRAY).italic,table:Be.reset,tableOptions:{style:{head:[Ln.CYAN],border:[Ln.GRAY]}},hr:Be.reset,paragraph:Be.reset,html:Be.hex(Ln.GRAY),showSectionPrefix:!1,unescape:!0,emoji:!0,tab:2}),breaks:!0,gfm:!0});var mT=/\u001b\]8;;([^\u0007]*)\u0007([^\u001b]*)\u001b\]8;;\u0007/g;function Markdown({children:e,color:t,dimColor:n,wrap:r}){const s=H(()=>{if(!e)return"";const t=[],n=e.replace(mT,e=>{const n=t.length;return t.push(e),`{{OSC8:${n}}}`});try{const r=dT.parse(n);if("string"!=typeof r)return e;return r.replace(/\{\{OSC8:(\d+)\}\}/g,(e,n)=>t[parseInt(n,10)]||"").replace(/^(\s*)\* /gm,"$1- ").replace(/\n{3,}/g,"\n\n").trim()}catch{return e}},[e]);return B.createElement(Y,{color:t,dimColor:n,wrap:r},s)}__name(Markdown,"Markdown"),jr();var pT=" │ ";function computeSimilarity({strA:e,strB:t}){const n=e.trim(),r=t.trim();if(n===r)return 1;if(!n||!r)return 0;const s=Object.create(null);for(let e=0;e<n.length;e++){const t=n[e];s[t]=(s[t]??0)+1}let o=0;for(let e=0;e<r.length;e++){const t=r[e],n=s[t];n&&(o++,s[t]=n-1)}return 2*o/(n.length+r.length)}function buildSimilarityMatrix(e,t,n){const r=new Float64Array(e.length*n);for(let s=0;s<e.length;s++)for(let o=0;o<n;o++)r[s*n+o]=computeSimilarity({strA:e[s],strB:t[o]});return r}function collectSimilarityCandidates(e,t,n){const r=[];for(let s=0;s<t;s++)for(let t=0;t<n;t++){const o=e[s*n+t];o>=.3&&r.push({score:o,removedIdx:s,addedIdx:t})}return r}function buildLinePairs(e,t){const n=e.length,r=t.length,s=new Map;if(n*r>200){const e=Math.min(n,r);for(let t=0;t<e;t++)s.set(t,t);return s}const o=collectSimilarityCandidates(buildSimilarityMatrix(e,t,r),n,r);o.sort((e,t)=>t.score-e.score);const i=new Set,a=new Set;for(const{removedIdx:e,addedIdx:t}of o)i.has(e)||a.has(t)||(s.set(e,t),i.add(e),a.add(t));return s}function groupAdjacentChanges(e){const t=[];let n=0;for(;n<e.length;){const r=e[n];if(!r.added&&!r.removed){const e=r.value.split("\n");""===e.at(-1)&&e.pop(),t.push({type:"context",contextLines:e,removedLines:[],addedLines:[]}),n++;continue}const s=[],o=[];for(;n<e.length&&(e[n].added||e[n].removed);){const t=e[n].value.split("\n");""===t.at(-1)&&t.pop(),e[n].removed?(s.push(...t),n++):(o.push(...t),n++)}t.push({type:"change",contextLines:[],removedLines:s,addedLines:o})}return t}function renderWordSegments({wordChanges:e,type:t,dimDiff:n}){const r="removed"===t?Fn.REMOVED_HIGHLIGHT_BG:Fn.ADDED_HIGHLIGHT_BG,s=[];let o=0;for(const i of e){if("removed"===t&&i.added)continue;if("added"===t&&i.removed)continue;const e="removed"===t?i.removed:i.added,a=i.value.replace(/\s/g," "),l=`${t}-${o++}-${e?"highlighted":"unchanged"}`;e?s.push(B.createElement(Y,{key:l,backgroundColor:r,dimColor:n},a)):s.push(B.createElement(Y,{key:l,color:Ln.WHITE,dimColor:n},a))}return s}function renderContextLine({line:e,lineNum:t,lineNumWidth:n,dimDiff:r,nodeKey:s}){return B.createElement(K,{key:s,width:"100%"},B.createElement(Y,{color:Fn.LINE_NUM,dimColor:r}," "+t.toString().padStart(n)),B.createElement(Y,{color:Fn.LINE_NUM,dimColor:r},pT),B.createElement(Y,{color:Ln.WHITE,dimColor:r}," ",e.replace(/\s/g," ")))}function renderContextGroup({lines:e,leadCount:t,trailCount:n,lineNumWidth:r,dimDiff:s,counters:o}){const i=[];if(t+n>=e.length){for(const t of e)i.push(renderContextLine({line:t,lineNum:o.newLineNum,lineNumWidth:r,dimDiff:s,nodeKey:"ctx-"+o.nodeKey++})),o.oldLineNum++,o.newLineNum++;return i}for(let n=0;n<t;n++)i.push(renderContextLine({line:e[n],lineNum:o.newLineNum,lineNumWidth:r,dimDiff:s,nodeKey:"ctx-"+o.nodeKey++})),o.oldLineNum++,o.newLineNum++;const a=e.length-t-n;a>0&&(o.oldLineNum+=a,o.newLineNum+=a,i.push(B.createElement(K,{key:"sep-"+o.nodeKey++},B.createElement(Y,{color:Fn.LINE_NUM,dimColor:s}," ".repeat(r+1)),B.createElement(Y,{color:Fn.LINE_NUM,dimColor:s},pT),B.createElement(Y,{color:Fn.LINE_NUM,dimColor:s},`⋮ ${a} line${1===a?"":"s"}`))));for(let t=e.length-n;t<e.length;t++)i.push(renderContextLine({line:e[t],lineNum:o.newLineNum,lineNumWidth:r,dimDiff:s,nodeKey:"ctx-"+o.nodeKey++})),o.oldLineNum++,o.newLineNum++;return i}function generateDiff({oldValue:e,newValue:t,filePath:n,permissionDenied:r=!1,showMetadata:s=!1,marginLeft:o=2,startLine:i=1,dimDiff:a=!1,maxLines:l}){const u=Ye.diffLines(e,t);let d=0,m=0;for(const e of u)e.added&&(d+=e.count||1),e.removed&&(m+=e.count||1);const p=u.reduce((e,t)=>e+(t.added?0:t.count||1),0),g=u.reduce((e,t)=>e+(t.removed?0:t.count||1),0),h=Math.max(3,(i+p-1).toString().length,(i+g-1).toString().length),f=groupAdjacentChanges(u),y=[],w={oldLineNum:i,newLineNum:i,nodeKey:0};for(let e=0;e<f.length;e++){const t=f[e];if("context"===t.type){const n=t.contextLines,r=e>0&&"change"===f[e-1].type,s=e<f.length-1&&"change"===f[e+1].type;if(!r&&!s){w.oldLineNum+=n.length,w.newLineNum+=n.length;continue}const o=r?Math.min(3,n.length):0,i=s?Math.min(3,Math.max(0,n.length-o)):0;y.push(...renderContextGroup({lines:n,leadCount:o,trailCount:i,lineNumWidth:h,dimDiff:a,counters:w}));continue}const{removedLines:n,addedLines:r}=t,s=buildLinePairs(n,r),o=new Map,i=new Map;for(const[e,t]of s){const s=Ye.diffWordsWithSpace(n[e],r[t]);o.set(e,s),i.set(t,s)}for(let e=0;e<n.length;e++){const t=o.get(e);y.push(B.createElement(K,{key:"rm-"+w.nodeKey++,width:"100%",backgroundColor:Fn.REMOVED_BG},B.createElement(Y,{color:Fn.REMOVED_TEXT,dimColor:a}," "+w.oldLineNum.toString().padStart(h)),B.createElement(Y,{color:Fn.LINE_NUM,dimColor:a},pT),B.createElement(Y,{color:Fn.REMOVED_TEXT,dimColor:a},"- "),t?renderWordSegments({wordChanges:t,type:"removed",dimDiff:a}):B.createElement(Y,{color:Fn.REMOVED_TEXT,dimColor:a},n[e].replace(/\s/g," ")))),w.oldLineNum++}for(let e=0;e<r.length;e++){const t=i.get(e);y.push(B.createElement(K,{key:"add-"+w.nodeKey++,width:"100%",backgroundColor:Fn.ADDED_BG},B.createElement(Y,{color:Fn.ADDED_TEXT,dimColor:a}," "+w.newLineNum.toString().padStart(h)),B.createElement(Y,{color:Fn.LINE_NUM,dimColor:a},pT),B.createElement(Y,{color:Fn.ADDED_TEXT,dimColor:a},"+ "),t?renderWordSegments({wordChanges:t,type:"added",dimDiff:a}):B.createElement(Y,{color:Fn.ADDED_TEXT,dimColor:a},r[e].replace(/\s/g," ")))),w.newLineNum++}}const S=void 0!==l&&y.length>l,b=S?y.slice(0,l):y;return{diffContent:B.createElement(K,{flexDirection:"column"},s&&!r&&B.createElement(Y,{color:Ln.GRAY},"Updated"," ",B.createElement(Y,{color:Ln.WHITE,bold:!0},n)," ","with ",B.createElement(Y,{color:Bn.SUCCESS},d)," ","addition",1!==d?"s":""," and"," ",B.createElement(Y,{color:Bn.ERROR},m)," removal",1!==m?"s":""),r&&B.createElement(Y,{color:Ln.RED},"Rejected update to",B.createElement(Y,{color:Ln.RED},` ${n}`)),B.createElement(K,{flexDirection:"column",marginLeft:o,marginRight:o+4,width:(process.stdout.columns||80)-2*o-8},b)),isTruncated:S,totalLines:y.length}}function formatTodosForDisplay(e){const t=Vo(e);return t?B.createElement(K,{flexDirection:"column"},t.map((e,t)=>{const n="completed"===e.status?be.checkboxOn:be.checkboxOff;let r,s=!1;switch(e.status){case"completed":r=Bn.SUCCESS,s=!0;break;case"in_progress":r=Bn.IN_PROGRESS;break;default:r=Ln.WHITE}return B.createElement(K,{key:e.id||t,flexDirection:"row"},B.createElement(K,{width:2},B.createElement(Y,{color:r},n)),B.createElement(Y,{color:r,bold:"in_progress"===e.status,strikethrough:s},e.content))})):B.createElement(Y,null,e)}function computeDisplayInput({input:e,isAgent:t,isShell:n,expandedOutput:r}){if(!e)return e;if(t){const t=e.split(/[.\n]/)[0];return t?t+(e.includes(".")||e.includes("\n")?".":""):e}return n&&!r?truncateCommand({command:e}):e}function resolveSymbol({isPending:e,hasError:t,isThinking:n,isTodos:r,output:s}){if(e)return{symbolColor:Ln.YELLOW,symbol:be.arrowRight};if(t)return{symbolColor:Ln.RED,symbol:be.nodejs};if(n)return{symbolColor:Dn,symbol:"✻"};if(r&&s){const e=Vo(s),t=e?.every(e=>"completed"===e.status);return{symbolColor:t?Bn.SUCCESS:Bn.WARNING,symbol:be.nodejs}}return{symbolColor:Bn.SUCCESS,symbol:be.nodejs}}function renderToolHeader({isThinking:e,isTasteFile:t,tasteCategory:n,name:r,output:s,expandedOutput:o,expandKey:i}){if(e){const e=s?Math.max(1,Math.round(s.length/500)):1;return B.createElement(B.Fragment,null,B.createElement(Y,{color:Dn},`Thought for ${e} second${1!==e?"s":""}`," "),!o&&B.createElement(Y,{dimColor:!0},"(",`${i}+o to expand`,")"))}return t?B.createElement(B.Fragment,null,B.createElement(Y,{backgroundColor:On.BADGE_BG,color:On.BADGE_FG,bold:!0},`${cv}Taste${cv}`),B.createElement(Y,null," ","Using your taste"," ",n?"package of ":"packages",n&&B.createElement(Y,{bold:!0},n))):B.createElement(Y,{backgroundColor:jn.BG,color:jn.FG,bold:!0},`${cv}${r}${cv}`)}function renderAgentStatus({agentStatus:e,hasError:t,output:n,elapsedSeconds:r,tokensUsed:s}){const o=`${formatTime2(r)} | ${formatTokens(s)}`;return"running"===e?B.createElement(Y,{color:Ln.GRAY},"Running (",o,")"):"interrupted"===e||"Interrupted by user"===n?B.createElement(Y,{color:Ln.RED,wrap:"wrap"},"Interrupted by user"):"error"===e||t?B.createElement(Y,{color:Ln.RED,wrap:"wrap"},n," (",o,")"):B.createElement(B.Fragment,null,B.createElement(Y,{wrap:"wrap"},"Done"),B.createElement(Y,{color:Ln.GRAY}," (",o,")"))}function renderTruncatedOutput({output:e,name:t,expandedOutput:n,hasError:r,expandKey:s}){if(n||r)return e;const o=dedentText(e),{text:i,isTruncated:a,remainingLines:l}=truncateToVisualLines({output:o,maxVisualLines:"Question"===t?_r:kr,maxChars:"Question"===t?1/0:Ir});if(!a||"Question"===t)return i;const u=l>0?`... +${l} lines (${s}+o to expand)`:`... (${s}+o to expand)`;return B.createElement(B.Fragment,null,i,B.createElement(Y,{dimColor:!0},"\n",u))}function renderEditFileDiff({input:e,metadata:t,expandedOutput:n,isPermissionDenied:r,output:s,expandKey:o}){const i=n?void 0:Pr,{diffContent:a,isTruncated:l,totalLines:u}=generateDiff({filePath:e,showMetadata:!0,oldValue:t.oldValue,newValue:t.newValue,startLine:"number"==typeof t.startLine?t.startLine:1,dimDiff:r,permissionDenied:r,maxLines:i});return B.createElement(K,{flexDirection:"column"},a,l&&B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"… (",u-Pr," more lines) (",`${o}+o to expand`,")")),r&&s&&B.createElement(K,{marginTop:1},B.createElement(Y,{color:Ln.RED,wrap:"wrap"},s)))}function renderOutputContent({isTodos:e,isThinking:t,isEditFile:n,metadata:r,output:s,expandedOutput:o,isPermissionDenied:i,input:a,hasError:l,name:u,expandKey:d}){return e?formatTodosForDisplay(s):t?o?B.createElement(K,{width:"100%",flexDirection:"column"},B.createElement(Y,null," "),B.createElement(Y,{color:Dn,wrap:"wrap",italic:!0},s)):null:n&&r?.oldValue&&r?.newValue?renderEditFileDiff({input:a,metadata:r,expandedOutput:o,isPermissionDenied:i,output:s,expandKey:d}):B.createElement(K,{width:"100%"},B.createElement(Y,{color:l?Ln.RED:"",wrap:"wrap"},renderTruncatedOutput({output:s,name:u,expandedOutput:o,hasError:l,expandKey:d})))}function ToolMessage({name:e,input:t,output:n,isPending:r=!1,hasError:s=!1,metadata:o,expandedOutput:i=!1}){const a="thinking…"===e,l="TODOS"===e,u="Edit"===e,d=!0===o?.isTasteFile,m=o?.tasteCategory,p=!0===o?.permissionDenied,g=!a&&!l&&!d,{name:h}=detectTerminal(),f="iTerm2"===h?"shift":"ctrl",y=!0===o?.isAgent,w=computeDisplayInput({input:t,isAgent:y,isShell:"Shell"===e,expandedOutput:i}),S=!a&&w&&!d,b=o?.status,E=o?.tokensUsed||0,C="number"==typeof o?.elapsedSeconds?Math.floor(o.elapsedSeconds):0,{symbolColor:v,symbol:T}=resolveSymbol({isPending:r,hasError:s,isThinking:a,isTodos:l,output:n});return B.createElement(K,null,a&&B.createElement(Y,{color:v},T),B.createElement(K,{flexDirection:"column",marginLeft:a?1:0},B.createElement(K,null,renderToolHeader({isThinking:a,isTasteFile:d,tasteCategory:m,name:e,output:n,expandedOutput:i,expandKey:f}),S&&B.createElement(Y,null," ",B.createElement(Markdown,null,`(${w})`))),y&&("running"===b||n)&&B.createElement(K,{columnGap:1,marginLeft:g?1:0},g&&B.createElement(Y,null,"⎿"," "),renderAgentStatus({agentStatus:b,hasError:s,output:n,elapsedSeconds:C,tokensUsed:E})),n&&!d&&!y&&B.createElement(K,{columnGap:1,marginLeft:g?1:0},g&&B.createElement(Y,null,"⎿"," "),renderOutputContent({isTodos:l,isThinking:a,isEditFile:u,metadata:o,output:n,expandedOutput:i,isPermissionDenied:p,input:t,hasError:s,name:e,expandKey:f})),r&&!y&&B.createElement(K,{columnGap:1,marginLeft:1},B.createElement(Y,null,"⎿"," "),B.createElement(Y,{color:Ln.GRAY},"Processing…"))))}__name(computeSimilarity,"computeSimilarity"),__name(buildSimilarityMatrix,"buildSimilarityMatrix"),__name(collectSimilarityCandidates,"collectSimilarityCandidates"),__name(buildLinePairs,"buildLinePairs"),__name(groupAdjacentChanges,"groupAdjacentChanges"),__name(renderWordSegments,"renderWordSegments"),__name(renderContextLine,"renderContextLine"),__name(renderContextGroup,"renderContextGroup"),__name(generateDiff,"generateDiff"),__name(formatTodosForDisplay,"formatTodosForDisplay"),__name(computeDisplayInput,"computeDisplayInput"),__name(resolveSymbol,"resolveSymbol"),__name(renderToolHeader,"renderToolHeader"),__name(renderAgentStatus,"renderAgentStatus"),__name(renderTruncatedOutput,"renderTruncatedOutput"),__name(renderEditFileDiff,"renderEditFileDiff"),__name(renderOutputContent,"renderOutputContent"),__name(ToolMessage,"ToolMessage"),Zo();var gT=__name(({request:e,onResponse:n,onToggleAutoAccept:r})=>{const[s]=W(0),[o,i]=W(1);G(()=>{"edit"===e.action&&e.oldContent&&e.filePath&&resolveEditStartLine({filePath:e.filePath,oldContent:e.oldContent}).then(e=>{void 0!==e&&i(e)}).catch(()=>{})},[e.filePath,e.oldContent,e.action]);const a=[{label:"Yes",value:"yes",description:"Allow this edit",scope:void 0},{label:"Yes, allow all edits during this session (shift+tab)",value:"yes-session",description:"Allow and remember for this session",scope:"session"},{label:"No, and tell Command Code what to do differently",value:"no",description:"Deny and provide feedback",scope:void 0}],l=__name(e=>{const t=a.find(t=>t.value===e.value);t&&("yes-session"===t.value&&r&&r(),n(t))},"handleSelect"),u=__name(()=>{switch(e.action){case"edit":return"make this edit to";case"create":return"create";case"delete":return"delete";case"execute":return"execute";default:return"modify"}},"getActionDescription"),d=__name(()=>{if("unknown"===e.filePath)return"unknown file";try{const n=t.basename(e.filePath),r=t.relative(process.cwd(),e.filePath);return r&&!r.startsWith("../")&&r.length<50?r:n||e.filePath}catch{return e.filePath}},"getDisplayPath"),m=__name(()=>{switch(e.action){case"edit":return"Edit File";case"create":return"Create File";case"delete":return"Delete File";case"execute":return"Execute File";default:return"File Operation"}},"getHeading");return B.createElement(K,{flexDirection:"column",borderStyle:"single",borderColor:Ln.GRAY,paddingX:1,width:"100%"},B.createElement(K,{marginBottom:1},B.createElement(Y,{bold:!0,color:Ln.YELLOW},`${m()} ${"edit"===e.action?d():""}`)),"edit"===e.action&&e.oldContent&&e.newContent&&B.createElement(K,{marginBottom:1},generateDiff({oldValue:e.oldContent,newValue:e.newContent,filePath:d(),marginLeft:0,startLine:o}).diffContent),B.createElement(K,{marginBottom:1},B.createElement(Y,{bold:!0},"Do you want to ",u()," ",B.createElement(Y,{color:Ln.CYAN},d()),"?")),B.createElement(Ke,{items:a.map((e,t)=>({label:` ${t+1}. ${e.label}`,value:e.value})),onSelect:l,initialIndex:s,indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:Ln.CYAN},e?be.pointer:" "),itemComponent:({label:e,isSelected:t})=>B.createElement(Y,{color:t?Ln.CYAN:Ln.WHITE},e.includes("(shift+tab)")?B.createElement(B.Fragment,null,e.split("(shift+tab)")[0],B.createElement(Y,{bold:!0,dimColor:!0},"(shift+tab)")):e.includes("(")?B.createElement(B.Fragment,null,e.split("(")[0],B.createElement(Y,{color:Ln.GRAY},"(",e.split("(")[1])):e)}))},"PermissionPrompt");Nt(),Ot(),rr();var hT=__name(({request:e,onResponse:t,onToggleAutoAccept:n})=>{const[r]=W(0),s=[{label:"Yes",value:"yes",description:"Allow this command",scope:void 0},{label:"Yes, allow all edits during this session (shift+tab)",value:"yes-session",description:"Allow and remember for this session",scope:"session"},{label:"No, and tell Command Code what to do differently",value:"no",description:"Deny and provide feedback",scope:void 0}],o=__name(e=>{const r=s.find(t=>t.value===e.value);r&&("yes-session"===r.value&&n&&n(),t(r))},"handleSelect"),i=__name(()=>{const t=e.args?Array.isArray(e.args)?e.args.join(" "):e.args:"";return t?`${e.command} ${t}`:e.command},"getCommandDisplay");return B.createElement(K,{flexDirection:"column",borderStyle:"single",borderColor:Ln.GRAY,paddingX:1,width:"100%"},B.createElement(K,{marginBottom:1},B.createElement(Y,{bold:!0,color:Ln.YELLOW},"Execute Shell Command")),B.createElement(K,{marginBottom:1},B.createElement(Y,{bold:!0,wrap:"wrap"},"Command Code needs to execute ",B.createElement(Y,{color:Ln.CYAN},i()),".")),e.workingDirectory&&B.createElement(K,{marginBottom:1},B.createElement(Y,{color:Ln.GRAY},"Working directory: ",e.workingDirectory)),e.description&&B.createElement(K,{marginBottom:1},B.createElement(Y,{dimColor:!0,italic:!0},e.description)),B.createElement(Ke,{items:s.map((e,t)=>({label:` ${t+1}. ${e.label}`,value:e.value})),onSelect:o,initialIndex:r,indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:Ln.CYAN},e?be.pointer:" "),itemComponent:({label:e,isSelected:t})=>B.createElement(Y,{color:t?Ln.CYAN:Ln.WHITE},e.includes("(shift+tab)")?B.createElement(B.Fragment,null,e.split("(shift+tab)")[0],B.createElement(Y,{bold:!0,dimColor:!0},"(shift+tab)")):e)}))},"ShellPermissionPrompt");function getKillShellRequest(e){const t=e.port?`port ${e.port}`:`PID ${e.pid}`;return{command:"kill",args:[t],description:`Terminate process on ${t}`}}function getFileAction2(e){return e.includes("write")?"create":e.includes("delete")?"delete":"edit"}function handlePermissionResponse({choice:e,resolve:t,setPendingPermission:n,respondToPrompt:r,setStatus:s,permissionMode:o,showHintMessage:i,allowedStatus:a,deniedStatus:l}){r(e);const u="no"!==e.value;t(u),n(null),u?(s(a),"standard"===o&&i("Use shift+tab to enable auto-accept")):s(l)}__name(getKillShellRequest,"getKillShellRequest"),__name(getFileAction2,"getFileAction"),__name(handlePermissionResponse,"handlePermissionResponse");var fT=U(__name(function PermissionView2({pendingPermission:e,permissionMode:t,setPendingPermission:n,setStatus:r,respondToPrompt:s,showHintMessage:o,handleToggleAutoAccept:i}){const a={resolve:e.resolve,setPendingPermission:n,respondToPrompt:s,setStatus:r,permissionMode:t,showHintMessage:o};if("shell_command"===e.toolName){const t=e.params;return B.createElement(K,{marginY:1},B.createElement(hT,{request:t,onResponse:e=>handlePermissionResponse({...a,choice:e,allowedStatus:"Shell command allowed",deniedStatus:"Shell command denied"}),onToggleAutoAccept:i}))}if("kill_shell"===e.toolName){const t=getKillShellRequest(e.params);return B.createElement(K,{marginY:1},B.createElement(hT,{request:t,onResponse:e=>handlePermissionResponse({...a,choice:e,allowedStatus:"Process termination allowed",deniedStatus:"Process termination denied"}),onToggleAutoAccept:i}))}const l=e.params,u={action:getFileAction2(e.toolName),filePath:String(l.filePath??l.file_path??l.path??l.absolutePath??l.notebook_path??"unknown"),description:`Allow ${e.toolName} operation`,oldContent:"edit_file"===e.toolName&&"string"==typeof l.oldContent?l.oldContent:void 0,newContent:"edit_file"===e.toolName&&"string"==typeof l.newContent?l.newContent:void 0};return B.createElement(K,{marginY:1},B.createElement(gT,{request:u,onResponse:e=>handlePermissionResponse({...a,choice:e,allowedStatus:"File operation allowed",deniedStatus:"File operation denied"}),onToggleAutoAccept:i}))},"PermissionView"));Nt(),PC(),Nt(),tC(),Nt(),rr();var yT=__name(({title:e,hashPrefix:t=!1,subPrefix:n=!1,suffix:r,padding:s=0,titleColor:o=Ln.GRAY,dividerChar:i="─",dividerColor:a=Ln.GRAY,boxProps:l})=>{const u=Math.max(0,(process.stdout.columns??80)-2*s),d=t?`# ${i}${i} `:n?`${i}${i} `:"",m=e?`${e} `:"",p=r?` ${r}`:"",g=d.length+m.length+p.length,h=i.repeat(Math.max(0,u-g));return B.createElement(K,{paddingLeft:s,paddingRight:s,marginBottom:1,...l},(t||n)&&B.createElement(Y,{color:a},d),e&&B.createElement(Y,{color:o},m),B.createElement(Y,{color:a},h),r&&B.createElement(Y,{dimColor:!0},p))},"Divider");PC(),rr(),Nt(),rr();var wT=[{type:"user",text:"I always prefer pnpm",duration:2e3},{type:"learned",text:"Learned: pnpm (95% preference)",details:".commandcode/taste/taste.md",duration:2e3},{type:"user",text:"I prefer commander over meow",duration:2e3},{type:"updated",text:"Updated: commander boosted (60% → 95%), meow adjusted (90% → 35%)",details:".commandcode/taste/cli/taste.md",duration:2e3},{type:"user",text:"I prefer TypeScript for Node CLIs",duration:2e3},{type:"learned",text:"Learned: TypeScript for CLIs (90% preference)",details:".commandcode/taste/cli/taste.md",duration:2e3}],ST=__name(({onComplete:e,onExit:t})=>{const[n,r]=W(0),[s,o]=W(!1),i=n>=wT.length;return G(()=>{if(n>=wT.length)return;if(s)return;const e=wT[n],t=setTimeout(()=>{r(e=>Math.min(e+1,wT.length))},e.duration);return()=>clearTimeout(t)},[n,s]),Z((n,s)=>{""===n||s.ctrl&&"c"===n?t?t():e():s.escape?e():i?(s.return||" "===n)&&e():" "===n?o(e=>!e):s.return&&r(e=>Math.min(e+1,wT.length))}),B.createElement(K,{flexDirection:"column"},B.createElement(K,null,B.createElement(Y,{bold:!0},"Meet Your Coding Taste")),B.createElement(K,null,B.createElement(Y,{dimColor:!0},"Command Code learns your coding style as you work.")),B.createElement(K,null,B.createElement(Y,{dimColor:!0},"Here's how your preferences evolve in real-time:")),B.createElement(K,{flexDirection:"column",marginY:1},wT.slice(0,n).map((e,t)=>"user"===e.type?B.createElement(K,{key:t},B.createElement(Y,null,be.pointer," ",e.text)):B.createElement(K,{key:t,marginBottom:1,marginTop:0,marginLeft:1},B.createElement(K,null,B.createElement(Y,{dimColor:!0},"⎿"),B.createElement(K,{flexDirection:"column",marginLeft:2,marginTop:0},B.createElement(Y,{color:On.TEXT},e.text),e.details&&B.createElement(Y,{dimColor:!0},"Saved(",e.details,")")))))),i?B.createElement(K,{flexDirection:"column",marginY:1},B.createElement(Y,{bold:!0,color:On.TEXT},"Demo Complete!"),B.createElement(Y,null,"Command Code will now use these preferences to generate"),B.createElement(Y,null,"better suggestions tailored to your coding style. The"),B.createElement(Y,null,"more you code, the smarter it gets."),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"Press Enter to get started →"))):B.createElement(K,null,B.createElement(Y,{dimColor:!0},"[SPACE: pause] [ENTER: next] [ESC: skip]"+(s?" (paused)":""))))},"TasteDemoComponent"),bT=__name(({onClose:e,onExit:t})=>{const[n,r]=W(ZE.getEvents()),[s,o]=W(0);Z((n,r)=>{""===n||r.ctrl&&"c"===n?t():r.ctrl&&"t"===n&&e()},{isActive:!0}),G(()=>{const e=__name(()=>{r(ZE.getEvents())},"handleNewEvent"),t=__name(()=>{r([])},"handleCleared");return ZE.on("new-event",e),ZE.on("cleared",t),()=>{ZE.off("new-event",e),ZE.off("cleared",t)}},[]),G(()=>{const e=__name(()=>{kC(),o(e=>e+1)},"handleResize");return process.stdout.on("resize",e),()=>{process.stdout.off("resize",e)}},[]);const i=__name(e=>["learned","refactored"].includes(e),"isLearningEvent"),a=__name(e=>{const t=e.match(/^(learned|upgraded|downgraded|refactored|moved):\s*(.*)$/i);if(t){const e=t[1].toLowerCase();let n=t[2];const r=n.match(/^(.+?)\.?\s+Confidence:\s*(\d+\.?\d*)$/);let s=n,o=null;if(r){s=r[1].trim();const e=(100*parseFloat(r[2])).toFixed(2);o=`confidence: ${parseFloat(e).toString()}%`}const i={learned:"Learned",upgraded:"Reinforced",downgraded:"Downgraded",refactored:"Refactored",moved:"Moved"}[e]||e.charAt(0).toUpperCase()+e.slice(1);return{type:e,label:i,content:s,confidence:o}}return{type:null,label:null,content:e,confidence:null}},"formatLearningMessage"),l=__name(e=>{const t=e.match(/^(.+?)\s*\((\d+)%\s*(?:→|->)\s*(\d+)%\)$/);if(!t)return null;const n=t[1].trim(),r=parseInt(t[2],10),s=parseInt(t[3],10);return{text:n,oldPercent:r,newPercent:s,diff:s-r}},"parsePercentageChange"),u=__name(e=>{if(!e)return null;const t=e.match(/moved to (.+)/);if(!t)return null;const n=t[1],r=n.split("/"),s=r[r.length-1];return{category:r.slice(0,-1).join("/"),oldPath:s,newPath:n,fullPath:`.commandcode/taste/${n}`}},"formatMovedDetails"),d=H(()=>(process.stdout.rows??24)-1,[s]);return B.createElement(K,{flexDirection:"column",width:"100%",height:d,justifyContent:"flex-start",alignItems:"flex-start",padding:0,margin:0},B.createElement(K,{flexDirection:"column",marginBottom:1},B.createElement(Ze,{name:"vice"},B.createElement(Y,null,BC()))),B.createElement(yT,{hashPrefix:!0,title:"Taste Feed",titleColor:"white",suffix:"ctrl+t to close"}),B.createElement(K,{flexDirection:"column"},0===n.length?B.createElement(K,{flexDirection:"column"},B.createElement(K,{flexDirection:"column",marginBottom:1},B.createElement(Y,null,"Start using Command Code and it will begin recording your coding taste."),B.createElement(Y,{dimColor:!0},"Your preferences, patterns, and style will appear here in real-time.")),B.createElement(ne,{count:2}),B.createElement(yT,{title:"DEMO",titleColor:"white",subPrefix:!0}),B.createElement(ST,{onComplete:()=>{e()},onExit:t})):B.createElement(K,{flexDirection:"column"},n.map(e=>{if(i(e.type)){const{type:t,label:n,content:r,confidence:s}=a(e.message),o="moved"===t?u(e.details):null,i="upgraded"===t||"downgraded"===t?l(r):null;return B.createElement(K,{key:e.id,marginBottom:1},B.createElement(K,{flexDirection:"column"},B.createElement(K,null,B.createElement(Y,{backgroundColor:On.BADGE_BG,color:On.BADGE_FG,bold:!0},`${cv}${n}${cv}`),o?B.createElement(Y,{dimColor:!0}," ","(",o.fullPath,")"):e.details?B.createElement(Y,{dimColor:!0}," ","(",e.details,")"):null),B.createElement(K,{marginLeft:1},B.createElement(Y,{dimColor:!0},"⎿"," "),o?B.createElement(B.Fragment,null,B.createElement(Y,null," ",o.category," ","package ("),B.createElement(Y,{dimColor:!0},o.oldPath),B.createElement(Y,null," ",be.arrowRight," ",o.newPath),B.createElement(Y,null,")")):i?B.createElement(B.Fragment,null,B.createElement(Y,null," ",i.text," ","("),B.createElement(Y,{dimColor:!0},"confidence:"," "),B.createElement(Y,{dimColor:!0},i.oldPercent,"%"),B.createElement(Y,null," ",be.arrowRight," "),B.createElement(Y,{color:i.diff>0?Ln.GREEN:Ln.RED},i.newPercent,"%"),B.createElement(Y,null,")")):B.createElement(B.Fragment,null,B.createElement(Y,null," ",r),s&&B.createElement(Y,{dimColor:!0}," ","(",s,")")))))}return B.createElement(K,{key:e.id,marginBottom:1},B.createElement(Y,{dimColor:!0},be.pointerSmall," ",e.message))}))))},"LearningFeedFull");function LearningView({setShowLearningFeed:e,setStaticKey:t,onExit:n}){return B.createElement(bT,{onClose:()=>{kC(),e(!1),t(e=>e+1)},onExit:n})}__name(LearningView,"LearningView"),Nt(),Nt(),rr(),PC(),nr();var ET=__name(({onClose:e,onSettingsChange:t,staticKey:n})=>{const[r,s]=W(!1),[o,i]=W(!0);G(()=>{__name(async()=>{try{const e=await isTasteLearningEnabled();s(e)}catch(e){}finally{i(!1)}},"loadSettings")()},[]),Z((t,n)=>{if(!n.return&&" "!==t)return n.escape?(kC(),void e()):void 0;a()});const a=__name(async()=>{const e=!r;s(e);try{await setTasteLearning({tasteLearning:e}),t?.()}catch(t){s(!e)}},"toggleTasteLearning");return o?B.createElement(K,{key:n,borderStyle:"single",borderColor:Ln.BLUE,padding:1,flexDirection:"column"},B.createElement(Y,{color:Ln.BLUE,bold:!0},"Taste Settings"),B.createElement(Y,{dimColor:!0},"Loading configuration...")):B.createElement(K,{key:n,borderStyle:"single",borderColor:Ln.GRAY,padding:1,flexDirection:"column"},B.createElement(Y,{bold:!0},"Taste Learning"),B.createElement(Y,{dimColor:!0},"Configure taste learning preferences for this project"),B.createElement(K,{marginTop:1}),B.createElement(K,{justifyContent:"space-between"},B.createElement(Y,null,"Taste learning",B.createElement(Y,{dimColor:!0}," - Learn from your interactions")),B.createElement(Y,{color:r?Ln.GREEN:Ln.GRAY},r?"enabled":"disabled")),B.createElement(K,{marginTop:1}),B.createElement(Y,{dimColor:!0},"Taste data stored in .commandcode/taste/taste.md"),B.createElement(Y,{dimColor:!0},"Enter/Space to toggle • Esc to close"))},"TasteConfig");function TasteConfigView({staticKey:e,setShowTasteConfig:t,loadTasteStatus:n}){return B.createElement(B.Fragment,null,B.createElement(nT,{staticKey:e}),B.createElement(K,{flexDirection:"column",width:"100%"},B.createElement(K,{marginBottom:1},B.createElement(Y,{dimColor:!0},"Press Esc to return to conversation")),B.createElement(ET,{onClose:()=>t(!1),onSettingsChange:n,staticKey:e})))}__name(TasteConfigView,"TasteConfigView"),Nt(),Nt(),gi(),PC(),Ot(),rr();var CT=__name(e=>Math.ceil(e.length/4),"estimateTokens"),vT=__name(({onClose:e})=>{const[t,n]=W([]),[r,s]=W(!0),[o,i]=W(null),[a,l]=W(0);G(()=>{__name(async()=>{try{const{personal:e,project:t}=await loadAllSkillSummaries(),r=[...e.map(e=>({label:e.name,value:e.filePath,location:"user",description:e.description,filePath:e.filePath})),...t.map(e=>({label:e.name,value:e.filePath,location:"project",description:e.description,filePath:e.filePath}))];n(r)}catch(e){i(e instanceof Error?e.message:"Failed to load skills")}finally{s(!1)}},"loadSkills")()},[]);const u=t.filter(e=>"project"===e.location),d=t.filter(e=>"user"===e.location),m=[...u,...d],p=__name(async t=>{try{await et([{file:t.filePath,line:1}]),kC(),e()}catch(e){e instanceof Error&&e.message.includes("$EDITOR environment variable")?i(g()):i(e instanceof Error?e.message:"Failed to open skill in editor")}},"handleSelectSkill");Z((t,n)=>{if(n.escape)return kC(),void e();if(n.upArrow)l(e=>Math.max(0,e-1));else if(n.downArrow)l(e=>Math.min(m.length-1,e+1));else if(n.return){const e=m[a];e&&p(e)}});const g=__name(()=>{const e=process.platform;return"win32"===e?'No editor found. Set $EDITOR: setx EDITOR "code"':"No editor found. Set $EDITOR: echo 'export EDITOR=\"code\"' >> "+("darwin"===e?"~/.zshrc":"~/.bashrc")},"getEditorSetupMessage");return r?B.createElement(K,{flexDirection:"column",paddingX:0,width:"100%"},B.createElement(Y,{color:Mn,bold:!0},"Agent Skills"),B.createElement(Y,{dimColor:!0},"Loading skills...")):o?B.createElement(K,{flexDirection:"column",paddingX:0,width:"100%"},B.createElement(Y,{color:Ln.RED,bold:!0},"Agent Skills"),B.createElement(Y,{dimColor:!0},o),B.createElement(K,{marginTop:1}),B.createElement(Y,{dimColor:!0},"Press ",B.createElement(Y,{bold:!0},"Esc")," to close")):0===t.length?B.createElement(K,{flexDirection:"column",paddingX:0,width:"100%"},B.createElement(Y,{color:Mn,bold:!0},"Agent Skills"),B.createElement(K,{marginBottom:1},B.createElement(Y,{dimColor:!0},"No skills found")),B.createElement(Y,{dimColor:!0},"Create skills in:"),B.createElement(Y,{dimColor:!0}," ~/",".commandcode","/","skills","/ (user)"),B.createElement(Y,{dimColor:!0}," ",".commandcode","/","skills","/ (project)"),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"Press ",B.createElement(Y,{bold:!0},"Esc")," to close"))):B.createElement(K,{flexDirection:"column",paddingX:0,width:"100%"},B.createElement(K,null,B.createElement(Y,{color:Mn,bold:!0},"Skills "),B.createElement(Y,{dimColor:!0},m.length," skills")),u.length>0&&B.createElement(K,{flexDirection:"column",marginTop:1},B.createElement(K,null,B.createElement(Y,{color:Wn,bold:!0},"Project skills "),B.createElement(Y,{color:Wn},"(",".commandcode","/","skills",")")),u.map((e,t)=>{const n=a===t;return B.createElement(K,{key:e.value},B.createElement(Y,{color:n?Ln.GREEN:Ln.WHITE},e.label),B.createElement(Y,{dimColor:!0}," · ~",CT(e.description)," description tokens"))})),d.length>0&&B.createElement(K,{flexDirection:"column",marginTop:1},B.createElement(K,null,B.createElement(Y,{color:Wn,bold:!0},"User skills "),B.createElement(Y,{color:Wn},"(~/",".commandcode","/","skills",")")),d.map((e,t)=>{const n=a===u.length+t;return B.createElement(K,{key:e.value},B.createElement(Y,{color:n?Ln.GREEN:Ln.WHITE},e.label),B.createElement(Y,{dimColor:!0}," · ~",CT(e.description)," description tokens"))})),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0,italic:!0},"Esc to close")))},"SkillsConfig");function SkillsConfigView({staticKey:e,setShowSkillsConfig:t}){return B.createElement(B.Fragment,null,B.createElement(nT,{staticKey:e}),B.createElement(K,{flexDirection:"column",width:"100%"},B.createElement(K,{marginBottom:1},B.createElement(Y,{dimColor:!0},"Press Esc to return to conversation")),B.createElement(vT,{onClose:()=>t(!1),staticKey:e})))}function moveFocusDown(e,t){const{suggestionCount:n,activeDirCount:r}=t;return"input"===e.zone?n>0?{...e,zone:"suggestions",suggestionIndex:0}:r>0?{...e,zone:"active-dir",activeDirIndex:0}:e:"suggestions"===e.zone?e.suggestionIndex<n-1?{...e,suggestionIndex:e.suggestionIndex+1}:r>0?{...e,zone:"active-dir",activeDirIndex:0}:{...e,zone:"input"}:e.activeDirIndex<r-1?{...e,activeDirIndex:e.activeDirIndex+1}:{...e,zone:"input"}}function moveFocusUp(e,t){const{suggestionCount:n,activeDirCount:r}=t;return"input"===e.zone?r>0?{...e,zone:"active-dir",activeDirIndex:r-1}:n>0?{...e,zone:"suggestions",suggestionIndex:n-1}:e:"suggestions"===e.zone?e.suggestionIndex>0?{...e,suggestionIndex:e.suggestionIndex-1}:{...e,zone:"input"}:e.activeDirIndex>0?{...e,activeDirIndex:e.activeDirIndex-1}:n>0?{...e,zone:"suggestions",suggestionIndex:n-1}:{...e,zone:"input"}}function getAdjustedSuggestionOffset(e){const{selectedIndex:t,currentOffset:n,maxVisible:r,totalSuggestions:s}=e;return s<=r?0:t<n?t:t>=n+r?t-r+1:n}function getSuggestionBase(e){const n=resolveDirectoryPath(e),r=/[\\/]$/.test(e),s=e.replace(/\\/g,"/");if(s.endsWith("/."))return{searchDirectory:n,prefix:".",outputPrefix:`${s.slice(0,-1)}`};if(r)return{searchDirectory:n,prefix:"",outputPrefix:s};const o=s.lastIndexOf("/");return-1===o?{searchDirectory:t.dirname(n),prefix:t.basename(n),outputPrefix:""}:{searchDirectory:t.dirname(n),prefix:t.basename(n),outputPrefix:s.slice(0,o+1)}}function getDirectorySuggestions(e){const t=e.trim();if(!t)return[];try{const{searchDirectory:e,prefix:n,outputPrefix:r}=getSuggestionBase(t),s=n.startsWith(".")||r.includes("/.");return S.readdirSync(e,{withFileTypes:!0}).filter(e=>e.isDirectory()).filter(e=>!!s||!e.name.startsWith(".")).filter(e=>!n||e.name.toLowerCase().startsWith(n.toLowerCase())).sort((e,t)=>e.name.localeCompare(t.name)).map(e=>`${r}${e.name}/`)}catch(e){const t=e.code;return"ENOENT"!==t&&"ENOTDIR"!==t&&console.error(`Warning: Could not list directory suggestions: ${t}`),[]}}function getFooterText(e){return"active-dir"===e.focusZone?"[Del] Remove [↑↓] Navigate [Tab] Autocomplete [Esc] Close":"[Enter] Add [↑↓] Navigate [Tab] Autocomplete [Esc] Close"}__name(SkillsConfigView,"SkillsConfigView"),Nt(),Nt(),rr(),vn(),zt(),Nt(),zt(),__name(function createInitialFocusState(){return{zone:"input",suggestionIndex:0,activeDirIndex:0}},"createInitialFocusState"),__name(moveFocusDown,"moveFocusDown"),__name(moveFocusUp,"moveFocusUp"),__name(getAdjustedSuggestionOffset,"getAdjustedSuggestionOffset"),__name(getSuggestionBase,"getSuggestionBase"),__name(getDirectorySuggestions,"getDirectorySuggestions"),__name(getFooterText,"getFooterText");var TT=__name(({onClose:e})=>{const[t,n]=W(""),[r,s]=W(null),[o,i]=W([]),[a,l]=W(getAdditionalDirectories()),[u,d]=W({zone:"input",suggestionIndex:0,activeDirIndex:0}),[m,p]=W(0);G(()=>{i(t?getDirectorySuggestions(t):[]),d(e=>({...e,zone:"input"})),p(0)},[t]),G(()=>{if(!r||"success"!==r.tone)return;const e=setTimeout(()=>{s(null)},5e3);return()=>clearTimeout(e)},[r]);const g=__name(e=>{const t=addDirectory(e);"error"!==t.status?"skipped"!==t.status?(s({tone:"success",text:`Added ${t.displayPath} to directory scope`}),n(""),l(getAdditionalDirectories()),d({zone:"input",suggestionIndex:0,activeDirIndex:0})):s({tone:"warning",text:t.message}):s({tone:"error",text:t.message})},"submitPath"),h=__name(e=>{if(!removeAdditionalDirectory(e))return s({tone:"error",text:`${formatDirectoryForDisplay(e)} is no longer in workspace scope`}),void l(getAdditionalDirectories());s({tone:"success",text:`Removed ${formatDirectoryForDisplay(e)} from directory scope`}),l(getAdditionalDirectories()),d(e=>{if("active-dir"!==e.zone)return e;const t=Math.max(0,e.activeDirIndex-1);return{...e,activeDirIndex:t}})},"handleRemove");Z((t,r)=>{if(r.escape)e();else{if(r.return)return"suggestions"===u.zone&&o[u.suggestionIndex]?void g(o[u.suggestionIndex]):void 0;if((r.delete||r.backspace)&&"active-dir"===u.zone&&a[u.activeDirIndex])h(a[u.activeDirIndex]);else{if(r.tab&&o.length>0){const e=o[u.suggestionIndex]??o[0];return void(e&&(n(e),d(e=>({...e,zone:"input"})),s(null)))}r.downArrow?d(e=>moveFocusDown(e,{suggestionCount:o.length,activeDirCount:a.length})):r.upArrow&&d(e=>moveFocusUp(e,{suggestionCount:o.length,activeDirCount:a.length}))}}}),G(()=>{"suggestions"===u.zone&&p(e=>getAdjustedSuggestionOffset({selectedIndex:u.suggestionIndex,currentOffset:e,maxVisible:8,totalSuggestions:o.length}))},[u,o.length]),G(()=>{d(e=>"suggestions"===e.zone&&e.suggestionIndex>=o.length?{...e,zone:"input",suggestionIndex:Math.max(0,o.length-1)}:"active-dir"===e.zone&&e.activeDirIndex>=a.length?{...e,zone:"input",activeDirIndex:Math.max(0,a.length-1)}:e)},[o.length,a.length]);const f=o.slice(m,m+8),y=getFooterText({focusZone:u.zone});return B.createElement(K,{flexDirection:"column",borderStyle:"single",borderColor:Ln.CYAN,paddingX:1,paddingY:0},B.createElement(Y,{bold:!0,color:Ln.CYAN},"Add directory to workspace"),B.createElement(Y,{color:Ln.GRAY},"Command Code will be able to read files in this directory and make edits when accept edits mode is on."),B.createElement(K,{marginTop:1,flexDirection:"column"},B.createElement(Y,{color:Ln.GRAY},"Added directories"),0===a.length?B.createElement(Y,{color:Ln.GRAY}," None yet"):a.map((e,t)=>{const n="active-dir"===u.zone&&u.activeDirIndex===t;return B.createElement(Y,{key:e,color:n?Ln.YELLOW:Ln.GREEN,bold:n},n?` ${be.pointer} `:" ",formatDirectoryForDisplay(e))})),B.createElement(K,{marginTop:1},B.createElement(Y,{bold:!0,color:Ln.WHITE},"Path")),B.createElement(K,null,B.createElement(TextInput,{value:t,focus:"input"===u.zone,prefix:`${"input"===u.zone?be.pointer:" "} `,prefixColor:"input"===u.zone?Ln.CYAN:Ln.GRAY,onChange:e=>{n(e),s(null)},onSubmit:g})),!t&&B.createElement(K,{marginTop:1},B.createElement(Y,{color:Ln.GRAY},"Examples: ../shared ~/docs /abs/path")),r&&B.createElement(K,{marginTop:1},B.createElement(Y,{color:{error:Ln.RED,warning:Ln.YELLOW,success:Ln.GREEN}[r.tone]},r.text)),o.length>0&&B.createElement(K,{flexDirection:"column",marginTop:1},B.createElement(Y,{color:Ln.GRAY},"Suggestions"),f.map((e,t)=>{const n=m+t,r="suggestions"===u.zone&&u.suggestionIndex===n;return B.createElement(Y,{key:e,color:r?Ln.CYAN:Ln.GRAY,bold:r},r?` ${be.pointer} `:" ",e)})),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},y)))},"AddDirModal");Nt(),Nt(),Ot(),Nt(),Nt(),Ot(),JE(),rr();var kT=__name(()=>t.join(f.homedir(),".commandcode","agents"),"getRootAgentDir"),_T=__name(()=>t.join(process.cwd(),".commandcode","agents"),"getLocalAgentDir"),PT=__name(({config:e,onSaveComplete:n,viewOnly:r=!1})=>{const[s,o]=W("idle"),[i,a]=W(""),l=[...WE.map(e=>e.name),...QE.map(e=>e.name)],u=__name(async()=>{if(!e.agentType||!e.sysPrompt)return o("error"),void a("Agent configuration is incomplete");o("saving");try{const r="personal"===e.location?kT():_T();await L.mkdir(r,{recursive:!0});const s=`${e.agentType}.md`,o=t.join(r,s),i=Array.from(e.selectedTools).map(e=>VE[e]||e).join(", "),a=0===e.selectedTools.size?"none":e.selectedTools.size===l.length?'"*"':JSON.stringify(i),u=`---\nname: "${e.agentType}"\ndescription: ${JSON.stringify(e.ccToolDefinition)}\ntools: ${a}\n---\n\n${e.sysPrompt}\n`;await L.writeFile(o,u,"utf-8"),n(e.agentType)}catch(e){console.error("Error saving agent:",e),o("error"),a(e instanceof Error?e.message:"Unknown error occurred")}},"handleSaveAgent");Z((e,t)=>{r||!t.return||"idle"!==s&&"error"!==s||u()});const d=Array.from(e.selectedTools).map(e=>VE[e]||e).join(", "),m="personal"===e.location?`~/.commandcode/agents/${e.agentType}`:`.commandcode/agents/${e.agentType}`;return B.createElement(K,{flexDirection:"column",gap:1},B.createElement(K,{flexDirection:"column"},B.createElement(K,{gap:1},B.createElement(Y,{color:Ln.WHITE,bold:!0},"Name:"),B.createElement(Y,{color:Ln.GRAY},e.agentType)),B.createElement(K,{gap:1},B.createElement(Y,{color:Ln.WHITE,bold:!0},"Location:"),B.createElement(Y,{color:Ln.GRAY},m)),B.createElement(K,{gap:1},B.createElement(Y,{color:Ln.WHITE,bold:!0},"Tools:"),B.createElement(Y,{color:Ln.GRAY},0===e.selectedTools.size?"None":e.selectedTools.size===l.length?"*":d))),B.createElement(K,{gap:1},B.createElement(Y,{color:Ln.WHITE,bold:!0},"Description"),B.createElement(Y,{color:Ln.GRAY},"(Tells ","Command Code"," when to use this agent):")),B.createElement(Y,{color:Ln.GRAY},e.ccToolDefinition),B.createElement(K,{gap:1},B.createElement(Y,{color:Ln.WHITE,bold:!0},"System Prompt:")),B.createElement(Y,{color:Ln.GRAY},e.sysPrompt),!r&&B.createElement(K,{marginTop:1},"idle"===s&&B.createElement(K,{gap:1},B.createElement(Y,{color:Ln.GREEN,dimColor:!0},"Press"),B.createElement(Y,{color:Ln.GREEN,bold:!0},"Enter"),B.createElement(Y,{color:Ln.GREEN,dimColor:!0},"to save • Esc to cancel")),"saving"===s&&B.createElement(Y,{color:Ln.YELLOW},"Saving agent..."),"saved"===s&&B.createElement(Y,{color:Ln.GREEN},be.tick," ",i),"error"===s&&B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Ln.RED},be.cross," Error: ",i),B.createElement(Y,{color:Ln.GRAY},"Press Enter to retry"))))},"AgentSummary");JE(),rr();var AT=__name(({agent:e,onBack:t,setRevalidateAgent:n,isReadOnly:r=!1})=>{const[s,o]=W("menu"),i=[...WE.map(e=>e.name),...QE.map(e=>e.name)];let a=new Set;if("*"===e.tools||'"*"'===e.tools)a=new Set(i);else if(e.tools&&"none"!==e.tools){const t=e.tools.replace(/^"|"$/g,"").split(",").map(e=>e.trim()).map(e=>KE[e]||e);a=new Set(t)}const l={location:e.location,method:"manual",agentType:e.name,sysPrompt:e.sysPrompt,ccToolDefinition:e.description,recommendedMethodDescription:"",selectedTools:a},u=[{label:"1. View agent",value:"view"},...r?[]:[{label:"2. Delete agent",value:"delete"}],{label:r?"2. Back":"3. Back",value:"back"}],d=__name(e=>{"back"===e.value?t():"view"===e.value?o("view"):"edit"===e.value?o("edit"):"delete"===e.value&&o("delete")},"handleMenuSelect");if(Z((e,n)=>{n.escape&&("menu"===s?t():o("menu")),n.return&&"view"===s&&o("menu")}),"view"===s)return B.createElement(K,{flexDirection:"column"},B.createElement(PT,{config:l,onSaveComplete:()=>o("menu"),viewOnly:!0}),B.createElement(K,{marginTop:1},B.createElement(Y,{color:Ln.GRAY},"Press Enter to go back")));if("edit"===s)return B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Ln.YELLOW},"Edit functionality coming soon..."),B.createElement(Y,{color:Ln.GRAY},"Press Esc to go back"));if("delete"===s){const r=[{label:"1. Yes, delete",value:"confirm-delete"},{label:"2. No, cancel",value:"cancel"}],s=__name(async r=>{if("confirm-delete"===r.value)try{await L.unlink(e.filePath),n(!0),t()}catch(e){console.error(`Failed to delete agent: ${e}`),o("menu")}else o("menu")},"handleDeleteSelect");return B.createElement(K,{flexDirection:"column",gap:1},B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Ln.RED},"Delete agent"),B.createElement(Y,{color:Ln.GRAY},"Are you sure you want to delete the agent ",e.name,"?")),B.createElement(K,null,B.createElement(Ke,{items:r,onSelect:s,indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:Ln.WHITE},e?">":" "),itemComponent:({isSelected:e,label:t})=>B.createElement(Y,{color:e?Ln.WHITE:Ln.GRAY},` ${t}`)})))}return B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Ln.WHITE,bold:!0},e.name),B.createElement(K,{marginTop:1},B.createElement(Ke,{items:u,onSelect:d,indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:Ln.WHITE},e?">":" "),itemComponent:({isSelected:e,label:t})=>B.createElement(Y,{color:e?Ln.WHITE:Ln.GRAY},` ${t}`)})),B.createElement(K,{marginTop:1},B.createElement(Y,{color:Ln.GRAY},"Press ↑↓ to navigate · Enter to select · Esc to go back")))},"AgentDetails");_l(),rr();var xT=__name(({handleSelect:e,createdAgentName:n})=>{const[r,s]=W([]),[o,i]=W([]),[a,l]=W([]),[u,d]=W(!0),[m,p]=W(!1),[g,h]=W(null),[y,w]=W(!1),S=__name(()=>t.join(f.homedir(),".commandcode","agents"),"getRootAgentDir"),b=__name(()=>t.join(process.cwd(),".commandcode","agents"),"getLocalAgentDir"),E=__name(async(e,n)=>{try{p(!1);const r=(await L.readdir(e)).filter(e=>e.endsWith(".md"));return(await Promise.all(r.map(async r=>{try{const s=t.join(e,r),o=await L.readFile(s,"utf-8"),{data:i,content:a}=$e(o);let l=i.tools||"";return"*"!==l&&'"*"'!==l||(l="*"),{name:i.name||r.replace(".md",""),description:i.description||"",tools:l,sysPrompt:a.trim(),location:n,filePath:s}}catch(e){return console.error(`Error loading agent from ${r}:`,e),null}}))).filter(e=>null!==e)}catch{return[]}},"loadAgentsFromDirectory");G(()=>{__name(async()=>{d(!0);const[e,t]=await Promise.all([E(S(),"personal"),E(b(),"project")]),n=vl.map(e=>({name:e.name,description:e.description,tools:Array.isArray(e.tools)?e.tools.join(", "):e.tools,sysPrompt:e.systemPrompt,location:"personal",filePath:`__builtin__:${e.name}`}));s(e),i(t),l(n),d(!1)},"loadAgents")()},[m]);const C=[{label:"Create new agent",value:"create_new_agent"}];r.forEach(e=>{C.push({label:e.name,value:e.filePath})}),o.forEach(e=>{C.push({label:e.name,value:e.filePath})});const v=r.length+o.length,T=__name(t=>{if("create_new_agent"===t.value)e(t);else{const e=[...r,...o].find(e=>e.filePath===t.value);e&&(h(e),w(!0))}},"handleAgentSelect");if(u)return B.createElement(Y,{color:Ln.GRAY},"Loading agents...");if(y&&g){const e=g.filePath.startsWith("__builtin__:");return B.createElement(AT,{agent:g,onBack:()=>{w(!1),h(null)},setRevalidateAgent:p,isReadOnly:e})}const k=__name(({isSelected:e,label:t})=>{const n=C.find(e=>e.label===t),s=n?.value||"",i=r[0]?.filePath===s,a=o[0]?.filePath===s;return B.createElement(K,{flexDirection:"column"},i&&r.length>0&&B.createElement(K,{marginTop:1},B.createElement(Y,{color:Ln.GRAY,bold:!0},"User agents")),a&&o.length>0&&B.createElement(K,{marginTop:1},B.createElement(Y,{color:Ln.GRAY,bold:!0},"Project agents")),B.createElement(K,null,B.createElement(Y,{color:Ln.WHITE},e?">":" "),B.createElement(Y,{color:e?Ln.WHITE:Ln.GRAY}," ",t)))},"CustomItemComponent");return B.createElement(K,{flexDirection:"column"},B.createElement(K,{marginBottom:1},B.createElement(Y,{color:Ln.WHITE,bold:!0},"Agents"),v>0?B.createElement(Y,{color:Ln.GRAY}," ","(",v," agent",v>1?"s":"",")"):B.createElement(Y,{color:Ln.GRAY}," (No custom agents)")),n&&B.createElement(K,{flexDirection:"column",marginBottom:1},B.createElement(Y,{color:Ln.GREEN,dimColor:!0},"Created agent: ",n)),B.createElement(Ke,{items:C,onSelect:T,indicatorComponent:()=>null,itemComponent:k}),a.length>0&&B.createElement(K,{flexDirection:"column",marginTop:1},B.createElement(Y,{color:Ln.GRAY,bold:!0},"Default agents"),a.map(e=>B.createElement(Y,{key:e.filePath,color:Ln.GRAY}," ",e.name.charAt(0).toUpperCase()+e.name.slice(1)))),B.createElement(K,{flexDirection:"column",marginTop:1},B.createElement(Y,{color:Ln.GRAY},"Create specialized subagents that Command Code can delegate to."),B.createElement(Y,{color:Ln.GRAY},"Each subagent has its own context window, custom system prompt, and specific tools.")))},"ManageAgents");Nt(),Ot(),rr(),JE(),Nt(),Nt(),Ot(),rr();var IT=__name(({onSelect:e})=>B.createElement(Ke,{items:[{label:"1. Project (.commandcode/agents/)",value:"project"},{label:"2. Personal (~/.commandcode/agents/)",value:"personal"}],onSelect:t=>{"project"!==t.value&&"personal"!==t.value||e(t.value)},indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:e?Ln.WHITE:Ln.GRAY},e?">":" "),itemComponent:({isSelected:e,label:t})=>B.createElement(Y,{color:e?Ln.WHITE:Ln.GRAY},` ${t}`)}),"LocationSelector");Nt(),vn(),Ot(),JE(),_n(),Nn(),Pl(),rr();var NT=__name(({step:e,agentType:t,sysPrompt:n,ccToolDefinition:r,onAgentTypeChange:s,onSysPromptChange:o,onCCToolDefinitionChange:i,onAgentTypeSubmit:a,onSysPromptSubmit:l,onCCToolDefinitionSubmit:u})=>{const[d,m]=W(!1),[p,g]=W(!1),h=V(async e=>{const t=processBracketedPaste(e);if(!t.isPasteStart||d){if(!d||t.isPasteEnd){if(d&&t.isPasteEnd){m(!1);const e=await detectClipboardText();return void(e?o(e):t.cleanedContent&&o(t.cleanedContent))}o(e)}}else if(m(!0),t.isPasteEnd){m(!1);const e=await detectClipboardText();return void(e?o(e):t.cleanedContent&&o(t.cleanedContent))}},[d,o]),f=V(async e=>{const t=processBracketedPaste(e);if(!t.isPasteStart||p){if(!p||t.isPasteEnd){if(p&&t.isPasteEnd){g(!1);const e=await detectClipboardText();return void(e?i(e):t.cleanedContent&&i(t.cleanedContent))}i(e)}}else if(g(!0),t.isPasteEnd){g(!1);const e=await detectClipboardText();return void(e?i(e):t.cleanedContent&&i(t.cleanedContent))}},[p,i]);return"agentType"===e?B.createElement(B.Fragment,null,B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Ln.WHITE},"Enter a unique identifier for your agent:"),t&&(Object.values(VE).some(e=>Ne(e)===Ne(t))||Object.keys(VE).some(e=>Ne(e)===Ne(t)))&&B.createElement(Y,{color:Ln.RED},be.warning," This name conflicts with an existing tool name. Please choose a different name."),t&&isReservedAgentName(Ne(t))&&B.createElement(Y,{color:Ln.RED},be.warning," This name is reserved. Reserved names:"," ",Cl.join(", "))),B.createElement(TextInput,{showCursor:!0,value:t||"",onSubmit:()=>{if(null===t||0===t.trim().length)return;const e=Ne(t);Object.values(VE).some(t=>Ne(t)===e)||Object.keys(VE).some(t=>Ne(t)===e)||isReservedAgentName(e)||a()},onChange:s,placeholder:"e.g. code-reviewer, unit-tester"})):"sysPrompt"===e?B.createElement(B.Fragment,null,B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Ln.WHITE},"Enter the system prompt for your agent:"),B.createElement(Y,{color:Ln.GRAY},"Be comprehensive for best results.")),B.createElement(TextInput,{showCursor:!0,value:n||"",onSubmit:()=>{null!==n&&0!==n.trim().length&&l()},onChange:h,placeholder:"You are a helpful coding reviewer..."})):"ccToolDefinition"===e?B.createElement(B.Fragment,null,B.createElement(Y,{color:Ln.WHITE},"When should ","Command Code"," use this agent?"),B.createElement(TextInput,{showCursor:!0,value:r,onSubmit:()=>{0!==r.trim().length&&u()},onChange:f,placeholder:"e.g., Use this agent when you are done writing code..."})):null},"ManualFlow");Nt(),rr();var RT=__name(({onSelect:e})=>B.createElement(Ke,{items:[{label:"1. Generate with Command Code (recommended)",value:"recommended"},{label:"2. Manual configuration",value:"manual"}],onSelect:t=>{"recommended"!==t.value&&"manual"!==t.value||e(t.value)},indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:e?Ln.WHITE:Ln.GRAY},e?">":" "),itemComponent:({isSelected:e,label:t})=>B.createElement(Y,{color:e?Ln.WHITE:Ln.GRAY},` ${t}`)}),"MethodSelector");Nt(),vn(),Nt(),rr();var $T=["·","○","◇","☆","✧","☆","◇","○","⌘"],LT=[12,5,4,4,4,4,4,5,16],MT=[5,4,4,4,4,4,5];function getWaveSymbol(e){const t=e%88;let n=0;for(let e=0;e<LT.length;e++)if(n+=LT[e],t<n)return $T[e];const r=t-58;n=0;for(let e=0;e<MT.length;e++)if(n+=MT[e],r<n)return $T[7-e];return $T[0]}function ShimmerText({text:e,offset:t}){const n=__name(e=>{const n=e-(t-5);return n>=0&&n<Jn.length?Jn[n]:Xn},"getCharColor");return B.createElement(Y,null,e.split("").map((e,t)=>B.createElement(Y,{key:t,color:n(t)},e)))}function CMDIcon({frame:e}){return B.createElement(Y,{color:Mn,bold:!0},getWaveSymbol(e)+" ")}function formatToken(e){return e<1e3?`${e}`:`${(e/1e3).toFixed(1)}k`}function formatTime3(e){return e<6e4?`${Math.floor(e/1e3)}s`:`${Math.floor(e/6e4)}m ${Math.floor(e%6e4/1e3)}s`}__name(getWaveSymbol,"getWaveSymbol"),__name(ShimmerText,"ShimmerText"),__name(CMDIcon,"CMDIcon"),__name(formatToken,"formatToken"),__name(formatTime3,"formatTime");var OT=__name(({status:e,timeElapsed:t,tokens:n})=>{const[r,s]=W(0),[o,i]=W(0),a=Q(n);a.current=n;const l=getTerminalWidth();G(()=>{const e=setInterval(()=>{s(e=>(e+1)%88),i(e=>{const t=a.current;if(e===t)return e;const n=t-e,r=e+Math.sign(n)*Math.max(1,Math.ceil(Math.abs(n)/10));return n>0?Math.min(r,t):Math.max(r,t)})},80);return()=>clearInterval(e)},[]);const u=r%(e.length+10),d=l>70,m=l>40&&l<=70;return B.createElement(K,{width:l,height:1,paddingLeft:0,marginLeft:0},B.createElement(CMDIcon,{frame:4*r}),B.createElement(K,{marginRight:1},B.createElement(ShimmerText,{text:e,offset:u})),d?B.createElement(B.Fragment,null,B.createElement(K,{columnGap:1},B.createElement(Y,{dimColor:!0},`(${formatTime3(t)}`),B.createElement(Y,{dimColor:!0},"•"),B.createElement(Y,{color:Ln.GRAY},be.arrowDown),B.createElement(Y,{dimColor:!0},`${formatToken(Math.round(o))}`),B.createElement(Y,{dimColor:!0},"•"),B.createElement(K,{columnGap:1},B.createElement(Y,{bold:!0,color:Ln.GRAY},"esc"),B.createElement(Y,{dimColor:!0},"to interrupt)")))):m?B.createElement(K,{columnGap:1},B.createElement(Y,{dimColor:!0},`(${formatToken(Math.round(o))})`)):B.createElement(B.Fragment,null))},"Status");Nn(),_n(),rr();var DT=__name(({description:e,onChange:t,onSubmit:n,loading:r,errorMessage:s})=>{const[o,i]=W(!1),[a,l]=W(0),[u,d]=W(0);G(()=>{if(!r)return;const e=setInterval(()=>d(e=>e+1),50);return()=>clearInterval(e)},[r]);const m=V(()=>{0!==e.trim().length&&n()},[e,n]),p=V(async e=>{const n=processBracketedPaste(e);if(!n.isPasteStart||o){if(!o||n.isPasteEnd){if(o&&n.isPasteEnd){i(!1);const e=await detectClipboardText();return void(e?(l(e=>e+1),t(e)):n.cleanedContent&&(l(e=>e+1),t(n.cleanedContent)))}t(e)}}else if(i(!0),n.isPasteEnd){i(!1);const e=await detectClipboardText();return void(e?(l(e=>e+1),t(e)):n.cleanedContent&&(l(e=>e+1),t(n.cleanedContent)))}},[o,t]);return B.createElement(K,{flexDirection:"column"},r?B.createElement(K,null,B.createElement(CMDIcon,{frame:u}),B.createElement(Y,{color:Ln.WHITE},"Generating agent from description...")):B.createElement(TextInput,{key:a,showCursor:!0,value:e,placeholder:"e.g. Help me review my code...",onChange:p,onSubmit:m}),s&&B.createElement(K,{marginTop:1},B.createElement(Y,{color:Ln.RED},`${be.warning} ${s}`)))},"RecommendedFlow");Nt(),JE(),rr();var qT=__name(({selectedTools:e,onToggleTool:t,onToggleCategory:n,onComplete:r})=>{const[s,o]=W(!1),[i,a]=W(0),l=H(()=>[...WE.map(e=>e.name),...QE.map(e=>e.name)],[]),u=H(()=>[{name:"All tools",tools:l},{name:"Read-only tools",tools:l.filter(e=>"read_file"===e||"read_directory"===e||"read_multiple_files"===e||"grep"===e)},{name:"Edit tools",tools:l.filter(e=>"edit_file"===e||"write_file"===e)},{name:"Execution tools",tools:l.filter(e=>"shell_command"===e)},{name:"Search tools",tools:l.filter(e=>"web_search"===e||"web_fetch"===e)},{name:"Other tools",tools:l.filter(e=>!["read_file","read_directory","read_multiple_files","grep","edit_file","write_file","shell_command","web_search","web_fetch"].includes(e))}].filter(e=>e.tools.length>0),[l]),d=H(()=>{const e=[];return e.push({type:"continue",value:"continue"}),e.push({type:"divider",value:"divider-1"}),s?(u.forEach(t=>{e.push({type:"category",value:t.name})}),e.push({type:"divider",value:"divider-3"}),e.push({type:"toggle",value:"hide-advanced"}),e.push({type:"spacer",value:"spacer-1"}),e.push({type:"label",value:"Individual Tools:"}),l.forEach(t=>{e.push({type:"tool",value:t})})):(u.forEach(t=>{e.push({type:"category",value:t.name})}),e.push({type:"divider",value:"divider-2"}),e.push({type:"toggle",value:"show-advanced"})),e},[s,u,e,l]),m=d.map((t,n)=>{if("divider"===t.type)return{label:"─".repeat(30),value:n,type:"divider"};if("spacer"===t.type)return{label:"",value:n,type:"spacer"};if("label"===t.type)return{label:t.value,value:n,type:"label"};if("continue"===t.type)return{label:"[ Continue ]",value:n,type:"continue"};if("toggle"===t.type)return{label:"show-advanced"===t.value?"[ Show advanced options ]":"[ Hide advanced options ]",value:n,type:"toggle"};if("category"===t.type){const r=u.find(e=>e.name===t.value),s=r?.tools.every(t=>e.has(t));return r?.tools.some(t=>e.has(t)),{label:`${s?"[x]":"[ ]"} ${t.value}`,value:n,type:"category"}}return"tool"===t.type?{label:` ${e.has(t.value)?"[x]":"[ ]"} ${VE[t.value]||t.value}`,value:n,type:"tool"}:{label:"",value:n,type:"unknown"}}),p=m.filter(e=>"divider"!==e.type&&"spacer"!==e.type&&"label"!==e.type);return Z((e,l)=>{if(l.upArrow)a(e=>{const t=e-1;return t<0?p.length-1:t});else if(l.downArrow)a(e=>{const t=e+1;return t>=p.length?0:t});else if(l.return||" "===e){const e=p[i];if(e){const i=d[e.value];if(!i)return;"continue"===i.type?r():"toggle"===i.type?(o(!s),a(0)):"category"===i.type?n(i.value):"tool"===i.type&&t(i.value)}}}),B.createElement(K,{flexDirection:"column"},m.map((e,t)=>{const n=p.findIndex(t=>t.value===e.value),r=-1!==n&&n===i;if("divider"===e.type)return B.createElement(K,{key:`divider-${t}`},B.createElement(Y,{color:Ln.GRAY}," ",e.label));if("spacer"===e.type)return B.createElement(K,{key:`spacer-${t}`,height:1});if("label"===e.type)return B.createElement(K,{key:`label-${t}`},B.createElement(Y,{color:Ln.GRAY}," ",e.label));const s="continue"===e.type;return B.createElement(K,{key:`item-${t}`},B.createElement(Y,{color:r?Ln.WHITE:Ln.GRAY,bold:s&&r},r?">":" "," ",e.label))}),B.createElement(K,{marginTop:1},e.size===l.length&&B.createElement(Y,{color:Ln.GRAY},"All tools selected"),e.size>0&&e.size<l.length&&B.createElement(Y,{color:Ln.GRAY},e.size," tools selected"),0===e.size&&B.createElement(Y,{color:Ln.GRAY},"No tools selected")))},"ToolsSelector");ar(),dn(),ts(),bE(),hi(),un(),nr();var FT=__name(({onComplete:e})=>{const[t,n]=W("location"),[r,s]=W(!1),[o,i]=W(null),[a,l]=W("agentType"),u=H(()=>[...WE.map(e=>e.name),...QE.map(e=>e.name)],[]),d=__name(()=>({location:null,method:null,agentType:null,sysPrompt:null,ccToolDefinition:"",recommendedMethodDescription:"",selectedTools:new Set(u)}),"getInitialConfig"),[m,p]=W(d()),g=__name(t=>{n("location"),l("agentType"),p(d()),e(t)},"resetToDefaults"),h=__name(()=>{if("location"===t)return"Choose location";if("method"===t)return"Creation method";if("configuration"===t){if("recommended"===m.method)return"Describe what this agent should do and when it should be used (be comprehensive for best results)";if("agentType"===a)return"Agent type (identifier)";if("sysPrompt"===a)return"System prompt";if("ccToolDefinition"===a)return"Description (Tell Command Code when to use this agent)"}return"tools"===t?"Select tools":"summary"===t?"Confirm and save":""},"getSubText"),f=__name(e=>{p({...m,location:e}),n("method")},"handleLocationSelect"),y=__name(e=>{p({...m,method:e}),n("configuration")},"handleMethodSelect"),w=__name(async()=>{try{i(null),s(!0);const e=await getConfiguredProvider(),t=await isOAuthEnforced();let r;e===Ct.ANTHROPIC&&(r=await on.getValidAccessToken(),validateOAuthToken({token:r,provider:e}));const o={[wt.INTERNAL_TEAM_FLAG_HEADER]:t.toString()};r&&(o[wt.OAUTH_TOKEN]=`Bearer ${r}`);const a=getApiBaseUrl(),l=new Vb({baseUrl:a}),u=await l.post({headers:o,endpoint:St.ALPHA.AGENT.GENERATE,body:{description:m.recommendedMethodDescription,model:`anthropic:${getConfiguredModel()}`}});p({...m,agentType:Ne(u.agentName),sysPrompt:u.systemPrompt,ccToolDefinition:u.toolDescription}),n("tools")}catch(e){e instanceof oi&&400===e.status&&e.message?.toLowerCase().includes("insufficient credits")?i(nn):i("An error occurred while generating the agent. Please try again.")}finally{s(!1)}},"handleRecommendedSubmit"),S=__name(()=>{p({...m,agentType:Ne(m.agentType)}),l("sysPrompt")},"handleManualAgentTypeSubmit"),b=__name(()=>{l("ccToolDefinition")},"handleManualSysPromptSubmit"),E=__name(()=>{n("tools")},"handleManualCCToolDefinitionSubmit"),C=__name(()=>{n("summary")},"handleToolsComplete"),v=__name(e=>{const t=new Set(m.selectedTools);t.has(e)?t.delete(e):t.add(e),p({...m,selectedTools:t})},"handleToggleTool"),T=__name(e=>{const t=[{name:"All tools",tools:u},{name:"Read-only tools",tools:u.filter(e=>"read_file"===e||"read_directory"===e||"read_multiple_files"===e||"grep"===e)},{name:"Edit tools",tools:u.filter(e=>"edit_file"===e||"write_file"===e)},{name:"Execution tools",tools:u.filter(e=>"shell_command"===e)},{name:"Search tools",tools:u.filter(e=>"web_search"===e||"web_fetch"===e)},{name:"Other tools",tools:u.filter(e=>!["read_file","read_directory","read_multiple_files","grep","edit_file","write_file","shell_command","web_search","web_fetch"].includes(e))}].find(t=>t.name===e);if(!t)return;const n=new Set(m.selectedTools);t.tools.every(e=>n.has(e))?t.tools.forEach(e=>n.delete(e)):t.tools.forEach(e=>n.add(e)),p({...m,selectedTools:n})},"handleToggleCategory");return B.createElement(K,{flexDirection:"column",gap:1},B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Ln.WHITE,bold:!0},"Create new agent"),B.createElement(Y,{color:Ln.GRAY},h())),B.createElement(K,null,"location"===t&&B.createElement(IT,{onSelect:f}),"method"===t&&B.createElement(RT,{onSelect:y}),"configuration"===t&&"recommended"===m.method&&B.createElement(DT,{description:m.recommendedMethodDescription,onChange:e=>p({...m,recommendedMethodDescription:e}),loading:r,errorMessage:o,onSubmit:w}),"configuration"===t&&"manual"===m.method&&B.createElement(K,{flexDirection:"column",gap:1},B.createElement(NT,{step:a,agentType:m.agentType,sysPrompt:m.sysPrompt,ccToolDefinition:m.ccToolDefinition,onAgentTypeChange:e=>p({...m,agentType:e}),onSysPromptChange:e=>p({...m,sysPrompt:e}),onCCToolDefinitionChange:e=>p({...m,ccToolDefinition:e}),onAgentTypeSubmit:S,onSysPromptSubmit:b,onCCToolDefinitionSubmit:E})),"tools"===t&&B.createElement(qT,{selectedTools:m.selectedTools,onToggleTool:v,onToggleCategory:T,onComplete:C}),"summary"===t&&B.createElement(PT,{config:m,onSaveComplete:g})))},"AgentNew");rr();var jT=__name(({onCancel:e})=>{const[t,n]=W(null),[r,s]=W(null),o=__name(e=>{n(e.value),s(null)},"handleSelect");return Z((t,n)=>{n.escape&&e()}),B.createElement(K,{gap:1,paddingLeft:1,paddingRight:1,width:"100%",borderColor:Ln.GRAY,borderStyle:"single",flexDirection:"column"},null===t&&B.createElement(xT,{handleSelect:o,createdAgentName:r}),"create_new_agent"===t&&B.createElement(FT,{onComplete:e=>{s(e),n(null)}}))},"AgentsConfig");rr(),Nt(),Nt(),Ot(),bE(),ts(),dn(),CE(),$n(),en(),nr(),ar();var zT=null;function getRequest2(){return zT||(zT=new Vb({baseUrl:getApiBaseUrl()})),zT}function extractText(e){if("string"==typeof e)return e;if(!Array.isArray(e))return"";let t="";for(const n of e){const e=n;"text"===e.type&&e.text&&(t+=e.text)}return t}async function buildAuthHeaders2(){const e=await getConfiguredProvider(),t=await isOAuthEnforced();let n;e===Ct.ANTHROPIC&&(n=await on.getValidAccessToken(),validateOAuthToken({token:n,provider:e}));const r={[wt.PROJECT_SLUG]:Yb.getCurrentProjectDirName(),[wt.INTERNAL_TEAM_FLAG_HEADER]:t.toString()};return n&&(r[wt.OAUTH_TOKEN]=`Bearer ${n}`),r}function buildConversationSummary(e){return e.slice(-6).filter(e=>"user"===e.message.role||"assistant"===e.message.role).map(e=>{const t="user"===e.message.role?"User":"Command Code",n=extractText(e.message.content).slice(0,300).replace(/\s+\S*$/,"").replace(/\n+/g," ").trim();return n?`${t}: ${n}`:null}).filter(e=>null!==e).join("\n")}function hasAssistantMessage(e){return e.some(e=>"assistant"===e.message.role)}async function predictNextPrompt({messages:e,sessionId:t}){if(!hasAssistantMessage(e))return null;const n=buildConversationSummary(e);if(!n)return null;const r=`Conversation:\n${n}\n\nSuggestion:`;try{const e=getRequest2(),n=await buildAuthHeaders2(),s={config:getEnvironmentContext(),memory:"",taste:"",skills:"",params:{tools:[],system:'Suggest what the user might naturally type next into Command Code.\n\nLook at the user\'s recent messages and original request. Predict what THEY would type — not what you think they should do. The test: would they think "I was just about to type that"?\n\nRules:\n- Write ONLY the suggestion, no quotes, no labels, no explanation\n- 2-12 words, match the user\'s style\n- Be specific: "run the tests" beats "continue"\n- Stay silent (reply with nothing) if the next step isn\'t obvious from what the user said\n\nNEVER suggest:\n- Evaluative responses ("looks good", "thanks")\n- Questions ("what about...?")\n- Assistant-voice ("Let me...", "I\'ll...", "Here\'s...")\n- New ideas they didn\'t ask about\n- Multiple sentences\n\nExamples:\n- User asked "fix the bug and run tests", bug is fixed → "run the tests"\n- After code written → "try it out"\n- Command Code offers options → the one the user would likely pick\n- Command Code asks to continue → "yes" or "go ahead"\n- Task complete, obvious follow-up → "commit this" or "push it"\n- After error or misunderstanding → nothing',messages:[{role:"user",content:r}],model:vt,max_tokens:30,temperature:.7,stream:!0},threadId:t||crypto.randomUUID()},o=new AbortController,i=e.post({endpoint:St.ALPHA.GENERATE,body:s,headers:n,stream:!0,signal:o.signal});let a;const l=new Promise((e,t)=>{a=setTimeout(()=>{o.abort(),t(new Error("Timeout"))},5e3)});let u;try{u=await Promise.race([i,l])}finally{clearTimeout(a)}if(!u)return dlog("[PromptPredictor] no response stream"),null;const d=je.fromReadableStream(u);let m="";d.on("text",e=>{m+=e}),await d.finalMessage();const p=m.trim().replace(/^["']|["']$/g,"").replace(/\n.*$/,"");if(!p)return null;const g=p.replace(/[.?!]+$/,"").trim();return g?(dlog(`[PromptPredictor] predicted: "${g}"`),g):null}catch(e){return dlog(`[PromptPredictor] failed: ${e instanceof Error?e.message:String(e)}`),null}}__name(getRequest2,"getRequest"),__name(extractText,"extractText"),__name(buildAuthHeaders2,"buildAuthHeaders"),__name(buildConversationSummary,"buildConversationSummary"),__name(hasAssistantMessage,"hasAssistantMessage"),__name(predictNextPrompt,"predictNextPrompt"),$n();var BT=['Try "how to log errors?"','Try "text diagram how <@file> works?"','Try "add tests for <@file>"','Try "refactor this to use async/await"','Try "what does this function do?"','Try "find all usages of <function>"','Try "fix the TypeScript errors"','Try "explain the architecture"','Try "write docs for <@file>"','Try "optimize this for performance"','Try "review this code for bugs"','Try "how does <feature> work?"'];function getRandomSuggestion(){const e=Math.floor(Math.random()*BT.length);return BT[e]??BT[0]??""}function usePredictedPlaceholder({contextEngineRef:e,isCmdCodeBusy:t}){const[n,r]=W(()=>(e.current?.getMessages().length??0)>0?"":getRandomSuggestion()),[s,o]=W(!1),i=Q(t);return G(()=>{const n=i.current;if(i.current=t,dlog(`[usePredictedPlaceholder] wasBusy: ${n}, isCmdCodeBusy: ${t}`),!n||t)return;if(!e.current)return;const s=e.current.getMessages(),a=e.current.getSessionId();dlog(`[usePredictedPlaceholder] Triggering prediction with ${s.length} messages`),r(""),o(!1);let l=!1;return predictNextPrompt({messages:s,sessionId:a}).then(e=>{dlog(`[usePredictedPlaceholder] Prediction result: ${e}`),e&&!l&&(r(e),o(!0))}).catch(e=>{dlog(`[usePredictedPlaceholder] Prediction error: ${e}`)}),()=>{l=!0}},[t,e]),{placeholder:n,isPrediction:s,onAccepted:V(()=>{r(""),o(!1)},[])}}function useTerminalWidth(){const{stdout:e}=X(),[t,n]=W(()=>e.columns??80);return G(()=>{const t=__name(()=>n(e.columns??80),"onResize");return e.on("resize",t),()=>{e.off("resize",t)}},[e]),t}__name(getRandomSuggestion,"getRandomSuggestion"),__name(usePredictedPlaceholder,"usePredictedPlaceholder"),Nt(),__name(useTerminalWidth,"useTerminalWidth"),Nt(),Nt(),vn(),Ot(),_n(),ln(),Nt();var UT=n(y(),"commandcode-images"),WT={"image/png":".png","image/jpeg":".jpg","image/gif":".gif","image/webp":".webp"};function saveTempImage(e,t){try{E(UT)||C(UT,{recursive:!0});const r=WT[e.mediaType]||".png",s=`image-${t}-${Date.now()}${r}`,o=n(UT,s),i=Buffer.from(e.data,"base64");return v(o,i),o}catch{return null}}function accumulateDelta(e,t,n){const r=n+t;return e===t||e===r?t:r&&e.startsWith(r)?t+e.slice(r.length):t&&e.startsWith(t)?t+e.slice(t.length):t+e}function useBracketedPaste(e){const{input:t,detectedContent:n,setInput:r,setDetectedImages:s,setDetectedContent:o,incrementInputKey:i}=e,a=V((e,t)=>{s(t=>[...t,e]),r(t),i()},[s,r,i]),l=Q(!1),u=Q(""),d=Q(null),m=Q(""),p=V(async(e,t)=>{let s=e.replace(/\r\n/g,"\n").replace(/\r/g,"\n");const l=await detectDroppedImageFile(s);if(l)return void a(l,t);const u=await detectClipboardImage();if(u)return void a(u,t);let d=s;if(!d.trim()){const e=await detectClipboardText();d=e?e.replace(/\r\n/g,"\n").replace(/\r/g,"\n"):""}if(d){if(d.length>300){const e=`[Text#${n.length+1}]`;o(e=>[...e,d]),r(t+e)}else r(t+d);i()}},[a,n.length,o,r,i]),g=V(()=>{d.current&&clearTimeout(d.current),d.current=setTimeout(async()=>{if(l.current){const e=u.current,t=m.current;u.current="",m.current="",l.current=!1,d.current=null,e&&await p(e,t)}},500)},[p]);return{handlePaste:V(async e=>{const n=processBracketedPaste(e);if(n.isPasteStart&&n.isPasteEnd)return l.current&&(l.current=!1,u.current="",m.current="",d.current&&(clearTimeout(d.current),d.current=null)),await p(n.pastedContent??n.cleanedContent,n.textBeforePaste??""),!0;if(n.isPasteStart&&!l.current)return l.current=!0,m.current=n.textBeforePaste??t,u.current=n.pastedContent??n.cleanedContent,g(),!0;if(l.current&&!n.isPasteEnd)return void 0!==n.pastedContent?u.current=n.pastedContent:n.cleanedContent&&(u.current=accumulateDelta(n.cleanedContent,u.current,m.current)),g(),!0;if(l.current&&n.isPasteEnd){d.current&&(clearTimeout(d.current),d.current=null),void 0!==n.pastedContent?u.current=n.pastedContent:n.cleanedContent&&(u.current=accumulateDelta(n.cleanedContent,u.current,m.current));const e=u.current,t=m.current;return u.current="",m.current="",l.current=!1,await p(e,t),!0}if(n.isPasteEnd&&!n.isPasteStart&&!l.current)return!0;const r=e.slice(t.length);if(r.length>0){const e=await detectDroppedImageFile(r);if(e)return a(e,t),!0}return!1},[t,p,g,a]),resetPasteState:V(()=>{l.current=!1,u.current="",m.current="",d.current&&(clearTimeout(d.current),d.current=null)},[]),isPasting:V(()=>l.current,[])}}__name(saveTempImage,"saveTempImage"),ar(),Nt(),Nn(),_n(),__name(accumulateDelta,"accumulateDelta"),__name(useBracketedPaste,"useBracketedPaste"),Nn(),Nt(),Nt();var QT=["code --wait","cursor --wait","nano"],GT=["code","cursor","subl","atom","zed"];function ensureWaitFlag(e){const t=e.split(" ").filter(e=>e.length>0),n=t[0];return GT.some(e=>n===e||n.endsWith(`/${e}`))?t.some(e=>"--wait"===e||"-w"===e)?e:`${n} --wait ${t.slice(1).join(" ")}`.trim():e}function isCommandAvailable(e){try{const t=e.split(" ")[0],n="win32"===process.platform?"where":"command -v";return I(`${n} ${t}`,{stdio:"ignore",encoding:"utf-8"}),!0}catch{return!1}}function findFallbackEditor(){for(const e of QT)if(isCommandAvailable(e))return e;return null}__name(ensureWaitFlag,"ensureWaitFlag"),__name(isCommandAvailable,"isCommandAvailable"),__name(findFallbackEditor,"findFallbackEditor");var HT=class extends Error{static{__name(this,"NoEditorError")}constructor(){super("No editor configured"),this.name="NoEditorError"}};async function openInEditor2(e){let t=process.env.EDITOR||process.env.VISUAL||null;if(!t&&("true"===process.env.COMMAND_CODE_DISABLE_EDITOR_FALLBACK||(t=findFallbackEditor()),!t))throw new HT;t=ensureWaitFlag(t);const r=n(y(),`commandcode-${Date.now()}.md`);return await M(r,e),new Promise((e,n)=>{const s=t.split(" ").filter(e=>e.length>0),o=s[0],i=s.slice(1),a=N(o,[...i,r],{stdio:"inherit"});a.on("close",async()=>{try{const t=await O(r,"utf-8");await D(r),e(t.trimEnd())}catch(e){n(e)}}),a.on("error",async e=>{try{await D(r)}catch{}n(e)})})}function useExternalEditor({input:e,setInput:t,setInputKey:n,onEditorClose:r}){const[s,o]=W(!1),[i,a]=W(null),l=V(async()=>{if(!s){o(!0),a(null);try{const s=e.replace(/\n+$/,""),o=await openInEditor2(s);t(o),n(e=>e+1),r?.()}catch(e){a(e instanceof HT?"No text editor found. Set your EDITOR environment variable.\n\nSee: https://commandcode.ai/reference/interactive#setting-up-your-editor":`Editor error: ${e instanceof Error?e.message:String(e)}`)}finally{o(!1)}}},[e,t,r,s]),u=V(()=>{a(null)},[]);return{isEditorOpen:s,editorError:i,handleOpenInEditor:l,clearEditorError:u}}__name(function getNoEditorMessage(){return"No text editor found. Set your EDITOR environment variable.\n\nSee: https://commandcode.ai/reference/interactive#setting-up-your-editor"},"getNoEditorMessage"),__name(openInEditor2,"openInEditor"),__name(useExternalEditor,"useExternalEditor"),Nt(),Nt(),Nt(),Nt(),Ot(),$n(),lr(),yr(),Nt(),Ot();var VT=t.join(f.homedir(),".commandcode","updates.json");function ensureDir(){const e=t.dirname(VT);S.existsSync(e)||S.mkdirSync(e,{recursive:!0})}function readUpdatesConfig(){try{if(!S.existsSync(VT))return{autoUpdate:!0,lastCheckedAt:0,checkIntervalMs:36e5,pending:null};const e=S.readFileSync(VT,"utf-8");return{autoUpdate:!0,lastCheckedAt:0,checkIntervalMs:36e5,pending:null,...JSON.parse(e)}}catch{return{autoUpdate:!0,lastCheckedAt:0,checkIntervalMs:36e5,pending:null}}}function writeUpdatesConfig(e){ensureDir(),S.writeFileSync(VT,JSON.stringify(e,null,2))}function updateUpdatesConfig(e){writeUpdatesConfig({...readUpdatesConfig(),...e})}function shouldCheckForUpdate(){const e=readUpdatesConfig();return!!e.autoUpdate&&Date.now()-e.lastCheckedAt>=e.checkIntervalMs}function recordUpdateCheck(){updateUpdatesConfig({lastCheckedAt:Date.now()})}function setPendingUpdate(e){updateUpdatesConfig({lastCheckedAt:Date.now(),pending:e})}function clearPendingUpdate(){updateUpdatesConfig({pending:null})}function getPendingUpdate(e){const t=readUpdatesConfig();return t.pending?t.pending.currentVersion!==e?(clearPendingUpdate(),null):t.pending:null}__name(function getDefaultConfig(){return{autoUpdate:!0,lastCheckedAt:0,checkIntervalMs:36e5,pending:null}},"getDefaultConfig"),__name(ensureDir,"ensureDir"),__name(readUpdatesConfig,"readUpdatesConfig"),__name(writeUpdatesConfig,"writeUpdatesConfig"),__name(updateUpdatesConfig,"updateUpdatesConfig"),__name(shouldCheckForUpdate,"shouldCheckForUpdate"),__name(recordUpdateCheck,"recordUpdateCheck"),__name(setPendingUpdate,"setPendingUpdate"),__name(clearPendingUpdate,"clearPendingUpdate"),__name(getPendingUpdate,"getPendingUpdate"),lr();var KT=Ve(x),YT=getPackageJson();function shouldSkipUpdateSystem(){return!!process.env.CI||!!isLocalDevelopmentBuild()}function fetchVersions(){try{const e=I("npm view command-code versions --json",{encoding:"utf-8",timeout:5e3});return JSON.parse(e)}catch{return null}}function getCurrentVersion(){return YT.version}function isAlphaVersion(e){return e.includes("alpha")}function filterVersions(e){return{stable:e.filter(e=>!e.includes("alpha")),alpha:e.filter(e=>e.includes("alpha"))}}function getLatestVersion(e){return 0===e.length?null:e.sort(tt.rcompare)[0]}function determineUpdateTarget(e,t,n){const r=getLatestVersion(t);if(r&&tt.gt(r,e))return{latestVersion:r,updateAvailable:!0};if(isAlphaVersion(e)){const t=getLatestVersion(n);if(t&&tt.gt(t,e))return{latestVersion:t,updateAvailable:!0}}return{latestVersion:e,updateAvailable:!1}}async function checkForUpdateAvailable(){const e=fetchVersions();if(!e)return null;const t=getCurrentVersion(),{stable:n,alpha:r}=filterVersions(e),{latestVersion:s,updateAvailable:o}=determineUpdateTarget(t,n,r);return{currentVersion:t,latestVersion:s,updateAvailable:o}}async function executeUpdate(e){try{return await KT(`npm i -g command-code@${e}`,{env:{...process.env,NODE_NO_WARNINGS:"1"},timeout:6e5}),!0}catch{return!1}}function checkForUpdateAsync(){shouldSkipUpdateSystem()||shouldCheckForUpdate()&&doUpdateCheck().catch(()=>{})}async function doUpdateCheck(){dlog("[Updater] Starting async update check");const e=await checkForUpdateAvailable();return e?e.updateAvailable?(dlog(`[Updater] Update available: ${e.currentVersion} -> ${e.latestVersion}`),void setPendingUpdate({targetVersion:e.latestVersion,currentVersion:e.currentVersion,detectedAt:Date.now()})):(dlog("[Updater] No update available"),void recordUpdateCheck()):(dlog("[Updater] Failed to fetch version info"),void recordUpdateCheck())}async function maybeRunPendingUpdate(){if(shouldSkipUpdateSystem())return;const e=getCurrentVersion(),t=getPendingUpdate(e);if(!t)return;if(!tt.gt(t.targetVersion,e))return dlog("[Updater] Pending update no longer valid"),void clearPendingUpdate();dlog(`[Updater] Running pending update: ${e} -> ${t.targetVersion}`);const n=Ie(`Updating ${e} → ${t.targetVersion}`).start(),r=await executeUpdate(t.targetVersion);if(clearPendingUpdate(),!r)return n.fail("Update failed"),void console.log("Run `cmd update` to try again.");n.succeed(`Updated to v${t.targetVersion}`)}async function performAutoUpdate(e){const{silent:t,updateInfo:n,onStart:r}=e||{};if(isLocalDevelopmentBuild())return{success:!1};const s=n||await checkForUpdateAvailable();return s?.updateAvailable?(r?.(s.latestVersion),await executeUpdate(s.latestVersion)?{success:!0,updateInfo:s}:(t||(console.error("\nFailed to update command-code automatically."),console.error("Please update manually using: npm i -g command-code")),{success:!1,updateInfo:s})):{success:!1}}function getCurrentGitBranch(){try{return I("git rev-parse --abbrev-ref HEAD",{encoding:"utf-8",stdio:["pipe","pipe","ignore"],cwd:process.cwd()}).trim()||null}catch(e){return null}}function getGitHeaderInfo(){return{branch:getCurrentGitBranch(),isLocal:isLocalDevelopmentBuild()}}__name(shouldSkipUpdateSystem,"shouldSkipUpdateSystem"),__name(fetchVersions,"fetchVersions"),__name(getCurrentVersion,"getCurrentVersion"),__name(isAlphaVersion,"isAlphaVersion"),__name(filterVersions,"filterVersions"),__name(getLatestVersion,"getLatestVersion"),__name(determineUpdateTarget,"determineUpdateTarget"),__name(checkForUpdateAvailable,"checkForUpdateAvailable"),__name(executeUpdate,"executeUpdate"),__name(checkForUpdateAsync,"checkForUpdateAsync"),__name(doUpdateCheck,"doUpdateCheck"),__name(maybeRunPendingUpdate,"maybeRunPendingUpdate"),__name(performAutoUpdate,"performAutoUpdate"),__name(getCurrentGitBranch,"getCurrentGitBranch"),__name(getGitHeaderInfo,"getGitHeaderInfo");var JT=new Set(["OPEN","MERGED","CLOSED"]),XT=null;function getCachedPRInfo(e){if(XT&&XT.branch===e){if(!(Date.now()-XT.timestamp>3e5))return XT.result;XT=null}}function setPRCache(e,t){XT={branch:e,result:t,timestamp:Date.now()}}function execFileAsync({cmd:e,args:t,encoding:n,timeout:r}){return new Promise((s,o)=>{R(e,[...t],{encoding:n,timeout:r},(e,t)=>{e?o(e):s(t.trim())})})}function parsePRResponse(e){try{const t=JSON.parse(e);return t.number&&t.url&&t.state&&JT.has(t.state)?{number:t.number,title:t.title||"",url:t.url,state:t.state}:null}catch{return null}}__name(getCachedPRInfo,"getCachedPRInfo"),__name(setPRCache,"setPRCache"),__name(execFileAsync,"execFileAsync"),__name(parsePRResponse,"parsePRResponse");var ZT=__name(async()=>{const e=getCurrentGitBranch();if(!e)return null;if("main"===e||"master"===e)return null;const t=getCachedPRInfo(e);if(void 0!==t)return t;try{const t=parsePRResponse(await execFileAsync({cmd:"gh",args:["pr","view","--json","number,title,url,state"],encoding:"utf-8",timeout:3e3}));return setPRCache(e,t),t}catch{return setPRCache(e,null),null}},"detectPR"),ek=__name((e={})=>{const{enabled:t=!0}=e,[n,r]=W(null),s=Q(!1);return G(()=>{if(!t||s.current)return;let e=!0;return s.current=!0,ZT().then(t=>{e&&r(t)}),()=>{e=!1}},[t]),{pr:n}},"usePRDetection");function loadGitignore(e){const t=nt(),r=n(e,".gitignore");if(E(r))try{const e=b(r,"utf8");t.add(e)}catch{}return t.add(".git"),t}rr(),Nt(),rr(),__name(loadGitignore,"loadGitignore");var tk=__name(({onSelectFile:e,onClose:t,searchQuery:i=""})=>{const[a,l]=W(process.cwd()),[u,d]=W([]),[m,p]=W(0),[g,h]=W(0),f=i.trim()?15:10,y=V((e,t=process.cwd())=>{if(!e.trim())return[];const r=loadGitignore(t);if(e.endsWith("/")){const o=n(t,e);try{const e=T(o),i=[];return e.forEach(e=>{const a=n(o,e);try{const e=k(a),n=s(t,a);if(r.ignores(n))return;i.push({name:n,path:a,isDirectory:e.isDirectory()})}catch{}}),i.sort((e,t)=>e.isDirectory&&!t.isDirectory?-1:!e.isDirectory&&t.isDirectory?1:e.name.localeCompare(t.name)),i.slice(0,50)}catch{}}if(e.includes("/")){const o=e.split("/"),i=o.pop()||"",a=n(t,o.join("/"));try{const e=T(a),o=[],l=i.toLowerCase();return e.forEach(e=>{const u=e.toLowerCase();if(!i||u.includes(l)){const i=n(a,e);try{const e=k(i),n=s(t,i);if(r.ignores(n))return;o.push({name:n,path:i,isDirectory:e.isDirectory()})}catch{}}}),o.sort((e,t)=>e.isDirectory&&!t.isDirectory?-1:!e.isDirectory&&t.isDirectory?1:e.name.localeCompare(t.name)),o.slice(0,50)}catch{}}const o=[],i=e.toLowerCase(),a=__name((e,l=0)=>{if(!(l>8))try{T(e).forEach(u=>{const d=n(e,u);try{const e=k(d),n=s(t,d);if(r.ignores(n))return;const m=n.toLowerCase();(u.toLowerCase().includes(i)||m.includes(i))&&o.push({name:n,path:d,isDirectory:e.isDirectory()}),e.isDirectory()&&"node_modules"!==u&&a(d,l+1)}catch(e){}})}catch(e){}},"searchRecursively");return a(t),o.sort((e,t)=>{const n=e.name.toLowerCase(),r=t.name.toLowerCase(),s=n===i,o=r===i;if(s&&!o)return-1;if(!s&&o)return 1;const a=n.split("/").pop()||"",l=r.split("/").pop()||"",u=a.includes(i),d=l.includes(i);if(u&&!d)return-1;if(!u&&d)return 1;const m=e.name.split("/").length,p=t.name.split("/").length;return m!==p?m-p:e.name.localeCompare(t.name)}),o.slice(0,50)},[]),w=V(e=>{try{const t=T(e),o=[],i=process.cwd(),a=loadGitignore(i);"/"!==e&&o.push({name:"..",path:r(e),isDirectory:!0}),t.forEach(t=>{const r=n(e,t);try{const e=k(r),n=s(i,r);if(a.ignores(n))return;o.push({name:t,path:r,isDirectory:e.isDirectory()})}catch{}}),o.sort((e,t)=>e.isDirectory&&!t.isDirectory?-1:!e.isDirectory&&t.isDirectory?1:e.name.localeCompare(t.name)),d(o),p(0),h(0)}catch{}},[]);G(()=>{if(i.trim()){const e=y(i);d(e),p(0),h(0)}else w(a)},[a,w,i,y]),Z((n,r)=>{if(r.escape)t();else if(r.upArrow)p(e=>{const t=Math.max(0,e-1);return t<g&&h(t),t});else if(r.downArrow)p(e=>{const t=Math.min(u.length-1,e+1);return t>=g+f&&h(t-f+1),t});else{if(r.rightArrow){const e=u[m];if(!e)return;return void(e.isDirectory&&!i.trim()&&l(o(e.path)))}if(r.return){const t=u[m];if(!t)return;return void e(t.path)}}});const S=u.slice(g,g+f);return B.createElement(K,{flexDirection:"column",paddingLeft:1},B.createElement(K,{marginBottom:1,flexDirection:"column"},B.createElement(Y,{color:Ln.DIM},i.trim()?`Searching for: "${i}"`:`Files: ${a}`),B.createElement(Y,{color:Ln.DIM},i.trim()?"↑↓ navigate • Enter to select • Esc to close":"↑↓ navigate • → to open folder • Enter to select • Esc to close")),0===S.length?B.createElement(Y,{color:Ln.DIM},i.trim()?`No files found matching "${i}"`:"No files found in this directory"):S.map((e,t)=>{const n=g+t,r=e.name,s=n===m;return B.createElement(Y,{key:e.path,color:s?Ln.GREEN:Ln.DIM},e.isDirectory?`${r}/`:r)}))},"FileList");Nt(),Ot(),ir(),rr(),Nt(),rr();var nk=__name(({usage:e})=>{if(!e)return null;const t=Math.min(e.current/e.limit*100,100),n=Math.max(0,Math.round(90-t));if(n>20)return null;const r=__name(e=>e>=90?Ln.RED:e>=70?Ln.YELLOW:Ln.DIM,"getColor"),s=`context: ${n}% left before auto-compact`;return B.createElement(K,{paddingRight:1},B.createElement(Y,{color:r(t)},s))},"ContextUsage");Nt(),tC(),jr(),rr();var rk=__name(()=>{const[e,t]=W("continuous learning"),n=Q([]),r=Q(0),s=Q(null),o=Q(!1);G(()=>{const e=__name(e=>"analyzing"===e.type?(o.current=!0,n.current=[],r.current=0,s.current&&(clearTimeout(s.current),s.current=null),void t(e.message)):o.current&&"analyzed"!==e.type?void n.current.push(e):"analyzed"===e.type?(o.current=!1,void(n.current.length>0?(r.current=0,i()):t("continuous learning"))):void 0,"handleNewEvent"),i=__name(()=>{if(r.current>=n.current.length)return t("continuous learning"),void(n.current=[]);const e=n.current[r.current];t(e.message);const o="learned"===e.type||"refactored"===e.type||"no_learnings"===e.type||"error"===e.type?15e3:2e3;s.current=setTimeout(()=>{r.current++,i()},o)},"cycleThroughNextEvent");return ZE.on("new-event",e),()=>{ZE.off("new-event",e),s.current&&clearTimeout(s.current)}},[]);const i=`${be.bullet} taste: `,a=i.length+e.length+9>Rr;let l=e;return l=truncateString(a?{text:e,maxChars:Rr}:{text:e,maxChars:Rr-i.length-9-10}),B.createElement(K,{paddingRight:3},!a&&B.createElement(Y,{color:On.TEXT},i),B.createElement(Y,null,l),!a&&B.createElement(Y,{dimColor:!0}," (ctrl+t)"))},"LearningFeedMini");Nt(),rr();var sk=__name(({mode:e,pendingExitKey:t})=>t?B.createElement(Y,{dimColor:!0},"Press Ctrl+C again to exit"):"auto-accept"===e?B.createElement(K,{flexDirection:"row"},B.createElement(Y,{color:Hn},"» accept edits on "),B.createElement(Y,{dimColor:!0},"(shift+tab)")):"plan"===e?B.createElement(K,{flexDirection:"row"},B.createElement(Y,{color:Gn},"plan mode "),B.createElement(Y,{dimColor:!0},"(shift+tab)")):B.createElement(Y,{color:Ln.DIM},"? for shortcuts"),"ModeIndicator");Nt(),rr(),Nt();var ok=__name(({url:e,text:t,dimColor:n=!1,color:r})=>{const s=`]8;;${e}${t}]8;;`;return B.createElement(Y,{dimColor:n,color:r},s)},"TerminalLink"),ik=__name(({prInfo:e,showSeparator:t=!0})=>{if(!e)return null;if("OPEN"!==e.state&&"MERGED"!==e.state)return null;const n="OPEN"===e.state?Vn.OPEN:Vn.MERGED;return B.createElement(B.Fragment,null,t&&B.createElement(Y,{dimColor:!0}," · "),B.createElement(Y,{color:n},"PR "),B.createElement(ok,{url:e.url,text:`#${e.number}`,dimColor:!0}))},"PRLinkBadge"),ak=__name(({indicator:e,showSeparator:t=!0})=>e?.visible?B.createElement(B.Fragment,null,t&&B.createElement(Y,{dimColor:!0}," · "),B.createElement(Y,{color:"connected"===e.type?Ln.GREEN:Ln.YELLOW},e.message)):null,"ConnectionIndicatorBadge"),lk=__name(({termWidth:e,indicatorText:t,isIDEIndicator:n,permissionMode:r="standard",prInfo:s,tasteLearning:o,contextUsage:i,connectionIndicator:a,pendingExitKey:l,updateStatus:u,updateFailedInfo:d,currentProvider:m,showProviderInfo:p,isBashMode:g,shareInfo:h,showShareNotification:f,unshareNotificationMessage:y,tasteNotificationMessage:w})=>{const S=e>=60;return B.createElement(B.Fragment,null,B.createElement(K,{flexDirection:"column",paddingLeft:2},"auto-accept"!==r&&"plan"!==r||l?B.createElement(K,{flexDirection:"row",justifyContent:"space-between",width:e-1},B.createElement(K,{flexDirection:"row",columnGap:0},n&&!l?B.createElement(Y,{color:Un},t):B.createElement(sk,{mode:r,pendingExitKey:l}),!l&&B.createElement(ik,{prInfo:s}),!l&&B.createElement(ak,{indicator:a})),S&&B.createElement(K,{flexDirection:"column",alignItems:"flex-end"},o&&B.createElement(rk,null),i&&B.createElement(nk,{usage:i}))):B.createElement(B.Fragment,null,B.createElement(K,{flexDirection:"row",justifyContent:"space-between",width:e-1},B.createElement(sk,{mode:r}),S&&o&&B.createElement(rk,null)),B.createElement(K,{flexDirection:"row",justifyContent:"space-between",width:e-1},B.createElement(K,{flexDirection:"row",columnGap:0},B.createElement(Y,{color:n?Un:void 0,dimColor:!n},t),B.createElement(ik,{prInfo:s}),B.createElement(ak,{indicator:a})),S&&i&&B.createElement(nk,{usage:i}))),(u||d||p&&m)&&B.createElement(K,{flexDirection:"row",columnGap:1},u&&B.createElement(Y,null,be.tick," ","Command Code"," updated:"," ",B.createElement(Y,{dimColor:!0},"v",u.updatedFrom),B.createElement(Y,{dimColor:!0}," ",be.arrowRight," "),B.createElement(Y,null,"v",u.updatedTo)),!u&&d&&B.createElement(Y,{color:Ln.YELLOW,dimColor:!0},be.info," Update available:"," ",d.currentVersion," ",be.arrowRight," ",d.latestVersion),p&&m&&B.createElement(Y,{color:Ln.GREEN,dimColor:!0},be.bullet," Provider:"," ",getProviderDisplayName(m)))),g&&B.createElement(K,{paddingLeft:2},B.createElement(Y,{color:Ln.GREEN},"! for bash mode")),f&&h&&B.createElement(K,{paddingLeft:2},B.createElement(Y,{color:Mn},"SHARED: ",h.url," (copied to clipboard)")),y&&B.createElement(K,{paddingLeft:2},B.createElement(Y,{color:y.includes("NOT SHARED")?Ln.RED:Mn},y)),w&&B.createElement(K,{paddingLeft:2},B.createElement(Y,{color:Mn},w)))},"BottomIndicator");Nt(),CE(),jr(),rr();var ck=__name(({onSelectSession:e,onClose:t})=>{const[n,r]=W([]),[s,o]=W(0),[i,a]=W(!0);G(()=>{l()},[]);const l=__name(async()=>{a(!0);const e=await Yb.listSessions();r(e.slice(0,30)),a(!1)},"loadSessions");if(Z((r,i)=>{i.escape?t():i.upArrow?o(e=>Math.max(0,e-1)):i.downArrow?o(e=>Math.min(n.length-1,e+1)):i.return&&n.length>0&&s<n.length&&e(n[s].id)}),i)return B.createElement(K,{flexDirection:"column",paddingLeft:2},B.createElement(Y,{color:Ln.GRAY},"Loading sessions..."));if(0===n.length)return B.createElement(K,{flexDirection:"column",paddingLeft:2},B.createElement(Y,{color:Ln.GRAY},"No previous sessions found"),B.createElement(Y,{color:Ln.DIM,dimColor:!0},"Press ESC to go back"));const u=__name(e=>{const t=new Date(e),n=(new Date).getTime()-t.getTime(),r=Math.floor(n/6e4),s=Math.floor(n/36e5),o=Math.floor(n/864e5);return r<1?"just now":r<60?`${r} min ago`:s<24?`${s}h ago`:`${o}d ago`},"formatRelativeTime"),d=__name(e=>e.replace(/\s+/g," ").trim(),"normalizeSummary"),m=__name(e=>truncateString({text:d(e),maxChars:Nr}),"truncateMessage"),p=__name(e=>e.title?d(e.title):m(e.firstMessage),"getSessionSummary");return B.createElement(K,{flexDirection:"column",paddingLeft:1,width:"100%"},B.createElement(Y,{color:Ln.CYAN,bold:!0},"Resume Session"),B.createElement(Y,{color:Ln.DIM,dimColor:!0},"Use ↑↓ to navigate, Enter to select, ESC to cancel"),B.createElement(K,{marginTop:1}),B.createElement(K,{columnGap:2,marginBottom:1},B.createElement(K,{width:5},B.createElement(Y,{color:Ln.GRAY}," ")),B.createElement(K,{width:13},B.createElement(Y,{color:Ln.GRAY},"Modified")),B.createElement(K,{width:20},B.createElement(Y,{color:Ln.GRAY},"Git Branch")),B.createElement(K,{width:11},B.createElement(Y,{color:Ln.GRAY},"# Messages")),B.createElement(K,null,B.createElement(Y,{color:Ln.GRAY},"Summary"))),B.createElement(K,{columnGap:2},B.createElement(K,{flexDirection:"column",width:5},n.map((e,t)=>B.createElement(Y,{key:`sel-${t}`,color:s===t?Ln.WHITE:Ln.GRAY},s===t?`${be.pointer} ${t+1}.`:` ${t+1}.`))),B.createElement(K,{flexDirection:"column",width:13},n.map((e,t)=>B.createElement(Y,{key:`mod-${e.id}`,color:s===t?Ln.WHITE:Ln.GRAY},u(e.lastModified)))),B.createElement(K,{flexDirection:"column",width:20},n.map((e,t)=>B.createElement(Y,{key:`branch-${e.id}`,color:s===t?Ln.WHITE:Ln.GRAY,wrap:"truncate-end"},e.gitBranch||"-"))),B.createElement(K,{flexDirection:"column",width:11},n.map((e,t)=>B.createElement(Y,{key:`msg-${e.id}`,color:s===t?Ln.WHITE:Ln.GRAY},e.messageCount))),B.createElement(K,{flexDirection:"column"},n.map((e,t)=>B.createElement(Y,{key:`summary-${e.id}`,color:s===t?Ln.WHITE:Ln.GRAY,wrap:"truncate-end"},p(e))))))},"SessionsResumeTable");function getImageHintText({selectedIndex:e,imageCount:t,inHistory:n}){return-1!==e?t>1?"← → · Delete to remove · Esc to deselect":"Delete to remove · Esc to deselect":n?"↓ · ↑ imgs":"↑ to select"}function buildImageRows({imageCount:e,rowWidth:t}){const n=[];let r=[],s=0;for(let o=0;o<e;o++){const e=`[Image #${o+1}]`.length,i=e+(r.length>0?1:0);r.length>0&&s+i>t?(n.push(r),r=[o],s=e):(r.push(o),s+=i)}return r.length>0&&n.push(r),n}function shouldSelectImageOnUpArrow({isOnFirstLine:e,imageCount:t,selectedImageIndex:n,historyIndex:r}){return e&&t>0&&-1===n&&-1===r}function nextImageIndex({currentIndex:e,imageCount:t}){return e===t-1?0:e+1}function prevImageIndex({currentIndex:e,imageCount:t}){return 0===e?t-1:e-1}function removeImageAt({images:e,index:t}){const n=e.filter((e,n)=>n!==t);return{remainingImages:n,nextSelectedIndex:n.length>0?n.length-1:-1}}function ImageLabel({index:e,isSelected:t,filePath:n,showSpaceBefore:r}){const s=`[Image #${e+1}]`,o=n?createOSC8Link(`file://${n}`,s,!1):s;return B.createElement(Y,null,r?" ":"",t?B.createElement(Y,{inverse:!0},s):o)}function ImageRowsDisplay({detectedImages:e,selectedImageIndex:t,imageTempPaths:n,termWidth:r,inHistory:s}){if(0===e.length)return null;const o=getImageHintText({selectedIndex:t,imageCount:e.length,inHistory:s}),i=Math.max(1,r-(o.length+2)),a=buildImageRows({imageCount:e.length,rowWidth:i});return B.createElement(K,{flexDirection:"column",width:"100%",alignItems:"flex-end"},a.map((e,r)=>B.createElement(K,{key:r,flexDirection:"row"},B.createElement(K,{flexShrink:0,marginRight:1},0===r&&B.createElement(Y,{color:Ln.DIM},o)),B.createElement(K,{flexDirection:"row"},e.map((e,r)=>B.createElement(ImageLabel,{key:e,index:e,isSelected:e===t,filePath:n[e],showSpaceBefore:r>0}))))))}Nt(),rr(),Nt(),__name(getImageHintText,"getImageHintText"),__name(buildImageRows,"buildImageRows"),__name(shouldSelectImageOnUpArrow,"shouldSelectImageOnUpArrow"),__name(nextImageIndex,"nextImageIndex"),__name(prevImageIndex,"prevImageIndex"),__name(removeImageAt,"removeImageAt"),__name(ImageLabel,"ImageLabel"),__name(ImageRowsDisplay,"ImageRowsDisplay"),Nt(),Sl();var uk=__name((e={})=>{const{enabled:t=!0,paused:n=!1}=e,[r,s]=W(null),[o,i]=W(!1),a=Q(!1),l=Q(null),[u,d]=W(!1),[m,p]=W("connected"),g=Q(null),h=Q(null),f=V((e,t)=>{h.current&&(clearTimeout(h.current),h.current=null),p(e),d(!0),void 0!==t&&(h.current=setTimeout(()=>{d(!1)},t))},[]),y=V(()=>{h.current&&(clearTimeout(h.current),h.current=null)},[]),w=V(async(e=!1)=>{if(!a.current){a.current=!0;try{let t=l.current,n=t?.isConnected??!1;if(!n){t?.disconnect(),t=new dl,l.current=t;const r=e?200:500;n=await t.connect(r)}const r=g.current;if(null===r?n&&f("connected",3e3):r!==n&&(n?f("connected",2e3):f("disconnected",5e3)),g.current=n,i(n),n&&t){const n=e?500:1e3,r=await t.getContext(n);null!==r||t.isConnected||(t.disconnect(),l.current=null),s(r)}else s(null)}catch{!0===g.current&&f("disconnected",5e3),g.current=!1,i(!1),s(null),l.current?.disconnect(),l.current=null}finally{a.current=!1}}},[f]);G(()=>{if(!t||n)return;w(!0);const e=setInterval(()=>w(!1),500);return()=>{clearInterval(e),y(),l.current?.disconnect(),l.current=null}},[t,n,w,y]);const S={visible:u,message:"connected"===m?`IDE ${be.tick}`:"IDE disconnected",type:m};return{context:r,connected:o,refresh:w,connectionIndicator:S}},"useVSCodeContext");Nt();var dk=__name(e=>{if(!e.activeFile&&!e.selection)return"";const t=["<ide-context>"];if(e.activeFile){const{relativePath:n,language:r,cursor:s}=e.activeFile;t.push(`File: ${n} (${r}, line ${s.line})`)}if(e.selection){const{text:n,startLine:r,endLine:s}=e.selection,o=e.activeFile?.language??"";t.push(`Selected lines ${r}-${s}:`),t.push(`\`\`\`${o}`);const i=n.replace(/```/g,"` ` `").replace(/<\/ide-context>/gi,"</ide-context>");t.push(i),t.push("```")}return t.push("</ide-context>"),t.join("\n")+"\n"},"formatContextForPrompt");Nt();var mk=__name((e,t)=>!(!e||!t?.selection&&!t?.activeFile?.relativePath),"hasIDEContext"),pk=__name((e,t,n)=>{const r=e?t?.selection:null;if(r)return`${r.lineCount} lines selected`;const s=e?t?.activeFile:null;if(s?.relativePath){const e=s.relativePath.split("/").pop()||"",t=n<80?15:n<120?25:40;return`In ${e.length>t?e.slice(0,t-1)+"…":e}`}return"? for shortcuts"},"getIndicatorText"),gk=["","[118;5u","[118;5u"];function removeAltPCharacter(e){return e.includes("π")?e.replace(/π/g,""):null}function isPrecededByWhitespace(e){return!e||" "===e||"\n"===e||"\t"===e}__name(removeAltPCharacter,"removeAltPCharacter"),__name(isPrecededByWhitespace,"isPrecededByWhitespace");var hk=__name(()=>B.createElement(K,{flexDirection:"column",paddingLeft:1},B.createElement(Y,{color:Ln.DIM,bold:!0},"Available Shortcuts:"),B.createElement(K,{columnGap:4},B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Ln.DIM},"! for bash mode"),B.createElement(Y,{color:Ln.DIM},"/ for commands"),B.createElement(Y,{color:Ln.DIM},"@ for file paths"),B.createElement(Y,{color:Ln.DIM},"shift + tab to toggle auto-accept")),B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Ln.DIM},"double tap esc to clear input"),B.createElement(Y,{color:Ln.DIM},"ctrl + j / shift + ⏎ for newline"),B.createElement(Y,{color:Ln.DIM},"ctrl + g to open in editor"),B.createElement(Y,{color:Ln.DIM},"ctrl + z to suspend")))),"ShortcutMenu"),fk=__name(({input:e,onSubmit:t,setInput:n,showCursor:r=!0,placeholder:o="Enter your input…",isPlaceholderPrediction:i=!1,onPlaceholderAccepted:a,showFileList:l,setShowFileList:u,fileSearchQuery:d,setFileSearchQuery:m,onCommand:p,contextUsage:g,tasteLearning:h=!1,tasteUsage:f=!1,shareInfo:y,showShareNotification:w,unshareNotificationMessage:S,tasteNotificationMessage:b,updateStatus:E,updateFailedInfo:C,currentProvider:v,showProviderInfo:T,permissionMode:k="standard",onToggleAutoAccept:_,hintMessage:P,historyManager:A,pendingExitKey:x=null,onOverlayVisibilityChange:I,onDoubleEscapeEmpty:N,onAltP:R,isProcessing:$=!1,ideContextEnabled:L=!0})=>{const[M,O]=W(0),[D,q]=W(!1),[F,j]=W(!1),[z,U]=W(!1),[J,ee]=W(!1),[te,ne]=W(""),[re,se]=W(!1),oe=Q(0),ie=Q(0),[ae,le]=W([]),[ce,ue]=W([]),[de,me]=W(-1),[pe,ge]=W(""),he=Q(!1),fe=Q(!1),[ye,we]=W(-1),[Se,Ee]=W(""),Ce=Q(0),{isEditorOpen:ve,editorError:Te,handleOpenInEditor:ke,clearEditorError:_e}=useExternalEditor({input:e,setInput:n,setInputKey:O,onEditorClose:__name(()=>{he.current=!1},"onEditorClose")}),{handlePaste:Pe,resetPasteState:Ae,isPasting:xe}=useBracketedPaste({input:e,detectedContent:ae,setInput:n,setDetectedImages:ue,setDetectedContent:le,incrementInputKey:__name(()=>O(e=>e+1),"incrementInputKey")}),{context:Ie,connected:Ne,refresh:Re,connectionIndicator:$e}=uk({enabled:L,paused:$}),{stdout:Le}=X(),Me=Le?.columns??80,{pr:Oe}=ek();G(()=>{const e=l||J||re;I?.(e)},[l,J,re,I]);const De=V(()=>{ue([]),me(-1)},[]),qe=V(()=>{n(""),j(!1),ee(!1),ne(""),se(!1),le([]),De(),ge(""),Ae(),we(-1),Ee(""),O(e=>e+1)},[n,Ae,De]),Fe=V(()=>{he.current=!0,n(e+"\n"),O(e=>e+1),setTimeout(()=>{he.current=!1},0)},[e,n]);Z(async(t,r)=>{if(-1!==de&&r.leftArrow)return void me(prevImageIndex({currentIndex:de,imageCount:ce.length}));if(-1!==de&&r.rightArrow)return void me(nextImageIndex({currentIndex:de,imageCount:ce.length}));if(r.upArrow){if(l||J||re)return;const t=e.indexOf("\n"),r=-1===t||Ce.current<=t;if(shouldSelectImageOnUpArrow({isOnFirstLine:r,imageCount:ce.length,selectedImageIndex:de,historyIndex:ye}))return void me(ce.length-1);if(-1!==de&&me(-1),0!==e.length&&-1===ye&&!r)return;const s=A?.count()??0;if(0===s)return;-1===ye&&Ee(e);const o=Math.min(ye+1,s-1);return void(o!==ye&&(we(o),n(A?.getAt(o)||""),O(e=>e+1)))}if(r.downArrow){if(l||J||re)return;if(-1===ye)return;const t=e.lastIndexOf("\n");if(!(-1===t||Ce.current>t))return;const r=ye-1;return we(r),n(-1===r?Se:A?.getAt(r)||""),void O(e=>e+1)}if(""===t||r.ctrl&&"c"===t)return void De();if(r.tab&&!r.shift&&0===e.length&&i&&o&&o.length>0&&!l&&!J&&!re)return he.current=!0,n(o),O(e=>e+1),a?.(),void setTimeout(()=>{he.current=!1},0);if(isCtrlKey({inputChar:t,key:r,letter:"g",ctrlCode:7}))return he.current=!0,void ke();if(getIsExpandToolShortcut(r,t))return he.current=!0,n(e),O(e=>e+1),void setTimeout(()=>{he.current=!1},0);if(isNewlineShortcutKey({inputChar:t,key:r,isPasting:xe()}))return fe.current=!0,Fe(),void setTimeout(()=>{fe.current=!1},0);if(r.meta&&r.backspace)return void qe();if(r.meta&&"w"===t)return he.current=!0,void qe();const s=r.ctrl&&"v"===t||gk.includes(t),u=r.meta&&"v"===t;if(s||u){if(s&&"darwin"===process.platform){const t=e,r=await detectClipboardImage();return r&&(ue(e=>[...e,r]),n(t),O(e=>e+1)),void(he.current=!0)}}else if(!r.ctrl&&!r.meta||"u"!==t){if(r.ctrl&&"z"===t?.toLowerCase())return U(!0),void setTimeout(()=>{process.kill(process.pid,"SIGTSTP")},100);if(-1!==de&&(r.delete||r.backspace)){const{remainingImages:e,nextSelectedIndex:t}=removeImageAt({images:ce,index:de});return ue([...e]),void me(t)}if(r.escape){if(-1!==de)return void me(-1);if(J)return;if(re)return se(!1),n(pe),void O(e=>e+1);const t=Date.now();return t-oe.current<500?(e.length>0?qe():N?.(),oe.current=0,ie.current=0):(oe.current=t,D||F||(ie.current=t)),q(!1),void j(!1)}D&&(r.backspace||r.delete)&&0===e.length&&q(!1)}});const je=V(async t=>{if(ve)return;const r=removeAltPCharacter(t);if(null!==r)return n(r),void R?.();const s=processBracketedPaste(t);if((s.isPasteStart||s.isPasteEnd||xe())&&await Pe(t))return;if(he.current)return void(he.current=!1);-1!==ye&&we(-1);const o=1===t.length,i=t.slice(-1);if(o){if("?"===i&&!D)return q(!0),n(""),void O(e=>e+1);if("!"===i&&!F)return q(!1),j(!0),n(""),void O(e=>e+1)}if("/"!==i||J||"/"!==t||(ee(!0),ne("")),J&&!t.startsWith("/")&&(ee(!1),ne("")),J&&t.startsWith("/")){const e=t.substring(1);e.includes(" ")?(ee(!1),ne("")):ne(e)}"@"!==i||l||isPrecededByWhitespace(t.length>1?t[t.length-2]:"")&&(u(!0),m(""));const a=t.lastIndexOf("@");if(t.length<e.length&&-1!==a&&" "===e.charAt(e.length-1)&&" "!==t.charAt(t.length-1)){const e=t.substring(a+1),n=!e.includes(" "),r=a>0?t[a-1]:"";n&&isPrecededByWhitespace(r)&&(u(!0),m(e))}if(l)if(t.length<e.length){const e=t.lastIndexOf("@");if(-1===e)u(!1),m("");else{const n=t.substring(e+1);m(n)}}else{const e=t.lastIndexOf("@");if(-1!==e){const n=t.substring(e+1),r=n.indexOf(" ");if(-1!==r){const e=n.substring(0,r);m(e),u(!1)}else m(n)}}D&&(t!==e||t.length<e.length)&&q(!1),Te&&_e(),0===t.length&&(j(!1),ee(!1),ne(""),se(!1),De(),le([]),m(""),ge(""),Ae()),n(t)},[D,e,n,l,u,J,F,ce,ye,Pe,Ae,R,Te,_e,ve,De]),ze=V(async()=>{if(Re(),ie.current=0,D)return void q(!1);let n=e.trim();if(!F&&n.startsWith("/")&&p&&"handled"===(await p(n)).status)return A?.add(n),j(!1),ee(!1),ne(""),De(),le([]),we(-1),void Ee("");n.length>0&&A?.add(n),we(-1),Ee("");let r=[];const s=ce.length>0,o=ae.length>0;if(!F&&s&&(r=[...ce]),!F&&o){let e=n;ae.forEach((t,n)=>{const r=`[Text#${n+1}]`;e.includes(r)&&(e=e.replace(r,t))}),n=e}t({input:n,role:F?"bash":"user",images:r,ideContext:Ie?dk(Ie):void 0}),j(!1),ee(!1),ne(""),De(),le([])},[t,p,D,e,F,ce,ae,A,Re,De]),Be=V(t=>{const r=s(process.cwd(),t);let o;if(l&&""!==d){const t=e.lastIndexOf("@");o=-1!==t?e.substring(0,t+1)+r+" ":r+" "}else o=`${e}${r} `;n(o),u(!1),m(""),O(e=>e+1)},[n,u,e,l,d,m]),Ue=V(()=>{u(!1),m("")},[u,m]),We=V(t=>{if("/resume"===t)A?.add(t),we(-1),Ee(""),ge(e),ee(!1),ne(""),se(!0),n(""),O(e=>e+1);else{const e=Object.values(Nv).includes(t);ee(!1),ne(""),e?(A?.add(t),we(-1),Ee(""),n(""),O(e=>e+1),p&&p(t)):(n(t+" "),O(e=>e+1))}},[p,n,e,A]),Qe=V(e=>{ee(!1),ne(""),n(e+" "),O(e=>e+1)},[n]),Ge=V(()=>{ee(!1),ne(""),n(""),we(-1),Ee(""),O(e=>e+1)},[n]),He=V(e=>{se(!1),n(""),ge(""),we(-1),Ee(""),O(e=>e+1),p&&p(`/resume:${e}`)},[p,n]),Ve=V(()=>{se(!1),n(pe),we(-1),Ee(""),O(e=>e+1)},[pe,n]),Ke=V(e=>{Ce.current=e},[]),Ye=H(()=>{const t=Oe&&("OPEN"===Oe.state||"MERGED"===Oe.state);return"auto-accept"===k||"plan"===k||Ne||t?!D&&!re:!D&&0===e.length&&!F&&!re},[D,e,F,re,k,Ne,Oe]),Je=Q(new Map),Xe=H(()=>ce.map((e,t)=>{if(Je.current.has(e))return Je.current.get(e)??null;const n=saveTempImage(e,t+1);return Je.current.set(e,n),n}),[ce]),Ze=__name(()=>D||l||J||re||z?0:Ye||x||F?3:4,"getBottomMargin");return B.createElement(K,{width:"100%",flexDirection:"column",marginBottom:Ze()},!re&&B.createElement(K,{flexDirection:"column",width:"100%"},B.createElement(ImageRowsDisplay,{detectedImages:ce,selectedImageIndex:de,imageTempPaths:Xe,termWidth:Me,inHistory:-1!==ye}),B.createElement(Y,{color:F?Ln.GREEN:Ln.GRAY},be.line.repeat(Me)),B.createElement(TextInput,{key:M,value:e,placeholder:ve?"Save and close the editor to continue...":o,onChange:je,onSubmit:()=>{if(!fe.current)return Date.now()-ie.current<100?(ie.current=0,void Fe()):void(l||J||re||ve||ze());fe.current=!1},showCursor:!ve&&r&&-1===de,onCursorChange:Ke,prefix:`${F?"!":be.pointer} `,prefixColor:F?Ln.GREEN:Ln.WHITE}),B.createElement(Y,{color:F?Ln.GREEN:Ln.GRAY},be.line.repeat(Me))),D&&B.createElement(hk,null),z&&B.createElement(K,{paddingTop:1},B.createElement(Y,{color:Ln.YELLOW},"Command Code has been suspended. Run `fg` to bring\n\t\t\t\t\t\tCommand Code back.")),l&&B.createElement(tk,{onSelectFile:Be,onClose:Ue,searchQuery:d}),J&&B.createElement(Lv,{onSelectCommand:We,onInsertCommand:Qe,onClose:Ge,searchQuery:te}),re&&B.createElement(ck,{onSelectSession:He,onClose:Ve}),(Ye||x)&&B.createElement(lk,{termWidth:Me,indicatorText:pk(Ne,Ie,Me),isIDEIndicator:mk(Ne,Ie),permissionMode:k,prInfo:Oe,tasteLearning:h,contextUsage:g,connectionIndicator:$e,pendingExitKey:x,updateStatus:E,updateFailedInfo:C,currentProvider:v,showProviderInfo:T,isBashMode:F,shareInfo:y,showShareNotification:w,unshareNotificationMessage:S,tasteNotificationMessage:b}),Te&&B.createElement(K,{paddingLeft:1,flexDirection:"column"},B.createElement(Y,{color:Ln.YELLOW},Te)))},"InputBox");Nt(),jr(),rr();var yk=__name(({messages:e})=>0===e.length?null:B.createElement(K,{flexDirection:"column",marginBottom:1},B.createElement(K,{marginBottom:0},B.createElement(Y,{color:qn,dimColor:!0},"Queued (",e.length,")")),e.map((e,t)=>B.createElement(K,{key:t},B.createElement(Y,{dimColor:!0},be.pointerSmall," "),B.createElement(Y,{dimColor:!0},truncateString({text:e,maxChars:80}))))),"QueuedMessages"),wk=B.memo(({queuedMessages:e,isProcessing:t,executionState:n,status:r,input:s,setInput:o,onSubmit:i,showFileList:a,setShowFileList:l,fileSearchQuery:u,setFileSearchQuery:d,onCommand:m,outputTokens:p=0,contextUsage:g,tasteLearning:h,tasteUsage:f,shareInfo:y,showShareNotification:w,unshareNotificationMessage:S,tasteNotificationMessage:b,updateStatus:E,updateFailedInfo:C,currentProvider:v,showProviderInfo:T,permissionMode:k,onToggleAutoAccept:_,hintMessage:P,historyManager:A,pendingExitKey:x,onResetPendingExitKey:I,onDoubleEscapeEmpty:N,retryAttempt:R,onAltP:$,placeholder:L="Ask your question...",isPlaceholderPrediction:M=!1,onPlaceholderAccepted:O})=>{const[D,q]=W(0),F=Q(s);return G(()=>{x&&s!==F.current&&s.length>0&&I?.(),F.current=s},[s,x,I]),G(()=>{if(!t)return void q(0);const e=setInterval(()=>{q(e=>e+1e3)},1e3);return()=>{clearInterval(e)}},[t]),B.createElement(K,{flexDirection:"column"},B.createElement(yk,{messages:e}),B.createElement(K,{flexDirection:"row",justifyContent:"space-between"},B.createElement(K,{flexDirection:"column"},(t||n.isExecuting)&&null===R&&B.createElement(OT,{tokens:p,timeElapsed:D,status:n.isExecuting?`Executing: ${n.currentCommand}`:r}),P&&B.createElement(K,{marginLeft:1},B.createElement(Y,{dimColor:!0}," ","⎿"," ","Tip: ",P)))),B.createElement(fk,{input:s,setInput:o,onSubmit:i,placeholder:L,isPlaceholderPrediction:M,onPlaceholderAccepted:O,showFileList:a,setShowFileList:l,fileSearchQuery:u,setFileSearchQuery:d,onCommand:m,contextUsage:g,tasteLearning:h,tasteUsage:f,shareInfo:y,showShareNotification:w,unshareNotificationMessage:S,tasteNotificationMessage:b,updateStatus:E,updateFailedInfo:C,currentProvider:v,showProviderInfo:T,permissionMode:k,onToggleAutoAccept:_,hintMessage:P,historyManager:A,pendingExitKey:!x||t||n.isExecuting?null:x,onDoubleEscapeEmpty:N,onAltP:$,isProcessing:t}))});Nt(),ns(),ls(),sr(),ir();var Sk=__name(({onComplete:e,onCancel:t})=>{const[n,r]=W(!1),[s,o]=W(""),{authState:i,statusMessage:a,browserUrl:l,apiKeyInput:u,setApiKeyInput:d,handleApiKeySubmit:m,cancel:p}=useAuthFlow({onSuccess:__name((t,n)=>{const s=t.userName&&"API Key"!==t.userName&&"Manual API Key"!==t.userName?t.userName:"";o(s),isInternalTeamFlagEnforced()?r(!0):e(!0,s?`Logged in as ${s}`:"Logged in successfully")},"onSuccess"),onFailure:__name((t,n)=>{e(!1,n)},"onFailure"),onCancel:__name(()=>{t()},"onCancel")});return Z((t,r)=>{if(r.ctrl&&"c"===t){if(n)return void e(!0,s?`Logged in as ${s}. Note: Anthropic authentication skipped.`:"Logged in successfully. Note: Anthropic authentication skipped.");p()}}),n?B.createElement(er,{onSuccess:()=>{e(!0,s?`Logged in as ${s} with Anthropic`:"Logged in successfully with Anthropic")},onCancel:()=>{e(!0,s?`Logged in as ${s}. Note: Anthropic authentication skipped.`:"Logged in successfully. Note: Anthropic authentication skipped.")},onFailure:t=>{e(!0,s?`Logged in as ${s}. Anthropic auth failed: ${t}`:`Logged in successfully. Anthropic auth failed: ${t}`)}}):B.createElement(ss,{authState:i,statusMessage:a,browserUrl:l,apiKeyInput:u,setApiKeyInput:d,handleApiKeySubmit:m})},"LoginOverlay");async function discoverOAuthMetadata(e){const t=new d(e),n=`${t.protocol}//${t.host}`;try{const e=`${n}/.well-known/oauth-authorization-server`,t=await fetchWithTimeout(e,{method:"GET",headers:{Accept:"application/json"}});if(t.ok){const e=await t.json();if(e.authorization_endpoint&&e.token_endpoint)return{authorizationEndpoint:e.authorization_endpoint,tokenEndpoint:e.token_endpoint,registrationEndpoint:e.registration_endpoint,scopes:e.scopes_supported}}}catch(e){dlog("[MCP] OAuth discovery endpoint not available",e)}try{const e=`${n}/.well-known/openid-configuration`,t=await fetchWithTimeout(e,{method:"GET",headers:{Accept:"application/json"}});if(t.ok){const e=await t.json();if(e.authorization_endpoint&&e.token_endpoint)return{authorizationEndpoint:e.authorization_endpoint,tokenEndpoint:e.token_endpoint,registrationEndpoint:e.registration_endpoint,scopes:e.scopes_supported}}}catch(e){dlog("[MCP] OIDC discovery not available",e)}return null}async function checkServerAuthRequirements(e){try{const t=await fetchWithTimeout(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",method:"initialize",id:0,params:{protocolVersion:Ds,capabilities:{},clientInfo:qs}})});return 401===t.status||403===t.status?{requiresAuth:!0,metadata:await discoverOAuthMetadata(e)||void 0}:{requiresAuth:!1}}catch(e){return{requiresAuth:!1,error:`Server unreachable: ${e instanceof Error?e.message:String(e)}`}}}async function registerOAuthClient({registrationEndpoint:e,clientName:t,redirectUris:n}){try{const r=await fetchWithTimeout(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({client_name:t,redirect_uris:n,token_endpoint_auth_method:"none",grant_types:["authorization_code","refresh_token"],response_types:["code"]})});if(r.ok){const e=await r.json();return{clientId:e.client_id,clientSecret:e.client_secret}}}catch(e){dlog("[MCP] OAuth client registration failed",e)}return null}Nt(),rr(),Nt(),Vs(),Hs(),eo(),Ys(),to(),uo(),mo(),po(),Nt(),mo(),po(),Js(),co(),Nt(),so(),Hs(),$n(),__name(discoverOAuthMetadata,"discoverOAuthMetadata"),__name(checkServerAuthRequirements,"checkServerAuthRequirements"),__name(registerOAuthClient,"registerOAuthClient");var bk=__name(({onClose:e})=>{const[t,n]=W([]),[r,s]=W(!0),[o,i]=W(0),[a,l]=W("list"),[u,d]=W(null);G(()=>{m()},[]);const m=__name(async()=>{s(!0);try{const e=await listMcpServers(),t=getMcpConnectionManager().getConnectedServers(),r=await Promise.all(e.map(async e=>{const n=t.find(t=>t.name===e.name);let r,s,o="disconnected";return n&&"connected"===n.status?(o="connected",r=n.tools.length):n&&"error"===n.status?(o="error",s=n.error):e.config.oauth&&(o=await hasTokens(e.name)?"authenticated":"requires_auth"),{name:e.name,config:e.config,scope:e.scope,status:o,toolCount:r,error:s}}));n(r)}catch{}finally{s(!1)}},"loadServers"),p=H(()=>{const e=[];for(const n of["local","project","user"])e.push(...t.filter(e=>e.scope===n));return e},[t]),g=p[o]??null;Z((t,n)=>{n.ctrl&&"c"===t?e():n.escape?"actions"===a||"confirm-remove"===a?(l("list"),d(null)):e():"list"===a&&(n.upArrow&&(i(e=>Math.max(0,e-1)),d(null)),n.downArrow&&(i(e=>Math.min(p.length-1,e+1)),d(null)),n.return&&g&&(l("actions"),d(null)))});const h=__name(e=>{switch(e){case"connected":return B.createElement(Y,{color:Ln.GREEN},be.tick);case"authenticated":return B.createElement(Y,{color:Ln.CYAN},be.tick);case"requires_auth":return B.createElement(Y,{color:Ln.YELLOW},be.warning);case"error":return B.createElement(Y,{color:Ln.RED},be.cross);default:return B.createElement(Y,{color:Ln.GRAY},be.circle)}},"getStatusIcon"),f=__name(e=>{switch(e.status){case"connected":return"connected"+(void 0!==e.toolCount?` · ${e.toolCount} tools`:"");case"authenticated":return"authenticated · not connected";case"requires_auth":return"requires authentication";case"error":return e.error||"error";default:return"not connected"}},"getStatusText"),y=__name(e=>{switch(e){case"local":return"Local MCPs";case"project":return"Project MCPs";case"user":return"User MCPs"}},"getScopeLabel"),w=__name(e=>{switch(e){case"local":return"~/.commandcode/projects/*/mcp.json";case"project":return".mcp.json";case"user":return"~/.commandcode/mcp.json"}},"getScopePath"),S=__name(async e=>{if(g)if("back"!==e.value)if("connected"!==e.value)if("authenticated"!==e.value)if("connect"!==e.value)if("auth"!==e.value)"remove"!==e.value||l("confirm-remove");else{if(!g.config.oauth)return void d({text:"No OAuth configured for this server",color:Ln.YELLOW});d({text:`Authenticating ${g.name}...`,color:Ln.CYAN,loading:!0});try{const e={authorizationUrl:g.config.oauth.authorizationUrl,tokenUrl:g.config.oauth.tokenUrl,clientId:g.config.oauth.clientId,clientSecret:g.config.oauth.clientSecret,scopes:g.config.oauth.scopes},t=await performOAuthFlow(g.name,e,{onStatus:__name(()=>{},"onStatus")});if(t.success){d({text:`${be.tick} Authenticated with ${g.name}`,color:Ln.GREEN});try{const e=getMcpConnectionManager();await e.reconnectServer(g.name)}catch{}await m()}else d({text:`${be.cross} Auth failed: ${t.error}`,color:Ln.RED})}catch(e){d({text:`${be.cross} Failed: ${e instanceof Error?e.message:String(e)}`,color:Ln.RED})}}else{d({text:`Connecting ${g.name}...`,color:Ln.CYAN,loading:!0});try{const e=getMcpConnectionManager();await e.reconnectServer(g.name),d({text:`${be.tick} Connected to ${g.name}`,color:Ln.GREEN}),await m()}catch(e){d({text:`${be.cross} Failed: ${e instanceof Error?e.message:String(e)}`,color:Ln.RED})}}else d({text:"Already authenticated",color:Ln.GREEN});else d({text:"Already connected",color:Ln.GREEN});else l("list")},"handleActionSelect"),b=__name(async e=>{if(g)if("yes"===e.value)try{const e=getMcpConnectionManager();"connected"===g.status&&await e.disconnectServer(g.name),await removeMcpServer({name:g.name,scope:g.scope}),l("list"),await m(),i(e=>Math.min(e,Math.max(0,p.length-2)))}catch(e){d({text:`${be.cross} Failed: ${e instanceof Error?e.message:String(e)}`,color:Ln.RED}),l("actions")}else l("actions")},"handleRemoveConfirm");if(r)return B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Mn,bold:!0},"Manage MCP servers"),B.createElement(Y,{dimColor:!0},"Loading..."));if("confirm-remove"===a&&g)return B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Ln.RED,bold:!0},"Remove ",g.name,"?"),B.createElement(Y,{dimColor:!0},"This will remove the server from ",g.scope," config."),B.createElement(K,{marginTop:1},B.createElement(Ke,{items:[{label:"Yes, remove",value:"yes"},{label:"Cancel",value:"no"}],onSelect:b,indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:Ln.WHITE},e?">":" "),itemComponent:({isSelected:e,label:t})=>B.createElement(Y,{color:e?Ln.WHITE:Ln.GRAY}," ",t)})),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"↑↓ navigate · Enter to select · Esc to cancel")));if("actions"===a&&g){const e=[];return"connected"===g.status?e.push({label:"Connected",value:"connected"}):e.push({label:"Connect",value:"connect"}),g.config.oauth&&("authenticated"===g.status||"connected"===g.status?e.push({label:"Authenticated",value:"authenticated"}):e.push({label:"Authenticate",value:"auth"})),e.push({label:"Remove",value:"remove"}),e.push({label:"Back",value:"back"}),B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Mn,bold:!0},g.name),B.createElement(K,null,h(g.status),B.createElement(Y,{dimColor:!0}," ",f(g))),B.createElement(K,{marginTop:1},B.createElement(Ke,{items:e,onSelect:S,indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:Ln.WHITE},e?">":" "),itemComponent:({isSelected:e,label:t})=>B.createElement(Y,{color:e?Ln.WHITE:Ln.GRAY}," ",t)})),u&&B.createElement(K,{marginTop:1},u.loading&&B.createElement(Y,{color:u.color},B.createElement(Se,{type:"dots"})," "),B.createElement(Y,{color:u.color},u.text)),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"↑↓ navigate · Enter to select · Esc to go back")))}let E=null;return B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Mn,bold:!0},"Manage MCP servers"),B.createElement(Y,{dimColor:!0},t.length," ",1===t.length?"server":"servers"),0===t.length?B.createElement(K,{marginTop:1,flexDirection:"column"},B.createElement(Y,{dimColor:!0},"No MCP servers configured."),B.createElement(Y,{dimColor:!0},'Use "cmd mcp add" to add a server.'),B.createElement(Y,{dimColor:!0},"Docs: https://commandcode.ai/docs/mcp")):B.createElement(K,{marginTop:1,flexDirection:"column"},p.map((e,t)=>{const n=e.scope!==E;E=e.scope;const r=t===o;return B.createElement(B.Fragment,{key:e.name},n&&B.createElement(K,{marginTop:0===t?0:1},B.createElement(Y,{bold:!0},y(e.scope)),B.createElement(Y,{dimColor:!0}," (",w(e.scope),")")),B.createElement(K,{paddingLeft:1},B.createElement(Y,{color:r?Ln.WHITE:Ln.GRAY},r?"› ":" "),B.createElement(Y,{color:r?Ln.WHITE:void 0,bold:r},e.name),B.createElement(Y,{dimColor:!0}," · "),h(e.status),B.createElement(Y,{color:"connected"===e.status?Ln.GREEN:"authenticated"===e.status?Ln.CYAN:"requires_auth"===e.status?Ln.YELLOW:Ln.GRAY}," ",f(e))))})),u&&B.createElement(K,{marginTop:1},u.loading&&B.createElement(Y,{color:u.color},B.createElement(Se,{type:"dots"})," "),B.createElement(Y,{color:u.color},u.text)),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"↑↓ navigate · Enter to select · Esc to close")))},"McpManager");Nt(),qE(),Ot(),un(),rr();var Ek=__name(({onClose:e})=>{const[t,n]=W([]),[r,s]=W(0),[o,i]=W(!0),[a,l]=W(null);G(()=>{__name(async()=>{try{const e=await discoverMemoryFiles(process.cwd());n(e),i(!1)}catch(e){l(e instanceof Error?e.message:"Failed to discover memory files"),i(!1)}},"loadMemoryFiles")()},[]);const u=__name(async t=>{try{await openInEditor(t.path),e()}catch(t){console.error("Error opening memory file. Please ensure you have an editor set up."),e()}},"handleOpenInEditor"),d=t.filter(e=>"project"===e.type||"user"===e.type);if(Z((t,n)=>{n.escape?e():n.upArrow?s(e=>Math.max(0,e-1)):n.downArrow?s(e=>Math.min(d.length-1,e+1)):(n.return&&d[r]&&u(d[r]),"1"===t&&d[0]&&u(d[0]),"2"===t&&d[1]&&u(d[1]))}),o)return B.createElement(K,{paddingLeft:1,paddingTop:1},B.createElement(Y,{color:Ln.DIM},"Loading memory files..."));if(a)return B.createElement(K,{paddingLeft:1,paddingTop:1},B.createElement(Y,{color:Ln.RED},be.cross," ",a));const m=d.map((e,t)=>{const n=t+1;let r="",s="";return"project"===e.type?(r=`${n}. Project memory`,s=e.exists?"Checked in at ./AGENTS.md":"Not found at ./AGENTS.md"):"user"===e.type&&(r=`${n}. User memory`,s=e.exists?"Saved in ~/.commandcode/AGENTS.md":"Not found in ~/.commandcode/AGENTS.md"),{label:r,value:e.path,description:s}});return B.createElement(K,{flexDirection:"column",width:"100%",borderStyle:"single",borderColor:Ln.GRAY,paddingTop:1,paddingBottom:1,paddingLeft:2,paddingRight:2},B.createElement(K,null,B.createElement(Y,{color:Ln.WHITE,bold:!0},"Select memory to edit:")),B.createElement(K,{columnGap:4,marginTop:1},B.createElement(K,{flexDirection:"column"},m.map((e,t)=>B.createElement(Y,{key:t,color:r===t?Ln.WHITE:Ln.DIM},r===t?`${sn} `:" ",e.label))),B.createElement(K,{flexDirection:"column"},m.map((e,t)=>B.createElement(Y,{key:t,color:r===t?Ln.WHITE:Ln.DIM},e.description)))))},"MemorySelector");Nt(),Nt();var Ck=rt()?"∴":"#";function AssistantMessage({content:e}){return B.createElement(K,null,B.createElement(Y,null,Ck),B.createElement(K,{marginLeft:1,flexGrow:1,flexShrink:1,minWidth:0},B.createElement(Markdown,null,e)))}__name(AssistantMessage,"AssistantMessage"),Nt(),un(),rr();var vk={"Interrupted by user":"Interrupted by user","Insufficient credits":nn};function UserMessage({content:e,imageCount:t=0}){const n="Interrupted by user"===e,r="Insufficient credits"===e,s=e.startsWith("Error:"),o=n||r||s,i=o&&vk[e]||e;return B.createElement(K,{flexDirection:"column"},B.createElement(K,{backgroundColor:o?void 0:Qn.BG,paddingRight:1},B.createElement(Y,{color:o?Ln.RED:Qn.POINTER,bold:!o},be.pointer),B.createElement(K,{marginLeft:1},B.createElement(Y,{color:o?Ln.RED:Ln.WHITE,wrap:"wrap"},i))),t>0&&B.createElement(K,{marginLeft:1},B.createElement(Y,{dimColor:!0},"⎿"," ",Array.from({length:t},(e,t)=>`[Image #${t+1}]`).join(" "))))}function BashMessage({command:e,output:t,isPending:n=!1,hasError:r=!1}){let s,o;return n?(s=Ln.YELLOW,o=be.arrowRight):r?(s=Ln.RED,o=be.cross):(s=Ln.GREEN,o=be.tick),B.createElement(K,null,B.createElement(Y,{color:s},o),B.createElement(K,{flexDirection:"column",marginLeft:1},B.createElement(K,null,B.createElement(Y,{color:Ln.GRAY},"$ "),B.createElement(Y,{color:s,bold:!0},e)),B.createElement(K,{columnGap:1,marginLeft:1},B.createElement(Y,null,"⎿"," "),B.createElement(Y,{color:r?Ln.RED:n?Ln.YELLOW:"default",wrap:"wrap"},n?"Executing…":t||"(No output)"))))}__name(UserMessage,"UserMessage"),Nt(),rr(),__name(BashMessage,"BashMessage"),Nt(),Nt(),Ot();rr(),Nt(),Ot();var Tk="Coding agent that continuously learns your taste of writing code.",kk=34,_k=[{key:"Shift+Tab",description:"Toggle mode (default → auto-accept → plan)"},{key:"Ctrl+T",description:"Toggle learning feed"},{key:"Ctrl+O",description:"Toggle expanded tool output (Shift+O in iTerm2)"},{key:"Alt+P",description:"Quick model switch (Option+P on macOS)"},{key:"Ctrl+G",description:"Open input in external editor ($EDITOR)"},{key:"Press Esc twice",description:"Rewind to previous checkpoint"},{key:"/",description:"Open command menu"}],Pk=[{key:"cmd",description:"Start interactive session"},{key:'cmd "message"',description:"Start with initial message"},{key:"-r, --resume",description:"Resume a conversation"},{key:"-c, --continue",description:"Continue the last conversation"},{key:"-t, --trust",description:"Auto-trust project (skip initial permission prompt)"},{key:"-p, --print [query]",description:"Run in non-interactive mode, output response and exit"},{key:"--plan",description:"Start in plan mode"},{key:"--permission-mode <mode>",description:"Set permission mode (standard, plan, auto-accept)"},{key:"--dangerously-skip-permissions",description:"Bypass all permission prompts (use with caution)"},{key:"--add-dir <directory>",description:"Add directory to workspace context"},{key:"--skip-onboarding",description:"Skip taste onboarding (for automated runs)"},{key:"--ide-setup",description:"Setup extension for editor context"},{key:"-v, --version",description:"Output the version number"},{key:"-h, --help",description:"Display this help message"}],Ak=[{key:"/init",description:"Initialize AGENTS.md for this project"},{key:"/memory",description:"Manage Command Code memory"},{key:"/resume",description:"Resume a past conversation"},{key:"/rewind",description:"Restore to a previous checkpoint (Press Esc twice)"},{key:"/clear",description:"Clear the conversation history"},{key:"/share",description:"Share conversation (copy link to clipboard)"},{key:"/unshare",description:"Stop sharing conversation"},{key:"/taste",description:"Manage Taste learning and usage"},{key:"/learn-taste",description:"Learn taste from sessions with other coding agents (Claude Code, Cursor, etc)"},{key:"/skills",description:"Browse and open agent skills"},{key:"/agents",description:"Manage agent configurations"},{key:"/mcp",description:"Manage MCP server connections"},{key:"/model",description:"Switch between Command Code models"},{key:"/provider",description:"Select AI provider (Command Code or Anthropic)"},{key:"/compact",description:"Compact the conversation history"},{key:"/ide",description:"Setup extension to fetch editor context"},{key:"/login",description:"Authenticate with CommandCode via browser"},{key:"/logout",description:"Remove stored authentication"},{key:"/feedback [title]",description:"Share feedback or report bugs (optional title)"},{key:"/review [pr]",description:"Review a pull request (optional PR number)"},{key:"/pr-comments",description:"Fetch all PR comments for current branch"},{key:"/add-dir",description:"Manage additional directory scope"},{key:"/help",description:"Display help information"},{key:"/exit",description:"Exit Command Code"}],xk=[{key:"cmd info",description:"Display system information"},{key:"cmd status",description:"Show authentication status"},{key:"cmd help",description:"Display help information"},{key:"cmd whoami",description:"Show current user"},{key:"cmd update",description:"Update Command Code to the latest version"},{key:"cmd feedback [title]",description:"Share feedback or report bugs (optional title)"},{key:"cmd taste",description:"Manage taste learning packages"},{key:"cmd learn-taste",description:"Learn command structure from repositories"},{key:"cmd mcp",description:"Manage MCP (Model Context Protocol) servers"},{key:"cmd login",description:"Login with Command Code account"},{key:"cmd logout",description:"Remove stored authentication"}],Ik=[{key:"Documentation",description:"https://commandcode.ai/docs"},{key:"Discord Community",description:"https://commandcode.ai/discord"}],Nk=[{key:"cmd",description:"Start interactive session"},{key:'cmd "fix the login bug"',description:"Start with a task"},{key:"cmd -c",description:"Continue last conversation"},{key:"cmd -r",description:"Resume a past session"},{key:'cmd -p "your query"',description:"Run non-interactive query"},{key:"cmd --add-dir ../shared",description:"Start with additional directory scope"},{key:"cmd info",description:"Show system information"},{key:'cmd feedback "title"',description:"Open feedback form with title"}],Rk='Start with a prompt: cmd "fix the login bug"';Nt(),yr();var $k="cmd";function getBinNames(){const e=getPackageJson();return e.bin&&"object"==typeof e.bin?Object.keys(e.bin):e.bin&&"string"==typeof e.bin?[e.name]:[$k]}function getInvokedCommandName(){try{const e=getBinNames(),n=process.argv[1];if(!n)return e[0]||$k;const r=t.basename(n).replace(/\.(m?[jt]s|cjs)$/,"");return e.includes(r)?r:e[0]||$k}catch{return $k}}function HelpMessage(){const e=getInvokedCommandName(),t=H(()=>Ak.filter(e=>!("/provider"===e.key&&!isInternalTeamFlagEnforced())),[]);return B.createElement(K,{flexDirection:"column",paddingY:1},B.createElement(K,{flexDirection:"column",marginBottom:1},B.createElement(K,null,B.createElement(Y,{bold:!0},"Command Code"),B.createElement(Y,{color:Ln.GRAY}," v","0.17.1")),B.createElement(Y,{color:Ln.GRAY},Tk)),B.createElement(K,{flexDirection:"column",marginBottom:1},B.createElement(Y,{bold:!0},"Usage"),B.createElement(K,{paddingLeft:2},B.createElement(Y,null,e," <command> [options]"))),B.createElement(K,{flexDirection:"column",marginBottom:1},B.createElement(Y,{bold:!0},"Options"),B.createElement(K,{flexDirection:"column",paddingLeft:2},Pk.map(t=>B.createElement(K,{key:t.key},B.createElement(Y,null,t.key.replace(/^cmd/,e).padEnd(kk)),B.createElement(Y,{color:Ln.GRAY},t.description))))),B.createElement(K,{flexDirection:"column",marginBottom:1},B.createElement(Y,{bold:!0},"Commands"),B.createElement(K,{flexDirection:"column",paddingLeft:2},xk.map(t=>B.createElement(K,{key:t.key},B.createElement(Y,null,t.key.replace(/^cmd/,e).padEnd(kk)),B.createElement(Y,{color:Ln.GRAY},t.description))))),B.createElement(K,{flexDirection:"column",marginBottom:1},B.createElement(Y,{bold:!0},"Slash Commands"),B.createElement(K,{flexDirection:"column",paddingLeft:2},t.map(e=>B.createElement(K,{key:e.key},B.createElement(Y,null,e.key.padEnd(kk)),B.createElement(Y,{color:Ln.GRAY},e.description))))),B.createElement(K,{flexDirection:"column",marginBottom:1},B.createElement(Y,{bold:!0},"Keyboard Shortcuts"),B.createElement(K,{flexDirection:"column",paddingLeft:2},_k.map(e=>B.createElement(K,{key:e.key},B.createElement(Y,null,e.key.padEnd(kk)),B.createElement(Y,{color:Ln.GRAY},e.description))))),B.createElement(K,{flexDirection:"column",marginBottom:1},B.createElement(Y,{bold:!0},"Examples"),B.createElement(K,{flexDirection:"column",paddingLeft:2},Nk.map(t=>B.createElement(K,{key:t.key},B.createElement(Y,null,t.key.replace(/^cmd/,e).padEnd(kk)),B.createElement(Y,{color:Ln.GRAY},t.description))))),B.createElement(K,{marginBottom:1},B.createElement(Y,{color:Ln.CYAN},be.pointer),B.createElement(Y,{color:Ln.GRAY}," ",Rk.replace(/cmd/,e))),B.createElement(K,{flexDirection:"column"},B.createElement(Y,{bold:!0},"Links"),B.createElement(K,{flexDirection:"column",paddingLeft:2},Ik.map(e=>B.createElement(K,{key:e.key},B.createElement(Y,null,e.key.padEnd(kk)),B.createElement(Y,{color:Ln.CYAN},e.description))))))}function SystemMessage({content:e}){return e.includes("KEYBOARD SHORTCUTS")&&e.includes("COMMANDS")?B.createElement(HelpMessage,null):B.createElement(K,{flexDirection:"column"},B.createElement(Y,{wrap:"wrap"},B.createElement(Markdown,null,e)))}function ErrorMessage({content:e}){const t=e.includes("Interrupted by user");return B.createElement(K,null,B.createElement(Y,{color:Ln.RED},t?be.pointer:be.warning),B.createElement(K,{marginLeft:1,flexGrow:1,flexShrink:1,minWidth:0},t?B.createElement(Y,{color:Ln.RED,wrap:"wrap"},e):B.createElement(Markdown,{color:Ln.RED},e)))}function AutoCompactMessage({content:e}){return B.createElement(K,null,B.createElement(Y,{dimColor:!0},be.info),B.createElement(K,{marginLeft:1,flexGrow:1,flexShrink:1,minWidth:0},B.createElement(Y,{dimColor:!0},e)))}function TasteSkipMessage(){return B.createElement(K,null,B.createElement(Y,{backgroundColor:On.BADGE_BG,color:On.BADGE_FG,bold:!0},`${cv}Taste${cv}`),B.createElement(Y,{dimColor:!0}," ","Skipped. Run"," "),B.createElement(Y,{color:Yn.CODE},"/learn-taste"),B.createElement(Y,{dimColor:!0}," or "),B.createElement(Y,{color:Yn.CODE},"cmd learn-taste"),B.createElement(Y,{dimColor:!0}," anytime."))}function InfoMessage({content:e,metadata:t}){return t?.isTasteSkip?B.createElement(TasteSkipMessage,null):t?.isAutoCompact?B.createElement(AutoCompactMessage,{content:e}):B.createElement(K,null,B.createElement(Y,{dimColor:!0},be.info),B.createElement(K,{marginLeft:1,flexGrow:1,flexShrink:1,minWidth:0},B.createElement(Y,{dimColor:!0},e)))}function CommandResultMessage({message:e,details:t,hasError:n=!1}){return B.createElement(K,{flexDirection:"column",marginBottom:0,marginTop:-1},B.createElement(K,{columnGap:1},B.createElement(Y,null,"⎿"," "),B.createElement(K,{flexGrow:1,flexShrink:1,minWidth:0},B.createElement(Y,{color:n?Ln.YELLOW:void 0},e))),t&&B.createElement(K,{marginLeft:3},B.createElement(Y,{dimColor:!0},"See ",t)))}function IDEStatusMessage({status:e,ide:t,details:n}){return B.createElement(K,{flexDirection:"column"},B.createElement(K,null,"connected"===e&&B.createElement(Y,null,B.createElement(Y,{color:Ln.GREEN},be.tick),B.createElement(Y,null," Connected to "),B.createElement(Y,{color:Ln.CYAN},t)),"installed"===e&&B.createElement(Y,null,B.createElement(Y,{color:Ln.GREEN},be.tick),B.createElement(Y,null," Installed for "),B.createElement(Y,{color:Ln.CYAN},t)),"needs_reload"===e&&B.createElement(Y,null,B.createElement(Y,{color:Ln.YELLOW},be.circle),B.createElement(Y,null," "),B.createElement(Y,{color:Ln.CYAN},t),B.createElement(Y,null," extension needs reload")),"failed"===e&&B.createElement(Y,null,B.createElement(Y,{color:Ln.RED},be.cross),B.createElement(Y,null," Install failed")),"not_in_ide"===e&&B.createElement(Y,null,B.createElement(Y,{color:Ln.YELLOW},be.circle),B.createElement(Y,null," Not in IDE"))),n?.map((e,t)=>B.createElement(Y,{key:t,dimColor:!0}," ",e)))}function renderFeedEntry(e,t){if("user"===e.role){const t=Array.isArray(e.metadata?.images)?e.metadata.images.length:0;return B.createElement(UserMessage,{content:e.input,imageCount:t})}return"assistant"===e.role?B.createElement(AssistantMessage,{content:e.input}):"tool"===e.role?B.createElement(ToolMessage,{name:Qo(e.name||""),input:e.input,output:e.output||"",isPending:Bo(e),hasError:zo(e),metadata:e.metadata,expandedOutput:t}):"bash"===e.role?B.createElement(BashMessage,{command:e.command||"",output:e.output||"",isPending:Bo(e),hasError:zo(e)}):"system"===e.role?B.createElement(SystemMessage,{content:e.input}):"info"===e.role?B.createElement(InfoMessage,{content:e.input,metadata:e.metadata}):"error"===e.role?B.createElement(ErrorMessage,{content:e.input}):"command-result"===e.role?B.createElement(CommandResultMessage,{message:e.input,details:e.details,hasError:e.hasError??!1}):"ide-status"===e.role?B.createElement(IDEStatusMessage,{status:e.status,ide:e.ide,details:e.details}):null}function getModelShortName(e){const t=Object.values(kt).find(t=>t.id===e);return t?t.name.toLowerCase().replace(" ","-"):e.includes("sonnet-4-6")?"sonnet-4.6":e.includes("sonnet")?"sonnet-4.5":e.includes("opus-4-6")?"opus-4.6":e.includes("opus")?"opus-4.5":"sonnet-4.6"}function TranscriptDivider({count:e,width:t}){const n=` ${e} hidden messages (ctrl+e to expand more) `,r=Math.max(0,Math.floor((t-n.length)/2)),s="─".repeat(r);return B.createElement(K,{marginBottom:1},B.createElement(Y,{dimColor:!0},s,n,s))}__name(getBinNames,"getBinNames"),__name(getInvokedCommandName,"getInvokedCommandName"),ir(),__name(HelpMessage,"HelpMessage"),__name(SystemMessage,"SystemMessage"),Jo(),Nt(),rr(),__name(ErrorMessage,"ErrorMessage"),Nt(),rr(),__name(AutoCompactMessage,"AutoCompactMessage"),__name(TasteSkipMessage,"TasteSkipMessage"),__name(InfoMessage,"InfoMessage"),Nt(),rr(),__name(CommandResultMessage,"CommandResultMessage"),Nt(),rr(),__name(IDEStatusMessage,"IDEStatusMessage"),yr(),Ot(),ir(),rr(),__name(renderFeedEntry,"renderFeedEntry"),__name(getModelShortName,"getModelShortName"),__name(TranscriptDivider,"TranscriptDivider");var Lk=B.memo(({feed:e,showHeader:t=!1,staticKey:n,expandedToolOutput:r=!1,currentModel:s,hiddenCount:o=0})=>{const i=o>0?{role:"transcript-divider",count:o}:null,a=[...t?["header"]:[],...i?[i]:[],...e],l=useTerminalWidth(),u=H(()=>BC(l),[l]),d=H(()=>getPackageJson().version||"0.0.0",[]),m=H(()=>getGitHeaderInfo(),[]),p=H(()=>{const e=process.cwd(),t=process.env.HOME??process.env.USERPROFILE??"";return e.replace(t,"~")},[]),g=s?getModelShortName(s):"sonnet-4.5";return B.createElement(J,{items:a,key:n,style:{width:"100%"}},e=>{if("object"==typeof e&&"transcript-divider"===e.role)return B.createElement(TranscriptDivider,{key:"transcript-divider",count:e.count,width:l});if("header"===e)return B.createElement(K,{key:"header",marginBottom:1,flexDirection:"column"},B.createElement(Ze,{name:"vice"},B.createElement(Y,null,u.trimEnd())),B.createElement(K,{flexDirection:"column",marginTop:1},B.createElement(K,null,B.createElement(Y,{color:Wn},"# "),B.createElement(Y,{bold:!0},"Command Code"),B.createElement(Y,{color:Wn}," v",d)),B.createElement(Y,{color:Wn},"# models: ",g," · ","taste-1",isInternalTeamFlagEnforced()&&" · --co"),B.createElement(K,null,B.createElement(Y,{color:Wn},"# ",p,m&&m.isLocal&&m.branch&&B.createElement(Y,{color:Wn}," (branch: ",m.branch,")")))));const t=e,n=renderFeedEntry(t,r);return B.createElement(K,{key:t.id,marginBottom:1,width:"90%"},n)})});Nt(),Jo(),ar(),rr();var Mk=U(__name(function LiveAgentStatusInner2({entry:e}){const t=Qo(e.name||"Agent"),n=e.input||"",r=n.split(/[.\n]/)[0],s=r?r+(n.includes(".")||n.includes("\n")?".":""):n,o=e.metadata?.tokensUsed||0,i=e.metadata?.elapsedSeconds||0,a=e.metadata?.recentTools||[],[l,u]=W(".");return G(()=>{const e=setInterval(()=>{u(e=>"..."===e?".":e+".")},500);return()=>clearInterval(e)},[]),B.createElement(K,{flexDirection:"column",marginBottom:1,width:"90%"},B.createElement(K,null,B.createElement(Y,{backgroundColor:zn.BG,color:zn.FG,bold:!0},` ${t} `),s&&B.createElement(Y,null," ","(",s,")")),B.createElement(K,{columnGap:1,marginLeft:1},B.createElement(Y,null,"⎿"," "),B.createElement(Y,{color:Ln.GRAY},"Running (",formatTime2(i)," | ",formatTokens(o),")",l)),a.length>0&&B.createElement(K,{flexDirection:"column",marginLeft:1},a.map((e,t)=>{const n=Qo(e.name);return B.createElement(K,{key:t,columnGap:1},B.createElement(Y,{color:Ln.GRAY},"⎿"),B.createElement(Y,{color:Ln.GRAY}," ",n),e.input&&B.createElement(Y,{color:Ln.GRAY},"(",e.input,")"))})))},"LiveAgentStatusInner")),Ok=U(__name(function LiveAgentStatus2({entry:e}){return"tool"!==e.role?null:B.createElement(Mk,{entry:e})},"LiveAgentStatus"));function getModelOptions(){return Object.values(kt).map(e=>({label:e.label,value:e.id,modelName:e.name,description:e.description}))}Nt(),Ot(),rr(),__name(getModelOptions,"getModelOptions");var Dk=__name(({onSelect:e,onCancel:t,currentModel:n})=>{const r=getModelOptions(),s=__name(t=>{e(t.value)},"handleSelect");Z((e,n)=>{n.escape&&t()});const o=n?r.findIndex(e=>e.value===n):0;return B.createElement(K,{flexDirection:"column",paddingX:0,width:"100%"},B.createElement(K,null,B.createElement(Y,{color:Mn,bold:!0},"Select model")),B.createElement(K,{marginBottom:1},B.createElement(Y,{dimColor:!0},"Switch between Command Code models. Applies to this session and future Command Code sessions.")),B.createElement(Ke,{items:r,onSelect:s,initialIndex:o>=0?o:0,indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:e?Ln.GREEN:Ln.GRAY},e?be.triangleRightSmall:" "),itemComponent:({isSelected:e,label:t})=>{const s=r.find(e=>e.label===t),o=s?.value===n,i=e?Ln.GREEN:Ln.GRAY;return B.createElement(K,null,B.createElement(Y,{color:i},` ${(s?.label||t).padEnd(24)}`),B.createElement(Y,{dimColor:!0},s?.description),o&&B.createElement(Y,{color:Ln.GREEN}," ",be.tick))}}),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"Press "),B.createElement(Y,{dimColor:!0,bold:!0},"Esc"),B.createElement(Y,{dimColor:!0}," to cancel")))},"ModelSelector");Nt(),ir(),rr();var qk=__name(({onSelect:e,onCancel:t,currentProvider:n})=>{const r=getProviderOptions(),s=__name(t=>{e(t.value)},"handleSelect");Z((e,n)=>{n.escape&&t()});const o=n?r.findIndex(e=>e.value===n):0,i=n&&-1===o;return B.createElement(K,{flexDirection:"column",paddingX:0,width:"100%"},B.createElement(K,{marginBottom:1,flexDirection:"row",justifyContent:"space-between"},B.createElement(K,null,B.createElement(Y,{bold:!0},"Select AI Provider")),n&&B.createElement(K,{flexDirection:"row"},B.createElement(Y,{dimColor:!0},"Current: "),B.createElement(Y,{color:Ln.GREEN},getProviderDisplayName(n)),i&&B.createElement(Y,{color:Ln.YELLOW}," [OAuth enforced]"))),B.createElement(K,{marginBottom:0},B.createElement(Y,{dimColor:!0},"Available Providers:")),B.createElement(Ke,{items:r,onSelect:s,initialIndex:o>=0?o:0,indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:e?Ln.CYAN:Ln.GRAY,bold:e},e?be.triangleRightSmall:" "),itemComponent:({isSelected:e,label:t})=>B.createElement(Y,{color:e?Ln.CYAN:Ln.GRAY,bold:e},` ${t}`)}),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"Press ESC to cancel")))},"ProviderSelector");function RetryMessage({attempt:e}){const[t,n]=W(0);if(G(()=>{if(null===e)return;const t=setInterval(()=>{n(e=>(e+1)%4)},500);return()=>clearInterval(t)},[e]),null===e)return null;const r=".".repeat(t).padEnd(3," ");return B.createElement(K,{marginBottom:1},B.createElement(Y,{color:Kn,dimColor:!0},"Connection Issue. Retrying (attempt ",e,")",r))}Nt(),rr(),__name(RetryMessage,"RetryMessage"),Nt(),Oi(),jr(),un(),rr();var Fk=[{mode:"both",label:"Both",description:"Restore conversation and code (recommended)"},{mode:"conversation",label:"Conversation only",description:"Rewind conversation, keep current code"},{mode:"files",label:"Code only",description:"Restore code, keep conversation"}],jk=__name(({checkpoints:e,onSelect:t,onCancel:n})=>{const r=H(()=>[...e].sort((e,t)=>new Date(e.timestamp).getTime()-new Date(t.timestamp).getTime()),[e]),[s,o]=W(Math.max(0,r.length-1)),[i,a]=W(Math.max(0,r.length-8)),[l,u]=W("checkpoint"),[d,m]=W(null),[p,g]=W(0),h=H(()=>{if(!d)return!0;const e=r.findIndex(e=>e.messageId===d.messageId);if(-1===e)return!0;for(let t=e;t<r.length;t++)if(r[t].filesModified.length>0)return!0;return!1},[d,r]),f=H(()=>h?Fk:Fk.filter(e=>"conversation"===e.mode),[h]);if(G(()=>{if(r.length>0){const e=r.length-1;o(e),a(Math.max(0,r.length-8))}},[r.length,8]),Z((e,h)=>{h.escape?"mode"===l?(u("checkpoint"),m(null),g(0)):n():"checkpoint"===l?h.upArrow?o(e=>{const t=Math.max(0,e-1);return t<i&&a(t),t}):h.downArrow?o(e=>{const t=Math.min(r.length-1,e+1);return t>=i+8&&a(t-8+1),t}):h.return&&r.length>0&&(m(r[s]),u("mode"),g(0)):"mode"===l&&(h.upArrow?g(e=>Math.max(0,e-1)):h.downArrow?g(e=>Math.min(f.length-1,e+1)):h.return&&d&&f[p]&&t({messageId:d.messageId,mode:f[p].mode}))}),0===r.length)return B.createElement(K,{flexDirection:"column",paddingLeft:2,paddingTop:1},B.createElement(Y,{color:Mn,bold:!0},"Rewind"),B.createElement(Y,{dimColor:!0},"No checkpoints available. Start a conversation to create checkpoints."),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"Press "),B.createElement(Y,{dimColor:!0,bold:!0},"Esc"),B.createElement(Y,{dimColor:!0}," to close")));if("mode"===l&&d)return B.createElement(K,{flexDirection:"column",paddingLeft:2,paddingTop:1},B.createElement(Y,{color:Mn,bold:!0},"Rewind"),B.createElement(K,{marginBottom:1},B.createElement(Y,{dimColor:!0},"Restore to: "),B.createElement(Y,{color:Ln.WHITE},truncateString({text:d.userPrompt||"checkpoint",maxChars:50}))),B.createElement(K,{flexDirection:"column"},f.map((e,t)=>{const n=p===t,r=t===f.length-1;return B.createElement(K,{key:e.mode,flexDirection:"column"},B.createElement(K,{flexDirection:"row"},B.createElement(Y,{color:n?Mn:void 0},n?`${sn} `:" "),B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:n?Mn:Ln.WHITE},e.label),B.createElement(Y,{dimColor:!0},e.description))),!r&&B.createElement(Y,null," "))})),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"Press "),B.createElement(Y,{dimColor:!0,bold:!0},"Enter"),B.createElement(Y,{dimColor:!0}," to confirm, "),B.createElement(Y,{dimColor:!0,bold:!0},"Esc"),B.createElement(Y,{dimColor:!0}," to go back")));const y=r.slice(i,i+8);return B.createElement(K,{flexDirection:"column",paddingLeft:2,paddingTop:1},B.createElement(Y,{color:Mn,bold:!0},"Rewind"),B.createElement(Y,{dimColor:!0},"Select a checkpoint to restore your session"),r.length>8&&B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"Showing ",i+1,"-",Math.min(i+8,r.length)," ","of ",r.length)),B.createElement(K,{marginTop:1}),B.createElement(K,{flexDirection:"column"},y.map((e,t)=>{const n=i+t,o=s===n,a=e.filesModified.length,l=t===y.length-1,u=n===r.length-1;return B.createElement(K,{key:e.messageId,flexDirection:"column"},B.createElement(K,{flexDirection:"row"},B.createElement(Y,{color:o?Mn:void 0},o?`${sn} `:" "),B.createElement(K,{flexDirection:"column"},B.createElement(K,null,B.createElement(Y,{color:o?Mn:Ln.WHITE},truncateString({text:e.userPrompt||"(no prompt)",maxChars:60})),B.createElement(Y,{dimColor:!0}," • "),B.createElement(Y,{dimColor:!0},getRelativeTimeString({timestamp:e.timestamp}),u&&" (latest)")),B.createElement(Y,{dimColor:!0},a>0?`${a} file${a>1?"s":""} changed`:"No code changes"))),!l&&B.createElement(Y,null," "))})),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"Press "),B.createElement(Y,{dimColor:!0,bold:!0},"Enter"),B.createElement(Y,{dimColor:!0}," to select, "),B.createElement(Y,{dimColor:!0,bold:!0},"Esc"),B.createElement(Y,{dimColor:!0}," to cancel")))},"RewindSelector");Nt(),$n(),Nt(),Nt(),tC();var zk=__name(e=>{const[t,n]=W(e),[r,s]=W(null);return G(()=>{const t=__name(()=>{n(e.map(e=>({...e,active:!1,complete:!1,items:[],insights:[],message:""}))),s(null)},"handleReset"),r=__name(e=>{"error"!==e.type?n(t=>{if("step_start"===e.type){const n=t.findIndex(t=>t.id===e.step);return n<0?t:t.map((t,r)=>r<n?{...t,active:!1,complete:!0}:r===n?{...t,active:!0,message:e.message||"",...e.label&&{label:e.label},..."complete"===e.step&&{complete:!0},...void 0!==e.learningCount&&void 0!==e.categories&&void 0!==e.storage&&t.summary&&{summary:{learningCount:e.learningCount,categories:e.categories,storage:e.storage}}}:t)}if("progress"===e.type){const n=t.findIndex(e=>e.active);return n<0?t:t.map((t,r)=>r===n?{...t,items:[...t.items,e.message]}:t)}if("insight"===e.type){const n=t.findIndex(e=>"learning"===e.id);return n<0?t:t.map((t,r)=>r===n?{...t,insights:[...t.insights,e.message]}:t)}return t}):s(e.message)},"handleNewEvent");return ZE.on("reset",t),ZE.on("new-event",r),()=>{ZE.off("reset",t),ZE.off("new-event",r)}},[e]),{steps:t,importError:r,setImportError:s}},"useProgressEvents");async function createRequestClient(){const e=getApiBaseUrl(),t=new Vb({baseUrl:e}),n=await getConfiguredProvider(),r=await isOAuthEnforced();let s;if(n===Ct.ANTHROPIC)try{const e=await on.getValidAccessToken();validateOAuthToken({token:e,provider:n}),s=e}catch(e){dlog("Failed to get or validate Anthropic OAuth token:",e instanceof Error?e.message:String(e))}const o={[wt.PROJECT_SLUG]:Yb.getCurrentProjectDirName(),[wt.INTERNAL_TEAM_FLAG_HEADER]:r.toString()};return s&&(o[wt.OAUTH_TOKEN]=`Bearer ${s}`),{request:t,headers:o}}function splitPromptsIntoBatches(e){const t=[];let n=[],r=0;for(const s of e){const e=estimateTokens(s);e>2e3?(n.length>0&&(t.push(n),n=[],r=0),t.push([s])):r+e>2e3?(n.length>0&&t.push(n),n=[s],r=e):(n.push(s),r+=e)}return n.length>0&&t.push(n),t}Nt(),Nt(),gC(),bE(),ts(),$E(),$n(),tC(),Nt(),$n(),tC(),$E(),Nt(),Nt(),Ot(),bE(),ts(),dn(),CE(),$n(),nr(),ar(),__name(createRequestClient,"createRequestClient"),Nt(),$E(),__name(splitPromptsIntoBatches,"splitPromptsIntoBatches"),__name(function calculateObservationsPerBatch(e){return 4},"calculateObservationsPerBatch"),Nt(),Nt(),Ot(),$n(),en(),tC(),Nt();var Bk="claude-haiku-4-5-20251001";function buildObserverPrompt(e,t){return`Scan prompts. ${t} casual observations like a dev friend glancing at your work.\n\nPLAIN TEXT ONLY. No markdown, no formatting.\n\nBe natural and VARIED. Don't repeat the same sentence starters.\n\nGood (notice the variety):\npnpm over npm, nice\ndebugging that auth flow\nreact + typescript stack\ncircular deps came up\ntui flicker stuff\nah the classic memory leak\nsession persistence wip\nfighting with imports again\nhaiku model issues huh\n\nBad (too repetitive - NEVER do this):\nI see you prefer pnpm\nI see debugging auth\nI see react stack\nI see circular deps\noh, TUI issues\noh, memory leak\n\nRules:\n- plain text, lowercase is fine\n- vary your sentence starts - mix it up\n- max 6 words\n- sound human, not robotic\n\nPrompts:\n${e.map((e,t)=>`${t+1}. ${e}`).join("\n")}\n\nVaried observations:`}function buildRequestBody2(e){return{config:getEnvironmentContext(),memory:"",taste:"",skills:"",params:{tools:[],messages:[{role:"user",content:e}],model:`anthropic:${Bk}`,max_tokens:200,temperature:.7,stream:!0},threadId:`observer-${Date.now()}`}}function createInsightEmitter(){let e="",t=0;const n=__name(()=>{if(e.includes("\n")){const t=e.split("\n");for(let e=0;e<t.length-1;e++){const n=t[e].trim();n&&(dlog(`[ObserverAPI] emitting insight: ${n}`),ZE.addEvent({type:"insight",message:n}))}e=t[t.length-1]}},"emitCompletedLines");return{addText:__name(r=>{t++,dlog(`[ObserverAPI] text chunk ${t}: "${r.substring(0,50)}..."`),e+=r,n()},"addText"),emitRemaining:__name(()=>{e.trim()&&(dlog(`[ObserverAPI] emitting final insight: ${e.trim()}`),ZE.addEvent({type:"insight",message:e.trim()}))},"emitRemaining"),getChunkCount:__name(()=>t,"getChunkCount")}}async function processStream(e){let t;try{t=je.fromReadableStream(e),dlog("[ObserverAPI] created MessageStream")}catch(e){throw dlog(`[ObserverAPI] MessageStream creation failed: ${e instanceof Error?e.message:String(e)}`),e}const n=createInsightEmitter();t.on("text",e=>{n.addText(e)});try{await t.finalMessage(),dlog(`[ObserverAPI] stream complete, ${n.getChunkCount()} chunks received`)}catch(e){throw dlog(`[ObserverAPI] stream failed: ${e instanceof Error?e.message:String(e)}`),e}n.emitRemaining()}async function callObserverAPI(e,t,n){dlog(`[ObserverAPI] calling ${St.ALPHA.GENERATE} with model: ${Bk}`);const r=buildRequestBody2(n);let s;try{s=await e.post({endpoint:St.ALPHA.GENERATE,body:r,headers:t,stream:!0}),dlog("[ObserverAPI] got response stream")}catch(e){throw dlog(`[ObserverAPI] request failed: ${e instanceof Error?e.message:String(e)}`),e}await processStream(s),dlog("[ObserverAPI] done")}async function processBatch(e,t,n,r,s){let o=0;for(const e of n)o+=estimateTokens(e);dlog(`[Observer] batch ${r}/${s}: ${n.length} prompts`);const i=buildObserverPrompt(n,4);await callObserverAPI(e,t,i)}async function observeSessionPrompts(e){if(ZE.observerHasRun)return;ZE.markObserverRun();const{prompts:t}=e;try{const{request:e,headers:n}=await createRequestClient(),r=splitPromptsIntoBatches(t);dlog(`[Observer] ${t.length} prompts → ${r.length} batches`);const s=Math.min(r.length,6);for(let t=0;t<s;t++){if(ZE.learningComplete){dlog(`[Observer] stopped at batch ${t} (learning complete)`);break}const s=r[t];try{await processBatch(e,n,s,t+1,r.length)}catch{}}dlog("[Observer] done")}catch(e){dlog(`[Observer] failed (non-critical): ${e instanceof Error?e.message:String(e)}`),ZE.addEvent({type:"progress",message:"Continuing without live observations..."})}}__name(buildObserverPrompt,"buildObserverPrompt"),__name(buildRequestBody2,"buildRequestBody"),__name(createInsightEmitter,"createInsightEmitter"),__name(processStream,"processStream"),__name(callObserverAPI,"callObserverAPI"),__name(processBatch,"processBatch"),__name(observeSessionPrompts,"observeSessionPrompts");var Uk=class{static{__name(this,"SessionImporter")}static async findClaudeCodeSessions(t=0){const n=[];try{const r=e.join(h.homedir(),".claude","projects");await $.access(r);const s=process.cwd().replace(/\//g,"-");dlog(`[Import] scanning project: ${s}`);const o=(await $.readdir(r)).filter(e=>e===s);for(const s of o){const o=e.join(r,s);try{if(!(await $.stat(o)).isDirectory())continue;const r=(await $.readdir(o)).filter(e=>e.endsWith(".jsonl")&&!e.includes(".checkpoints"));dlog(`[Import] found ${r.length} sessions`);for(const s of r){const r=e.join(o,s),i=await $.stat(r),a=s.replace(".jsonl","");if(n.push({id:a,filePath:r,createdAt:i.birthtime,lastModified:i.mtime,messageCount:0,agent:"claude-code"}),t>0&&n.length>=t)break}if(t>0&&n.length>=t)break}catch{continue}}}catch{dlog("[Import] no claude sessions dir")}return n}static async findCodexSessions(e=0,t){try{ZE.addEvent({type:"progress",message:"Scanning Codex sessions..."});const n=await findCodexSessions(process.cwd(),e=>{t?.(e),"reading"===e.phase&&ZE.addEvent({type:"progress",message:`Scanning Codex: ${e.processedFiles}/${e.totalFiles} files (${e.matchedSessions} matched)`})},e);return dlog(`[Import] found ${n.length} Codex sessions`),n}catch(e){return dlog("[Import] no codex sessions",e),[]}}static async extractUserPrompts(e){const t=[];try{const n=(await $.readFile(e,"utf-8")).trim().split("\n");for(const e of n)if(e.trim())try{const n=JSON.parse(e);if("user"===n.type&&n.message){const e=n.message;let r="";e.content&&"string"==typeof e.content&&(r=e.content),r.trim()&&t.push(r.trim())}}catch{continue}t.length>0&&dlog(`[Import] extracted ${t.length} prompts from session`)}catch(t){dlog(`[Import] failed: ${e}`,t)}return t}static splitPromptsIntoBatches(e,t=15e4){const n=[];let r=[],s=0;for(const o of e){const e=estimateTokens(o);if(e>t){r.length>0&&(n.push(r),r=[],s=0);const e=this.splitLargePrompt(o,t);for(const t of e)n.push([t])}else s+e<=t?(r.push(o),s+=e):(r.length>0&&n.push(r),r=[o],s=e)}return r.length>0&&n.push(r),n}static splitLargePrompt(e,t){const n=[],r=e.split("\n");let s="",o=0;for(const e of r){const r=estimateTokens(e);o+r<=t?(s+=(s?"\n":"")+e,o+=r):(s&&n.push(s),s=e,o=r)}return s&&n.push(s),n}static async importAndLearn(){const e=[],t=[],n=[],r=[];try{ZE.addEvent({type:"step_start",step:"importing",label:"Started Learning Taste",message:"Scanning for coding sessions..."});const s=await loadProjectSettings(),o=s.tasteOnboarding?.learnedSessions||{},i=o["claude-code"]?.length||0,a=o.codex?.length||0;dlog(`[Import] loaded settings: claude-code=${i} learned, codex=${a} learned`);const l=await findNewSessions(o),u=l["claude-code"]||[],d=l.codex||[],m=u.length+d.length;if(dlog(`[Import] findNewSessions returned: claude-code=${u.length} new, codex=${d.length} new`),0===m){const e=await this.findClaudeCodeSessions(),t=await findCodexSessions(process.cwd()),n=e.length+t.length,r=[{name:"Claude Code",count:e.length},{name:"Codex",count:t.length}].filter(e=>e.count>0).sort((e,t)=>t.count-e.count).map(e=>`${e.count} ${e.name}`);ZE.addEvent({type:"step_start",step:"complete",label:"Taste Already Learned",message:n>0?`From ${r.join(" + ")} sessions`:"No sessions found for this project"});const s=[];return e.length>0&&s.push({agent:"claude-code",sessionIds:e.map(e=>e.id),displayName:"Claude Code"}),t.length>0&&s.push({agent:"codex",sessionIds:t.map(e=>e.id),displayName:"Codex"}),{success:!1,totalPrompts:0,preferencesLearned:0,errors:[],totalSessions:n,learnedSessions:i+a,agentSessions:s,status:"already-learned"}}if(u.length>0){const e=(await this.findClaudeCodeSessions()).filter(e=>u.includes(e.id));n.push(...e)}if(d.length>0){const e=(await this.findCodexSessions()).filter(e=>d.includes(e.id));r.push(...e)}const p=n.length+r.length;dlog(`[Import] total sessions: ${p} (claude-code: ${n.length}, codex: ${r.length})`),ZE.addEvent({type:"step_start",step:"batching",label:"Organizing your sessions",message:""});const g=[{name:"Claude Code",sessions:n,extractPrompts:this.extractUserPrompts},{name:"Codex",sessions:r,extractPrompts:extractCodexPrompts}].filter(e=>e.sessions.length>0).sort((e,t)=>t.sessions.length-e.sessions.length);for(const n of g){ZE.addEvent({type:"progress",message:`${n.name}: ${n.sessions.length} sessions`});for(const r of n.sessions)try{const e=await n.extractPrompts(r.filePath);e.length>0&&t.push(...e)}catch(t){e.push(`${n.name} import failed: ${t instanceof Error?t.message:String(t)}`)}}if(0===t.length)return{success:!1,totalPrompts:0,preferencesLearned:0,errors:["No prompts found in sessions"]};const h=this.splitPromptsIntoBatches(t);dlog(`[Import] batched: ${t.length} prompts → ${h.length} batches`);const f=observeSessionPrompts({prompts:t}).catch(e=>{dlog(`[Import] observer error: ${e instanceof Error?e.message:String(e)}`)});ZE.addEvent({type:"step_start",step:"learning",label:"Learning your coding taste",message:`Processing ${h.length} batch${1===h.length?"":"es"}`});try{const s=getApiBaseUrl(),o=new Vb({baseUrl:s});let i=!0;for(let e=0;e<h.length;e++){const t=h[e],n=e+1,r=h.length;r>1&&ZE.addEvent({type:"progress",message:`Processing batch ${n}/${r}...`});const s=this.formatBatchLearning(t),a=new rC({request:o,sessionId:crypto.randomUUID(),projectRoot:process.cwd()}),l=[{role:"user",content:s}];dlog(`[Import] batch ${n}/${r}: ${t.length} prompts`),(await a.checkAndProcess({messages:l})).success||(i=!1,dlog(`[Import] batch ${n}/${r} failed`))}if(dlog(`[Import] all batches complete, success: ${i}`),ZE.markLearningComplete(),await f,i){if(n.length>0){const e=n.map(e=>e.id);await markSessionsAsLearned("claude-code",e),dlog(`[Import] marked ${e.length} claude-code sessions as learned`)}if(r.length>0){const e=r.map(e=>e.id);await markSessionsAsLearned("codex",e),dlog(`[Import] marked ${e.length} codex sessions as learned`)}}else dlog("[Import] NOT marking sessions as learned due to batch failures");const a=await this.extractLearningSummary(),l=[];if(n.length>0&&l.push(`Claude Code (${n.length})`),r.length>0&&l.push(`Codex (${r.length})`),!i){const s="Learning failed - sessions not marked as learned";return e.push(s),ZE.addEvent({type:"error",message:s}),{success:!1,totalPrompts:t.length,preferencesLearned:a.totalLearnings,errors:e,totalSessions:p,agentSessions:[...n.length>0?[{agent:"claude-code",sessionIds:n.map(e=>e.id),displayName:"Claude Code"}]:[],...r.length>0?[{agent:"codex",sessionIds:r.map(e=>e.id),displayName:"Codex"}]:[]]}}return ZE.addEvent({type:"step_start",step:"complete",label:"Learning Complete",message:`Learned from ${l.join(" + ")}`,learningCount:a.totalLearnings,categories:a.categories,storage:".commandcode/taste/taste.md"}),{success:!0,totalPrompts:t.length,preferencesLearned:a.totalLearnings,errors:e,totalSessions:p,agentSessions:[...n.length>0?[{agent:"claude-code",sessionIds:n.map(e=>e.id),displayName:"Claude Code"}]:[],...r.length>0?[{agent:"codex",sessionIds:r.map(e=>e.id),displayName:"Codex"}]:[]]}}catch(n){const r=`Learning agent failed: ${n instanceof Error?n.message:String(n)}`;return e.push(r),ZE.addEvent({type:"error",message:r}),{success:!1,totalPrompts:t.length,preferencesLearned:0,errors:e}}}catch(t){const n=t instanceof Error?t.message:String(t);return e.push(n),{success:!1,totalPrompts:0,preferencesLearned:0,errors:e}}}static async extractLearningSummary(){try{const t=e.join(process.cwd(),".commandcode","taste","taste.md"),n=await $.readFile(t,"utf-8"),r=n.match(/^- .+Confidence:/gm),s=r?r.length:0;return{totalLearnings:s,categories:n.split("\n").filter(e=>e.startsWith("# ")).map(e=>e.replace(/^# /,"").trim()).filter(e=>e&&!e.toLowerCase().startsWith("taste"))}}catch{return{totalLearnings:0,categories:[]}}}static formatBatchLearning(e){return e.map((e,t)=>`${t+1}. ${e}`).join("\n\n")}};tC();var Wk=__name(e=>new Promise((t,n)=>setTimeout(()=>n(new Error("Learning timed out. Try again with /learn-taste")),e)),"createTimeout"),Qk=__name(e=>{const[t,n]=W({isImporting:!0,waitingForInput:!1,alreadyLearned:!1,learnedSessionCount:0,totalSessionCount:0,agentSessions:[],error:null});return G(()=>{ZE.reset(),ZE.markImportStarted(),(async()=>{try{const t=await Promise.race([Uk.importAndLearn(),Wk(12e4)]);if(t.success)return void n(e=>({...e,isImporting:!1,waitingForInput:!0}));if("already-learned"===t.status)return void n(e=>({...e,isImporting:!1,alreadyLearned:!0,learnedSessionCount:t.learnedSessions||0,totalSessionCount:t.totalSessions||0,agentSessions:t.agentSessions||[],waitingForInput:!0}));const r=t.errors.join("\n");n(e=>({...e,isImporting:!1,waitingForInput:!0,error:r})),e&&e(r)}catch(t){const r=t instanceof Error?t.message:String(t);n(e=>({...e,isImporting:!1,waitingForInput:!0,error:r})),e&&e(r)}})()},[e]),t},"useImportProcess");Nt();var Gk=__name(({onEscape:e,onEnter:t,enabled:n=!0})=>{Z((r,s)=>{n&&(s.escape&&e(),(s.return||"\n"===r)&&t())})},"useKeyboardInput");Nt(),$n();var Hk=__name(({autoLearn:e,onShouldSkip:t})=>{const[n,r]=W(null),[s,o]=W(null),i=Q(!1);return G(()=>{if(i.current)return;let n=null;return(async()=>{try{i.current=!0,dlog("[Hook:Conditions] loading...");const n=await checkOnboardingConditions();r(n),n.shouldTrigger||e?dlog(`[Hook:Conditions] result: ${n.reason}, sessions: ${n.sessionCount}`):(dlog("[Hook:Conditions] no trigger, skipping"),t())}catch(e){const r=e instanceof Error?e.message:String(e);dlog("[Hook:Conditions] error",r),o(r),n=setTimeout(()=>t(),2e3)}})(),()=>{n&&clearTimeout(n)}},[e,t]),{conditions:n,error:s,isLoading:!n&&!s}},"useOnboardingConditions");async function completeOnboarding(e){try{await markOnboardingCompleted(),dlog("[Helper] onboarding marked complete")}catch(e){dlog(`[Helper] complete error: ${e instanceof Error?e.message:String(e)}`)}finally{ZE.reset(),e()}}async function skipOnboarding(e){try{await markOnboardingSkipped(),dlog("[Helper] onboarding marked skipped")}catch(e){dlog(`[Helper] skip error: ${e instanceof Error?e.message:String(e)}`)}finally{ZE.reset(),e()}}Nt(),$n(),Nt(),$n(),tC(),__name(completeOnboarding,"completeOnboarding"),__name(skipOnboarding,"skipOnboarding");var Vk=__name(({onStepChange:e,onError:t,onCompleteCallback:n})=>{const r=Q(n),s=V(()=>{dlog("[Handler] import started → learning"),e("learning")},[e]),o=V(async()=>{dlog("[Handler] import complete → done"),e("done"),await completeOnboarding(()=>r.current())},[e]),i=V(e=>{dlog(`[Handler] import error: ${e}`),t(e)},[t]),a=V(async()=>{dlog("[Handler] error dismissed by user → done"),e("done"),await skipOnboarding(()=>r.current({skipped:!0}))},[e]),l=V(async()=>{dlog("[Handler] skipped → done"),e("done"),await skipOnboarding(()=>r.current({skipped:!0}))},[e]);return n!==r.current&&(r.current=n),{handleImportStart:s,handleImportComplete:o,handleImportError:i,handleErrorDismiss:a,handleSkip:l}},"useOnboardingHandlers");Nt(),$n();var Kk=__name(({conditions:e,autoLearn:t})=>{const[n,r]=W("checking"),s=Q(!1);return G(()=>{if(e&&!s.current){if(s.current=!0,t)return dlog("[Flow] autoLearn → learning"),void r("learning");dlog(`[Flow] → asking (${e.reason})`),r("asking")}},[e,t]),G(()=>{dlog(`[Flow] step: ${n}`)},[n]),{step:n,setStep:r}},"useOnboardingFlow");Nt(),Nt(),rr();var Yk=__name(({error:e})=>B.createElement(K,{padding:1},B.createElement(K,{flexDirection:"column",borderColor:Ln.RED,padding:1},B.createElement(K,{marginBottom:1},B.createElement(Y,null,"Error initializing onboarding: ",e)),B.createElement(K,null,B.createElement(Y,null,"Continuing without onboarding...")))),"OnboardingError");Nt(),Nt(),Ot(),rr();var Jk=__name(()=>`(run /${Tt.LEARN_TASTE} anytime)`,"getSkipHint"),Xk=__name(()=>B.createElement(Y,null,"Skip for now"," ",B.createElement(Y,{dimColor:!0},Jk())),"SkipOptionText"),Zk=__name(({sessionCount:e,agentSessions:t,onImport:n,onSkip:r})=>{const[s,o]=W(1);return Z((e,t)=>{t.escape?r():t.upArrow||t.downArrow?o(e=>1===e?2:1):"1"!==e?"2"!==e?t.return&&(1===s?n():r()):r():n()}),B.createElement(K,{flexDirection:"column",borderStyle:"single",borderColor:On.TEXT,paddingX:1,paddingY:0},B.createElement(Y,{color:On.TEXT,bold:!0},"Build Your Coding Taste"),B.createElement(K,{marginTop:1,flexDirection:"column"},B.createElement(Y,null,"Found"," ",1===e?"one session":`${e} sessions`," ","from"," ",t.map(e=>e.displayName).join(", ")," ","for this project."),B.createElement(K,{marginTop:1},B.createElement(Y,null,"Want me to analyze"," ",1===e?"that session":"those sessions"," ","and build your coding taste profile?"))),B.createElement(K,{marginTop:1,flexDirection:"column"},B.createElement(K,null,B.createElement(Y,{color:1===s?On.TEXT:Ln.GRAY},1===s?be.pointer:" "," 1. Yes, learn from my sessions (recommended)")),B.createElement(K,null,B.createElement(Y,{color:2===s?On.TEXT:Ln.GRAY},2===s?be.pointer:" "," 2."," ",B.createElement(Xk,null)))),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"Use arrow keys or numbers to select, Enter to confirm")))},"ImportChoice");Nt(),Nt(),rr();var e_=__name(({error:e})=>B.createElement(K,{flexDirection:"column",borderStyle:"single",borderColor:Ln.RED,paddingX:2,paddingY:1,marginBottom:2},B.createElement(Y,{color:Ln.RED,bold:!0},"Oops, something went wrong:"),B.createElement(K,{marginTop:1},B.createElement(Y,null,e))),"ErrorSection");Nt(),Nt(),rr(),Nt(),Nt(),Nt(),rr();var t_=[be.bullet,be.squareSmallFilled,be.lozenge,be.star,be.triangleRight,be.triangleUp,be.circleFilled,be.pointer],n_=__name(()=>B.createElement(Y,{backgroundColor:On.BADGE_BG,color:On.BADGE_FG},`${cv}TASTE${cv}`),"TasteBadge"),r_=["percolating","excavating","deciphering","triangulating","osmosing","metabolizing","grokking","spelunking","interpolating","marinating","crystallizing","synthesizing","calibrating","fermenting","coalescing","transmuting","simmering","distilling","ruminating","perusing","assimilating","untangling","decoding","absorbing","harmonizing","digesting","contemplating","extrapolating","materializing","finalizing"],s_=__name(()=>{const[e,t]=W(()=>Math.floor(Math.random()*r_.length));G(()=>{const e=setInterval(()=>{t(Math.floor(Math.random()*r_.length))},2e3);return()=>clearInterval(e)},[]);const n=r_[e];return B.createElement(Y,{color:Ln.YELLOW},n,"...")},"PulsingText"),o_=__name(e=>String(e).padStart(3," "),"padNum"),i_=__name(e=>t_[e%t_.length],"getSymbol"),a_=__name((e,t,n,r)=>r?`${e} observations (↑↓ scroll)`:`↑${o_(t)} ↓${o_(n)} (↑↓ scroll)`,"buildStatusLine"),l_=__name(({insights:e})=>{const[t,n]=W(0),[r,s]=W(!0),o=e.length,i=o>10,a=Math.max(0,o-10);if(G(()=>{r&&i&&n(a)},[o,r,i,a]),Z((e,t)=>{if(i)return t.upArrow?(s(!1),void n(e=>Math.max(0,e-1))):void(t.downArrow&&n(e=>{const t=Math.min(a,e+1);return t===a&&s(!0),t}))}),0===o)return null;const l=e.slice(t,t+10),u=t,d=o-t-10;return B.createElement(K,{flexDirection:"column",marginLeft:4,marginBottom:0},i&&B.createElement(Y,{dimColor:!0},a_(o,u,d,r)),l.map((e,n)=>{const r=t+n;return B.createElement(K,{key:r,marginBottom:0},B.createElement(Y,{dimColor:!0},i_(r)," ",e))}))},"ScrollableInsights"),c_=__name(({label:e,message:t,active:n,complete:r,items:s,insights:o,isIntro:i,isAllComplete:a,summary:l})=>{if(i)return B.createElement(K,{flexDirection:"column",marginBottom:0},B.createElement(n_,null),B.createElement(K,{marginTop:0},B.createElement(Y,{dimColor:!0},"⎿"),B.createElement(K,{marginLeft:2},a?B.createElement(Y,{color:On.TEXT},"learned your coding taste"):B.createElement(s_,null))));const u=__name(()=>{const[e,t]=W(!0);return G(()=>{const e=setInterval(()=>{t(e=>!e)},500);return()=>clearInterval(e)},[]),B.createElement(Y,{color:Ln.YELLOW},e?be.circleFilled:be.circle)},"PulsingDot"),d=__name(()=>r?B.createElement(Y,{color:On.TEXT},be.nodejs):n?B.createElement(u,null):B.createElement(Y,{dimColor:!0},be.circle),"getStatusIcon"),m=s.length>0||o.length>0||t||l&&l.learningCount>0;return!r||n||m?B.createElement(K,{flexDirection:"column",marginBottom:0},(n||r)&&B.createElement(K,{marginBottom:0},B.createElement(K,{marginRight:1},d()),B.createElement(Y,{color:r?Ln.WHITE:n?Ln.YELLOW:Ln.DIM},e)),r&&t&&(!l||0===l.learningCount)&&B.createElement(K,{marginLeft:3,marginBottom:0},B.createElement(Y,{dimColor:!0},t)),s.length>0&&B.createElement(K,{flexDirection:"column",marginLeft:1,marginBottom:0},s.map((e,t)=>B.createElement(Y,{key:t,dimColor:!0},`${be.bullet} ${e}`))),o.length>0&&B.createElement(l_,{insights:o}),r&&l&&l.learningCount>0&&B.createElement(K,{flexDirection:"column",marginLeft:1,marginBottom:0},B.createElement(K,{marginBottom:1,flexDirection:"row"},B.createElement(Y,null,"⎿"),B.createElement(K,{marginLeft:2},B.createElement(Y,{color:On.TEXT},"Learned ",l.learningCount," preference",1===l.learningCount?"":"s",l.categories.length>0?` across ${l.categories.length} ${1===l.categories.length?"category":"categories"}`:""))),B.createElement(K,{flexDirection:"column",marginLeft:1},B.createElement(Y,{dimColor:!0},be.pointerSmall," Stored in"," ",l.storage),B.createElement(Y,{dimColor:!0},"Command Code automatically uses & updates taste files.")))):null},"StepItem"),u_=__name(({steps:e})=>{const t=e.find(e=>"complete"===e.id)?.complete??!1;return B.createElement(K,{flexDirection:"column",marginBottom:1},e.map((e,n)=>B.createElement(K,{key:e.id,marginLeft:0===n?0:3},B.createElement(c_,{label:e.label,message:e.message,active:e.active,complete:e.complete,items:e.items,insights:e.insights,summary:e.summary,isIntro:0===n,isAllComplete:t}))))},"StepsSection"),d_=__name(({steps:e})=>B.createElement(u_,{steps:e}),"ProgressSection");Nt();var m_=__name(({isImporting:e=!1,waitingForInput:t=!1})=>B.createElement(B.Fragment,null,e&&B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"ESC to cancel")),t&&B.createElement(K,{marginTop:1},B.createElement(Y,{bold:!0},"Press ENTER to continue"))),"HelpTextSection");Nt();var p_=[{id:"importing",label:"Initializing Taste Profile",message:"",active:!1,complete:!1,items:[],insights:[]},{id:"batching",label:"Organizing your sessions",message:"",active:!1,complete:!1,items:[],insights:[]},{id:"learning",label:"Learning your coding taste",message:"",active:!1,complete:!1,items:[],insights:[]},{id:"complete",label:"Learned your coding taste!",message:"",active:!1,complete:!1,items:[],insights:[],summary:{learningCount:0,categories:[],storage:".commandcode/taste/taste.md"}}],g_=__name(({onComplete:e,onError:t,onErrorDismiss:n})=>{const{steps:r,importError:s}=zk(p_),{isImporting:o,waitingForInput:i,error:a}=Qk(t);return Gk({onEscape:e,onEnter:__name(()=>{i&&(a&&n?n():e())},"onEnter"),enabled:o||i}),B.createElement(K,{flexDirection:"column",padding:1},s&&B.createElement(e_,{error:s}),!s&&B.createElement(d_,{steps:r}),B.createElement(m_,{isImporting:o,waitingForInput:i}))},"ImportProgress"),h_=__name(({step:e,conditions:t,onImportStart:n,onImportComplete:r,onImportError:s,onErrorDismiss:o,onSkip:i})=>"asking"===e?t&&"has_sessions"===t.reason?B.createElement(Zk,{sessionCount:t.sessionCount,agentSessions:t.agentSessions,onImport:n,onSkip:i}):null:"learning"===e?B.createElement(g_,{onComplete:r,onError:s,onErrorDismiss:o}):null,"OnboardingStepRenderer"),f_=__name(({onComplete:e,autoLearn:t=!1})=>{G(()=>(dlog("[UI:Onboarding] mounted"),()=>{dlog("[UI:Onboarding] unmounted")}),[]);const{conditions:n,error:r,isLoading:s}=Hk({autoLearn:t,onShouldSkip:e}),{step:o,setStep:i}=Kk({conditions:n,autoLearn:t}),{handleImportStart:a,handleImportComplete:l,handleImportError:u,handleErrorDismiss:d,handleSkip:m}=Vk({onStepChange:__name(e=>{i(e)},"onStepChange"),onError:__name(()=>{},"onError"),onCompleteCallback:e});return dlog(`[UI:Onboarding] render: ${o}${n?.reason?` (${n.reason})`:""}${r?" ERROR":""}`),s?null:r?B.createElement(Yk,{error:r}):"done"===o?null:B.createElement(h_,{step:o,conditions:n,onImportStart:a,onImportComplete:l,onImportError:u,onErrorDismiss:d,onSkip:m})},"TasteOnboarding");function getEntryCharCount(e){return("input"in e?e.input??"":"").length+("output"in e?e.output??"":"").length+("command"in e?e.command??"":"").length}function getBudgetedFeed(e,t){if(0===e.length)return[];const n=[...e].reverse();let r=t;const s=[];for(const e of n)if(s.unshift(e),r-=getEntryCharCount(e),r<=0)break;return s}__name(getEntryCharCount,"getEntryCharCount"),__name(getBudgetedFeed,"getBudgetedFeed");var y_=U(__name(function MainView2({feed:e,liveAgents:t,queuedMessages:n,isCmdCodeBusy:r,staticKey:s,transcriptMode:o,tasteOnboardingEntryId:i,autoLearnTaste:a,retryAttempt:l,input:u,setInput:d,fileSearchQuery:m,setFileSearchQuery:p,showFileList:g,setShowFileList:h,showProviderSelector:f,showModelSelector:y,showMemorySelector:w,showMcpManager:S,showAgentsConfig:b,showRewindSelector:E,showLoginOverlay:C,showAddDirModal:v,authComponentInfo:T,status:k,currentProvider:_,currentModel:P,showProviderNotification:A,shareInfo:x,showShareNotification:I,unshareNotificationMessage:N,updateStatus:R,updateFailedInfo:$,permissionMode:L,hintMessage:M,pendingExitKey:O,tasteLearningEnabled:D,interactionTokens:q,contextUsage:F,historyManagerRef:j,executionState:z,contextEngineRef:U,onSubmit:W,onCommand:Q,onToggleAutoAccept:G,onResetPendingExitKey:J,onDoubleEscapeEmpty:X,onTasteOnboardingComplete:Z,permissionPanel:ee,questionPanel:te,onRewindSelect:ne,onRewindCancel:re,onLoginComplete:se,onLoginCancel:oe,setShowProviderSelector:ie,setShowModelSelector:ae,setShowMemorySelector:le,setShowMcpManager:ce,setShowAgentsConfig:ue,setShowAddDirModal:de,handleProviderSelect:me,handleProviderCancel:pe,handleModelSelect:ge,handleModelCancel:he,handleAuthSuccess:fe,handleAuthCancel:ye}){const we=H(()=>e.filter(e=>"taste-onboarding"!==e.role),[e]),Se=useTerminalWidth(),{placeholder:be,isPrediction:Ee,onAccepted:Ce}=usePredictedPlaceholder({contextEngineRef:U,isCmdCodeBusy:r}),ve=H(()=>"off"===o?we:getBudgetedFeed(we,"limited"===o?15e3:5e4),[we,o]),Te=H(()=>"off"===o?0:Math.max(0,we.length-ve.length),[we.length,ve.length,o]),ke=H(()=>0===Te?ve:ve.filter(e=>"user"!==e.role),[ve,Te]),_e=V(()=>ue(!1),[ue]),Pe=V(()=>le(!1),[le]),Ae=V(()=>ce(!1),[ce]),xe=V(()=>de(!1),[de]),Ie=V(()=>ae(!0),[ae]),Ne=!("off"!==o||ee||te||f||y||T||w||S||b||E||C||v||i);return B.createElement(K,{flexDirection:"column",width:"100%"},B.createElement(Lk,{staticKey:s,feed:ke,showHeader:!0,expandedToolOutput:"off"!==o,currentModel:P,hiddenCount:Te}),i&&B.createElement(f_,{onComplete:Z,autoLearn:a}),t.map(e=>B.createElement(Ok,{key:e.id,entry:e})),B.createElement(RetryMessage,{attempt:l}),te,ee,"off"!==o&&B.createElement(K,{flexDirection:"column",marginTop:1},B.createElement(K,null,B.createElement(Y,{dimColor:!0},"─".repeat(Se))),B.createElement(K,{paddingRight:1},B.createElement(Y,{backgroundColor:jn.BG,color:jn.FG,bold:!0},`${cv}DETAILED TRANSCRIPT${cv}`),B.createElement(Y,{dimColor:!0}," · "),B.createElement(Y,{bold:!0},"ctrl+o"),B.createElement(Y,{dimColor:!0}," to toggle"),B.createElement(Y,{dimColor:!0}," · "),B.createElement(Y,{bold:!0},"ctrl+e"),B.createElement(Y,{dimColor:!0}," ","to"," ","limited"===o?"show all":"collapse"))),Ne&&B.createElement(wk,{queuedMessages:n,isProcessing:r,executionState:z,status:k,input:u,setInput:d,onSubmit:W,showFileList:g,setShowFileList:h,fileSearchQuery:m,setFileSearchQuery:p,onCommand:Q,outputTokens:q,contextUsage:F,tasteLearning:D,shareInfo:x,showShareNotification:I,unshareNotificationMessage:N,updateStatus:R,updateFailedInfo:$,currentProvider:_,showProviderInfo:A,permissionMode:L,onToggleAutoAccept:G,hintMessage:M,historyManager:j.current,pendingExitKey:O,onResetPendingExitKey:J,onDoubleEscapeEmpty:X,retryAttempt:l,onAltP:Ie,placeholder:be,isPlaceholderPrediction:Ee,onPlaceholderAccepted:Ce}),f&&B.createElement(K,{marginY:1},B.createElement(qk,{onSelect:me,onCancel:pe,currentProvider:_})),y&&B.createElement(K,{marginY:1},B.createElement(Dk,{onSelect:ge,onCancel:he,currentModel:P})),b&&B.createElement(K,{marginY:1},B.createElement(jT,{onCancel:_e})),w&&B.createElement(K,{marginY:1},B.createElement(Ek,{onClose:Pe})),S&&B.createElement(K,{marginY:1},B.createElement(bk,{onClose:Ae})),E&&U.current&&B.createElement(K,{marginY:1},B.createElement(jk,{checkpoints:U.current.listCheckpoints(),onSelect:ne,onCancel:re})),T&&B.createElement(K,{marginY:1},B.createElement(T.Component,{onSuccess:fe,onCancel:ye})),C&&B.createElement(K,{marginY:1},B.createElement(Sk,{onComplete:se,onCancel:oe})),v&&B.createElement(K,{marginY:1},B.createElement(TT,{onClose:xe})))},"MainView"));function renderView({feedState:e,sessionState:t,statusState:n,authState:r,uiOverlays:s,onboarding:o,exitState:i,pendingOps:a,permissionState:l,contextEngineRef:u,historyManagerRef:d,executionState:m,actionCallbacks:p,onSubmit:g,onCommand:h,input:f,setInput:y,fileSearchQuery:w,setFileSearchQuery:S,updateFailedInfo:b,handleTrust:E,handleNoTrust:C,handleToggleAutoAccept:v,handleDoubleEscapeEmpty:T,handleTasteOnboardingComplete:k,loadTasteStatus:_}){if(i.shouldExit)return null;if(o.checkingProject)return null;if(o.showTrustPrompt)return B.createElement(sT,{staticKey:s.staticKey,onTrust:E,onExit:C});if(s.showSessionSelector)return B.createElement(iT,{onSelectSession:p.onSelectSession,onNewSession:p.onNewSession});if(!o.projectTrusted)return null;const P=a.pendingQuestion?B.createElement(QuestionView,{pendingQuestion:a.pendingQuestion,permissionMode:l.permissionMode,setPermissionMode:l.setPermissionMode,setPendingQuestion:a.setPendingQuestion,setStatus:n.setStatus,setStaticKey:s.setStaticKey}):null,A=a.pendingPermission?B.createElement(fT,{pendingPermission:a.pendingPermission,permissionMode:l.permissionMode,setPendingPermission:a.setPendingPermission,setStatus:n.setStatus,respondToPrompt:l.respondToPrompt,showHintMessage:n.showHintMessage,handleToggleAutoAccept:v}):null;return s.showLearningFeed?B.createElement(LearningView,{setShowLearningFeed:s.setShowLearningFeed,setStaticKey:s.setStaticKey,onExit:()=>i.setShouldExit(!0)}):s.showTasteConfig?B.createElement(TasteConfigView,{staticKey:s.staticKey,setShowTasteConfig:s.setShowTasteConfig,loadTasteStatus:_}):s.showSkillsConfig?B.createElement(SkillsConfigView,{staticKey:s.staticKey,setShowSkillsConfig:s.setShowSkillsConfig}):B.createElement(y_,{feed:e.feed,liveAgents:e.liveAgents,queuedMessages:e.queuedMessages,isCmdCodeBusy:e.isCmdCodeBusy,staticKey:s.staticKey,transcriptMode:s.transcriptMode,tasteOnboardingEntryId:o.tasteOnboardingEntryId,autoLearnTaste:o.autoLearnTaste,retryAttempt:n.retryAttempt,input:f,setInput:y,fileSearchQuery:w,setFileSearchQuery:S,showFileList:s.showFileList,setShowFileList:s.setShowFileList,showProviderSelector:s.showProviderSelector,showModelSelector:s.showModelSelector,showMemorySelector:s.showMemorySelector,showMcpManager:s.showMcpManager,showAgentsConfig:s.showAgentsConfig,showRewindSelector:s.showRewindSelector,showLoginOverlay:s.showLoginOverlay,showAddDirModal:s.showAddDirModal,authComponentInfo:r.authComponentInfo,status:n.status,currentProvider:r.currentProvider,currentModel:r.currentModel,showProviderNotification:r.showProviderNotification,shareInfo:n.shareInfo,showShareNotification:n.showShareNotification,unshareNotificationMessage:n.unshareNotificationMessage,updateStatus:n.updateStatus,updateFailedInfo:b,permissionMode:l.permissionMode,hintMessage:n.hintMessage,pendingExitKey:i.pendingExitKey,tasteLearningEnabled:n.tasteLearningEnabled,interactionTokens:n.interactionTokens,contextUsage:n.contextUsage,historyManagerRef:d,executionState:m,contextEngineRef:u,onSubmit:g,onCommand:h,onToggleAutoAccept:v,onResetPendingExitKey:i.resetPendingExitKey,onDoubleEscapeEmpty:T,onTasteOnboardingComplete:k,permissionPanel:A,questionPanel:P,onRewindSelect:p.onRewindSelect,onRewindCancel:p.onRewindCancel,onLoginComplete:p.onLoginComplete,onLoginCancel:p.onLoginCancel,setShowProviderSelector:s.setShowProviderSelector,setShowModelSelector:s.setShowModelSelector,setShowMemorySelector:s.setShowMemorySelector,setShowMcpManager:s.setShowMcpManager,setShowAgentsConfig:s.setShowAgentsConfig,setShowRewindSelector:s.setShowRewindSelector,setShowLoginOverlay:s.setShowLoginOverlay,setShowAddDirModal:s.setShowAddDirModal,handleProviderSelect:p.handleProviderSelect,handleProviderCancel:p.handleProviderCancel,handleModelSelect:p.handleModelSelect,handleModelCancel:p.handleModelCancel,handleAuthSuccess:p.handleAuthSuccess,handleAuthCancel:p.handleAuthCancel})}__name(renderView,"renderView");var w_=__name(({resume:e=!1,continue:t=!1,trust:n=!1,dangerouslySkipPermissions:r=!1,updateStatus:s,updateFailedInfo:o,initialPrompt:i,skipOnboarding:a=!1,initialPermissionMode:l})=>{const{exit:u}=te(),{stdout:d}=X(),[m,p]=W(""),[g,h]=W(""),f=Q(!1),y=Q(!1),w=Q(null),S=Q(null),b=useUiOverlays(),E=useFeed(),C=useSession(),v=useStatus(s),T=useAuth(),k=usePendingOps(),_=useOnboarding(),P=useExit(),{executeBash:A,executionState:x}=tv(),I=usePermissionMode({initialPermissionMode:l,dangerouslySkipPermissions:r,setPendingPermission:k.setPendingPermission,setStatus:v.setStatus,contextEngineRef:S}),{createContextEngineCallbacks:N}=useContextEngine({sessionId:C.sessionId,sessionLoaded:C.sessionLoaded,showSessionSelector:b.showSessionSelector,projectTrusted:_.projectTrusted,setFeed:E.setFeed,setLiveAgents:E.setLiveAgents,setQueuedMessages:E.setQueuedMessages,queuedMessagesRef:E.queuedMessagesRef,setStatus:v.setStatus,pinnedStatusRef:v.pinnedStatusRef,setRetryAttempt:v.setRetryAttempt,setInteractionTokens:v.setInteractionTokens,setContextUsage:v.setContextUsage,setCurrentProvider:T.setCurrentProvider,shareInfoRef:v.shareInfoRef,permissionsService:I.permissionsService,permissionModeRef:I.permissionModeRef,setPendingQuestion:k.setPendingQuestion,contextEngineRef:S}),{loadTasteStatus:R,loadCurrentProvider:$,onSubmit:L}=useStartup({resume:e,continueLatest:t,trust:n,initialPrompt:i,stdout:d,feedState:E,sessionState:C,statusState:v,authState:T,onboarding:_,uiOverlays:b,permissionState:I,contextEngineRef:S,isSubmittingRef:f,initialPromptSubmittedRef:y,historyManagerRef:w,executeBash:A,createContextEngineCallbacks:N,setInput:p});useLifecycle({exit:u,feedState:E,exitState:P,statusState:v,authState:T,onboarding:_,uiOverlays:b,skipOnboarding:a});const{handleToggleAutoAccept:M,handleDoubleEscapeEmpty:O,handleTasteOnboardingComplete:D,handleTrust:q,handleNoTrust:F}=useHandlers({resume:e,feedState:E,onboarding:_,uiOverlays:b,exitState:P,pendingOps:k,permissionState:I,statusState:v,authState:T,contextEngineRef:S,loadTasteStatus:R,loadCurrentProvider:$,setInput:__name(e=>p(e),"setInput")}),{onCommand:j}=useCommandCtx({feedState:E,sessionState:C,statusState:v,uiOverlays:b,onboarding:_,exitState:P,permissionState:I,contextEngineRef:S,isSubmittingRef:f,executeBash:A,createContextEngineCallbacks:N,setInput:p});return renderView({feedState:E,sessionState:C,statusState:v,authState:T,uiOverlays:b,onboarding:_,exitState:P,pendingOps:k,permissionState:I,contextEngineRef:S,historyManagerRef:w,executionState:x,actionCallbacks:useMainActionCallbacks({feedState:E,sessionState:C,statusState:v,authState:T,uiOverlays:b,permissionState:I,contextEngineRef:S,createContextEngineCallbacks:N,setInput:p}),onSubmit:L,onCommand:j,input:m,setInput:p,fileSearchQuery:g,setFileSearchQuery:h,updateFailedInfo:o,handleTrust:q,handleNoTrust:F,handleToggleAutoAccept:M,handleDoubleEscapeEmpty:O,handleTasteOnboardingComplete:D,loadTasteStatus:R})},"InteractiveCLI");Nn(),Sn(),CE();var S_=__name(e=>e?{isValid:!0}:{isValid:!1,errorMessage:["Error: Interactive mode requires a TTY terminal.","Please run this command directly in your terminal, not through a pipe or redirect."].join("\n")},"validateTtyEnvironment"),b_=__name(e=>Boolean(e.resume||e.continue),"shouldValidateSessions"),E_=__name(({isInitialized:e,sessionCount:t})=>e&&0===t?{canProceed:!1,exitCode:0,message:"No conversations found to resume."}:{canProceed:!0},"validateSessionAvailability"),C_=__name(({options:e})=>{let t;return e.permissionMode?t=e.permissionMode:e.plan&&(t="plan"),{resume:e.resume,continue:e.continue,trust:e.trust,dangerouslySkipPermissions:e.dangerouslySkipPermissions,initialPrompt:e.initialPrompt,skipOnboarding:e.skipOnboarding,initialPermissionMode:t}},"buildInteractiveCLIProps"),v_=__name(()=>({stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,exitOnCtrlC:!1}),"getInkRenderOptions"),T_=__name(()=>{enableBracketedPasteMode(),process.on("exit",()=>{disableBracketedPasteMode()})},"setupBracketedPasteMode"),k_=__name(()=>{T_()},"initializeTerminal"),__=__name(async(e={})=>{const t=S_(process.stdin.isTTY);if(t.isValid||(console.error(t.errorMessage),process.exit(1)),k_(),b_(e)){const e=await Yb.isProjectInitialized(),t=e?await Yb.listSessions():[],n=E_({isInitialized:e,sessionCount:t.length});n.canProceed||(console.log(n.message),process.exit(n.exitCode))}startEarlyInputCapture();const n=C_({options:e}),r=v_();ee(B.createElement(w_,{...n}),r)},"interactiveMode");Nt(),Es(),bE(),ts(),Ot(),Gs(),dn(),nr(),ar(),en(),qE(),SC(),gi(),JE(),CE(),hi();var P_=null,A_=!1,x_=new Set([Is.EDIT_FILE,Is.WRITE_FILE,Is.SHELL_COMMAND]);async function readStdin(){return new Promise((e,t)=>{let n="";const r=setTimeout(()=>{t(new Error("Timeout reading from stdin"))},3e4);process.stdin.setEncoding("utf8"),process.stdin.on("data",e=>{n+=e}),process.stdin.on("end",()=>{clearTimeout(r),e(n.trim())}),process.stdin.on("error",e=>{clearTimeout(r),t(e)}),process.stdin.resume()})}async function isAuthenticated(){return null!==await getAuthKey()}function setupSignalHandlers(){if(A_)return;A_=!0;const e=__name(e=>{P_?.abort(),process.stderr.write(`\n${e}\n`),process.exit(130)},"handleTermination");process.on("SIGINT",()=>e("Interrupted.")),process.on("SIGTERM",()=>e("Terminated.")),process.stdout.on("error",e=>{"EPIPE"===e.code&&process.exit(0),process.stderr.write(`Error writing to stdout: ${e.message}\n`),process.exit(1)})}async function printMode(e={}){setupSignalHandlers(),P_=new AbortController;let t=e.query||"";if(!t){process.stdin.isTTY&&(process.stderr.write('Error: No query provided. Usage: cmd -p "your query"\n'),process.exit(1));try{t=await readStdin()}catch(e){const t=e instanceof Error?e.message:"Unknown error";process.stderr.write(`Error reading from stdin: ${t}\n`),process.exit(1)}}t.trim()||(process.stderr.write('Error: No query provided. Usage: cmd -p "your query"\n'),process.exit(1)),await isAuthenticated()||(process.stderr.write('Error: Not authenticated. Please run "cmd login" first.\n'),process.exit(3));try{const n=await processQuery({query:t,signal:P_.signal,dangerouslySkipPermissions:e.dangerouslySkipPermissions});process.stdout.write(n),n.endsWith("\n")||process.stdout.write("\n"),process.exit(0)}catch(e){e instanceof Error&&"AbortError"===e.name&&(process.stderr.write("\nCancelled.\n"),process.exit(130)),e instanceof ii&&(process.stderr.write('Error: Authentication failed. Please run "cmd login" first.\n'),process.exit(3)),e instanceof ai&&(process.stderr.write(`Error: ${e.message}\n`),process.exit(4)),e instanceof di&&(process.stderr.write("Error: Rate limit exceeded. Please wait a moment and try again.\n"),process.exit(5)),e instanceof si&&(process.stderr.write("Error: Unable to connect to the API. Please check your network connection.\n"),process.exit(6)),e instanceof mi&&(process.stderr.write("Error: The API server encountered an error. Please try again later.\n"),process.exit(7));const t=e instanceof Error?e.message:"Unknown error";/permission denied|access denied|not permitted|unauthorized/i.test(t)&&(process.stderr.write(`Error: ${t}\n`),process.exit(4)),process.stderr.write(`Error: ${t}\n`),process.exit(1)}}__name(readStdin,"readStdin"),__name(isAuthenticated,"isAuthenticated"),__name(setupSignalHandlers,"setupSignalHandlers"),__name(printMode,"printMode");var I_=10;async function setupConversationContext(){const e=await getToolSchemas(),t=await getConfiguredProvider(),n=await isOAuthEnforced();let r;t===Ct.ANTHROPIC&&(r=await on.getValidAccessToken(),validateOAuthToken({token:r,provider:t}));const s=getEnvironmentContext(),o=await getMemoryContent([]),i=await getTasteContent(),a=generateSkillsXML(await loadAllSkillSummaries())||null,l=crypto.randomUUID(),u=await isTasteLearningEnabled(),d={[wt.PROJECT_SLUG]:Yb.getCurrentProjectDirName(),[wt.TASTE_LEARNING]:u.toString(),[wt.INTERNAL_TEAM_FLAG_HEADER]:n.toString()};return r&&(d[wt.OAUTH_TOKEN]=`Bearer ${r}`),{tools:e,config:s,memory:o,taste:i,skills:a,headers:d,sessionId:l}}async function callApi(e,t,n,r){const s={tools:t.tools,stream:!0,max_tokens:64e3,temperature:.3,messages:n,model:`anthropic:${getConfiguredModel()}`},o={config:t.config,memory:t.memory,taste:t.taste,skills:t.skills,params:s,threadId:t.sessionId},i=await e.post({body:o,stream:!0,endpoint:St.ALPHA.GENERATE,headers:t.headers,signal:r});return je.fromReadableStream(i).finalMessage()}async function executeToolCall(e,t,n){if(x_.has(e.name)&&!n)return{type:"tool_result",tool_use_id:e.id,content:`Error: Tool "${e.name}" requires permissions. Use --dangerously-skip-permissions to enable file writes and shell commands in print mode.`,is_error:!0};try{const n=await executeTool(e.name,e.input,{abortSignal:t});return{type:"tool_result",tool_use_id:e.id,content:n}}catch(t){if(t instanceof ii||t instanceof ai||t instanceof di||t instanceof si||t instanceof mi)throw t;if(t instanceof Error&&"AbortError"===t.name)throw t;const n=t instanceof Error?t.message:"Unknown error";return{type:"tool_result",tool_use_id:e.id,content:`Error: ${n}`,is_error:!0}}}async function processQuery(e){const{query:t,signal:n,dangerouslySkipPermissions:r=!1}=e,s=getApiBaseUrl(),o=new Vb({baseUrl:s}),i=[{role:"user",content:t}],a=await setupConversationContext();let l=0,u="";for(;l<I_;){if(l++,n.aborted)throw new Error("Cancelled");const e=await callApi(o,a,i,n),t=e.content.filter(e=>"text"===e.type),s=e.content.filter(e=>"tool_use"===e.type),d=t.map(e=>e.text).join("");if(d&&(u+=d),0===s.length)break;const m=[];for(const e of s){if(n.aborted)throw new Error("Cancelled");const t=await executeToolCall(e,n,r);m.push(t)}i.push({role:"assistant",content:e.content}),i.push({role:"user",content:m})}return l>=I_&&process.stderr.write(`Warning: Reached maximum conversation turns (${I_}). The response may be incomplete. Consider breaking your query into smaller parts.\n`),u}__name(setupConversationContext,"setupConversationContext"),__name(callApi,"callApi"),__name(executeToolCall,"executeToolCall"),__name(processQuery,"processQuery"),zt();var N_=__name(e=>e&&!e.startsWith("-")?e:void 0,"parsePrompt"),R_=__name(async()=>{await checkAuthAndPromptLogin()||process.exit(1)},"ensureAuthenticated"),$_=__name(e=>{const t={};return e.trust&&(t.trust=!0),e.dangerouslySkipPermissions&&(t.dangerouslySkipPermissions=!0,t.trust=!0),e.skipOnboarding&&(t.skipOnboarding=!0),e.plan&&(t.plan=!0),e.permissionMode&&(t.permissionMode=e.permissionMode),t},"buildRuntimeOptions"),L_=__name(({options:e,runtimeOptions:t,initialPrompt:n})=>e.resume?{resume:!0,...t}:e.continue?{continue:!0,...t}:{...t,initialPrompt:n},"getInteractiveConfig"),M_=__name((e,t)=>"string"==typeof e.print&&e.print.trim()?e.print:t&&!t.startsWith("-")?t:"","extractPrintQuery");async function interactiveModeAction(e,t){if(t.addDir&&t.addDir.length>0)for(const e of t.addDir)addDirectory(e);if(void 0!==t.print){const n=M_(t,e);return void await printMode({query:n,dangerouslySkipPermissions:t.dangerouslySkipPermissions})}const n=N_(e);await R_();const r=$_(t),s=L_({options:t,runtimeOptions:r,initialPrompt:n});__(s)}__name(interactiveModeAction,"interactiveModeAction"),Nt(),$n(),Vr(),globalThis.COMMAND_CODE_CWD=process.cwd();var O_=__name(()=>process.cwd(),"getCwd"),D_=__name(()=>process.argv.slice(2),"getArgs"),q_=__name(e=>e.includes("--local")?"local":e.includes("--staging")?"staging":"production","getEnv"),F_=__name(()=>{const e=O_(),t=D_(),n=q_(t);dlog(`[Startup] cwd: ${e}`),dlog(`[Startup] args: ${t.join(" ")}`),dlog(`[Startup] env: ${n}`),dlog(`[Startup] traceId: ${getTraceId()??"unavailable"}`)},"logStartupInfo");async function preRun(){F_(),process.argv.includes("--ide-setup")&&(formatSetupResult(await runIDESetup()).forEach(e=>console.log(e)),process.exit(0)),await maybeRunPendingUpdate(),checkForUpdateAsync(),setTimeout(()=>ensureExtensionInstalled().catch(()=>{}),100)}__name(preRun,"preRun"),Nt(),Ot(),$n(),yr(),ir();var j_=getPackageJson(),z_=__name((e,t=[])=>[...t,e],"collectAddDir");function displayCustomHelp(){const e=j_.version,t=getInvokedCommandName(),n=Ak.filter(e=>!("/provider"===e.key&&!isInternalTeamFlagEnforced()));console.log(),console.log(Be.bold("Command Code")+Be.gray(` v${e}`)),console.log(Be.gray(Tk)),console.log(),console.log(Be.bold("Usage")),console.log(` ${t} <command> [options]`),console.log(),console.log(Be.bold("Options"));for(const e of Pk){const n=e.key.replace(/^cmd/,t);console.log(" "+n.padEnd(kk)+Be.gray(e.description))}console.log(),console.log(Be.bold("Commands"));for(const e of xk){const n=e.key.replace(/^cmd/,t);console.log(" "+n.padEnd(kk)+Be.gray(e.description))}console.log(),console.log(Be.bold("Slash Commands"));for(const e of n)console.log(" "+e.key.padEnd(kk)+Be.gray(e.description));console.log(),console.log(Be.bold("Keyboard Shortcuts"));for(const e of _k)console.log(" "+e.key.padEnd(kk)+Be.gray(e.description));console.log(),console.log(Be.bold("Examples"));for(const e of Nk){const n=e.key.replace(/^cmd/,t);console.log(" "+n.padEnd(kk)+Be.gray(e.description))}console.log(),console.log(Be.cyan("❯")+" "+Be.gray(Rk.replace(/cmd/,t))),console.log(),console.log(Be.bold("Links"));for(const e of Ik)console.log(" "+e.key.padEnd(kk)+Be.cyan(e.description));console.log()}function createProgram(){const e=new Ae;return e.name(getInvokedCommandName()).description("Command Code with your coding taste.").version(j_.version,"-v, --version","display the version number").argument("[prompt]","Your prompt to run in interactive mode").option("-r, --resume","Resume a session (pick from history)").option("-c, --continue"," Continue the most recent session in the current directory").option("-t, --trust","Trust the project (skip initial trust permission prompt)").option("--dangerously-skip-permissions","Bypass all permission prompts (use with caution)").option("--plan","Start in plan mode (read-only exploration and planning)").addOption(new xe("--permission-mode <mode>","Set permission mode").choices(["standard","plan","auto-accept"])).option("--skip-onboarding","Skip taste onboarding (for non-interactive/automated runs)").option("-p, --print [query]","Run in non-interactive mode, output response and exit").option("--ide-setup","Setup extension to fetch IDE context").option("--add-dir <directory>","Add directory to workspace context",z_,[]).addOption(new xe(ft).hideHelp()).addOption(new xe(yt).hideHelp()).addOption(new xe("-d, --debug","Enable debug mode").hideHelp()).addOption(new xe("--local","Use local server").hideHelp()).addOption(new xe("--staging","Use staging server").hideHelp()).helpOption("-h, --help","Display help message").allowUnknownOption(),e.configureHelp({formatHelp:__name(()=>(displayCustomHelp(),""),"formatHelp")}),e}function setupCommanderHooks(e){e.hook("preAction",(e,t)=>{dlogSection("cmd");const n=t.name(),r=t.parent?.name();dlog(`[cmd] ${r&&r!==n?"subcommand":"running"}: ${n}`);const s=t.opts(),o=Object.entries(s).filter(([,e])=>void 0!==e&&!1!==e).map(([e,t])=>!0===t?`--${e}`:`--${e}=${t}`).join(" ");o&&dlog(`[cmd] options: ${o}`);const i=t.args;i.length>0&&dlog(`[cmd] arguments: ${i.join(" ")}`)}),e.hook("postAction",()=>{dlogSection("Done")})}__name(displayCustomHelp,"displayCustomHelp"),__name(createProgram,"createProgram"),__name(setupCommanderHooks,"setupCommanderHooks"),Nt(),Vr(),Jr(),AC();var B_=!1;function setupTelemetry(){initTelemetry()&&(startSession(),trackSystemInfo(),registerCleanupHandlers())}async function trackSystemInfo(){try{const e=process.version,t=h.platform(),n=h.arch();let r,s,o,i;try{const e=await getAuthenticatedEntity();e.success&&(r=e.user?.userName,s=e.user?.id,o=e.org?.login,i=e.org?.id)}catch{}if(!s)try{const e=await loadCredentials();s=e?.userId}catch{}systemInfo({userName:r,userId:s,orgLogin:o,orgId:i,nodeVersion:e,platform:t,arch:n})}catch{}}function registerCleanupHandlers(){process.on("beforeExit",async()=>{await shutdownTelemetry()}),process.on("exit",()=>{shutdownTelemetrySync()}),process.on("SIGINT",handleShutdownSignal),process.on("SIGTERM",handleShutdownSignal)}function handleShutdownSignal(){B_||(B_=!0,shutdownTelemetry().finally(()=>{process.exit(0)}))}async function openGitHubIssue(e){const t=buildGitHubIssueUrl(e),n=Ie("Opening GitHub issues...").start();try{await ie(t,{wait:!1,background:!0}),n.succeed(`Opened ${createOSC8Link(t,"GitHub issue")} in your browser`),console.log("")}catch(e){n.fail("Failed to open browser"),console.log(""),console.log(createOSC8Link(t,"Open GitHub issue manually")),console.log("")}}__name(setupTelemetry,"setupTelemetry"),__name(trackSystemInfo,"trackSystemInfo"),__name(registerCleanupHandlers,"registerCleanupHandlers"),__name(handleShutdownSignal,"handleShutdownSignal"),Qs(),Nt(),__name(openGitHubIssue,"openGitHubIssue");var U_=new Ae("feedback").description("Open GitHub issues to share feedback or report bugs").argument("[title]","Optional issue title").action(openGitHubIssue);Nt();var W_=new Ae("help").description("Display help information").allowUnknownOption().allowExcessArguments().action(function(){this.parent?.help()});async function runInfo(e){const{waitUntilExit:t}=ee(B.createElement(Qv,{verbose:e.verbose,text:e.text}));await t()}Nt(),Nt(),__name(runInfo,"runInfo");var Q_=new Ae("info").description("Display system information").option("--verbose","Show detailed CPU and network information").option("--text","Print plain text without colors").allowUnknownOption().allowExcessArguments().action(async e=>{await runInfo(e)});function runLearnTaste(){const{unmount:e}=ee(B.createElement(g_,{onComplete:__name(()=>{e(),process.exit(0)},"onComplete"),onError:__name(()=>{e(),process.exit(1)},"onError")}))}Nt(),Ot(),Nt(),__name(runLearnTaste,"runLearnTaste"),$n(),Vr();var G_=new Ae(Tt.LEARN_TASTE).description("Learn from your previous sessions - updates your taste profile").allowUnknownOption().allowExcessArguments().action(async()=>{try{runLearnTaste()}catch(e){trackError({error:sanitizeErrorForTelemetry({error:e instanceof Error?e:new Error(String(e)),label:"learn_taste_render_failed"}),context:{component:Br.LEARN_TASTE_COMMAND,heading:"Learn taste render failed"}}),dlog(`[/learn-taste] render failed: ${e instanceof Error?e.message:String(e)}`),await shutdownTelemetry(),process.exit(1)}});function addMcpCommand(){const e=new Ae("add");return e.description("Add an MCP server").argument("<name>","Server name (unique identifier)").argument("[url]","Server URL (required for http transport)").option("-t, --transport <type>","Transport type (stdio or http)","stdio").addOption(new xe("-s, --scope <scope>","Configuration scope").choices(["local","project","user"]).default("local")).option("-e, --env <KEY=value>","Environment variable (repeatable)",collectKeyValue,{}).option("-H, --header <header>","HTTP header (repeatable, http only)",collectHeaders,{}).allowUnknownOption().allowExcessArguments().action(async(e,t,n,r)=>{const s=getInvokedCommandName();try{let o;/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(e)&&!e.includes("__")||(console.error(Be.red(`Error: Invalid server name '${e}'`)),console.error(Be.gray("Names must start with a letter or number, contain only letters, numbers, hyphens, and single underscores")),process.exit(1)),"stdio"!==n.transport&&"http"!==n.transport&&(console.error(Be.red(`Error: Invalid transport type '${n.transport}'`)),console.error(Be.gray("Valid options: stdio, http")),process.exit(1));let i=!1;if("http"===n.transport){t||(console.error(Be.red("Error: URL is required for http transport")),console.error(Be.gray("Usage: cmd mcp add --transport http <name> <url>")),process.exit(1));try{new URL(t)}catch{console.error(Be.red(`Error: Invalid URL '${t}'`)),process.exit(1)}o={transport:"http",enabled:!0,url:t,...Object.keys(n.header).length>0&&{headers:n.header},...Object.keys(n.env).length>0&&{env:n.env}},console.log(Be.gray("Checking server authentication requirements..."));const r=await checkServerAuthRequirements(t);if(r.error&&console.log(Be.yellow(`Warning: ${r.error}`)),r.requiresAuth&&r.metadata){console.log(Be.cyan("Server requires OAuth authentication."));let t,n="command-code";if(r.metadata.registrationEndpoint){console.log(Be.gray("Registering OAuth client..."));const e=await registerOAuthClient({registrationEndpoint:r.metadata.registrationEndpoint,clientName:"Command Code CLI",redirectUris:[`http://127.0.0.1:${no}/callback`]});e&&(n=e.clientId,t=e.clientSecret)}o.oauth={authorizationUrl:r.metadata.authorizationEndpoint,tokenUrl:r.metadata.tokenEndpoint,clientId:n,clientSecret:t,scopes:r.metadata.scopes},console.log(Be.gray("A browser window will open for authentication.\n"));const s=await performOAuthFlow(e,{authorizationUrl:r.metadata.authorizationEndpoint,tokenUrl:r.metadata.tokenEndpoint,clientId:n,clientSecret:t,scopes:r.metadata.scopes},{onStatus:__name(e=>{console.log(Be.gray(` ${e}`))},"onStatus")});s.success?console.log(Be.green("✓ Successfully authenticated")):(i=!0,console.log(Be.yellow(`Warning: Authentication failed: ${s.error}`)),console.log(Be.gray("You can retry with: cmd mcp auth "+e)),console.log(Be.gray("Or authenticate via the /mcp menu in a session")))}}else{const s=r.args,i=process.argv.indexOf("--");let a,l=[];if(-1!==i){const e=process.argv.slice(i+1);0===e.length&&(console.error(Be.red("Error: Command is required for stdio transport")),console.error(Be.gray("Usage: cmd mcp add --transport stdio <name> -- <command> [args...]")),process.exit(1)),a=e[0],l=e.slice(1)}else if(t){a=t;const n=s.indexOf(e);-1!==n&&s.length>n+2&&(l=s.slice(n+2))}else console.error(Be.red("Error: Command is required for stdio transport")),console.error(Be.gray("Usage: cmd mcp add --transport stdio <name> -- <command> [args...]")),console.error(Be.gray(" or: cmd mcp add <name> <command> [args...]")),process.exit(1);o={transport:"stdio",enabled:!0,command:a,...l.length>0&&{args:l},...Object.keys(n.env).length>0&&{env:n.env}}}await addMcpServer({name:e,serverConfig:o,scope:n.scope});const a="user"===n.scope?"global":"project"===n.scope?"project":"local";if(i?console.log(Be.yellow(`✓ Added MCP server '${e}' to ${a} config (authentication pending)`)):console.log(Be.green(`✓ Added MCP server '${e}' to ${a} config`)),"http"===o.transport)console.log(Be.gray(` URL: ${o.url}`));else{const e=[o.command,...o.args||[]].join(" ");console.log(Be.gray(` Command: ${e}`))}console.log(""),console.log(Be.cyan("Next steps:")),console.log(Be.gray(`Start ${s} and run /mcp to manage configured MCP servers.`))}catch(e){console.error(Be.red(`Error: ${e instanceof Error?e.message:String(e)}`)),process.exit(1)}}),e}function collectKeyValue(e,t){const[n,...r]=e.split("=");return n&&0!==r.length||(console.error(Be.red(`Error: Invalid format '${e}', expected KEY=value`)),process.exit(1)),t[n]=r.join("="),t}function collectHeaders(e,t){const n=e.indexOf(":");-1===n&&(console.error(Be.red(`Error: Invalid header format '${e}', expected 'Header: value'`)),process.exit(1));const r=e.substring(0,n).trim(),s=e.substring(n+1).trim();return r||(console.error(Be.red(`Error: Empty header name in '${e}'`)),process.exit(1)),t[r]=s,t}function listMcpCommand(){const e=new Ae("list");return e.description("List configured MCP servers").action(async()=>{try{const e=await listMcpServers();if(0===e.length)return console.log(Be.yellow("\nNo MCP servers configured\n")),console.log(Be.gray("Add a server with:")),console.log(Be.gray(" cmd mcp add --transport http <name> <url>")),console.log(Be.gray(" cmd mcp add --transport stdio <name> -- <command>")),void console.log(Be.gray("\nDocs: https://commandcode.ai/docs/mcp"));console.log(Be.hex("#E4CCFF").bold("\nMCP Servers\n"));const t=Math.max(4,...e.map(e=>e.name.length)),n=5,r=7;console.log(Be.dim(` ${"NAME".padEnd(t)} ${"TYPE".padEnd(n)} ${"SCOPE".padEnd(r)} AUTH STATUS`));for(const s of e){const e=s.config.enabled?Be.green("enabled"):Be.gray("disabled");let o;o=s.config.oauth?await hasTokens(s.name)?Be.green(be.tick):Be.red(be.cross):s.config.headers||s.config.env?Be.green(be.tick):Be.gray("-"),console.log(` ${Be.white(s.name.padEnd(t))} ${Be.cyan(s.config.transport.padEnd(n))} ${Be.gray(s.scope.padEnd(r))} ${o} ${e}`)}console.log(Be.dim(`\nTotal: ${e.length} server${1!==e.length?"s":""}\n`))}catch(e){console.error(Be.red(`Error: ${e instanceof Error?e.message:String(e)}`)),process.exit(1)}}),e}function getMcpCommand(){const e=new Ae("get");return e.description("Show details for an MCP server").argument("<name>","Server name").action(async e=>{try{const t=await getMcpServer({name:e});t||(console.error(Be.red(`Error: MCP server '${e}' not found`)),process.exit(1));const{config:n,scope:r}=t;if(console.log(Be.hex("#E4CCFF").bold(`\nMCP Server: ${e}\n`)),console.log(` ${Be.dim("Scope:")} ${r}`),console.log(` ${Be.dim("Transport:")} ${n.transport}`),console.log(` ${Be.dim("Status:")} ${n.enabled?Be.green("enabled"):Be.gray("disabled")}`),"http"===n.transport){if(console.log(` ${Be.dim("URL:")} ${n.url}`),n.headers&&Object.keys(n.headers).length>0){console.log(` ${Be.dim("Headers:")}`);for(const[e,t]of Object.entries(n.headers)){const n=e.toLowerCase().includes("auth")||e.toLowerCase().includes("token")||e.toLowerCase().includes("key")?"***":t;console.log(` ${e}: ${n}`)}}}else console.log(` ${Be.dim("Command:")} ${n.command}`),n.args&&n.args.length>0&&console.log(` ${Be.dim("Args:")} ${n.args.join(" ")}`);if(n.env&&Object.keys(n.env).length>0){console.log(` ${Be.dim("Environment:")}`);for(const[e,t]of Object.entries(n.env)){const n=e.toLowerCase().includes("key")||e.toLowerCase().includes("secret")||e.toLowerCase().includes("token")||e.toLowerCase().includes("password")?"***":t;console.log(` ${e}=${n}`)}}console.log("")}catch(e){console.error(Be.red(`Error: ${e instanceof Error?e.message:String(e)}`)),process.exit(1)}}),e}function removeMcpCommand(){const e=new Ae("remove");return e.description("Remove an MCP server").argument("<name>","Server name").addOption(new xe("-s, --scope <scope>","Scope to remove from (auto-detects if not specified)").choices(["local","project","user"])).action(async(e,t)=>{try{const n=await getMcpServer({name:e});n||(console.error(Be.red(`Error: MCP server '${e}' not found`)),process.exit(1));const r=t.scope||n.scope;t.scope&&t.scope!==n.scope&&(console.error(Be.red(`Error: Server '${e}' is defined in '${n.scope}' scope, not '${t.scope}'`)),process.exit(1)),await removeMcpServer({name:e,scope:r})||(console.error(Be.red(`Error: Failed to remove server '${e}'`)),process.exit(1));const s="user"===r?"global":"project"===r?"project":"local";console.log(Be.green(`✓ Removed MCP server '${e}' from ${s} config`))}catch(e){console.error(Be.red(`Error: ${e instanceof Error?e.message:String(e)}`)),process.exit(1)}}),e}function addJsonMcpCommand(){const e=new Ae("add-json");return e.description("Add an MCP server from JSON configuration").argument("<name>","Server name (unique identifier)").argument("<json>","Server configuration as JSON string").addOption(new xe("-s, --scope <scope>","Configuration scope").choices(["local","project","user"]).default("local")).option("--client-secret <secret>","OAuth client secret (injected into oauth config)").action(async(e,t,n)=>{const r=getInvokedCommandName();try{let s,o;/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(e)&&!e.includes("__")||(console.error(Be.red(`Error: Invalid server name '${e}'`)),console.error(Be.gray("Names must start with a letter or number, contain only letters, numbers, hyphens, and single underscores")),process.exit(1));try{s=JSON.parse(t)}catch{console.error(Be.red("Error: Invalid JSON")),console.error(Be.gray("Make sure to quote the JSON string properly")),console.error(Be.gray(`Example: ${r} mcp add-json github '{"type":"stdio","command":"npx"}'`)),process.exit(1)}s&&"object"==typeof s&&"type"in s&&!("transport"in s)&&(s.transport=s.type,delete s.type),s?.oauth?.callbackPort&&(o=s.oauth.callbackPort,delete s.oauth.callbackPort),n.clientSecret&&s?.oauth&&(s.oauth.clientSecret=n.clientSecret);const i=js.safeParse(s);if(!i.success){console.error(Be.red("Error: Invalid server configuration"));for(const e of i.error.issues)console.error(Be.gray(` ${e.path.join(".")}: ${e.message}`));process.exit(1)}const a=i.data;let l=!1;if("http"!==a.transport||a.url||(console.error(Be.red("Error: URL is required for http type")),process.exit(1)),"stdio"!==a.transport||a.command||(console.error(Be.red("Error: Command is required for stdio type")),process.exit(1)),await addMcpServer({name:e,serverConfig:a,scope:n.scope}),a.oauth){console.log(Be.cyan("Starting OAuth authentication...")),console.log(Be.gray("A browser window will open for authentication.\n"));const t={authorizationUrl:a.oauth.authorizationUrl,tokenUrl:a.oauth.tokenUrl,clientId:a.oauth.clientId,clientSecret:a.oauth.clientSecret,scopes:a.oauth.scopes},n=await performOAuthFlow(e,t,{...o&&{port:o},onStatus:__name(e=>{console.log(Be.gray(` ${e}`))},"onStatus")});n.success?console.log(Be.green(`\n✓ Successfully authenticated with '${e}'`)):(l=!0,console.error(Be.yellow(`\nWarning: Authentication failed: ${n.error}`)),console.error(Be.gray(`You can retry with: ${r} mcp auth ${e}`)),console.error(Be.gray("Or authenticate via the /mcp menu in a session")))}const u="user"===n.scope?"global":"project"===n.scope?"project":"local";if(l?console.log(Be.yellow(`✓ Added MCP server '${e}' to ${u} config (authentication pending)`)):console.log(Be.green(`✓ Added MCP server '${e}' to ${u} config`)),"http"===a.transport)console.log(Be.gray(` URL: ${a.url}`));else{const e=[a.command,...a.args||[]].join(" ");console.log(Be.gray(` Command: ${e}`))}console.log(""),console.log(Be.cyan("Next steps:")),console.log(Be.gray(`Start ${r} and run /mcp to manage configured MCP servers.`))}catch(e){console.error(Be.red(`Error: ${e instanceof Error?e.message:String(e)}`)),process.exit(1)}}),e}function authMcpCommand(){const e=new Ae("auth");return e.description("Manage OAuth authentication for MCP servers").argument("[server]","Server name to authenticate").option("--status","Check authentication status").option("--clear","Clear stored authentication").option("--list","List servers with stored authentication").action(async(e,t)=>{const n=getInvokedCommandName();try{if(t.list){const e=await listServersWithTokens();if(0===e.length)return void console.log(Be.yellow("No servers with stored authentication."));console.log(Be.hex("#E4CCFF").bold("\nAuthenticated MCP Servers\n"));for(const t of e){const e=await getTokens(t),n=!e||isTokenExpired(e)?Be.yellow("expired"):Be.green("valid");console.log(` ${t}: ${n}`)}return void console.log("")}if(e||(console.error(Be.red("Error: Server name is required")),console.error(Be.gray(`Usage: ${n} mcp auth <server>`)),console.error(Be.gray(` ${n} mcp auth --list`)),process.exit(1)),t.status){if(!await hasTokens(e))return void console.log(Be.yellow(`No authentication stored for '${e}'`));const t=await getTokens(e);if(!t)return void console.log(Be.yellow(`No authentication stored for '${e}'`));if(isTokenExpired(t))console.log(Be.yellow(`Authentication for '${e}' has expired`)),t.refreshToken&&console.log(Be.gray(" A refresh token is available for re-authentication"));else{if(console.log(Be.green(`Authentication for '${e}' is valid`)),t.expiresAt){const e=Math.round((t.expiresAt-Date.now())/1e3/60);console.log(Be.gray(` Expires in ${e} minutes`))}t.scope&&console.log(Be.gray(` Scopes: ${t.scope}`))}return}if(t.clear)return void(await deleteTokens(e)?console.log(Be.green(`✓ Cleared authentication for '${e}'`)):console.log(Be.yellow(`No authentication stored for '${e}'`)));const r=await getMcpServer({name:e});r||(console.error(Be.red(`Error: MCP server '${e}' not found`)),console.error(Be.gray(`Use "${n} mcp list" to see configured servers`)),process.exit(1)),r.config.oauth||(console.error(Be.red(`Error: Server '${e}' does not have OAuth configured`)),console.error(Be.gray(`Add OAuth config using "${n} mcp add-json" with oauth field`)),process.exit(1));const s={authorizationUrl:r.config.oauth.authorizationUrl,tokenUrl:r.config.oauth.tokenUrl,clientId:r.config.oauth.clientId,clientSecret:r.config.oauth.clientSecret,scopes:r.config.oauth.scopes};console.log(Be.cyan(`Authenticating with '${e}'...`)),console.log(Be.gray("A browser window will open for authentication.\n"));const o=await performOAuthFlow(e,s,{onStatus:__name(e=>{console.log(Be.gray(` ${e}`))},"onStatus")});if(o.success)return console.log(Be.green(`\n✓ Successfully authenticated with '${e}'`)),void console.log(Be.gray("Restart the session to connect with the authenticated server."));console.error(Be.red(`\nError: Authentication failed: ${o.error}`)),console.log(Be.gray(`Try again with "${n} mcp auth ${e}"`)),process.exit(1)}catch(e){console.error(Be.red(`Error: ${e instanceof Error?e.message:String(e)}`)),process.exit(1)}}),e}function createMcpCommand(){const e=new Ae("mcp");return e.description("Manage MCP (Model Context Protocol) servers").allowUnknownOption().allowExcessArguments(),e.addCommand(addMcpCommand()),e.addCommand(listMcpCommand()),e.addCommand(getMcpCommand()),e.addCommand(removeMcpCommand()),e.addCommand(addJsonMcpCommand()),e.addCommand(authMcpCommand()),e}function getTastePath(t){const{target:n}=t;if("local-project"===n)return e.join(process.cwd(),".commandcode","taste");if("local-global"===n)return e.join(h.homedir(),".commandcode","taste");throw new Error(`Remote storage not yet implemented: ${n}`)}function getRootTasteFile(t){const{target:n}=t;return e.join(getTastePath({target:n}),"taste.md")}function getCategoryPath(t){const{target:n,category:r}=t;return e.join(getTastePath({target:n}),r)}function getCategoryTasteFile(t){const{target:n,category:r}=t;return e.join(getCategoryPath({target:n,category:r}),"taste.md")}Nt(),Nt(),__name(addMcpCommand,"addMcpCommand"),__name(collectKeyValue,"collectKeyValue"),__name(collectHeaders,"collectHeaders"),Nt(),__name(listMcpCommand,"listMcpCommand"),Nt(),__name(getMcpCommand,"getMcpCommand"),Nt(),__name(removeMcpCommand,"removeMcpCommand"),Nt(),__name(addJsonMcpCommand,"addJsonMcpCommand"),Nt(),__name(authMcpCommand,"authMcpCommand"),__name(createMcpCommand,"createMcpCommand"),Nt(),Ot(),Nt(),Nt(),fC(),Nt(),Ot(),__name(getTastePath,"getTastePath"),__name(getRootTasteFile,"getRootTasteFile"),__name(getCategoryPath,"getCategoryPath"),__name(getCategoryTasteFile,"getCategoryTasteFile"),Nt(),Nt();var H_=/confidence:/i;function findLookaheadEnd(e,t){const n=e.slice(t),r=n.findIndex(e=>{const t=e.trim();return t.startsWith("#")||t.startsWith("-")||H_.test(t)});if(-1===r)return{endIdx:e.length,inclusive:!1};const s=n[r].trim();return{endIdx:t+r,inclusive:H_.test(s)&&!s.startsWith("#")&&!s.startsWith("-")}}function joinMultiLineLearning(e,t,n){const{endIdx:r,inclusive:s}=findLookaheadEnd(e,t),o=s?r+1:r;return{combined:[n,...e.slice(t,o).map(e=>e.trim()).filter(e=>e.length>0)].join(" "),nextIdx:o}}function processRawLine(e,t){const n=e[t],r=t+1,s=n.trim();if(!s.startsWith("-"))return{entry:{text:n,originalLineNum:r},nextIdx:t+1};if(H_.test(s))return{entry:{text:n,originalLineNum:r},nextIdx:t+1};const{combined:o,nextIdx:i}=joinMultiLineLearning(e,t+1,n);return{entry:{text:o,originalLineNum:r},nextIdx:i}}function preprocessLines(e){const t=[];let n=0;for(;n<e.length;){const{entry:r,nextIdx:s}=processRawLine(e,n);t.push(r),n=s}return t}function validateLearningLine(e){const{line:t,lineNum:n}=e,r=[],s=t.substring(1).trim();if(!H_.test(s))return r.push({line:n,severity:"error",message:'Learning is missing "Confidence:" field',suggestion:'Format: "- Learning text. Confidence: 0.95" (value between 0.0 and 1.0)'}),r;const o=Array.from(s.matchAll(/confidence:\s*(\S+)/gi)),i=o.length>0?o[o.length-1]:null;if(!i)return r.push({line:n,severity:"error",message:"Confidence field is present but has no value",suggestion:'Add a number after "Confidence:" (e.g., Confidence: 0.95)'}),r;const a=i[1],l=parseFloat(a);if(isNaN(l))return r.push({line:n,severity:"error",message:`Confidence value "${a}" is not a valid number`,suggestion:"Use a decimal number between 0.0 and 1.0 (e.g., 0.95)"}),r;(l<0||l>1)&&r.push({line:n,severity:"error",message:`Confidence value ${l} is out of range`,suggestion:"Confidence must be between 0.0 and 1.0"}),l>=0&&l<=1&&0===l&&r.push({line:n,severity:"warning",message:"Confidence is 0.0 - this learning may not be useful",suggestion:"Consider removing learnings with 0 confidence"});const u=void 0!==i.index?s.substring(0,i.index).trim():s.trim();return u&&0!==u.length?(u.length<3&&r.push({line:n,severity:"warning",message:"Learning text is very short",suggestion:"Provide more descriptive text for clarity"}),r):(r.push({line:n,severity:"error",message:'Learning has no text before "Confidence:"',suggestion:'Add descriptive text (e.g., "Use pnpm for package management")'}),r)}function hasReferenceAfterCategory(e){const{lines:t,categoryLineIndex:n}=e,r=t.slice(n+1,n+4),s=r.findIndex(e=>e.trim().startsWith("# "));return(-1===s?r:r.slice(0,s)).some(e=>e.includes("See [")&&e.includes("taste.md"))}function buildResult(e){const{issues:t,filePath:n}=e,r=t.filter(e=>"error"===e.severity),s=t.filter(e=>"warning"===e.severity),o=0===r.length;if(0===t.length)return{valid:o,issues:[...t],summary:`${be.tick} ${n} is valid`};const i=[];r.length>0&&i.push(`${r.length} error${r.length>1?"s":""}`),s.length>0&&i.push(`${s.length} warning${s.length>1?"s":""}`);const a=r.length>0?be.cross:be.warning;return{valid:o,issues:[...t],summary:`${a} ${n} has ${i.join(", ")}`}}function formatSingleIssue(e,t){const n=[`${e.line?Be.dim(` Line ${e.line}: `):" "}${t(e.message)}`];return e.suggestion&&n.push(Be.dim(` → ${e.suggestion}`)),n}function formatIssueGroup(e,t,n){return 0===e.length?[]:[n,...e.flatMap(e=>formatSingleIssue(e,t)),""]}function formatValidationIssues(e){const{result:t,verbose:n=!0}=e;if(0===t.issues.length){const e=t.summary.charAt(0),n=t.summary.substring(2);return`${Be.green(e)} ${Be.dim(n)}`}if(!n)return t.summary;const r=t.issues.filter(e=>"error"===e.severity),s=t.issues.filter(e=>"warning"===e.severity);return[r.length>0?Be.red(t.summary):Be.yellow(t.summary),"",...formatIssueGroup(r,Be.red,Be.bold(Be.red("Errors:"))),...formatIssueGroup(s,Be.yellow,Be.bold(Be.yellow("Warnings:")))].join("\n").trim()}__name(findLookaheadEnd,"findLookaheadEnd"),__name(joinMultiLineLearning,"joinMultiLineLearning"),__name(processRawLine,"processRawLine"),__name(preprocessLines,"preprocessLines"),__name(validateLearningLine,"validateLearningLine"),__name(hasReferenceAfterCategory,"hasReferenceAfterCategory"),__name(buildResult,"buildResult"),Nt(),__name(formatSingleIssue,"formatSingleIssue"),__name(formatIssueGroup,"formatIssueGroup"),__name(formatValidationIssues,"formatValidationIssues");var V_=new Set(["# Taste (Continuously Learned by [CommandCode][cmd])","# Taste (Continuously Learned by CommandCode.ai)","# Taste (Continuously Learned by CommandCode)"]);function warnIfEmptyCategory(e,t){!e.currentCategory||e.learningsInCurrentCategory>0||hasReferenceAfterCategory({lines:t,categoryLineIndex:e.categoryLineNumber-1})||e.issues.push({line:e.categoryLineNumber,severity:"warning",message:`Category '${e.currentCategory}' has no learnings`,suggestion:"Add at least one learning or remove this category"})}function processHeading(e){const{line:t,lineNum:n,state:r,rawLines:s}=e;V_.has(t.trim())||(r.hasAnyCategory=!0,warnIfEmptyCategory(r,s),r.currentCategory=t.trim().substring(2).trim(),r.categoryLineNumber=n,r.learningsInCurrentCategory=0)}function processLearning(e){const{line:t,lineNum:n,state:r}=e;r.currentCategory?(r.learningsInCurrentCategory++,r.issues.push(...validateLearningLine({line:t.trim(),lineNum:n}))):r.issues.push({line:n,severity:"error",message:"Learning found outside of any category",suggestion:'Add a category header (e.g., "# cli") before this learning'})}__name(warnIfEmptyCategory,"warnIfEmptyCategory"),__name(processHeading,"processHeading"),__name(processLearning,"processLearning");var K_=/^see \[[^\]]+\/taste\.md\]\([^\)]+\/taste\.md\)$/i,Y_=/^\[cmd\]: https:\/\/commandcode\.ai\/$/i;function processLine(e){const{line:t,lineNum:n,state:r,rawLines:s}=e,o=t.trim();o&&(o.startsWith("# ")?processHeading({line:t,lineNum:n,state:r,rawLines:s}):o.startsWith("-")?processLearning({line:t,lineNum:n,state:r}):K_.test(o)||Y_.test(o)||r.issues.push({line:n,severity:"error",message:"Invalid content - must be a category header (# name) or learning (- text)",suggestion:"Remove this line or format it as a category (# name) or learning (- text. Confidence: 0.XX)"}))}function checkFinalCategory(e){const{state:t,rawLines:n}=e;!t.currentCategory||t.learningsInCurrentCategory>0||!t.categoryLineNumber||hasReferenceAfterCategory({lines:n,categoryLineIndex:t.categoryLineNumber-1})||t.issues.push({line:t.categoryLineNumber,severity:"warning",message:`Category '${t.currentCategory}' has no learnings`,suggestion:"Add at least one learning or remove this category"})}function validateTasteFile(e){const{content:t,filePath:n}=e,r=[];if(!t.trim())return r.push({severity:"error",message:"File is empty",suggestion:"Add at least one category with learnings"}),buildResult({issues:r,filePath:n});const s=t.split("\n"),o=preprocessLines(s),i={currentCategory:null,categoryLineNumber:null,learningsInCurrentCategory:0,hasAnyCategory:!1,issues:r};for(const{text:e,originalLineNum:t}of o)processLine({line:e,lineNum:t,state:i,rawLines:s});return checkFinalCategory({state:i,rawLines:s}),buildResult({issues:r,filePath:n})}__name(processLine,"processLine"),__name(checkFinalCategory,"checkFinalCategory"),__name(validateTasteFile,"validateTasteFile");var J_=__name(e=>"local-global"===e?"global":"project","locationLabel"),X_=__name(({file:e,error:t})=>({success:!1,filesLinted:[],errors:[{file:e,error:t}],totalErrors:0,totalWarnings:0}),"failResult");function resolvePackageFile(e,t){const n=getCategoryTasteFile({target:t,category:e});return E(n)?{result:{path:n,displayName:`${e}/taste.md`}}:{error:{file:e,error:`Taste package '${e}' not found in ${J_(t)}`}}}function collectSpecificFiles(e){const{packages:t,target:n}=e,r=t.map(e=>resolvePackageFile(e,n));return{files:r.filter(e=>"result"in e).map(e=>e.result),errors:r.filter(e=>"error"in e).map(e=>e.error)}}async function collectAllFiles(e){const{tastePath:t,target:n}=e,r=[],s=getRootTasteFile({target:n});E(s)&&r.push({path:s,displayName:"taste.md"});const o=(await $.readdir(t,{withFileTypes:!0})).filter(e=>e.isDirectory()).map(e=>({entry:e,categoryFile:getCategoryTasteFile({target:n,category:e.name})})).filter(({categoryFile:e})=>E(e)).map(({entry:e,categoryFile:t})=>({path:t,displayName:`${e.name}/taste.md`}));return r.push(...o),r}async function lintFile(e){let t=await $.readFile(e.path,"utf-8");const n=migrateHeader({content:t});n!==t&&(await $.writeFile(e.path,n,"utf-8"),t=n);const r=validateTasteFile({content:t,filePath:e.displayName}),s=r.issues.filter(e=>"error"===e.severity).length,o=r.issues.filter(e=>"warning"===e.severity).length,i=formatValidationIssues({result:r});return{file:e.displayName,valid:r.valid,errors:s,warnings:o,formatted:i}}async function lintSpecificPackages(e){const{packages:t,target:n}=e,{files:r,errors:s}=collectSpecificFiles({packages:t,target:n});if(0===r.length&&s.length>0)return{success:!1,filesLinted:[],errors:s,totalErrors:0,totalWarnings:0};if(0===r.length)return X_({file:"all",error:`No taste files found in ${J_(n)}`});const o=await Promise.all(r.map(lintFile)),i=o.reduce((e,t)=>e+t.errors,0),a=o.reduce((e,t)=>e+t.warnings,0);return{success:o.every(e=>e.valid)&&0===s.length,filesLinted:o,errors:s,totalErrors:i,totalWarnings:a}}async function lintAllFiles(e){const{tastePath:t,target:n}=e,r=await collectAllFiles({tastePath:t,target:n});if(0===r.length)return X_({file:"all",error:`No taste files found in ${J_(n)}`});const s=await Promise.all(r.map(lintFile)),o=s.reduce((e,t)=>e+t.errors,0),i=s.reduce((e,t)=>e+t.warnings,0);return{success:s.every(e=>e.valid),filesLinted:s,errors:[],totalErrors:o,totalWarnings:i}}async function lint(e){const{packages:t,target:n}=e,r=getTastePath({target:n});return E(r)?t.length>0?lintSpecificPackages({packages:t,target:n}):lintAllFiles({tastePath:r,target:n}):X_({file:"all",error:`No taste directory found in ${J_(n)}`})}function resolveConflictStrategy(e){const t=[e.skip&&"skip",e.merge&&"merge",e.overwrite&&"overwrite"].filter(Boolean);return t.length>1&&exitWithError(`Cannot combine --${t[0]} and --${t[1]}. Choose one conflict strategy.`),t[0]}__name(resolvePackageFile,"resolvePackageFile"),__name(collectSpecificFiles,"collectSpecificFiles"),__name(collectAllFiles,"collectAllFiles"),__name(lintFile,"lintFile"),__name(lintSpecificPackages,"lintSpecificPackages"),__name(lintAllFiles,"lintAllFiles"),__name(lint,"lint"),Nt(),Vr(),__name(resolveConflictStrategy,"resolveConflictStrategy");var Z_=Be.bgGreen.black.bold(" TASTE ");function shortenPath(e){const t=process.env.HOME??process.env.USERPROFILE??"";return t&&e.startsWith(t)?`~${e.slice(t.length)}`:e}function exitWithError(e){console.error(`${Be.red("Error:")} ${e.replace(/^Error:\s*/i,"")}`),process.exit(1)}function formatUsageLine(e){const t=e.match(/^(\s*(?:Usage:|or:)?\s*)(cmd)(\s+.+?)(\s+\(.*\))?$/);return t?`${Be.dim(t[1])}${Be.green(t[2])}${Be.white(t[3]??"")}${t[4]?Be.dim(t[4]):""}`:Be.dim(e)}function exitWithUsage({message:e,usage:t}){console.error(`${Be.red("Error:")} ${e.replace(/^Error:\s*/i,"")}`);for(const e of t)console.error(formatUsageLine(e));process.exit(1)}function resolveRemoteDefault(e){return e.global||e.remote?e:{...e,remote:!0}}__name(shortenPath,"shortenPath"),__name(exitWithError,"exitWithError"),__name(formatUsageLine,"formatUsageLine"),__name(exitWithUsage,"exitWithUsage"),__name(resolveRemoteDefault,"resolveRemoteDefault");var eP=__name((e,t)=>t,"linkFallback");function getPackageLink({owner:e,packageName:t}){return ot(`commandcode.ai/${e}/${t}`,`https://commandcode.ai/${e}/${t}`,{fallback:eP})}function getProfileLink(e){return ot(`commandcode.ai/${e}`,`https://commandcode.ai/${e}`,{fallback:eP})}function wrapLine(e,t=0){const n=(process.stdout.columns||80)-t;return st(e,n,{trim:!1})}function formatMergeParts(e){const t=[];return e.added>0&&t.push(`${e.added} ${1===e.added?"learning":"learnings"} added`),e.updated>0&&t.push(`${e.updated} ${1===e.updated?"learning":"learnings"} updated`),e.unchanged>0&&t.push(`${e.unchanged} ${1===e.unchanged?"learning":"learnings"} unchanged`),t}function hasMergeConflictRisk(e){return(e.added>0||e.updated>0)&&e.unchanged>0}function hasMergeConflictRiskInRecord(e){return Object.values(e).some(hasMergeConflictRisk)}function logMergeReviewTip(){console.log(Be.yellow("\nTip: Review merged learnings to ensure no conflicting rules."))}function parseOwnerPackage(e){if(!e.includes("/"))return;const[t,n]=e.split("/");return t&&n?{owner:t,packageName:n}:void 0}function handleResultErrors(e){for(const t of e){const e=t.error.replace(/^Taste package(?: '.*?')? /,`Taste package '${t.pkg}' `);console.error(`${Be.red("Error:")} ${e}`)}process.exit(1)}function getTimeAgo(e){const t=Date.now()-e.getTime(),n=Math.floor(t/6e4),r=Math.floor(t/36e5),s=Math.floor(t/864e5);return n<1?"just now":n<60?`${n} minute${n>1?"s":""} ago`:r<24?`${r} hour${r>1?"s":""} ago`:`${s} day${s>1?"s":""} ago`}async function flushAndExit(e){await Promise.race([shutdownTelemetry(),new Promise(e=>setTimeout(e,500))]).catch(()=>{}),process.exit(e)}function withErrorHandler(e){return async(...t)=>{try{await e(...t),await flushAndExit(0)}catch(e){const t=e instanceof Error?e.message:String(e);console.error(Be.red(`Error: ${t}`)),await flushAndExit(1)}}}function createLintCommand(){return new Ae("lint").argument("[package]","Taste package name").option("-g, --global","Validate taste packages from global storage (~/.commandcode)").option("--all","Validate all taste packages").description(`Validate taste package format ${Be.dim("(structure, style, etc.)")}`).action(withErrorHandler(async(e,t)=>runLint({packageName:e,options:t})))}function validateLintOptions({packageName:e,options:t}){e||t.all||exitWithUsage({message:"Specify a taste package name or use --all to validate everything",usage:["cmd taste lint <package> validate a taste package","cmd taste lint --all validate all taste packages"]}),e&&t.all&&exitWithError("Use either a package name or --all, not both")}function logLintResults(e){for(const t of e.filesLinted)console.log(t.formatted);e.filesLinted.length>1&&logLintSummary(e),e.success||process.exit(1)}function logLintSummary({filesLinted:e,totalErrors:t,totalWarnings:n}){if(console.log(""),0===t&&0===n)return void console.log(`${Be.green(be.tick)} All ${Be.green(e.length)} taste files are valid`);const r=[];t>0&&r.push(Be.red(`${t} error${t>1?"s":""}`)),n>0&&r.push(Be.yellow(`${n} warning${n>1?"s":""}`)),console.log(`Summary: ${r.join(", ")} across ${e.length} files`)}async function runLint({packageName:e,options:t}){console.log(""),validateLintOptions({packageName:e,options:t});const n=await lint({packages:e?[e]:[],target:t.global?"local-global":"local-project"});if(n.errors.length>0){for(const e of n.errors)console.error(Be.red(`Error: ${e.error}`));process.exit(1)}logLintResults(n)}function parseSection(e){const{section:t,sourcePath:n}=e,r=t.split("\n"),s=r[0].trim(),o=r.map(e=>parseLearning({line:e})).filter(e=>null!==e);return 0===o.length?null:{category:normalizeCategory({category:s}),learnings:o,sourcePath:n}}function parsePackages(e){const{content:t,sourcePath:n}=e;return t.split(/^# /gm).filter(e=>e.trim()).filter(e=>!e.includes("See [")).map(e=>parseSection({section:e,sourcePath:n})).filter(e=>null!==e)}function parseLearning(e){const{line:t}=e,n=t.match(/^-?\s*(.+?)[\.:,]?\s*confidence:\s*(\d*\.?\d+)/i);if(!n)return null;const r=parseFloat(n[2]);return isNaN(r)||r<0||r>1?null:{text:n[1].trim(),confidence:r}}function normalizeCategory(e){const{category:t}=e;return t.toLowerCase().replace(/\s+/g,"-")}function denormalizeCategory(e){const{slug:t}=e;return t.split("-").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function formatPackage(e){const{pkg:t}=e;let n=`# ${denormalizeCategory({slug:t.category})}\n`;for(const e of t.learnings)n+=`- ${e.text}. Confidence: ${e.confidence.toFixed(2)}\n`;return n}async function readAndMigrateFile(e){const{filePath:t}=e,n=await $.readFile(t,"utf-8"),r=migrateHeader({content:n});return r===n?n:(await $.writeFile(t,r,"utf-8"),r)}function trimTrailingBlanks(e){const{lines:t,until:n}=e;let r=e.from;for(;r>n&&""===t[r].trim();)r--;return r}function findCategoryRange(e){const{lines:t,pattern:n}=e,r=t.findIndex(e=>n.test(e));if(-1===r)return null;const s=t.findIndex((e,t)=>t>r&&e.startsWith("# "));if(-1===s)return{start:r,end:t.length-1};const o=trimTrailingBlanks({lines:t,from:s-1,until:r});return{start:r,end:o}}function ensureHeader(e){if(!e)return lC+"\n\n";const t=e.trim();return t.startsWith(iC)||t.startsWith(cC)||t.startsWith(uC)?e:lC+"\n\n"+e}function ensureTrailingNewlines(e){return e?e.endsWith("\n\n")?e:e.endsWith("\n")?e+"\n":e+"\n\n":e}__name(getPackageLink,"getPackageLink"),__name(getProfileLink,"getProfileLink"),__name(wrapLine,"wrapLine"),__name(formatMergeParts,"formatMergeParts"),__name(hasMergeConflictRisk,"hasMergeConflictRisk"),__name(hasMergeConflictRiskInRecord,"hasMergeConflictRiskInRecord"),__name(logMergeReviewTip,"logMergeReviewTip"),__name(parseOwnerPackage,"parseOwnerPackage"),__name(handleResultErrors,"handleResultErrors"),__name(getTimeAgo,"getTimeAgo"),__name(flushAndExit,"flushAndExit"),__name(withErrorHandler,"withErrorHandler"),__name(createLintCommand,"createLintCommand"),__name(validateLintOptions,"validateLintOptions"),__name(logLintResults,"logLintResults"),__name(logLintSummary,"logLintSummary"),__name(runLint,"runLint"),Nt(),Es(),Nt(),Nt(),Nt(),__name(parseSection,"parseSection"),__name(parsePackages,"parsePackages"),__name(parseLearning,"parseLearning"),__name(normalizeCategory,"normalizeCategory"),__name(denormalizeCategory,"denormalizeCategory"),Nt(),__name(formatPackage,"formatPackage"),Nt(),fC(),__name(readAndMigrateFile,"readAndMigrateFile"),__name(trimTrailingBlanks,"trimTrailingBlanks"),__name(findCategoryRange,"findCategoryRange"),__name(ensureHeader,"ensureHeader"),__name(ensureTrailingNewlines,"ensureTrailingNewlines");var tP="local-global";async function loadCategoryPackages(e){if(!e.isDirectory())return[];const t=getCategoryTasteFile({target:tP,category:e.name});return E(t)?parsePackages({content:await readAndMigrateFile({filePath:t}),sourcePath:t}).map(t=>({...t,category:e.name})):[]}async function getPackageInfo(e){try{const t=await $.stat(e.sourcePath);return{category:e.category,learningCount:e.learnings.length,lastUpdated:t.mtime,filePath:e.sourcePath}}catch{return{category:e.category,learningCount:e.learnings.length,lastUpdated:new Date,filePath:e.sourcePath}}}async function getAllPackages(){const e=getTastePath({target:tP});if(!E(e))return[];const t=await $.readdir(e,{withFileTypes:!0});return(await Promise.all(t.map(loadCategoryPackages))).flat()}async function getPackage(e){const{category:t}=e,n=getCategoryTasteFile({target:tP,category:t});return E(n)&&parsePackages({content:await readAndMigrateFile({filePath:n}),sourcePath:n})[0]||null}async function writePackage(t){const{pkg:n}=t,r=getTastePath({target:tP});await $.mkdir(r,{recursive:!0});const s=getCategoryTasteFile({target:tP,category:n.category}),o=e.dirname(s);await $.mkdir(o,{recursive:!0});const i=formatPackage({pkg:n});await $.writeFile(s,i,"utf-8")}async function listPackages(){const e=await getAllPackages();return await Promise.all(e.map(getPackageInfo))}__name(loadCategoryPackages,"loadCategoryPackages"),__name(getPackageInfo,"getPackageInfo"),__name(getAllPackages,"getAllPackages"),__name(getPackage,"getPackage"),__name(writePackage,"writePackage"),__name(listPackages,"listPackages"),Nt(),Nt(),fC();var nP="local-project";async function removeCategoryFromRoot(e){const{category:t,rootFile:n}=e;if(!E(n))return null;const r=migrateHeader({content:await $.readFile(n,"utf-8")}).split("\n"),s=findCategoryRange({lines:r,pattern:new RegExp(`^# ${t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}$`,"i")});if(!s)return null;const o=r.slice(0,s.start),i=s.end<r.length-1?r.slice(s.end+1):[],a={before:o.join("\n").trim(),after:i.join("\n").trim()},l=[...o,...i].join("\n").trim();return""===l&&await $.rm(n,{force:!0}),""!==l&&await $.writeFile(n,l+"\n","utf-8"),a}async function removePackage(t){const{category:n}=t,r=getRootTasteFile({target:nP}),s=await removeCategoryFromRoot({category:n,rootFile:r}),o=getCategoryTasteFile({target:nP,category:n}),i=e.dirname(o);return E(i)&&await $.rm(i,{recursive:!0,force:!0}),s}async function writeToRoot(e){const{pkg:t,rootFile:n,categoryPosition:r}=e,s=formatPackage({pkg:t});if(r){let e=ensureHeader(migrateHeader({content:r.before}));e=ensureTrailingNewlines(e);const t=r.after?"\n\n"+r.after:"";return e+=s.trim()+t,void await $.writeFile(n,e.trim()+"\n","utf-8")}let o="";E(n)&&(o=await $.readFile(n,"utf-8"),o=migrateHeader({content:o})),o=ensureHeader(o),o=ensureTrailingNewlines(o),o+=s,await $.writeFile(n,o.trim()+"\n","utf-8")}async function writeToSubdirectory(t){const{pkg:n,rootFile:r,categoryPosition:s}=t,o=getCategoryTasteFile({target:nP,category:n.category}),i=e.dirname(o);await $.mkdir(i,{recursive:!0});const a=formatPackage({pkg:n});await $.writeFile(o,a,"utf-8");const l=`# ${n.category}\nSee [${n.category}/taste.md](${n.category}/taste.md)\n`;if(s){let e=ensureHeader(migrateHeader({content:s.before}));e=ensureTrailingNewlines(e);const t=s.after?"\n\n"+s.after:"";return e+=l.trim()+t,void await $.writeFile(r,e.trim()+"\n","utf-8")}let u="";E(r)&&(u=await $.readFile(r,"utf-8"),u=migrateHeader({content:u})),u=ensureHeader(u),u=ensureTrailingNewlines(u),u+=l,await $.writeFile(r,u.trim()+"\n","utf-8")}__name(removeCategoryFromRoot,"removeCategoryFromRoot"),__name(removePackage,"removePackage"),__name(writeToRoot,"writeToRoot"),__name(writeToSubdirectory,"writeToSubdirectory");var rP="local-project";async function loadCategoryPackages2(e){if(!e.isDirectory())return[];const t=getCategoryTasteFile({target:rP,category:e.name});return E(t)?parsePackages({content:await readAndMigrateFile({filePath:t}),sourcePath:t}).map(t=>({...t,category:e.name})):[]}async function getAllPackages2(){const e=getTastePath({target:rP});if(!E(e))return[];const t=[],n=getRootTasteFile({target:rP});if(E(n)){const e=parsePackages({content:await readAndMigrateFile({filePath:n}),sourcePath:n});t.push(...e)}const r=await $.readdir(e,{withFileTypes:!0}),s=(await Promise.all(r.map(loadCategoryPackages2))).flat();return t.push(...s),t}async function getPackage2(e){const{category:t}=e;return(await getAllPackages2()).find(e=>e.category===t)||null}async function writePackage2(e){const{pkg:t}=e,n=getTastePath({target:rP});await $.mkdir(n,{recursive:!0});const r=getRootTasteFile({target:rP}),s=await removePackage({category:t.category});t.learnings.length<=5?await writeToRoot({pkg:t,rootFile:r,categoryPosition:s}):await writeToSubdirectory({pkg:t,rootFile:r,categoryPosition:s})}function exists2(){const e=getTastePath({target:rP});return E(e)}async function appendCategoryFile(e,t){const n=getCategoryTasteFile({target:"local-project",category:t.category});if(!E(n))return;const r=await $.readFile(n,"utf-8"),s=new Blob([r],{type:"text/markdown"}),o=new File([s],"taste.md",{type:"text/markdown"});e.append(`files[${t.category}/taste.md]`,o)}async function prepareUploadFormData(t){const{packageName:n,pkg:r,description:s,type:o="category",isPublic:i=!1}=t,a=new FormData;a.append("name",n),s&&a.append("description",s),a.append("type",o),a.append("isPublic",String(i));const l=formatPackage({pkg:r}),u=new Blob([l],{type:"text/markdown"}),d=new File([u],"taste.md",{type:"text/markdown"});if(a.append("files[taste.md]",d),"category"===o)return a;const m=getTastePath({target:"local-project"}),p=e.join(m,r.category);if(!E(p))return a;const g=getCategoryTasteFile({target:"local-project",category:r.category});if(!E(g))return a;const h=await $.readFile(g,"utf-8"),f=new Blob([h],{type:"text/markdown"}),y=new File([f],"taste.md",{type:"text/markdown"});return a.append(`files[${r.category}/taste.md]`,y),a}async function prepareMultiplePackagesUpload(e){const{pkgs:t,projectName:n,description:r,isPublic:s=!1}=e,o=new FormData;o.append("name",n),r&&o.append("description",r),o.append("type","project"),o.append("isPublic",String(s));const i=getRootTasteFile({target:"local-project"});if(E(i)){const e=await $.readFile(i,"utf-8"),t=new Blob([e],{type:"text/markdown"}),n=new File([t],"taste.md",{type:"text/markdown"});o.append("files[taste.md]",n)}const a=t.map(e=>appendCategoryFile(o,e));return await Promise.all(a),o}function parseLearningLine(e){const t=e.match(/^-\s+(.+?)\.\s+Confidence:\s+([\d.]+)/);if(!t)return null;const n=t[1].trim(),r=parseFloat(t[2]);return!n||isNaN(r)?null:{text:n,confidence:r}}function parseTasteContent(e){return e.split("\n").filter(e=>{const t=e.trim();return t&&!t.startsWith("#")&&t.startsWith("-")}).map(e=>parseLearningLine(e.trim())).filter(e=>null!==e)}async function parseApiError(e){const{response:t,fallback:n}=e;try{const e=await t.json();return e.error?.message||e.message||n}catch{return n}}function throwTrackedError(e){const{message:t,label:n,heading:r,status:s,extra:o}=e,i=new Error(t);throw trackError({error:sanitizeErrorForTelemetry({error:i,label:n}),context:{component:Br.TASTE_REMOTE_STORAGE,heading:r,"http.status":s,...o}}),i}async function requireAuthKey(){const e=await getAuthKey();if(!e)throw new Error("No API key found. Please authenticate with: cmd login");return e}async function downloadPackage(e){const{owner:t,packageName:n}=e,r=getApiBaseUrl(),s=await tryPublicDownload({baseUrl:r,owner:t,packageName:n});if(s)return s;const o=await getAuthKey();if(!o)throw new Error("Package not found. If this is a private package, please authenticate with `cmd login`");return tryAuthenticatedDownload({baseUrl:r,owner:t,packageName:n,apiKey:o})}async function tryPublicDownload(e){const{baseUrl:t,owner:n,packageName:r}=e,s=`${t}${St.INTERNAL.PROFILE.PACKAGE_DOWNLOAD.replace(":login",n).replace(":packageName",r)}`;let o;try{o=await fetch(s,{method:"GET"})}catch{return null}if(o.ok){const{data:e}=await o.json();return{type:e.type||"category",files:e.files||[],isPublic:!0}}if(404===o.status)return null;throwTrackedError({message:await parseApiError({response:o,fallback:`Failed to download taste package (${o.status})`}),label:"download_public_error",heading:"Failed to download taste package (public)",status:o.status})}async function tryAuthenticatedDownload(e){const{baseUrl:t,owner:n,packageName:r,apiKey:s}=e,o=`${t}${St.BETA.TASTE.PACKAGES.DOWNLOAD.replace(":namespace",n).replace(":packageName",r)}`,i=await fetch(o,{method:"GET",headers:{Authorization:`Bearer ${s}`}});if(i.ok){const{data:e}=await i.json();return{type:e.type||"category",files:e.files||[],isPublic:e.isPublic??!1}}if(404===i.status)return null;throwTrackedError({message:await parseApiError({response:i,fallback:"Failed to download taste package"}),label:"download_auth_error",heading:"Failed to download taste package (authenticated)",status:i.status})}async function fetchSinglePackage(e){try{return await getPackage3({category:e.name})}catch(t){const n=t instanceof Error?t:new Error(String(t));return trackError({error:sanitizeErrorForTelemetry({error:n,label:"download_package_error"}),context:{component:Br.TASTE_REMOTE_STORAGE,heading:"Failed to download package","package.name":e.name}}),console.warn(`Warning: Failed to download package '${e.name}': ${n.message}`),null}}async function getAllPackages3(){const e=await requireAuthKey(),t=`${getApiBaseUrl()}${St.BETA.TASTE.PACKAGES.LIST}`,n=await fetch(t,{method:"GET",headers:{Authorization:`Bearer ${e}`}});n.ok||throwTrackedError({message:await parseApiError({response:n,fallback:"Failed to list taste packages"}),label:"list_packages_error",heading:"Failed to list taste packages",status:n.status});const{data:r}=await n.json(),s=r.packages||[];if(0===s.length)return[];const o=[];for(let e=0;e<s.length;e+=5){const t=s.slice(e,e+5),n=await Promise.all(t.map(fetchSinglePackage));o.push(...n.filter(e=>null!==e))}return o}async function getPackage3(e){const{category:t}=e;let n;await requireAuthKey();try{n=await getAuthenticatedEntity()}catch(e){const n=e instanceof Error?e:new Error(String(e));throw dlog(`[Auth] getPackage: entity endpoint unavailable — ${n.message}`),trackError({error:sanitizeErrorForTelemetry({error:n,label:"get_entity_error"}),context:{component:Br.TASTE_REMOTE_STORAGE,heading:"getAuthenticatedEntity failed in getPackage"}}),new Error(`Could not resolve your account to fetch '${t}'. Check your connection and try again.`)}if(!n.success||!n.user?.userName)throw new Error("Failed to get authenticated user information");return downloadRemotePackage({owner:n.user.userName,packageName:t})}async function downloadRemotePackage(e){const{owner:t,packageName:n}=e,r=await downloadPackage({owner:t,packageName:n});if(!r)return null;const s=r.files||[];if(0===s.length)return null;const o=s.find(e=>"taste.md"===e.file);if(!o)throw new Error(`No taste.md file found in package '${n}'`);return{category:n,learnings:parseTasteContent(o.content),sourcePath:`remote:${n}`,isPublic:r.isPublic??!1}}async function writePackage3(e){const{pkg:t,owner:n,isPublic:r=!1}=e,s=await requireAuthKey(),o=await prepareUploadFormData({packageName:t.category,pkg:t,type:"category",isPublic:r}),i=`${getApiBaseUrl()}${St.BETA.TASTE.PACKAGES.UPLOAD.replace(":namespace",n)}`,a=await fetch(i,{method:"POST",headers:{Authorization:`Bearer ${s}`},body:o});a.ok||throwTrackedError({message:await parseApiError({response:a,fallback:"Failed to upload taste package"}),label:"upload_package_error",heading:"Failed to upload taste package",status:a.status}),await a.json()}async function writePackages(e){const{packages:t,projectName:n,owner:r,isPublic:s=!1}=e,o=await requireAuthKey(),i=await prepareMultiplePackagesUpload({pkgs:t,projectName:n,isPublic:s}),a=`${getApiBaseUrl()}${St.BETA.TASTE.PACKAGES.UPLOAD.replace(":namespace",r)}`,l=await fetch(a,{method:"POST",headers:{Authorization:`Bearer ${o}`},body:i});l.ok||throwTrackedError({message:await parseApiError({response:l,fallback:"Failed to upload taste packages"}),label:"upload_packages_error",heading:"Failed to upload taste packages",status:l.status,extra:{"package.count":t.length}}),await l.json()}async function listPackages2(){const e=await requireAuthKey(),t=`${getApiBaseUrl()}${St.BETA.TASTE.PACKAGES.LIST}`,n=await fetch(t,{method:"GET",headers:{Authorization:`Bearer ${e}`}});n.ok||throwTrackedError({message:await parseApiError({response:n,fallback:"Failed to list taste packages"}),label:"list_packages_error",heading:"Failed to list packages",status:n.status});const{data:r}=await n.json();return(r.packages||[]).map(e=>({category:e.name,learningCount:e.learningCount||0,lastUpdated:e.createdAt?new Date(e.createdAt):new Date,filePath:"",isPublic:e.isPublic??!1,starCount:e.starCount??0,downloadCount:e.downloadCount??0,type:e.type??"category"}))}async function list(e){const{location:t}=e;if("local-global"===t)return listPackages();if("remote-project"===t||"remote-user"===t)return listPackages2();if("local-project"===t){const e=getRootTasteFile({target:"local-project"}),t=await getAllPackages2();return Promise.all(t.map(async t=>{let n;if(t.sourcePath!==e)try{n=(await $.stat(t.sourcePath)).mtime}catch{}return{category:t.category,learningCount:t.learnings.length,lastUpdated:n,filePath:t.sourcePath}}))}throw new Error(`Invalid location: ${t}`)}function createListCommand(){return new Ae("list").alias("ls").option("-g, --global","List global packages").addOption(new xe("-l, --local","Use local server").hideHelp()).option("--remote","List remote packages").addOption(new xe("--staging","Use staging environment").hideHelp()).description(`List available packages ${Be.dim("(project, global, or remote)")}`).action(withErrorHandler(async e=>runList({options:e})))}__name(loadCategoryPackages2,"loadCategoryPackages"),__name(getAllPackages2,"getAllPackages"),__name(getPackage2,"getPackage"),__name(writePackage2,"writePackage"),__name(exists2,"exists"),Nt(),ts(),Nt(),__name(appendCategoryFile,"appendCategoryFile"),__name(prepareUploadFormData,"prepareUploadFormData"),__name(prepareMultiplePackagesUpload,"prepareMultiplePackagesUpload"),Ot(),Nt(),__name(parseLearningLine,"parseLearningLine"),__name(parseTasteContent,"parseTasteContent"),AC(),Vr(),Nt(),Qs(),Vr(),__name(parseApiError,"parseApiError"),__name(throwTrackedError,"throwTrackedError"),__name(requireAuthKey,"requireAuthKey"),Nt(),ts(),Qs(),Ot(),__name(downloadPackage,"downloadPackage"),__name(tryPublicDownload,"tryPublicDownload"),__name(tryAuthenticatedDownload,"tryAuthenticatedDownload"),$n(),__name(fetchSinglePackage,"fetchSinglePackage"),__name(getAllPackages3,"getAllPackages"),__name(getPackage3,"getPackage"),__name(downloadRemotePackage,"downloadRemotePackage"),__name(writePackage3,"writePackage"),__name(writePackages,"writePackages"),__name(listPackages2,"listPackages"),__name(list,"list"),__name(createListCommand,"createListCommand");var sP={remote:{location:"remote-project",name:"remote",subtitle:"commandcode.ai account"},global:{location:"local-global",name:"global",subtitle:"~/.commandcode/taste"},project:{location:"local-project",name:"project",subtitle:".commandcode/taste"}};function resolveStorage(e){return e.remote?sP.remote:e.global?sP.global:sP.project}function getPackageDisplayLength(e){let t=e.category.length;return e.isPublic&&(t+=9),e.isPublic&&e.starCount&&(t+=` ${be.star}${e.starCount}`.length),e.downloadCount&&(t+=` ${be.arrowDown}${e.downloadCount}`.length),t}function formatPackageLine({pkg:e,maxLen:t}){const n=" ".repeat(t-getPackageDisplayLength(e)+2),r=e.lastUpdated?getTimeAgo(e.lastUpdated):null,s=r?`, updated ${r}`:"";return` ${Be.white(e.category)}${e.isPublic?Be.green(" [public]"):""}${e.isPublic&&e.starCount?Be.yellow(` ${be.star}${e.starCount}`):""}${e.downloadCount?Be.gray(` ${be.arrowDown}${e.downloadCount}`):""}${n}${Be.dim.gray(`(${e.learningCount} learnings${s})`)}`}function validateListOptions(e){e.global&&e.remote&&exitWithError("Error: Cannot specify both --global and --remote flags")}async function fetchPackages({options:e}){const t=resolveStorage(e),n=e.remote?Ie(`Fetching ${t.name} packages`).start():null,r=await list({location:t.location});return n?.stop(),{packages:r,storage:t}}async function getStorageLabel({options:e,fallback:t}){if(!e.remote)return t;const n=await getUserName();return n?getProfileLink(n):t}function printPackageTable({packages:e,subtitle:t}){console.log(`\n${Z_} Packages`),console.log(`${Be.gray("⎿")} ${Be.dim(t)}\n`);const n=Math.max(...e.map(getPackageDisplayLength));let r=0;for(const t of e)r+=t.learningCount,console.log(formatPackageLine({pkg:t,maxLen:n}));console.log(Be.dim(`\nTotal: ${e.length} packages, ${r} learnings\n`))}async function runList({options:e}){console.log(""),validateListOptions(e);const{packages:t,storage:n}=await fetchPackages({options:e});0!==t.length?printPackageTable({packages:t,subtitle:await getStorageLabel({options:e,fallback:n.subtitle})}):console.log(Be.yellow(`No taste packages found in ${n.name}`))}async function fetchAllPackages(e){const{target:t}=e;return"local-project"===t?getAllPackages2():"local-global"===t?getAllPackages():getAllPackages3()}function handleOpenError(e){return e instanceof Error&&e.message.includes("$EDITOR environment variable")?{success:!1,error:getEditorSetupInstructions()}:{success:!1,error:e instanceof Error?e.message:String(e)}}async function readCategoryLineNumber(t){const{filePath:n,category:r}=t,s=await $.readFile(n,"utf-8");if("taste.md"===e.basename(n)&&e.basename(e.dirname(n))===r)return 1;const o=s.split("\n").findIndex(e=>e.trim().toLowerCase()===`# ${r.toLowerCase()}`);return o>=0?o+1:1}async function findCategoryLineNumber(e){try{return await readCategoryLineNumber(e)}catch{return 1}}async function openPackage(e){const{packageName:t,target:n}=e,r=(await fetchAllPackages({target:n})).find(e=>e.category===t);if(!r){let e="project";return"local-global"===n&&(e="global"),"remote-project"!==n&&"remote-user"!==n||(e="remote"),{success:!1,error:`Taste package '${t}' not found in ${e}`}}const s=r.sourcePath,o=await findCategoryLineNumber({filePath:s,category:t});return await et([{file:s,line:o}]),{success:!0,filePath:s,lineNumber:o}}__name(resolveStorage,"resolveStorage"),__name(getPackageDisplayLength,"getPackageDisplayLength"),__name(formatPackageLine,"formatPackageLine"),__name(validateListOptions,"validateListOptions"),__name(fetchPackages,"fetchPackages"),__name(getStorageLabel,"getStorageLabel"),__name(printPackageTable,"printPackageTable"),__name(runList,"runList"),Nt(),Nt(),__name(fetchAllPackages,"fetchAllPackages"),__name(handleOpenError,"handleOpenError"),__name(readCategoryLineNumber,"readCategoryLineNumber"),__name(findCategoryLineNumber,"findCategoryLineNumber"),__name(openPackage,"openPackage");var oP=new Set(["local-project","local-global","remote-project","remote-user"]);async function open7(e){const{package:t,target:n}=e;if(!oP.has(n))return{success:!1,error:`Invalid target: ${n}`};try{return await openPackage({packageName:t,target:n})}catch(e){return handleOpenError(e)}}function getEditorSetupInstructions(){const e=it.platform;if("win32"===e)return'Error: No default editor found\n\nTo permanently set your default editor, run one of these commands:\n\nCommand Prompt (as Administrator):\n setx EDITOR "code" # VS Code\n setx EDITOR "notepad" # Notepad\n setx EDITOR "vim" # Vim (if installed via WSL/Git Bash)\n\nPowerShell:\n [Environment]::SetEnvironmentVariable("EDITOR", "code", "User")\n\nThen restart your terminal.';const t="darwin"===e?"~/.zshrc":"~/.bashrc";return`Error: No default editor found\n\nTo permanently set your default editor, run one of these commands:\n echo 'export EDITOR="code"' >> ${t} # VS Code\n echo 'export EDITOR="vim"' >> ${t} # Vim\n echo 'export EDITOR="nano"' >> ${t} # Nano\n echo 'export EDITOR="subl"' >> ${t} # Sublime Text\n\nFor bash users ${"darwin"===e?"(or ~/.bash_profile for bash)":"(or ~/.zshrc for zsh)"}, replace ${t} with the appropriate file.\n\nThen restart your terminal or run: source ${t}`}function createOpenCommand(){return new Ae("open").argument("[package]","Taste package name, or owner/package to open in browser").option("-g, --global","Open taste package from global storage (~/.commandcode)").description(`Open a taste package in your editor ${Be.dim("(use owner/package to open in browser)")}`).action(withErrorHandler(async(e,t)=>runOpen({packageName:e,options:t})))}function validateOpenOptions(e){e||exitWithUsage({message:"Specify a taste package name to open",usage:["cmd taste open <package> open taste package in editor","cmd taste open <package> -g open global taste package in editor","cmd taste open owner/package open package page in browser"]})}async function runOpen({packageName:e,options:t}){console.log(""),validateOpenOptions(e);const n=parseOwnerPackage(e);n?await openInBrowser(n):await openInEditor3({packageName:e,options:t})}async function openInBrowser(e){const t=`https://commandcode.ai/${e.owner}/${e.packageName}`;await ie(t);const n=getPackageLink({owner:e.owner,packageName:e.packageName});console.log(`${Be.green(be.tick)} Opened ${n} in browser`)}async function openInEditor3({packageName:e,options:t}){const n=t.global?"local-global":"local-project",r=await open7({package:e,target:n});r.success||exitWithError(r.error??"Unknown error"),console.log(`${Be.green(be.tick)} Opened ${Be.green(`'${e}'`)} taste package from ${t.global?"global":"project"}`)}__name(open7,"open"),__name(getEditorSetupInstructions,"getEditorSetupInstructions"),__name(createOpenCommand,"createOpenCommand"),__name(validateOpenOptions,"validateOpenOptions"),__name(runOpen,"runOpen"),__name(openInBrowser,"openInBrowser"),__name(openInEditor3,"openInEditor"),Nt(),Nt(),Nt(),Nt();var iP=null,aP=!1;function setActiveSpinner(e){iP=e}function stopActiveSpinner(e){iP&&(iP.stop(e),iP=null)}function setPrompted(e){aP=e}function wasPrompted(){return aP}function beginPrompt(e,t){stopActiveSpinner(),Ee.intro(Be.dim(e)),t&&Ee.log.message(Be.dim(t)),setPrompted(!0)}function handleCancel(e){Ee.isCancel(e)&&(Ee.cancel("Operation cancelled"),process.exit(0))}function startStrategySpinner(e){if("skip"===e){const e=Ee.spinner();return e.start("Skipping"),void e.stop("Skipped")}const t="merge"===e?"Merging":"Overwriting",n="merge"===e?"Merged":"Overwritten",r=Ee.spinner();r.start(t),setActiveSpinner({stop:__name(e=>r.stop(e??n),"stop"),cancel:__name(e=>r.cancel(e),"cancel"),error:__name(e=>r.error(e),"error")})}async function promptMergeStrategy(e){const{packageName:t,owner:n,localPkg:r,remoteLearningsCount:s}=e,o="This package already exists locally";if(!process.stdout.isTTY||!process.stdin.isTTY)return stopActiveSpinner(o),setPrompted(!0),Ee.log.warn("Non-interactive terminal detected, using default merge strategy"),"merge";beginPrompt(`Pulling ${Be.green(`'${t}'`)} from ${n}`,o),Ee.log.message(`Local: ${r.learnings.length} learnings\nRemote: ${s} learnings ${Be.dim(`(from ${n})`)}`);const i=await Ee.select({message:"What would you like to do?",options:[{value:"merge",label:"Merge",hint:"Combine both versions intelligently (default)"},{value:"overwrite",label:"Overwrite",hint:`Replace local with remote (${r.learnings.length} → ${s} learnings)`},{value:"skip",label:"Skip",hint:"Keep local version, ignore remote"}],initialValue:"merge"});handleCancel(i);const a=i;return startStrategySpinner(a),a}async function promptGlobalPushStrategy(e){const{packageName:t,localLearningsCount:n,globalPkg:r}=e,s="This package already exists in global storage";if(!process.stdout.isTTY||!process.stdin.isTTY)return stopActiveSpinner(s),setPrompted(!0),Ee.log.warn("Non-interactive terminal detected, using default merge strategy"),"merge";beginPrompt(`Pushing ${Be.green(`'${t}'`)} to global`,s),Ee.log.message(`Local: ${n} learnings\nGlobal: ${r.learnings.length} learnings`);const o=await Ee.select({message:"What would you like to do?",options:[{value:"merge",label:"Merge",hint:"Combine both versions intelligently (default)"},{value:"overwrite",label:"Overwrite",hint:`Replace global with local (${r.learnings.length} → ${n} learnings)`},{value:"skip",label:"Skip",hint:"Keep global version, cancel push"}],initialValue:"merge"});handleCancel(o);const i=o;return startStrategySpinner(i),i}async function promptGlobalPullStrategy(e){const{packageName:t,localPkg:n,globalLearningsCount:r}=e,s="This package already exists locally";if(!process.stdout.isTTY||!process.stdin.isTTY)return stopActiveSpinner(s),setPrompted(!0),Ee.log.warn("Non-interactive terminal detected, using default merge strategy"),"merge";beginPrompt(`Pulling ${Be.green(`'${t}'`)} from global`,s),Ee.log.message(`Local: ${n.learnings.length} learnings\nGlobal: ${r} learnings`);const o=await Ee.select({message:"What would you like to do?",options:[{value:"merge",label:"Merge",hint:"Combine both versions intelligently (default)"},{value:"overwrite",label:"Overwrite",hint:`Replace local with global (${n.learnings.length} → ${r} learnings)`},{value:"skip",label:"Skip",hint:"Keep local version, ignore global"}],initialValue:"merge"});handleCancel(o);const i=o;return startStrategySpinner(i),i}async function promptTypeMismatchStrategy(e){const{packageName:t,owner:n,localLearningsCount:r,remoteLearningsCount:s}=e,o=`Pushing local project taste to individual package '${t}'`;if(!process.stdout.isTTY||!process.stdin.isTTY)return stopActiveSpinner(o),setPrompted(!0),Ee.log.warn("Non-interactive terminal detected, skipping push"),"skip";const i=ot(`commandcode.ai/${n}/${t}`,`https://commandcode.ai/${n}/${t}`,{fallback:__name((e,t)=>t,"fallback")});beginPrompt(`Pushing ${Be.green(`'${t}'`)} to ${n}`,o),Ee.log.message(`Local: ${t} (${r} learnings)\nRemote: ${t} (${s} learnings) in ${n}`),Ee.log.info(`Current package: ${Be.cyan(i)} ${Be.dim("(review)")}`);const a=await Ee.select({message:"What would you like to do?",options:[{value:"skip",label:"Skip",hint:"Keep remote version, cancel push"},{value:"overwrite",label:"Overwrite",hint:"Replace individual remote package with local project taste"}],initialValue:"skip"});handleCancel(a);const l=a;return startStrategySpinner(l),l}async function promptSameTypeStrategy(e){const{packageName:t,owner:n,localLearningsCount:r,remoteLearningsCount:s}=e,o=`This package already exists in ${n}`;if(!process.stdout.isTTY||!process.stdin.isTTY)return stopActiveSpinner(o),setPrompted(!0),Ee.log.warn("Non-interactive terminal detected, skipping push"),"skip";const i=ot(`commandcode.ai/${n}/${t}`,`https://commandcode.ai/${n}/${t}`,{fallback:__name((e,t)=>t,"fallback")});beginPrompt(`Pushing ${Be.green(`'${t}'`)} to ${n}`,o),Ee.log.message(`Local: ${r} learnings\nRemote: ${s} learnings`),Ee.log.info(`Current package: ${Be.cyan(i)} ${Be.dim("(review)")}`);const a=await Ee.select({message:"What would you like to do?",options:[{value:"skip",label:"Skip",hint:"Keep remote version, cancel push"},{value:"overwrite",label:"Overwrite",hint:`Replace remote with local (${s} → ${r} learnings)`}],initialValue:"skip"});handleCancel(a);const l=a;return startStrategySpinner(l),l}function mergeSingleLearning(e,t,n,r){const s=t.get(e.text);return s?e.confidence>s.confidence?(n.set(e.text,e),void r.updated++):void r.unchanged++:(n.set(e.text,e),void r.added++)}function mergePackages(e){const{source:t,target:n}=e,r={added:0,updated:0,unchanged:0},s=new Map(n.map(e=>[e.text,e])),o=new Map(s);for(const e of t)mergeSingleLearning(e,s,o,r);const i=new Set(t.map(e=>e.text)),a=n.filter(e=>!i.has(e.text)).length;return r.unchanged+=a,{merged:Array.from(o.values()),details:r}}function validateSinglePackage(e,t){const n=validateTasteFile({content:formatPackage({pkg:e}),filePath:`${e.category}/taste.md`});if(!n.valid){const r=formatValidationIssues({result:n,verbose:!0});return{pkg:e.category,error:`Validation failed for taste package in ${t}:\n${r}`}}return n.issues.filter(e=>"warning"===e.severity).length>0&&(console.warn(`\nWarning: Taste package '${e.category}' in ${t} has validation warnings:\n`),console.warn(formatValidationIssues({result:n,verbose:!0})+"\n")),null}function validateSingleRemoteFile(e,t){const n=validateTasteFile({content:e.content,filePath:e.file});if(!n.valid){const r=formatValidationIssues({result:n,verbose:!0});return{pkg:t,error:`Validation failed for ${e.file}:\n${r}`}}return n.issues.filter(e=>"warning"===e.severity).length>0&&(console.warn(`\nWarning: File '${e.file}' has validation warnings:\n`),console.warn(formatValidationIssues({result:n,verbose:!0})+"\n")),null}function validatePackages(e){const{packages:t,label:n}=e;return t.map(e=>validateSinglePackage(e,n)).filter(e=>null!==e)}function validateRemoteFiles(e){const{files:t,packageName:n}=e;return t.map(e=>validateSingleRemoteFile(e,n)).filter(e=>null!==e)}function mergeOrKeep(e){const{source:t,existing:n}=e;if(!n)return{pkg:t,details:{added:t.learnings.length,updated:0,unchanged:0}};const r=mergePackages({source:t.learnings,target:n.learnings});return{pkg:{...t,learnings:r.merged},details:r.details}}async function resolveRemotePullStrategy(e){const{flagStrategy:t,overwrite:n,existingPkg:r,tastePkg:s,owner:o}=e;return"skip"===t?r?"skip":"merge":"merge"===t?"merge":"overwrite"===t||n?"overwrite":r?promptMergeStrategy({packageName:s.category,owner:o,localPkg:r,remoteLearningsCount:s.learnings.length}):"merge"}async function executePackageStrategy(e){const{tastePkg:t,owner:n,overwrite:r,flagStrategy:s,result:o}=e,i=await getPackage2({category:t.category}),a=await resolveRemotePullStrategy({flagStrategy:s,overwrite:r,existingPkg:i,tastePkg:t,owner:n});if("skip"===a)return void o.skipped?.push(t.category);if("overwrite"===a&&(await writePackage2({pkg:t}),o.packagesPulled.push(t.category),o.overwritten.push(t.category)),"merge"===a){const{pkg:e,details:n}=mergeOrKeep({source:t,existing:i});await writePackage2({pkg:e}),o.packagesPulled.push(t.category),o.mergeDetails[t.category]=n}const l=getCategoryTasteFile({target:"local-project",category:t.category});o.filePaths[t.category]=l}async function processPackage(e){const{tastePkg:t,result:n}=e;try{await executePackageStrategy(e)}catch(e){n.success=!1,n.errors.push({pkg:t.category,error:e instanceof Error?e.message:String(e)})}}async function pullProjectPackage(e){const{files:t,packageName:n,owner:r,overwrite:s,flagStrategy:o,result:i}=e,a=t.find(e=>"taste.md"===e.file);if(a){const e=parsePackages({content:a.content,sourcePath:`remote:${n}/taste.md`});for(const t of e)await processPackage({tastePkg:t,owner:r,overwrite:s,flagStrategy:o,result:i})}const l=t.filter(e=>"taste.md"!==e.file);for(const e of l){const t=e.file.replace("/taste.md",""),a={category:t,learnings:parseTasteContent(e.content),sourcePath:`remote:${n}/${t}`};await processPackage({tastePkg:a,owner:r,overwrite:s,flagStrategy:o,result:i})}}async function pullCategoryPackage(e){const{files:t,packageName:n,owner:r,overwrite:s,flagStrategy:o,result:i}=e,a=t.find(e=>"taste.md"===e.file);if(!a)return i.success=!1,void i.errors.push({pkg:n,error:"No taste.md file found in category package"});const l={category:n,learnings:parseTasteContent(a.content),sourcePath:`remote:${n}`};await processPackage({tastePkg:l,owner:r,overwrite:s,flagStrategy:o,result:i})}__name(setActiveSpinner,"setActiveSpinner"),__name(stopActiveSpinner,"stopActiveSpinner"),__name(setPrompted,"setPrompted"),__name(wasPrompted,"wasPrompted"),__name(beginPrompt,"beginPrompt"),__name(handleCancel,"handleCancel"),__name(startStrategySpinner,"startStrategySpinner"),__name(promptMergeStrategy,"promptMergeStrategy"),__name(promptGlobalPushStrategy,"promptGlobalPushStrategy"),__name(promptGlobalPullStrategy,"promptGlobalPullStrategy"),__name(promptTypeMismatchStrategy,"promptTypeMismatchStrategy"),__name(promptSameTypeStrategy,"promptSameTypeStrategy"),Nt(),Nt(),__name(mergeSingleLearning,"mergeSingleLearning"),__name(mergePackages,"mergePackages"),__name(validateSinglePackage,"validateSinglePackage"),__name(validateSingleRemoteFile,"validateSingleRemoteFile"),__name(validatePackages,"validatePackages"),__name(validateRemoteFiles,"validateRemoteFiles"),__name(mergeOrKeep,"mergeOrKeep"),Nt(),__name(resolveRemotePullStrategy,"resolveRemotePullStrategy"),__name(executePackageStrategy,"executePackageStrategy"),__name(processPackage,"processPackage"),__name(pullProjectPackage,"pullProjectPackage"),__name(pullCategoryPackage,"pullCategoryPackage");var lP=__name(({pkg:e,error:t})=>({success:!1,packagesPulled:[],errors:[{pkg:e,error:t}],mergeDetails:{},overwritten:[],filePaths:{}}),"fail"),cP=__name(()=>({success:!0,packagesPulled:[],skipped:[],errors:[],mergeDetails:{},overwritten:[],filePaths:{}}),"emptyResult"),uP=__name(e=>"local-global"===e?"global":"remote-project"===e?"remote project":"remote-user"===e?"remote":"source","sourceName");async function resolvePullStrategy(e){const{flagStrategy:t,overwrite:n,existingPkg:r,source:s,tastePkg:o}=e;return"skip"===t?r?"skip":"merge":"merge"===t?"merge":"overwrite"===t||n?"overwrite":r&&"local-global"===s?promptGlobalPullStrategy({packageName:o.category,localPkg:r,globalLearningsCount:o.learnings.length}):"merge"}async function executePullStrategy(e){const{tastePkg:t,source:n,flagStrategy:r,overwrite:s,result:o}=e,i=await getPackage2({category:t.category}),a=await resolvePullStrategy({flagStrategy:r,overwrite:s,existingPkg:i,source:n,tastePkg:t});if("skip"===a)return void o.skipped.push(t.category);if("overwrite"===a&&(await writePackage2({pkg:t}),o.packagesPulled.push(t.category),o.overwritten.push(t.category)),"merge"===a){const{pkg:e,details:n}=mergeOrKeep({source:t,existing:i});await writePackage2({pkg:e}),o.packagesPulled.push(t.category),o.mergeDetails[t.category]=n}const l=getCategoryTasteFile({target:"local-project",category:t.category});o.filePaths[t.category]=l}async function pullSinglePackage(e){const{tastePkg:t,result:n}=e;try{await executePullStrategy(e)}catch(e){n.success=!1,n.errors.push({pkg:t.category,error:e instanceof Error?e.message:String(e)})}}async function pull(e){const{packages:t,source:n,overwrite:r=!1,strategy:s}=e;if("local-global"!==n&&"remote-project"!==n&&"remote-user"!==n)return lP({pkg:"all",error:`Invalid source: ${n}`});const o=uP(n);let i;try{i="local-global"===n?await getAllPackages():await getAllPackages3()}catch(e){return lP({pkg:"all",error:e instanceof Error?e.message:String(e)})}if(0===i.length)return lP({pkg:"all",error:`No taste packages found in ${o}`});const a=validatePackages({packages:i,label:o});if(a.length>0)return{success:!1,packagesPulled:[],errors:[...a],mergeDetails:{},overwritten:[],filePaths:{}};const l=t.length>0?i.filter(e=>t.includes(e.category)):i;if(t.length>0&&0===l.length)return{success:!1,packagesPulled:[],errors:t.map(e=>({pkg:e,error:`Taste package not found in ${o}`})),mergeDetails:{},overwritten:[],filePaths:{}};const u=cP();for(const e of l)await pullSinglePackage({tastePkg:e,source:n,flagStrategy:s,overwrite:r,result:u});return u}async function executePullRemote(e){const{owner:t,packageName:n,overwrite:r,flagStrategy:s,result:o}=e,i=await downloadPackage({owner:t,packageName:n});if(!i)return lP({pkg:n,error:"Taste package not found in remote"});const{type:a,files:l}=i,u=validateRemoteFiles({files:l,packageName:n});if(u.length>0)return{success:!1,packagesPulled:[],errors:[...u],mergeDetails:{},overwritten:[],filePaths:{}};const d={files:l,packageName:n,owner:t,overwrite:r,flagStrategy:s,result:o};return"project"===a?(await pullProjectPackage(d),o):(await pullCategoryPackage(d),o)}async function pullRemote(e){const{owner:t,packageName:n,overwrite:r=!1,strategy:s}=e,o=cP();try{return await executePullRemote({owner:t,packageName:n,overwrite:r,flagStrategy:s,result:o})}catch(e){return lP({pkg:n,error:e instanceof Error?e.message:String(e)})}}function logResult(e){if(wasPrompted())return Ee.outro(e),void setPrompted(!1);console.log(e)}function buildPullMessage(e){const{pkgName:t,sourceName:n,filePath:r,options:s,mergeDetails:o}=e,i=wasPrompted()?"":`${be.tick} `,a=r?Be.dim(`\n ${shortenPath(r)}`):"";if(s.overwrite)return`${Be.green(i)}Replaced ${Be.green(`'${t}'`)} taste package in project`+a;if(o){const e=formatMergeParts(o);return`${Be.green(i)}Pulled ${Be.green(`'${t}'`)} taste package from ${n} ${Be.gray(`(${e.join(", ")})`)}`+a}return`${Be.green(i)}Pulled ${Be.green(`'${t}'`)} taste package from ${n}`+a}function logPullSingleSuccess(e){const{result:t,sourceName:n,options:r}=e;if(1!==t.packagesPulled.length)return!1;const s=t.packagesPulled[0],o=t.filePaths?.[s],i=t.mergeDetails?.[s];return logResult(buildPullMessage({pkgName:s,sourceName:n,filePath:o,options:r,mergeDetails:i})),!r.overwrite&&!!i&&hasMergeConflictRisk(i)}function logPullSummary(e){const{result:t,sourceName:n}=e,r=t.overwritten??[],s=t.skipped??[],o=t.packagesPulled.filter(e=>!r.includes(e)),i=t.packagesPulled.length+s.length,a=`${i} ${1===i?"package":"packages"}`,l=[];return o.length>0&&l.push(wrapLine(`${Be.green("Pulled")} (${o.length}) ${o.join(", ")}`,wasPrompted()?4:0)),r.length>0&&l.push(wrapLine(`${Be.yellow("Overwritten")} (${r.length}) ${r.join(", ")}`,wasPrompted()?4:0)),s.length>0&&l.push(wrapLine(`${Be.dim("Skipped")} (${s.length}) ${Be.dim(s.join(", "))}`,wasPrompted()?4:0)),wasPrompted()?(l.length>0&&Ee.log.message(l.join("\n")),Ee.outro(`${a} from ${n}`),setPrompted(!1),hasMergeConflictRiskInRecord(t.mergeDetails??{})):(console.log(`${Be.green(be.tick)} ${a} from ${n}`),l.length>0&&console.log(l.join("\n")),hasMergeConflictRiskInRecord(t.mergeDetails??{}))}function logPullSuccess(e){const{result:t,sourceName:n,options:r}=e,s=t.skipped??[];t.packagesPulled.length+s.length>1?logPullSummary({result:t,sourceName:n})&&logMergeReviewTip():s.length>0?logResult(Be.yellow(`Skipped '${s[0]}' — kept local version`)):logPullSingleSuccess({result:t,sourceName:n,options:r})&&logMergeReviewTip()}function createPullCommand(){return new Ae("pull").argument("[package]","Taste package name, or owner/package to pull from remote").option("-g, --global","Pull taste package from global storage (~/.commandcode)").addOption(new xe("--local","Use local server").hideHelp()).option("--remote","Pull taste package from commandcode.ai remote").option("--all","Pull all taste packages from global").option("--overwrite","Replace local package without prompting").option("--skip","Keep local package, skip conflicting pull").option("--merge","Auto-merge conflicting learnings without prompting").addOption(new xe("--staging","Use staging environment").hideHelp()).description(`Pull taste packages from remote or global into the project ${Be.dim("(prompts on conflicts)")}`).action(withErrorHandler(async(e,t)=>{setPrompted(!1);const n=resolveRemoteDefault(t),{result:r,owner:s}=await runPull({packageName:e,options:n});r.success||handleResultErrors(r.errors),logPullSuccess({result:r,sourceName:n.remote?s??"remote":"global",options:n})}))}function validatePullOptions(e){const{packageName:t,options:n}=e;n.global&&n.remote&&exitWithError("--global and --remote are mutually exclusive — pick one source"),n.remote&&n.all&&exitWithUsage({message:"--all is not supported for remote pull — specify a package instead",usage:["cmd taste pull <owner>/<package> pull a taste package from remote"]}),n.remote&&!t&&exitWithUsage({message:"Specify a taste package to pull from remote",usage:["cmd taste pull <owner>/<package> pull a taste package from remote","cmd taste pull <package> -g pull a taste package from global","cmd taste pull --all -g pull all taste packages from global"]}),n.remote&&t&&!t.includes("/")&&exitWithUsage({message:`Remote pull requires owner/package format — got '${t}'`,usage:["cmd taste pull <owner>/<package> e.g. cmd taste pull ahmadawais/code-style"]}),t||n.all||exitWithUsage({message:"Specify a taste package name or use --all to pull everything",usage:["cmd taste pull <owner>/<package> pull a taste package from remote","cmd taste pull <package> -g pull a taste package from global","cmd taste pull --all -g pull all taste packages from global"]}),t&&n.all&&exitWithError("Use either a package name or --all, not both"),resolveConflictStrategy(n)}async function runPull(e){const{packageName:t,options:n}=e;console.log("");const r=resolveRemoteDefault(n);validatePullOptions({packageName:t,options:r});const s=resolveConflictStrategy(r);return r.remote&&t?pullRemoteSingle({packageName:t,options:r,strategy:s}):pullGlobal({packageName:t,options:r,strategy:s})}async function pullRemoteSingle(e){const{packageName:t,options:n,strategy:r}=e,s=parseOwnerPackage(t);s||exitWithError("Invalid format — use owner/package (e.g. ahmadawais/code-style)"),setActiveSpinner(Ie("Pulling taste package").start());const o=await pullRemote({owner:s.owner,packageName:s.packageName,overwrite:n.overwrite,strategy:r});return stopActiveSpinner(),{result:o,owner:s.owner}}async function pullGlobal(e){const{packageName:t,options:n,strategy:r}=e;setActiveSpinner(Ie("Pulling taste package").start());const s=n.all||!t?[]:[t],o=await pull({packages:s,source:"local-global",overwrite:n.overwrite,strategy:r});return stopActiveSpinner(),{result:o}}async function fetchUserNamespaces(){const e=getApiBaseUrl(),t=new Vb({baseUrl:e}),n=await t.get({endpoint:St.ALPHA.NAMESPACES});if(!n.success)throw new Error("Failed to fetch namespaces");if("org"===n.type)return{userName:n.org.login,orgs:[]};const r=n.orgs.map(e=>({id:e.id,login:e.login,name:e.name}));return{userName:n.user.userName,orgs:r}}function logResult2(e){if(wasPrompted())return Ee.outro(e),void setPrompted(!1);console.log(e)}function logPushAllSuccess(t){const{result:n,options:r}=t;if(!r.all)return!1;if(0===n.packagesPushed.length){const e=n.skipped?.length??0;if(e>0){const t=wasPrompted()?"":`${be.tick} `,n=`${e} ${1===e?"package":"packages"}`;logResult2(`${Be.green(t)}Skipped ${n}`)}return!1}const s=n.packagesPushed.length,o=`${s} ${1===s?"package":"packages"}`,i=n.filePaths?.[n.packagesPushed[0]],a=r.global&&i?shortenPath(e.dirname(e.dirname(i))):i,l=wasPrompted()?"":`${be.tick} `;if(!a)return logResult2(`${Be.green(l)}Pushed ${o} to remote`),!1;if(r.overwrite||Boolean(n.overwritten?.length)){let e=0;if(n.mergeDetails)for(const t of Object.values(n.mergeDetails))e+=t.updated??0;const t=e>0?` ${Be.gray(`(${e} ${1===e?"learning":"learnings"} replaced)`)}`:"";return logResult2(`${Be.green(l)}Replaced ${o} in ${a}${t}`),!1}if(!n.mergeDetails||0===Object.keys(n.mergeDetails).length)return logResult2(`${Be.green(l)}Pushed ${o} to ${a}`),!1;let u=0,d=0,m=0;for(const e of Object.values(n.mergeDetails))u+=e.added??0,d+=e.updated??0,m+=e.unchanged??0;const p=formatMergeParts({added:u,updated:d,unchanged:m}),g=p.length>0?` ${Be.gray(`(${p.join(", ")})`)}`:"";return logResult2(`${Be.green(l)}Pushed ${o} to ${a}${g}`),(u>0||d>0)&&m>0}function logPushSingleSuccess(e){const{result:t,options:n}=e;if(n.all)return!1;if(1!==t.packagesPushed.length)return!1;const r=t.packagesPushed[0],s=t.filePaths?.[r],o=n.remote&&s,i=o?s:"global",a=wasPrompted()?"":`${be.tick} `,l=!o&&s?Be.dim(`\n ${shortenPath(s)}`):"";if(n.overwrite)return logResult2(`${Be.green(a)}Replaced ${Be.green(`'${r}'`)} taste package in ${i}`+l),!1;if(t.mergeDetails?.[r]){const e=t.mergeDetails[r],n=formatMergeParts(e);return logResult2(`${Be.green(a)}Pushed ${Be.green(`'${r}'`)} taste package to ${i} ${Be.gray(`(${n.join(", ")})`)}`+l),hasMergeConflictRisk(e)}return logResult2(`${Be.green(a)}Pushed ${Be.green(`'${r}'`)} taste package to ${i}`+l),!1}function logPushMultiSuccess(e){const{result:t,options:n}=e;if(n.all)return!1;if(t.packagesPushed.length<=1)return!1;const r=n.remote?"remote":"global",s=wasPrompted()?"":`${be.tick} `;return logResult2(wrapLine(`${Be.green(s)}Pushed ${Be.green(t.packagesPushed.length)} taste packages ${Be.green(`(${t.packagesPushed.join(", ")})`)} to ${r}`)),!(n.overwrite||!t.mergeDetails)&&hasMergeConflictRiskInRecord(t.mergeDetails)}function logPushUrls(e){const{result:t,options:n}=e;if(!n.remote||!t.filePaths)return;const r=new Set;for(const e of t.packagesPushed){const n=t.filePaths[e];if(!n||!n.includes("/"))continue;const[s,o]=n.split("/");if(!s||!o)continue;const i=getPackageLink({owner:s,packageName:o});r.has(i)||(r.add(i),console.log(Be.gray(` ${i}`)))}}function logConflictSummary(e){const{result:t}=e,n=t.overwritten??[],r=t.skipped??[],s=t.packagesPushed.filter(e=>!n.includes(e)),o=t.packagesPushed.length+r.length,i=[];s.length>0&&i.push(wrapLine(`${Be.green("Merged")} (${s.length}) ${s.join(", ")}`,4)),n.length>0&&i.push(wrapLine(`${Be.yellow("Overwritten")} (${n.length}) ${n.join(", ")}`,4)),r.length>0&&i.push(wrapLine(`${Be.dim("Skipped")} (${r.length}) ${Be.dim(r.join(", "))}`,4)),i.length>0&&Ee.log.message(i.join("\n"));const a=`${o} ${1===o?"package":"packages"}`;Ee.outro(a)}function logPushBreakdown(e){const t=e.overwritten??[],n=e.skipped??[];if(0===n.length&&0===t.length)return;const r=e.packagesPushed.filter(e=>!t.includes(e)),s=[];r.length>0&&s.push(wrapLine(`${Be.green("Pushed")} (${r.length}) ${r.join(", ")}`)),t.length>0&&s.push(wrapLine(`${Be.yellow("Overwritten")} (${t.length}) ${t.join(", ")}`)),n.length>0&&s.push(wrapLine(`${Be.dim("Skipped")} (${n.length}) ${Be.dim(n.join(", "))}`)),s.length>0&&console.log(s.join("\n"))}function logPushSuccess(e){const{result:t,options:n}=e;if(wasPrompted())return setPrompted(!1),logConflictSummary({result:t}),void logPushUrls({result:t,options:n});const r=logPushAllSuccess({result:t,options:n})||logPushSingleSuccess({result:t,options:n})||logPushMultiSuccess({result:t,options:n});n.all&&logPushBreakdown(t),logPushUrls({result:t,options:n}),r&&logMergeReviewTip()}__name(resolvePullStrategy,"resolvePullStrategy"),__name(executePullStrategy,"executePullStrategy"),__name(pullSinglePackage,"pullSinglePackage"),__name(pull,"pull"),__name(executePullRemote,"executePullRemote"),__name(pullRemote,"pullRemote"),Nt(),__name(logResult,"logResult"),__name(buildPullMessage,"buildPullMessage"),__name(logPullSingleSuccess,"logPullSingleSuccess"),__name(logPullSummary,"logPullSummary"),__name(logPullSuccess,"logPullSuccess"),__name(createPullCommand,"createPullCommand"),__name(validatePullOptions,"validatePullOptions"),__name(runPull,"runPull"),__name(pullRemoteSingle,"pullRemoteSingle"),__name(pullGlobal,"pullGlobal"),Nt(),$n(),Nt(),ts(),bE(),Ot(),__name(fetchUserNamespaces,"fetchUserNamespaces"),Nt(),__name(logResult2,"logResult"),__name(logPushAllSuccess,"logPushAllSuccess"),__name(logPushSingleSuccess,"logPushSingleSuccess"),__name(logPushMultiSuccess,"logPushMultiSuccess"),__name(logPushUrls,"logPushUrls"),__name(logConflictSummary,"logConflictSummary"),__name(logPushBreakdown,"logPushBreakdown"),__name(logPushSuccess,"logPushSuccess"),Nt(),AC(),Nt();var dP=__name(({pkg:e,error:t})=>({success:!1,packagesPushed:[],skipped:[],errors:[{pkg:e,error:t}],mergeDetails:{},overwritten:[],filePaths:{}}),"fail"),mP=__name(e=>e.reduce((e,t)=>t.file.endsWith("taste.md")?e+parseTasteContent(t.content).length:e,0),"countRemoteLearnings");async function resolvePushAllStrategy(e){const{flagStrategy:t,overwrite:n,existingProject:r,packagesToPush:s,projectName:o,owner:i}=e;if("skip"===t)return"skip";if("overwrite"===t||n)return"overwrite";if("merge"===t)return"overwrite";if(!r)return"overwrite";const a=r.type??"category",l=s.reduce((e,t)=>e+t.learnings.length,0),u=mP(r.files);return"project"!==a?promptTypeMismatchStrategy({packageName:o,owner:i,localLearningsCount:l,remoteLearningsCount:u}):promptSameTypeStrategy({packageName:o,owner:i,localLearningsCount:l,remoteLearningsCount:u})}async function executePushAllRemote(t){const{packagesToPush:n,owner:r,overwrite:s,isPublic:o,isPublicExplicitlySet:i,flagStrategy:a}=t,l=e.basename(process.cwd()),u={success:!0,packagesPushed:[],skipped:[],errors:[],mergeDetails:{},overwritten:[],filePaths:{}},d=await downloadPackage({owner:r,packageName:l});if("skip"===await resolvePushAllStrategy({flagStrategy:a,overwrite:s,existingProject:d,packagesToPush:n,projectName:l,owner:r}))return u.skipped.push(...n.map(e=>e.category)),u;await writePackages({packages:n,projectName:l,owner:r,isPublic:i?o:d?.isPublic??!1});for(const e of n)u.packagesPushed.push(e.category),u.filePaths[e.category]=`${r}/${l}`,u.mergeDetails[e.category]={added:e.learnings.length,updated:0,unchanged:0};return d&&u.overwritten.push(...n.map(e=>e.category)),u}async function pushAllRemote(e){try{return await executePushAllRemote(e)}catch(e){return dP({pkg:"all",error:e instanceof Error?e.message:String(e)})}}__name(resolvePushAllStrategy,"resolvePushAllStrategy"),__name(executePushAllRemote,"executePushAllRemote"),__name(pushAllRemote,"pushAllRemote");var pP=__name(({pkg:e,error:t})=>({success:!1,packagesPushed:[],skipped:[],errors:[{pkg:e,error:t}],mergeDetails:{},overwritten:[],filePaths:{}}),"fail"),gP=__name(()=>({success:!0,packagesPushed:[],skipped:[],errors:[],mergeDetails:{},overwritten:[],filePaths:{}}),"emptyResult");async function writePkg(e){const{pkg:t,target:n,owner:r,isPublic:s}=e;if("local-global"!==n){if(!r)throw new Error("Failed to get owner for remote push");await writePackage3({pkg:t,owner:r,isPublic:s})}else await writePackage({pkg:t})}__name(writePkg,"writePkg");var hP=__name(e=>{const{target:t,category:n,owner:r}=e;return"local-global"===t?getCategoryTasteFile({target:"local-global",category:n}):"remote-project"!==t&&"remote-user"!==t||!r?void 0:`${r}/${n}`},"getDestPath");async function getUserOwner(){try{const e=await getAuthenticatedEntity();if(e.success&&e.user?.userName)return e.user.userName}catch{}}async function resolveSinglePushStrategy(e){const{flagStrategy:t,overwrite:n,existingPkg:r,target:s,tastePkg:o}=e;return"skip"===t?r?"skip":"merge":"merge"===t?"merge":"overwrite"===t||n?"overwrite":r&&"local-global"===s?promptGlobalPushStrategy({packageName:o.category,localLearningsCount:o.learnings.length,globalPkg:r}):"merge"}async function executePushStrategy(e){const{tastePkg:t,target:n,flagStrategy:r,overwrite:s,userOwner:o,isPublic:i,result:a}=e,l="local-global"===n?await getPackage({category:t.category}):await getPackage3({category:t.category}),u=await resolveSinglePushStrategy({flagStrategy:r,overwrite:s,existingPkg:l,target:n,tastePkg:t});if("skip"===u)return void a.skipped.push(t.category);if("overwrite"===u&&(await writePkg({pkg:t,target:n,owner:o,isPublic:i}),a.packagesPushed.push(t.category),a.overwritten.push(t.category),a.mergeDetails[t.category]={added:0,updated:t.learnings.length,unchanged:0}),"merge"===u){const{pkg:e,details:r}=mergeOrKeep({source:t,existing:l});await writePkg({pkg:e,target:n,owner:o,isPublic:i}),a.packagesPushed.push(t.category),a.mergeDetails[t.category]=r}const d=hP({target:n,category:t.category,owner:o});d&&(a.filePaths[t.category]=d)}async function pushSinglePackage(e){const{tastePkg:t,result:n}=e;try{await executePushStrategy(e)}catch(e){n.success=!1,n.errors.push({pkg:t.category,error:e instanceof Error?e.message:String(e)})}}async function push(e){const t=void 0!==e.isPublic,{packages:n,target:r,overwrite:s=!1,isPublic:o=!1,strategy:i}=e;if(!exists2())return pP({pkg:"all",error:"No taste directory found in project"});const a=await getAllPackages2();if(0===a.length)return pP({pkg:"all",error:"No taste packages found in project"});const l=validatePackages({packages:a,label:"project"});if(l.length>0)return{success:!1,packagesPushed:[],skipped:[],errors:[...l],mergeDetails:{},overwritten:[],filePaths:{}};const u=n.length>0?a.filter(e=>n.includes(e.category)):a;if(n.length>0&&0===u.length)return{success:!1,packagesPushed:[],skipped:[],errors:n.map(e=>({pkg:e,error:"Taste package not found in project"})),mergeDetails:{},overwritten:[],filePaths:{}};const d="remote-project"===r||"remote-user"===r?e.owner??await getUserOwner():void 0;if("remote-project"===r&&0===n.length)return d?pushAllRemote({packagesToPush:u,owner:d,overwrite:s,isPublic:o,isPublicExplicitlySet:t,flagStrategy:i}):pP({pkg:"all",error:"Failed to get owner for remote push"});if("local-global"!==r&&"remote-project"!==r&&"remote-user"!==r)return pP({pkg:"all",error:`Invalid target: ${r}`});const m=gP();for(const e of u)await pushSinglePackage({tastePkg:e,target:r,flagStrategy:i,overwrite:s,userOwner:d,isPublic:o,result:m});return m}async function executeRemotePush(e){const t=void 0!==e.isPublic,{owner:n,packageName:r,overwrite:s=!1,isPublic:o=!1,strategy:i}=e,a=await getPackage2({category:r});if(!a)return pP({pkg:r,error:`Taste package '${r}' not found in local project`});const l=validateTasteFile({content:formatPackage({pkg:a}),filePath:`${a.category}/taste.md`});if(!l.valid){const e=formatValidationIssues({result:l,verbose:!0});return pP({pkg:r,error:`Validation failed:\n${e}`})}l.issues.filter(e=>"warning"===e.severity).length>0&&(console.warn(`\nWarning: Taste package '${r}' has validation warnings:\n`),console.warn(formatValidationIssues({result:l,verbose:!0})+"\n"));const u=await downloadRemotePackage({owner:n,packageName:r}),d=await resolveSinglePushStrategy({flagStrategy:i,overwrite:s,existingPkg:u,target:"remote-project",tastePkg:a}),m=t?o:u?.isPublic??!1,p=gP();if("skip"===d)return p.skipped.push(r),p;if("overwrite"===d&&(await writePackage3({pkg:a,owner:n,isPublic:m}),p.packagesPushed.push(r),p.overwritten.push(r)),"merge"===d){const{pkg:e,details:t}=mergeOrKeep({source:a,existing:u});await writePackage3({pkg:e,owner:n,isPublic:m}),p.packagesPushed.push(r),p.mergeDetails[r]=t}return p.filePaths[r]=`${n}/${r}`,p}async function pushRemote(e){const{packageName:t}=e;if(!exists2())return pP({pkg:t,error:"No taste directory found in project"});try{return await executeRemotePush(e)}catch(e){return pP({pkg:t,error:e instanceof Error?e.message:String(e)})}}async function promptOwnerSelection(e){const{userName:t,orgs:n}=e;if(0===n.length)return t;const r=[{value:t,label:t,hint:"Personal"},...n.map(e=>({value:e.login,label:e.name||e.login,hint:"Organization"}))],s=await Ee.select({message:"Owner",options:r,initialValue:t});return Ee.isCancel(s)&&(Ee.cancel("Operation cancelled"),process.exit(0)),s}function createPushCommand(){return new Ae("push").description(`Push taste packages to remote ${Be.dim("(commandcode.ai)")} or global ${Be.dim("(~/.commandcode)")}`).argument("[package]","Taste package name to push (omit with --all)").option("--all","Push all taste packages to remote").option("--remote","Push to commandcode.ai remote (default)").option("-g, --global","Push to local global storage (~/.commandcode)").addOption(new xe("--local","Use local server").hideHelp()).option("--public","Make package publicly discoverable on commandcode.ai").option("--private","Make package private (not publicly discoverable)").option("--owner <owner>","Push under a specific owner or organization").option("--overwrite","Replace existing package without prompting").option("--skip","Keep existing package, skip conflicting push").option("--merge","Auto-merge conflicting learnings without prompting").addOption(new xe("--staging","Push to staging environment").hideHelp()).action(withErrorHandler(async(e,t)=>{setPrompted(!1);const n=resolveRemoteDefault(t),r=await runPush({packageName:e,options:n});r.success||handleResultErrors(r.errors),logPushSuccess({result:r,options:n})}))}function validatePushOptions(e){const{packageName:t,options:n}=e;n.global&&n.remote&&exitWithError("--global and --remote are mutually exclusive — pick one destination"),n.public&&n.private&&exitWithError("--public and --private are mutually exclusive — pick one visibility"),n.owner&&n.global&&exitWithError("--owner only applies to remote pushes, not --global"),t||n.all||exitWithUsage({message:"Specify a taste package name or use --all to push everything",usage:["cmd taste push <package> push a taste package to remote (default)","cmd taste push --all push all taste packages to remote","cmd taste push <package> -g push a taste package to global (~/.commandcode)"]}),t&&n.all&&exitWithError("Use either a package name or --all, not both"),resolveConflictStrategy(n)}__name(getUserOwner,"getUserOwner"),__name(resolveSinglePushStrategy,"resolveSinglePushStrategy"),__name(executePushStrategy,"executePushStrategy"),__name(pushSinglePackage,"pushSinglePackage"),__name(push,"push"),__name(executeRemotePush,"executeRemotePush"),__name(pushRemote,"pushRemote"),Nt(),__name(promptOwnerSelection,"promptOwnerSelection"),__name(createPushCommand,"createPushCommand"),__name(validatePushOptions,"validatePushOptions");var fP=__name(e=>!!e.public||!e.private&&void 0,"resolveVisibility");async function validateOwnerAccess(e){let t;try{t=await fetchUserNamespaces()}catch(e){return void dlog(`[Auth] validateOwnerAccess: namespace service unavailable, skipping — ${e instanceof Error?e.message:String(e)}`)}const n=[t.userName,...t.orgs.map(e=>e.login)];n.includes(e)||exitWithError(`No push access to '${e}'. Available: ${n.join(", ")}`)}async function resolveOwnerForPush(e){const{packageName:t,owner:n}=e,r=parseOwnerPackage(t);if(r)return await validateOwnerAccess(r.owner),r;if(n)return await validateOwnerAccess(n),{owner:n,packageName:t};Ee.intro(Be.dim(`pushing ${t}`)),setPrompted(!0);const s=Ee.spinner();s.start("Resolving"),(await list({location:"local-project"})).some(e=>e.category===t)||(s.error("Failed"),Ee.outro(Be.red(`Taste package '${t}' not found in project`)),process.exit(1));const o=await fetchUserNamespaces();return s.stop(o.orgs.length>0?"Select owner to push to":""),{owner:o.orgs.length>0?await promptOwnerSelection(o):o.userName,packageName:t}}async function runPush(e){const{packageName:t,options:n}=e;console.log("");const r=resolveRemoteDefault(n);validatePushOptions({packageName:t,options:r});const s=resolveConflictStrategy(r);return r.remote&&r.all?pushRemoteAll({options:r,strategy:s}):r.remote?pushRemoteSingle({packageName:t,options:r,strategy:s}):pushGlobal({packageName:t,options:r,strategy:s})}async function pushRemoteAll(t){const{options:n,strategy:r}=t;n.owner&&await validateOwnerAccess(n.owner);const s=(await getAllPackages2()).length,o=`${s} ${1===s?"package":"packages"}`,i=e.basename(process.cwd()),a=resolveStrategyLabel({strategy:r,isRemote:!0});console.log(Be.dim(` Pushing ${o} to ${i} (remote)${a}`)),console.log(""),setActiveSpinner(Ie("Pushing taste packages").start());const l=await push({packages:[],target:"remote-project",overwrite:n.overwrite,isPublic:fP(n),strategy:r,owner:n.owner});return stopActiveSpinner(),l}async function pushRemoteSingle(e){const{packageName:t,options:n,strategy:r}=e,{owner:s,packageName:o}=await resolveOwnerForPush({packageName:t,owner:n.owner});startPushSpinner({owner:s,pkgName:o});const i=await pushRemote({owner:s,packageName:o,overwrite:n.overwrite,isPublic:fP(n),strategy:r});return stopActiveSpinner(`Pushed to ${s}/${o}`),i}function resolveStrategyLabel(e){const{strategy:t,isRemote:n=!1}=e;return"overwrite"===t?" · overwrite":"skip"===t?" · skip conflicts":"merge"===t?" · auto-merge":n?"":" · will prompt on conflicts"}function startPushSpinner(e){const{owner:t,pkgName:n}=e;if(wasPrompted()){const e=Ee.spinner();return e.start(`Pushing to ${t}/${n}`),void setActiveSpinner(e)}setActiveSpinner(Ie("Pushing taste package").start())}async function pushGlobal(e){const{packageName:t,options:n,strategy:r}=e,s=n.all||!t?[]:[t],o=await getAllPackages2(),i=s.length>0?s.length:o.length,a=`${i} ${1===i?"package":"packages"}`,l=shortenPath(getTastePath({target:"local-global"})),u=resolveStrategyLabel({strategy:r});console.log(Be.dim(` Pushing ${a} to ${l}${u}`)),console.log(""),setActiveSpinner(Ie("Pushing taste packages").start());const d=await push({packages:s,target:"local-global",overwrite:n.overwrite,strategy:r});return stopActiveSpinner(),d}function createTasteCommand(){const e=new Ae(Tt.TASTE);return e.description("Manage taste learning packages").allowUnknownOption().allowExcessArguments(),e.addCommand(createPushCommand()),e.addCommand(createPullCommand()),e.addCommand(createListCommand()),e.addCommand(createLintCommand()),e.addCommand(createOpenCommand()),e}function formatVersion(e,t,n=!1){const r=n?re.bold(re.green(t)):re.white(t);return`${re.dim(e)} ${r}`}function showVersionDetails(e){console.log(formatVersion("Current:",e.currentVersion)),console.log(formatVersion("Latest: ",e.latestVersion,!0)),console.log(""),console.log(`Run ${re.bold(re.green("cmd update"))} to install.`)}function showUpdateSuccessHint(){console.log(re.dim(`Run ${re.cyan("cmd")} to start using the new version.`))}function showManualUpdateHint(e){console.log(re.dim("Try updating manually:")),console.log(re.cyan(`npm i -g command-code@${e}`))}function showCheckFailure(){console.log(re.dim("Please check your internet connection or try again later."))}async function checkAction(){const e=Ie("Checking for updates...").start(),t=await checkForUpdateAvailable();if(!t)return e.fail("Failed to check for updates"),void showCheckFailure();t.updateAvailable?(e.stop(),console.log(""),console.log(`${re.green(be.tick)} Update available`),showVersionDetails(t)):e.succeed(`Up to date ${re.dim(`(${t.currentVersion})`)}`)}async function performUpdateAction(){const e=Ie("Checking for updates...").start(),t=await checkForUpdateAvailable();if(!t)return e.fail("Failed to check for updates"),void showCheckFailure();t.updateAvailable?(e.text=`Updating ${t.currentVersion} ${be.arrowRight} ${t.latestVersion}...`,(await performAutoUpdate({silent:!0,updateInfo:t})).success||(e.fail("Update failed"),trackError({error:sanitizeErrorForTelemetry({error:new Error("Update failed"),label:"cli_update_failed"}),context:{component:Br.UPDATE_COMMAND,heading:"CLI update failed","update.current_version":t.currentVersion,"update.target_version":t.latestVersion}}),showManualUpdateHint(t.latestVersion),await shutdownTelemetry(),process.exit(1)),e.succeed(`Updated to v${t.latestVersion}`),showUpdateSuccessHint()):e.succeed(`Up to date ${re.dim(`(${t.currentVersion})`)}`)}async function updateAction(e){e.checkOnly?await checkAction():await performUpdateAction()}__name(validateOwnerAccess,"validateOwnerAccess"),__name(resolveOwnerForPush,"resolveOwnerForPush"),__name(runPush,"runPush"),__name(pushRemoteAll,"pushRemoteAll"),__name(pushRemoteSingle,"pushRemoteSingle"),__name(resolveStrategyLabel,"resolveStrategyLabel"),__name(startPushSpinner,"startPushSpinner"),__name(pushGlobal,"pushGlobal"),__name(createTasteCommand,"createTasteCommand"),Nt(),Ot(),Vr(),__name(formatVersion,"formatVersion"),__name(showVersionDetails,"showVersionDetails"),__name(showUpdateSuccessHint,"showUpdateSuccessHint"),__name(showManualUpdateHint,"showManualUpdateHint"),__name(showCheckFailure,"showCheckFailure"),__name(checkAction,"checkAction"),__name(performUpdateAction,"performUpdateAction"),__name(updateAction,"updateAction");var yP=new Ae("update").description("Update Command Code to the latest version").option("--check-only","Check for updates without installing").allowUnknownOption().allowExcessArguments().action(updateAction);Nt(),Qs(),AC();var wP=__name((e,t)=>`${be.info} ${e}: ${re.cyan(t)}`,"formatInfoLine"),SP=__name(e=>re.bold(`${e}:`),"formatSectionHeader"),bP=__name(e=>re.red(e),"formatError"),EP=__name(e=>e instanceof Error?e.message:"Unknown error","formatErrorMessage"),CP=__name(e=>["",SP("User Information"),wP("Name",e.name),wP("Email",e.email),wP("Username",e.userName)],"buildUserOutput"),vP=__name(e=>["",SP("Organization"),wP("Name",e.name),wP("Login",e.login)],"buildOrgOutput"),TP=__name(e=>{e.forEach(e=>console.log(e))},"printLines"),kP=__name((e,t)=>{TP(CP(e)),t&&TP(vP(t)),console.log("")},"displayUserInfo"),_P=__name(e=>null!==e&&e.length>0,"validateApiKey"),PP=__name(e=>e.success&&null!==e.user,"validateUserData");async function whoamiAction(){const e=Ie("Fetching user information...").start();try{const t=await getAuthKey();_P(t)||(e.fail(bP('Not authenticated. Please login using "cmd auth login"')),process.exit(1));const n=await getAuthenticatedEntity();PP(n)||(e.fail(bP("Failed to fetch user info")),process.exit(1)),e.succeed("User information loaded"),kP(n.user,n.org)}catch(t){e.fail(bP(`Error: ${EP(t)}`)),process.exit(1)}}__name(whoamiAction,"whoamiAction");var AP=new Ae("whoami").description("Display current user information").allowUnknownOption().allowExcessArguments().action(whoamiAction);handleUnhandledErrors(),setupTelemetry(),await preRun();var xP=createProgram();xP.action(interactiveModeAction),xP.addCommand(W_),xP.addCommand(Q_),xP.addCommand(AP),xP.addCommand(yP),xP.addCommand(U_),xP.addCommand(createTasteCommand()),xP.addCommand(createMcpCommand()),xP.addCommand(G_),xP.addCommand(ps),xP.addCommand(bs),xP.addCommand(As),setupCommanderHooks(xP),xP.parse();
|
|
253
|
+
This is an unexpected error. Please file a bug report at https://github.com/CommandCodeAI/command-code/issues/new`,error:e,skipTelemetry:!0,exit:!1}),shutdownTelemetry().finally(()=>{process.exit(1)})})}Vr(),__name(handleUnhandledErrors,"handleUnhandledErrors"),Nt(),Nt(),Ot(),Qs(),Nt(),Ot();var OC="\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n░░░░░███████░███████░███████████░███████████░███████░████████░░░░████░░░░░\n░░░░░███░███░██░░███░███░███░███░███░███░███░███░███░███░░███░███████░░░░░\n░░░░░███░░░░░██░░███░███░███░███░███░███░███░███████░███░░███░███░███░░░░░\n░░░░░███░███░██░░███░███░███░███░███░███░███░███████░███░░███░███░███░░░░░\n░░░░░███████░███████░███░███░███░███░███░███░███░███░███░░███░███████░░░░░\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n",DC="\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n░░░███████░███████████░░░░████░░░\n░░░███░███░███░███░███░███████░░░\n░░░███░░░░░███░███░███░███░███░░░\n░░░███░███░███░███░███░███░███░░░\n░░░███████░███░███░███░███████░░░\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n";function getMaxLineWidth(e){return Math.max(...e.split("\n").map(e=>e.length))}__name(getMaxLineWidth,"getMaxLineWidth");var qC=getMaxLineWidth(OC),FC=getMaxLineWidth(DC),jC=qC+1,zC=FC+1;function getTerminalWidth(){return process.stdout.columns||80}__name(getTerminalWidth,"getTerminalWidth");var BC=__name(e=>{const t=e??getTerminalWidth();return t>=jC?OC:t>=zC?DC:UC},"getResponsiveCommandLogo"),UC="⌘ CMD\n";rr();var WC=__name(e=>{const t=e.trim().toLowerCase();return""===t||"y"===t||"yes"===t},"isAffirmative"),QC=__name(e=>{const t=__name(e=>({r:parseInt(e.slice(1,3),16),g:parseInt(e.slice(3,5),16),b:parseInt(e.slice(5,7),16)}),"hexToRgb"),n=t(Zn.START),r=t(Zn.END);return e.split("\n").map(e=>0===e.length?e:e.split("").map((t,s)=>{const o=e.length>1?s/(e.length-1):0,i=Math.round(n.r+(r.r-n.r)*o),a=Math.round(n.g+(r.g-n.g)*o),l=Math.round(n.b+(r.b-n.b)*o);return Be.rgb(i,a,l)(t)}).join("")).join("\n")},"applyViceGradient"),GC=__name(e=>{console.log(QC(BC())),console.log(""),console.log(`${be.warning} Authentication required to use Command Code.`),console.log("")},"showUnauthBanner"),HC=__name(async e=>{const t=We.createInterface({input:process.stdin,output:process.stdout});try{const n=await t.question(e);return t.close(),{answer:n,cancelled:!1}}catch{return t.close(),{answer:"",cancelled:!0}}},"promptYesNo"),VC=__name(async()=>{try{return await runLogin(),!!await getAuthKey()||(console.log(""),console.log(`${be.cross} Authentication failed. Please try again with: cmd login`),!1)}catch{return!1}},"attemptLogin"),KC=__name(()=>{console.log(""),console.log(`${be.info} You can authenticate later by running: cmd login`)},"showDeferredMessage"),YC=__name(()=>{console.log(""),console.log(`${be.info} Authentication cancelled. You can authenticate later with: cmd login`)},"showCancelledMessage");async function checkAuthAndPromptLogin(){try{if(await getAuthKey())return!0;GC(Mt());const{answer:e,cancelled:t}=await HC(`Would you like to sign in now? ${Be.dim("(y/n)")}: `);return t?(YC(),!1):WC(e)?(console.log(""),VC()):(KC(),!1)}catch(e){return console.error("Error checking authentication:",e),!1}}function getShellPathAndName(){const e=process.env.SHELL||"/bin/bash",t=e.split("/").pop()?.toLowerCase()||"bash";return{path:e,name:t}}function getShellType(e){return e.includes("bash")?"bash":e.includes("zsh")?"zsh":e.includes("fish")?"fish":"unknown"}function detectUserShell(){const{path:e,name:t}=getShellPathAndName();return"win32"===process.platform?{type:"unknown",path:e}:{type:getShellType(t),path:e}}__name(checkAuthAndPromptLogin,"checkAuthAndPromptLogin"),Nt(),Nt(),Nt(),Nt(),jr(),Nt(),__name(getShellPathAndName,"getShellPathAndName"),__name(getShellType,"getShellType"),__name(detectUserShell,"detectUserShell");var JC=["no job control","cannot set terminal process group"],XC=null;function getShellInfo(){return XC||(XC=detectUserShell()),XC}__name(getShellInfo,"getShellInfo");var ZC=__name(async(e,t={})=>{const{timeout:n=3e4,cwd:r=process.cwd(),env:s=process.env}=t;return new Promise(t=>{let o=!1;const i=__name(e=>{o||(o=!0,t(e))},"doResolve"),a=getShellInfo(),l="bash"===a.type||"zsh"===a.type,u=l?a.path:"/bin/bash",d=N(u,l?["-i","-c",e]:["-c",e],{cwd:r,env:{...s},stdio:["pipe","pipe","pipe"],detached:"win32"!==process.platform});d.stdin?.end();let m="",p="",g=null;n>0&&(g=setTimeout(()=>{if("win32"!==process.platform&&d.pid)try{process.kill(-d.pid,"SIGTERM")}catch{}d.kill("SIGTERM"),i({stdout:m,stderr:p+(p?"\n":"")+"[Command timed out]",exitCode:124,command:e})},n)),d.stdout?.on("data",t=>{try{const n=t.toString();if(m.length+n.length>Mr){if("win32"!==process.platform&&d.pid)try{process.kill(-d.pid,"SIGTERM")}catch{}return d.kill("SIGTERM"),void i({stdout:m,stderr:"Output too large (max 25,000 tokens allowed). Try limiting command output or redirecting to a file.",exitCode:1,command:e})}m+=n}catch(e){p+=`\n[Error processing stdout: ${e instanceof Error?e.message:"Unknown error"}]`,d.kill("SIGTERM")}}),d.stderr?.on("data",e=>{try{const t=e.toString();if(p.length+t.length>Or)return void(p+="\n[Error output truncated: too large]");p+=t}catch(e){p+=`\n[Error processing stderr: ${e instanceof Error?e.message:"Unknown error"}]`}}),d.on("close",t=>{g&&clearTimeout(g);const n=l?p.split("\n").filter(e=>!JC.some(t=>e.includes(t))).join("\n"):p;i({stdout:m.trim(),stderr:n.trim(),exitCode:t??0,command:e})}),d.on("error",t=>{g&&clearTimeout(g),i({stdout:m,stderr:p+`\n[Error: ${t.message}]`,exitCode:1,command:e})})})},"executeBashCommand"),ev=__name(e=>{let t="";return e.stdout&&(t+=e.stdout),e.stderr&&(t&&(t+="\n"),t+=e.stderr),0===e.exitCode||e.stderr||(t&&(t+="\n"),t+=`[Process exited with code ${e.exitCode}]`),t||"(No output)"},"formatBashOutput");Jo();var tv=__name(()=>{const[e,t]=W({isExecuting:!1,currentCommand:null});return{executeBash:V(async(e,n,r)=>{t({isExecuting:!0,currentCommand:e});try{const t=await ZC(e,{timeout:3e4,cwd:process.cwd()}),s=ev(t);n(t=>{const n=[...t];for(let t=n.length-1;t>=0;t--){const r=n[t];if("bash"===r.role&&"command"in r&&r.command===e&&!r.output){n[t]=Fo(r,s);break}}return n}),r()}catch(t){const s=t instanceof Error?t.message:"Unknown error occurred";n(t=>{const n=[...t];for(let t=n.length-1;t>=0;t--){const r=n[t];if("bash"===r.role&&"command"in r&&r.command===e&&!r.output){n[t]=Fo(r,`Error: ${s}`);break}}return n}),r()}finally{t({isExecuting:!1,currentCommand:null})}},[]),executionState:e}},"useBashExecution");function useUiOverlays(){const[e,t]=W(!1),[n,r]=W(!1),[s,o]=W(!1),[i,a]=W(!1),[l,u]=W(!1),[d,m]=W(!1),[p,g]=W(!1),[h,f]=W(!1),[y,w]=W(!1),[S,b]=W(!1),[E,C]=W(!1),[v,T]=W(!1),[k,_]=W(!1),[P,A]=W(0),[x,I]=W("off");return{showFileList:e,setShowFileList:t,showAgentsConfig:n,setShowAgentsConfig:r,showTasteConfig:s,setShowTasteConfig:o,showSkillsConfig:i,setShowSkillsConfig:a,showProviderSelector:l,setShowProviderSelector:u,showModelSelector:d,setShowModelSelector:m,showMemorySelector:p,setShowMemorySelector:g,showMcpManager:h,setShowMcpManager:f,showLearningFeed:y,setShowLearningFeed:w,showSessionSelector:S,setShowSessionSelector:b,showAddDirModal:E,setShowAddDirModal:C,showRewindSelector:v,setShowRewindSelector:T,showLoginOverlay:k,setShowLoginOverlay:_,staticKey:P,setStaticKey:A,transcriptMode:x,setTranscriptMode:I,expandedToolOutput:"off"!==x}}function useFeed(){const[e,t]=W([]),[n,r]=W([]),[s,o]=W([]),[i,a]=W(!1),l=Q([]);return G(()=>{l.current=s},[s]),{feed:e,setFeed:t,liveAgents:n,setLiveAgents:r,queuedMessages:s,setQueuedMessages:o,isCmdCodeBusy:i,setIsCmdCodeBusy:a,queuedMessagesRef:l}}function useSession(){const[e,t]=W(crypto.randomUUID()),[n,r]=W(!1);return{sessionId:e,setSessionId:t,sessionLoaded:n,setSessionLoaded:r,sessionLoadIdRef:Q(null)}}function useStatus(e){const[t,n]=W("Ready..."),r=Q(!1),[s,o]=W(""),i=Q(null),[a,l]=W(null),u=Q(a),[d,m]=W(null),[p,g]=W(!1),[h,f]=W(""),[y,w]=W(null),[S,b]=W(0),[E,C]=W(null),[v,T]=W(!1),[k,_]=W(e??null);G(()=>{u.current=a},[a]),G(()=>{if(k){const e=setTimeout(()=>{_(null)},3e4);return()=>clearTimeout(e)}},[k]);const P=__name(e=>{i.current&&clearTimeout(i.current),o(e),i.current=setTimeout(()=>{o(""),i.current=null},5e3)},"showHintMessage");return{status:t,setStatus:n,pinnedStatusRef:r,hintMessage:s,setHintMessage:o,hintTimerRef:i,shareInfo:a,setShareInfo:l,shareInfoRef:u,billingLink:d,setBillingLink:m,showShareNotification:p,setShowShareNotification:g,unshareNotificationMessage:h,setUnshareNotificationMessage:f,retryAttempt:y,setRetryAttempt:w,interactionTokens:S,setInteractionTokens:b,contextUsage:E,setContextUsage:C,tasteLearningEnabled:v,setTasteLearningEnabled:T,updateStatus:k,setUpdateStatus:_,showHintMessage:P}}function useAuth(){const[e,t]=W(null),[n,r]=W(getConfiguredModel()),[s,o]=W(!1),[i,a]=W(null),[l,u]=W(!1);return{currentProvider:e,setCurrentProvider:t,currentModel:n,setCurrentModel:r,isOAuthMode:s,setIsOAuthMode:o,authComponentInfo:i,setAuthComponentInfo:a,showProviderNotification:l,setShowProviderNotification:u,providerNotificationTimer:Q(null),modelNotificationTimer:Q(null)}}Nt(),__name(useUiOverlays,"useUiOverlays"),Nt(),__name(useFeed,"useFeed"),Nt(),__name(useSession,"useSession"),Nt(),__name(useStatus,"useStatus"),Nt(),nr(),__name(useAuth,"useAuth"),Nt(),Nt(),Nt(),Ot();var nv=class extends Re{static{__name(this,"PermissionsService")}config;configPath;projectRoot;constructor(e,n){super(),this.projectRoot=e,this.configPath=n||t.join(e,".commandcode","settings.local.json"),this.config=this.getDefaultConfig(),this.loadConfig()}getDefaultConfig(){return{enabled:!0,defaultScope:"session",autoApprove:{create:!1,edit:!1,delete:!1,execute:!1,shellCommands:!1},trustedPaths:[],trustedCommands:[],sessionPermissions:new Map,projectPermissions:new Map,sessionShellPermissions:new Map,projectShellPermissions:new Map}}async loadConfig(){try{const e=await L.readFile(this.configPath,"utf-8"),t=JSON.parse(e);t.permissions&&("acceptEdits"===t.permissions.defaultMode&&(this.config.autoApprove.create=!0,this.config.autoApprove.edit=!0,this.config.autoApprove.delete=!0,this.config.autoApprove.execute=!0),t.permissions.autoApprove&&(void 0!==t.permissions.autoApprove.create&&(this.config.autoApprove.create=t.permissions.autoApprove.create),void 0!==t.permissions.autoApprove.update&&(this.config.autoApprove.edit=t.permissions.autoApprove.update),void 0!==t.permissions.autoApprove.delete&&(this.config.autoApprove.delete=t.permissions.autoApprove.delete)),t.permissions.allow&&t.permissions.allow.forEach(e=>{if(e.startsWith("Bash(")&&e.endsWith(")")){const t=e.slice(5,-1);this.config.trustedCommands.push(t)}}))}catch(e){}}async requestPermission(e){if(!this.config.enabled)return{allowed:!0};const t=e.action;return this.config.autoApprove[e.action]||this.isTrustedPath(e.filePath)?{allowed:!0}:this.config.sessionPermissions.has(t)?{allowed:this.config.sessionPermissions.get(t)||!1,scope:"session"}:new Promise(t=>{this.emit("permission-request",e,n=>{this.handleUserChoice(e,n).then(t)})})}async handleUserChoice(e,t){const n=e.action,r="no"!==t.value;if(r&&t.scope)switch(t.scope){case"session":this.config.sessionPermissions.set(n,!0);break;case"project":await this.createCommandCodeSettings(),this.config.autoApprove.create=!0,this.config.autoApprove.edit=!0,this.config.autoApprove.delete=!0,this.config.autoApprove.execute=!0}return{allowed:r,scope:t.scope,dontAskAgain:"yes-project"===t.value}}getFileKey(e){const n=t.relative(this.projectRoot,e.filePath);return`${e.action}:${n}`}isTrustedPath(e){const n=t.relative(this.projectRoot,e);return this.config.trustedPaths.some(t=>n.startsWith(t)||e.startsWith(t))}async requestShellPermission(e){if(!this.config.enabled)return{allowed:!0};const t=this.getCommandKey(e);return this.config.autoApprove.shellCommands||this.isTrustedCommand(e.command)?{allowed:!0}:this.config.projectShellPermissions.has(t)?{allowed:this.config.projectShellPermissions.get(t)||!1,scope:"project"}:this.config.sessionShellPermissions.has(t)?{allowed:this.config.sessionShellPermissions.get(t)||!1,scope:"session"}:new Promise(t=>{this.emit("shell-permission-request",e,n=>{this.handleShellUserChoice(e,n).then(t)})})}async handleShellUserChoice(e,t){const n=this.getCommandKey(e),r="no"!==t.value;if(r&&t.scope)switch(t.scope){case"session":this.config.sessionShellPermissions.set(n,!0);break;case"project":await this.addCommandToSettings(e.command),this.config.projectShellPermissions.set(n,!0)}return{allowed:r,scope:t.scope,dontAskAgain:"yes-project"===t.value}}getCommandKey(e){return`${e.command.split(" ")[0]}:${e.args?Array.isArray(e.args)?e.args.join(" "):e.args:""}`.trim()}isTrustedCommand(e){return!!["ls","ls -la","ls -l","ls -R","pwd","grep","tree","find","stat","file","dirname","basename","grep","git status","git log","git diff","git branch"].some(t=>e===t||!!e.startsWith(t+" "))||this.config.trustedCommands.some(t=>{if(t===e)return!0;if(t.endsWith(":*")){const n=t.slice(0,-2);return e===n||e.startsWith(n+" ")}return e.startsWith(t)})}clearSessionPermissions(){this.config.sessionPermissions.clear(),this.config.sessionShellPermissions.clear()}clearProjectPermissions(){this.config.projectPermissions.clear(),this.config.projectShellPermissions.clear()}setAutoApprove(e,t){this.config.autoApprove[e]=t}addTrustedPath(e){this.config.trustedPaths.includes(e)||this.config.trustedPaths.push(e)}removeTrustedPath(e){const t=this.config.trustedPaths.indexOf(e);t>-1&&this.config.trustedPaths.splice(t,1)}addTrustedCommand(e){this.config.trustedCommands.includes(e)||this.config.trustedCommands.push(e)}removeTrustedCommand(e){const t=this.config.trustedCommands.indexOf(e);t>-1&&this.config.trustedCommands.splice(t,1)}setEnabled(e){this.config.enabled=e}getConfig(){return{...this.config}}async createCommandCodeSettings(){const e=t.join(this.projectRoot,".commandcode"),n=t.join(e,"settings.local.json");try{await L.mkdir(e,{recursive:!0});let t={permissions:{allow:[],deny:[],defaultMode:"acceptEdits"}};try{const e=await L.readFile(n,"utf-8"),r=JSON.parse(e);r.permissions&&r.permissions.allow&&(t.permissions.allow=[...new Set([...r.permissions.allow,...t.permissions.allow])]),r.permissions&&r.permissions.deny&&(t.permissions.deny=r.permissions.deny)}catch(e){}await L.writeFile(n,JSON.stringify(t,null,2),"utf-8")}catch(e){console.error("Failed to create .commandcode settings:",e)}}async addCommandToSettings(e){const n=t.join(this.projectRoot,".commandcode"),r=t.join(n,"settings.local.json"),s=`Bash(${e.split(" ")[0]}:*)`;try{let e;await L.mkdir(n,{recursive:!0});try{const t=await L.readFile(r,"utf-8");e=JSON.parse(t)}catch(t){e={permissions:{allow:[],deny:[],defaultMode:"ask"}}}e.permissions||(e.permissions={allow:[],deny:[],defaultMode:"ask"}),e.permissions.allow||(e.permissions.allow=[]),e.permissions.allow.includes(s)||e.permissions.allow.push(s),await L.writeFile(r,JSON.stringify(e,null,2),"utf-8")}catch(e){console.error("Failed to add command to .commandcode settings:",e)}}},rv=__name((e={})=>{const[t,n]=W(null),[r,s]=W(null),[o,i]=W(!1);return G(()=>{const t=e.projectRoot||process.cwd(),r=new nv(t);return r.on("permission-request",(t,n)=>{s(t),i(!0),e.onPermissionRequest&&e.onPermissionRequest(t),r._pendingCallback=n}),r.on("shell-permission-request",(t,n)=>{s(t),i(!0),e.onShellPermissionRequest&&e.onShellPermissionRequest(t),r._pendingShellCallback=n}),n(r),()=>{r.removeAllListeners()}},[e.projectRoot]),{requestPermission:V(async n=>{if(!t)return{allowed:!0};const r=await t.requestPermission(n);return e.onPermissionResponse&&e.onPermissionResponse(r),r},[t,e.onPermissionResponse]),requestShellPermission:V(async n=>{if(!t)return{allowed:!0};const r=await t.requestShellPermission(n);return e.onPermissionResponse&&e.onPermissionResponse(r),r},[t,e.onPermissionResponse]),respondToPrompt:V(e=>{if(t)if(t._pendingShellCallback){const n=t._pendingShellCallback;t._pendingShellCallback=null,n(e),s(null),i(!1)}else if(t._pendingCallback){const n=t._pendingCallback;t._pendingCallback=null,n(e),s(null),i(!1)}},[t]),clearSessionPermissions:V(()=>{t?.clearSessionPermissions()},[t]),clearProjectPermissions:V(()=>{t?.clearProjectPermissions()},[t]),setAutoApprove:V((e,n)=>{t?.setAutoApprove(e,n)},[t]),setEnabled:V(e=>{t?.setEnabled(e)},[t]),currentRequest:r,isPrompting:o,service:t}},"usePermissions");function applyAutoAcceptMode(e){const{enabled:t,service:n}=e,r="auto-accept"===("boolean"==typeof t?t?"auto-accept":"standard":t),s=["create","edit","delete","execute","shellCommands"];for(const e of s)n.setAutoApprove(e,r)}function usePermissionMode({initialPermissionMode:e,dangerouslySkipPermissions:t=!1,setPendingPermission:n,setStatus:r,contextEngineRef:s}){const[o,i]=W(()=>e||(t?"auto-accept":"standard")),a=Q(o);G(()=>{a.current=o},[o]);const{requestShellPermission:l,service:u,respondToPrompt:d,clearSessionPermissions:m,setEnabled:p}=rv({projectRoot:process.cwd(),onPermissionRequest:__name(e=>{n({toolName:"edit"===e.action?"edit_file":"create"===e.action?"write_file":"delete"===e.action?"delete_file":"edit_file",params:e,resolve:__name(e=>{},"resolve")}),s.current&&r("Waiting for file edit permission...")},"onPermissionRequest"),onShellPermissionRequest:__name(e=>{n({toolName:"shell_command",params:e,resolve:__name(e=>{},"resolve")}),s.current&&r("Waiting for shell command permission...")},"onShellPermissionRequest"),onPermissionResponse:__name(e=>{e.allowed?r("Permission granted"):r("Permission denied")},"onPermissionResponse")});return G(()=>{u&&applyAutoAcceptMode({enabled:o,service:u})},[o,u]),{permissionMode:o,setPermissionMode:i,permissionModeRef:a,permissionsService:u,respondToPrompt:d,clearSessionPermissions:m}}function usePendingOps(){const[e,t]=W(null),[n,r]=W(null);return{pendingPermission:e,setPendingPermission:t,pendingQuestion:n,setPendingQuestion:r}}function useOnboarding(){const[e,t]=W(!1),[n,r]=W(!1),[s,o]=W(!0),[i,a]=W(!1),[l,u]=W(!1),[d,m]=W(null),[p,g]=W(!1);return{showTrustPrompt:e,setShowTrustPrompt:t,projectTrusted:n,setProjectTrusted:r,checkingProject:s,setCheckingProject:o,showTasteOnboarding:i,setShowTasteOnboarding:a,onboardingComplete:l,setOnboardingComplete:u,tasteOnboardingEntryId:d,setTasteOnboardingEntryId:m,autoLearnTaste:p,setAutoLearnTaste:g,tasteOnboardingCheckedRef:Q(!1)}}function useExit(){const[e,t]=W(!1),[n,r]=W(null),s=Q(null),o=Q(0),i=Q(null),a=V(()=>{s.current=null,r(null),i.current&&(clearTimeout(i.current),i.current=null)},[]);return{shouldExit:e,setShouldExit:t,pendingExitKey:n,setPendingExitKey:r,pendingExitKeyRef:s,lastExitKeyTimeRef:o,exitConfirmationTimeoutRef:i,resetPendingExitKey:a}}function createKillShellPermissionRequest(e){const t=e.port?`port ${e.port}`:`PID ${e.pid}`;return{command:"kill",args:t,description:`Terminate process on ${t}`}}function buildShellPermissionRequest(e,t){const n=e.args,r=Array.isArray(n)?n.join(" "):"string"==typeof n?n:"";return{command:"string"==typeof e.command?e.command:"",args:"string"==typeof n?n:Array.isArray(n)?n.join(" "):void 0,workingDirectory:"string"==typeof e.directory?e.directory:void 0,description:t??`Execute shell command: ${String(e.command??"")} ${r}`}}function getFileAction(e){return e.includes("write")?"create":e.includes("delete")?"delete":"edit"}function buildFilePermissionRequest(e,t){const n="edit_file"===e?t.oldValue:void 0,r="edit_file"===e?t.newValue:void 0;return{action:getFileAction(e),filePath:String(t.filePath??t.file_path??t.path??t.absolutePath??"unknown"),description:"string"==typeof t.description?t.description:`${e} operation`,oldContent:"string"==typeof n?n:void 0,newContent:"string"==typeof r?r:void 0}}function useContextEngine({sessionId:e,sessionLoaded:t,showSessionSelector:n,projectTrusted:r,setFeed:s,setLiveAgents:o,setQueuedMessages:i,queuedMessagesRef:a,setStatus:l,pinnedStatusRef:u,setRetryAttempt:d,setInteractionTokens:m,setContextUsage:p,setCurrentProvider:g,shareInfoRef:h,permissionsService:f,permissionModeRef:y,setPendingQuestion:w,contextEngineRef:S}){const b=V(t=>({onFeedUpdate:__name(e=>{const t=!0===e.metadata?.isAgent,n=e.metadata?.status;if(!t||"running"!==n)return t&&n&&"running"!==n?(o(t=>t.filter(t=>t.id!==e.id)),void s(t=>[...t,e])):void s(t=>[...t,e]);o(t=>{const n=t.findIndex(t=>t.id===e.id);if(-1!==n){const r=[...t];return r[n]=e,r}return[...t,e]})},"onFeedUpdate"),getQueuedMessages:__name(()=>{const e=[...a.current];return a.current=[],i([]),e},"getQueuedMessages"),onInteractionTokenUpdate:__name(e=>{m(e)},"onInteractionTokenUpdate"),onContextUsageUpdate:__name(e=>{p(e)},"onContextUsageUpdate"),onRetryUpdate:__name(e=>{d(e)},"onRetryUpdate"),onProviderChange:__name(e=>{g(e)},"onProviderChange"),onStatusUpdate:__name(e=>{u.current=!0,l(e)},"onStatusUpdate"),onPermissionRequest:__name(async(e,t,n)=>{const r=t??{};if(!f)return!0;if("shell_command"===e){const e=buildShellPermissionRequest(r,n);return(await f.requestShellPermission(e)).allowed}if("kill_shell"===e){const e=createKillShellPermissionRequest(r);return(await f.requestShellPermission(e)).allowed}const s=buildFilePermissionRequest(e,r);return(await f.requestPermission(s)).allowed},"onPermissionRequest"),onQuestionRequest:__name(async e=>new Promise((t,n)=>{w({params:e,resolve:t,reject:n}),l("Waiting for your response...")}),"onQuestionRequest"),getShareInfo:__name(()=>{const n=h.current;return n?{sessionId:t??e,secret:n.secret}:null},"getShareInfo"),getPermissionMode:__name(()=>y.current,"getPermissionMode")}),[f,e]);return G(()=>{S.current||!r||n||t||(S.current=new CC(b(),e))},[e,n,t,r,b,S]),{createContextEngineCallbacks:b}}Nt(),__name(applyAutoAcceptMode,"applyAutoAcceptMode"),__name(usePermissionMode,"usePermissionMode"),Nt(),__name(usePendingOps,"usePendingOps"),Nt(),__name(useOnboarding,"useOnboarding"),Nt(),__name(useExit,"useExit"),Nt(),_C(),__name(createKillShellPermissionRequest,"createKillShellPermissionRequest"),__name(buildShellPermissionRequest,"buildShellPermissionRequest"),__name(getFileAction,"getFileAction"),__name(buildFilePermissionRequest,"buildFilePermissionRequest"),__name(useContextEngine,"useContextEngine"),Nt(),Nt(),Nt(),$n();var sv=class{static{__name(this,"PromptHistoryManager")}buffer=[];filePath;initialized=!1;writeQueue=[];flushTimer=null;writeFailures=0;isFlushing=!1;cleanupPromise=null;constructor(){this.filePath=e.join(h.homedir(),".commandcode","history.jsonl")}async init(){if(!this.initialized){try{const e=(await $.readFile(this.filePath,"utf-8")).trim().split("\n").filter(Boolean).slice(-100);let t=0;this.buffer=e.map(e=>{try{return JSON.parse(e).p}catch{return t++,""}}).filter(Boolean),t>0&&dlog(`[PromptHistory] Skipped ${t} corrupted entries`)}catch(e){e instanceof Error&&"code"in e&&"ENOENT"===e.code||dlog(`[PromptHistory] Failed to load history: ${e instanceof Error?e.message:String(e)}`),this.buffer=[]}this.initialized=!0}}add(e){if(!e||0===e.trim().length)return;const t=e.length>500?e.slice(0,500)+"...":e;this.buffer.push(t),this.buffer.length>500&&(this.buffer=this.buffer.slice(-500)),this.writeQueue.push({p:t,t:Date.now()}),this.scheduleFlush()}getAt(e){if(e<0||e>=this.buffer.length)return;const t=this.buffer.length-1-e;return this.buffer[t]}count(){return this.buffer.length}getAll(){return[...this.buffer]}isInitialized(){return this.initialized}scheduleFlush(){this.flushTimer||(this.flushTimer=setTimeout(async()=>{this.flushTimer=null,await this.flush()},100))}async flush(){if(0===this.writeQueue.length)return;if(this.isFlushing)return void this.scheduleFlush();if(this.writeFailures>=3)return void(this.writeQueue=[]);this.isFlushing=!0;const t=this.writeQueue;this.writeQueue=[];try{const n=e.dirname(this.filePath);await $.mkdir(n,{recursive:!0});const r=t.map(e=>JSON.stringify(e)).join("\n")+"\n";await $.appendFile(this.filePath,r),this.writeFailures=0,await this.rotateIfNeeded()}catch(e){this.writeFailures++;const n=e instanceof Error?e.message:String(e);this.writeFailures<3?(this.writeQueue.unshift(...t),dlog(`[PromptHistory] Write failed, retrying (${this.writeFailures}/3): ${n}`)):dlog(`[PromptHistory] Write disabled after 3 failures: ${n}`)}finally{this.isFlushing=!1}}async rotateIfNeeded(){try{const e=await $.stat(this.filePath);if(e.size<=5242880)return;dlog(`[PromptHistory] File size ${e.size} exceeds threshold, rotating`);const t=(await $.readFile(this.filePath,"utf-8")).trim().split("\n").filter(Boolean),n=t.slice(-100);await $.writeFile(this.filePath,n.join("\n")+"\n"),dlog(`[PromptHistory] Rotated: kept ${n.length} of ${t.length} entries`)}catch(e){dlog(`[PromptHistory] Rotation failed (non-critical): ${e instanceof Error?e.message:String(e)}`)}}async cleanup(){return this.cleanupPromise||(this.cleanupPromise=this.performCleanup().finally(()=>{this.cleanupPromise=null})),this.cleanupPromise}async performCleanup(){this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=null);const e=Date.now();for(;this.isFlushing;){if(Date.now()-e>=5e3){dlog("[PromptHistory] Cleanup timed out waiting for flush after 5000ms");break}await new Promise(e=>setTimeout(e,10))}await this.flush()}};function createHistoryManager(){return new sv}__name(createHistoryManager,"createHistoryManager"),CE(),Zo(),ar(),nr(),Nt(),Ot(),fC();var ov=class{static{__name(this,"TasteManager")}static async initializeProject(){const t=process.cwd(),n=e.join(t,".commandcode","taste");await $.mkdir(n,{recursive:!0});const r=e.join(n,"taste.md");try{await $.access(r);const e=await $.readFile(r,"utf-8"),t=migrateHeader({content:e});t!==e&&await $.writeFile(r,t,"utf-8")}catch{await $.writeFile(r,lC+"\n\n","utf-8")}}static async isInitialized(){const t=process.cwd(),n=e.join(t,".commandcode","taste");try{return await $.access(n),!0}catch{return!1}}};mo(),nr(),PC(),Nt(),_C(),Jo(),PC(),Nt(),Ot(),Jl(),bE(),ts();var{setText:iv}=Qe;async function loadShareInfo({contextEngineRef:e,setShareInfo:t}){const n=e.current?.getSessionManager();if(n){const e=await n.loadShareInfo();e&&t({url:e.url,secret:e.secret})}}async function handleShareCommand({sessionId:e,shareInfo:t,setShareInfo:n,setStatus:r,setShowShareNotification:s,contextEngineRef:o}){if(e){if(t)return await iv(t.url),r(""),s(!0),void setTimeout(()=>{s(!1)},3e3);try{r("Creating share link...");const t=o.current?.getMessages()||[],i=$l.sanitizeMessages(t,global.COMMAND_CODE_CWD||process.cwd()),a=new Vb({baseUrl:getApiBaseUrl()}),l=await a.post({endpoint:St.ALPHA.SHARE.CREATE,body:{sessionId:e,messages:i}});n({url:l.url,secret:l.secret});const u=o.current?.getSessionManager();u&&await u.saveShareInfo({url:l.url,secret:l.secret}),await iv(l.url),r(""),s(!0),setTimeout(()=>{s(!1)},5e3)}catch(e){r(`Failed to create share: ${e instanceof Error?e.message:"Unknown error"}`)}}else r("No active session to share")}async function handleUnshareCommand({sessionId:e,shareInfo:t,setShareInfo:n,setStatus:r,setUnshareNotificationMessage:s,contextEngineRef:o}){if(e){if(!t)return s("NOT SHARED: Session is not currently shared"),void setTimeout(()=>s(""),5e3);try{r("Removing share link...");const i=new Vb({baseUrl:getApiBaseUrl()});await i.delete({endpoint:St.ALPHA.SHARE.DELETE,body:{sessionId:e,secret:t.secret}});const a=o.current?.getSessionManager();a&&await a.deleteShareInfo(),s("UNSHARED: Sharing has stopped"),r(""),n(null),setTimeout(()=>{s("")},5e3)}catch(e){const t=`Failed to unshare: ${e instanceof Error?e.message:"Unknown error"}`;r(t),setTimeout(()=>r(""),5e3)}}else r("No active session to unshare")}async function handleSelectSession({selectedSessionId:e,sessionLoadIdRef:t,contextEngineRef:n,setFeed:r,setLiveAgents:s,setSessionId:o,setShowSessionSelector:i,setSessionLoaded:a,setPermissionMode:l,setStaticKey:u,setShareInfo:d,createContextEngineCallbacks:m}){const p=crypto.randomUUID();t.current=p;try{r([]),s([]),n.current=null,l("standard"),o(e),i(!1),a(!0),n.current=new CC(m(e),e);const{feedEntries:g,corruptedLines:h,totalLines:f}=await n.current.loadSession(e);if(t.current!==p)return;await loadShareInfo({contextEngineRef:n,setShareInfo:d});const y=[];if(0===g.length&&f>0&&y.push(Lo(`Session could not be loaded. ${f} lines could not be parsed.`)),0===g.length&&0===f&&y.push(xo("Session loaded but contains no messages.")),g.length>0&&(h>0&&y.push(xo(`Warning: ${h} message(s) could not be loaded.`)),y.push(...g)),t.current!==p)return;r(y),kC(),u(e=>e+1)}catch(e){if(t.current!==p)return;console.error("Failed to load session:",e);const n=e instanceof Error?e.message:"Unknown error";r([Lo(`Failed to load session: ${n}. Starting fresh session.`)]),i(!1),a(!1),o(crypto.randomUUID())}}async function handleNewSession({contextEngineRef:e,setFeed:t,setLiveAgents:n,setSessionId:r,setShowSessionSelector:s,setSessionLoaded:o,setPermissionMode:i}){t([]),n([]),e.current=null,i("standard"),r(crypto.randomUUID()),s(!1),o(!1)}function useStartup({resume:e,continueLatest:t,trust:n,initialPrompt:r,stdout:s,feedState:o,sessionState:i,statusState:a,authState:l,onboarding:u,uiOverlays:d,permissionState:m,contextEngineRef:p,isSubmittingRef:g,initialPromptSubmittedRef:h,historyManagerRef:f,executeBash:y,createContextEngineCallbacks:w,setInput:S}){const b=V(async()=>{try{const e=await isTasteLearningEnabled();a.setTasteLearningEnabled(e),e&&await ov.initializeProject()}catch{}},[a.setTasteLearningEnabled]),E=V(async()=>{const e=await getConfiguredProvider();l.setCurrentProvider(e);const t=await isOAuthEnforced();l.setIsOAuthMode(t)},[l.setCurrentProvider,l.setIsOAuthMode]),C=V(()=>{const e=getMcpConnectionManager();e.isInitialized||e.initialize().catch(()=>{})},[]),v=V(e=>{handleSelectSession({selectedSessionId:e,sessionLoadIdRef:i.sessionLoadIdRef,contextEngineRef:p,setFeed:o.setFeed,setLiveAgents:o.setLiveAgents,setSessionId:i.setSessionId,setShowSessionSelector:d.setShowSessionSelector,setSessionLoaded:i.setSessionLoaded,setPermissionMode:m.setPermissionMode,setStaticKey:d.setStaticKey,setShareInfo:a.setShareInfo,createContextEngineCallbacks:w})},[i,o,d,m,a,p,w]),T=V(async()=>{if(t){const e=await Yb.listSessions();return void(e.length>0&&v(e[0].id))}e&&d.setShowSessionSelector(!0)},[t,e,v,d]);G(()=>{(async()=>{await Yb.isProjectInitialized()?(u.setProjectTrusted(!0),u.setCheckingProject(!1),b(),E(),C(),await T()):n?(await Yb.initializeProject(),u.setProjectTrusted(!0),u.setCheckingProject(!1),b(),E(),C(),await T()):isDirectoryEmpty()?(await Yb.initializeProject(),u.setProjectTrusted(!0),u.setCheckingProject(!1),b(),E(),C()):(u.setShowTrustPrompt(!0),u.setCheckingProject(!1))})()},[e,t,n]),G(()=>{if(!u.projectTrusted)return;const e=createHistoryManager();return f.current=e,e.init(),()=>{e.cleanup()}},[u.projectTrusted]),G(()=>{if(!s)return;const e=__name(()=>{d.showLearningFeed||(kC(),d.setStaticKey(e=>e+1))},"handleResize");return s.on("resize",e),()=>{s.off("resize",e)}},[s]),G(()=>{r&&u.projectTrusted&&!u.checkingProject&&p.current&&!d.showSessionSelector&&!h.current&&(h.current=!0,handleSubmit({role:"user",input:r,feed:o.feed,setFeed:o.setFeed,isCmdCodeBusy:o.isCmdCodeBusy,setIsCmdCodeBusy:o.setIsCmdCodeBusy,setQueuedMessages:o.setQueuedMessages,setStatus:a.setStatus,setInteractionTokens:a.setInteractionTokens,updateStatus:a.updateStatus,setUpdateStatus:a.setUpdateStatus,billingLink:a.billingLink,setBillingLink:a.setBillingLink,contextEngineRef:p,isSubmittingRef:g,setInput:S,setStaticKey:d.setStaticKey,executeBash:y}))},[r,u.projectTrusted,u.checkingProject,d.showSessionSelector]);const k=Q(null);k.current={feed:o.feed,setFeed:o.setFeed,isCmdCodeBusy:o.isCmdCodeBusy,setIsCmdCodeBusy:o.setIsCmdCodeBusy,setQueuedMessages:o.setQueuedMessages,setStatus:a.setStatus,setInteractionTokens:a.setInteractionTokens,updateStatus:a.updateStatus,setUpdateStatus:a.setUpdateStatus,billingLink:a.billingLink,setBillingLink:a.setBillingLink,contextEngineRef:p,isSubmittingRef:g,setInput:S,setStaticKey:d.setStaticKey,executeBash:y,role:"",input:""};const _=V(async({role:e,input:t,images:n,ideContext:r})=>handleSubmit({...k.current,role:e,input:t,images:n,ideContext:r}),[]);return{loadTasteStatus:b,loadCurrentProvider:E,initializeMcpInBackground:C,onSubmit:_}}__name(loadShareInfo,"loadShareInfo"),__name(handleShareCommand,"handleShareCommand"),__name(handleUnshareCommand,"handleUnshareCommand"),__name(handleSelectSession,"handleSelectSession"),__name(handleNewSession,"handleNewSession"),IC(),__name(useStartup,"useStartup"),Nt(),dn(),Jo(),un(),Nt(),Ot(),$n(),Nt();var av={"claude-code":"Claude Code",cursor:"Cursor",aider:"Aider",cline:"Cline",codex:"Codex","pi-agent":"Pi Agent",factory:"Factory"};function getAgentDisplayName(e){return av[e]||e}function getProjectDirName(e){return e.replace(/\//g,"-")}function getGlobalProjectSettingsDir(t=process.cwd()){const n=Ne(t);return e.join(f.homedir(),".commandcode","projects",n)}function getGlobalProjectSettingsPath(t=process.cwd()){return e.join(getGlobalProjectSettingsDir(t),"settings.json")}async function loadGlobalProjectSettings(e=process.cwd()){try{const t=getGlobalProjectSettingsPath(e),n=await $.readFile(t,"utf-8");return JSON.parse(n)}catch{return{}}}async function saveGlobalProjectSettings(t,n=process.cwd()){try{const r=getGlobalProjectSettingsPath(n),s=e.dirname(r);await $.mkdir(s,{recursive:!0}),await $.writeFile(r,JSON.stringify(t,null,2))}catch(e){const t=e instanceof Error?e.message:String(e);dlog("Error saving global project settings:",e),ZE.addEvent({type:"error",message:`Failed to save global project settings: ${t}`})}}async function loadLocalProjectSettings(t=process.cwd()){try{const n=e.join(t,".commandcode","settings.local.json"),r=await $.readFile(n,"utf-8");return JSON.parse(r)}catch{return{}}}async function loadMergedProjectSettings(e=process.cwd()){try{const t=mergeSettings(await loadGlobalProjectSettings(e),await loadLocalProjectSettings(e)),n=t.tasteOnboarding,r=n?.learnedSessions?.["claude-code"]?.length||0;return dlog(`[Config] project settings loaded (taste: ${n?.completed?"complete":n?.skipped?"skipped":"pending"}, learned: ${r} sessions)`),t}catch(e){return dlog("[Settings] error loading",e),{}}}function mergeSettings(e,t){const n={...e};return t.tasteOnboarding&&(n.tasteOnboarding={...e.tasteOnboarding,...t.tasteOnboarding},(e.tasteOnboarding?.learnedSessions||t.tasteOnboarding?.learnedSessions)&&(n.tasteOnboarding.learnedSessions={...e.tasteOnboarding?.learnedSessions,...t.tasteOnboarding?.learnedSessions})),n}__name(getAgentDisplayName,"getAgentDisplayName"),__name(getProjectDirName,"getProjectDirName"),Nt(),$n(),tC(),Ot(),__name(getGlobalProjectSettingsDir,"getGlobalProjectSettingsDir"),__name(getGlobalProjectSettingsPath,"getGlobalProjectSettingsPath"),__name(loadGlobalProjectSettings,"loadGlobalProjectSettings"),__name(saveGlobalProjectSettings,"saveGlobalProjectSettings"),__name(loadLocalProjectSettings,"loadLocalProjectSettings"),__name(loadMergedProjectSettings,"loadMergedProjectSettings"),__name(mergeSettings,"mergeSettings"),Nt(),$n();var lv=e.join(h.homedir(),".codex","sessions");async function readSessionMeta(e){try{const t=_(e,{encoding:"utf8"}),n=Ge.createInterface({input:t,crlfDelay:1/0});for await(const e of n)if(e.trim()){try{const r=JSON.parse(e);if("session_meta"===r.type&&r.payload?.cwd)return n.close(),t.destroy(),{cwd:r.payload.cwd,id:r.payload.id,timestamp:r.payload.timestamp}}catch{}break}return n.close(),t.destroy(),null}catch{return null}}async function findAllSessionFiles(t,n){const r=[];try{await $.access(t)}catch{return dlog("[Codex] sessions directory not found"),[]}try{const s=await $.readdir(t);for(const o of s){if(!/^\d{4}$/.test(o))continue;const s=e.join(t,o);if(!(await $.stat(s)).isDirectory())continue;const i=await $.readdir(s);for(const t of i){if(!/^\d{2}$/.test(t))continue;const i=e.join(s,t);if(!(await $.stat(i)).isDirectory())continue;const a=await $.readdir(i);for(const s of a){if(!/^\d{2}$/.test(s))continue;const a=e.join(i,s);if(!(await $.stat(a)).isDirectory())continue;n?.({phase:"scanning",totalFiles:r.length,processedFiles:0,matchedSessions:0,currentDir:`${o}/${t}/${s}`});const l=(await $.readdir(a)).filter(e=>e.endsWith(".jsonl")&&e.startsWith("rollout-")).map(t=>e.join(a,t));r.push(...l)}}}}catch(e){dlog("[Codex] error scanning sessions",e)}return r}async function processFilesInBatches(e,t,n=10,r){const s=[];for(let o=0;o<e.length;o+=n){const i=e.slice(o,o+n),a=await Promise.all(i.map(t));for(const e of a)null!==e&&s.push(e);r?.(Math.min(o+n,e.length),e.length)}return s}async function findCodexSessions(t,n,r=0){const s=t||process.cwd(),o=[];dlog(`[Codex] scanning for project: ${s}`);const i=await findAllSessionFiles(lv,n);if(0===i.length)return dlog("[Codex] no session files found"),n?.({phase:"complete",totalFiles:0,processedFiles:0,matchedSessions:0}),[];dlog(`[Codex] found ${i.length} session files to scan`),n?.({phase:"reading",totalFiles:i.length,processedFiles:0,matchedSessions:0});let a=0;const l=await processFilesInBatches(i,async t=>{const n=await readSessionMeta(t);if(!n)return null;if(n.cwd===s)try{const r=await $.stat(t),s=e.basename(t,".jsonl");return{id:n.id||s,filePath:t,createdAt:new Date(n.timestamp||r.birthtime),lastModified:r.mtime,messageCount:0,agent:"codex",projectDir:n.cwd}}catch{return null}return null},10,(e,t)=>{a=o.length,n?.({phase:"reading",totalFiles:t,processedFiles:e,matchedSessions:a})});o.push(...l);const u=r>0?o.slice(0,r):o;return dlog(`[Codex] matched ${u.length} sessions for project`),n?.({phase:"complete",totalFiles:i.length,processedFiles:i.length,matchedSessions:u.length}),u.sort((e,t)=>t.lastModified.getTime()-e.lastModified.getTime())}async function findCodexSessionIds(e){return(await findCodexSessions(e)).map(e=>e.id)}async function extractCodexPrompts(e){const t=[];try{const n=(await $.readFile(e,"utf-8")).trim().split("\n");for(const e of n)if(e.trim())try{const n=JSON.parse(e);if("event_msg"===n.type&&"user_message"===n.payload?.type&&n.payload?.message){const e=n.payload.message;"string"==typeof e&&e.trim()&&t.push(e.trim())}}catch{continue}t.length>0&&dlog(`[Codex] extracted ${t.length} prompts from session`)}catch(t){dlog(`[Codex] failed to extract prompts: ${e}`,t)}return t}async function loadProjectSettings(){return loadMergedProjectSettings()}async function saveProjectSettings(e){await saveGlobalProjectSettings(e)}function isOnboardingDone(e){return!0===e?.skipped||!0===e?.completed}function buildAgentSessionsList(e){return Object.entries(e).filter(([e,t])=>t&&t.length>0).map(([e,t])=>({agent:e,sessionIds:t,displayName:getAgentDisplayName(e)}))}async function checkOnboardingConditions(){try{const e=(await loadProjectSettings()).tasteOnboarding,t=e?.learnedSessions||{},n=e?.skippedSessions||{},r={};for(const e of new Set([...Object.keys(t),...Object.keys(n)]))r[e]=[...t[e]||[],...n[e]||[]];const s=await findNewSessions(r),o=(s["claude-code"]?.length||0)+(s.codex?.length||0);return o>0?(dlog(`[Onboarding] found ${o} new sessions to learn from`),{shouldTrigger:!0,reason:"has_sessions",sessionCount:o,hasTasteContent:!0,agentSessions:buildAgentSessionsList(s)}):(isOnboardingDone(e)?dlog(`[Onboarding] ${e?.skipped?"user skipped":"already completed"}, no new sessions`):dlog("[Onboarding] no sessions to learn from, skipping"),{shouldTrigger:!1,reason:"skip",sessionCount:0,hasTasteContent:isOnboardingDone(e),agentSessions:[]})}catch(e){return dlog("[Onboarding] error checking conditions",e),{shouldTrigger:!1,reason:"skip",sessionCount:0,hasTasteContent:!1,agentSessions:[]}}}async function getSessionFilesFromDir(e){try{return(await $.readdir(e)).filter(e=>e.endsWith(".jsonl")&&!e.includes(".checkpoints")).map(e=>e.replace(".jsonl",""))}catch{return[]}}async function findNewSessions(t){const n={},r=t["claude-code"]||[],s=t.codex||[];try{const t=e.join(h.homedir(),".claude","projects");await $.access(t);const s=getProjectDirName(process.cwd()),o=(await $.readdir(t)).filter(e=>e===s);for(const s of o){const o=e.join(t,s);if((await $.stat(o)).isDirectory()){const e=await getSessionFilesFromDir(o);e.length>0&&(n["claude-code"]=e.filter(e=>!r.includes(e)))}}dlog(`[Sessions] claude-code: ${n["claude-code"]?.length||0} new, ${r.length} learned`)}catch{dlog("[Sessions] claude projects dir not found")}try{const e=await findCodexSessionIds();e.length>0&&(n.codex=e.filter(e=>!s.includes(e)));dlog(`[Sessions] codex: ${n.codex?.length||0} new, ${s.length} learned`)}catch{dlog("[Sessions] codex sessions not found")}return n}async function markSessionsAsLearned(e,t){const n=await loadProjectSettings();n.tasteOnboarding||(n.tasteOnboarding={}),n.tasteOnboarding.learnedSessions||(n.tasteOnboarding.learnedSessions={});const r=n.tasteOnboarding.learnedSessions[e]||[];if(n.tasteOnboarding.learnedSessions[e]=Array.from(new Set([...r,...t])),n.tasteOnboarding.skippedSessions?.[e]){const r=new Set(t);n.tasteOnboarding.skippedSessions[e]=n.tasteOnboarding.skippedSessions[e].filter(e=>!r.has(e)),0===n.tasteOnboarding.skippedSessions[e].length&&delete n.tasteOnboarding.skippedSessions[e]}n.tasteOnboarding.lastLearningDate=(new Date).toISOString(),await saveProjectSettings(n)}async function markOnboardingSkipped(){const e=await loadProjectSettings();e.tasteOnboarding||(e.tasteOnboarding={}),e.tasteOnboarding.skipped=!0;try{const t=e.tasteOnboarding.learnedSessions||{},n=await findNewSessions(t);e.tasteOnboarding.skippedSessions||(e.tasteOnboarding.skippedSessions={});for(const[t,r]of Object.entries(n))if(r.length>0){const n=e.tasteOnboarding.skippedSessions[t]||[];e.tasteOnboarding.skippedSessions[t]=Array.from(new Set([...n,...r]))}}catch{dlog("[Onboarding] failed to record skipped sessions, skip flag still set")}await saveProjectSettings(e)}async function markOnboardingCompleted(){const e=await loadProjectSettings();e.tasteOnboarding||(e.tasteOnboarding={}),e.tasteOnboarding.completed=!0,await saveProjectSettings(e)}async function triggerTasteOnboarding({projectTrusted:e,onboardingComplete:t,isOnboardingMode:n,tasteOnboardingCheckedRef:r,setIsOnboardingMode:s}){if(e)if(t)dlog("[Onboarding] skipped - already completed");else if(n)dlog("[Onboarding] skipped - already showing");else if(r.current)dlog("[Onboarding] skipped - already checked this session");else{r.current=!0,dlog("[Onboarding] checking if taste learning should start...");try{const e=await checkOnboardingConditions();e.shouldTrigger?(dlog(`[Onboarding] starting taste learning (${e.reason})`),s(!0)):dlog("[Onboarding] not needed")}catch(e){dlog("[Onboarding] error",e)}}else dlog("[Onboarding] skipped - project not yet trusted")}function useLifecycle({exit:e,feedState:t,exitState:n,statusState:r,authState:s,onboarding:o,uiOverlays:i,skipOnboarding:a}){G(()=>{if(n.shouldExit){r.hintTimerRef.current&&clearTimeout(r.hintTimerRef.current),n.exitConfirmationTimeoutRef.current&&clearTimeout(n.exitConfirmationTimeoutRef.current),s.providerNotificationTimer.current&&clearTimeout(s.providerNotificationTimer.current),s.modelNotificationTimer.current&&clearTimeout(s.modelNotificationTimer.current);try{e()}catch{process.exit(0)}}},[n.shouldExit,e]),G(()=>()=>{r.hintTimerRef.current&&clearTimeout(r.hintTimerRef.current),n.exitConfirmationTimeoutRef.current&&clearTimeout(n.exitConfirmationTimeoutRef.current),s.providerNotificationTimer.current&&clearTimeout(s.providerNotificationTimer.current),s.modelNotificationTimer.current&&clearTimeout(s.modelNotificationTimer.current)},[]),G(()=>{(async()=>{if("anthropic"===s.currentProvider&&s.isOAuthMode)try{await on.getValidAccessToken()||r.setStatus("OAuth setup required. Use /provider to select Claude and authenticate.")}catch{r.setStatus("OAuth setup required. Use /provider to select Claude and authenticate.")}})()},[s.currentProvider,s.isOAuthMode]),G(()=>{if(!t.isCmdCodeBusy)return void(r.pinnedStatusRef.current=!1);if(null!==r.retryAttempt)return;const e=setInterval(()=>{r.pinnedStatusRef.current||r.setStatus(Wo())},7e3);return()=>clearInterval(e)},[t.isCmdCodeBusy,r.retryAttempt]),G(()=>{a||triggerTasteOnboarding({projectTrusted:o.projectTrusted,onboardingComplete:o.onboardingComplete,isOnboardingMode:o.showTasteOnboarding,tasteOnboardingCheckedRef:o.tasteOnboardingCheckedRef,setIsOnboardingMode:o.setShowTasteOnboarding})},[o.projectTrusted,o.onboardingComplete,o.showTasteOnboarding,a]),G(()=>{if(o.showTasteOnboarding&&!o.tasteOnboardingEntryId){const e=Mo();o.setTasteOnboardingEntryId(e.id),t.setFeed(t=>[...t,e])}!o.showTasteOnboarding&&o.tasteOnboardingEntryId&&(t.setFeed(e=>e.filter(e=>e.id!==o.tasteOnboardingEntryId)),o.setTasteOnboardingEntryId(null))},[o.showTasteOnboarding,o.tasteOnboardingEntryId])}__name(readSessionMeta,"readSessionMeta"),__name(findAllSessionFiles,"findAllSessionFiles"),__name(processFilesInBatches,"processFilesInBatches"),__name(findCodexSessions,"findCodexSessions"),__name(findCodexSessionIds,"findCodexSessionIds"),__name(extractCodexPrompts,"extractCodexPrompts"),__name(loadProjectSettings,"loadProjectSettings"),__name(saveProjectSettings,"saveProjectSettings"),__name(isOnboardingDone,"isOnboardingDone"),__name(buildAgentSessionsList,"buildAgentSessionsList"),__name(checkOnboardingConditions,"checkOnboardingConditions"),__name(getSessionFilesFromDir,"getSessionFilesFromDir"),__name(findNewSessions,"findNewSessions"),__name(markSessionsAsLearned,"markSessionsAsLearned"),__name(markOnboardingSkipped,"markOnboardingSkipped"),__name(markOnboardingCompleted,"markOnboardingCompleted"),__name(triggerTasteOnboarding,"triggerTasteOnboarding"),__name(useLifecycle,"useLifecycle"),Nt(),PC(),CE(),Jo(),Nt(),ln(),ar(),PC(),Ot(),Nt();var cv=" ";function useKeyboard({showTasteConfig:e,showSkillsConfig:t,showProviderSelector:n,showModelSelector:r,showMemorySelector:s,showMcpManager:o,showLearningFeed:i,showRewindSelector:a,showLoginOverlay:l,showAddDirModal:u,authComponentInfo:d,setShowLearningFeed:m,setShowModelSelector:p,setStaticKey:g,transcriptMode:h,setTranscriptMode:f,isCmdCodeBusy:y,liveAgents:w,queuedMessagesRef:S,setInput:b,setQueuedMessages:E,setFeed:C,setLiveAgents:v,setIsCmdCodeBusy:T,setRetryAttempt:k,setStatus:_,pendingExitKey:P,setPendingExitKey:A,pendingExitKeyRef:x,lastExitKeyTimeRef:I,exitConfirmationTimeoutRef:N,resetPendingExitKey:R,pendingPermission:$,setPendingPermission:L,pendingQuestion:M,setPendingQuestion:O,setShouldExit:D,contextEngineRef:q,handleToggleAutoAccept:F,handleDoubleEscapeEmpty:j,respondToPrompt:z,createErrorEntry:B}){const U=__name(()=>{if(!q.current)return;q.current.interrupt(!0);const e=w.length>0;if(T(!1),k(null),v([]),_("Interrupted by user"),!e){const e=B("Interrupted by user");C(t=>[...t,e])}if(S.current.length>0){const e=S.current.join("\n");b(t=>t?e+"\n"+t:e),E([]),S.current=[]}},"handleInterrupt");Z((w,S)=>{if(S.shift&&S.tab||"[Z"===w)F();else if(e||t||n||r||s||o||d||i||a||l||u)P&&R();else{if(""===w||S.ctrl&&"c"===w){if(y&&q.current)return void U();const e=Date.now(),t=e-I.current;return I.current=e,"ctrl-c"===x.current&&t<2e3?(N.current&&(clearTimeout(N.current),N.current=null),void D(!0)):(b(()=>""),x.current="ctrl-c",A("ctrl-c"),N.current&&clearTimeout(N.current),void(N.current=setTimeout(()=>{x.current=null,A(null),N.current=null},2e3)))}if(S.ctrl&&"t"===w)return kC(),m(!i),void g(e=>e+1);if(getIsExpandToolShortcut(S,w))return kC(),f("off"===h?"limited":"off"),void g(e=>e+1);if(S.ctrl&&"e"===w&&"off"!==h)return kC(),f("limited"===h?"full":"limited"),void g(e=>e+1);if(S.meta&&"p"===w||isAltP(w))p(!0);else if(S.escape){if(M)return M.reject(new Error("Question cancelled by user")),O(null),void _("Question cancelled");if($)return z({label:"No, and tell Command Code what to do differently",value:"no",description:"Deny and provide feedback",scope:void 0}),$.resolve(!1),L(null),void _("Permission denied");y&&q.current&&U()}}})}function useHandlers({resume:e,feedState:t,onboarding:n,uiOverlays:r,exitState:s,pendingOps:o,permissionState:i,statusState:a,authState:l,contextEngineRef:u,loadTasteStatus:d,loadCurrentProvider:m,setInput:p}){const g=V(()=>{i.setPermissionMode(e=>{let t="standard";if("standard"===e&&(t="auto-accept"),"auto-accept"===e&&(t="plan"),"auto-accept"===t&&o.pendingPermission){const e={label:"Yes",value:"yes",description:"Allow this action",scope:void 0};i.respondToPrompt(e),o.pendingPermission.resolve(!0),o.setPendingPermission(null)}return"plan"===t&&o.pendingPermission&&(o.pendingPermission.resolve(!1),o.setPendingPermission(null)),t})},[i.setPermissionMode,i.respondToPrompt,o.pendingPermission,o.setPendingPermission]),h=V(()=>{const e=!t.isCmdCodeBusy&&!o.pendingPermission&&!o.pendingQuestion,n=u.current?.hasCheckpoints()??!1;e&&n&&r.setShowRewindSelector(!0)},[t.isCmdCodeBusy,o.pendingPermission,o.pendingQuestion,r.setShowRewindSelector]),f=V(s=>{if(n.setOnboardingComplete(!0),n.setShowTasteOnboarding(!1),n.setAutoLearnTaste(!1),kC(),s?.skipped){const e=xo("",{isTasteSkip:!0});t.setFeed(t=>[...t,e])}r.setStaticKey(e=>e+1),e&&r.setShowSessionSelector(!0)},[e,n,r,t]),y=V(async()=>{try{if(await Yb.initializeProject(),n.setShowTrustPrompt(!1),e)return console.log("No conversations found to resume."),void s.setShouldExit(!0);n.setProjectTrusted(!0),d(),m()}catch(e){console.error("Failed to initialize project:",e),n.setShowTrustPrompt(!1),s.setShouldExit(!0)}},[e,n,s,d,m]),w=V(()=>{s.setShouldExit(!0)},[s.setShouldExit]);return useKeyboard({showTasteConfig:r.showTasteConfig,showSkillsConfig:r.showSkillsConfig,showProviderSelector:r.showProviderSelector,showModelSelector:r.showModelSelector,showMemorySelector:r.showMemorySelector,showMcpManager:r.showMcpManager,showLearningFeed:r.showLearningFeed,showRewindSelector:r.showRewindSelector,showLoginOverlay:r.showLoginOverlay,showAddDirModal:r.showAddDirModal,authComponentInfo:l.authComponentInfo,setShowLearningFeed:r.setShowLearningFeed,setShowModelSelector:r.setShowModelSelector,setStaticKey:r.setStaticKey,transcriptMode:r.transcriptMode,setTranscriptMode:r.setTranscriptMode,isCmdCodeBusy:t.isCmdCodeBusy,liveAgents:t.liveAgents,queuedMessagesRef:t.queuedMessagesRef,setInput:p,setQueuedMessages:t.setQueuedMessages,setFeed:t.setFeed,setLiveAgents:t.setLiveAgents,setIsCmdCodeBusy:t.setIsCmdCodeBusy,setRetryAttempt:a.setRetryAttempt,setStatus:a.setStatus,pendingExitKey:s.pendingExitKey,setPendingExitKey:s.setPendingExitKey,pendingExitKeyRef:s.pendingExitKeyRef,lastExitKeyTimeRef:s.lastExitKeyTimeRef,exitConfirmationTimeoutRef:s.exitConfirmationTimeoutRef,resetPendingExitKey:s.resetPendingExitKey,pendingPermission:o.pendingPermission,setPendingPermission:o.setPendingPermission,pendingQuestion:o.pendingQuestion,setPendingQuestion:o.setPendingQuestion,setShouldExit:s.setShouldExit,contextEngineRef:u,handleToggleAutoAccept:g,handleDoubleEscapeEmpty:h,respondToPrompt:i.respondToPrompt,createErrorEntry:Lo}),{handleToggleAutoAccept:g,handleDoubleEscapeEmpty:h,handleTasteOnboardingComplete:f,handleTrust:y,handleNoTrust:w}}__name(useKeyboard,"useKeyboard"),__name(useHandlers,"useHandlers"),Nt(),Nt(),Ot(),Jo(),ir(),Nt();var uv='You are an expert code reviewer. Do follow these steps:\n\nGather PR context using the GitHub CLI:\n1. When no PR number is given, list open PRs with `gh pr list` and ask which one to review\n2. Fetch PR metadata via `gh pr view <number>`\n3. Retrieve the changeset with `gh pr diff <number>`\n4. One go gather context: Run gh pr view <number> && echo "---DIFF---" && gh pr diff <number>\n5. Analyze the changes and provide a thorough code review that includes:\n\t- Overview of the PR is doing\n\t- Analysis of the code quality and style\n\t- Give specific suggestions for improvement\n\t- Highlight any potential bugs/issues or risks\n\t- Score PR on a scale of 1-5 based on overall table with quality and readiness for merging\nKeep your review concise, less wordy, but thorough.\nFocus on:\n- Correctness of code\n- Following project conventions\n- Performance issues and implications\n- Test coverage\n- Security considerations\n\nBe less wordy. If you make a table, don\'t go over 60pts.\nFormat your review in sections and bullets.';function buildReviewPrompt({prNumber:e}){const t=e.trim();return t?`${uv}\n\nReview PR number: ${t}`:`${uv}\n\nReview PR number: `}function loadCustomCommands(){const e=[],n=t.join(process.cwd(),".commandcode","commands"),r=t.join(f.homedir(),".commandcode","commands");function loadCommandsFromDirectory(n,r,s=""){if(S.existsSync(n))try{const o=S.readdirSync(n,{withFileTypes:!0});for(const i of o){const o=t.join(n,i.name);if(i.isDirectory())loadCommandsFromDirectory(o,r,s?`${s}/${i.name}`:i.name);else if(i.isFile()&&i.name.endsWith(".md")){const n=t.basename(i.name,".md"),a=S.readFileSync(o,"utf-8").trim();e.push({name:n,source:r,content:a,subdirectory:s})}}}catch(e){}}return __name(loadCommandsFromDirectory,"loadCommandsFromDirectory"),loadCommandsFromDirectory(r,"user"),loadCommandsFromDirectory(n,"project"),e}function customCommandsToMenuItems(e){return e.map(e=>{const t=`/${e.name}`;let n;return n=e.subdirectory?"project"===e.source?`(project: ${e.subdirectory})`:`(user: ${e.subdirectory})`:"project"===e.source?"(project)":"(user)",{command:t,description:`${e.content.replace(/[\r\n]+/g," ").replace(/\s+/g," ").trim()} ${n}`}})}function getCustomCommandContent(e){const t=loadCustomCommands(),n=e.startsWith("/")?e.substring(1):e,r=t.find(e=>e.name===n);return r?r.content:null}__name(buildReviewPrompt,"buildReviewPrompt"),Nt(),Nt(),Ot(),Nt(),Ot(),__name(loadCustomCommands,"loadCustomCommands"),__name(customCommandsToMenuItems,"customCommandsToMenuItems"),__name(getCustomCommandContent,"getCustomCommandContent"),ir(),Nt();var dv=["Code","Code - Insiders","VSCodium","Cursor"],mv="Code",pv={key:"shift+enter",command:"workbench.action.terminal.sendSequence",args:{text:"\r"},when:"terminalFocus"},gv=__name(e=>m(e).href,"formatPathForTerminal"),hv=__name(e=>{switch(e){case"darwin":return["Library","Application Support"];case"win32":return["AppData","Roaming"];default:return[".config"]}},"getConfigPathSegments"),fv=__name(({home:t,configSegments:n,variant:r})=>e.join(t,...n,r,"User","keybindings.json"),"buildKeybindingsPath"),yv=__name(({home:t,configSegments:n,variants:r})=>{for(const s of r){const r=fv({home:t,configSegments:n,variant:s});if(w.existsSync(e.dirname(r)))return s}return null},"findExistingVariant"),wv=__name(e=>{if(!e||"object"!=typeof e)return!1;const t=e;return"shift+enter"===t.key&&Sv(t.when)},"isTerminalShiftEnterBinding"),Sv=__name(e=>"string"==typeof e?e.includes("terminalFocus"):!!Array.isArray(e)&&e.some(e=>"string"==typeof e&&e.includes("terminalFocus")),"hasTerminalFocusCondition"),bv=__name(e=>{const t=He(e).trim();return!t||/^\[\s*\]$/.test(t)},"isEmptyKeybindingsContent"),Ev=__name(e=>/,\s*[}\]]/s.test(e),"hasTrailingComma"),Cv=__name(({error:e,content:t})=>{const n=e.message;return Ev(t)&&(n.includes("Expected double-quoted property name")||n.includes("Unexpected token")||n.includes("is not valid JSON"))?"Invalid JSON: trailing comma detected. Remove the comma before the closing bracket.":n.includes("Expected")&&n.includes(",")&&n.includes("or")?"Invalid JSON: missing comma between elements.":n.includes("Unterminated string")||n.includes("Bad string")?"Invalid JSON: unterminated string. Check for missing closing quotes.":"Invalid JSON syntax. Please check the file format."},"formatJsonParseError"),vv=__name(e=>{let t="",n=!1,r=!1;for(let s=0;s<e.length;s++){const o=e[s];if(n)t+=o,r?r=!1:"\\"===o?r=!0:'"'===o&&(n=!1);else if('"'!==o){if(","===o){let t=s+1;for(;t<e.length&&/\s/.test(e[t]);)t++;if("}"===e[t]||"]"===e[t])continue}t+=o}else n=!0,t+=o}return t},"removeTrailingCommas"),Tv=__name(e=>{try{const t=He(e),n=vv(t);return{success:!0,data:JSON.parse(n)}}catch(t){return t instanceof Error?{success:!1,error:Cv({error:t,content:e})}:{success:!1,error:"Unknown parse error"}}},"safeParseJson"),kv=__name(({message:e,keybindingsPath:t})=>({success:!0,message:e,details:gv(t)}),"createSuccessResult"),_v=__name(({message:e,keybindingsPath:t})=>({success:!1,message:e,details:gv(t)}),"createErrorResult"),Pv=__name(()=>{const t=h.homedir(),n=h.platform();if(process.env.VSCODE_PORTABLE)return e.join(process.env.VSCODE_PORTABLE,"user-data","User","keybindings.json");const r=hv(n);if(!r)return fv({home:t,configSegments:[".config"],variant:mv});const s=yv({home:t,configSegments:r,variants:dv});return fv({home:t,configSegments:r,variant:s??mv})},"getVSCodeKeybindingsPath"),Av=__name(e=>{const t={hasCompatible:!1,hasConflicting:!1};for(const n of e)wv(n)&&(n.command===pv.command&&n.args?.text===pv.args.text?t.hasCompatible=!0:(t.hasConflicting=!0,t.conflictingText="string"==typeof n.args?.text?n.args.text:n.command));return t},"checkExistingShiftEnterBindings"),xv=__name(t=>{try{if(!w.existsSync(t)){const n=e.dirname(t);return w.existsSync(n)||w.mkdirSync(n,{recursive:!0}),{rawContent:"",keybindings:[]}}const n=w.readFileSync(t,"utf-8");if(bv(n))return{rawContent:n,keybindings:[]};const r=Tv(n.trim());return r.success?Array.isArray(r.data)?{rawContent:n,keybindings:r.data}:_v({message:"VSCode keybindings.json does not contain an array. Please fix the file format.",keybindingsPath:t}):_v({message:`Failed to parse existing VSCode key bindings: ${r.error}`,keybindingsPath:t})}catch(e){const n=e instanceof Error?e.message:"Unknown error";return _v({message:`Failed to read keybindings file: ${n}`,keybindingsPath:t})}},"readKeybindingsFile"),Iv=__name(({rawContent:e,keybindingsPath:t})=>{const n=JSON.stringify(pv,null,2);if(bv(e))return`[\n${n}\n]\n`;const r=e.lastIndexOf("]");if(-1===r)return _v({message:"VSCode keybindings.json is malformed (missing closing bracket).",keybindingsPath:t});const s=e.lastIndexOf("}",r);return-1===s?_v({message:"VSCode keybindings.json is malformed (missing closing brace).",keybindingsPath:t}):e.substring(0,s+1)+",\n"+n+e.substring(s+1)},"generateNewContent");function setupVSCodeTerminal(){const e=Pv();try{const t=xv(e);if("success"in t)return t;const{rawContent:n,keybindings:r}=t,s=Av(r);if(s.hasConflicting)return _v({message:"Conflicting VSCode terminal Shift+Enter key binding already exists. Please remove the key binding and try again.",keybindingsPath:e});if(s.hasCompatible)return kv({message:"VSCode terminal Shift+Enter key binding already configured.",keybindingsPath:e});const o=Iv({rawContent:n,keybindingsPath:e});return"string"!=typeof o?o:(w.writeFileSync(e,o,"utf-8"),kv({message:"Installed VSCode terminal Shift+Enter key binding",keybindingsPath:e}))}catch(t){return _v({message:`Failed to configure VSCode key binding: ${t instanceof Error?t.message:"Unknown error"}`,keybindingsPath:e})}}function isVSCodeTerminal(){return"vscode"===process.env.TERM_PROGRAM}__name(setupVSCodeTerminal,"setupVSCodeTerminal"),__name(isVSCodeTerminal,"isVSCodeTerminal"),jr(),rr();var Nv=(e=>(e.INIT="/init",e.EXIT="/exit",e.HELP="/help",e.CLEAR="/clear",e.SHARE="/share",e.TASTE="/taste",e.LEARN_TASTE="/learn-taste",e.SKILLS="/skills",e.RESUME="/resume",e.MEMORY="/memory",e.UNSHARE="/unshare",e.PROVIDER="/provider",e.MODEL="/model",e.AGENTS="/agents",e.MCP="/mcp",e.COMPACT="/compact",e.REWIND="/rewind",e.LOGIN="/login",e.LOGOUT="/logout",e.FEEDBACK="/feedback",e.TERMINAL_SETUP="/terminal-setup",e.IDE_SETUP="/ide",e.ADD_DIR="/add-dir",e.REVIEW="/review",e.PR_COMMENTS="/pr-comments",e))(Nv||{}),Rv=new Set(["/exit","/clear","/help","/share","/unshare","/taste","/learn-taste","/skills","/resume","/provider","/model","/memory","/init","/agents","/mcp","/compact","/rewind","/login","/logout","/feedback","/terminal-setup","/ide","/add-dir","/pr-comments"]),$v=[{command:"/add-dir",description:"Add directory to workspace context"},{command:"/agents",description:"Manage agent configurations"},{command:"/clear",description:"Clear the conversation history (reset, new)"},{command:"/compact",description:"Compact the conversation history"},{command:"/exit",description:"Exit Command Code"},{command:"/feedback",description:"Share feedback or report bugs"},{command:"/help",description:"Show available shortcuts"},{command:"/ide",description:"Install extension to fetch IDE context"},{command:"/init",description:"Initialize AGENTS.md for this project"},{command:"/learn-taste",description:"Learn taste from sessions with other coding agents (Claude Code, Cursor, etc)"},{command:"/login",description:"Authenticate with CommandCode via browser"},{command:"/logout",description:"Remove stored authentication"},{command:"/mcp",description:"Manage MCP server connections"},{command:"/memory",description:"Manage Command Code memory"},{command:"/model",description:"Switch between Command Code models"},{command:"/pr-comments",description:"Fetch all PR comments for current branch"},{command:"/provider",description:"Select AI provider (Command Code or Anthropic)"},{command:"/resume",description:"Resume a past conversation"},{command:"/review",description:"Review a pull request (optional PR number)"},{command:"/rewind",description:"Restore to a previous checkpoint (Press Esc twice)"},{command:"/share",description:"Share conversation (copy link to clipboard)"},{command:"/skills",description:"Browse and open agent skills"},{command:"/taste",description:"Manage Taste learning and usage"},{command:"/terminal-setup",description:"Setup VSCode keybindings"},{command:"/unshare",description:"Stop sharing conversation"}],Lv=__name(({onSelectCommand:e,onInsertCommand:t,onClose:n,searchQuery:r=""})=>{const[s,o]=W(0),[i,a]=W(0),{stdout:l}=X(),u=l?.columns??80,d=Math.max(20,u-22-2-1-2),m=H(()=>{const e=[...customCommandsToMenuItems(loadCustomCommands()),...$v.filter(e=>!("/provider"===e.command&&!isInternalTeamFlagEnforced()||"/terminal-setup"===e.command&&!isVSCodeTerminal()))];if(!r)return e;const t=r.toLowerCase();return e.map(e=>{const n=e.command.toLowerCase(),r=e.description.toLowerCase();let s=0;return n.startsWith("/"+t)?s+=100:n.includes(t)&&(s+=50),r.includes(t)&&(s+=25),{...e,score:s}}).filter(e=>e.score>0).sort((e,t)=>t.score-e.score).map(({score:e,...t})=>t)},[r]),p=H(()=>{const e=i,t=Math.min(e+8,m.length);return m.slice(e,t)},[m,i]);return G(()=>{o(0),a(0)},[r]),Z((r,l)=>{if(l.escape)n();else if(l.upArrow)o(e=>{const t=Math.max(0,e-1);return t<i&&a(t),t});else if(l.downArrow)o(e=>{const t=Math.min(m.length-1,e+1);return t>=i+8&&a(Math.max(0,t-8+1)),t});else{if(l.return){const t=m[s];return void(t&&e(t.command))}if(l.tab||l.rightArrow){const e=m[s];return void(e&&t(e.command))}}}),0===m.length?B.createElement(K,{flexDirection:"column",paddingLeft:2},B.createElement(Y,{color:Ln.DIM},"No commands found")):(m.length,B.createElement(K,{flexDirection:"column",paddingLeft:1},B.createElement(K,{columnGap:2},B.createElement(K,{flexDirection:"column",width:22},p.map((e,t)=>{const n=i+t;return B.createElement(Y,{key:n,color:s===n?Ln.WHITE:Ln.DIM,wrap:"truncate"},e.command)})),B.createElement(K,{flexDirection:"column"},p.map((e,t)=>{const n=i+t;return B.createElement(Y,{key:n,color:s===n?Ln.WHITE:Ln.DIM,wrap:"truncate"},truncateString({text:e.description,maxChars:d}))})))))},"CommandMenu");qE(),Nt(),Nt(),ar(),rr();var Mv=__name(e=>({darwin:"macOS",linux:"Linux",win32:"Windows",freebsd:"FreeBSD",sunos:"SunOS"}[e]||e),"getPlatformName"),Ov=__name(e=>{const t=Math.floor(e/86400),n=Math.floor(e%86400/3600),r=Math.floor(e%3600/60);return t>0?`${t}d ${n}h ${r}m`:n>0?`${n}h ${r}m`:`${r}m`},"formatUptime"),Dv=__name(({icon:e,label:t,children:n})=>B.createElement(Y,null,B.createElement(Y,{color:Ln.CYAN},e," "),B.createElement(Y,{dimColor:!0},t.padEnd(12)),n),"Row"),qv=__name(({title:e})=>B.createElement(Y,null,B.createElement(Y,{color:Ln.GRAY},"───"),B.createElement(Y,{color:Ln.WHITE}," ",e," "),B.createElement(Y,{color:Ln.GRAY},"─".repeat(35))),"Header"),Fv=__name(({title:e,marginTop:t=0,children:n})=>B.createElement(K,{flexDirection:"column",marginTop:t},B.createElement(qv,{title:e}),B.createElement(K,{flexDirection:"column",paddingY:1},n)),"Section"),jv=__name(({cpuCount:e,totalMem:t})=>B.createElement(Fv,{title:"System Information"},B.createElement(Dv,{icon:be.bullet,label:"Date"},B.createElement(Y,null,formatDate())),B.createElement(Dv,{icon:be.pointer,label:"Platform"},B.createElement(Y,{color:Ln.GREEN},Mv(h.platform())),B.createElement(Y,{dimColor:!0}," ","(",h.platform(),", ",h.arch(),")")),B.createElement(Dv,{icon:be.triangleUp,label:"Hostname"},B.createElement(Y,null,h.hostname())),B.createElement(Dv,{icon:be.bullet,label:"User"},B.createElement(Y,{color:Ln.YELLOW},h.userInfo().username)),B.createElement(Dv,{icon:be.bullet,label:"CPUs"},B.createElement(Y,{color:Ln.MAGENTA},e," cores")),B.createElement(Dv,{icon:be.bullet,label:"Memory"},B.createElement(Y,{color:Ln.CYAN},t," GB")),B.createElement(Dv,{icon:be.play,label:"Uptime"},B.createElement(Y,null,Ov(h.uptime()))),B.createElement(Dv,{icon:be.arrowRight,label:"Home"},B.createElement(Y,{dimColor:!0},h.homedir())),B.createElement(Dv,{icon:be.pointer,label:"Shell"},B.createElement(Y,null,process.env.SHELL||"N/A")),B.createElement(Dv,{icon:be.bullet,label:"Node"},B.createElement(Y,{color:Ln.GREEN},process.version))),"SystemInfoSection"),zv=__name(({cpus:e})=>B.createElement(Fv,{title:"CPU Details",marginTop:1},e.map((e,t)=>B.createElement(Dv,{key:t,icon:be.bullet,label:`Core ${t}`},B.createElement(Y,null,e.model.trim()),B.createElement(Y,{color:Ln.YELLOW}," @ ",e.speed," MHz")))),"CPUDetailsSection"),Bv=__name(({networkInterfaces:e})=>B.createElement(Fv,{title:"Network",marginTop:1},Object.entries(e).map(([e,t])=>{const n=t?.filter(e=>"IPv4"===e.family&&!e.internal);return n&&0!==n.length?n.map((t,n)=>B.createElement(Dv,{key:`${e}-${n}`,icon:be.bullet,label:e},B.createElement(Y,{color:Ln.GREEN},t.address))):null})),"NetworkSection"),Uv=__name(({cpus:e,totalMem:t,networkInterfaces:n,verbose:r})=>B.createElement(K,{flexDirection:"column"},B.createElement(Y,null,"System Information"),B.createElement(Y,null,"─".repeat(40)),B.createElement(Y,null,"Date ",formatDate()),B.createElement(Y,null,"Platform ",Mv(h.platform())," (",h.platform(),","," ",h.arch(),")"),B.createElement(Y,null,"Hostname ",h.hostname()),B.createElement(Y,null,"User ",h.userInfo().username),B.createElement(Y,null,"CPUs ",e.length," cores"),B.createElement(Y,null,"Memory ",t," GB"),B.createElement(Y,null,"Uptime ",Ov(h.uptime())),B.createElement(Y,null,"Home ",h.homedir()),B.createElement(Y,null,"Shell ",process.env.SHELL||"N/A"),B.createElement(Y,null,"Node ",process.version),r&&B.createElement(B.Fragment,null,B.createElement(Y,null,"\n","CPU Details"),B.createElement(Y,null,"─".repeat(40)),e.map((e,t)=>B.createElement(Y,{key:t},"Core ",String(t).padEnd(10),e.model," @ ",e.speed," MHz")),B.createElement(Y,null,"\n","Network"),B.createElement(Y,null,"─".repeat(40)),Object.entries(n).map(([e,t])=>t?.filter(e=>"IPv4"===e.family&&!e.internal).map((t,n)=>B.createElement(Y,{key:`${e}-${n}`},e.padEnd(12),t.address))))),"PlainTextInfo"),Wv=__name(({cpus:e,totalMem:t,networkInterfaces:n,verbose:r})=>B.createElement(K,{flexDirection:"column"},B.createElement(jv,{cpuCount:e.length,totalMem:t}),r&&B.createElement(zv,{cpus:e}),r&&B.createElement(Bv,{networkInterfaces:n})),"StyledInfo"),Qv=__name(({verbose:e=!1,text:t=!1})=>{const{exit:n}=te();G(()=>{const e=setTimeout(()=>n(),50);return()=>clearTimeout(e)},[n]);const r=h.cpus(),s=h.networkInterfaces(),o=Math.round(h.totalmem()/1024/1024/1024);return t?B.createElement(Uv,{cpus:r,totalMem:o,networkInterfaces:s,verbose:e}):B.createElement(Wv,{cpus:r,totalMem:o,networkInterfaces:s,verbose:e})},"InfoUI"),Gv={"iTerm.app":"iTerm2",Apple_Terminal:"Terminal",WezTerm:"WezTerm",Hyper:"Hyper",Alacritty:"Alacritty"},Hv=__name((e,t)=>{const n=process.env[e];return!!n&&n.toLowerCase().includes(t)},"hasEnvContaining"),Vv=__name(()=>{if(process.env.CURSOR_TRACE_ID)return"Cursor";if(Hv("__CFBundleIdentifier","com.todesktop"))return"Cursor";const e=[process.env.VSCODE_GIT_ASKPASS_MAIN,process.env.VSCODE_GIT_ASKPASS_NODE,process.env.GIT_ASKPASS].filter(Boolean);for(const t of e){const e=t.toLowerCase();if(e.includes("cursor"))return"Cursor";if(e.includes("windsurf"))return"Windsurf"}return"vscode"===process.env.TERM_PROGRAM&&"1"===process.env.VSCODE_INJECTION?"VSCode":null},"detectIDE"),Kv=__name(()=>{const e=Vv();if(e)return e;const t=process.env.TERM_PROGRAM;return t&&Gv[t]?Gv[t]:t||process.env.TERMINAL_EMULATOR||"Unknown"},"getTerminalName"),Yv=__name(()=>{if("win32"===f.platform()){const e=process.env.COMSPEC;return e?a(e):process.env.SHELL?a(process.env.SHELL):"cmd.exe"}if(process.env.FISH_VERSION)return"fish";if(process.env.ZSH_VERSION)return"zsh";if(process.env.BASH_VERSION)return"bash";try{const e=process.ppid;if(e){const t=I(`ps -p ${e} -o comm=`,{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(t){const e=a(t).replace(/^-/,"");if(e&&"node"!==e)return e}}}catch{}const e=process.env.SHELL;return e?a(e):"N/A"},"getShellName"),Jv=__name(()=>{const e=Vv();if(!e)return"N/A";const t=process.env.TERM_PROGRAM_VERSION;return t?`${e} ${t}`:e},"getIDEInfo"),Xv=__name(()=>{try{const e=I("cmd --version",{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(e)return e}catch{}return"Unknown"},"getCommandCodeVersion");function getSystemInfo(){return{os:Mv(f.platform()),terminal:Kv(),shell:Yv(),version:Xv(),ide:Jv()}}function buildGitHubIssueUrl(e){const t=getSystemInfo(),n=new URLSearchParams;if(n.append("template","1.bug_report.yml"),e){const t=e.slice(0,256).trim();t&&n.append("title",t)}return n.append("version",t.version),n.append("os",t.os),n.append("terminal",t.terminal),n.append("shell",t.shell),`https://github.com/CommandCodeAI/command-code/issues/new?${n.toString()}`}function createOSC8Link(e,t,n=!0){return`${n?"[33m":""}]8;;${e}${t||e}]8;;${n?"[0m":""}`}function parsePositionalArguments(e){const{input:t}=e;if(!t.trim())return[];const n=[];let r="",s=!1,o="";for(let e=0;e<t.length;e++){const i=t[e];'"'!==i&&"'"!==i||s?i===o&&s?(s=!1,o=""):" "!==i||s?r+=i:(r.trim()&&n.push(r.trim()),r=""):(s=!0,o=i)}return r.trim()&&n.push(r.trim()),n}function parseCommandInput(e){const{input:t}=e,n=t.trim();if(!n.startsWith("/"))return null;const r=n.indexOf(" ");if(-1===r)return{commandName:n,rawArguments:"",positionalArgs:[]};const s=n.substring(0,r),o=n.substring(r+1).trim();return{commandName:s,rawArguments:o,positionalArgs:parsePositionalArguments({input:o})}}function processCommandTemplate(e){const{template:t,rawArguments:n,positionalArgs:r}=e;let s=t;return s=s.replace(/\$ARGUMENTS/g,n),s=s.replace(/\$(\d+)/g,(e,t)=>{const n=parseInt(t,10)-1;return n>=0&&n<r.length?r[n]:""}),{content:s}}async function handleCompactCommand({contextEngineRef:e,setFeed:t,setStatus:n,setIsCmdCodeBusy:r,setContextUsage:s,setStaticKey:o}){if(e.current)if(e.current.isRequestInProgress())t(e=>[...e,xo("Cannot compact while Command Code is working. Please wait for the current operation to complete.")]);else try{r(!0),n("Compacting conversation...");const i=await e.current.manualCompact();kC(),o(e=>e+1);let a="Compacted conversation.";i.didCompact||(a="Conversation is already compact."),i.didCompact&&i.tokensSaved>0&&(a=`Compacted conversation, saved ~${i.tokensSaved.toLocaleString()} tokens.`),t(e=>[...e,xo(a)]),r(!1),n("Ready..."),s({current:e.current.getContextTokensUsed()||0,limit:xE})}catch(e){const s=`Failed to compact conversation: ${e instanceof Error?e.message:"Unknown error"}`;t(e=>[...e,Lo(s)]),r(!1),n("Ready...")}else t(e=>[...e,xo("No active conversation to compact.")])}function handleRewindCommand({contextEngineRef:e,setFeed:t,setShowRewindSelector:n}){e.current?e.current.hasCheckpoints()?n(!0):t(e=>[...e,xo("No checkpoints available. Start sending messages to create checkpoints.")]):t(e=>[...e,xo("No active conversation to rewind.")])}async function handleRewindSelect({messageId:e,mode:t,contextEngineRef:n,setFeed:r,setStatus:s,setShowRewindSelector:o,setStaticKey:i,setInput:a}){if(o(!1),n.current)try{const o=n.current.listCheckpoints().find(t=>t.messageId===e);s("Restoring checkpoint...");const l=await n.current.restoreToCheckpoint({messageId:e,mode:t});if(l.success){const e=n.current.getSessionManager(),t=n.current.getMessages();r(e.reconstructFeedFromMessages(t)),kC(),i(e=>e+1),o?.userPrompt&&a(o.userPrompt);const u=[];l.filesRestored>0&&u.push(`${l.filesRestored} file${l.filesRestored>1?"s":""} restored`),l.filesDeleted>0&&u.push(`${l.filesDeleted} file${l.filesDeleted>1?"s":""} deleted`),l.messagesRemoved>0&&u.push(`${l.messagesRemoved} message${l.messagesRemoved>1?"s":""} removed`);const d=u.length>0?`Restored to checkpoint: ${u.join(", ")}.`:"Restored to checkpoint.";return r(e=>[...e,xo(d)]),void s("Ready...")}r(e=>[...e,Lo(`Failed to restore: ${l.error}`)]),s("Restore failed")}catch(e){const t=`Failed to restore checkpoint: ${e instanceof Error?e.message:"Unknown error"}`;r(e=>[...e,Lo(t)]),s("Ready...")}}function handleRewindCancel({setShowRewindSelector:e}){e(!1)}async function handleLoginCommand({setFeed:e,setShowLoginOverlay:t}){const n=Lt();if(await getAuthKey(n)){let t="";try{const e=await loadCredentials();t=e?.userName||""}catch(e){process.env.DEBUG&&console.error("Failed to load credentials for display:",e)}const n=t&&"API Key"!==t&&"Manual API Key"!==t?` as ${t}`:"";return void e(e=>[...e,xo(`Already logged in${n}`)])}t(!0)}function handleLoginComplete({success:e,message:t,setShowLoginOverlay:n,setFeed:r,setStatus:s,contextEngineRef:o}){if(n(!1),!e)return r(e=>[...e,Lo(t)]),void s("Ready...");r(e=>[...e,xo(t)]),o.current&&o.current.refreshRequest(),s("Ready...")}function handleLoginCancel({setShowLoginOverlay:e,setFeed:t,setStatus:n}){e(!1),t(e=>[...e,xo("Authentication cancelled.")]),n("Ready...")}async function handleLogoutCommand({setFeed:e,contextEngineRef:t}){const n=await performLogout();if(!n.success)return void e(e=>[...e,Lo(`Logout failed: ${n.error}`)]);if(t.current&&t.current.refreshRequest(),!n.wasAuthenticated)return void e(e=>[...e,xo("Not currently authenticated.")]);const r=n.warnings.length>0?`Successfully logged out from Command Code. Warnings: ${n.warnings.join(", ")}`:"Successfully logged out from Command Code.";e(e=>[...e,xo(r)])}__name(getSystemInfo,"getSystemInfo"),__name(buildGitHubIssueUrl,"buildGitHubIssueUrl"),Nt(),__name(createOSC8Link,"createOSC8Link"),Nt(),__name(parsePositionalArguments,"parsePositionalArguments"),__name(parseCommandInput,"parseCommandInput"),__name(processCommandTemplate,"processCommandTemplate"),PC(),Nt(),Jo(),PC(),$E(),__name(handleCompactCommand,"handleCompactCommand"),Nt(),Jo(),PC(),__name(handleRewindCommand,"handleRewindCommand"),__name(handleRewindSelect,"handleRewindSelect"),__name(handleRewindCancel,"handleRewindCancel"),Nt(),Jo(),Qs(),Jr(),xs(),Ot(),__name(handleLoginCommand,"handleLoginCommand"),__name(handleLoginComplete,"handleLoginComplete"),__name(handleLoginCancel,"handleLoginCancel"),__name(handleLogoutCommand,"handleLogoutCommand"),Nt(),Sl(),$n(),nr();var Zv=Ve(x);function getVsixPath(){try{const e=t.dirname(u(import.meta.url)),n=t.join(e,"..","vsix","commandcode-vscode.vsix");return S.existsSync(n)?n:null}catch{return null}}async function getExtensionStatus(e){if(!e)return{installed:!1,version:null,connected:!1};const[t,n]=await Promise.all([checkInstalled(e),dl.isAvailable(500)]);return{...t,connected:n}}async function checkInstalled(e){try{const{stdout:t}=await Zv(`${e} --list-extensions --show-versions`,{timeout:5e3}),n=t.match(new RegExp("commandcode.commandcode-vscode@([\\d.]+)","i"));return n?{installed:!0,version:n[1]}:{installed:!1,version:null}}catch{return{installed:!1,version:null}}}async function installExtension(e){if(!e)return{success:!1,error:"No IDE detected"};const t=getVsixPath();if(!t)return{success:!1,error:"VSIX not bundled"};try{return await Zv(`${e} --install-extension "${t}" --force`,{timeout:3e4}),dlog(`[IDE] Extension installed for ${e}`),{success:!0}}catch(e){return{success:!1,error:e instanceof Error?e.message:String(e)}}}function installExtensionAsync(e){e&&installExtension(e).catch(()=>{})}async function isAutoInstallEnabled(){try{return!1!==(await loadUserConfig()).autoInstallExtension}catch{return!0}}__name(getVsixPath,"getVsixPath"),__name(getExtensionStatus,"getExtensionStatus"),__name(checkInstalled,"checkInstalled"),__name(installExtension,"installExtension"),__name(installExtensionAsync,"installExtensionAsync"),__name(isAutoInstallEnabled,"isAutoInstallEnabled");var eT={code:"VS Code",cursor:"Cursor",windsurf:"Windsurf"};async function ensureExtensionInstalled(){if(process.env.CI)return;const e=sl();e&&await isAutoInstallEnabled()&&((await getExtensionStatus(e)).installed||installExtensionAsync(e))}function formatSetupResult(e){const t={connected:Be.green("✔"),installed:Be.green("✔"),needs_reload:Be.yellow("◌"),failed:Be.red("✖"),not_in_ide:Be.yellow("◌")},n={connected:`Connected to ${e.ide}`,installed:`Installed for ${e.ide}`,needs_reload:`${e.ide} extension needs reload`,failed:e.ide?`${e.ide} install failed`:"Install failed",not_in_ide:"Not in IDE"};return["",`${t[e.status]} ${n[e.status]}`,...(e.details??[]).map(e=>Be.dim(` ${e}`)),""]}async function runIDESetup(){const e=sl(),t=e?eT[e]||e:null;if(!e)return{status:"not_in_ide",ide:null,details:["Run Command Code from IDE's integrated terminal."]};const n=new dl,r=await n.connect(500);if(n.disconnect(),r)return{status:"connected",ide:t};const{installed:s}=await checkInstalled(e);return s?{status:"needs_reload",ide:t,details:['Reload IDE window to activate (Cmd+Shift+P → "Reload Window").']}:(await installExtension(e)).success?{status:"installed",ide:t,details:['Reload IDE window to activate (Cmd+Shift+P → "Reload Window").']}:{status:"failed",ide:t,details:[`Make sure "${e}" is available in your PATH.`,"Then run /ide to retry installation."]}}async function handleHelpCommand({setFeed:e}){const{createSystemEntry:t}=await Promise.resolve().then(()=>(Jo(),Yo));e(e=>[...e,t("KEYBOARD SHORTCUTS\nCOMMANDS")])}async function handleTerminalSetupCommand({setFeed:e}){const t=Ao(`/${Tt.TERMINAL_SETUP}`),n=setupVSCodeTerminal(),r=Oo(n.message,!n.success,n.details);e(e=>[...e,t,r])}async function handleIDESetupCommand({setFeed:e}){const t=await runIDESetup(),n=Do(t.status,t.ide,t.details);e(e=>[...e,n])}async function handleClearCommand({setFeed:e,setLiveAgents:t,setShareInfo:n,setShowShareNotification:r,setUnshareNotificationMessage:s,setStaticKey:o,setContextUsage:i,setInteractionTokens:a,contextEngineRef:l,setSessionId:u,createContextEngineCallbacks:d,clearSessionPermissions:m}){if(e([]),t([]),kC(),n(null),r(!1),s(""),l.current){const e=l.current.getSessionManager();e&&await e.deleteShareInfo(),l.current=null;const t=crypto.randomUUID();u(t),m();const{ContextEngine:n}=await Promise.resolve().then(()=>(_C(),TC));l.current=new n(d(t),t)}o(e=>e+1),i(null),a(0)}async function handleInitCommand({setFeed:e}){try{const t=process.cwd(),n=`Created AGENTS.md at ${await initProjectMemory(t)}. You can now edit it with /memory or open it in your editor.`;e(e=>[...e,xo(n)])}catch(t){const n=`Error: Failed to initialize AGENTS.md: ${t instanceof Error?t.message:"Unknown error"}`;e(e=>[...e,xo(n)])}}async function handleFeedbackCommand({setFeed:e},t){const n=buildGitHubIssueUrl(t);try{await ie(n,{wait:!1,background:!0}),e(e=>[...e,xo(`Opened ${createOSC8Link(n,"GitHub issue")} in your browser`)])}catch{const{createSystemEntry:t,createErrorEntry:r}=await Promise.resolve().then(()=>(Jo(),Yo));e(e=>[...e,r("Failed to open browser"),t(createOSC8Link(n,"Open GitHub issue manually"))])}}function handleLearnCommand({setAutoLearnTaste:e,setShowTasteOnboarding:t,setTasteOnboardingEntryId:n,setFeed:r}){e(!0),t(!0);const s=Mo();n(s.id),r(e=>[...e,s])}async function handleCommand(e,t){if(e.startsWith("/resume:")){const n=e.substring(8);return await handleSelectSession({selectedSessionId:n,sessionLoadIdRef:t.sessionLoadIdRef,contextEngineRef:t.contextEngineRef,setFeed:t.setFeed,setLiveAgents:t.setLiveAgents,setSessionId:t.setSessionId,setShowSessionSelector:t.setShowSessionSelector,setSessionLoaded:t.setSessionLoaded,setPermissionMode:t.setPermissionMode,setStaticKey:t.setStaticKey,setShareInfo:t.setShareInfo,createContextEngineCallbacks:t.createContextEngineCallbacks}),{status:"handled"}}const n=parseCommandInput({input:e});if(!n)return{status:"unknown"};const{commandName:r,rawArguments:s,positionalArgs:o}=n;if(Rv.has(r)&&s.trim().length>0)return{status:"unknown"};if("/exit"===r)return t.setShouldExit(!0),{status:"handled"};if("/clear"===r)return await handleClearCommand(t),{status:"handled"};if("/help"===r)return await handleHelpCommand(t),{status:"handled"};if("/share"===r)return await handleShareCommand({sessionId:t.sessionId,shareInfo:t.shareInfo,setShareInfo:t.setShareInfo,setStatus:t.setStatus,setShowShareNotification:t.setShowShareNotification,contextEngineRef:t.contextEngineRef}),{status:"handled"};if("/unshare"===r)return await handleUnshareCommand({sessionId:t.sessionId,shareInfo:t.shareInfo,setShareInfo:t.setShareInfo,setStatus:t.setStatus,setUnshareNotificationMessage:t.setUnshareNotificationMessage,contextEngineRef:t.contextEngineRef}),{status:"handled"};if("/taste"===r)return t.setShowTasteConfig(!0),{status:"handled"};if("/learn-taste"===r)return handleLearnCommand(t),{status:"handled"};if("/skills"===r)return t.setShowSkillsConfig(!0),{status:"handled"};if("/provider"===r)return isInternalTeamFlagEnforced()?(t.setShowProviderSelector(!0),{status:"handled"}):(t.setStatus("Provider selection not available"),{status:"handled"});if("/model"===r)return t.setShowModelSelector(!0),{status:"handled"};if("/memory"===r)return t.setShowMemorySelector(!0),{status:"handled"};if("/resume"===r)return t.setShowSessionSelector(!0),{status:"handled"};if("/init"===r)return await handleInitCommand(t),{status:"handled"};if("/agents"===r)return t.setShowAgentsConfig(!0),{status:"handled"};if("/mcp"===r)return t.setShowMcpManager(!0),{status:"handled"};if("/compact"===r)return await handleCompactCommand({contextEngineRef:t.contextEngineRef,setFeed:t.setFeed,setStatus:t.setStatus,setIsCmdCodeBusy:t.setIsCmdCodeBusy,setContextUsage:t.setContextUsage,setStaticKey:t.setStaticKey}),{status:"handled"};if("/rewind"===r)return handleRewindCommand({contextEngineRef:t.contextEngineRef,setFeed:t.setFeed,setShowRewindSelector:t.setShowRewindSelector}),{status:"handled"};if("/login"===r)return await handleLoginCommand({setFeed:t.setFeed,setShowLoginOverlay:t.setShowLoginOverlay}),{status:"handled"};if("/logout"===r)return await handleLogoutCommand({setFeed:t.setFeed,contextEngineRef:t.contextEngineRef}),{status:"handled"};if("/feedback"===r)return await handleFeedbackCommand(t),{status:"handled"};if("/terminal-setup"===r)return await handleTerminalSetupCommand(t),{status:"handled"};if("/ide"===r)return await handleIDESetupCommand(t),{status:"handled"};if("/add-dir"===r)return t.setShowAddDirModal(!0),{status:"handled"};if("/review"===r){const e=s.trim(),{handleSubmit:n}=await Promise.resolve().then(()=>(IC(),xC));return await n({input:buildReviewPrompt({prNumber:s}),role:"user",displayMessage:e?`/review ${e}`:"/review",feed:t.feed,setFeed:t.setFeed,isCmdCodeBusy:t.isCmdCodeBusy,setIsCmdCodeBusy:t.setIsCmdCodeBusy,setQueuedMessages:t.setQueuedMessages,setStatus:t.setStatus,setInteractionTokens:t.setInteractionTokens,updateStatus:t.updateStatus,setUpdateStatus:t.setUpdateStatus,billingLink:t.billingLink,setBillingLink:t.setBillingLink,contextEngineRef:t.contextEngineRef,isSubmittingRef:t.isSubmittingRef,setInput:t.setInput,setStaticKey:t.setStaticKey,executeBash:t.executeBash}),{status:"handled"}}if("/pr-comments"===r)return await handleSubmit({input:"Fetch and display all comments from the current GitHub pull request.\n\n Run these commands in order:\n\n 1. `gh pr view --json number,headRepository` — if this fails, reply \"No comments found.\" and stop.\n 2. `gh api --paginate '/repos/{owner}/{repo}/issues/NUMBER/comments' --jq '.[] | {body,\n user: .user.login, id, created_at}' > /tmp/pr-NUMBER-issue-comments.json`\n 3. `gh api --paginate '/repos/{owner}/{repo}/pulls/NUMBER/comments' --jq '.[] | {body,\n diff_hunk: (.diff_hunk | split(\"\n\") | .[-5:] | join(\"\n\")), path, line, user: .user.login,\n in_reply_to_id, id, created_at}' > /tmp/pr-NUMBER-review-comments.json`\n\n If both return empty, reply \"No comments found.\"\n\n `{owner}` and `{repo}` are gh template variables — write them literally, never substitute. Always\n use `--jq` (not piped `| jq`).\n\n Read the temp JSON files to build output comments directly in markdown using the format:\n\n ## PR Comments\n\n - @author (date):\n > body\n\n ## Review Comments\n\n - @author path#line:\n ```diff (replace ```suggestion code blocks with ```diff to avoid rendering errors)\n [diff_hunk]\n ```\n > body [replies indented by in_reply_to_id]\n\n Number the comments in the order they were created (created_at).\n No explanatory text, no horizontal rules. No extra space in the end.",role:"user",displayMessage:"/pr-comments",feed:t.feed,setFeed:t.setFeed,isCmdCodeBusy:t.isCmdCodeBusy,setIsCmdCodeBusy:t.setIsCmdCodeBusy,setQueuedMessages:t.setQueuedMessages,setStatus:t.setStatus,setInteractionTokens:t.setInteractionTokens,updateStatus:t.updateStatus,setUpdateStatus:t.setUpdateStatus,billingLink:t.billingLink,setBillingLink:t.setBillingLink,contextEngineRef:t.contextEngineRef,isSubmittingRef:t.isSubmittingRef,setInput:t.setInput,setStaticKey:t.setStaticKey,executeBash:t.executeBash}),{status:"handled"};const i=getCustomCommandContent(r);if(i){const e=processCommandTemplate({template:i,rawArguments:s,positionalArgs:o}),{handleSubmit:n}=await Promise.resolve().then(()=>(IC(),xC));return await n({input:e.content,role:"user",feed:t.feed,setFeed:t.setFeed,isCmdCodeBusy:t.isCmdCodeBusy,setIsCmdCodeBusy:t.setIsCmdCodeBusy,setQueuedMessages:t.setQueuedMessages,setStatus:t.setStatus,setInteractionTokens:t.setInteractionTokens,updateStatus:t.updateStatus,setUpdateStatus:t.setUpdateStatus,billingLink:t.billingLink,setBillingLink:t.setBillingLink,contextEngineRef:t.contextEngineRef,isSubmittingRef:t.isSubmittingRef,setInput:t.setInput,setStaticKey:t.setStaticKey,executeBash:t.executeBash}),{status:"handled"}}return{status:"unknown"}}function useCommandCtx({feedState:e,sessionState:t,statusState:n,uiOverlays:r,onboarding:s,exitState:o,permissionState:i,contextEngineRef:a,isSubmittingRef:l,executeBash:u,createContextEngineCallbacks:d,setInput:m}){const p=H(()=>({feed:e.feed,setFeed:e.setFeed,setLiveAgents:e.setLiveAgents,setQueuedMessages:e.setQueuedMessages,setStatus:n.setStatus,setInteractionTokens:n.setInteractionTokens,setContextUsage:n.setContextUsage,setStaticKey:r.setStaticKey,updateStatus:n.updateStatus,setUpdateStatus:n.setUpdateStatus,billingLink:n.billingLink,setBillingLink:n.setBillingLink,shareInfo:n.shareInfo,setShareInfo:n.setShareInfo,setShowShareNotification:n.setShowShareNotification,setUnshareNotificationMessage:n.setUnshareNotificationMessage,setShowTasteConfig:r.setShowTasteConfig,setShowSkillsConfig:r.setShowSkillsConfig,setShowProviderSelector:r.setShowProviderSelector,setShowModelSelector:r.setShowModelSelector,setShowMemorySelector:r.setShowMemorySelector,setShowAgentsConfig:r.setShowAgentsConfig,setShowMcpManager:r.setShowMcpManager,setShowRewindSelector:r.setShowRewindSelector,setShowAddDirModal:r.setShowAddDirModal,setShowLoginOverlay:r.setShowLoginOverlay,setShowTasteOnboarding:s.setShowTasteOnboarding,setAutoLearnTaste:s.setAutoLearnTaste,setTasteOnboardingEntryId:s.setTasteOnboardingEntryId,sessionId:t.sessionId,setSessionId:t.setSessionId,sessionLoadIdRef:t.sessionLoadIdRef,sessionLoaded:t.sessionLoaded,setSessionLoaded:t.setSessionLoaded,setShowSessionSelector:r.setShowSessionSelector,setPermissionMode:i.setPermissionMode,contextEngineRef:a,clearSessionPermissions:i.clearSessionPermissions,createContextEngineCallbacks:d,setShouldExit:o.setShouldExit,setInput:m,isSubmittingRef:l,isCmdCodeBusy:e.isCmdCodeBusy,setIsCmdCodeBusy:e.setIsCmdCodeBusy,executeBash:u}),[e,t,n,r,s,o,i,a,l,u,d,m]),g=Q(p);return g.current=p,{commandCtx:p,onCommand:V(e=>handleCommand(e,g.current),[])}}async function handleProviderSelect({provider:e,setCurrentProvider:t,setShowProviderSelector:n,setAuthComponentInfo:r,setStatus:s,setShowProviderNotification:o,providerNotificationTimer:i}){try{const a=getProviderConfig(e);if(a?.requiresAuth&&a.checkAuth&&!await a.checkAuth()&&a.authComponent)return void r({provider:e,Component:a.authComponent});await updateUserConfig({provider:e}),t(e),n(!1),s(`Provider set to ${getProviderDisplayName(e)}`),i.current&&clearTimeout(i.current),o(!0),i.current=setTimeout(()=>{o(!1),i.current=null},5e3)}catch(e){console.error("Failed to set provider:",e),s("Failed to set provider"),n(!1)}}function handleProviderCancel({setShowProviderSelector:e}){e(!1)}function handleAuthSuccess({authComponentInfo:e,setAuthComponentInfo:t,setShowProviderSelector:n,setCurrentProvider:r,setStatus:s,setShowProviderNotification:o,providerNotificationTimer:i}){e&&(t(null),n(!1),r(e.provider),s(`${getProviderDisplayName(e.provider)} authentication successful`),i.current&&clearTimeout(i.current),o(!0),i.current=setTimeout(()=>{o(!1),i.current=null},5e3))}function handleAuthCancel({setAuthComponentInfo:e}){e(null)}function getModelDisplayName(e){const t=Object.values(kt).find(t=>t.id===e);return t?t.name:e}async function handleModelSelect({modelId:e,setCurrentModel:t,setShowModelSelector:n,setStatus:r,modelNotificationTimer:s,setShowModelNotification:o}){try{await setSelectedModel({model:e}),t(e),n(!1),r(`Model set to ${getModelDisplayName(e)}`),s.current&&clearTimeout(s.current),o(!0),s.current=setTimeout(()=>{o(!1),s.current=null},5e3)}catch(e){console.error("Failed to set model:",e),r("Failed to set model"),n(!1)}}function handleModelCancel({setShowModelSelector:e}){e(!1)}__name(ensureExtensionInstalled,"ensureExtensionInstalled"),__name(formatSetupResult,"formatSetupResult"),__name(runIDESetup,"runIDESetup"),IC(),__name(handleHelpCommand,"handleHelpCommand"),__name(handleTerminalSetupCommand,"handleTerminalSetupCommand"),__name(handleIDESetupCommand,"handleIDESetupCommand"),__name(handleClearCommand,"handleClearCommand"),__name(handleInitCommand,"handleInitCommand"),__name(handleFeedbackCommand,"handleFeedbackCommand"),__name(handleLearnCommand,"handleLearnCommand"),__name(handleCommand,"handleCommand"),__name(useCommandCtx,"useCommandCtx"),Nt(),Nt(),ir(),nr(),__name(handleProviderSelect,"handleProviderSelect"),__name(handleProviderCancel,"handleProviderCancel"),__name(handleAuthSuccess,"handleAuthSuccess"),__name(handleAuthCancel,"handleAuthCancel"),Nt(),Ot(),nr(),__name(getModelDisplayName,"getModelDisplayName"),__name(handleModelSelect,"handleModelSelect"),__name(handleModelCancel,"handleModelCancel");var tT=__name(e=>{},"noopBool");function useMainActionCallbacks({feedState:e,sessionState:t,statusState:n,authState:r,uiOverlays:s,permissionState:o,contextEngineRef:i,createContextEngineCallbacks:a,setInput:l}){const u=Q({feedState:e,sessionState:t,statusState:n,authState:r,uiOverlays:s,permissionState:o,contextEngineRef:i,createContextEngineCallbacks:a,setInput:l});return u.current={feedState:e,sessionState:t,statusState:n,authState:r,uiOverlays:s,permissionState:o,contextEngineRef:i,createContextEngineCallbacks:a,setInput:l},{onSelectSession:V(e=>{const{feedState:t,sessionState:n,statusState:r,uiOverlays:s,permissionState:o,contextEngineRef:i,createContextEngineCallbacks:a}=u.current;handleSelectSession({selectedSessionId:e,sessionLoadIdRef:n.sessionLoadIdRef,contextEngineRef:i,setFeed:t.setFeed,setLiveAgents:t.setLiveAgents,setSessionId:n.setSessionId,setShowSessionSelector:s.setShowSessionSelector,setSessionLoaded:n.setSessionLoaded,setPermissionMode:o.setPermissionMode,setStaticKey:s.setStaticKey,setShareInfo:r.setShareInfo,createContextEngineCallbacks:a})},[]),onNewSession:V(()=>{const{feedState:e,sessionState:t,uiOverlays:n,permissionState:r,contextEngineRef:s}=u.current;handleNewSession({contextEngineRef:s,setFeed:e.setFeed,setLiveAgents:e.setLiveAgents,setSessionId:t.setSessionId,setShowSessionSelector:n.setShowSessionSelector,setSessionLoaded:t.setSessionLoaded,setPermissionMode:r.setPermissionMode})},[]),onRewindSelect:V(({messageId:e,mode:t})=>{const{feedState:n,statusState:r,uiOverlays:s,contextEngineRef:o,setInput:i}=u.current;handleRewindSelect({messageId:e,mode:t,contextEngineRef:o,setFeed:n.setFeed,setStatus:r.setStatus,setShowRewindSelector:s.setShowRewindSelector,setStaticKey:s.setStaticKey,setInput:i})},[]),onRewindCancel:V(()=>{handleRewindCancel({setShowRewindSelector:u.current.uiOverlays.setShowRewindSelector})},[]),onLoginComplete:V((e,t)=>{const{feedState:n,statusState:r,uiOverlays:s,contextEngineRef:o}=u.current;handleLoginComplete({success:e,message:t,setShowLoginOverlay:s.setShowLoginOverlay,setFeed:n.setFeed,setStatus:r.setStatus,contextEngineRef:o})},[]),onLoginCancel:V(()=>{const{feedState:e,statusState:t,uiOverlays:n}=u.current;handleLoginCancel({setShowLoginOverlay:n.setShowLoginOverlay,setFeed:e.setFeed,setStatus:t.setStatus})},[]),handleProviderSelect:V(e=>{const{authState:t,statusState:n,uiOverlays:r}=u.current;handleProviderSelect({provider:e,setCurrentProvider:t.setCurrentProvider,setShowProviderSelector:r.setShowProviderSelector,setAuthComponentInfo:t.setAuthComponentInfo,setStatus:n.setStatus,setShowProviderNotification:t.setShowProviderNotification,providerNotificationTimer:t.providerNotificationTimer})},[]),handleProviderCancel:V(()=>{handleProviderCancel({setShowProviderSelector:u.current.uiOverlays.setShowProviderSelector})},[]),handleModelSelect:V(e=>{const{authState:t,statusState:n,uiOverlays:r}=u.current;handleModelSelect({modelId:e,setCurrentModel:t.setCurrentModel,setShowModelSelector:r.setShowModelSelector,setStatus:n.setStatus,modelNotificationTimer:t.modelNotificationTimer,setShowModelNotification:tT})},[]),handleModelCancel:V(()=>{handleModelCancel({setShowModelSelector:u.current.uiOverlays.setShowModelSelector})},[]),handleAuthSuccess:V(()=>{const{authState:e,statusState:t,uiOverlays:n}=u.current;handleAuthSuccess({authComponentInfo:e.authComponentInfo,setAuthComponentInfo:e.setAuthComponentInfo,setShowProviderSelector:n.setShowProviderSelector,setCurrentProvider:e.setCurrentProvider,setStatus:t.setStatus,setShowProviderNotification:e.setShowProviderNotification,providerNotificationTimer:e.providerNotificationTimer})},[]),handleAuthCancel:V(()=>{handleAuthCancel({setAuthComponentInfo:u.current.authState.setAuthComponentInfo})},[])}}__name(useMainActionCallbacks,"useMainActionCallbacks"),Nt(),Nt(),Nt();var nT=__name(({staticKey:e})=>B.createElement(J,{items:[{staticKey:e}],key:e},()=>B.createElement(Y,{key:e},"\0")),"Responsive");Nt(),Ot(),rr();var rT=__name(({onTrust:e,onExit:t})=>{const{exit:n}=te(),[r,s]=W(1),o=process.cwd().replace(process.env.HOME||"","~");return Z((o,i)=>{i.upArrow||i.downArrow?s(1===r?2:1):i.return?1===r?e():(t(),n()):"1"===o?e():("2"===o||i.escape||i.ctrl&&"c"===o)&&(t(),n())}),B.createElement(K,{flexDirection:"column",borderStyle:"single",borderColor:Ln.YELLOW,padding:1},B.createElement(Y,{color:Ln.YELLOW,bold:!0},"Do you trust the files in this folder?"),B.createElement(K,{marginTop:1},B.createElement(Y,{color:Ln.GRAY},o)),B.createElement(K,{marginTop:1,flexDirection:"column"},B.createElement(Y,null,"Command Code may read files in this folder. Reading untrusted files may lead Command Code to behave in unexpected ways."),B.createElement(K,{marginTop:1},B.createElement(Y,null,"With your permission Command Code may execute files in this folder. Executing untrusted code is unsafe."))),B.createElement(K,{marginTop:1,flexDirection:"column"},B.createElement(K,null,B.createElement(Y,{color:1===r?Ln.CYAN:Ln.GRAY},1===r?be.pointer:" "," 1. Yes, proceed")),B.createElement(K,null,B.createElement(Y,{color:2===r?Ln.CYAN:Ln.GRAY},2===r?be.pointer:" "," 2. No, exit"))))},"TrustPrompt"),sT=U(__name(function TrustView2({staticKey:e,onTrust:t,onExit:n}){return B.createElement(B.Fragment,null,B.createElement(nT,{staticKey:e}),B.createElement(rT,{onTrust:t,onExit:n}))},"TrustView"));Nt(),Nt(),CE(),jr(),rr();var oT=__name(({onSelectSession:e,onNewSession:t})=>{const{exit:n}=te(),[r,s]=W([]),[o,i]=W(0),[a,l]=W(!0),[u,d]=W(0),m=30;G(()=>{p()},[]);const p=__name(async()=>{l(!0);const e=await Yb.listSessions();s(e),l(!1)},"loadSessions");if(Z((t,s)=>{s.upArrow?i(e=>{const t=Math.max(0,e-1);return t<u&&d(t),t}):s.downArrow?i(e=>{const t=Math.min(r.length-1,e+1);return t>=u+m&&d(t-m+1),t}):s.return?r.length>0&&e(r[o].id):(s.escape||s.ctrl&&"c"===t)&&n()}),a)return B.createElement(K,{flexDirection:"column",paddingLeft:2,paddingTop:1},B.createElement(Y,{color:Ln.GRAY},"Loading sessions..."));const g=__name(e=>{const t=new Date(e),n=(new Date).getTime()-t.getTime(),r=Math.floor(n/6e4),s=Math.floor(n/36e5),o=Math.floor(n/864e5),i=Math.floor(n/6048e5);return r<1?"just now":r<60?`${r} min ago`:s<24?`${s} hour${s>1?"s":""} ago`:o<7?`${o} day${o>1?"s":""} ago`:1===i?"1 week ago":`${i} weeks ago`},"formatRelativeTime"),h=__name(e=>truncateString({text:e,maxChars:Nr}),"truncateMessage");if(0===r.length)return B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Ln.GRAY},"No sessions available"));const f=r.slice(u,u+m),y=u;return B.createElement(K,{flexDirection:"column",paddingLeft:1,width:"100%"},r.length>m&&B.createElement(K,{marginBottom:1},B.createElement(Y,{color:Ln.DIM},"Showing ",u+1,"-",Math.min(u+m,r.length)," ","of ",r.length," sessions",u>0&&" (↑ for more)",u+m<r.length&&" (↓ for more)")),B.createElement(K,{columnGap:2,marginBottom:1},B.createElement(K,{width:7},B.createElement(Y,{color:Ln.GRAY}," ")),B.createElement(K,{width:13},B.createElement(Y,{color:Ln.GRAY},"Modified")),B.createElement(K,{width:11},B.createElement(Y,{color:Ln.GRAY},"# Messages")),B.createElement(K,{width:20},B.createElement(Y,{color:Ln.GRAY},"Git Branch")),B.createElement(K,null,B.createElement(Y,{color:Ln.GRAY},"Summary"))),B.createElement(K,{columnGap:2},B.createElement(K,{flexDirection:"column",width:7},f.map((e,t)=>{const n=y+t;return B.createElement(Y,{key:`sel-${n}`,color:o===n?Ln.CYAN:Ln.GRAY},o===n?`${be.pointer} ${n+1}.`:` ${n+1}.`)})),B.createElement(K,{flexDirection:"column",width:13},f.map((e,t)=>{const n=y+t;return B.createElement(Y,{key:`mod-${e.id}`,color:o===n?Ln.WHITE:Ln.GRAY},g(e.lastModified))})),B.createElement(K,{flexDirection:"column",width:11},f.map((e,t)=>{const n=y+t;return B.createElement(Y,{key:`msg-${e.id}`,color:o===n?Ln.WHITE:Ln.GRAY},e.messageCount)})),B.createElement(K,{flexDirection:"column",width:20},f.map((e,t)=>{const n=y+t;return B.createElement(Y,{key:`branch-${e.id}`,color:o===n?Ln.WHITE:Ln.GRAY,wrap:"truncate-end"},e.gitBranch||"-")})),B.createElement(K,{flexDirection:"column"},f.map((e,t)=>{const n=y+t;return B.createElement(Y,{key:`summary-${e.id}`,color:o===n?Ln.WHITE:Ln.GRAY},h(e.firstMessage))}))))},"SessionTable"),iT=U(__name(function SessionView2({onSelectSession:e,onNewSession:t}){return B.createElement(oT,{onSelectSession:e,onNewSession:t})},"SessionView"));Nt(),Nt(),vn(),rr();var aT=__name((e,t)=>{if(!e.startsWith("option_"))return null;const n=e.slice(7),r=parseInt(n,10);return Number.isNaN(r)||r<0||r>t?null:r},"parseOptionIndex"),lT=__name(({questions:e,currentIndex:t,answeredQuestions:n,isReviewPage:r,hideReview:s=!1})=>{if(s&&1===e.length)return null;const o=[];if(e.forEach((s,i)=>{const a=i===t&&!r,l=n.has(i);let u,d;a?(u=be.bullet,d=Ln.CYAN):l?(u=be.tick,d=Ln.GREEN):(u=be.circle,d=Ln.GRAY),o.push(B.createElement(Y,{key:i},B.createElement(Y,{color:d},u),B.createElement(Y,{color:a?Ln.CYAN:void 0}," ",s.header),i<e.length-1?B.createElement(Y,{dimColor:!0}," | "):null))}),!s){const e=r;o.push(B.createElement(Y,{key:"review"},B.createElement(Y,{dimColor:!0}," | "),B.createElement(Y,{color:e?Ln.CYAN:Ln.GRAY},e?be.bullet:be.circle),B.createElement(Y,{color:e?Ln.CYAN:void 0,bold:e}," ","Review")))}return B.createElement(K,null,o)},"TabIndicator"),cT=__name(({questions:e,onResponse:t,hideCustomInput:n=!1})=>{const[r,s]=W(0),[o,i]=W(new Map),a=Q(new Map),[l,u]=W(""),[d,m]=W(new Set),[p,g]=W(null),[h,f]=W(!1),[y,w]=W(!1),[S,b]=W(!1),[E,C]=W(null),[v,T]=W(!1),k=e[r],_=k?.multiSelect??!1,P=o.get(r),A=k?[...k.options.map((e,t)=>({label:e.label,value:`option_${t}`,description:e.description}))]:[],x=A.map((e,t)=>({label:` ${t+1}. ${e.label}`,value:e.value})),I=new Map(x.map((e,t)=>[e.label,A[t]])),N=__name(e=>{"submit"===e.value?D():"cancel"===e.value&&t({answers:[]})},"handleReviewSelect"),R=__name(()=>{if(!P||0===P.length)return 0;const e=P[0],t=k.options.findIndex(t=>t.label===e);return t>=0?t:0},"getInitialIndex"),$=__name(e=>{if(!h)if(_){const t=aT(e.value,k.options.length-1);if(null===t)return;const n=k.options[t]?.label||"";m(e=>{const t=new Set(e);return t.has(n)?t.delete(n):t.add(n),t})}else{const t=aT(e.value,k.options.length-1);if(null===t)return;f(!0);const n=k.options[t]?.label||"";O([n])}},"handleSelect"),L=__name(()=>{if(h)return;f(!0);const e=Array.from(d);O(e)},"handleMultiSelectDone"),M=__name(()=>{if(!h&&l.trim())if(_){const e=new Set(k.options.map(e=>e.label));m(t=>{const n=new Set;return t.forEach(t=>{e.has(t)&&n.add(t)}),n.add(l.trim()),n})}else f(!0),O([l.trim()])},"handleOtherSubmit"),O=__name(t=>{a.current.set(r,t);const o=new Map(a.current);i(o);const l=__name(t=>{const n=e[t],r=a.current.get(t);if(n?.multiSelect&&r){m(new Set(r));const e=r.find(e=>!n.options.some(t=>t.label===e));u(e||"")}else if(m(new Set),n?.multiSelect||1!==r?.length)u("");else{const e=r[0],t=!n?.options.some(t=>t.label===e);u(t&&e?e:"")}},"restoreStateForQuestion");if(r<e.length-1){const e=r+1;l(e),s(e),f(!1),b(!1),C(null),T(!1)}else if(e.every((e,t)=>o.has(t))){if(n&&1===e.length)return void D();m(new Set),u(""),w(!0),f(!1)}else{const t=e.findIndex((e,t)=>!o.has(t));-1!==t&&(l(t),s(t)),f(!1),b(!1),C(null),T(!1)}},"finishQuestion"),D=__name(()=>{const n=e.map((e,t)=>({questionIndex:t,selectedOptions:a.current.get(t)||[]}));t({answers:n})},"submitAnswers"),q=__name(t=>{w(!1),s(t),T(!1),b(!1),C(null);const n=e[t],r=a.current.get(t);if(n?.multiSelect&&r){m(new Set(r));const e=r.find(e=>!n.options.some(t=>t.label===e));u(e||"")}else if(m(new Set),n?.multiSelect||1!==r?.length)u("");else{const e=r[0],t=!n.options.some(t=>t.label===e);u(t&&e?e:"")}},"editQuestion"),F=__name(t=>{if(t<0||t>=e.length)return;_&&(d.size>0?a.current.set(r,Array.from(d)):a.current.delete(r),i(new Map(a.current))),f(!1),b(!1),C(null),T(!1);const n=e[t],o=a.current.get(t);if(n?.multiSelect&&o){m(new Set(o));const e=o.find(e=>!n.options.some(t=>t.label===e));u(e||"")}else if(m(new Set),n?.multiSelect||1!==o?.length)u("");else{const e=o[0],t=!n.options.some(t=>t.label===e);u(t&&e?e:"")}s(t)},"navigateToQuestion"),j=__name(()=>{if(!p||!_)return;if("done"===p.value)return;const e=aT(p.value,k.options.length-1);if(null===e)return;const t=k.options[e]?.label||"";m(e=>{const n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n})},"toggleMultiSelection");return Z((t,s)=>{if(" "===t&&_&&!S&&j(),"d"!==t||!_||S||y||L(),!y&&!h){if(s.downArrow&&!S&&!v&&!n&&p&&x.length>0&&p.value===x[x.length-1]?.value&&b(!0),s.upArrow&&!S&&!v&&p&&x.length>0&&p.value===x[0]?.value&&(_?T(!0):n||(b(!0),C(x.length-1))),s.upArrow&&S){b(!1),C(x.length-1);const e=x[x.length-1];e&&g(e)}if(s.downArrow&&S)if(b(!1),_)T(!0);else{C(0);const e=x[0];e&&g(e)}if(s.upArrow&&v&&(T(!1),b(!0)),s.downArrow&&v){T(!1),C(0);const e=x[0];e&&g(e)}s.return&&v&&_&&L()}if(h||S||v||(y?s.leftArrow&&q(e.length-1):s.leftArrow&&r>0?F(r-1):s.rightArrow&&(r<e.length-1?F(r+1):(_&&(d.size>0?a.current.set(r,Array.from(d)):a.current.delete(r),i(new Map(a.current))),w(!0)))),s.escape&&!h)if(y)w(!1);else if(S){b(!1);const e=E??x.length-1;C(e);const t=x[e];t&&g(t)}else if(v){T(!1);const e=x[x.length-1];e&&g(e)}}),k||y?y?B.createElement(K,{flexDirection:"column",borderStyle:"single",borderColor:Ln.GRAY,borderTop:!0,borderBottom:!1,borderLeft:!1,borderRight:!1,width:"100%"},B.createElement(K,{marginBottom:1},B.createElement(lT,{questions:e,currentIndex:e.length,answeredQuestions:new Set(o.keys()),isReviewPage:!0})),e.map((e,t)=>B.createElement(K,{key:t,marginBottom:1,flexDirection:"column"},B.createElement(Y,{dimColor:!0},t+1,". ",e.question),B.createElement(Y,{color:Ln.GREEN}," ",o.get(t)?.join(", ")||"No answer"))),B.createElement(Ke,{items:[{label:" 1. Submit",value:"submit"},{label:" 2. Cancel",value:"cancel"}],onSelect:N,initialIndex:0,indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:Ln.CYAN},e?be.pointer:" "),itemComponent:({label:e,isSelected:t})=>B.createElement(Y,{color:t?Ln.CYAN:Ln.WHITE},e)}),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},be.arrowLeft," to go back and edit"))):B.createElement(K,{flexDirection:"column",borderStyle:"single",borderColor:Ln.GRAY,borderTop:!0,borderBottom:!1,borderLeft:!1,borderRight:!1,width:"100%"},B.createElement(K,{marginBottom:1},B.createElement(lT,{questions:e,currentIndex:r,answeredQuestions:new Set(o.keys()),isReviewPage:!1,hideReview:n})),B.createElement(K,{marginBottom:1},B.createElement(Y,{bold:!0},k.question)),S||v?B.createElement(K,{flexDirection:"column"},x.map((e,t)=>{const n=I.get(e.label),r=_&&n&&d.has(n.label),s=!_&&n&&P?.includes(n.label),o=r||s;return B.createElement(K,{key:t,flexDirection:"column"},B.createElement(K,null,B.createElement(Y,null," "),B.createElement(Y,{color:o?Ln.GREEN:Ln.WHITE}," ",t+1,"."," "),_&&(o?B.createElement(Y,{color:Ln.GREEN},"[",be.tick,"]"," "):B.createElement(Y,{dimColor:!0},"[ ] ")),B.createElement(Y,{color:o?Ln.GREEN:Ln.WHITE},n?.label||""),!_&&o&&B.createElement(Y,{color:Ln.GREEN}," ",be.tick)),n?.description&&B.createElement(K,null,B.createElement(Y,null," "),B.createElement(Y,{dimColor:!0},_?" ":" ",n.description)))})):B.createElement(Ke,{key:`${r}-${E??"default"}`,items:x,initialIndex:E??R(),onSelect:$,onHighlight:g,indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:Ln.CYAN},e?be.pointer:" "),itemComponent:({label:e,isSelected:t})=>{const n=I.get(e),r=_&&n&&d.has(n.label),s=!_&&n&&P?.includes(n.label),o=r||s,i=e.match(/^\s*(\d+)\.\s*(.*)$/),a=i?.[1]||"",l=i?.[2]||e;return B.createElement(K,{flexDirection:"column"},B.createElement(K,null,B.createElement(Y,{color:t?Ln.CYAN:o?Ln.GREEN:Ln.WHITE}," ",a,"."," "),_&&(o?B.createElement(Y,{color:Ln.GREEN},"[",be.tick,"]"," "):B.createElement(Y,{dimColor:!0},"[ ] ")),B.createElement(Y,{color:t?Ln.CYAN:o?Ln.GREEN:Ln.WHITE},l),!_&&o&&B.createElement(Y,{color:Ln.GREEN}," ",be.tick)),n?.description&&B.createElement(Y,{dimColor:!0},_?" ":" ",n.description))}}),!n&&B.createElement(K,null,B.createElement(Y,{color:Ln.CYAN},S?be.pointer:" "),B.createElement(Y,{color:S?Ln.CYAN:void 0}," ",x.length+1,"."," "),_&&(d.has(l.trim())?B.createElement(Y,{color:Ln.GREEN},"[",be.tick,"] "):B.createElement(Y,{dimColor:!0},"[ ] ")),B.createElement(TextInput,{value:l,onChange:e=>{const t=e.replace(/\r\n/g," ").replace(/[\r\n]/g," "),n=l.trim();u(t),_&&m(e=>{const r=new Set(e);return n&&r.has(n)&&r.delete(n),t.trim()&&r.add(t.trim()),r})},onSubmit:M,placeholder:"Type something...",focus:S,stripBracketedPaste:!0})),_&&B.createElement(K,null,B.createElement(Y,{color:Ln.CYAN},v?be.pointer:" "),B.createElement(Y,{color:v?Ln.CYAN:void 0,bold:v}," ",r===e.length-1?"Submit":"Next")),e.length>1&&B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"Enter to select | Arrow keys to navigate | Esc to cancel"))):null},"QuestionPrompt");function QuestionView({pendingQuestion:e,setPermissionMode:t,setPendingQuestion:n,setStatus:r,setStaticKey:s}){return B.createElement(K,{marginY:1},B.createElement(cT,{questions:e.params.questions,hideCustomInput:e.params.hideCustomInput,onResponse:o=>{if(e.params.exitPlanMode){const e=o.answers[0]?.selectedOptions[0]||"";e.startsWith("Yes, auto-accept")?(t("auto-accept"),kC(),s(e=>e+1)):e.startsWith("Yes, exit")&&(t("standard"),kC(),s(e=>e+1))}if(e.params.enterPlanMode){const e=o.answers[0]?.selectedOptions[0];e?.startsWith("Yes")&&(t("plan"),kC(),s(e=>e+1))}e.resolve(o),n(null),r("Answers submitted")}}))}PC(),__name(QuestionView,"QuestionView"),Nt(),Nt(),Ot(),rr(),Nt(),Jo(),en(),ar(),rr(),Nt(),rr();var uT=class extends Xe{static{__name(this,"FixedTerminalRenderer")}text(e){if(e&&"object"==typeof e&&Array.isArray(e.tokens)&&e.tokens.length>0){try{const t=this.parser;if(t&&"function"==typeof t.parseInline)return t.parseInline(e.tokens)}catch{}return e.raw||e.text||String(e)}return super.text(e)}hr(){return"\n"+Be.dim("───")+"\n"}blockquote(e){return"object"==typeof e&&(e=this.parser.parse(e.tokens)),this.o.blockquote(e.trim()).split("\n").map(e=>`│ ${e}`).join("\n")+"\n\n"}listDepth=0;list(e,t=!1,n=""){let r;this.listDepth++;try{r=super.list(e,t,n),r=r.replace(/\n[ \t]*(?:\u001b\[0m)+[ \t]*(?=\n)/g,""),1===this.listDepth&&(r=r.replace(/^ /gm,""))}finally{this.listDepth--}return r}},dT=new Je;dT.setOptions({renderer:new uT({strong:Be.bold,em:Be.italic,del:Be.dim.strikethrough,codespan:Be.hex(Yn.CODE),code:Be.hex(Yn.CODE),heading:Be.bold,firstHeading:Be.bold.hex(Yn.HEADING).underline,link:Be.hex(Ln.CYAN),href:Be.hex(Ln.CYAN).underline,blockquote:Be.hex(Ln.GRAY).italic,table:Be.reset,tableOptions:{style:{head:[Ln.CYAN],border:[Ln.GRAY]}},hr:Be.reset,paragraph:Be.reset,html:Be.hex(Ln.GRAY),showSectionPrefix:!1,unescape:!0,emoji:!0,tab:2}),breaks:!0,gfm:!0});var mT=/\u001b\]8;;([^\u0007]*)\u0007([^\u001b]*)\u001b\]8;;\u0007/g;function Markdown({children:e,color:t,dimColor:n,wrap:r}){const s=H(()=>{if(!e)return"";const t=[],n=e.replace(mT,e=>{const n=t.length;return t.push(e),`{{OSC8:${n}}}`});try{const r=dT.parse(n);if("string"!=typeof r)return e;return r.replace(/\{\{OSC8:(\d+)\}\}/g,(e,n)=>t[parseInt(n,10)]||"").replace(/^(\s*)\* /gm,"$1- ").replace(/\n{3,}/g,"\n\n").trim()}catch{return e}},[e]);return B.createElement(Y,{color:t,dimColor:n,wrap:r},s)}__name(Markdown,"Markdown"),jr();var pT=" │ ";function computeSimilarity({strA:e,strB:t}){const n=e.trim(),r=t.trim();if(n===r)return 1;if(!n||!r)return 0;const s=Object.create(null);for(let e=0;e<n.length;e++){const t=n[e];s[t]=(s[t]??0)+1}let o=0;for(let e=0;e<r.length;e++){const t=r[e],n=s[t];n&&(o++,s[t]=n-1)}return 2*o/(n.length+r.length)}function buildSimilarityMatrix(e,t,n){const r=new Float64Array(e.length*n);for(let s=0;s<e.length;s++)for(let o=0;o<n;o++)r[s*n+o]=computeSimilarity({strA:e[s],strB:t[o]});return r}function collectSimilarityCandidates(e,t,n){const r=[];for(let s=0;s<t;s++)for(let t=0;t<n;t++){const o=e[s*n+t];o>=.3&&r.push({score:o,removedIdx:s,addedIdx:t})}return r}function buildLinePairs(e,t){const n=e.length,r=t.length,s=new Map;if(n*r>200){const e=Math.min(n,r);for(let t=0;t<e;t++)s.set(t,t);return s}const o=collectSimilarityCandidates(buildSimilarityMatrix(e,t,r),n,r);o.sort((e,t)=>t.score-e.score);const i=new Set,a=new Set;for(const{removedIdx:e,addedIdx:t}of o)i.has(e)||a.has(t)||(s.set(e,t),i.add(e),a.add(t));return s}function groupAdjacentChanges(e){const t=[];let n=0;for(;n<e.length;){const r=e[n];if(!r.added&&!r.removed){const e=r.value.split("\n");""===e.at(-1)&&e.pop(),t.push({type:"context",contextLines:e,removedLines:[],addedLines:[]}),n++;continue}const s=[],o=[];for(;n<e.length&&(e[n].added||e[n].removed);){const t=e[n].value.split("\n");""===t.at(-1)&&t.pop(),e[n].removed?(s.push(...t),n++):(o.push(...t),n++)}t.push({type:"change",contextLines:[],removedLines:s,addedLines:o})}return t}function renderWordSegments({wordChanges:e,type:t,dimDiff:n}){const r="removed"===t?Fn.REMOVED_HIGHLIGHT_BG:Fn.ADDED_HIGHLIGHT_BG,s=[];let o=0;for(const i of e){if("removed"===t&&i.added)continue;if("added"===t&&i.removed)continue;const e="removed"===t?i.removed:i.added,a=i.value.replace(/\s/g," "),l=`${t}-${o++}-${e?"highlighted":"unchanged"}`;e?s.push(B.createElement(Y,{key:l,backgroundColor:r,dimColor:n},a)):s.push(B.createElement(Y,{key:l,color:Ln.WHITE,dimColor:n},a))}return s}function renderContextLine({line:e,lineNum:t,lineNumWidth:n,dimDiff:r,nodeKey:s}){return B.createElement(K,{key:s,width:"100%"},B.createElement(Y,{color:Fn.LINE_NUM,dimColor:r}," "+t.toString().padStart(n)),B.createElement(Y,{color:Fn.LINE_NUM,dimColor:r},pT),B.createElement(Y,{color:Ln.WHITE,dimColor:r}," ",e.replace(/\s/g," ")))}function renderContextGroup({lines:e,leadCount:t,trailCount:n,lineNumWidth:r,dimDiff:s,counters:o}){const i=[];if(t+n>=e.length){for(const t of e)i.push(renderContextLine({line:t,lineNum:o.newLineNum,lineNumWidth:r,dimDiff:s,nodeKey:"ctx-"+o.nodeKey++})),o.oldLineNum++,o.newLineNum++;return i}for(let n=0;n<t;n++)i.push(renderContextLine({line:e[n],lineNum:o.newLineNum,lineNumWidth:r,dimDiff:s,nodeKey:"ctx-"+o.nodeKey++})),o.oldLineNum++,o.newLineNum++;const a=e.length-t-n;a>0&&(o.oldLineNum+=a,o.newLineNum+=a,i.push(B.createElement(K,{key:"sep-"+o.nodeKey++},B.createElement(Y,{color:Fn.LINE_NUM,dimColor:s}," ".repeat(r+1)),B.createElement(Y,{color:Fn.LINE_NUM,dimColor:s},pT),B.createElement(Y,{color:Fn.LINE_NUM,dimColor:s},`⋮ ${a} line${1===a?"":"s"}`))));for(let t=e.length-n;t<e.length;t++)i.push(renderContextLine({line:e[t],lineNum:o.newLineNum,lineNumWidth:r,dimDiff:s,nodeKey:"ctx-"+o.nodeKey++})),o.oldLineNum++,o.newLineNum++;return i}function generateDiff({oldValue:e,newValue:t,filePath:n,permissionDenied:r=!1,showMetadata:s=!1,marginLeft:o=2,startLine:i=1,dimDiff:a=!1,maxLines:l}){const u=Ye.diffLines(e,t);let d=0,m=0;for(const e of u)e.added&&(d+=e.count||1),e.removed&&(m+=e.count||1);const p=u.reduce((e,t)=>e+(t.added?0:t.count||1),0),g=u.reduce((e,t)=>e+(t.removed?0:t.count||1),0),h=Math.max(3,(i+p-1).toString().length,(i+g-1).toString().length),f=groupAdjacentChanges(u),y=[],w={oldLineNum:i,newLineNum:i,nodeKey:0};for(let e=0;e<f.length;e++){const t=f[e];if("context"===t.type){const n=t.contextLines,r=e>0&&"change"===f[e-1].type,s=e<f.length-1&&"change"===f[e+1].type;if(!r&&!s){w.oldLineNum+=n.length,w.newLineNum+=n.length;continue}const o=r?Math.min(3,n.length):0,i=s?Math.min(3,Math.max(0,n.length-o)):0;y.push(...renderContextGroup({lines:n,leadCount:o,trailCount:i,lineNumWidth:h,dimDiff:a,counters:w}));continue}const{removedLines:n,addedLines:r}=t,s=buildLinePairs(n,r),o=new Map,i=new Map;for(const[e,t]of s){const s=Ye.diffWordsWithSpace(n[e],r[t]);o.set(e,s),i.set(t,s)}for(let e=0;e<n.length;e++){const t=o.get(e);y.push(B.createElement(K,{key:"rm-"+w.nodeKey++,width:"100%",backgroundColor:Fn.REMOVED_BG},B.createElement(Y,{color:Fn.REMOVED_TEXT,dimColor:a}," "+w.oldLineNum.toString().padStart(h)),B.createElement(Y,{color:Fn.LINE_NUM,dimColor:a},pT),B.createElement(Y,{color:Fn.REMOVED_TEXT,dimColor:a},"- "),t?renderWordSegments({wordChanges:t,type:"removed",dimDiff:a}):B.createElement(Y,{color:Fn.REMOVED_TEXT,dimColor:a},n[e].replace(/\s/g," ")))),w.oldLineNum++}for(let e=0;e<r.length;e++){const t=i.get(e);y.push(B.createElement(K,{key:"add-"+w.nodeKey++,width:"100%",backgroundColor:Fn.ADDED_BG},B.createElement(Y,{color:Fn.ADDED_TEXT,dimColor:a}," "+w.newLineNum.toString().padStart(h)),B.createElement(Y,{color:Fn.LINE_NUM,dimColor:a},pT),B.createElement(Y,{color:Fn.ADDED_TEXT,dimColor:a},"+ "),t?renderWordSegments({wordChanges:t,type:"added",dimDiff:a}):B.createElement(Y,{color:Fn.ADDED_TEXT,dimColor:a},r[e].replace(/\s/g," ")))),w.newLineNum++}}const S=void 0!==l&&y.length>l,b=S?y.slice(0,l):y;return{diffContent:B.createElement(K,{flexDirection:"column"},s&&!r&&B.createElement(Y,{color:Ln.GRAY},"Updated"," ",B.createElement(Y,{color:Ln.WHITE,bold:!0},n)," ","with ",B.createElement(Y,{color:Bn.SUCCESS},d)," ","addition",1!==d?"s":""," and"," ",B.createElement(Y,{color:Bn.ERROR},m)," removal",1!==m?"s":""),r&&B.createElement(Y,{color:Ln.RED},"Rejected update to",B.createElement(Y,{color:Ln.RED},` ${n}`)),B.createElement(K,{flexDirection:"column",marginLeft:o,marginRight:o+4,width:(process.stdout.columns||80)-2*o-8},b)),isTruncated:S,totalLines:y.length}}function formatTodosForDisplay(e){const t=Vo(e);return t?B.createElement(K,{flexDirection:"column"},t.map((e,t)=>{const n="completed"===e.status?be.checkboxOn:be.checkboxOff;let r,s=!1;switch(e.status){case"completed":r=Bn.SUCCESS,s=!0;break;case"in_progress":r=Bn.IN_PROGRESS;break;default:r=Ln.WHITE}return B.createElement(K,{key:e.id||t,flexDirection:"row"},B.createElement(K,{width:2},B.createElement(Y,{color:r},n)),B.createElement(Y,{color:r,bold:"in_progress"===e.status,strikethrough:s},e.content))})):B.createElement(Y,null,e)}function computeDisplayInput({input:e,isAgent:t,isShell:n,expandedOutput:r}){if(!e)return e;if(t){const t=e.split(/[.\n]/)[0];return t?t+(e.includes(".")||e.includes("\n")?".":""):e}return n&&!r?truncateCommand({command:e}):e}function resolveSymbol({isPending:e,hasError:t,isThinking:n,isTodos:r,output:s}){if(e)return{symbolColor:Ln.YELLOW,symbol:be.arrowRight};if(t)return{symbolColor:Ln.RED,symbol:be.nodejs};if(n)return{symbolColor:Dn,symbol:"✻"};if(r&&s){const e=Vo(s),t=e?.every(e=>"completed"===e.status);return{symbolColor:t?Bn.SUCCESS:Bn.WARNING,symbol:be.nodejs}}return{symbolColor:Bn.SUCCESS,symbol:be.nodejs}}function renderToolHeader({isThinking:e,isTasteFile:t,tasteCategory:n,name:r,output:s,expandedOutput:o,expandKey:i}){if(e){const e=s?Math.max(1,Math.round(s.length/500)):1;return B.createElement(B.Fragment,null,B.createElement(Y,{color:Dn},`Thought for ${e} second${1!==e?"s":""}`," "),!o&&B.createElement(Y,{dimColor:!0},"(",`${i}+o to expand`,")"))}return t?B.createElement(B.Fragment,null,B.createElement(K,{flexShrink:0},B.createElement(Y,{backgroundColor:On.BADGE_BG,color:On.BADGE_FG,bold:!0},`${cv}Taste${cv}`)),B.createElement(Y,null," ","Using your taste"," ",n?"package of ":"packages",n&&B.createElement(Y,{bold:!0},n))):B.createElement(K,{flexShrink:0},B.createElement(Y,{backgroundColor:jn.BG,color:jn.FG,bold:!0},`${cv}${r}${cv}`))}function renderAgentStatus({agentStatus:e,hasError:t,output:n,elapsedSeconds:r,tokensUsed:s}){const o=`${formatTime2(r)} | ${formatTokens(s)}`;return"running"===e?B.createElement(Y,{color:Ln.GRAY},"Running (",o,")"):"interrupted"===e||"Interrupted by user"===n?B.createElement(Y,{color:Ln.RED,wrap:"wrap"},"Interrupted by user"):"error"===e||t?B.createElement(Y,{color:Ln.RED,wrap:"wrap"},n," (",o,")"):B.createElement(B.Fragment,null,B.createElement(Y,{wrap:"wrap"},"Done"),B.createElement(Y,{color:Ln.GRAY}," (",o,")"))}function renderTruncatedOutput({output:e,name:t,expandedOutput:n,hasError:r,expandKey:s}){if(n||r)return e;const o=dedentText(e),{text:i,isTruncated:a,remainingLines:l}=truncateToVisualLines({output:o,maxVisualLines:"Question"===t?_r:kr,maxChars:"Question"===t?1/0:Ir});if(!a||"Question"===t)return i;const u=l>0?`... +${l} lines (${s}+o to expand)`:`... (${s}+o to expand)`;return B.createElement(B.Fragment,null,i,B.createElement(Y,{dimColor:!0},"\n",u))}function renderEditFileDiff({input:e,metadata:t,expandedOutput:n,isPermissionDenied:r,output:s,expandKey:o}){const i=n?void 0:Pr,{diffContent:a,isTruncated:l,totalLines:u}=generateDiff({filePath:e,showMetadata:!0,oldValue:t.oldValue,newValue:t.newValue,startLine:"number"==typeof t.startLine?t.startLine:1,dimDiff:r,permissionDenied:r,maxLines:i});return B.createElement(K,{flexDirection:"column"},a,l&&B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"… (",u-Pr," more lines) (",`${o}+o to expand`,")")),r&&s&&B.createElement(K,{marginTop:1},B.createElement(Y,{color:Ln.RED,wrap:"wrap"},s)))}function renderOutputContent({isTodos:e,isThinking:t,isEditFile:n,metadata:r,output:s,expandedOutput:o,isPermissionDenied:i,input:a,hasError:l,name:u,expandKey:d}){return e?formatTodosForDisplay(s):t?o?B.createElement(K,{width:"100%",flexDirection:"column"},B.createElement(Y,null," "),B.createElement(Y,{color:Dn,wrap:"wrap",italic:!0},s)):null:n&&r?.oldValue&&r?.newValue?renderEditFileDiff({input:a,metadata:r,expandedOutput:o,isPermissionDenied:i,output:s,expandKey:d}):B.createElement(K,{width:"100%"},B.createElement(Y,{color:l?Ln.RED:"",wrap:"wrap"},renderTruncatedOutput({output:s,name:u,expandedOutput:o,hasError:l,expandKey:d})))}function ToolMessage({name:e,input:t,output:n,isPending:r=!1,hasError:s=!1,metadata:o,expandedOutput:i=!1}){const a="thinking…"===e,l="TODOS"===e,u="Edit"===e,d=!0===o?.isTasteFile,m=o?.tasteCategory,p=!0===o?.permissionDenied,g=!a&&!l&&!d,{name:h}=detectTerminal(),f="iTerm2"===h?"shift":"ctrl",y=!0===o?.isAgent,w=computeDisplayInput({input:t,isAgent:y,isShell:"Shell"===e,expandedOutput:i}),S=!a&&w&&!d,b=o?.status,E=o?.tokensUsed||0,C="number"==typeof o?.elapsedSeconds?Math.floor(o.elapsedSeconds):0,{symbolColor:v,symbol:T}=resolveSymbol({isPending:r,hasError:s,isThinking:a,isTodos:l,output:n});return B.createElement(K,null,a&&B.createElement(Y,{color:v},T),B.createElement(K,{flexDirection:"column",marginLeft:a?1:0},B.createElement(K,null,renderToolHeader({isThinking:a,isTasteFile:d,tasteCategory:m,name:e,output:n,expandedOutput:i,expandKey:f}),S&&B.createElement(Y,null," ",B.createElement(Markdown,null,`(${w})`))),y&&("running"===b||n)&&B.createElement(K,{columnGap:1,marginLeft:g?1:0},g&&B.createElement(Y,null,"⎿"," "),renderAgentStatus({agentStatus:b,hasError:s,output:n,elapsedSeconds:C,tokensUsed:E})),n&&!d&&!y&&B.createElement(K,{columnGap:1,marginLeft:g?1:0},g&&B.createElement(Y,null,"⎿"," "),renderOutputContent({isTodos:l,isThinking:a,isEditFile:u,metadata:o,output:n,expandedOutput:i,isPermissionDenied:p,input:t,hasError:s,name:e,expandKey:f})),r&&!y&&B.createElement(K,{columnGap:1,marginLeft:1},B.createElement(Y,null,"⎿"," "),B.createElement(Y,{color:Ln.GRAY},"Processing…"))))}__name(computeSimilarity,"computeSimilarity"),__name(buildSimilarityMatrix,"buildSimilarityMatrix"),__name(collectSimilarityCandidates,"collectSimilarityCandidates"),__name(buildLinePairs,"buildLinePairs"),__name(groupAdjacentChanges,"groupAdjacentChanges"),__name(renderWordSegments,"renderWordSegments"),__name(renderContextLine,"renderContextLine"),__name(renderContextGroup,"renderContextGroup"),__name(generateDiff,"generateDiff"),__name(formatTodosForDisplay,"formatTodosForDisplay"),__name(computeDisplayInput,"computeDisplayInput"),__name(resolveSymbol,"resolveSymbol"),__name(renderToolHeader,"renderToolHeader"),__name(renderAgentStatus,"renderAgentStatus"),__name(renderTruncatedOutput,"renderTruncatedOutput"),__name(renderEditFileDiff,"renderEditFileDiff"),__name(renderOutputContent,"renderOutputContent"),__name(ToolMessage,"ToolMessage"),Zo();var gT=__name(({request:e,onResponse:n,onToggleAutoAccept:r})=>{const[s]=W(0),[o,i]=W(1);G(()=>{"edit"===e.action&&e.oldContent&&e.filePath&&resolveEditStartLine({filePath:e.filePath,oldContent:e.oldContent}).then(e=>{void 0!==e&&i(e)}).catch(()=>{})},[e.filePath,e.oldContent,e.action]);const a=[{label:"Yes",value:"yes",description:"Allow this edit",scope:void 0},{label:"Yes, allow all edits during this session (shift+tab)",value:"yes-session",description:"Allow and remember for this session",scope:"session"},{label:"No, and tell Command Code what to do differently",value:"no",description:"Deny and provide feedback",scope:void 0}],l=__name(e=>{const t=a.find(t=>t.value===e.value);t&&("yes-session"===t.value&&r&&r(),n(t))},"handleSelect"),u=__name(()=>{switch(e.action){case"edit":return"make this edit to";case"create":return"create";case"delete":return"delete";case"execute":return"execute";default:return"modify"}},"getActionDescription"),d=__name(()=>{if("unknown"===e.filePath)return"unknown file";try{const n=t.basename(e.filePath),r=t.relative(process.cwd(),e.filePath);return r&&!r.startsWith("../")&&r.length<50?r:n||e.filePath}catch{return e.filePath}},"getDisplayPath"),m=__name(()=>{switch(e.action){case"edit":return"Edit File";case"create":return"Create File";case"delete":return"Delete File";case"execute":return"Execute File";default:return"File Operation"}},"getHeading");return B.createElement(K,{flexDirection:"column",borderStyle:"single",borderColor:Ln.GRAY,paddingX:1,width:"100%"},B.createElement(K,{marginBottom:1},B.createElement(Y,{bold:!0,color:Ln.YELLOW},`${m()} ${"edit"===e.action?d():""}`)),"edit"===e.action&&e.oldContent&&e.newContent&&B.createElement(K,{marginBottom:1},generateDiff({oldValue:e.oldContent,newValue:e.newContent,filePath:d(),marginLeft:0,startLine:o}).diffContent),B.createElement(K,{marginBottom:1},B.createElement(Y,{bold:!0},"Do you want to ",u()," ",B.createElement(Y,{color:Ln.CYAN},d()),"?")),B.createElement(Ke,{items:a.map((e,t)=>({label:` ${t+1}. ${e.label}`,value:e.value})),onSelect:l,initialIndex:s,indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:Ln.CYAN},e?be.pointer:" "),itemComponent:({label:e,isSelected:t})=>B.createElement(Y,{color:t?Ln.CYAN:Ln.WHITE},e.includes("(shift+tab)")?B.createElement(B.Fragment,null,e.split("(shift+tab)")[0],B.createElement(Y,{bold:!0,dimColor:!0},"(shift+tab)")):e.includes("(")?B.createElement(B.Fragment,null,e.split("(")[0],B.createElement(Y,{color:Ln.GRAY},"(",e.split("(")[1])):e)}))},"PermissionPrompt");Nt(),Ot(),rr();var hT=__name(({request:e,onResponse:t,onToggleAutoAccept:n})=>{const[r]=W(0),s=[{label:"Yes",value:"yes",description:"Allow this command",scope:void 0},{label:"Yes, allow all edits during this session (shift+tab)",value:"yes-session",description:"Allow and remember for this session",scope:"session"},{label:"No, and tell Command Code what to do differently",value:"no",description:"Deny and provide feedback",scope:void 0}],o=__name(e=>{const r=s.find(t=>t.value===e.value);r&&("yes-session"===r.value&&n&&n(),t(r))},"handleSelect"),i=__name(()=>{const t=e.args?Array.isArray(e.args)?e.args.join(" "):e.args:"";return t?`${e.command} ${t}`:e.command},"getCommandDisplay");return B.createElement(K,{flexDirection:"column",borderStyle:"single",borderColor:Ln.GRAY,paddingX:1,width:"100%"},B.createElement(K,{marginBottom:1},B.createElement(Y,{bold:!0,color:Ln.YELLOW},"Execute Shell Command")),B.createElement(K,{marginBottom:1},B.createElement(Y,{bold:!0,wrap:"wrap"},"Command Code needs to execute ",B.createElement(Y,{color:Ln.CYAN},i()),".")),e.workingDirectory&&B.createElement(K,{marginBottom:1},B.createElement(Y,{color:Ln.GRAY},"Working directory: ",e.workingDirectory)),e.description&&B.createElement(K,{marginBottom:1},B.createElement(Y,{dimColor:!0,italic:!0},e.description)),B.createElement(Ke,{items:s.map((e,t)=>({label:` ${t+1}. ${e.label}`,value:e.value})),onSelect:o,initialIndex:r,indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:Ln.CYAN},e?be.pointer:" "),itemComponent:({label:e,isSelected:t})=>B.createElement(Y,{color:t?Ln.CYAN:Ln.WHITE},e.includes("(shift+tab)")?B.createElement(B.Fragment,null,e.split("(shift+tab)")[0],B.createElement(Y,{bold:!0,dimColor:!0},"(shift+tab)")):e)}))},"ShellPermissionPrompt");function getKillShellRequest(e){const t=e.port?`port ${e.port}`:`PID ${e.pid}`;return{command:"kill",args:[t],description:`Terminate process on ${t}`}}function getFileAction2(e){return e.includes("write")?"create":e.includes("delete")?"delete":"edit"}function handlePermissionResponse({choice:e,resolve:t,setPendingPermission:n,respondToPrompt:r,setStatus:s,permissionMode:o,showHintMessage:i,allowedStatus:a,deniedStatus:l}){r(e);const u="no"!==e.value;t(u),n(null),u?(s(a),"standard"===o&&i("Use shift+tab to enable auto-accept")):s(l)}__name(getKillShellRequest,"getKillShellRequest"),__name(getFileAction2,"getFileAction"),__name(handlePermissionResponse,"handlePermissionResponse");var fT=U(__name(function PermissionView2({pendingPermission:e,permissionMode:t,setPendingPermission:n,setStatus:r,respondToPrompt:s,showHintMessage:o,handleToggleAutoAccept:i}){const a={resolve:e.resolve,setPendingPermission:n,respondToPrompt:s,setStatus:r,permissionMode:t,showHintMessage:o};if("shell_command"===e.toolName){const t=e.params;return B.createElement(K,{marginY:1},B.createElement(hT,{request:t,onResponse:e=>handlePermissionResponse({...a,choice:e,allowedStatus:"Shell command allowed",deniedStatus:"Shell command denied"}),onToggleAutoAccept:i}))}if("kill_shell"===e.toolName){const t=getKillShellRequest(e.params);return B.createElement(K,{marginY:1},B.createElement(hT,{request:t,onResponse:e=>handlePermissionResponse({...a,choice:e,allowedStatus:"Process termination allowed",deniedStatus:"Process termination denied"}),onToggleAutoAccept:i}))}const l=e.params,u={action:getFileAction2(e.toolName),filePath:String(l.filePath??l.file_path??l.path??l.absolutePath??l.notebook_path??"unknown"),description:`Allow ${e.toolName} operation`,oldContent:"edit_file"===e.toolName&&"string"==typeof l.oldContent?l.oldContent:void 0,newContent:"edit_file"===e.toolName&&"string"==typeof l.newContent?l.newContent:void 0};return B.createElement(K,{marginY:1},B.createElement(gT,{request:u,onResponse:e=>handlePermissionResponse({...a,choice:e,allowedStatus:"File operation allowed",deniedStatus:"File operation denied"}),onToggleAutoAccept:i}))},"PermissionView"));Nt(),PC(),Nt(),tC(),Nt(),rr();var yT=__name(({title:e,hashPrefix:t=!1,subPrefix:n=!1,suffix:r,padding:s=0,titleColor:o=Ln.GRAY,dividerChar:i="─",dividerColor:a=Ln.GRAY,boxProps:l})=>{const u=Math.max(0,(process.stdout.columns??80)-2*s),d=t?`# ${i}${i} `:n?`${i}${i} `:"",m=e?`${e} `:"",p=r?` ${r}`:"",g=d.length+m.length+p.length,h=i.repeat(Math.max(0,u-g));return B.createElement(K,{paddingLeft:s,paddingRight:s,marginBottom:1,...l},(t||n)&&B.createElement(Y,{color:a},d),e&&B.createElement(Y,{color:o},m),B.createElement(Y,{color:a},h),r&&B.createElement(Y,{dimColor:!0},p))},"Divider");PC(),rr(),Nt(),rr();var wT=[{type:"user",text:"I always prefer pnpm",duration:2e3},{type:"learned",text:"Learned: pnpm (95% preference)",details:".commandcode/taste/taste.md",duration:2e3},{type:"user",text:"I prefer commander over meow",duration:2e3},{type:"updated",text:"Updated: commander boosted (60% → 95%), meow adjusted (90% → 35%)",details:".commandcode/taste/cli/taste.md",duration:2e3},{type:"user",text:"I prefer TypeScript for Node CLIs",duration:2e3},{type:"learned",text:"Learned: TypeScript for CLIs (90% preference)",details:".commandcode/taste/cli/taste.md",duration:2e3}],ST=__name(({onComplete:e,onExit:t})=>{const[n,r]=W(0),[s,o]=W(!1),i=n>=wT.length;return G(()=>{if(n>=wT.length)return;if(s)return;const e=wT[n],t=setTimeout(()=>{r(e=>Math.min(e+1,wT.length))},e.duration);return()=>clearTimeout(t)},[n,s]),Z((n,s)=>{""===n||s.ctrl&&"c"===n?t?t():e():s.escape?e():i?(s.return||" "===n)&&e():" "===n?o(e=>!e):s.return&&r(e=>Math.min(e+1,wT.length))}),B.createElement(K,{flexDirection:"column"},B.createElement(K,null,B.createElement(Y,{bold:!0},"Meet Your Coding Taste")),B.createElement(K,null,B.createElement(Y,{dimColor:!0},"Command Code learns your coding style as you work.")),B.createElement(K,null,B.createElement(Y,{dimColor:!0},"Here's how your preferences evolve in real-time:")),B.createElement(K,{flexDirection:"column",marginY:1},wT.slice(0,n).map((e,t)=>"user"===e.type?B.createElement(K,{key:t},B.createElement(Y,null,be.pointer," ",e.text)):B.createElement(K,{key:t,marginBottom:1,marginTop:0,marginLeft:1},B.createElement(K,null,B.createElement(Y,{dimColor:!0},"⎿"),B.createElement(K,{flexDirection:"column",marginLeft:2,marginTop:0},B.createElement(Y,{color:On.TEXT},e.text),e.details&&B.createElement(Y,{dimColor:!0},"Saved(",e.details,")")))))),i?B.createElement(K,{flexDirection:"column",marginY:1},B.createElement(Y,{bold:!0,color:On.TEXT},"Demo Complete!"),B.createElement(Y,null,"Command Code will now use these preferences to generate"),B.createElement(Y,null,"better suggestions tailored to your coding style. The"),B.createElement(Y,null,"more you code, the smarter it gets."),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"Press Enter to get started →"))):B.createElement(K,null,B.createElement(Y,{dimColor:!0},"[SPACE: pause] [ENTER: next] [ESC: skip]"+(s?" (paused)":""))))},"TasteDemoComponent"),bT=__name(({onClose:e,onExit:t})=>{const[n,r]=W(ZE.getEvents()),[s,o]=W(0);Z((n,r)=>{""===n||r.ctrl&&"c"===n?t():r.ctrl&&"t"===n&&e()},{isActive:!0}),G(()=>{const e=__name(()=>{r(ZE.getEvents())},"handleNewEvent"),t=__name(()=>{r([])},"handleCleared");return ZE.on("new-event",e),ZE.on("cleared",t),()=>{ZE.off("new-event",e),ZE.off("cleared",t)}},[]),G(()=>{const e=__name(()=>{kC(),o(e=>e+1)},"handleResize");return process.stdout.on("resize",e),()=>{process.stdout.off("resize",e)}},[]);const i=__name(e=>["learned","refactored"].includes(e),"isLearningEvent"),a=__name(e=>{const t=e.match(/^(learned|upgraded|downgraded|refactored|moved):\s*(.*)$/i);if(t){const e=t[1].toLowerCase();let n=t[2];const r=n.match(/^(.+?)\.?\s+Confidence:\s*(\d+\.?\d*)$/);let s=n,o=null;if(r){s=r[1].trim();const e=(100*parseFloat(r[2])).toFixed(2);o=`confidence: ${parseFloat(e).toString()}%`}const i={learned:"Learned",upgraded:"Reinforced",downgraded:"Downgraded",refactored:"Refactored",moved:"Moved"}[e]||e.charAt(0).toUpperCase()+e.slice(1);return{type:e,label:i,content:s,confidence:o}}return{type:null,label:null,content:e,confidence:null}},"formatLearningMessage"),l=__name(e=>{const t=e.match(/^(.+?)\s*\((\d+)%\s*(?:→|->)\s*(\d+)%\)$/);if(!t)return null;const n=t[1].trim(),r=parseInt(t[2],10),s=parseInt(t[3],10);return{text:n,oldPercent:r,newPercent:s,diff:s-r}},"parsePercentageChange"),u=__name(e=>{if(!e)return null;const t=e.match(/moved to (.+)/);if(!t)return null;const n=t[1],r=n.split("/"),s=r[r.length-1];return{category:r.slice(0,-1).join("/"),oldPath:s,newPath:n,fullPath:`.commandcode/taste/${n}`}},"formatMovedDetails"),d=H(()=>(process.stdout.rows??24)-1,[s]);return B.createElement(K,{flexDirection:"column",width:"100%",height:d,justifyContent:"flex-start",alignItems:"flex-start",padding:0,margin:0},B.createElement(K,{flexDirection:"column",marginBottom:1},B.createElement(Ze,{name:"vice"},B.createElement(Y,null,BC()))),B.createElement(yT,{hashPrefix:!0,title:"Taste Feed",titleColor:"white",suffix:"ctrl+t to close"}),B.createElement(K,{flexDirection:"column"},0===n.length?B.createElement(K,{flexDirection:"column"},B.createElement(K,{flexDirection:"column",marginBottom:1},B.createElement(Y,null,"Start using Command Code and it will begin recording your coding taste."),B.createElement(Y,{dimColor:!0},"Your preferences, patterns, and style will appear here in real-time.")),B.createElement(ne,{count:2}),B.createElement(yT,{title:"DEMO",titleColor:"white",subPrefix:!0}),B.createElement(ST,{onComplete:()=>{e()},onExit:t})):B.createElement(K,{flexDirection:"column"},n.map(e=>{if(i(e.type)){const{type:t,label:n,content:r,confidence:s}=a(e.message),o="moved"===t?u(e.details):null,i="upgraded"===t||"downgraded"===t?l(r):null;return B.createElement(K,{key:e.id,marginBottom:1},B.createElement(K,{flexDirection:"column"},B.createElement(K,null,B.createElement(K,{flexShrink:0},B.createElement(Y,{backgroundColor:On.BADGE_BG,color:On.BADGE_FG,bold:!0},`${cv}${n}${cv}`)),o?B.createElement(Y,{dimColor:!0}," ","(",o.fullPath,")"):e.details?B.createElement(Y,{dimColor:!0}," ","(",e.details,")"):null),B.createElement(K,{marginLeft:1},B.createElement(Y,{dimColor:!0},"⎿"," "),o?B.createElement(B.Fragment,null,B.createElement(Y,null," ",o.category," ","package ("),B.createElement(Y,{dimColor:!0},o.oldPath),B.createElement(Y,null," ",be.arrowRight," ",o.newPath),B.createElement(Y,null,")")):i?B.createElement(B.Fragment,null,B.createElement(Y,null," ",i.text," ","("),B.createElement(Y,{dimColor:!0},"confidence:"," "),B.createElement(Y,{dimColor:!0},i.oldPercent,"%"),B.createElement(Y,null," ",be.arrowRight," "),B.createElement(Y,{color:i.diff>0?Ln.GREEN:Ln.RED},i.newPercent,"%"),B.createElement(Y,null,")")):B.createElement(B.Fragment,null,B.createElement(Y,null," ",r),s&&B.createElement(Y,{dimColor:!0}," ","(",s,")")))))}return B.createElement(K,{key:e.id,marginBottom:1},B.createElement(Y,{dimColor:!0},be.pointerSmall," ",e.message))}))))},"LearningFeedFull");function LearningView({setShowLearningFeed:e,setStaticKey:t,onExit:n}){return B.createElement(bT,{onClose:()=>{kC(),e(!1),t(e=>e+1)},onExit:n})}__name(LearningView,"LearningView"),Nt(),Nt(),rr(),PC(),nr();var ET=__name(({onClose:e,onSettingsChange:t,staticKey:n})=>{const[r,s]=W(!1),[o,i]=W(!0);G(()=>{__name(async()=>{try{const e=await isTasteLearningEnabled();s(e)}catch(e){}finally{i(!1)}},"loadSettings")()},[]),Z((t,n)=>{if(!n.return&&" "!==t)return n.escape?(kC(),void e()):void 0;a()});const a=__name(async()=>{const e=!r;s(e);try{await setTasteLearning({tasteLearning:e}),t?.()}catch(t){s(!e)}},"toggleTasteLearning");return o?B.createElement(K,{key:n,borderStyle:"single",borderColor:Ln.BLUE,padding:1,flexDirection:"column"},B.createElement(Y,{color:Ln.BLUE,bold:!0},"Taste Settings"),B.createElement(Y,{dimColor:!0},"Loading configuration...")):B.createElement(K,{key:n,borderStyle:"single",borderColor:Ln.GRAY,padding:1,flexDirection:"column"},B.createElement(Y,{bold:!0},"Taste Learning"),B.createElement(Y,{dimColor:!0},"Configure taste learning preferences for this project"),B.createElement(K,{marginTop:1}),B.createElement(K,{justifyContent:"space-between"},B.createElement(Y,null,"Taste learning",B.createElement(Y,{dimColor:!0}," - Learn from your interactions")),B.createElement(Y,{color:r?Ln.GREEN:Ln.GRAY},r?"enabled":"disabled")),B.createElement(K,{marginTop:1}),B.createElement(Y,{dimColor:!0},"Taste data stored in .commandcode/taste/taste.md"),B.createElement(Y,{dimColor:!0},"Enter/Space to toggle • Esc to close"))},"TasteConfig");function TasteConfigView({staticKey:e,setShowTasteConfig:t,loadTasteStatus:n}){return B.createElement(B.Fragment,null,B.createElement(nT,{staticKey:e}),B.createElement(K,{flexDirection:"column",width:"100%"},B.createElement(K,{marginBottom:1},B.createElement(Y,{dimColor:!0},"Press Esc to return to conversation")),B.createElement(ET,{onClose:()=>t(!1),onSettingsChange:n,staticKey:e})))}__name(TasteConfigView,"TasteConfigView"),Nt(),Nt(),gi(),PC(),Ot(),rr();var CT=__name(e=>Math.ceil(e.length/4),"estimateTokens"),vT=__name(({onClose:e})=>{const[t,n]=W([]),[r,s]=W(!0),[o,i]=W(null),[a,l]=W(0);G(()=>{__name(async()=>{try{const{personal:e,project:t}=await loadAllSkillSummaries(),r=[...e.map(e=>({label:e.name,value:e.filePath,location:"user",description:e.description,filePath:e.filePath})),...t.map(e=>({label:e.name,value:e.filePath,location:"project",description:e.description,filePath:e.filePath}))];n(r)}catch(e){i(e instanceof Error?e.message:"Failed to load skills")}finally{s(!1)}},"loadSkills")()},[]);const u=t.filter(e=>"project"===e.location),d=t.filter(e=>"user"===e.location),m=[...u,...d],p=__name(async t=>{try{await et([{file:t.filePath,line:1}]),kC(),e()}catch(e){e instanceof Error&&e.message.includes("$EDITOR environment variable")?i(g()):i(e instanceof Error?e.message:"Failed to open skill in editor")}},"handleSelectSkill");Z((t,n)=>{if(n.escape)return kC(),void e();if(n.upArrow)l(e=>Math.max(0,e-1));else if(n.downArrow)l(e=>Math.min(m.length-1,e+1));else if(n.return){const e=m[a];e&&p(e)}});const g=__name(()=>{const e=process.platform;return"win32"===e?'No editor found. Set $EDITOR: setx EDITOR "code"':"No editor found. Set $EDITOR: echo 'export EDITOR=\"code\"' >> "+("darwin"===e?"~/.zshrc":"~/.bashrc")},"getEditorSetupMessage");return r?B.createElement(K,{flexDirection:"column",paddingX:0,width:"100%"},B.createElement(Y,{color:Mn,bold:!0},"Agent Skills"),B.createElement(Y,{dimColor:!0},"Loading skills...")):o?B.createElement(K,{flexDirection:"column",paddingX:0,width:"100%"},B.createElement(Y,{color:Ln.RED,bold:!0},"Agent Skills"),B.createElement(Y,{dimColor:!0},o),B.createElement(K,{marginTop:1}),B.createElement(Y,{dimColor:!0},"Press ",B.createElement(Y,{bold:!0},"Esc")," to close")):0===t.length?B.createElement(K,{flexDirection:"column",paddingX:0,width:"100%"},B.createElement(Y,{color:Mn,bold:!0},"Agent Skills"),B.createElement(K,{marginBottom:1},B.createElement(Y,{dimColor:!0},"No skills found")),B.createElement(Y,{dimColor:!0},"Create skills in:"),B.createElement(Y,{dimColor:!0}," ~/",".commandcode","/","skills","/ (user)"),B.createElement(Y,{dimColor:!0}," ",".commandcode","/","skills","/ (project)"),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"Press ",B.createElement(Y,{bold:!0},"Esc")," to close"))):B.createElement(K,{flexDirection:"column",paddingX:0,width:"100%"},B.createElement(K,null,B.createElement(Y,{color:Mn,bold:!0},"Skills "),B.createElement(Y,{dimColor:!0},m.length," skills")),u.length>0&&B.createElement(K,{flexDirection:"column",marginTop:1},B.createElement(K,null,B.createElement(Y,{color:Wn,bold:!0},"Project skills "),B.createElement(Y,{color:Wn},"(",".commandcode","/","skills",")")),u.map((e,t)=>{const n=a===t;return B.createElement(K,{key:e.value},B.createElement(Y,{color:n?Ln.GREEN:Ln.WHITE},e.label),B.createElement(Y,{dimColor:!0}," · ~",CT(e.description)," description tokens"))})),d.length>0&&B.createElement(K,{flexDirection:"column",marginTop:1},B.createElement(K,null,B.createElement(Y,{color:Wn,bold:!0},"User skills "),B.createElement(Y,{color:Wn},"(~/",".commandcode","/","skills",")")),d.map((e,t)=>{const n=a===u.length+t;return B.createElement(K,{key:e.value},B.createElement(Y,{color:n?Ln.GREEN:Ln.WHITE},e.label),B.createElement(Y,{dimColor:!0}," · ~",CT(e.description)," description tokens"))})),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0,italic:!0},"Esc to close")))},"SkillsConfig");function SkillsConfigView({staticKey:e,setShowSkillsConfig:t}){return B.createElement(B.Fragment,null,B.createElement(nT,{staticKey:e}),B.createElement(K,{flexDirection:"column",width:"100%"},B.createElement(K,{marginBottom:1},B.createElement(Y,{dimColor:!0},"Press Esc to return to conversation")),B.createElement(vT,{onClose:()=>t(!1),staticKey:e})))}function moveFocusDown(e,t){const{suggestionCount:n,activeDirCount:r}=t;return"input"===e.zone?n>0?{...e,zone:"suggestions",suggestionIndex:0}:r>0?{...e,zone:"active-dir",activeDirIndex:0}:e:"suggestions"===e.zone?e.suggestionIndex<n-1?{...e,suggestionIndex:e.suggestionIndex+1}:r>0?{...e,zone:"active-dir",activeDirIndex:0}:{...e,zone:"input"}:e.activeDirIndex<r-1?{...e,activeDirIndex:e.activeDirIndex+1}:{...e,zone:"input"}}function moveFocusUp(e,t){const{suggestionCount:n,activeDirCount:r}=t;return"input"===e.zone?r>0?{...e,zone:"active-dir",activeDirIndex:r-1}:n>0?{...e,zone:"suggestions",suggestionIndex:n-1}:e:"suggestions"===e.zone?e.suggestionIndex>0?{...e,suggestionIndex:e.suggestionIndex-1}:{...e,zone:"input"}:e.activeDirIndex>0?{...e,activeDirIndex:e.activeDirIndex-1}:n>0?{...e,zone:"suggestions",suggestionIndex:n-1}:{...e,zone:"input"}}function getAdjustedSuggestionOffset(e){const{selectedIndex:t,currentOffset:n,maxVisible:r,totalSuggestions:s}=e;return s<=r?0:t<n?t:t>=n+r?t-r+1:n}function getSuggestionBase(e){const n=resolveDirectoryPath(e),r=/[\\/]$/.test(e),s=e.replace(/\\/g,"/");if(s.endsWith("/."))return{searchDirectory:n,prefix:".",outputPrefix:`${s.slice(0,-1)}`};if(r)return{searchDirectory:n,prefix:"",outputPrefix:s};const o=s.lastIndexOf("/");return-1===o?{searchDirectory:t.dirname(n),prefix:t.basename(n),outputPrefix:""}:{searchDirectory:t.dirname(n),prefix:t.basename(n),outputPrefix:s.slice(0,o+1)}}function getDirectorySuggestions(e){const t=e.trim();if(!t)return[];try{const{searchDirectory:e,prefix:n,outputPrefix:r}=getSuggestionBase(t),s=n.startsWith(".")||r.includes("/.");return S.readdirSync(e,{withFileTypes:!0}).filter(e=>e.isDirectory()).filter(e=>!!s||!e.name.startsWith(".")).filter(e=>!n||e.name.toLowerCase().startsWith(n.toLowerCase())).sort((e,t)=>e.name.localeCompare(t.name)).map(e=>`${r}${e.name}/`)}catch(e){const t=e.code;return"ENOENT"!==t&&"ENOTDIR"!==t&&console.error(`Warning: Could not list directory suggestions: ${t}`),[]}}function getFooterText(e){return"active-dir"===e.focusZone?"[Del] Remove [↑↓] Navigate [Tab] Autocomplete [Esc] Close":"[Enter] Add [↑↓] Navigate [Tab] Autocomplete [Esc] Close"}__name(SkillsConfigView,"SkillsConfigView"),Nt(),Nt(),rr(),vn(),zt(),Nt(),zt(),__name(function createInitialFocusState(){return{zone:"input",suggestionIndex:0,activeDirIndex:0}},"createInitialFocusState"),__name(moveFocusDown,"moveFocusDown"),__name(moveFocusUp,"moveFocusUp"),__name(getAdjustedSuggestionOffset,"getAdjustedSuggestionOffset"),__name(getSuggestionBase,"getSuggestionBase"),__name(getDirectorySuggestions,"getDirectorySuggestions"),__name(getFooterText,"getFooterText");var TT=__name(({onClose:e})=>{const[t,n]=W(""),[r,s]=W(null),[o,i]=W([]),[a,l]=W(getAdditionalDirectories()),[u,d]=W({zone:"input",suggestionIndex:0,activeDirIndex:0}),[m,p]=W(0);G(()=>{i(t?getDirectorySuggestions(t):[]),d(e=>({...e,zone:"input"})),p(0)},[t]),G(()=>{if(!r||"success"!==r.tone)return;const e=setTimeout(()=>{s(null)},5e3);return()=>clearTimeout(e)},[r]);const g=__name(e=>{const t=addDirectory(e);"error"!==t.status?"skipped"!==t.status?(s({tone:"success",text:`Added ${t.displayPath} to directory scope`}),n(""),l(getAdditionalDirectories()),d({zone:"input",suggestionIndex:0,activeDirIndex:0})):s({tone:"warning",text:t.message}):s({tone:"error",text:t.message})},"submitPath"),h=__name(e=>{if(!removeAdditionalDirectory(e))return s({tone:"error",text:`${formatDirectoryForDisplay(e)} is no longer in workspace scope`}),void l(getAdditionalDirectories());s({tone:"success",text:`Removed ${formatDirectoryForDisplay(e)} from directory scope`}),l(getAdditionalDirectories()),d(e=>{if("active-dir"!==e.zone)return e;const t=Math.max(0,e.activeDirIndex-1);return{...e,activeDirIndex:t}})},"handleRemove");Z((t,r)=>{if(r.escape)e();else{if(r.return)return"suggestions"===u.zone&&o[u.suggestionIndex]?void g(o[u.suggestionIndex]):void 0;if((r.delete||r.backspace)&&"active-dir"===u.zone&&a[u.activeDirIndex])h(a[u.activeDirIndex]);else{if(r.tab&&o.length>0){const e=o[u.suggestionIndex]??o[0];return void(e&&(n(e),d(e=>({...e,zone:"input"})),s(null)))}r.downArrow?d(e=>moveFocusDown(e,{suggestionCount:o.length,activeDirCount:a.length})):r.upArrow&&d(e=>moveFocusUp(e,{suggestionCount:o.length,activeDirCount:a.length}))}}}),G(()=>{"suggestions"===u.zone&&p(e=>getAdjustedSuggestionOffset({selectedIndex:u.suggestionIndex,currentOffset:e,maxVisible:8,totalSuggestions:o.length}))},[u,o.length]),G(()=>{d(e=>"suggestions"===e.zone&&e.suggestionIndex>=o.length?{...e,zone:"input",suggestionIndex:Math.max(0,o.length-1)}:"active-dir"===e.zone&&e.activeDirIndex>=a.length?{...e,zone:"input",activeDirIndex:Math.max(0,a.length-1)}:e)},[o.length,a.length]);const f=o.slice(m,m+8),y=getFooterText({focusZone:u.zone});return B.createElement(K,{flexDirection:"column",borderStyle:"single",borderColor:Ln.CYAN,paddingX:1,paddingY:0},B.createElement(Y,{bold:!0,color:Ln.CYAN},"Add directory to workspace"),B.createElement(Y,{color:Ln.GRAY},"Command Code will be able to read files in this directory and make edits when accept edits mode is on."),B.createElement(K,{marginTop:1,flexDirection:"column"},B.createElement(Y,{color:Ln.GRAY},"Added directories"),0===a.length?B.createElement(Y,{color:Ln.GRAY}," None yet"):a.map((e,t)=>{const n="active-dir"===u.zone&&u.activeDirIndex===t;return B.createElement(Y,{key:e,color:n?Ln.YELLOW:Ln.GREEN,bold:n},n?` ${be.pointer} `:" ",formatDirectoryForDisplay(e))})),B.createElement(K,{marginTop:1},B.createElement(Y,{bold:!0,color:Ln.WHITE},"Path")),B.createElement(K,null,B.createElement(TextInput,{value:t,focus:"input"===u.zone,prefix:`${"input"===u.zone?be.pointer:" "} `,prefixColor:"input"===u.zone?Ln.CYAN:Ln.GRAY,onChange:e=>{n(e),s(null)},onSubmit:g})),!t&&B.createElement(K,{marginTop:1},B.createElement(Y,{color:Ln.GRAY},"Examples: ../shared ~/docs /abs/path")),r&&B.createElement(K,{marginTop:1},B.createElement(Y,{color:{error:Ln.RED,warning:Ln.YELLOW,success:Ln.GREEN}[r.tone]},r.text)),o.length>0&&B.createElement(K,{flexDirection:"column",marginTop:1},B.createElement(Y,{color:Ln.GRAY},"Suggestions"),f.map((e,t)=>{const n=m+t,r="suggestions"===u.zone&&u.suggestionIndex===n;return B.createElement(Y,{key:e,color:r?Ln.CYAN:Ln.GRAY,bold:r},r?` ${be.pointer} `:" ",e)})),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},y)))},"AddDirModal");Nt(),Nt(),Ot(),Nt(),Nt(),Ot(),JE(),rr();var kT=__name(()=>t.join(f.homedir(),".commandcode","agents"),"getRootAgentDir"),_T=__name(()=>t.join(process.cwd(),".commandcode","agents"),"getLocalAgentDir"),PT=__name(({config:e,onSaveComplete:n,viewOnly:r=!1})=>{const[s,o]=W("idle"),[i,a]=W(""),l=[...WE.map(e=>e.name),...QE.map(e=>e.name)],u=__name(async()=>{if(!e.agentType||!e.sysPrompt)return o("error"),void a("Agent configuration is incomplete");o("saving");try{const r="personal"===e.location?kT():_T();await L.mkdir(r,{recursive:!0});const s=`${e.agentType}.md`,o=t.join(r,s),i=Array.from(e.selectedTools).map(e=>VE[e]||e).join(", "),a=0===e.selectedTools.size?"none":e.selectedTools.size===l.length?'"*"':JSON.stringify(i),u=`---\nname: "${e.agentType}"\ndescription: ${JSON.stringify(e.ccToolDefinition)}\ntools: ${a}\n---\n\n${e.sysPrompt}\n`;await L.writeFile(o,u,"utf-8"),n(e.agentType)}catch(e){console.error("Error saving agent:",e),o("error"),a(e instanceof Error?e.message:"Unknown error occurred")}},"handleSaveAgent");Z((e,t)=>{r||!t.return||"idle"!==s&&"error"!==s||u()});const d=Array.from(e.selectedTools).map(e=>VE[e]||e).join(", "),m="personal"===e.location?`~/.commandcode/agents/${e.agentType}`:`.commandcode/agents/${e.agentType}`;return B.createElement(K,{flexDirection:"column",gap:1},B.createElement(K,{flexDirection:"column"},B.createElement(K,{gap:1},B.createElement(Y,{color:Ln.WHITE,bold:!0},"Name:"),B.createElement(Y,{color:Ln.GRAY},e.agentType)),B.createElement(K,{gap:1},B.createElement(Y,{color:Ln.WHITE,bold:!0},"Location:"),B.createElement(Y,{color:Ln.GRAY},m)),B.createElement(K,{gap:1},B.createElement(Y,{color:Ln.WHITE,bold:!0},"Tools:"),B.createElement(Y,{color:Ln.GRAY},0===e.selectedTools.size?"None":e.selectedTools.size===l.length?"*":d))),B.createElement(K,{gap:1},B.createElement(Y,{color:Ln.WHITE,bold:!0},"Description"),B.createElement(Y,{color:Ln.GRAY},"(Tells ","Command Code"," when to use this agent):")),B.createElement(Y,{color:Ln.GRAY},e.ccToolDefinition),B.createElement(K,{gap:1},B.createElement(Y,{color:Ln.WHITE,bold:!0},"System Prompt:")),B.createElement(Y,{color:Ln.GRAY},e.sysPrompt),!r&&B.createElement(K,{marginTop:1},"idle"===s&&B.createElement(K,{gap:1},B.createElement(Y,{color:Ln.GREEN,dimColor:!0},"Press"),B.createElement(Y,{color:Ln.GREEN,bold:!0},"Enter"),B.createElement(Y,{color:Ln.GREEN,dimColor:!0},"to save • Esc to cancel")),"saving"===s&&B.createElement(Y,{color:Ln.YELLOW},"Saving agent..."),"saved"===s&&B.createElement(Y,{color:Ln.GREEN},be.tick," ",i),"error"===s&&B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Ln.RED},be.cross," Error: ",i),B.createElement(Y,{color:Ln.GRAY},"Press Enter to retry"))))},"AgentSummary");JE(),rr();var AT=__name(({agent:e,onBack:t,setRevalidateAgent:n,isReadOnly:r=!1})=>{const[s,o]=W("menu"),i=[...WE.map(e=>e.name),...QE.map(e=>e.name)];let a=new Set;if("*"===e.tools||'"*"'===e.tools)a=new Set(i);else if(e.tools&&"none"!==e.tools){const t=e.tools.replace(/^"|"$/g,"").split(",").map(e=>e.trim()).map(e=>KE[e]||e);a=new Set(t)}const l={location:e.location,method:"manual",agentType:e.name,sysPrompt:e.sysPrompt,ccToolDefinition:e.description,recommendedMethodDescription:"",selectedTools:a},u=[{label:"1. View agent",value:"view"},...r?[]:[{label:"2. Delete agent",value:"delete"}],{label:r?"2. Back":"3. Back",value:"back"}],d=__name(e=>{"back"===e.value?t():"view"===e.value?o("view"):"edit"===e.value?o("edit"):"delete"===e.value&&o("delete")},"handleMenuSelect");if(Z((e,n)=>{n.escape&&("menu"===s?t():o("menu")),n.return&&"view"===s&&o("menu")}),"view"===s)return B.createElement(K,{flexDirection:"column"},B.createElement(PT,{config:l,onSaveComplete:()=>o("menu"),viewOnly:!0}),B.createElement(K,{marginTop:1},B.createElement(Y,{color:Ln.GRAY},"Press Enter to go back")));if("edit"===s)return B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Ln.YELLOW},"Edit functionality coming soon..."),B.createElement(Y,{color:Ln.GRAY},"Press Esc to go back"));if("delete"===s){const r=[{label:"1. Yes, delete",value:"confirm-delete"},{label:"2. No, cancel",value:"cancel"}],s=__name(async r=>{if("confirm-delete"===r.value)try{await L.unlink(e.filePath),n(!0),t()}catch(e){console.error(`Failed to delete agent: ${e}`),o("menu")}else o("menu")},"handleDeleteSelect");return B.createElement(K,{flexDirection:"column",gap:1},B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Ln.RED},"Delete agent"),B.createElement(Y,{color:Ln.GRAY},"Are you sure you want to delete the agent ",e.name,"?")),B.createElement(K,null,B.createElement(Ke,{items:r,onSelect:s,indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:Ln.WHITE},e?">":" "),itemComponent:({isSelected:e,label:t})=>B.createElement(Y,{color:e?Ln.WHITE:Ln.GRAY},` ${t}`)})))}return B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Ln.WHITE,bold:!0},e.name),B.createElement(K,{marginTop:1},B.createElement(Ke,{items:u,onSelect:d,indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:Ln.WHITE},e?">":" "),itemComponent:({isSelected:e,label:t})=>B.createElement(Y,{color:e?Ln.WHITE:Ln.GRAY},` ${t}`)})),B.createElement(K,{marginTop:1},B.createElement(Y,{color:Ln.GRAY},"Press ↑↓ to navigate · Enter to select · Esc to go back")))},"AgentDetails");_l(),rr();var xT=__name(({handleSelect:e,createdAgentName:n})=>{const[r,s]=W([]),[o,i]=W([]),[a,l]=W([]),[u,d]=W(!0),[m,p]=W(!1),[g,h]=W(null),[y,w]=W(!1),S=__name(()=>t.join(f.homedir(),".commandcode","agents"),"getRootAgentDir"),b=__name(()=>t.join(process.cwd(),".commandcode","agents"),"getLocalAgentDir"),E=__name(async(e,n)=>{try{p(!1);const r=(await L.readdir(e)).filter(e=>e.endsWith(".md"));return(await Promise.all(r.map(async r=>{try{const s=t.join(e,r),o=await L.readFile(s,"utf-8"),{data:i,content:a}=$e(o);let l=i.tools||"";return"*"!==l&&'"*"'!==l||(l="*"),{name:i.name||r.replace(".md",""),description:i.description||"",tools:l,sysPrompt:a.trim(),location:n,filePath:s}}catch(e){return console.error(`Error loading agent from ${r}:`,e),null}}))).filter(e=>null!==e)}catch{return[]}},"loadAgentsFromDirectory");G(()=>{__name(async()=>{d(!0);const[e,t]=await Promise.all([E(S(),"personal"),E(b(),"project")]),n=vl.map(e=>({name:e.name,description:e.description,tools:Array.isArray(e.tools)?e.tools.join(", "):e.tools,sysPrompt:e.systemPrompt,location:"personal",filePath:`__builtin__:${e.name}`}));s(e),i(t),l(n),d(!1)},"loadAgents")()},[m]);const C=[{label:"Create new agent",value:"create_new_agent"}];r.forEach(e=>{C.push({label:e.name,value:e.filePath})}),o.forEach(e=>{C.push({label:e.name,value:e.filePath})});const v=r.length+o.length,T=__name(t=>{if("create_new_agent"===t.value)e(t);else{const e=[...r,...o].find(e=>e.filePath===t.value);e&&(h(e),w(!0))}},"handleAgentSelect");if(u)return B.createElement(Y,{color:Ln.GRAY},"Loading agents...");if(y&&g){const e=g.filePath.startsWith("__builtin__:");return B.createElement(AT,{agent:g,onBack:()=>{w(!1),h(null)},setRevalidateAgent:p,isReadOnly:e})}const k=__name(({isSelected:e,label:t})=>{const n=C.find(e=>e.label===t),s=n?.value||"",i=r[0]?.filePath===s,a=o[0]?.filePath===s;return B.createElement(K,{flexDirection:"column"},i&&r.length>0&&B.createElement(K,{marginTop:1},B.createElement(Y,{color:Ln.GRAY,bold:!0},"User agents")),a&&o.length>0&&B.createElement(K,{marginTop:1},B.createElement(Y,{color:Ln.GRAY,bold:!0},"Project agents")),B.createElement(K,null,B.createElement(Y,{color:Ln.WHITE},e?">":" "),B.createElement(Y,{color:e?Ln.WHITE:Ln.GRAY}," ",t)))},"CustomItemComponent");return B.createElement(K,{flexDirection:"column"},B.createElement(K,{marginBottom:1},B.createElement(Y,{color:Ln.WHITE,bold:!0},"Agents"),v>0?B.createElement(Y,{color:Ln.GRAY}," ","(",v," agent",v>1?"s":"",")"):B.createElement(Y,{color:Ln.GRAY}," (No custom agents)")),n&&B.createElement(K,{flexDirection:"column",marginBottom:1},B.createElement(Y,{color:Ln.GREEN,dimColor:!0},"Created agent: ",n)),B.createElement(Ke,{items:C,onSelect:T,indicatorComponent:()=>null,itemComponent:k}),a.length>0&&B.createElement(K,{flexDirection:"column",marginTop:1},B.createElement(Y,{color:Ln.GRAY,bold:!0},"Default agents"),a.map(e=>B.createElement(Y,{key:e.filePath,color:Ln.GRAY}," ",e.name.charAt(0).toUpperCase()+e.name.slice(1)))),B.createElement(K,{flexDirection:"column",marginTop:1},B.createElement(Y,{color:Ln.GRAY},"Create specialized subagents that Command Code can delegate to."),B.createElement(Y,{color:Ln.GRAY},"Each subagent has its own context window, custom system prompt, and specific tools.")))},"ManageAgents");Nt(),Ot(),rr(),JE(),Nt(),Nt(),Ot(),rr();var IT=__name(({onSelect:e})=>B.createElement(Ke,{items:[{label:"1. Project (.commandcode/agents/)",value:"project"},{label:"2. Personal (~/.commandcode/agents/)",value:"personal"}],onSelect:t=>{"project"!==t.value&&"personal"!==t.value||e(t.value)},indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:e?Ln.WHITE:Ln.GRAY},e?">":" "),itemComponent:({isSelected:e,label:t})=>B.createElement(Y,{color:e?Ln.WHITE:Ln.GRAY},` ${t}`)}),"LocationSelector");Nt(),vn(),Ot(),JE(),_n(),Nn(),Pl(),rr();var NT=__name(({step:e,agentType:t,sysPrompt:n,ccToolDefinition:r,onAgentTypeChange:s,onSysPromptChange:o,onCCToolDefinitionChange:i,onAgentTypeSubmit:a,onSysPromptSubmit:l,onCCToolDefinitionSubmit:u})=>{const[d,m]=W(!1),[p,g]=W(!1),h=V(async e=>{const t=processBracketedPaste(e);if(!t.isPasteStart||d){if(!d||t.isPasteEnd){if(d&&t.isPasteEnd){m(!1);const e=await detectClipboardText();return void(e?o(e):t.cleanedContent&&o(t.cleanedContent))}o(e)}}else if(m(!0),t.isPasteEnd){m(!1);const e=await detectClipboardText();return void(e?o(e):t.cleanedContent&&o(t.cleanedContent))}},[d,o]),f=V(async e=>{const t=processBracketedPaste(e);if(!t.isPasteStart||p){if(!p||t.isPasteEnd){if(p&&t.isPasteEnd){g(!1);const e=await detectClipboardText();return void(e?i(e):t.cleanedContent&&i(t.cleanedContent))}i(e)}}else if(g(!0),t.isPasteEnd){g(!1);const e=await detectClipboardText();return void(e?i(e):t.cleanedContent&&i(t.cleanedContent))}},[p,i]);return"agentType"===e?B.createElement(B.Fragment,null,B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Ln.WHITE},"Enter a unique identifier for your agent:"),t&&(Object.values(VE).some(e=>Ne(e)===Ne(t))||Object.keys(VE).some(e=>Ne(e)===Ne(t)))&&B.createElement(Y,{color:Ln.RED},be.warning," This name conflicts with an existing tool name. Please choose a different name."),t&&isReservedAgentName(Ne(t))&&B.createElement(Y,{color:Ln.RED},be.warning," This name is reserved. Reserved names:"," ",Cl.join(", "))),B.createElement(TextInput,{showCursor:!0,value:t||"",onSubmit:()=>{if(null===t||0===t.trim().length)return;const e=Ne(t);Object.values(VE).some(t=>Ne(t)===e)||Object.keys(VE).some(t=>Ne(t)===e)||isReservedAgentName(e)||a()},onChange:s,placeholder:"e.g. code-reviewer, unit-tester"})):"sysPrompt"===e?B.createElement(B.Fragment,null,B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Ln.WHITE},"Enter the system prompt for your agent:"),B.createElement(Y,{color:Ln.GRAY},"Be comprehensive for best results.")),B.createElement(TextInput,{showCursor:!0,value:n||"",onSubmit:()=>{null!==n&&0!==n.trim().length&&l()},onChange:h,placeholder:"You are a helpful coding reviewer..."})):"ccToolDefinition"===e?B.createElement(B.Fragment,null,B.createElement(Y,{color:Ln.WHITE},"When should ","Command Code"," use this agent?"),B.createElement(TextInput,{showCursor:!0,value:r,onSubmit:()=>{0!==r.trim().length&&u()},onChange:f,placeholder:"e.g., Use this agent when you are done writing code..."})):null},"ManualFlow");Nt(),rr();var RT=__name(({onSelect:e})=>B.createElement(Ke,{items:[{label:"1. Generate with Command Code (recommended)",value:"recommended"},{label:"2. Manual configuration",value:"manual"}],onSelect:t=>{"recommended"!==t.value&&"manual"!==t.value||e(t.value)},indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:e?Ln.WHITE:Ln.GRAY},e?">":" "),itemComponent:({isSelected:e,label:t})=>B.createElement(Y,{color:e?Ln.WHITE:Ln.GRAY},` ${t}`)}),"MethodSelector");Nt(),vn(),Nt(),rr();var $T=["·","○","◇","☆","✧","☆","◇","○","⌘"],LT=[12,5,4,4,4,4,4,5,16],MT=[5,4,4,4,4,4,5];function getWaveSymbol(e){const t=e%88;let n=0;for(let e=0;e<LT.length;e++)if(n+=LT[e],t<n)return $T[e];const r=t-58;n=0;for(let e=0;e<MT.length;e++)if(n+=MT[e],r<n)return $T[7-e];return $T[0]}function ShimmerText({text:e,offset:t}){const n=__name(e=>{const n=e-(t-5);return n>=0&&n<Jn.length?Jn[n]:Xn},"getCharColor");return B.createElement(Y,null,e.split("").map((e,t)=>B.createElement(Y,{key:t,color:n(t)},e)))}function CMDIcon({frame:e}){return B.createElement(Y,{color:Mn,bold:!0},getWaveSymbol(e)+" ")}function formatToken(e){return e<1e3?`${e}`:`${(e/1e3).toFixed(1)}k`}function formatTime3(e){return e<6e4?`${Math.floor(e/1e3)}s`:`${Math.floor(e/6e4)}m ${Math.floor(e%6e4/1e3)}s`}__name(getWaveSymbol,"getWaveSymbol"),__name(ShimmerText,"ShimmerText"),__name(CMDIcon,"CMDIcon"),__name(formatToken,"formatToken"),__name(formatTime3,"formatTime");var OT=__name(({status:e,timeElapsed:t,tokens:n})=>{const[r,s]=W(0),[o,i]=W(0),a=Q(n);a.current=n;const l=getTerminalWidth();G(()=>{const e=setInterval(()=>{s(e=>(e+1)%88),i(e=>{const t=a.current;if(e===t)return e;const n=t-e,r=e+Math.sign(n)*Math.max(1,Math.ceil(Math.abs(n)/10));return n>0?Math.min(r,t):Math.max(r,t)})},80);return()=>clearInterval(e)},[]);const u=r%(e.length+10),d=l>70,m=l>40&&l<=70;return B.createElement(K,{width:l,height:1,paddingLeft:0,marginLeft:0},B.createElement(CMDIcon,{frame:4*r}),B.createElement(K,{marginRight:1},B.createElement(ShimmerText,{text:e,offset:u})),d?B.createElement(B.Fragment,null,B.createElement(K,{columnGap:1},B.createElement(Y,{dimColor:!0},`(${formatTime3(t)}`),B.createElement(Y,{dimColor:!0},"•"),B.createElement(Y,{color:Ln.GRAY},be.arrowDown),B.createElement(Y,{dimColor:!0},`${formatToken(Math.round(o))}`),B.createElement(Y,{dimColor:!0},"•"),B.createElement(K,{columnGap:1},B.createElement(Y,{bold:!0,color:Ln.GRAY},"esc"),B.createElement(Y,{dimColor:!0},"to interrupt)")))):m?B.createElement(K,{columnGap:1},B.createElement(Y,{dimColor:!0},`(${formatToken(Math.round(o))})`)):B.createElement(B.Fragment,null))},"Status");Nn(),_n(),rr();var DT=__name(({description:e,onChange:t,onSubmit:n,loading:r,errorMessage:s})=>{const[o,i]=W(!1),[a,l]=W(0),[u,d]=W(0);G(()=>{if(!r)return;const e=setInterval(()=>d(e=>e+1),50);return()=>clearInterval(e)},[r]);const m=V(()=>{0!==e.trim().length&&n()},[e,n]),p=V(async e=>{const n=processBracketedPaste(e);if(!n.isPasteStart||o){if(!o||n.isPasteEnd){if(o&&n.isPasteEnd){i(!1);const e=await detectClipboardText();return void(e?(l(e=>e+1),t(e)):n.cleanedContent&&(l(e=>e+1),t(n.cleanedContent)))}t(e)}}else if(i(!0),n.isPasteEnd){i(!1);const e=await detectClipboardText();return void(e?(l(e=>e+1),t(e)):n.cleanedContent&&(l(e=>e+1),t(n.cleanedContent)))}},[o,t]);return B.createElement(K,{flexDirection:"column"},r?B.createElement(K,null,B.createElement(CMDIcon,{frame:u}),B.createElement(Y,{color:Ln.WHITE},"Generating agent from description...")):B.createElement(TextInput,{key:a,showCursor:!0,value:e,placeholder:"e.g. Help me review my code...",onChange:p,onSubmit:m}),s&&B.createElement(K,{marginTop:1},B.createElement(Y,{color:Ln.RED},`${be.warning} ${s}`)))},"RecommendedFlow");Nt(),JE(),rr();var qT=__name(({selectedTools:e,onToggleTool:t,onToggleCategory:n,onComplete:r})=>{const[s,o]=W(!1),[i,a]=W(0),l=H(()=>[...WE.map(e=>e.name),...QE.map(e=>e.name)],[]),u=H(()=>[{name:"All tools",tools:l},{name:"Read-only tools",tools:l.filter(e=>"read_file"===e||"read_directory"===e||"read_multiple_files"===e||"grep"===e)},{name:"Edit tools",tools:l.filter(e=>"edit_file"===e||"write_file"===e)},{name:"Execution tools",tools:l.filter(e=>"shell_command"===e)},{name:"Search tools",tools:l.filter(e=>"web_search"===e||"web_fetch"===e)},{name:"Other tools",tools:l.filter(e=>!["read_file","read_directory","read_multiple_files","grep","edit_file","write_file","shell_command","web_search","web_fetch"].includes(e))}].filter(e=>e.tools.length>0),[l]),d=H(()=>{const e=[];return e.push({type:"continue",value:"continue"}),e.push({type:"divider",value:"divider-1"}),s?(u.forEach(t=>{e.push({type:"category",value:t.name})}),e.push({type:"divider",value:"divider-3"}),e.push({type:"toggle",value:"hide-advanced"}),e.push({type:"spacer",value:"spacer-1"}),e.push({type:"label",value:"Individual Tools:"}),l.forEach(t=>{e.push({type:"tool",value:t})})):(u.forEach(t=>{e.push({type:"category",value:t.name})}),e.push({type:"divider",value:"divider-2"}),e.push({type:"toggle",value:"show-advanced"})),e},[s,u,e,l]),m=d.map((t,n)=>{if("divider"===t.type)return{label:"─".repeat(30),value:n,type:"divider"};if("spacer"===t.type)return{label:"",value:n,type:"spacer"};if("label"===t.type)return{label:t.value,value:n,type:"label"};if("continue"===t.type)return{label:"[ Continue ]",value:n,type:"continue"};if("toggle"===t.type)return{label:"show-advanced"===t.value?"[ Show advanced options ]":"[ Hide advanced options ]",value:n,type:"toggle"};if("category"===t.type){const r=u.find(e=>e.name===t.value),s=r?.tools.every(t=>e.has(t));return r?.tools.some(t=>e.has(t)),{label:`${s?"[x]":"[ ]"} ${t.value}`,value:n,type:"category"}}return"tool"===t.type?{label:` ${e.has(t.value)?"[x]":"[ ]"} ${VE[t.value]||t.value}`,value:n,type:"tool"}:{label:"",value:n,type:"unknown"}}),p=m.filter(e=>"divider"!==e.type&&"spacer"!==e.type&&"label"!==e.type);return Z((e,l)=>{if(l.upArrow)a(e=>{const t=e-1;return t<0?p.length-1:t});else if(l.downArrow)a(e=>{const t=e+1;return t>=p.length?0:t});else if(l.return||" "===e){const e=p[i];if(e){const i=d[e.value];if(!i)return;"continue"===i.type?r():"toggle"===i.type?(o(!s),a(0)):"category"===i.type?n(i.value):"tool"===i.type&&t(i.value)}}}),B.createElement(K,{flexDirection:"column"},m.map((e,t)=>{const n=p.findIndex(t=>t.value===e.value),r=-1!==n&&n===i;if("divider"===e.type)return B.createElement(K,{key:`divider-${t}`},B.createElement(Y,{color:Ln.GRAY}," ",e.label));if("spacer"===e.type)return B.createElement(K,{key:`spacer-${t}`,height:1});if("label"===e.type)return B.createElement(K,{key:`label-${t}`},B.createElement(Y,{color:Ln.GRAY}," ",e.label));const s="continue"===e.type;return B.createElement(K,{key:`item-${t}`},B.createElement(Y,{color:r?Ln.WHITE:Ln.GRAY,bold:s&&r},r?">":" "," ",e.label))}),B.createElement(K,{marginTop:1},e.size===l.length&&B.createElement(Y,{color:Ln.GRAY},"All tools selected"),e.size>0&&e.size<l.length&&B.createElement(Y,{color:Ln.GRAY},e.size," tools selected"),0===e.size&&B.createElement(Y,{color:Ln.GRAY},"No tools selected")))},"ToolsSelector");ar(),dn(),ts(),bE(),hi(),un(),nr();var FT=__name(({onComplete:e})=>{const[t,n]=W("location"),[r,s]=W(!1),[o,i]=W(null),[a,l]=W("agentType"),u=H(()=>[...WE.map(e=>e.name),...QE.map(e=>e.name)],[]),d=__name(()=>({location:null,method:null,agentType:null,sysPrompt:null,ccToolDefinition:"",recommendedMethodDescription:"",selectedTools:new Set(u)}),"getInitialConfig"),[m,p]=W(d()),g=__name(t=>{n("location"),l("agentType"),p(d()),e(t)},"resetToDefaults"),h=__name(()=>{if("location"===t)return"Choose location";if("method"===t)return"Creation method";if("configuration"===t){if("recommended"===m.method)return"Describe what this agent should do and when it should be used (be comprehensive for best results)";if("agentType"===a)return"Agent type (identifier)";if("sysPrompt"===a)return"System prompt";if("ccToolDefinition"===a)return"Description (Tell Command Code when to use this agent)"}return"tools"===t?"Select tools":"summary"===t?"Confirm and save":""},"getSubText"),f=__name(e=>{p({...m,location:e}),n("method")},"handleLocationSelect"),y=__name(e=>{p({...m,method:e}),n("configuration")},"handleMethodSelect"),w=__name(async()=>{try{i(null),s(!0);const e=await getConfiguredProvider(),t=await isOAuthEnforced();let r;e===Ct.ANTHROPIC&&(r=await on.getValidAccessToken(),validateOAuthToken({token:r,provider:e}));const o={[wt.INTERNAL_TEAM_FLAG_HEADER]:t.toString()};r&&(o[wt.OAUTH_TOKEN]=`Bearer ${r}`);const a=getApiBaseUrl(),l=new Vb({baseUrl:a}),u=await l.post({headers:o,endpoint:St.ALPHA.AGENT.GENERATE,body:{description:m.recommendedMethodDescription,model:`anthropic:${getConfiguredModel()}`}});p({...m,agentType:Ne(u.agentName),sysPrompt:u.systemPrompt,ccToolDefinition:u.toolDescription}),n("tools")}catch(e){e instanceof oi&&400===e.status&&e.message?.toLowerCase().includes("insufficient credits")?i(nn):i("An error occurred while generating the agent. Please try again.")}finally{s(!1)}},"handleRecommendedSubmit"),S=__name(()=>{p({...m,agentType:Ne(m.agentType)}),l("sysPrompt")},"handleManualAgentTypeSubmit"),b=__name(()=>{l("ccToolDefinition")},"handleManualSysPromptSubmit"),E=__name(()=>{n("tools")},"handleManualCCToolDefinitionSubmit"),C=__name(()=>{n("summary")},"handleToolsComplete"),v=__name(e=>{const t=new Set(m.selectedTools);t.has(e)?t.delete(e):t.add(e),p({...m,selectedTools:t})},"handleToggleTool"),T=__name(e=>{const t=[{name:"All tools",tools:u},{name:"Read-only tools",tools:u.filter(e=>"read_file"===e||"read_directory"===e||"read_multiple_files"===e||"grep"===e)},{name:"Edit tools",tools:u.filter(e=>"edit_file"===e||"write_file"===e)},{name:"Execution tools",tools:u.filter(e=>"shell_command"===e)},{name:"Search tools",tools:u.filter(e=>"web_search"===e||"web_fetch"===e)},{name:"Other tools",tools:u.filter(e=>!["read_file","read_directory","read_multiple_files","grep","edit_file","write_file","shell_command","web_search","web_fetch"].includes(e))}].find(t=>t.name===e);if(!t)return;const n=new Set(m.selectedTools);t.tools.every(e=>n.has(e))?t.tools.forEach(e=>n.delete(e)):t.tools.forEach(e=>n.add(e)),p({...m,selectedTools:n})},"handleToggleCategory");return B.createElement(K,{flexDirection:"column",gap:1},B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Ln.WHITE,bold:!0},"Create new agent"),B.createElement(Y,{color:Ln.GRAY},h())),B.createElement(K,null,"location"===t&&B.createElement(IT,{onSelect:f}),"method"===t&&B.createElement(RT,{onSelect:y}),"configuration"===t&&"recommended"===m.method&&B.createElement(DT,{description:m.recommendedMethodDescription,onChange:e=>p({...m,recommendedMethodDescription:e}),loading:r,errorMessage:o,onSubmit:w}),"configuration"===t&&"manual"===m.method&&B.createElement(K,{flexDirection:"column",gap:1},B.createElement(NT,{step:a,agentType:m.agentType,sysPrompt:m.sysPrompt,ccToolDefinition:m.ccToolDefinition,onAgentTypeChange:e=>p({...m,agentType:e}),onSysPromptChange:e=>p({...m,sysPrompt:e}),onCCToolDefinitionChange:e=>p({...m,ccToolDefinition:e}),onAgentTypeSubmit:S,onSysPromptSubmit:b,onCCToolDefinitionSubmit:E})),"tools"===t&&B.createElement(qT,{selectedTools:m.selectedTools,onToggleTool:v,onToggleCategory:T,onComplete:C}),"summary"===t&&B.createElement(PT,{config:m,onSaveComplete:g})))},"AgentNew");rr();var jT=__name(({onCancel:e})=>{const[t,n]=W(null),[r,s]=W(null),o=__name(e=>{n(e.value),s(null)},"handleSelect");return Z((t,n)=>{n.escape&&e()}),B.createElement(K,{gap:1,paddingLeft:1,paddingRight:1,width:"100%",borderColor:Ln.GRAY,borderStyle:"single",flexDirection:"column"},null===t&&B.createElement(xT,{handleSelect:o,createdAgentName:r}),"create_new_agent"===t&&B.createElement(FT,{onComplete:e=>{s(e),n(null)}}))},"AgentsConfig");rr(),Nt(),Nt(),Ot(),bE(),ts(),dn(),CE(),$n(),en(),nr(),ar();var zT=null;function getRequest2(){return zT||(zT=new Vb({baseUrl:getApiBaseUrl()})),zT}function extractText(e){if("string"==typeof e)return e;if(!Array.isArray(e))return"";let t="";for(const n of e){const e=n;"text"===e.type&&e.text&&(t+=e.text)}return t}async function buildAuthHeaders2(){const e=await getConfiguredProvider(),t=await isOAuthEnforced();let n;e===Ct.ANTHROPIC&&(n=await on.getValidAccessToken(),validateOAuthToken({token:n,provider:e}));const r={[wt.PROJECT_SLUG]:Yb.getCurrentProjectDirName(),[wt.INTERNAL_TEAM_FLAG_HEADER]:t.toString()};return n&&(r[wt.OAUTH_TOKEN]=`Bearer ${n}`),r}function buildConversationSummary(e){return e.slice(-6).filter(e=>"user"===e.message.role||"assistant"===e.message.role).map(e=>{const t="user"===e.message.role?"User":"Command Code",n=extractText(e.message.content).slice(0,300).replace(/\s+\S*$/,"").replace(/\n+/g," ").trim();return n?`${t}: ${n}`:null}).filter(e=>null!==e).join("\n")}function hasAssistantMessage(e){return e.some(e=>"assistant"===e.message.role)}async function predictNextPrompt({messages:e,sessionId:t}){if(!hasAssistantMessage(e))return null;const n=buildConversationSummary(e);if(!n)return null;const r=`Conversation:\n${n}\n\nSuggestion:`;try{const e=getRequest2(),n=await buildAuthHeaders2(),s={config:getEnvironmentContext(),memory:"",taste:"",skills:"",params:{tools:[],system:'Suggest what the user might naturally type next into Command Code.\n\nLook at the user\'s recent messages and original request. Predict what THEY would type — not what you think they should do. The test: would they think "I was just about to type that"?\n\nRules:\n- Write ONLY the suggestion, no quotes, no labels, no explanation\n- 2-12 words, match the user\'s style\n- Be specific: "run the tests" beats "continue"\n- Stay silent (reply with nothing) if the next step isn\'t obvious from what the user said\n\nNEVER suggest:\n- Evaluative responses ("looks good", "thanks")\n- Questions ("what about...?")\n- Assistant-voice ("Let me...", "I\'ll...", "Here\'s...")\n- New ideas they didn\'t ask about\n- Multiple sentences\n\nExamples:\n- User asked "fix the bug and run tests", bug is fixed → "run the tests"\n- After code written → "try it out"\n- Command Code offers options → the one the user would likely pick\n- Command Code asks to continue → "yes" or "go ahead"\n- Task complete, obvious follow-up → "commit this" or "push it"\n- After error or misunderstanding → nothing',messages:[{role:"user",content:r}],model:vt,max_tokens:30,temperature:.7,stream:!0},threadId:t||crypto.randomUUID()},o=new AbortController,i=e.post({endpoint:St.ALPHA.GENERATE,body:s,headers:n,stream:!0,signal:o.signal});let a;const l=new Promise((e,t)=>{a=setTimeout(()=>{o.abort(),t(new Error("Timeout"))},5e3)});let u;try{u=await Promise.race([i,l])}finally{clearTimeout(a)}if(!u)return dlog("[PromptPredictor] no response stream"),null;const d=je.fromReadableStream(u);let m="";d.on("text",e=>{m+=e}),await d.finalMessage();const p=m.trim().replace(/^["']|["']$/g,"").replace(/\n.*$/,"");if(!p)return null;const g=p.replace(/[.?!]+$/,"").trim();return g?(dlog(`[PromptPredictor] predicted: "${g}"`),g):null}catch(e){return dlog(`[PromptPredictor] failed: ${e instanceof Error?e.message:String(e)}`),null}}__name(getRequest2,"getRequest"),__name(extractText,"extractText"),__name(buildAuthHeaders2,"buildAuthHeaders"),__name(buildConversationSummary,"buildConversationSummary"),__name(hasAssistantMessage,"hasAssistantMessage"),__name(predictNextPrompt,"predictNextPrompt"),$n();var BT=['Try "how to log errors?"','Try "text diagram how <@file> works?"','Try "add tests for <@file>"','Try "refactor this to use async/await"','Try "what does this function do?"','Try "find all usages of <function>"','Try "fix the TypeScript errors"','Try "explain the architecture"','Try "write docs for <@file>"','Try "optimize this for performance"','Try "review this code for bugs"','Try "how does <feature> work?"'];function getRandomSuggestion(){const e=Math.floor(Math.random()*BT.length);return BT[e]??BT[0]??""}function usePredictedPlaceholder({contextEngineRef:e,isCmdCodeBusy:t}){const[n,r]=W(()=>(e.current?.getMessages().length??0)>0?"":getRandomSuggestion()),[s,o]=W(!1),i=Q(t);return G(()=>{const n=i.current;if(i.current=t,dlog(`[usePredictedPlaceholder] wasBusy: ${n}, isCmdCodeBusy: ${t}`),!n||t)return;if(!e.current)return;const s=e.current.getMessages(),a=e.current.getSessionId();dlog(`[usePredictedPlaceholder] Triggering prediction with ${s.length} messages`),r(""),o(!1);let l=!1;return predictNextPrompt({messages:s,sessionId:a}).then(e=>{dlog(`[usePredictedPlaceholder] Prediction result: ${e}`),e&&!l&&(r(e),o(!0))}).catch(e=>{dlog(`[usePredictedPlaceholder] Prediction error: ${e}`)}),()=>{l=!0}},[t,e]),{placeholder:n,isPrediction:s,onAccepted:V(()=>{r(""),o(!1)},[])}}function useTerminalWidth(){const{stdout:e}=X(),[t,n]=W(()=>e.columns??80);return G(()=>{const t=__name(()=>n(e.columns??80),"onResize");return e.on("resize",t),()=>{e.off("resize",t)}},[e]),t}__name(getRandomSuggestion,"getRandomSuggestion"),__name(usePredictedPlaceholder,"usePredictedPlaceholder"),Nt(),__name(useTerminalWidth,"useTerminalWidth"),Nt(),Nt(),vn(),Ot(),_n(),ln(),Nt();var UT=n(y(),"commandcode-images"),WT={"image/png":".png","image/jpeg":".jpg","image/gif":".gif","image/webp":".webp"};function saveTempImage(e,t){try{E(UT)||C(UT,{recursive:!0});const r=WT[e.mediaType]||".png",s=`image-${t}-${Date.now()}${r}`,o=n(UT,s),i=Buffer.from(e.data,"base64");return v(o,i),o}catch{return null}}function accumulateDelta(e,t,n){const r=n+t;return e===t||e===r?t:r&&e.startsWith(r)?t+e.slice(r.length):t&&e.startsWith(t)?t+e.slice(t.length):t+e}function useBracketedPaste(e){const{input:t,detectedContent:n,setInput:r,setDetectedImages:s,setDetectedContent:o,incrementInputKey:i}=e,a=V((e,t)=>{s(t=>[...t,e]),r(t),i()},[s,r,i]),l=Q(!1),u=Q(""),d=Q(null),m=Q(""),p=V(async(e,t)=>{let s=e.replace(/\r\n/g,"\n").replace(/\r/g,"\n");const l=await detectDroppedImageFile(s);if(l)return void a(l,t);const u=await detectClipboardImage();if(u)return void a(u,t);let d=s;if(!d.trim()){const e=await detectClipboardText();d=e?e.replace(/\r\n/g,"\n").replace(/\r/g,"\n"):""}if(d){if(d.length>300){const e=`[Text#${n.length+1}]`;o(e=>[...e,d]),r(t+e)}else r(t+d);i()}},[a,n.length,o,r,i]),g=V(()=>{d.current&&clearTimeout(d.current),d.current=setTimeout(async()=>{if(l.current){const e=u.current,t=m.current;u.current="",m.current="",l.current=!1,d.current=null,e&&await p(e,t)}},500)},[p]);return{handlePaste:V(async e=>{const n=processBracketedPaste(e);if(n.isPasteStart&&n.isPasteEnd)return l.current&&(l.current=!1,u.current="",m.current="",d.current&&(clearTimeout(d.current),d.current=null)),await p(n.pastedContent??n.cleanedContent,n.textBeforePaste??""),!0;if(n.isPasteStart&&!l.current)return l.current=!0,m.current=n.textBeforePaste??t,u.current=n.pastedContent??n.cleanedContent,g(),!0;if(l.current&&!n.isPasteEnd)return void 0!==n.pastedContent?u.current=n.pastedContent:n.cleanedContent&&(u.current=accumulateDelta(n.cleanedContent,u.current,m.current)),g(),!0;if(l.current&&n.isPasteEnd){d.current&&(clearTimeout(d.current),d.current=null),void 0!==n.pastedContent?u.current=n.pastedContent:n.cleanedContent&&(u.current=accumulateDelta(n.cleanedContent,u.current,m.current));const e=u.current,t=m.current;return u.current="",m.current="",l.current=!1,await p(e,t),!0}if(n.isPasteEnd&&!n.isPasteStart&&!l.current)return!0;const r=e.slice(t.length);if(r.length>0){const e=await detectDroppedImageFile(r);if(e)return a(e,t),!0}return!1},[t,p,g,a]),resetPasteState:V(()=>{l.current=!1,u.current="",m.current="",d.current&&(clearTimeout(d.current),d.current=null)},[]),isPasting:V(()=>l.current,[])}}__name(saveTempImage,"saveTempImage"),ar(),Nt(),Nn(),_n(),__name(accumulateDelta,"accumulateDelta"),__name(useBracketedPaste,"useBracketedPaste"),Nn(),Nt(),Nt();var QT=["code --wait","cursor --wait","nano"],GT=["code","cursor","subl","atom","zed"];function ensureWaitFlag(e){const t=e.split(" ").filter(e=>e.length>0),n=t[0];return GT.some(e=>n===e||n.endsWith(`/${e}`))?t.some(e=>"--wait"===e||"-w"===e)?e:`${n} --wait ${t.slice(1).join(" ")}`.trim():e}function isCommandAvailable(e){try{const t=e.split(" ")[0],n="win32"===process.platform?"where":"command -v";return I(`${n} ${t}`,{stdio:"ignore",encoding:"utf-8"}),!0}catch{return!1}}function findFallbackEditor(){for(const e of QT)if(isCommandAvailable(e))return e;return null}__name(ensureWaitFlag,"ensureWaitFlag"),__name(isCommandAvailable,"isCommandAvailable"),__name(findFallbackEditor,"findFallbackEditor");var HT=class extends Error{static{__name(this,"NoEditorError")}constructor(){super("No editor configured"),this.name="NoEditorError"}};async function openInEditor2(e){let t=process.env.EDITOR||process.env.VISUAL||null;if(!t&&("true"===process.env.COMMAND_CODE_DISABLE_EDITOR_FALLBACK||(t=findFallbackEditor()),!t))throw new HT;t=ensureWaitFlag(t);const r=n(y(),`commandcode-${Date.now()}.md`);return await M(r,e),new Promise((e,n)=>{const s=t.split(" ").filter(e=>e.length>0),o=s[0],i=s.slice(1),a=N(o,[...i,r],{stdio:"inherit"});a.on("close",async()=>{try{const t=await O(r,"utf-8");await D(r),e(t.trimEnd())}catch(e){n(e)}}),a.on("error",async e=>{try{await D(r)}catch{}n(e)})})}function useExternalEditor({input:e,setInput:t,setInputKey:n,onEditorClose:r}){const[s,o]=W(!1),[i,a]=W(null),l=V(async()=>{if(!s){o(!0),a(null);try{const s=e.replace(/\n+$/,""),o=await openInEditor2(s);t(o),n(e=>e+1),r?.()}catch(e){a(e instanceof HT?"No text editor found. Set your EDITOR environment variable.\n\nSee: https://commandcode.ai/reference/interactive#setting-up-your-editor":`Editor error: ${e instanceof Error?e.message:String(e)}`)}finally{o(!1)}}},[e,t,r,s]),u=V(()=>{a(null)},[]);return{isEditorOpen:s,editorError:i,handleOpenInEditor:l,clearEditorError:u}}__name(function getNoEditorMessage(){return"No text editor found. Set your EDITOR environment variable.\n\nSee: https://commandcode.ai/reference/interactive#setting-up-your-editor"},"getNoEditorMessage"),__name(openInEditor2,"openInEditor"),__name(useExternalEditor,"useExternalEditor"),Nt(),Nt(),Nt(),Nt(),Ot(),$n(),lr(),yr(),Nt(),Ot();var VT=t.join(f.homedir(),".commandcode","updates.json");function ensureDir(){const e=t.dirname(VT);S.existsSync(e)||S.mkdirSync(e,{recursive:!0})}function readUpdatesConfig(){try{if(!S.existsSync(VT))return{autoUpdate:!0,lastCheckedAt:0,checkIntervalMs:36e5,pending:null};const e=S.readFileSync(VT,"utf-8");return{autoUpdate:!0,lastCheckedAt:0,checkIntervalMs:36e5,pending:null,...JSON.parse(e)}}catch{return{autoUpdate:!0,lastCheckedAt:0,checkIntervalMs:36e5,pending:null}}}function writeUpdatesConfig(e){ensureDir(),S.writeFileSync(VT,JSON.stringify(e,null,2))}function updateUpdatesConfig(e){writeUpdatesConfig({...readUpdatesConfig(),...e})}function shouldCheckForUpdate(){const e=readUpdatesConfig();return!!e.autoUpdate&&Date.now()-e.lastCheckedAt>=e.checkIntervalMs}function recordUpdateCheck(){updateUpdatesConfig({lastCheckedAt:Date.now()})}function setPendingUpdate(e){updateUpdatesConfig({lastCheckedAt:Date.now(),pending:e})}function clearPendingUpdate(){updateUpdatesConfig({pending:null})}function getPendingUpdate(e){const t=readUpdatesConfig();return t.pending?t.pending.currentVersion!==e?(clearPendingUpdate(),null):t.pending:null}__name(function getDefaultConfig(){return{autoUpdate:!0,lastCheckedAt:0,checkIntervalMs:36e5,pending:null}},"getDefaultConfig"),__name(ensureDir,"ensureDir"),__name(readUpdatesConfig,"readUpdatesConfig"),__name(writeUpdatesConfig,"writeUpdatesConfig"),__name(updateUpdatesConfig,"updateUpdatesConfig"),__name(shouldCheckForUpdate,"shouldCheckForUpdate"),__name(recordUpdateCheck,"recordUpdateCheck"),__name(setPendingUpdate,"setPendingUpdate"),__name(clearPendingUpdate,"clearPendingUpdate"),__name(getPendingUpdate,"getPendingUpdate"),lr();var KT=Ve(x),YT=getPackageJson();function shouldSkipUpdateSystem(){return!!process.env.CI||!!isLocalDevelopmentBuild()}function fetchVersions(){try{const e=I("npm view command-code versions --json",{encoding:"utf-8",timeout:5e3});return JSON.parse(e)}catch{return null}}function getCurrentVersion(){return YT.version}function isAlphaVersion(e){return e.includes("alpha")}function filterVersions(e){return{stable:e.filter(e=>!e.includes("alpha")),alpha:e.filter(e=>e.includes("alpha"))}}function getLatestVersion(e){return 0===e.length?null:e.sort(tt.rcompare)[0]}function determineUpdateTarget(e,t,n){const r=getLatestVersion(t);if(r&&tt.gt(r,e))return{latestVersion:r,updateAvailable:!0};if(isAlphaVersion(e)){const t=getLatestVersion(n);if(t&&tt.gt(t,e))return{latestVersion:t,updateAvailable:!0}}return{latestVersion:e,updateAvailable:!1}}async function checkForUpdateAvailable(){const e=fetchVersions();if(!e)return null;const t=getCurrentVersion(),{stable:n,alpha:r}=filterVersions(e),{latestVersion:s,updateAvailable:o}=determineUpdateTarget(t,n,r);return{currentVersion:t,latestVersion:s,updateAvailable:o}}async function executeUpdate(e){try{return await KT(`npm i -g command-code@${e}`,{env:{...process.env,NODE_NO_WARNINGS:"1"},timeout:6e5}),!0}catch{return!1}}function checkForUpdateAsync(){shouldSkipUpdateSystem()||shouldCheckForUpdate()&&doUpdateCheck().catch(()=>{})}async function doUpdateCheck(){dlog("[Updater] Starting async update check");const e=await checkForUpdateAvailable();return e?e.updateAvailable?(dlog(`[Updater] Update available: ${e.currentVersion} -> ${e.latestVersion}`),void setPendingUpdate({targetVersion:e.latestVersion,currentVersion:e.currentVersion,detectedAt:Date.now()})):(dlog("[Updater] No update available"),void recordUpdateCheck()):(dlog("[Updater] Failed to fetch version info"),void recordUpdateCheck())}async function maybeRunPendingUpdate(){if(shouldSkipUpdateSystem())return;const e=getCurrentVersion(),t=getPendingUpdate(e);if(!t)return;if(!tt.gt(t.targetVersion,e))return dlog("[Updater] Pending update no longer valid"),void clearPendingUpdate();dlog(`[Updater] Running pending update: ${e} -> ${t.targetVersion}`);const n=Ie(`Updating ${e} → ${t.targetVersion}`).start(),r=await executeUpdate(t.targetVersion);if(clearPendingUpdate(),!r)return n.fail("Update failed"),void console.log("Run `cmd update` to try again.");n.succeed(`Updated to v${t.targetVersion}`)}async function performAutoUpdate(e){const{silent:t,updateInfo:n,onStart:r}=e||{};if(isLocalDevelopmentBuild())return{success:!1};const s=n||await checkForUpdateAvailable();return s?.updateAvailable?(r?.(s.latestVersion),await executeUpdate(s.latestVersion)?{success:!0,updateInfo:s}:(t||(console.error("\nFailed to update command-code automatically."),console.error("Please update manually using: npm i -g command-code")),{success:!1,updateInfo:s})):{success:!1}}function getCurrentGitBranch(){try{return I("git rev-parse --abbrev-ref HEAD",{encoding:"utf-8",stdio:["pipe","pipe","ignore"],cwd:process.cwd()}).trim()||null}catch(e){return null}}function getGitHeaderInfo(){return{branch:getCurrentGitBranch(),isLocal:isLocalDevelopmentBuild()}}__name(shouldSkipUpdateSystem,"shouldSkipUpdateSystem"),__name(fetchVersions,"fetchVersions"),__name(getCurrentVersion,"getCurrentVersion"),__name(isAlphaVersion,"isAlphaVersion"),__name(filterVersions,"filterVersions"),__name(getLatestVersion,"getLatestVersion"),__name(determineUpdateTarget,"determineUpdateTarget"),__name(checkForUpdateAvailable,"checkForUpdateAvailable"),__name(executeUpdate,"executeUpdate"),__name(checkForUpdateAsync,"checkForUpdateAsync"),__name(doUpdateCheck,"doUpdateCheck"),__name(maybeRunPendingUpdate,"maybeRunPendingUpdate"),__name(performAutoUpdate,"performAutoUpdate"),__name(getCurrentGitBranch,"getCurrentGitBranch"),__name(getGitHeaderInfo,"getGitHeaderInfo");var JT=new Set(["OPEN","MERGED","CLOSED"]),XT=null;function getCachedPRInfo(e){if(XT&&XT.branch===e){if(!(Date.now()-XT.timestamp>3e5))return XT.result;XT=null}}function setPRCache(e,t){XT={branch:e,result:t,timestamp:Date.now()}}function execFileAsync({cmd:e,args:t,encoding:n,timeout:r}){return new Promise((s,o)=>{R(e,[...t],{encoding:n,timeout:r},(e,t)=>{e?o(e):s(t.trim())})})}function parsePRResponse(e){try{const t=JSON.parse(e);return t.number&&t.url&&t.state&&JT.has(t.state)?{number:t.number,title:t.title||"",url:t.url,state:t.state}:null}catch{return null}}__name(getCachedPRInfo,"getCachedPRInfo"),__name(setPRCache,"setPRCache"),__name(execFileAsync,"execFileAsync"),__name(parsePRResponse,"parsePRResponse");var ZT=__name(async()=>{const e=getCurrentGitBranch();if(!e)return null;if("main"===e||"master"===e)return null;const t=getCachedPRInfo(e);if(void 0!==t)return t;try{const t=parsePRResponse(await execFileAsync({cmd:"gh",args:["pr","view","--json","number,title,url,state"],encoding:"utf-8",timeout:3e3}));return setPRCache(e,t),t}catch{return setPRCache(e,null),null}},"detectPR"),ek=__name((e={})=>{const{enabled:t=!0}=e,[n,r]=W(null),s=Q(!1);return G(()=>{if(!t||s.current)return;let e=!0;return s.current=!0,ZT().then(t=>{e&&r(t)}),()=>{e=!1}},[t]),{pr:n}},"usePRDetection");function loadGitignore(e){const t=nt(),r=n(e,".gitignore");if(E(r))try{const e=b(r,"utf8");t.add(e)}catch{}return t.add(".git"),t}rr(),Nt(),rr(),__name(loadGitignore,"loadGitignore");var tk=__name(({onSelectFile:e,onClose:t,searchQuery:i=""})=>{const[a,l]=W(process.cwd()),[u,d]=W([]),[m,p]=W(0),[g,h]=W(0),f=i.trim()?15:10,y=V((e,t=process.cwd())=>{if(!e.trim())return[];const r=loadGitignore(t);if(e.endsWith("/")){const o=n(t,e);try{const e=T(o),i=[];return e.forEach(e=>{const a=n(o,e);try{const e=k(a),n=s(t,a);if(r.ignores(n))return;i.push({name:n,path:a,isDirectory:e.isDirectory()})}catch{}}),i.sort((e,t)=>e.isDirectory&&!t.isDirectory?-1:!e.isDirectory&&t.isDirectory?1:e.name.localeCompare(t.name)),i.slice(0,50)}catch{}}if(e.includes("/")){const o=e.split("/"),i=o.pop()||"",a=n(t,o.join("/"));try{const e=T(a),o=[],l=i.toLowerCase();return e.forEach(e=>{const u=e.toLowerCase();if(!i||u.includes(l)){const i=n(a,e);try{const e=k(i),n=s(t,i);if(r.ignores(n))return;o.push({name:n,path:i,isDirectory:e.isDirectory()})}catch{}}}),o.sort((e,t)=>e.isDirectory&&!t.isDirectory?-1:!e.isDirectory&&t.isDirectory?1:e.name.localeCompare(t.name)),o.slice(0,50)}catch{}}const o=[],i=e.toLowerCase(),a=__name((e,l=0)=>{if(!(l>8))try{T(e).forEach(u=>{const d=n(e,u);try{const e=k(d),n=s(t,d);if(r.ignores(n))return;const m=n.toLowerCase();(u.toLowerCase().includes(i)||m.includes(i))&&o.push({name:n,path:d,isDirectory:e.isDirectory()}),e.isDirectory()&&"node_modules"!==u&&a(d,l+1)}catch(e){}})}catch(e){}},"searchRecursively");return a(t),o.sort((e,t)=>{const n=e.name.toLowerCase(),r=t.name.toLowerCase(),s=n===i,o=r===i;if(s&&!o)return-1;if(!s&&o)return 1;const a=n.split("/").pop()||"",l=r.split("/").pop()||"",u=a.includes(i),d=l.includes(i);if(u&&!d)return-1;if(!u&&d)return 1;const m=e.name.split("/").length,p=t.name.split("/").length;return m!==p?m-p:e.name.localeCompare(t.name)}),o.slice(0,50)},[]),w=V(e=>{try{const t=T(e),o=[],i=process.cwd(),a=loadGitignore(i);"/"!==e&&o.push({name:"..",path:r(e),isDirectory:!0}),t.forEach(t=>{const r=n(e,t);try{const e=k(r),n=s(i,r);if(a.ignores(n))return;o.push({name:t,path:r,isDirectory:e.isDirectory()})}catch{}}),o.sort((e,t)=>e.isDirectory&&!t.isDirectory?-1:!e.isDirectory&&t.isDirectory?1:e.name.localeCompare(t.name)),d(o),p(0),h(0)}catch{}},[]);G(()=>{if(i.trim()){const e=y(i);d(e),p(0),h(0)}else w(a)},[a,w,i,y]),Z((n,r)=>{if(r.escape)t();else if(r.upArrow)p(e=>{const t=Math.max(0,e-1);return t<g&&h(t),t});else if(r.downArrow)p(e=>{const t=Math.min(u.length-1,e+1);return t>=g+f&&h(t-f+1),t});else{if(r.rightArrow){const e=u[m];if(!e)return;return void(e.isDirectory&&!i.trim()&&l(o(e.path)))}if(r.return){const t=u[m];if(!t)return;return void e(t.path)}}});const S=u.slice(g,g+f);return B.createElement(K,{flexDirection:"column",paddingLeft:1},B.createElement(K,{marginBottom:1,flexDirection:"column"},B.createElement(Y,{color:Ln.DIM},i.trim()?`Searching for: "${i}"`:`Files: ${a}`),B.createElement(Y,{color:Ln.DIM},i.trim()?"↑↓ navigate • Enter to select • Esc to close":"↑↓ navigate • → to open folder • Enter to select • Esc to close")),0===S.length?B.createElement(Y,{color:Ln.DIM},i.trim()?`No files found matching "${i}"`:"No files found in this directory"):S.map((e,t)=>{const n=g+t,r=e.name,s=n===m;return B.createElement(Y,{key:e.path,color:s?Ln.GREEN:Ln.DIM},e.isDirectory?`${r}/`:r)}))},"FileList");Nt(),Ot(),ir(),rr(),Nt(),rr();var nk=__name(({usage:e})=>{if(!e)return null;const t=Math.min(e.current/e.limit*100,100),n=Math.max(0,Math.round(90-t));if(n>20)return null;const r=__name(e=>e>=90?Ln.RED:e>=70?Ln.YELLOW:Ln.DIM,"getColor"),s=`context: ${n}% left before auto-compact`;return B.createElement(K,{paddingRight:1},B.createElement(Y,{color:r(t)},s))},"ContextUsage");Nt(),tC(),jr(),rr();var rk=__name(()=>{const[e,t]=W("continuous learning"),n=Q([]),r=Q(0),s=Q(null),o=Q(!1);G(()=>{const e=__name(e=>"analyzing"===e.type?(o.current=!0,n.current=[],r.current=0,s.current&&(clearTimeout(s.current),s.current=null),void t(e.message)):o.current&&"analyzed"!==e.type?void n.current.push(e):"analyzed"===e.type?(o.current=!1,void(n.current.length>0?(r.current=0,i()):t("continuous learning"))):void 0,"handleNewEvent"),i=__name(()=>{if(r.current>=n.current.length)return t("continuous learning"),void(n.current=[]);const e=n.current[r.current];t(e.message);const o="learned"===e.type||"refactored"===e.type||"no_learnings"===e.type||"error"===e.type?15e3:2e3;s.current=setTimeout(()=>{r.current++,i()},o)},"cycleThroughNextEvent");return ZE.on("new-event",e),()=>{ZE.off("new-event",e),s.current&&clearTimeout(s.current)}},[]);const i=`${be.bullet} taste: `,a=i.length+e.length+9>Rr;let l=e;return l=truncateString(a?{text:e,maxChars:Rr}:{text:e,maxChars:Rr-i.length-9-10}),B.createElement(K,{paddingRight:3},!a&&B.createElement(Y,{color:On.TEXT},i),B.createElement(Y,null,l),!a&&B.createElement(Y,{dimColor:!0}," (ctrl+t)"))},"LearningFeedMini");Nt(),rr();var sk=__name(({mode:e,pendingExitKey:t})=>t?B.createElement(Y,{dimColor:!0},"Press Ctrl+C again to exit"):"auto-accept"===e?B.createElement(K,{flexDirection:"row"},B.createElement(Y,{color:Hn},"» accept edits on "),B.createElement(Y,{dimColor:!0},"(shift+tab)")):"plan"===e?B.createElement(K,{flexDirection:"row"},B.createElement(Y,{color:Gn},"plan mode "),B.createElement(Y,{dimColor:!0},"(shift+tab)")):B.createElement(Y,{color:Ln.DIM},"? for shortcuts"),"ModeIndicator");Nt(),rr(),Nt();var ok=__name(({url:e,text:t,dimColor:n=!1,color:r})=>{const s=`]8;;${e}${t}]8;;`;return B.createElement(Y,{dimColor:n,color:r},s)},"TerminalLink"),ik=__name(({prInfo:e,showSeparator:t=!0})=>{if(!e)return null;if("OPEN"!==e.state&&"MERGED"!==e.state)return null;const n="OPEN"===e.state?Vn.OPEN:Vn.MERGED;return B.createElement(B.Fragment,null,t&&B.createElement(Y,{dimColor:!0}," · "),B.createElement(Y,{color:n},"PR "),B.createElement(ok,{url:e.url,text:`#${e.number}`,dimColor:!0}))},"PRLinkBadge"),ak=__name(({indicator:e,showSeparator:t=!0})=>e?.visible?B.createElement(B.Fragment,null,t&&B.createElement(Y,{dimColor:!0}," · "),B.createElement(Y,{color:"connected"===e.type?Ln.GREEN:Ln.YELLOW},e.message)):null,"ConnectionIndicatorBadge"),lk=__name(({termWidth:e,indicatorText:t,isIDEIndicator:n,permissionMode:r="standard",prInfo:s,tasteLearning:o,contextUsage:i,connectionIndicator:a,pendingExitKey:l,updateStatus:u,updateFailedInfo:d,currentProvider:m,showProviderInfo:p,isBashMode:g,shareInfo:h,showShareNotification:f,unshareNotificationMessage:y,tasteNotificationMessage:w})=>{const S=e>=60;return B.createElement(B.Fragment,null,B.createElement(K,{flexDirection:"column",paddingLeft:2},"auto-accept"!==r&&"plan"!==r||l?B.createElement(K,{flexDirection:"row",justifyContent:"space-between",width:e-1},B.createElement(K,{flexDirection:"row",columnGap:0},n&&!l?B.createElement(Y,{color:Un},t):B.createElement(sk,{mode:r,pendingExitKey:l}),!l&&B.createElement(ik,{prInfo:s}),!l&&B.createElement(ak,{indicator:a})),S&&B.createElement(K,{flexDirection:"column",alignItems:"flex-end"},o&&B.createElement(rk,null),i&&B.createElement(nk,{usage:i}))):B.createElement(B.Fragment,null,B.createElement(K,{flexDirection:"row",justifyContent:"space-between",width:e-1},B.createElement(sk,{mode:r}),S&&o&&B.createElement(rk,null)),B.createElement(K,{flexDirection:"row",justifyContent:"space-between",width:e-1},B.createElement(K,{flexDirection:"row",columnGap:0},B.createElement(Y,{color:n?Un:void 0,dimColor:!n},t),B.createElement(ik,{prInfo:s}),B.createElement(ak,{indicator:a})),S&&i&&B.createElement(nk,{usage:i}))),(u||d||p&&m)&&B.createElement(K,{flexDirection:"row",columnGap:1},u&&B.createElement(Y,null,be.tick," ","Command Code"," updated:"," ",B.createElement(Y,{dimColor:!0},"v",u.updatedFrom),B.createElement(Y,{dimColor:!0}," ",be.arrowRight," "),B.createElement(Y,null,"v",u.updatedTo)),!u&&d&&B.createElement(Y,{color:Ln.YELLOW,dimColor:!0},be.info," Update available:"," ",d.currentVersion," ",be.arrowRight," ",d.latestVersion),p&&m&&B.createElement(Y,{color:Ln.GREEN,dimColor:!0},be.bullet," Provider:"," ",getProviderDisplayName(m)))),g&&B.createElement(K,{paddingLeft:2},B.createElement(Y,{color:Ln.GREEN},"! for bash mode")),f&&h&&B.createElement(K,{paddingLeft:2},B.createElement(Y,{color:Mn},"SHARED: ",h.url," (copied to clipboard)")),y&&B.createElement(K,{paddingLeft:2},B.createElement(Y,{color:y.includes("NOT SHARED")?Ln.RED:Mn},y)),w&&B.createElement(K,{paddingLeft:2},B.createElement(Y,{color:Mn},w)))},"BottomIndicator");Nt(),CE(),jr(),rr();var ck=__name(({onSelectSession:e,onClose:t})=>{const[n,r]=W([]),[s,o]=W(0),[i,a]=W(!0);G(()=>{l()},[]);const l=__name(async()=>{a(!0);const e=await Yb.listSessions();r(e.slice(0,30)),a(!1)},"loadSessions");if(Z((r,i)=>{i.escape?t():i.upArrow?o(e=>Math.max(0,e-1)):i.downArrow?o(e=>Math.min(n.length-1,e+1)):i.return&&n.length>0&&s<n.length&&e(n[s].id)}),i)return B.createElement(K,{flexDirection:"column",paddingLeft:2},B.createElement(Y,{color:Ln.GRAY},"Loading sessions..."));if(0===n.length)return B.createElement(K,{flexDirection:"column",paddingLeft:2},B.createElement(Y,{color:Ln.GRAY},"No previous sessions found"),B.createElement(Y,{color:Ln.DIM,dimColor:!0},"Press ESC to go back"));const u=__name(e=>{const t=new Date(e),n=(new Date).getTime()-t.getTime(),r=Math.floor(n/6e4),s=Math.floor(n/36e5),o=Math.floor(n/864e5);return r<1?"just now":r<60?`${r} min ago`:s<24?`${s}h ago`:`${o}d ago`},"formatRelativeTime"),d=__name(e=>e.replace(/\s+/g," ").trim(),"normalizeSummary"),m=__name(e=>truncateString({text:d(e),maxChars:Nr}),"truncateMessage"),p=__name(e=>e.title?d(e.title):m(e.firstMessage),"getSessionSummary");return B.createElement(K,{flexDirection:"column",paddingLeft:1,width:"100%"},B.createElement(Y,{color:Ln.CYAN,bold:!0},"Resume Session"),B.createElement(Y,{color:Ln.DIM,dimColor:!0},"Use ↑↓ to navigate, Enter to select, ESC to cancel"),B.createElement(K,{marginTop:1}),B.createElement(K,{columnGap:2,marginBottom:1},B.createElement(K,{width:5},B.createElement(Y,{color:Ln.GRAY}," ")),B.createElement(K,{width:13},B.createElement(Y,{color:Ln.GRAY},"Modified")),B.createElement(K,{width:20},B.createElement(Y,{color:Ln.GRAY},"Git Branch")),B.createElement(K,{width:11},B.createElement(Y,{color:Ln.GRAY},"# Messages")),B.createElement(K,null,B.createElement(Y,{color:Ln.GRAY},"Summary"))),B.createElement(K,{columnGap:2},B.createElement(K,{flexDirection:"column",width:5},n.map((e,t)=>B.createElement(Y,{key:`sel-${t}`,color:s===t?Ln.WHITE:Ln.GRAY},s===t?`${be.pointer} ${t+1}.`:` ${t+1}.`))),B.createElement(K,{flexDirection:"column",width:13},n.map((e,t)=>B.createElement(Y,{key:`mod-${e.id}`,color:s===t?Ln.WHITE:Ln.GRAY},u(e.lastModified)))),B.createElement(K,{flexDirection:"column",width:20},n.map((e,t)=>B.createElement(Y,{key:`branch-${e.id}`,color:s===t?Ln.WHITE:Ln.GRAY,wrap:"truncate-end"},e.gitBranch||"-"))),B.createElement(K,{flexDirection:"column",width:11},n.map((e,t)=>B.createElement(Y,{key:`msg-${e.id}`,color:s===t?Ln.WHITE:Ln.GRAY},e.messageCount))),B.createElement(K,{flexDirection:"column"},n.map((e,t)=>B.createElement(Y,{key:`summary-${e.id}`,color:s===t?Ln.WHITE:Ln.GRAY,wrap:"truncate-end"},p(e))))))},"SessionsResumeTable");function getImageHintText({selectedIndex:e,imageCount:t,inHistory:n}){return-1!==e?t>1?"← → · Delete to remove · Esc to deselect":"Delete to remove · Esc to deselect":n?"↓ · ↑ imgs":"↑ to select"}function buildImageRows({imageCount:e,rowWidth:t}){const n=[];let r=[],s=0;for(let o=0;o<e;o++){const e=`[Image #${o+1}]`.length,i=e+(r.length>0?1:0);r.length>0&&s+i>t?(n.push(r),r=[o],s=e):(r.push(o),s+=i)}return r.length>0&&n.push(r),n}function shouldSelectImageOnUpArrow({isOnFirstLine:e,imageCount:t,selectedImageIndex:n,historyIndex:r}){return e&&t>0&&-1===n&&-1===r}function nextImageIndex({currentIndex:e,imageCount:t}){return e===t-1?0:e+1}function prevImageIndex({currentIndex:e,imageCount:t}){return 0===e?t-1:e-1}function removeImageAt({images:e,index:t}){const n=e.filter((e,n)=>n!==t);return{remainingImages:n,nextSelectedIndex:n.length>0?n.length-1:-1}}function ImageLabel({index:e,isSelected:t,filePath:n,showSpaceBefore:r}){const s=`[Image #${e+1}]`,o=n?createOSC8Link(`file://${n}`,s,!1):s;return B.createElement(Y,null,r?" ":"",t?B.createElement(Y,{inverse:!0},s):o)}function ImageRowsDisplay({detectedImages:e,selectedImageIndex:t,imageTempPaths:n,termWidth:r,inHistory:s}){if(0===e.length)return null;const o=getImageHintText({selectedIndex:t,imageCount:e.length,inHistory:s}),i=Math.max(1,r-(o.length+2)),a=buildImageRows({imageCount:e.length,rowWidth:i});return B.createElement(K,{flexDirection:"column",width:"100%",alignItems:"flex-end"},a.map((e,r)=>B.createElement(K,{key:r,flexDirection:"row"},B.createElement(K,{flexShrink:0,marginRight:1},0===r&&B.createElement(Y,{color:Ln.DIM},o)),B.createElement(K,{flexDirection:"row"},e.map((e,r)=>B.createElement(ImageLabel,{key:e,index:e,isSelected:e===t,filePath:n[e],showSpaceBefore:r>0}))))))}Nt(),rr(),Nt(),__name(getImageHintText,"getImageHintText"),__name(buildImageRows,"buildImageRows"),__name(shouldSelectImageOnUpArrow,"shouldSelectImageOnUpArrow"),__name(nextImageIndex,"nextImageIndex"),__name(prevImageIndex,"prevImageIndex"),__name(removeImageAt,"removeImageAt"),__name(ImageLabel,"ImageLabel"),__name(ImageRowsDisplay,"ImageRowsDisplay"),Nt(),Sl();var uk=__name((e={})=>{const{enabled:t=!0,paused:n=!1}=e,[r,s]=W(null),[o,i]=W(!1),a=Q(!1),l=Q(null),[u,d]=W(!1),[m,p]=W("connected"),g=Q(null),h=Q(null),f=V((e,t)=>{h.current&&(clearTimeout(h.current),h.current=null),p(e),d(!0),void 0!==t&&(h.current=setTimeout(()=>{d(!1)},t))},[]),y=V(()=>{h.current&&(clearTimeout(h.current),h.current=null)},[]),w=V(async(e=!1)=>{if(!a.current){a.current=!0;try{let t=l.current,n=t?.isConnected??!1;if(!n){t?.disconnect(),t=new dl,l.current=t;const r=e?200:500;n=await t.connect(r)}const r=g.current;if(null===r?n&&f("connected",3e3):r!==n&&(n?f("connected",2e3):f("disconnected",5e3)),g.current=n,i(n),n&&t){const n=e?500:1e3,r=await t.getContext(n);null!==r||t.isConnected||(t.disconnect(),l.current=null),s(r)}else s(null)}catch{!0===g.current&&f("disconnected",5e3),g.current=!1,i(!1),s(null),l.current?.disconnect(),l.current=null}finally{a.current=!1}}},[f]);G(()=>{if(!t||n)return;w(!0);const e=setInterval(()=>w(!1),500);return()=>{clearInterval(e),y(),l.current?.disconnect(),l.current=null}},[t,n,w,y]);const S={visible:u,message:"connected"===m?`IDE ${be.tick}`:"IDE disconnected",type:m};return{context:r,connected:o,refresh:w,connectionIndicator:S}},"useVSCodeContext");Nt();var dk=__name(e=>{if(!e.activeFile&&!e.selection)return"";const t=["<ide-context>"];if(e.activeFile){const{relativePath:n,language:r,cursor:s}=e.activeFile;t.push(`File: ${n} (${r}, line ${s.line})`)}if(e.selection){const{text:n,startLine:r,endLine:s}=e.selection,o=e.activeFile?.language??"";t.push(`Selected lines ${r}-${s}:`),t.push(`\`\`\`${o}`);const i=n.replace(/```/g,"` ` `").replace(/<\/ide-context>/gi,"</ide-context>");t.push(i),t.push("```")}return t.push("</ide-context>"),t.join("\n")+"\n"},"formatContextForPrompt");Nt();var mk=__name((e,t)=>!(!e||!t?.selection&&!t?.activeFile?.relativePath),"hasIDEContext"),pk=__name((e,t,n)=>{const r=e?t?.selection:null;if(r)return`${r.lineCount} lines selected`;const s=e?t?.activeFile:null;if(s?.relativePath){const e=s.relativePath.split("/").pop()||"",t=n<80?15:n<120?25:40;return`In ${e.length>t?e.slice(0,t-1)+"…":e}`}return"? for shortcuts"},"getIndicatorText"),gk=["","[118;5u","[118;5u"];function removeAltPCharacter(e){return e.includes("π")?e.replace(/π/g,""):null}function isPrecededByWhitespace(e){return!e||" "===e||"\n"===e||"\t"===e}__name(removeAltPCharacter,"removeAltPCharacter"),__name(isPrecededByWhitespace,"isPrecededByWhitespace");var hk=__name(()=>B.createElement(K,{flexDirection:"column",paddingLeft:1},B.createElement(Y,{color:Ln.DIM,bold:!0},"Available Shortcuts:"),B.createElement(K,{columnGap:4},B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Ln.DIM},"! for bash mode"),B.createElement(Y,{color:Ln.DIM},"/ for commands"),B.createElement(Y,{color:Ln.DIM},"@ for file paths"),B.createElement(Y,{color:Ln.DIM},"shift + tab to toggle auto-accept")),B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Ln.DIM},"double tap esc to clear input"),B.createElement(Y,{color:Ln.DIM},"ctrl + j / shift + ⏎ for newline"),B.createElement(Y,{color:Ln.DIM},"ctrl + g to open in editor"),B.createElement(Y,{color:Ln.DIM},"ctrl + z to suspend")))),"ShortcutMenu"),fk=__name(({input:e,onSubmit:t,setInput:n,showCursor:r=!0,placeholder:o="Enter your input…",isPlaceholderPrediction:i=!1,onPlaceholderAccepted:a,showFileList:l,setShowFileList:u,fileSearchQuery:d,setFileSearchQuery:m,onCommand:p,contextUsage:g,tasteLearning:h=!1,tasteUsage:f=!1,shareInfo:y,showShareNotification:w,unshareNotificationMessage:S,tasteNotificationMessage:b,updateStatus:E,updateFailedInfo:C,currentProvider:v,showProviderInfo:T,permissionMode:k="standard",onToggleAutoAccept:_,hintMessage:P,historyManager:A,pendingExitKey:x=null,onOverlayVisibilityChange:I,onDoubleEscapeEmpty:N,onAltP:R,isProcessing:$=!1,ideContextEnabled:L=!0})=>{const[M,O]=W(0),[D,q]=W(!1),[F,j]=W(!1),[z,U]=W(!1),[J,ee]=W(!1),[te,ne]=W(""),[re,se]=W(!1),oe=Q(0),ie=Q(0),[ae,le]=W([]),[ce,ue]=W([]),[de,me]=W(-1),[pe,ge]=W(""),he=Q(!1),fe=Q(!1),[ye,we]=W(-1),[Se,Ee]=W(""),Ce=Q(0),{isEditorOpen:ve,editorError:Te,handleOpenInEditor:ke,clearEditorError:_e}=useExternalEditor({input:e,setInput:n,setInputKey:O,onEditorClose:__name(()=>{he.current=!1},"onEditorClose")}),{handlePaste:Pe,resetPasteState:Ae,isPasting:xe}=useBracketedPaste({input:e,detectedContent:ae,setInput:n,setDetectedImages:ue,setDetectedContent:le,incrementInputKey:__name(()=>O(e=>e+1),"incrementInputKey")}),{context:Ie,connected:Ne,refresh:Re,connectionIndicator:$e}=uk({enabled:L,paused:$}),{stdout:Le}=X(),Me=Le?.columns??80,{pr:Oe}=ek();G(()=>{const e=l||J||re;I?.(e)},[l,J,re,I]);const De=V(()=>{ue([]),me(-1)},[]),qe=V(()=>{n(""),j(!1),ee(!1),ne(""),se(!1),le([]),De(),ge(""),Ae(),we(-1),Ee(""),O(e=>e+1)},[n,Ae,De]),Fe=V(()=>{he.current=!0,n(e+"\n"),O(e=>e+1),setTimeout(()=>{he.current=!1},0)},[e,n]);Z(async(t,r)=>{if(-1!==de&&r.leftArrow)return void me(prevImageIndex({currentIndex:de,imageCount:ce.length}));if(-1!==de&&r.rightArrow)return void me(nextImageIndex({currentIndex:de,imageCount:ce.length}));if(r.upArrow){if(l||J||re)return;const t=e.indexOf("\n"),r=-1===t||Ce.current<=t;if(shouldSelectImageOnUpArrow({isOnFirstLine:r,imageCount:ce.length,selectedImageIndex:de,historyIndex:ye}))return void me(ce.length-1);if(-1!==de&&me(-1),0!==e.length&&-1===ye&&!r)return;const s=A?.count()??0;if(0===s)return;-1===ye&&Ee(e);const o=Math.min(ye+1,s-1);return void(o!==ye&&(we(o),n(A?.getAt(o)||""),O(e=>e+1)))}if(r.downArrow){if(l||J||re)return;if(-1===ye)return;const t=e.lastIndexOf("\n");if(!(-1===t||Ce.current>t))return;const r=ye-1;return we(r),n(-1===r?Se:A?.getAt(r)||""),void O(e=>e+1)}if(""===t||r.ctrl&&"c"===t)return void De();if(r.tab&&!r.shift&&0===e.length&&i&&o&&o.length>0&&!l&&!J&&!re)return he.current=!0,n(o),O(e=>e+1),a?.(),void setTimeout(()=>{he.current=!1},0);if(isCtrlKey({inputChar:t,key:r,letter:"g",ctrlCode:7}))return he.current=!0,void ke();if(getIsExpandToolShortcut(r,t))return he.current=!0,n(e),O(e=>e+1),void setTimeout(()=>{he.current=!1},0);if(isNewlineShortcutKey({inputChar:t,key:r,isPasting:xe()}))return fe.current=!0,Fe(),void setTimeout(()=>{fe.current=!1},0);if(r.meta&&r.backspace)return void qe();if(r.meta&&"w"===t)return he.current=!0,void qe();const s=r.ctrl&&"v"===t||gk.includes(t),u=r.meta&&"v"===t;if(s||u){if(s&&"darwin"===process.platform){const t=e,r=await detectClipboardImage();return r&&(ue(e=>[...e,r]),n(t),O(e=>e+1)),void(he.current=!0)}}else if(!r.ctrl&&!r.meta||"u"!==t){if(r.ctrl&&"z"===t?.toLowerCase())return U(!0),void setTimeout(()=>{process.kill(process.pid,"SIGTSTP")},100);if(-1!==de&&(r.delete||r.backspace)){const{remainingImages:e,nextSelectedIndex:t}=removeImageAt({images:ce,index:de});return ue([...e]),void me(t)}if(r.escape){if(-1!==de)return void me(-1);if(J)return;if(re)return se(!1),n(pe),void O(e=>e+1);const t=Date.now();return t-oe.current<500?(e.length>0?qe():N?.(),oe.current=0,ie.current=0):(oe.current=t,D||F||(ie.current=t)),q(!1),void j(!1)}D&&(r.backspace||r.delete)&&0===e.length&&q(!1)}});const je=V(async t=>{if(ve)return;const r=removeAltPCharacter(t);if(null!==r)return n(r),void R?.();const s=processBracketedPaste(t);if((s.isPasteStart||s.isPasteEnd||xe())&&await Pe(t))return;if(he.current)return void(he.current=!1);-1!==ye&&we(-1);const o=1===t.length,i=t.slice(-1);if(o){if("?"===i&&!D)return q(!0),n(""),void O(e=>e+1);if("!"===i&&!F)return q(!1),j(!0),n(""),void O(e=>e+1)}if("/"!==i||J||"/"!==t||(ee(!0),ne("")),J&&!t.startsWith("/")&&(ee(!1),ne("")),J&&t.startsWith("/")){const e=t.substring(1);e.includes(" ")?(ee(!1),ne("")):ne(e)}"@"!==i||l||isPrecededByWhitespace(t.length>1?t[t.length-2]:"")&&(u(!0),m(""));const a=t.lastIndexOf("@");if(t.length<e.length&&-1!==a&&" "===e.charAt(e.length-1)&&" "!==t.charAt(t.length-1)){const e=t.substring(a+1),n=!e.includes(" "),r=a>0?t[a-1]:"";n&&isPrecededByWhitespace(r)&&(u(!0),m(e))}if(l)if(t.length<e.length){const e=t.lastIndexOf("@");if(-1===e)u(!1),m("");else{const n=t.substring(e+1);m(n)}}else{const e=t.lastIndexOf("@");if(-1!==e){const n=t.substring(e+1),r=n.indexOf(" ");if(-1!==r){const e=n.substring(0,r);m(e),u(!1)}else m(n)}}D&&(t!==e||t.length<e.length)&&q(!1),Te&&_e(),0===t.length&&(j(!1),ee(!1),ne(""),se(!1),De(),le([]),m(""),ge(""),Ae()),n(t)},[D,e,n,l,u,J,F,ce,ye,Pe,Ae,R,Te,_e,ve,De]),ze=V(async()=>{if(Re(),ie.current=0,D)return void q(!1);let n=e.trim();if(!F&&n.startsWith("/")&&p&&"handled"===(await p(n)).status)return A?.add(n),j(!1),ee(!1),ne(""),De(),le([]),we(-1),void Ee("");n.length>0&&A?.add(n),we(-1),Ee("");let r=[];const s=ce.length>0,o=ae.length>0;if(!F&&s&&(r=[...ce]),!F&&o){let e=n;ae.forEach((t,n)=>{const r=`[Text#${n+1}]`;e.includes(r)&&(e=e.replace(r,t))}),n=e}t({input:n,role:F?"bash":"user",images:r,ideContext:Ie?dk(Ie):void 0}),j(!1),ee(!1),ne(""),De(),le([])},[t,p,D,e,F,ce,ae,A,Re,De]),Be=V(t=>{const r=s(process.cwd(),t);let o;if(l&&""!==d){const t=e.lastIndexOf("@");o=-1!==t?e.substring(0,t+1)+r+" ":r+" "}else o=`${e}${r} `;n(o),u(!1),m(""),O(e=>e+1)},[n,u,e,l,d,m]),Ue=V(()=>{u(!1),m("")},[u,m]),We=V(t=>{if("/resume"===t)A?.add(t),we(-1),Ee(""),ge(e),ee(!1),ne(""),se(!0),n(""),O(e=>e+1);else{const e=Object.values(Nv).includes(t);ee(!1),ne(""),e?(A?.add(t),we(-1),Ee(""),n(""),O(e=>e+1),p&&p(t)):(n(t+" "),O(e=>e+1))}},[p,n,e,A]),Qe=V(e=>{ee(!1),ne(""),n(e+" "),O(e=>e+1)},[n]),Ge=V(()=>{ee(!1),ne(""),n(""),we(-1),Ee(""),O(e=>e+1)},[n]),He=V(e=>{se(!1),n(""),ge(""),we(-1),Ee(""),O(e=>e+1),p&&p(`/resume:${e}`)},[p,n]),Ve=V(()=>{se(!1),n(pe),we(-1),Ee(""),O(e=>e+1)},[pe,n]),Ke=V(e=>{Ce.current=e},[]),Ye=H(()=>{const t=Oe&&("OPEN"===Oe.state||"MERGED"===Oe.state);return"auto-accept"===k||"plan"===k||Ne||t?!D&&!re:!D&&0===e.length&&!F&&!re},[D,e,F,re,k,Ne,Oe]),Je=Q(new Map),Xe=H(()=>ce.map((e,t)=>{if(Je.current.has(e))return Je.current.get(e)??null;const n=saveTempImage(e,t+1);return Je.current.set(e,n),n}),[ce]),Ze=__name(()=>D||l||J||re||z?0:Ye||x||F?3:4,"getBottomMargin");return B.createElement(K,{width:"100%",flexDirection:"column",marginBottom:Ze()},!re&&B.createElement(K,{flexDirection:"column",width:"100%"},B.createElement(ImageRowsDisplay,{detectedImages:ce,selectedImageIndex:de,imageTempPaths:Xe,termWidth:Me,inHistory:-1!==ye}),B.createElement(Y,{color:F?Ln.GREEN:Ln.GRAY},be.line.repeat(Me)),B.createElement(TextInput,{key:M,value:e,placeholder:ve?"Save and close the editor to continue...":o,onChange:je,onSubmit:()=>{if(!fe.current)return Date.now()-ie.current<100?(ie.current=0,void Fe()):void(l||J||re||ve||ze());fe.current=!1},showCursor:!ve&&r&&-1===de,onCursorChange:Ke,prefix:`${F?"!":be.pointer} `,prefixColor:F?Ln.GREEN:Ln.WHITE}),B.createElement(Y,{color:F?Ln.GREEN:Ln.GRAY},be.line.repeat(Me))),D&&B.createElement(hk,null),z&&B.createElement(K,{paddingTop:1},B.createElement(Y,{color:Ln.YELLOW},"Command Code has been suspended. Run `fg` to bring\n\t\t\t\t\t\tCommand Code back.")),l&&B.createElement(tk,{onSelectFile:Be,onClose:Ue,searchQuery:d}),J&&B.createElement(Lv,{onSelectCommand:We,onInsertCommand:Qe,onClose:Ge,searchQuery:te}),re&&B.createElement(ck,{onSelectSession:He,onClose:Ve}),(Ye||x)&&B.createElement(lk,{termWidth:Me,indicatorText:pk(Ne,Ie,Me),isIDEIndicator:mk(Ne,Ie),permissionMode:k,prInfo:Oe,tasteLearning:h,contextUsage:g,connectionIndicator:$e,pendingExitKey:x,updateStatus:E,updateFailedInfo:C,currentProvider:v,showProviderInfo:T,isBashMode:F,shareInfo:y,showShareNotification:w,unshareNotificationMessage:S,tasteNotificationMessage:b}),Te&&B.createElement(K,{paddingLeft:1,flexDirection:"column"},B.createElement(Y,{color:Ln.YELLOW},Te)))},"InputBox");Nt(),jr(),rr();var yk=__name(({messages:e})=>0===e.length?null:B.createElement(K,{flexDirection:"column",marginBottom:1},B.createElement(K,{marginBottom:0},B.createElement(Y,{color:qn,dimColor:!0},"Queued (",e.length,")")),e.map((e,t)=>B.createElement(K,{key:t},B.createElement(Y,{dimColor:!0},be.pointerSmall," "),B.createElement(Y,{dimColor:!0},truncateString({text:e,maxChars:80}))))),"QueuedMessages"),wk=B.memo(({queuedMessages:e,isProcessing:t,executionState:n,status:r,input:s,setInput:o,onSubmit:i,showFileList:a,setShowFileList:l,fileSearchQuery:u,setFileSearchQuery:d,onCommand:m,outputTokens:p=0,contextUsage:g,tasteLearning:h,tasteUsage:f,shareInfo:y,showShareNotification:w,unshareNotificationMessage:S,tasteNotificationMessage:b,updateStatus:E,updateFailedInfo:C,currentProvider:v,showProviderInfo:T,permissionMode:k,onToggleAutoAccept:_,hintMessage:P,historyManager:A,pendingExitKey:x,onResetPendingExitKey:I,onDoubleEscapeEmpty:N,retryAttempt:R,onAltP:$,placeholder:L="Ask your question...",isPlaceholderPrediction:M=!1,onPlaceholderAccepted:O})=>{const[D,q]=W(0),F=Q(s);return G(()=>{x&&s!==F.current&&s.length>0&&I?.(),F.current=s},[s,x,I]),G(()=>{if(!t)return void q(0);const e=setInterval(()=>{q(e=>e+1e3)},1e3);return()=>{clearInterval(e)}},[t]),B.createElement(K,{flexDirection:"column"},B.createElement(yk,{messages:e}),B.createElement(K,{flexDirection:"row",justifyContent:"space-between"},B.createElement(K,{flexDirection:"column"},(t||n.isExecuting)&&null===R&&B.createElement(OT,{tokens:p,timeElapsed:D,status:n.isExecuting?`Executing: ${n.currentCommand}`:r}),P&&B.createElement(K,{marginLeft:1},B.createElement(Y,{dimColor:!0}," ","⎿"," ","Tip: ",P)))),B.createElement(fk,{input:s,setInput:o,onSubmit:i,placeholder:L,isPlaceholderPrediction:M,onPlaceholderAccepted:O,showFileList:a,setShowFileList:l,fileSearchQuery:u,setFileSearchQuery:d,onCommand:m,contextUsage:g,tasteLearning:h,tasteUsage:f,shareInfo:y,showShareNotification:w,unshareNotificationMessage:S,tasteNotificationMessage:b,updateStatus:E,updateFailedInfo:C,currentProvider:v,showProviderInfo:T,permissionMode:k,onToggleAutoAccept:_,hintMessage:P,historyManager:A,pendingExitKey:!x||t||n.isExecuting?null:x,onDoubleEscapeEmpty:N,onAltP:$,isProcessing:t}))});Nt(),ns(),ls(),sr(),ir();var Sk=__name(({onComplete:e,onCancel:t})=>{const[n,r]=W(!1),[s,o]=W(""),{authState:i,statusMessage:a,browserUrl:l,apiKeyInput:u,setApiKeyInput:d,handleApiKeySubmit:m,cancel:p}=useAuthFlow({onSuccess:__name((t,n)=>{const s=t.userName&&"API Key"!==t.userName&&"Manual API Key"!==t.userName?t.userName:"";o(s),isInternalTeamFlagEnforced()?r(!0):e(!0,s?`Logged in as ${s}`:"Logged in successfully")},"onSuccess"),onFailure:__name((t,n)=>{e(!1,n)},"onFailure"),onCancel:__name(()=>{t()},"onCancel")});return Z((t,r)=>{if(r.ctrl&&"c"===t){if(n)return void e(!0,s?`Logged in as ${s}. Note: Anthropic authentication skipped.`:"Logged in successfully. Note: Anthropic authentication skipped.");p()}}),n?B.createElement(er,{onSuccess:()=>{e(!0,s?`Logged in as ${s} with Anthropic`:"Logged in successfully with Anthropic")},onCancel:()=>{e(!0,s?`Logged in as ${s}. Note: Anthropic authentication skipped.`:"Logged in successfully. Note: Anthropic authentication skipped.")},onFailure:t=>{e(!0,s?`Logged in as ${s}. Anthropic auth failed: ${t}`:`Logged in successfully. Anthropic auth failed: ${t}`)}}):B.createElement(ss,{authState:i,statusMessage:a,browserUrl:l,apiKeyInput:u,setApiKeyInput:d,handleApiKeySubmit:m})},"LoginOverlay");async function discoverOAuthMetadata(e){const t=new d(e),n=`${t.protocol}//${t.host}`;try{const e=`${n}/.well-known/oauth-authorization-server`,t=await fetchWithTimeout(e,{method:"GET",headers:{Accept:"application/json"}});if(t.ok){const e=await t.json();if(e.authorization_endpoint&&e.token_endpoint)return{authorizationEndpoint:e.authorization_endpoint,tokenEndpoint:e.token_endpoint,registrationEndpoint:e.registration_endpoint,scopes:e.scopes_supported}}}catch(e){dlog("[MCP] OAuth discovery endpoint not available",e)}try{const e=`${n}/.well-known/openid-configuration`,t=await fetchWithTimeout(e,{method:"GET",headers:{Accept:"application/json"}});if(t.ok){const e=await t.json();if(e.authorization_endpoint&&e.token_endpoint)return{authorizationEndpoint:e.authorization_endpoint,tokenEndpoint:e.token_endpoint,registrationEndpoint:e.registration_endpoint,scopes:e.scopes_supported}}}catch(e){dlog("[MCP] OIDC discovery not available",e)}return null}async function checkServerAuthRequirements(e){try{const t=await fetchWithTimeout(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",method:"initialize",id:0,params:{protocolVersion:Ds,capabilities:{},clientInfo:qs}})});return 401===t.status||403===t.status?{requiresAuth:!0,metadata:await discoverOAuthMetadata(e)||void 0}:{requiresAuth:!1}}catch(e){return{requiresAuth:!1,error:`Server unreachable: ${e instanceof Error?e.message:String(e)}`}}}async function registerOAuthClient({registrationEndpoint:e,clientName:t,redirectUris:n}){try{const r=await fetchWithTimeout(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({client_name:t,redirect_uris:n,token_endpoint_auth_method:"none",grant_types:["authorization_code","refresh_token"],response_types:["code"]})});if(r.ok){const e=await r.json();return{clientId:e.client_id,clientSecret:e.client_secret}}}catch(e){dlog("[MCP] OAuth client registration failed",e)}return null}Nt(),rr(),Nt(),Vs(),Hs(),eo(),Ys(),to(),uo(),mo(),po(),Nt(),mo(),po(),Js(),co(),Nt(),so(),Hs(),$n(),__name(discoverOAuthMetadata,"discoverOAuthMetadata"),__name(checkServerAuthRequirements,"checkServerAuthRequirements"),__name(registerOAuthClient,"registerOAuthClient");var bk=__name(({onClose:e})=>{const[t,n]=W([]),[r,s]=W(!0),[o,i]=W(0),[a,l]=W("list"),[u,d]=W(null);G(()=>{m()},[]);const m=__name(async()=>{s(!0);try{const e=await listMcpServers(),t=getMcpConnectionManager().getConnectedServers(),r=await Promise.all(e.map(async e=>{const n=t.find(t=>t.name===e.name);let r,s,o="disconnected";return n&&"connected"===n.status?(o="connected",r=n.tools.length):n&&"error"===n.status?(o="error",s=n.error):e.config.oauth&&(o=await hasTokens(e.name)?"authenticated":"requires_auth"),{name:e.name,config:e.config,scope:e.scope,status:o,toolCount:r,error:s}}));n(r)}catch{}finally{s(!1)}},"loadServers"),p=H(()=>{const e=[];for(const n of["local","project","user"])e.push(...t.filter(e=>e.scope===n));return e},[t]),g=p[o]??null;Z((t,n)=>{n.ctrl&&"c"===t?e():n.escape?"actions"===a||"confirm-remove"===a?(l("list"),d(null)):e():"list"===a&&(n.upArrow&&(i(e=>Math.max(0,e-1)),d(null)),n.downArrow&&(i(e=>Math.min(p.length-1,e+1)),d(null)),n.return&&g&&(l("actions"),d(null)))});const h=__name(e=>{switch(e){case"connected":return B.createElement(Y,{color:Ln.GREEN},be.tick);case"authenticated":return B.createElement(Y,{color:Ln.CYAN},be.tick);case"requires_auth":return B.createElement(Y,{color:Ln.YELLOW},be.warning);case"error":return B.createElement(Y,{color:Ln.RED},be.cross);default:return B.createElement(Y,{color:Ln.GRAY},be.circle)}},"getStatusIcon"),f=__name(e=>{switch(e.status){case"connected":return"connected"+(void 0!==e.toolCount?` · ${e.toolCount} tools`:"");case"authenticated":return"authenticated · not connected";case"requires_auth":return"requires authentication";case"error":return e.error||"error";default:return"not connected"}},"getStatusText"),y=__name(e=>{switch(e){case"local":return"Local MCPs";case"project":return"Project MCPs";case"user":return"User MCPs"}},"getScopeLabel"),w=__name(e=>{switch(e){case"local":return"~/.commandcode/projects/*/mcp.json";case"project":return".mcp.json";case"user":return"~/.commandcode/mcp.json"}},"getScopePath"),S=__name(async e=>{if(g)if("back"!==e.value)if("connected"!==e.value)if("authenticated"!==e.value)if("connect"!==e.value)if("auth"!==e.value)"remove"!==e.value||l("confirm-remove");else{if(!g.config.oauth)return void d({text:"No OAuth configured for this server",color:Ln.YELLOW});d({text:`Authenticating ${g.name}...`,color:Ln.CYAN,loading:!0});try{const e={authorizationUrl:g.config.oauth.authorizationUrl,tokenUrl:g.config.oauth.tokenUrl,clientId:g.config.oauth.clientId,clientSecret:g.config.oauth.clientSecret,scopes:g.config.oauth.scopes},t=await performOAuthFlow(g.name,e,{onStatus:__name(()=>{},"onStatus")});if(t.success){d({text:`${be.tick} Authenticated with ${g.name}`,color:Ln.GREEN});try{const e=getMcpConnectionManager();await e.reconnectServer(g.name)}catch{}await m()}else d({text:`${be.cross} Auth failed: ${t.error}`,color:Ln.RED})}catch(e){d({text:`${be.cross} Failed: ${e instanceof Error?e.message:String(e)}`,color:Ln.RED})}}else{d({text:`Connecting ${g.name}...`,color:Ln.CYAN,loading:!0});try{const e=getMcpConnectionManager();await e.reconnectServer(g.name),d({text:`${be.tick} Connected to ${g.name}`,color:Ln.GREEN}),await m()}catch(e){d({text:`${be.cross} Failed: ${e instanceof Error?e.message:String(e)}`,color:Ln.RED})}}else d({text:"Already authenticated",color:Ln.GREEN});else d({text:"Already connected",color:Ln.GREEN});else l("list")},"handleActionSelect"),b=__name(async e=>{if(g)if("yes"===e.value)try{const e=getMcpConnectionManager();"connected"===g.status&&await e.disconnectServer(g.name),await removeMcpServer({name:g.name,scope:g.scope}),l("list"),await m(),i(e=>Math.min(e,Math.max(0,p.length-2)))}catch(e){d({text:`${be.cross} Failed: ${e instanceof Error?e.message:String(e)}`,color:Ln.RED}),l("actions")}else l("actions")},"handleRemoveConfirm");if(r)return B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Mn,bold:!0},"Manage MCP servers"),B.createElement(Y,{dimColor:!0},"Loading..."));if("confirm-remove"===a&&g)return B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Ln.RED,bold:!0},"Remove ",g.name,"?"),B.createElement(Y,{dimColor:!0},"This will remove the server from ",g.scope," config."),B.createElement(K,{marginTop:1},B.createElement(Ke,{items:[{label:"Yes, remove",value:"yes"},{label:"Cancel",value:"no"}],onSelect:b,indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:Ln.WHITE},e?">":" "),itemComponent:({isSelected:e,label:t})=>B.createElement(Y,{color:e?Ln.WHITE:Ln.GRAY}," ",t)})),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"↑↓ navigate · Enter to select · Esc to cancel")));if("actions"===a&&g){const e=[];return"connected"===g.status?e.push({label:"Connected",value:"connected"}):e.push({label:"Connect",value:"connect"}),g.config.oauth&&("authenticated"===g.status||"connected"===g.status?e.push({label:"Authenticated",value:"authenticated"}):e.push({label:"Authenticate",value:"auth"})),e.push({label:"Remove",value:"remove"}),e.push({label:"Back",value:"back"}),B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Mn,bold:!0},g.name),B.createElement(K,null,h(g.status),B.createElement(Y,{dimColor:!0}," ",f(g))),B.createElement(K,{marginTop:1},B.createElement(Ke,{items:e,onSelect:S,indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:Ln.WHITE},e?">":" "),itemComponent:({isSelected:e,label:t})=>B.createElement(Y,{color:e?Ln.WHITE:Ln.GRAY}," ",t)})),u&&B.createElement(K,{marginTop:1},u.loading&&B.createElement(Y,{color:u.color},B.createElement(Se,{type:"dots"})," "),B.createElement(Y,{color:u.color},u.text)),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"↑↓ navigate · Enter to select · Esc to go back")))}let E=null;return B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:Mn,bold:!0},"Manage MCP servers"),B.createElement(Y,{dimColor:!0},t.length," ",1===t.length?"server":"servers"),0===t.length?B.createElement(K,{marginTop:1,flexDirection:"column"},B.createElement(Y,{dimColor:!0},"No MCP servers configured."),B.createElement(Y,{dimColor:!0},'Use "cmd mcp add" to add a server.'),B.createElement(Y,{dimColor:!0},"Docs: https://commandcode.ai/docs/mcp")):B.createElement(K,{marginTop:1,flexDirection:"column"},p.map((e,t)=>{const n=e.scope!==E;E=e.scope;const r=t===o;return B.createElement(B.Fragment,{key:e.name},n&&B.createElement(K,{marginTop:0===t?0:1},B.createElement(Y,{bold:!0},y(e.scope)),B.createElement(Y,{dimColor:!0}," (",w(e.scope),")")),B.createElement(K,{paddingLeft:1},B.createElement(Y,{color:r?Ln.WHITE:Ln.GRAY},r?"› ":" "),B.createElement(Y,{color:r?Ln.WHITE:void 0,bold:r},e.name),B.createElement(Y,{dimColor:!0}," · "),h(e.status),B.createElement(Y,{color:"connected"===e.status?Ln.GREEN:"authenticated"===e.status?Ln.CYAN:"requires_auth"===e.status?Ln.YELLOW:Ln.GRAY}," ",f(e))))})),u&&B.createElement(K,{marginTop:1},u.loading&&B.createElement(Y,{color:u.color},B.createElement(Se,{type:"dots"})," "),B.createElement(Y,{color:u.color},u.text)),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"↑↓ navigate · Enter to select · Esc to close")))},"McpManager");Nt(),qE(),Ot(),un(),rr();var Ek=__name(({onClose:e})=>{const[t,n]=W([]),[r,s]=W(0),[o,i]=W(!0),[a,l]=W(null);G(()=>{__name(async()=>{try{const e=await discoverMemoryFiles(process.cwd());n(e),i(!1)}catch(e){l(e instanceof Error?e.message:"Failed to discover memory files"),i(!1)}},"loadMemoryFiles")()},[]);const u=__name(async t=>{try{await openInEditor(t.path),e()}catch(t){console.error("Error opening memory file. Please ensure you have an editor set up."),e()}},"handleOpenInEditor"),d=t.filter(e=>"project"===e.type||"user"===e.type);if(Z((t,n)=>{n.escape?e():n.upArrow?s(e=>Math.max(0,e-1)):n.downArrow?s(e=>Math.min(d.length-1,e+1)):(n.return&&d[r]&&u(d[r]),"1"===t&&d[0]&&u(d[0]),"2"===t&&d[1]&&u(d[1]))}),o)return B.createElement(K,{paddingLeft:1,paddingTop:1},B.createElement(Y,{color:Ln.DIM},"Loading memory files..."));if(a)return B.createElement(K,{paddingLeft:1,paddingTop:1},B.createElement(Y,{color:Ln.RED},be.cross," ",a));const m=d.map((e,t)=>{const n=t+1;let r="",s="";return"project"===e.type?(r=`${n}. Project memory`,s=e.exists?"Checked in at ./AGENTS.md":"Not found at ./AGENTS.md"):"user"===e.type&&(r=`${n}. User memory`,s=e.exists?"Saved in ~/.commandcode/AGENTS.md":"Not found in ~/.commandcode/AGENTS.md"),{label:r,value:e.path,description:s}});return B.createElement(K,{flexDirection:"column",width:"100%",borderStyle:"single",borderColor:Ln.GRAY,paddingTop:1,paddingBottom:1,paddingLeft:2,paddingRight:2},B.createElement(K,null,B.createElement(Y,{color:Ln.WHITE,bold:!0},"Select memory to edit:")),B.createElement(K,{columnGap:4,marginTop:1},B.createElement(K,{flexDirection:"column"},m.map((e,t)=>B.createElement(Y,{key:t,color:r===t?Ln.WHITE:Ln.DIM},r===t?`${sn} `:" ",e.label))),B.createElement(K,{flexDirection:"column"},m.map((e,t)=>B.createElement(Y,{key:t,color:r===t?Ln.WHITE:Ln.DIM},e.description)))))},"MemorySelector");Nt(),Nt();var Ck=rt()?"∴":"#";function AssistantMessage({content:e}){return B.createElement(K,null,B.createElement(Y,null,Ck),B.createElement(K,{marginLeft:1,flexGrow:1,flexShrink:1,minWidth:0},B.createElement(Markdown,null,e)))}__name(AssistantMessage,"AssistantMessage"),Nt(),un(),rr();var vk={"Interrupted by user":"Interrupted by user","Insufficient credits":nn};function UserMessage({content:e,imageCount:t=0}){const n="Interrupted by user"===e,r="Insufficient credits"===e,s=e.startsWith("Error:"),o=n||r||s,i=o&&vk[e]||e;return B.createElement(K,{flexDirection:"column"},B.createElement(K,{backgroundColor:o?void 0:Qn.BG,paddingRight:1},B.createElement(Y,{color:o?Ln.RED:Qn.POINTER,bold:!o},be.pointer),B.createElement(K,{marginLeft:1},B.createElement(Y,{color:o?Ln.RED:Ln.WHITE,wrap:"wrap"},i))),t>0&&B.createElement(K,{marginLeft:1},B.createElement(Y,{dimColor:!0},"⎿"," ",Array.from({length:t},(e,t)=>`[Image #${t+1}]`).join(" "))))}function BashMessage({command:e,output:t,isPending:n=!1,hasError:r=!1}){let s,o;return n?(s=Ln.YELLOW,o=be.arrowRight):r?(s=Ln.RED,o=be.cross):(s=Ln.GREEN,o=be.tick),B.createElement(K,null,B.createElement(Y,{color:s},o),B.createElement(K,{flexDirection:"column",marginLeft:1},B.createElement(K,null,B.createElement(Y,{color:Ln.GRAY},"$ "),B.createElement(Y,{color:s,bold:!0},e)),B.createElement(K,{columnGap:1,marginLeft:1},B.createElement(Y,null,"⎿"," "),B.createElement(Y,{color:r?Ln.RED:n?Ln.YELLOW:"default",wrap:"wrap"},n?"Executing…":t||"(No output)"))))}__name(UserMessage,"UserMessage"),Nt(),rr(),__name(BashMessage,"BashMessage"),Nt(),Nt(),Ot();rr(),Nt(),Ot();var Tk="Coding agent that continuously learns your taste of writing code.",kk=34,_k=[{key:"Shift+Tab",description:"Toggle mode (default → auto-accept → plan)"},{key:"Ctrl+T",description:"Toggle learning feed"},{key:"Ctrl+O",description:"Toggle expanded tool output (Shift+O in iTerm2)"},{key:"Alt+P",description:"Quick model switch (Option+P on macOS)"},{key:"Ctrl+G",description:"Open input in external editor ($EDITOR)"},{key:"Press Esc twice",description:"Rewind to previous checkpoint"},{key:"/",description:"Open command menu"}],Pk=[{key:"cmd",description:"Start interactive session"},{key:'cmd "message"',description:"Start with initial message"},{key:"-r, --resume",description:"Resume a conversation"},{key:"-c, --continue",description:"Continue the last conversation"},{key:"-t, --trust",description:"Auto-trust project (skip initial permission prompt)"},{key:"-p, --print [query]",description:"Run in non-interactive mode, output response and exit"},{key:"--plan",description:"Start in plan mode"},{key:"--permission-mode <mode>",description:"Set permission mode (standard, plan, auto-accept)"},{key:"--dangerously-skip-permissions",description:"Bypass all permission prompts (use with caution)"},{key:"--add-dir <directory>",description:"Add directory to workspace context"},{key:"--skip-onboarding",description:"Skip taste onboarding (for automated runs)"},{key:"--ide-setup",description:"Setup extension for editor context"},{key:"-v, --version",description:"Output the version number"},{key:"-h, --help",description:"Display this help message"}],Ak=[{key:"/init",description:"Initialize AGENTS.md for this project"},{key:"/memory",description:"Manage Command Code memory"},{key:"/resume",description:"Resume a past conversation"},{key:"/rewind",description:"Restore to a previous checkpoint (Press Esc twice)"},{key:"/clear",description:"Clear the conversation history"},{key:"/share",description:"Share conversation (copy link to clipboard)"},{key:"/unshare",description:"Stop sharing conversation"},{key:"/taste",description:"Manage Taste learning and usage"},{key:"/learn-taste",description:"Learn taste from sessions with other coding agents (Claude Code, Cursor, etc)"},{key:"/skills",description:"Browse and open agent skills"},{key:"/agents",description:"Manage agent configurations"},{key:"/mcp",description:"Manage MCP server connections"},{key:"/model",description:"Switch between Command Code models"},{key:"/provider",description:"Select AI provider (Command Code or Anthropic)"},{key:"/compact",description:"Compact the conversation history"},{key:"/ide",description:"Setup extension to fetch editor context"},{key:"/login",description:"Authenticate with CommandCode via browser"},{key:"/logout",description:"Remove stored authentication"},{key:"/feedback [title]",description:"Share feedback or report bugs (optional title)"},{key:"/review [pr]",description:"Review a pull request (optional PR number)"},{key:"/pr-comments",description:"Fetch all PR comments for current branch"},{key:"/add-dir",description:"Manage additional directory scope"},{key:"/help",description:"Display help information"},{key:"/exit",description:"Exit Command Code"}],xk=[{key:"cmd info",description:"Display system information"},{key:"cmd status",description:"Show authentication status"},{key:"cmd help",description:"Display help information"},{key:"cmd whoami",description:"Show current user"},{key:"cmd update",description:"Update Command Code to the latest version"},{key:"cmd feedback [title]",description:"Share feedback or report bugs (optional title)"},{key:"cmd taste",description:"Manage taste learning packages"},{key:"cmd learn-taste",description:"Learn command structure from repositories"},{key:"cmd mcp",description:"Manage MCP (Model Context Protocol) servers"},{key:"cmd login",description:"Login with Command Code account"},{key:"cmd logout",description:"Remove stored authentication"}],Ik=[{key:"Documentation",description:"https://commandcode.ai/docs"},{key:"Discord Community",description:"https://commandcode.ai/discord"}],Nk=[{key:"cmd",description:"Start interactive session"},{key:'cmd "fix the login bug"',description:"Start with a task"},{key:"cmd -c",description:"Continue last conversation"},{key:"cmd -r",description:"Resume a past session"},{key:'cmd -p "your query"',description:"Run non-interactive query"},{key:"cmd --add-dir ../shared",description:"Start with additional directory scope"},{key:"cmd info",description:"Show system information"},{key:'cmd feedback "title"',description:"Open feedback form with title"}],Rk='Start with a prompt: cmd "fix the login bug"';Nt(),yr();var $k="cmd";function getBinNames(){const e=getPackageJson();return e.bin&&"object"==typeof e.bin?Object.keys(e.bin):e.bin&&"string"==typeof e.bin?[e.name]:[$k]}function getInvokedCommandName(){try{const e=getBinNames(),n=process.argv[1];if(!n)return e[0]||$k;const r=t.basename(n).replace(/\.(m?[jt]s|cjs)$/,"");return e.includes(r)?r:e[0]||$k}catch{return $k}}function HelpMessage(){const e=getInvokedCommandName(),t=H(()=>Ak.filter(e=>!("/provider"===e.key&&!isInternalTeamFlagEnforced())),[]);return B.createElement(K,{flexDirection:"column",paddingY:1},B.createElement(K,{flexDirection:"column",marginBottom:1},B.createElement(K,null,B.createElement(Y,{bold:!0},"Command Code"),B.createElement(Y,{color:Ln.GRAY}," v","0.17.2")),B.createElement(Y,{color:Ln.GRAY},Tk)),B.createElement(K,{flexDirection:"column",marginBottom:1},B.createElement(Y,{bold:!0},"Usage"),B.createElement(K,{paddingLeft:2},B.createElement(Y,null,e," <command> [options]"))),B.createElement(K,{flexDirection:"column",marginBottom:1},B.createElement(Y,{bold:!0},"Options"),B.createElement(K,{flexDirection:"column",paddingLeft:2},Pk.map(t=>B.createElement(K,{key:t.key},B.createElement(Y,null,t.key.replace(/^cmd/,e).padEnd(kk)),B.createElement(Y,{color:Ln.GRAY},t.description))))),B.createElement(K,{flexDirection:"column",marginBottom:1},B.createElement(Y,{bold:!0},"Commands"),B.createElement(K,{flexDirection:"column",paddingLeft:2},xk.map(t=>B.createElement(K,{key:t.key},B.createElement(Y,null,t.key.replace(/^cmd/,e).padEnd(kk)),B.createElement(Y,{color:Ln.GRAY},t.description))))),B.createElement(K,{flexDirection:"column",marginBottom:1},B.createElement(Y,{bold:!0},"Slash Commands"),B.createElement(K,{flexDirection:"column",paddingLeft:2},t.map(e=>B.createElement(K,{key:e.key},B.createElement(Y,null,e.key.padEnd(kk)),B.createElement(Y,{color:Ln.GRAY},e.description))))),B.createElement(K,{flexDirection:"column",marginBottom:1},B.createElement(Y,{bold:!0},"Keyboard Shortcuts"),B.createElement(K,{flexDirection:"column",paddingLeft:2},_k.map(e=>B.createElement(K,{key:e.key},B.createElement(Y,null,e.key.padEnd(kk)),B.createElement(Y,{color:Ln.GRAY},e.description))))),B.createElement(K,{flexDirection:"column",marginBottom:1},B.createElement(Y,{bold:!0},"Examples"),B.createElement(K,{flexDirection:"column",paddingLeft:2},Nk.map(t=>B.createElement(K,{key:t.key},B.createElement(Y,null,t.key.replace(/^cmd/,e).padEnd(kk)),B.createElement(Y,{color:Ln.GRAY},t.description))))),B.createElement(K,{marginBottom:1},B.createElement(Y,{color:Ln.CYAN},be.pointer),B.createElement(Y,{color:Ln.GRAY}," ",Rk.replace(/cmd/,e))),B.createElement(K,{flexDirection:"column"},B.createElement(Y,{bold:!0},"Links"),B.createElement(K,{flexDirection:"column",paddingLeft:2},Ik.map(e=>B.createElement(K,{key:e.key},B.createElement(Y,null,e.key.padEnd(kk)),B.createElement(Y,{color:Ln.CYAN},e.description))))))}function SystemMessage({content:e}){return e.includes("KEYBOARD SHORTCUTS")&&e.includes("COMMANDS")?B.createElement(HelpMessage,null):B.createElement(K,{flexDirection:"column"},B.createElement(Y,{wrap:"wrap"},B.createElement(Markdown,null,e)))}function ErrorMessage({content:e}){const t=e.includes("Interrupted by user");return B.createElement(K,null,B.createElement(Y,{color:Ln.RED},t?be.pointer:be.warning),B.createElement(K,{marginLeft:1,flexGrow:1,flexShrink:1,minWidth:0},t?B.createElement(Y,{color:Ln.RED,wrap:"wrap"},e):B.createElement(Markdown,{color:Ln.RED},e)))}function AutoCompactMessage({content:e}){return B.createElement(K,null,B.createElement(Y,{dimColor:!0},be.info),B.createElement(K,{marginLeft:1,flexGrow:1,flexShrink:1,minWidth:0},B.createElement(Y,{dimColor:!0},e)))}function TasteSkipMessage(){return B.createElement(K,null,B.createElement(K,{flexShrink:0},B.createElement(Y,{backgroundColor:On.BADGE_BG,color:On.BADGE_FG,bold:!0},`${cv}Taste${cv}`)),B.createElement(Y,{dimColor:!0}," ","Skipped. Run"," "),B.createElement(Y,{color:Yn.CODE},"/learn-taste"),B.createElement(Y,{dimColor:!0}," or "),B.createElement(Y,{color:Yn.CODE},"cmd learn-taste"),B.createElement(Y,{dimColor:!0}," anytime."))}function InfoMessage({content:e,metadata:t}){return t?.isTasteSkip?B.createElement(TasteSkipMessage,null):t?.isAutoCompact?B.createElement(AutoCompactMessage,{content:e}):B.createElement(K,null,B.createElement(Y,{dimColor:!0},be.info),B.createElement(K,{marginLeft:1,flexGrow:1,flexShrink:1,minWidth:0},B.createElement(Y,{dimColor:!0},e)))}function CommandResultMessage({message:e,details:t,hasError:n=!1}){return B.createElement(K,{flexDirection:"column",marginBottom:0,marginTop:-1},B.createElement(K,{columnGap:1},B.createElement(Y,null,"⎿"," "),B.createElement(K,{flexGrow:1,flexShrink:1,minWidth:0},B.createElement(Y,{color:n?Ln.YELLOW:void 0},e))),t&&B.createElement(K,{marginLeft:3},B.createElement(Y,{dimColor:!0},"See ",t)))}function IDEStatusMessage({status:e,ide:t,details:n}){return B.createElement(K,{flexDirection:"column"},B.createElement(K,null,"connected"===e&&B.createElement(Y,null,B.createElement(Y,{color:Ln.GREEN},be.tick),B.createElement(Y,null," Connected to "),B.createElement(Y,{color:Ln.CYAN},t)),"installed"===e&&B.createElement(Y,null,B.createElement(Y,{color:Ln.GREEN},be.tick),B.createElement(Y,null," Installed for "),B.createElement(Y,{color:Ln.CYAN},t)),"needs_reload"===e&&B.createElement(Y,null,B.createElement(Y,{color:Ln.YELLOW},be.circle),B.createElement(Y,null," "),B.createElement(Y,{color:Ln.CYAN},t),B.createElement(Y,null," extension needs reload")),"failed"===e&&B.createElement(Y,null,B.createElement(Y,{color:Ln.RED},be.cross),B.createElement(Y,null," Install failed")),"not_in_ide"===e&&B.createElement(Y,null,B.createElement(Y,{color:Ln.YELLOW},be.circle),B.createElement(Y,null," Not in IDE"))),n?.map((e,t)=>B.createElement(Y,{key:t,dimColor:!0}," ",e)))}function renderFeedEntry(e,t){if("user"===e.role){const t=Array.isArray(e.metadata?.images)?e.metadata.images.length:0;return B.createElement(UserMessage,{content:e.input,imageCount:t})}return"assistant"===e.role?B.createElement(AssistantMessage,{content:e.input}):"tool"===e.role?B.createElement(ToolMessage,{name:Qo(e.name||""),input:e.input,output:e.output||"",isPending:Bo(e),hasError:zo(e),metadata:e.metadata,expandedOutput:t}):"bash"===e.role?B.createElement(BashMessage,{command:e.command||"",output:e.output||"",isPending:Bo(e),hasError:zo(e)}):"system"===e.role?B.createElement(SystemMessage,{content:e.input}):"info"===e.role?B.createElement(InfoMessage,{content:e.input,metadata:e.metadata}):"error"===e.role?B.createElement(ErrorMessage,{content:e.input}):"command-result"===e.role?B.createElement(CommandResultMessage,{message:e.input,details:e.details,hasError:e.hasError??!1}):"ide-status"===e.role?B.createElement(IDEStatusMessage,{status:e.status,ide:e.ide,details:e.details}):null}function getModelShortName(e){const t=Object.values(kt).find(t=>t.id===e);return t?t.name.toLowerCase().replace(" ","-"):e.includes("sonnet-4-6")?"sonnet-4.6":e.includes("sonnet")?"sonnet-4.5":e.includes("opus-4-6")?"opus-4.6":e.includes("opus")?"opus-4.5":"sonnet-4.6"}function TranscriptDivider({count:e,width:t}){const n=` ${e} hidden messages (ctrl+e to expand more) `,r=Math.max(0,Math.floor((t-n.length)/2)),s="─".repeat(r);return B.createElement(K,{marginBottom:1},B.createElement(Y,{dimColor:!0},s,n,s))}__name(getBinNames,"getBinNames"),__name(getInvokedCommandName,"getInvokedCommandName"),ir(),__name(HelpMessage,"HelpMessage"),__name(SystemMessage,"SystemMessage"),Jo(),Nt(),rr(),__name(ErrorMessage,"ErrorMessage"),Nt(),rr(),__name(AutoCompactMessage,"AutoCompactMessage"),__name(TasteSkipMessage,"TasteSkipMessage"),__name(InfoMessage,"InfoMessage"),Nt(),rr(),__name(CommandResultMessage,"CommandResultMessage"),Nt(),rr(),__name(IDEStatusMessage,"IDEStatusMessage"),yr(),Ot(),ir(),rr(),__name(renderFeedEntry,"renderFeedEntry"),__name(getModelShortName,"getModelShortName"),__name(TranscriptDivider,"TranscriptDivider");var Lk=B.memo(({feed:e,showHeader:t=!1,staticKey:n,expandedToolOutput:r=!1,currentModel:s,hiddenCount:o=0})=>{const i=o>0?{role:"transcript-divider",count:o}:null,a=[...t?["header"]:[],...i?[i]:[],...e],l=useTerminalWidth(),u=H(()=>BC(l),[l]),d=H(()=>getPackageJson().version||"0.0.0",[]),m=H(()=>getGitHeaderInfo(),[]),p=H(()=>{const e=process.cwd(),t=process.env.HOME??process.env.USERPROFILE??"";return e.replace(t,"~")},[]),g=s?getModelShortName(s):"sonnet-4.5";return B.createElement(J,{items:a,key:n,style:{width:"100%"}},e=>{if("object"==typeof e&&"transcript-divider"===e.role)return B.createElement(TranscriptDivider,{key:"transcript-divider",count:e.count,width:l});if("header"===e)return B.createElement(K,{key:"header",marginBottom:1,flexDirection:"column"},B.createElement(Ze,{name:"vice"},B.createElement(Y,null,u.trimEnd())),B.createElement(K,{flexDirection:"column",marginTop:1},B.createElement(K,null,B.createElement(Y,{color:Wn},"# "),B.createElement(Y,{bold:!0},"Command Code"),B.createElement(Y,{color:Wn}," v",d)),B.createElement(Y,{color:Wn},"# models: ",g," · ","taste-1",isInternalTeamFlagEnforced()&&" · --co"),B.createElement(K,null,B.createElement(Y,{color:Wn},"# ",p,m&&m.isLocal&&m.branch&&B.createElement(Y,{color:Wn}," (branch: ",m.branch,")")))));const t=e,n=renderFeedEntry(t,r);return B.createElement(K,{key:t.id,marginBottom:1,width:"90%"},n)})});Nt(),Jo(),ar(),rr();var Mk=U(__name(function LiveAgentStatusInner2({entry:e}){const t=Qo(e.name||"Agent"),n=e.input||"",r=n.split(/[.\n]/)[0],s=r?r+(n.includes(".")||n.includes("\n")?".":""):n,o=e.metadata?.tokensUsed||0,i=e.metadata?.elapsedSeconds||0,a=e.metadata?.recentTools||[],[l,u]=W(".");return G(()=>{const e=setInterval(()=>{u(e=>"..."===e?".":e+".")},500);return()=>clearInterval(e)},[]),B.createElement(K,{flexDirection:"column",marginBottom:1,width:"90%"},B.createElement(K,null,B.createElement(Y,{backgroundColor:zn.BG,color:zn.FG,bold:!0},` ${t} `),s&&B.createElement(Y,null," ","(",s,")")),B.createElement(K,{columnGap:1,marginLeft:1},B.createElement(Y,null,"⎿"," "),B.createElement(Y,{color:Ln.GRAY},"Running (",formatTime2(i)," | ",formatTokens(o),")",l)),a.length>0&&B.createElement(K,{flexDirection:"column",marginLeft:1},a.map((e,t)=>{const n=Qo(e.name);return B.createElement(K,{key:t,columnGap:1},B.createElement(Y,{color:Ln.GRAY},"⎿"),B.createElement(Y,{color:Ln.GRAY}," ",n),e.input&&B.createElement(Y,{color:Ln.GRAY},"(",e.input,")"))})))},"LiveAgentStatusInner")),Ok=U(__name(function LiveAgentStatus2({entry:e}){return"tool"!==e.role?null:B.createElement(Mk,{entry:e})},"LiveAgentStatus"));function getModelOptions(){return Object.values(kt).map(e=>({label:e.label,value:e.id,modelName:e.name,description:e.description}))}Nt(),Ot(),rr(),__name(getModelOptions,"getModelOptions");var Dk=__name(({onSelect:e,onCancel:t,currentModel:n})=>{const r=getModelOptions(),s=__name(t=>{e(t.value)},"handleSelect");Z((e,n)=>{n.escape&&t()});const o=n?r.findIndex(e=>e.value===n):0;return B.createElement(K,{flexDirection:"column",paddingX:0,width:"100%"},B.createElement(K,null,B.createElement(Y,{color:Mn,bold:!0},"Select model")),B.createElement(K,{marginBottom:1},B.createElement(Y,{dimColor:!0},"Switch between Command Code models. Applies to this session and future Command Code sessions.")),B.createElement(Ke,{items:r,onSelect:s,initialIndex:o>=0?o:0,indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:e?Ln.GREEN:Ln.GRAY},e?be.triangleRightSmall:" "),itemComponent:({isSelected:e,label:t})=>{const s=r.find(e=>e.label===t),o=s?.value===n,i=e?Ln.GREEN:Ln.GRAY;return B.createElement(K,null,B.createElement(Y,{color:i},` ${(s?.label||t).padEnd(24)}`),B.createElement(Y,{dimColor:!0},s?.description),o&&B.createElement(Y,{color:Ln.GREEN}," ",be.tick))}}),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"Press "),B.createElement(Y,{dimColor:!0,bold:!0},"Esc"),B.createElement(Y,{dimColor:!0}," to cancel")))},"ModelSelector");Nt(),ir(),rr();var qk=__name(({onSelect:e,onCancel:t,currentProvider:n})=>{const r=getProviderOptions(),s=__name(t=>{e(t.value)},"handleSelect");Z((e,n)=>{n.escape&&t()});const o=n?r.findIndex(e=>e.value===n):0,i=n&&-1===o;return B.createElement(K,{flexDirection:"column",paddingX:0,width:"100%"},B.createElement(K,{marginBottom:1,flexDirection:"row",justifyContent:"space-between"},B.createElement(K,null,B.createElement(Y,{bold:!0},"Select AI Provider")),n&&B.createElement(K,{flexDirection:"row"},B.createElement(Y,{dimColor:!0},"Current: "),B.createElement(Y,{color:Ln.GREEN},getProviderDisplayName(n)),i&&B.createElement(Y,{color:Ln.YELLOW}," [OAuth enforced]"))),B.createElement(K,{marginBottom:0},B.createElement(Y,{dimColor:!0},"Available Providers:")),B.createElement(Ke,{items:r,onSelect:s,initialIndex:o>=0?o:0,indicatorComponent:({isSelected:e})=>B.createElement(Y,{color:e?Ln.CYAN:Ln.GRAY,bold:e},e?be.triangleRightSmall:" "),itemComponent:({isSelected:e,label:t})=>B.createElement(Y,{color:e?Ln.CYAN:Ln.GRAY,bold:e},` ${t}`)}),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"Press ESC to cancel")))},"ProviderSelector");function RetryMessage({attempt:e}){const[t,n]=W(0);if(G(()=>{if(null===e)return;const t=setInterval(()=>{n(e=>(e+1)%4)},500);return()=>clearInterval(t)},[e]),null===e)return null;const r=".".repeat(t).padEnd(3," ");return B.createElement(K,{marginBottom:1},B.createElement(Y,{color:Kn,dimColor:!0},"Connection Issue. Retrying (attempt ",e,")",r))}Nt(),rr(),__name(RetryMessage,"RetryMessage"),Nt(),Oi(),jr(),un(),rr();var Fk=[{mode:"both",label:"Both",description:"Restore conversation and code (recommended)"},{mode:"conversation",label:"Conversation only",description:"Rewind conversation, keep current code"},{mode:"files",label:"Code only",description:"Restore code, keep conversation"}],jk=__name(({checkpoints:e,onSelect:t,onCancel:n})=>{const r=H(()=>[...e].sort((e,t)=>new Date(e.timestamp).getTime()-new Date(t.timestamp).getTime()),[e]),[s,o]=W(Math.max(0,r.length-1)),[i,a]=W(Math.max(0,r.length-8)),[l,u]=W("checkpoint"),[d,m]=W(null),[p,g]=W(0),h=H(()=>{if(!d)return!0;const e=r.findIndex(e=>e.messageId===d.messageId);if(-1===e)return!0;for(let t=e;t<r.length;t++)if(r[t].filesModified.length>0)return!0;return!1},[d,r]),f=H(()=>h?Fk:Fk.filter(e=>"conversation"===e.mode),[h]);if(G(()=>{if(r.length>0){const e=r.length-1;o(e),a(Math.max(0,r.length-8))}},[r.length,8]),Z((e,h)=>{h.escape?"mode"===l?(u("checkpoint"),m(null),g(0)):n():"checkpoint"===l?h.upArrow?o(e=>{const t=Math.max(0,e-1);return t<i&&a(t),t}):h.downArrow?o(e=>{const t=Math.min(r.length-1,e+1);return t>=i+8&&a(t-8+1),t}):h.return&&r.length>0&&(m(r[s]),u("mode"),g(0)):"mode"===l&&(h.upArrow?g(e=>Math.max(0,e-1)):h.downArrow?g(e=>Math.min(f.length-1,e+1)):h.return&&d&&f[p]&&t({messageId:d.messageId,mode:f[p].mode}))}),0===r.length)return B.createElement(K,{flexDirection:"column",paddingLeft:2,paddingTop:1},B.createElement(Y,{color:Mn,bold:!0},"Rewind"),B.createElement(Y,{dimColor:!0},"No checkpoints available. Start a conversation to create checkpoints."),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"Press "),B.createElement(Y,{dimColor:!0,bold:!0},"Esc"),B.createElement(Y,{dimColor:!0}," to close")));if("mode"===l&&d)return B.createElement(K,{flexDirection:"column",paddingLeft:2,paddingTop:1},B.createElement(Y,{color:Mn,bold:!0},"Rewind"),B.createElement(K,{marginBottom:1},B.createElement(Y,{dimColor:!0},"Restore to: "),B.createElement(Y,{color:Ln.WHITE},truncateString({text:d.userPrompt||"checkpoint",maxChars:50}))),B.createElement(K,{flexDirection:"column"},f.map((e,t)=>{const n=p===t,r=t===f.length-1;return B.createElement(K,{key:e.mode,flexDirection:"column"},B.createElement(K,{flexDirection:"row"},B.createElement(Y,{color:n?Mn:void 0},n?`${sn} `:" "),B.createElement(K,{flexDirection:"column"},B.createElement(Y,{color:n?Mn:Ln.WHITE},e.label),B.createElement(Y,{dimColor:!0},e.description))),!r&&B.createElement(Y,null," "))})),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"Press "),B.createElement(Y,{dimColor:!0,bold:!0},"Enter"),B.createElement(Y,{dimColor:!0}," to confirm, "),B.createElement(Y,{dimColor:!0,bold:!0},"Esc"),B.createElement(Y,{dimColor:!0}," to go back")));const y=r.slice(i,i+8);return B.createElement(K,{flexDirection:"column",paddingLeft:2,paddingTop:1},B.createElement(Y,{color:Mn,bold:!0},"Rewind"),B.createElement(Y,{dimColor:!0},"Select a checkpoint to restore your session"),r.length>8&&B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"Showing ",i+1,"-",Math.min(i+8,r.length)," ","of ",r.length)),B.createElement(K,{marginTop:1}),B.createElement(K,{flexDirection:"column"},y.map((e,t)=>{const n=i+t,o=s===n,a=e.filesModified.length,l=t===y.length-1,u=n===r.length-1;return B.createElement(K,{key:e.messageId,flexDirection:"column"},B.createElement(K,{flexDirection:"row"},B.createElement(Y,{color:o?Mn:void 0},o?`${sn} `:" "),B.createElement(K,{flexDirection:"column"},B.createElement(K,null,B.createElement(Y,{color:o?Mn:Ln.WHITE},truncateString({text:e.userPrompt||"(no prompt)",maxChars:60})),B.createElement(Y,{dimColor:!0}," • "),B.createElement(Y,{dimColor:!0},getRelativeTimeString({timestamp:e.timestamp}),u&&" (latest)")),B.createElement(Y,{dimColor:!0},a>0?`${a} file${a>1?"s":""} changed`:"No code changes"))),!l&&B.createElement(Y,null," "))})),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"Press "),B.createElement(Y,{dimColor:!0,bold:!0},"Enter"),B.createElement(Y,{dimColor:!0}," to select, "),B.createElement(Y,{dimColor:!0,bold:!0},"Esc"),B.createElement(Y,{dimColor:!0}," to cancel")))},"RewindSelector");Nt(),$n(),Nt(),Nt(),tC();var zk=__name(e=>{const[t,n]=W(e),[r,s]=W(null);return G(()=>{const t=__name(()=>{n(e.map(e=>({...e,active:!1,complete:!1,items:[],insights:[],message:""}))),s(null)},"handleReset"),r=__name(e=>{"error"!==e.type?n(t=>{if("step_start"===e.type){const n=t.findIndex(t=>t.id===e.step);return n<0?t:t.map((t,r)=>r<n?{...t,active:!1,complete:!0}:r===n?{...t,active:!0,message:e.message||"",...e.label&&{label:e.label},..."complete"===e.step&&{complete:!0},...void 0!==e.learningCount&&void 0!==e.categories&&void 0!==e.storage&&t.summary&&{summary:{learningCount:e.learningCount,categories:e.categories,storage:e.storage}}}:t)}if("progress"===e.type){const n=t.findIndex(e=>e.active);return n<0?t:t.map((t,r)=>r===n?{...t,items:[...t.items,e.message]}:t)}if("insight"===e.type){const n=t.findIndex(e=>"learning"===e.id);return n<0?t:t.map((t,r)=>r===n?{...t,insights:[...t.insights,e.message]}:t)}return t}):s(e.message)},"handleNewEvent");return ZE.on("reset",t),ZE.on("new-event",r),()=>{ZE.off("reset",t),ZE.off("new-event",r)}},[e]),{steps:t,importError:r,setImportError:s}},"useProgressEvents");async function createRequestClient(){const e=getApiBaseUrl(),t=new Vb({baseUrl:e}),n=await getConfiguredProvider(),r=await isOAuthEnforced();let s;if(n===Ct.ANTHROPIC)try{const e=await on.getValidAccessToken();validateOAuthToken({token:e,provider:n}),s=e}catch(e){dlog("Failed to get or validate Anthropic OAuth token:",e instanceof Error?e.message:String(e))}const o={[wt.PROJECT_SLUG]:Yb.getCurrentProjectDirName(),[wt.INTERNAL_TEAM_FLAG_HEADER]:r.toString()};return s&&(o[wt.OAUTH_TOKEN]=`Bearer ${s}`),{request:t,headers:o}}function splitPromptsIntoBatches(e){const t=[];let n=[],r=0;for(const s of e){const e=estimateTokens(s);e>2e3?(n.length>0&&(t.push(n),n=[],r=0),t.push([s])):r+e>2e3?(n.length>0&&t.push(n),n=[s],r=e):(n.push(s),r+=e)}return n.length>0&&t.push(n),t}Nt(),Nt(),gC(),bE(),ts(),$E(),$n(),tC(),Nt(),$n(),tC(),$E(),Nt(),Nt(),Ot(),bE(),ts(),dn(),CE(),$n(),nr(),ar(),__name(createRequestClient,"createRequestClient"),Nt(),$E(),__name(splitPromptsIntoBatches,"splitPromptsIntoBatches"),__name(function calculateObservationsPerBatch(e){return 4},"calculateObservationsPerBatch"),Nt(),Nt(),Ot(),$n(),en(),tC(),Nt();var Bk="claude-haiku-4-5-20251001";function buildObserverPrompt(e,t){return`Scan prompts. ${t} casual observations like a dev friend glancing at your work.\n\nPLAIN TEXT ONLY. No markdown, no formatting.\n\nBe natural and VARIED. Don't repeat the same sentence starters.\n\nGood (notice the variety):\npnpm over npm, nice\ndebugging that auth flow\nreact + typescript stack\ncircular deps came up\ntui flicker stuff\nah the classic memory leak\nsession persistence wip\nfighting with imports again\nhaiku model issues huh\n\nBad (too repetitive - NEVER do this):\nI see you prefer pnpm\nI see debugging auth\nI see react stack\nI see circular deps\noh, TUI issues\noh, memory leak\n\nRules:\n- plain text, lowercase is fine\n- vary your sentence starts - mix it up\n- max 6 words\n- sound human, not robotic\n\nPrompts:\n${e.map((e,t)=>`${t+1}. ${e}`).join("\n")}\n\nVaried observations:`}function buildRequestBody2(e){return{config:getEnvironmentContext(),memory:"",taste:"",skills:"",params:{tools:[],messages:[{role:"user",content:e}],model:`anthropic:${Bk}`,max_tokens:200,temperature:.7,stream:!0},threadId:`observer-${Date.now()}`}}function createInsightEmitter(){let e="",t=0;const n=__name(()=>{if(e.includes("\n")){const t=e.split("\n");for(let e=0;e<t.length-1;e++){const n=t[e].trim();n&&(dlog(`[ObserverAPI] emitting insight: ${n}`),ZE.addEvent({type:"insight",message:n}))}e=t[t.length-1]}},"emitCompletedLines");return{addText:__name(r=>{t++,dlog(`[ObserverAPI] text chunk ${t}: "${r.substring(0,50)}..."`),e+=r,n()},"addText"),emitRemaining:__name(()=>{e.trim()&&(dlog(`[ObserverAPI] emitting final insight: ${e.trim()}`),ZE.addEvent({type:"insight",message:e.trim()}))},"emitRemaining"),getChunkCount:__name(()=>t,"getChunkCount")}}async function processStream(e){let t;try{t=je.fromReadableStream(e),dlog("[ObserverAPI] created MessageStream")}catch(e){throw dlog(`[ObserverAPI] MessageStream creation failed: ${e instanceof Error?e.message:String(e)}`),e}const n=createInsightEmitter();t.on("text",e=>{n.addText(e)});try{await t.finalMessage(),dlog(`[ObserverAPI] stream complete, ${n.getChunkCount()} chunks received`)}catch(e){throw dlog(`[ObserverAPI] stream failed: ${e instanceof Error?e.message:String(e)}`),e}n.emitRemaining()}async function callObserverAPI(e,t,n){dlog(`[ObserverAPI] calling ${St.ALPHA.GENERATE} with model: ${Bk}`);const r=buildRequestBody2(n);let s;try{s=await e.post({endpoint:St.ALPHA.GENERATE,body:r,headers:t,stream:!0}),dlog("[ObserverAPI] got response stream")}catch(e){throw dlog(`[ObserverAPI] request failed: ${e instanceof Error?e.message:String(e)}`),e}await processStream(s),dlog("[ObserverAPI] done")}async function processBatch(e,t,n,r,s){let o=0;for(const e of n)o+=estimateTokens(e);dlog(`[Observer] batch ${r}/${s}: ${n.length} prompts`);const i=buildObserverPrompt(n,4);await callObserverAPI(e,t,i)}async function observeSessionPrompts(e){if(ZE.observerHasRun)return;ZE.markObserverRun();const{prompts:t}=e;try{const{request:e,headers:n}=await createRequestClient(),r=splitPromptsIntoBatches(t);dlog(`[Observer] ${t.length} prompts → ${r.length} batches`);const s=Math.min(r.length,6);for(let t=0;t<s;t++){if(ZE.learningComplete){dlog(`[Observer] stopped at batch ${t} (learning complete)`);break}const s=r[t];try{await processBatch(e,n,s,t+1,r.length)}catch{}}dlog("[Observer] done")}catch(e){dlog(`[Observer] failed (non-critical): ${e instanceof Error?e.message:String(e)}`),ZE.addEvent({type:"progress",message:"Continuing without live observations..."})}}__name(buildObserverPrompt,"buildObserverPrompt"),__name(buildRequestBody2,"buildRequestBody"),__name(createInsightEmitter,"createInsightEmitter"),__name(processStream,"processStream"),__name(callObserverAPI,"callObserverAPI"),__name(processBatch,"processBatch"),__name(observeSessionPrompts,"observeSessionPrompts");var Uk=class{static{__name(this,"SessionImporter")}static async findClaudeCodeSessions(t=0){const n=[];try{const r=e.join(h.homedir(),".claude","projects");await $.access(r);const s=process.cwd().replace(/\//g,"-");dlog(`[Import] scanning project: ${s}`);const o=(await $.readdir(r)).filter(e=>e===s);for(const s of o){const o=e.join(r,s);try{if(!(await $.stat(o)).isDirectory())continue;const r=(await $.readdir(o)).filter(e=>e.endsWith(".jsonl")&&!e.includes(".checkpoints"));dlog(`[Import] found ${r.length} sessions`);for(const s of r){const r=e.join(o,s),i=await $.stat(r),a=s.replace(".jsonl","");if(n.push({id:a,filePath:r,createdAt:i.birthtime,lastModified:i.mtime,messageCount:0,agent:"claude-code"}),t>0&&n.length>=t)break}if(t>0&&n.length>=t)break}catch{continue}}}catch{dlog("[Import] no claude sessions dir")}return n}static async findCodexSessions(e=0,t){try{ZE.addEvent({type:"progress",message:"Scanning Codex sessions..."});const n=await findCodexSessions(process.cwd(),e=>{t?.(e),"reading"===e.phase&&ZE.addEvent({type:"progress",message:`Scanning Codex: ${e.processedFiles}/${e.totalFiles} files (${e.matchedSessions} matched)`})},e);return dlog(`[Import] found ${n.length} Codex sessions`),n}catch(e){return dlog("[Import] no codex sessions",e),[]}}static async extractUserPrompts(e){const t=[];try{const n=(await $.readFile(e,"utf-8")).trim().split("\n");for(const e of n)if(e.trim())try{const n=JSON.parse(e);if("user"===n.type&&n.message){const e=n.message;let r="";e.content&&"string"==typeof e.content&&(r=e.content),r.trim()&&t.push(r.trim())}}catch{continue}t.length>0&&dlog(`[Import] extracted ${t.length} prompts from session`)}catch(t){dlog(`[Import] failed: ${e}`,t)}return t}static splitPromptsIntoBatches(e,t=15e4){const n=[];let r=[],s=0;for(const o of e){const e=estimateTokens(o);if(e>t){r.length>0&&(n.push(r),r=[],s=0);const e=this.splitLargePrompt(o,t);for(const t of e)n.push([t])}else s+e<=t?(r.push(o),s+=e):(r.length>0&&n.push(r),r=[o],s=e)}return r.length>0&&n.push(r),n}static splitLargePrompt(e,t){const n=[],r=e.split("\n");let s="",o=0;for(const e of r){const r=estimateTokens(e);o+r<=t?(s+=(s?"\n":"")+e,o+=r):(s&&n.push(s),s=e,o=r)}return s&&n.push(s),n}static async importAndLearn(){const e=[],t=[],n=[],r=[];try{ZE.addEvent({type:"step_start",step:"importing",label:"Started Learning Taste",message:"Scanning for coding sessions..."});const s=await loadProjectSettings(),o=s.tasteOnboarding?.learnedSessions||{},i=o["claude-code"]?.length||0,a=o.codex?.length||0;dlog(`[Import] loaded settings: claude-code=${i} learned, codex=${a} learned`);const l=await findNewSessions(o),u=l["claude-code"]||[],d=l.codex||[],m=u.length+d.length;if(dlog(`[Import] findNewSessions returned: claude-code=${u.length} new, codex=${d.length} new`),0===m){const e=await this.findClaudeCodeSessions(),t=await findCodexSessions(process.cwd()),n=e.length+t.length,r=[{name:"Claude Code",count:e.length},{name:"Codex",count:t.length}].filter(e=>e.count>0).sort((e,t)=>t.count-e.count).map(e=>`${e.count} ${e.name}`);ZE.addEvent({type:"step_start",step:"complete",label:"Taste Already Learned",message:n>0?`From ${r.join(" + ")} sessions`:"No sessions found for this project"});const s=[];return e.length>0&&s.push({agent:"claude-code",sessionIds:e.map(e=>e.id),displayName:"Claude Code"}),t.length>0&&s.push({agent:"codex",sessionIds:t.map(e=>e.id),displayName:"Codex"}),{success:!1,totalPrompts:0,preferencesLearned:0,errors:[],totalSessions:n,learnedSessions:i+a,agentSessions:s,status:"already-learned"}}if(u.length>0){const e=(await this.findClaudeCodeSessions()).filter(e=>u.includes(e.id));n.push(...e)}if(d.length>0){const e=(await this.findCodexSessions()).filter(e=>d.includes(e.id));r.push(...e)}const p=n.length+r.length;dlog(`[Import] total sessions: ${p} (claude-code: ${n.length}, codex: ${r.length})`),ZE.addEvent({type:"step_start",step:"batching",label:"Organizing your sessions",message:""});const g=[{name:"Claude Code",sessions:n,extractPrompts:this.extractUserPrompts},{name:"Codex",sessions:r,extractPrompts:extractCodexPrompts}].filter(e=>e.sessions.length>0).sort((e,t)=>t.sessions.length-e.sessions.length);for(const n of g){ZE.addEvent({type:"progress",message:`${n.name}: ${n.sessions.length} sessions`});for(const r of n.sessions)try{const e=await n.extractPrompts(r.filePath);e.length>0&&t.push(...e)}catch(t){e.push(`${n.name} import failed: ${t instanceof Error?t.message:String(t)}`)}}if(0===t.length)return{success:!1,totalPrompts:0,preferencesLearned:0,errors:["No prompts found in sessions"]};const h=this.splitPromptsIntoBatches(t);dlog(`[Import] batched: ${t.length} prompts → ${h.length} batches`);const f=observeSessionPrompts({prompts:t}).catch(e=>{dlog(`[Import] observer error: ${e instanceof Error?e.message:String(e)}`)});ZE.addEvent({type:"step_start",step:"learning",label:"Learning your coding taste",message:`Processing ${h.length} batch${1===h.length?"":"es"}`});try{const s=getApiBaseUrl(),o=new Vb({baseUrl:s});let i=!0;for(let e=0;e<h.length;e++){const t=h[e],n=e+1,r=h.length;r>1&&ZE.addEvent({type:"progress",message:`Processing batch ${n}/${r}...`});const s=this.formatBatchLearning(t),a=new rC({request:o,sessionId:crypto.randomUUID(),projectRoot:process.cwd()}),l=[{role:"user",content:s}];dlog(`[Import] batch ${n}/${r}: ${t.length} prompts`),(await a.checkAndProcess({messages:l})).success||(i=!1,dlog(`[Import] batch ${n}/${r} failed`))}if(dlog(`[Import] all batches complete, success: ${i}`),ZE.markLearningComplete(),await f,i){if(n.length>0){const e=n.map(e=>e.id);await markSessionsAsLearned("claude-code",e),dlog(`[Import] marked ${e.length} claude-code sessions as learned`)}if(r.length>0){const e=r.map(e=>e.id);await markSessionsAsLearned("codex",e),dlog(`[Import] marked ${e.length} codex sessions as learned`)}}else dlog("[Import] NOT marking sessions as learned due to batch failures");const a=await this.extractLearningSummary(),l=[];if(n.length>0&&l.push(`Claude Code (${n.length})`),r.length>0&&l.push(`Codex (${r.length})`),!i){const s="Learning failed - sessions not marked as learned";return e.push(s),ZE.addEvent({type:"error",message:s}),{success:!1,totalPrompts:t.length,preferencesLearned:a.totalLearnings,errors:e,totalSessions:p,agentSessions:[...n.length>0?[{agent:"claude-code",sessionIds:n.map(e=>e.id),displayName:"Claude Code"}]:[],...r.length>0?[{agent:"codex",sessionIds:r.map(e=>e.id),displayName:"Codex"}]:[]]}}return ZE.addEvent({type:"step_start",step:"complete",label:"Learning Complete",message:`Learned from ${l.join(" + ")}`,learningCount:a.totalLearnings,categories:a.categories,storage:".commandcode/taste/taste.md"}),{success:!0,totalPrompts:t.length,preferencesLearned:a.totalLearnings,errors:e,totalSessions:p,agentSessions:[...n.length>0?[{agent:"claude-code",sessionIds:n.map(e=>e.id),displayName:"Claude Code"}]:[],...r.length>0?[{agent:"codex",sessionIds:r.map(e=>e.id),displayName:"Codex"}]:[]]}}catch(n){const r=`Learning agent failed: ${n instanceof Error?n.message:String(n)}`;return e.push(r),ZE.addEvent({type:"error",message:r}),{success:!1,totalPrompts:t.length,preferencesLearned:0,errors:e}}}catch(t){const n=t instanceof Error?t.message:String(t);return e.push(n),{success:!1,totalPrompts:0,preferencesLearned:0,errors:e}}}static async extractLearningSummary(){try{const t=e.join(process.cwd(),".commandcode","taste","taste.md"),n=await $.readFile(t,"utf-8"),r=n.match(/^- .+Confidence:/gm),s=r?r.length:0;return{totalLearnings:s,categories:n.split("\n").filter(e=>e.startsWith("# ")).map(e=>e.replace(/^# /,"").trim()).filter(e=>e&&!e.toLowerCase().startsWith("taste"))}}catch{return{totalLearnings:0,categories:[]}}}static formatBatchLearning(e){return e.map((e,t)=>`${t+1}. ${e}`).join("\n\n")}};tC();var Wk=__name(e=>new Promise((t,n)=>setTimeout(()=>n(new Error("Learning timed out. Try again with /learn-taste")),e)),"createTimeout"),Qk=__name(e=>{const[t,n]=W({isImporting:!0,waitingForInput:!1,alreadyLearned:!1,learnedSessionCount:0,totalSessionCount:0,agentSessions:[],error:null});return G(()=>{ZE.reset(),ZE.markImportStarted(),(async()=>{try{const t=await Promise.race([Uk.importAndLearn(),Wk(12e4)]);if(t.success)return void n(e=>({...e,isImporting:!1,waitingForInput:!0}));if("already-learned"===t.status)return void n(e=>({...e,isImporting:!1,alreadyLearned:!0,learnedSessionCount:t.learnedSessions||0,totalSessionCount:t.totalSessions||0,agentSessions:t.agentSessions||[],waitingForInput:!0}));const r=t.errors.join("\n");n(e=>({...e,isImporting:!1,waitingForInput:!0,error:r})),e&&e(r)}catch(t){const r=t instanceof Error?t.message:String(t);n(e=>({...e,isImporting:!1,waitingForInput:!0,error:r})),e&&e(r)}})()},[e]),t},"useImportProcess");Nt();var Gk=__name(({onEscape:e,onEnter:t,enabled:n=!0})=>{Z((r,s)=>{n&&(s.escape&&e(),(s.return||"\n"===r)&&t())})},"useKeyboardInput");Nt(),$n();var Hk=__name(({autoLearn:e,onShouldSkip:t})=>{const[n,r]=W(null),[s,o]=W(null),i=Q(!1);return G(()=>{if(i.current)return;let n=null;return(async()=>{try{i.current=!0,dlog("[Hook:Conditions] loading...");const n=await checkOnboardingConditions();r(n),n.shouldTrigger||e?dlog(`[Hook:Conditions] result: ${n.reason}, sessions: ${n.sessionCount}`):(dlog("[Hook:Conditions] no trigger, skipping"),t())}catch(e){const r=e instanceof Error?e.message:String(e);dlog("[Hook:Conditions] error",r),o(r),n=setTimeout(()=>t(),2e3)}})(),()=>{n&&clearTimeout(n)}},[e,t]),{conditions:n,error:s,isLoading:!n&&!s}},"useOnboardingConditions");async function completeOnboarding(e){try{await markOnboardingCompleted(),dlog("[Helper] onboarding marked complete")}catch(e){dlog(`[Helper] complete error: ${e instanceof Error?e.message:String(e)}`)}finally{ZE.reset(),e()}}async function skipOnboarding(e){try{await markOnboardingSkipped(),dlog("[Helper] onboarding marked skipped")}catch(e){dlog(`[Helper] skip error: ${e instanceof Error?e.message:String(e)}`)}finally{ZE.reset(),e()}}Nt(),$n(),Nt(),$n(),tC(),__name(completeOnboarding,"completeOnboarding"),__name(skipOnboarding,"skipOnboarding");var Vk=__name(({onStepChange:e,onError:t,onCompleteCallback:n})=>{const r=Q(n),s=V(()=>{dlog("[Handler] import started → learning"),e("learning")},[e]),o=V(async()=>{dlog("[Handler] import complete → done"),e("done"),await completeOnboarding(()=>r.current())},[e]),i=V(e=>{dlog(`[Handler] import error: ${e}`),t(e)},[t]),a=V(async()=>{dlog("[Handler] error dismissed by user → done"),e("done"),await skipOnboarding(()=>r.current({skipped:!0}))},[e]),l=V(async()=>{dlog("[Handler] skipped → done"),e("done"),await skipOnboarding(()=>r.current({skipped:!0}))},[e]);return n!==r.current&&(r.current=n),{handleImportStart:s,handleImportComplete:o,handleImportError:i,handleErrorDismiss:a,handleSkip:l}},"useOnboardingHandlers");Nt(),$n();var Kk=__name(({conditions:e,autoLearn:t})=>{const[n,r]=W("checking"),s=Q(!1);return G(()=>{if(e&&!s.current){if(s.current=!0,t)return dlog("[Flow] autoLearn → learning"),void r("learning");dlog(`[Flow] → asking (${e.reason})`),r("asking")}},[e,t]),G(()=>{dlog(`[Flow] step: ${n}`)},[n]),{step:n,setStep:r}},"useOnboardingFlow");Nt(),Nt(),rr();var Yk=__name(({error:e})=>B.createElement(K,{padding:1},B.createElement(K,{flexDirection:"column",borderColor:Ln.RED,padding:1},B.createElement(K,{marginBottom:1},B.createElement(Y,null,"Error initializing onboarding: ",e)),B.createElement(K,null,B.createElement(Y,null,"Continuing without onboarding...")))),"OnboardingError");Nt(),Nt(),Ot(),rr();var Jk=__name(()=>`(run /${Tt.LEARN_TASTE} anytime)`,"getSkipHint"),Xk=__name(()=>B.createElement(Y,null,"Skip for now"," ",B.createElement(Y,{dimColor:!0},Jk())),"SkipOptionText"),Zk=__name(({sessionCount:e,agentSessions:t,onImport:n,onSkip:r})=>{const[s,o]=W(1);return Z((e,t)=>{t.escape?r():t.upArrow||t.downArrow?o(e=>1===e?2:1):"1"!==e?"2"!==e?t.return&&(1===s?n():r()):r():n()}),B.createElement(K,{flexDirection:"column",borderStyle:"single",borderColor:On.TEXT,paddingX:1,paddingY:0},B.createElement(Y,{color:On.TEXT,bold:!0},"Build Your Coding Taste"),B.createElement(K,{marginTop:1,flexDirection:"column"},B.createElement(Y,null,"Found"," ",1===e?"one session":`${e} sessions`," ","from"," ",t.map(e=>e.displayName).join(", ")," ","for this project."),B.createElement(K,{marginTop:1},B.createElement(Y,null,"Want me to analyze"," ",1===e?"that session":"those sessions"," ","and build your coding taste profile?"))),B.createElement(K,{marginTop:1,flexDirection:"column"},B.createElement(K,null,B.createElement(Y,{color:1===s?On.TEXT:Ln.GRAY},1===s?be.pointer:" "," 1. Yes, learn from my sessions (recommended)")),B.createElement(K,null,B.createElement(Y,{color:2===s?On.TEXT:Ln.GRAY},2===s?be.pointer:" "," 2."," ",B.createElement(Xk,null)))),B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"Use arrow keys or numbers to select, Enter to confirm")))},"ImportChoice");Nt(),Nt(),rr();var e_=__name(({error:e})=>B.createElement(K,{flexDirection:"column",borderStyle:"single",borderColor:Ln.RED,paddingX:2,paddingY:1,marginBottom:2},B.createElement(Y,{color:Ln.RED,bold:!0},"Oops, something went wrong:"),B.createElement(K,{marginTop:1},B.createElement(Y,null,e))),"ErrorSection");Nt(),Nt(),rr(),Nt(),Nt(),Nt(),rr();var t_=[be.bullet,be.squareSmallFilled,be.lozenge,be.star,be.triangleRight,be.triangleUp,be.circleFilled,be.pointer],n_=__name(()=>B.createElement(Y,{backgroundColor:On.BADGE_BG,color:On.BADGE_FG},`${cv}TASTE${cv}`),"TasteBadge"),r_=["percolating","excavating","deciphering","triangulating","osmosing","metabolizing","grokking","spelunking","interpolating","marinating","crystallizing","synthesizing","calibrating","fermenting","coalescing","transmuting","simmering","distilling","ruminating","perusing","assimilating","untangling","decoding","absorbing","harmonizing","digesting","contemplating","extrapolating","materializing","finalizing"],s_=__name(()=>{const[e,t]=W(()=>Math.floor(Math.random()*r_.length));G(()=>{const e=setInterval(()=>{t(Math.floor(Math.random()*r_.length))},2e3);return()=>clearInterval(e)},[]);const n=r_[e];return B.createElement(Y,{color:Ln.YELLOW},n,"...")},"PulsingText"),o_=__name(e=>String(e).padStart(3," "),"padNum"),i_=__name(e=>t_[e%t_.length],"getSymbol"),a_=__name((e,t,n,r)=>r?`${e} observations (↑↓ scroll)`:`↑${o_(t)} ↓${o_(n)} (↑↓ scroll)`,"buildStatusLine"),l_=__name(({insights:e})=>{const[t,n]=W(0),[r,s]=W(!0),o=e.length,i=o>10,a=Math.max(0,o-10);if(G(()=>{r&&i&&n(a)},[o,r,i,a]),Z((e,t)=>{if(i)return t.upArrow?(s(!1),void n(e=>Math.max(0,e-1))):void(t.downArrow&&n(e=>{const t=Math.min(a,e+1);return t===a&&s(!0),t}))}),0===o)return null;const l=e.slice(t,t+10),u=t,d=o-t-10;return B.createElement(K,{flexDirection:"column",marginLeft:4,marginBottom:0},i&&B.createElement(Y,{dimColor:!0},a_(o,u,d,r)),l.map((e,n)=>{const r=t+n;return B.createElement(K,{key:r,marginBottom:0},B.createElement(Y,{dimColor:!0},i_(r)," ",e))}))},"ScrollableInsights"),c_=__name(({label:e,message:t,active:n,complete:r,items:s,insights:o,isIntro:i,isAllComplete:a,summary:l})=>{if(i)return B.createElement(K,{flexDirection:"column",marginBottom:0},B.createElement(n_,null),B.createElement(K,{marginTop:0},B.createElement(Y,{dimColor:!0},"⎿"),B.createElement(K,{marginLeft:2},a?B.createElement(Y,{color:On.TEXT},"learned your coding taste"):B.createElement(s_,null))));const u=__name(()=>{const[e,t]=W(!0);return G(()=>{const e=setInterval(()=>{t(e=>!e)},500);return()=>clearInterval(e)},[]),B.createElement(Y,{color:Ln.YELLOW},e?be.circleFilled:be.circle)},"PulsingDot"),d=__name(()=>r?B.createElement(Y,{color:On.TEXT},be.nodejs):n?B.createElement(u,null):B.createElement(Y,{dimColor:!0},be.circle),"getStatusIcon"),m=s.length>0||o.length>0||t||l&&l.learningCount>0;return!r||n||m?B.createElement(K,{flexDirection:"column",marginBottom:0},(n||r)&&B.createElement(K,{marginBottom:0},B.createElement(K,{marginRight:1},d()),B.createElement(Y,{color:r?Ln.WHITE:n?Ln.YELLOW:Ln.DIM},e)),r&&t&&(!l||0===l.learningCount)&&B.createElement(K,{marginLeft:3,marginBottom:0},B.createElement(Y,{dimColor:!0},t)),s.length>0&&B.createElement(K,{flexDirection:"column",marginLeft:1,marginBottom:0},s.map((e,t)=>B.createElement(Y,{key:t,dimColor:!0},`${be.bullet} ${e}`))),o.length>0&&B.createElement(l_,{insights:o}),r&&l&&l.learningCount>0&&B.createElement(K,{flexDirection:"column",marginLeft:1,marginBottom:0},B.createElement(K,{marginBottom:1,flexDirection:"row"},B.createElement(Y,null,"⎿"),B.createElement(K,{marginLeft:2},B.createElement(Y,{color:On.TEXT},"Learned ",l.learningCount," preference",1===l.learningCount?"":"s",l.categories.length>0?` across ${l.categories.length} ${1===l.categories.length?"category":"categories"}`:""))),B.createElement(K,{flexDirection:"column",marginLeft:1},B.createElement(Y,{dimColor:!0},be.pointerSmall," Stored in"," ",l.storage),B.createElement(Y,{dimColor:!0},"Command Code automatically uses & updates taste files.")))):null},"StepItem"),u_=__name(({steps:e})=>{const t=e.find(e=>"complete"===e.id)?.complete??!1;return B.createElement(K,{flexDirection:"column",marginBottom:1},e.map((e,n)=>B.createElement(K,{key:e.id,marginLeft:0===n?0:3},B.createElement(c_,{label:e.label,message:e.message,active:e.active,complete:e.complete,items:e.items,insights:e.insights,summary:e.summary,isIntro:0===n,isAllComplete:t}))))},"StepsSection"),d_=__name(({steps:e})=>B.createElement(u_,{steps:e}),"ProgressSection");Nt();var m_=__name(({isImporting:e=!1,waitingForInput:t=!1})=>B.createElement(B.Fragment,null,e&&B.createElement(K,{marginTop:1},B.createElement(Y,{dimColor:!0},"ESC to cancel")),t&&B.createElement(K,{marginTop:1},B.createElement(Y,{bold:!0},"Press ENTER to continue"))),"HelpTextSection");Nt();var p_=[{id:"importing",label:"Initializing Taste Profile",message:"",active:!1,complete:!1,items:[],insights:[]},{id:"batching",label:"Organizing your sessions",message:"",active:!1,complete:!1,items:[],insights:[]},{id:"learning",label:"Learning your coding taste",message:"",active:!1,complete:!1,items:[],insights:[]},{id:"complete",label:"Learned your coding taste!",message:"",active:!1,complete:!1,items:[],insights:[],summary:{learningCount:0,categories:[],storage:".commandcode/taste/taste.md"}}],g_=__name(({onComplete:e,onError:t,onErrorDismiss:n})=>{const{steps:r,importError:s}=zk(p_),{isImporting:o,waitingForInput:i,error:a}=Qk(t);return Gk({onEscape:e,onEnter:__name(()=>{i&&(a&&n?n():e())},"onEnter"),enabled:o||i}),B.createElement(K,{flexDirection:"column",padding:1},s&&B.createElement(e_,{error:s}),!s&&B.createElement(d_,{steps:r}),B.createElement(m_,{isImporting:o,waitingForInput:i}))},"ImportProgress"),h_=__name(({step:e,conditions:t,onImportStart:n,onImportComplete:r,onImportError:s,onErrorDismiss:o,onSkip:i})=>"asking"===e?t&&"has_sessions"===t.reason?B.createElement(Zk,{sessionCount:t.sessionCount,agentSessions:t.agentSessions,onImport:n,onSkip:i}):null:"learning"===e?B.createElement(g_,{onComplete:r,onError:s,onErrorDismiss:o}):null,"OnboardingStepRenderer"),f_=__name(({onComplete:e,autoLearn:t=!1})=>{G(()=>(dlog("[UI:Onboarding] mounted"),()=>{dlog("[UI:Onboarding] unmounted")}),[]);const{conditions:n,error:r,isLoading:s}=Hk({autoLearn:t,onShouldSkip:e}),{step:o,setStep:i}=Kk({conditions:n,autoLearn:t}),{handleImportStart:a,handleImportComplete:l,handleImportError:u,handleErrorDismiss:d,handleSkip:m}=Vk({onStepChange:__name(e=>{i(e)},"onStepChange"),onError:__name(()=>{},"onError"),onCompleteCallback:e});return dlog(`[UI:Onboarding] render: ${o}${n?.reason?` (${n.reason})`:""}${r?" ERROR":""}`),s?null:r?B.createElement(Yk,{error:r}):"done"===o?null:B.createElement(h_,{step:o,conditions:n,onImportStart:a,onImportComplete:l,onImportError:u,onErrorDismiss:d,onSkip:m})},"TasteOnboarding");function getEntryCharCount(e){return("input"in e?e.input??"":"").length+("output"in e?e.output??"":"").length+("command"in e?e.command??"":"").length}function getBudgetedFeed(e,t){if(0===e.length)return[];const n=[...e].reverse();let r=t;const s=[];for(const e of n)if(s.unshift(e),r-=getEntryCharCount(e),r<=0)break;return s}__name(getEntryCharCount,"getEntryCharCount"),__name(getBudgetedFeed,"getBudgetedFeed");var y_=U(__name(function MainView2({feed:e,liveAgents:t,queuedMessages:n,isCmdCodeBusy:r,staticKey:s,transcriptMode:o,tasteOnboardingEntryId:i,autoLearnTaste:a,retryAttempt:l,input:u,setInput:d,fileSearchQuery:m,setFileSearchQuery:p,showFileList:g,setShowFileList:h,showProviderSelector:f,showModelSelector:y,showMemorySelector:w,showMcpManager:S,showAgentsConfig:b,showRewindSelector:E,showLoginOverlay:C,showAddDirModal:v,authComponentInfo:T,status:k,currentProvider:_,currentModel:P,showProviderNotification:A,shareInfo:x,showShareNotification:I,unshareNotificationMessage:N,updateStatus:R,updateFailedInfo:$,permissionMode:L,hintMessage:M,pendingExitKey:O,tasteLearningEnabled:D,interactionTokens:q,contextUsage:F,historyManagerRef:j,executionState:z,contextEngineRef:U,onSubmit:W,onCommand:Q,onToggleAutoAccept:G,onResetPendingExitKey:J,onDoubleEscapeEmpty:X,onTasteOnboardingComplete:Z,permissionPanel:ee,questionPanel:te,onRewindSelect:ne,onRewindCancel:re,onLoginComplete:se,onLoginCancel:oe,setShowProviderSelector:ie,setShowModelSelector:ae,setShowMemorySelector:le,setShowMcpManager:ce,setShowAgentsConfig:ue,setShowAddDirModal:de,handleProviderSelect:me,handleProviderCancel:pe,handleModelSelect:ge,handleModelCancel:he,handleAuthSuccess:fe,handleAuthCancel:ye}){const we=H(()=>e.filter(e=>"taste-onboarding"!==e.role),[e]),Se=useTerminalWidth(),{placeholder:be,isPrediction:Ee,onAccepted:Ce}=usePredictedPlaceholder({contextEngineRef:U,isCmdCodeBusy:r}),ve=H(()=>"off"===o?we:getBudgetedFeed(we,"limited"===o?15e3:5e4),[we,o]),Te=H(()=>"off"===o?0:Math.max(0,we.length-ve.length),[we.length,ve.length,o]),ke=H(()=>0===Te?ve:ve.filter(e=>"user"!==e.role),[ve,Te]),_e=V(()=>ue(!1),[ue]),Pe=V(()=>le(!1),[le]),Ae=V(()=>ce(!1),[ce]),xe=V(()=>de(!1),[de]),Ie=V(()=>ae(!0),[ae]),Ne=!("off"!==o||ee||te||f||y||T||w||S||b||E||C||v||i);return B.createElement(K,{flexDirection:"column",width:"100%"},B.createElement(Lk,{staticKey:s,feed:ke,showHeader:!0,expandedToolOutput:"off"!==o,currentModel:P,hiddenCount:Te}),i&&B.createElement(f_,{onComplete:Z,autoLearn:a}),t.map(e=>B.createElement(Ok,{key:e.id,entry:e})),B.createElement(RetryMessage,{attempt:l}),te,ee,"off"!==o&&B.createElement(K,{flexDirection:"column",marginTop:1},B.createElement(K,null,B.createElement(Y,{dimColor:!0},"─".repeat(Se))),B.createElement(K,{paddingRight:1},B.createElement(Y,{backgroundColor:jn.BG,color:jn.FG,bold:!0},`${cv}DETAILED TRANSCRIPT${cv}`),B.createElement(Y,{dimColor:!0}," · "),B.createElement(Y,{bold:!0},"ctrl+o"),B.createElement(Y,{dimColor:!0}," to toggle"),B.createElement(Y,{dimColor:!0}," · "),B.createElement(Y,{bold:!0},"ctrl+e"),B.createElement(Y,{dimColor:!0}," ","to"," ","limited"===o?"show all":"collapse"))),Ne&&B.createElement(wk,{queuedMessages:n,isProcessing:r,executionState:z,status:k,input:u,setInput:d,onSubmit:W,showFileList:g,setShowFileList:h,fileSearchQuery:m,setFileSearchQuery:p,onCommand:Q,outputTokens:q,contextUsage:F,tasteLearning:D,shareInfo:x,showShareNotification:I,unshareNotificationMessage:N,updateStatus:R,updateFailedInfo:$,currentProvider:_,showProviderInfo:A,permissionMode:L,onToggleAutoAccept:G,hintMessage:M,historyManager:j.current,pendingExitKey:O,onResetPendingExitKey:J,onDoubleEscapeEmpty:X,retryAttempt:l,onAltP:Ie,placeholder:be,isPlaceholderPrediction:Ee,onPlaceholderAccepted:Ce}),f&&B.createElement(K,{marginY:1},B.createElement(qk,{onSelect:me,onCancel:pe,currentProvider:_})),y&&B.createElement(K,{marginY:1},B.createElement(Dk,{onSelect:ge,onCancel:he,currentModel:P})),b&&B.createElement(K,{marginY:1},B.createElement(jT,{onCancel:_e})),w&&B.createElement(K,{marginY:1},B.createElement(Ek,{onClose:Pe})),S&&B.createElement(K,{marginY:1},B.createElement(bk,{onClose:Ae})),E&&U.current&&B.createElement(K,{marginY:1},B.createElement(jk,{checkpoints:U.current.listCheckpoints(),onSelect:ne,onCancel:re})),T&&B.createElement(K,{marginY:1},B.createElement(T.Component,{onSuccess:fe,onCancel:ye})),C&&B.createElement(K,{marginY:1},B.createElement(Sk,{onComplete:se,onCancel:oe})),v&&B.createElement(K,{marginY:1},B.createElement(TT,{onClose:xe})))},"MainView"));function renderView({feedState:e,sessionState:t,statusState:n,authState:r,uiOverlays:s,onboarding:o,exitState:i,pendingOps:a,permissionState:l,contextEngineRef:u,historyManagerRef:d,executionState:m,actionCallbacks:p,onSubmit:g,onCommand:h,input:f,setInput:y,fileSearchQuery:w,setFileSearchQuery:S,updateFailedInfo:b,handleTrust:E,handleNoTrust:C,handleToggleAutoAccept:v,handleDoubleEscapeEmpty:T,handleTasteOnboardingComplete:k,loadTasteStatus:_}){if(i.shouldExit)return null;if(o.checkingProject)return null;if(o.showTrustPrompt)return B.createElement(sT,{staticKey:s.staticKey,onTrust:E,onExit:C});if(s.showSessionSelector)return B.createElement(iT,{onSelectSession:p.onSelectSession,onNewSession:p.onNewSession});if(!o.projectTrusted)return null;const P=a.pendingQuestion?B.createElement(QuestionView,{pendingQuestion:a.pendingQuestion,permissionMode:l.permissionMode,setPermissionMode:l.setPermissionMode,setPendingQuestion:a.setPendingQuestion,setStatus:n.setStatus,setStaticKey:s.setStaticKey}):null,A=a.pendingPermission?B.createElement(fT,{pendingPermission:a.pendingPermission,permissionMode:l.permissionMode,setPendingPermission:a.setPendingPermission,setStatus:n.setStatus,respondToPrompt:l.respondToPrompt,showHintMessage:n.showHintMessage,handleToggleAutoAccept:v}):null;return s.showLearningFeed?B.createElement(LearningView,{setShowLearningFeed:s.setShowLearningFeed,setStaticKey:s.setStaticKey,onExit:()=>i.setShouldExit(!0)}):s.showTasteConfig?B.createElement(TasteConfigView,{staticKey:s.staticKey,setShowTasteConfig:s.setShowTasteConfig,loadTasteStatus:_}):s.showSkillsConfig?B.createElement(SkillsConfigView,{staticKey:s.staticKey,setShowSkillsConfig:s.setShowSkillsConfig}):B.createElement(y_,{feed:e.feed,liveAgents:e.liveAgents,queuedMessages:e.queuedMessages,isCmdCodeBusy:e.isCmdCodeBusy,staticKey:s.staticKey,transcriptMode:s.transcriptMode,tasteOnboardingEntryId:o.tasteOnboardingEntryId,autoLearnTaste:o.autoLearnTaste,retryAttempt:n.retryAttempt,input:f,setInput:y,fileSearchQuery:w,setFileSearchQuery:S,showFileList:s.showFileList,setShowFileList:s.setShowFileList,showProviderSelector:s.showProviderSelector,showModelSelector:s.showModelSelector,showMemorySelector:s.showMemorySelector,showMcpManager:s.showMcpManager,showAgentsConfig:s.showAgentsConfig,showRewindSelector:s.showRewindSelector,showLoginOverlay:s.showLoginOverlay,showAddDirModal:s.showAddDirModal,authComponentInfo:r.authComponentInfo,status:n.status,currentProvider:r.currentProvider,currentModel:r.currentModel,showProviderNotification:r.showProviderNotification,shareInfo:n.shareInfo,showShareNotification:n.showShareNotification,unshareNotificationMessage:n.unshareNotificationMessage,updateStatus:n.updateStatus,updateFailedInfo:b,permissionMode:l.permissionMode,hintMessage:n.hintMessage,pendingExitKey:i.pendingExitKey,tasteLearningEnabled:n.tasteLearningEnabled,interactionTokens:n.interactionTokens,contextUsage:n.contextUsage,historyManagerRef:d,executionState:m,contextEngineRef:u,onSubmit:g,onCommand:h,onToggleAutoAccept:v,onResetPendingExitKey:i.resetPendingExitKey,onDoubleEscapeEmpty:T,onTasteOnboardingComplete:k,permissionPanel:A,questionPanel:P,onRewindSelect:p.onRewindSelect,onRewindCancel:p.onRewindCancel,onLoginComplete:p.onLoginComplete,onLoginCancel:p.onLoginCancel,setShowProviderSelector:s.setShowProviderSelector,setShowModelSelector:s.setShowModelSelector,setShowMemorySelector:s.setShowMemorySelector,setShowMcpManager:s.setShowMcpManager,setShowAgentsConfig:s.setShowAgentsConfig,setShowRewindSelector:s.setShowRewindSelector,setShowLoginOverlay:s.setShowLoginOverlay,setShowAddDirModal:s.setShowAddDirModal,handleProviderSelect:p.handleProviderSelect,handleProviderCancel:p.handleProviderCancel,handleModelSelect:p.handleModelSelect,handleModelCancel:p.handleModelCancel,handleAuthSuccess:p.handleAuthSuccess,handleAuthCancel:p.handleAuthCancel})}__name(renderView,"renderView");var w_=__name(({resume:e=!1,continue:t=!1,trust:n=!1,dangerouslySkipPermissions:r=!1,updateStatus:s,updateFailedInfo:o,initialPrompt:i,skipOnboarding:a=!1,initialPermissionMode:l})=>{const{exit:u}=te(),{stdout:d}=X(),[m,p]=W(""),[g,h]=W(""),f=Q(!1),y=Q(!1),w=Q(null),S=Q(null),b=useUiOverlays(),E=useFeed(),C=useSession(),v=useStatus(s),T=useAuth(),k=usePendingOps(),_=useOnboarding(),P=useExit(),{executeBash:A,executionState:x}=tv(),I=usePermissionMode({initialPermissionMode:l,dangerouslySkipPermissions:r,setPendingPermission:k.setPendingPermission,setStatus:v.setStatus,contextEngineRef:S}),{createContextEngineCallbacks:N}=useContextEngine({sessionId:C.sessionId,sessionLoaded:C.sessionLoaded,showSessionSelector:b.showSessionSelector,projectTrusted:_.projectTrusted,setFeed:E.setFeed,setLiveAgents:E.setLiveAgents,setQueuedMessages:E.setQueuedMessages,queuedMessagesRef:E.queuedMessagesRef,setStatus:v.setStatus,pinnedStatusRef:v.pinnedStatusRef,setRetryAttempt:v.setRetryAttempt,setInteractionTokens:v.setInteractionTokens,setContextUsage:v.setContextUsage,setCurrentProvider:T.setCurrentProvider,shareInfoRef:v.shareInfoRef,permissionsService:I.permissionsService,permissionModeRef:I.permissionModeRef,setPendingQuestion:k.setPendingQuestion,contextEngineRef:S}),{loadTasteStatus:R,loadCurrentProvider:$,onSubmit:L}=useStartup({resume:e,continueLatest:t,trust:n,initialPrompt:i,stdout:d,feedState:E,sessionState:C,statusState:v,authState:T,onboarding:_,uiOverlays:b,permissionState:I,contextEngineRef:S,isSubmittingRef:f,initialPromptSubmittedRef:y,historyManagerRef:w,executeBash:A,createContextEngineCallbacks:N,setInput:p});useLifecycle({exit:u,feedState:E,exitState:P,statusState:v,authState:T,onboarding:_,uiOverlays:b,skipOnboarding:a});const{handleToggleAutoAccept:M,handleDoubleEscapeEmpty:O,handleTasteOnboardingComplete:D,handleTrust:q,handleNoTrust:F}=useHandlers({resume:e,feedState:E,onboarding:_,uiOverlays:b,exitState:P,pendingOps:k,permissionState:I,statusState:v,authState:T,contextEngineRef:S,loadTasteStatus:R,loadCurrentProvider:$,setInput:__name(e=>p(e),"setInput")}),{onCommand:j}=useCommandCtx({feedState:E,sessionState:C,statusState:v,uiOverlays:b,onboarding:_,exitState:P,permissionState:I,contextEngineRef:S,isSubmittingRef:f,executeBash:A,createContextEngineCallbacks:N,setInput:p});return renderView({feedState:E,sessionState:C,statusState:v,authState:T,uiOverlays:b,onboarding:_,exitState:P,pendingOps:k,permissionState:I,contextEngineRef:S,historyManagerRef:w,executionState:x,actionCallbacks:useMainActionCallbacks({feedState:E,sessionState:C,statusState:v,authState:T,uiOverlays:b,permissionState:I,contextEngineRef:S,createContextEngineCallbacks:N,setInput:p}),onSubmit:L,onCommand:j,input:m,setInput:p,fileSearchQuery:g,setFileSearchQuery:h,updateFailedInfo:o,handleTrust:q,handleNoTrust:F,handleToggleAutoAccept:M,handleDoubleEscapeEmpty:O,handleTasteOnboardingComplete:D,loadTasteStatus:R})},"InteractiveCLI");Nn(),Sn(),CE();var S_=__name(e=>e?{isValid:!0}:{isValid:!1,errorMessage:["Error: Interactive mode requires a TTY terminal.","Please run this command directly in your terminal, not through a pipe or redirect."].join("\n")},"validateTtyEnvironment"),b_=__name(e=>Boolean(e.resume||e.continue),"shouldValidateSessions"),E_=__name(({isInitialized:e,sessionCount:t})=>e&&0===t?{canProceed:!1,exitCode:0,message:"No conversations found to resume."}:{canProceed:!0},"validateSessionAvailability"),C_=__name(({options:e})=>{let t;return e.permissionMode?t=e.permissionMode:e.plan&&(t="plan"),{resume:e.resume,continue:e.continue,trust:e.trust,dangerouslySkipPermissions:e.dangerouslySkipPermissions,initialPrompt:e.initialPrompt,skipOnboarding:e.skipOnboarding,initialPermissionMode:t}},"buildInteractiveCLIProps"),v_=__name(()=>({stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,exitOnCtrlC:!1}),"getInkRenderOptions"),T_=__name(()=>{enableBracketedPasteMode(),process.on("exit",()=>{disableBracketedPasteMode()})},"setupBracketedPasteMode"),k_=__name(()=>{T_()},"initializeTerminal"),__=__name(async(e={})=>{const t=S_(process.stdin.isTTY);if(t.isValid||(console.error(t.errorMessage),process.exit(1)),k_(),b_(e)){const e=await Yb.isProjectInitialized(),t=e?await Yb.listSessions():[],n=E_({isInitialized:e,sessionCount:t.length});n.canProceed||(console.log(n.message),process.exit(n.exitCode))}startEarlyInputCapture();const n=C_({options:e}),r=v_();ee(B.createElement(w_,{...n}),r)},"interactiveMode");Nt(),Es(),bE(),ts(),Ot(),Gs(),dn(),nr(),ar(),en(),qE(),SC(),gi(),JE(),CE(),hi();var P_=null,A_=!1,x_=new Set([Is.EDIT_FILE,Is.WRITE_FILE,Is.SHELL_COMMAND]);async function readStdin(){return new Promise((e,t)=>{let n="";const r=setTimeout(()=>{t(new Error("Timeout reading from stdin"))},3e4);process.stdin.setEncoding("utf8"),process.stdin.on("data",e=>{n+=e}),process.stdin.on("end",()=>{clearTimeout(r),e(n.trim())}),process.stdin.on("error",e=>{clearTimeout(r),t(e)}),process.stdin.resume()})}async function isAuthenticated(){return null!==await getAuthKey()}function setupSignalHandlers(){if(A_)return;A_=!0;const e=__name(e=>{P_?.abort(),process.stderr.write(`\n${e}\n`),process.exit(130)},"handleTermination");process.on("SIGINT",()=>e("Interrupted.")),process.on("SIGTERM",()=>e("Terminated.")),process.stdout.on("error",e=>{"EPIPE"===e.code&&process.exit(0),process.stderr.write(`Error writing to stdout: ${e.message}\n`),process.exit(1)})}async function printMode(e={}){setupSignalHandlers(),P_=new AbortController;let t=e.query||"";if(!t){process.stdin.isTTY&&(process.stderr.write('Error: No query provided. Usage: cmd -p "your query"\n'),process.exit(1));try{t=await readStdin()}catch(e){const t=e instanceof Error?e.message:"Unknown error";process.stderr.write(`Error reading from stdin: ${t}\n`),process.exit(1)}}t.trim()||(process.stderr.write('Error: No query provided. Usage: cmd -p "your query"\n'),process.exit(1)),await isAuthenticated()||(process.stderr.write('Error: Not authenticated. Please run "cmd login" first.\n'),process.exit(3));try{const n=await processQuery({query:t,signal:P_.signal,dangerouslySkipPermissions:e.dangerouslySkipPermissions});process.stdout.write(n),n.endsWith("\n")||process.stdout.write("\n"),process.exit(0)}catch(e){e instanceof Error&&"AbortError"===e.name&&(process.stderr.write("\nCancelled.\n"),process.exit(130)),e instanceof ii&&(process.stderr.write('Error: Authentication failed. Please run "cmd login" first.\n'),process.exit(3)),e instanceof ai&&(process.stderr.write(`Error: ${e.message}\n`),process.exit(4)),e instanceof di&&(process.stderr.write("Error: Rate limit exceeded. Please wait a moment and try again.\n"),process.exit(5)),e instanceof si&&(process.stderr.write("Error: Unable to connect to the API. Please check your network connection.\n"),process.exit(6)),e instanceof mi&&(process.stderr.write("Error: The API server encountered an error. Please try again later.\n"),process.exit(7));const t=e instanceof Error?e.message:"Unknown error";/permission denied|access denied|not permitted|unauthorized/i.test(t)&&(process.stderr.write(`Error: ${t}\n`),process.exit(4)),process.stderr.write(`Error: ${t}\n`),process.exit(1)}}__name(readStdin,"readStdin"),__name(isAuthenticated,"isAuthenticated"),__name(setupSignalHandlers,"setupSignalHandlers"),__name(printMode,"printMode");var I_=10;async function setupConversationContext(){const e=await getToolSchemas(),t=await getConfiguredProvider(),n=await isOAuthEnforced();let r;t===Ct.ANTHROPIC&&(r=await on.getValidAccessToken(),validateOAuthToken({token:r,provider:t}));const s=getEnvironmentContext(),o=await getMemoryContent([]),i=await getTasteContent(),a=generateSkillsXML(await loadAllSkillSummaries())||null,l=crypto.randomUUID(),u=await isTasteLearningEnabled(),d={[wt.PROJECT_SLUG]:Yb.getCurrentProjectDirName(),[wt.TASTE_LEARNING]:u.toString(),[wt.INTERNAL_TEAM_FLAG_HEADER]:n.toString()};return r&&(d[wt.OAUTH_TOKEN]=`Bearer ${r}`),{tools:e,config:s,memory:o,taste:i,skills:a,headers:d,sessionId:l}}async function callApi(e,t,n,r){const s={tools:t.tools,stream:!0,max_tokens:64e3,temperature:.3,messages:n,model:`anthropic:${getConfiguredModel()}`},o={config:t.config,memory:t.memory,taste:t.taste,skills:t.skills,params:s,threadId:t.sessionId},i=await e.post({body:o,stream:!0,endpoint:St.ALPHA.GENERATE,headers:t.headers,signal:r});return je.fromReadableStream(i).finalMessage()}async function executeToolCall(e,t,n){if(x_.has(e.name)&&!n)return{type:"tool_result",tool_use_id:e.id,content:`Error: Tool "${e.name}" requires permissions. Use --dangerously-skip-permissions to enable file writes and shell commands in print mode.`,is_error:!0};try{const n=await executeTool(e.name,e.input,{abortSignal:t});return{type:"tool_result",tool_use_id:e.id,content:n}}catch(t){if(t instanceof ii||t instanceof ai||t instanceof di||t instanceof si||t instanceof mi)throw t;if(t instanceof Error&&"AbortError"===t.name)throw t;const n=t instanceof Error?t.message:"Unknown error";return{type:"tool_result",tool_use_id:e.id,content:`Error: ${n}`,is_error:!0}}}async function processQuery(e){const{query:t,signal:n,dangerouslySkipPermissions:r=!1}=e,s=getApiBaseUrl(),o=new Vb({baseUrl:s}),i=[{role:"user",content:t}],a=await setupConversationContext();let l=0,u="";for(;l<I_;){if(l++,n.aborted)throw new Error("Cancelled");const e=await callApi(o,a,i,n),t=e.content.filter(e=>"text"===e.type),s=e.content.filter(e=>"tool_use"===e.type),d=t.map(e=>e.text).join("");if(d&&(u+=d),0===s.length)break;const m=[];for(const e of s){if(n.aborted)throw new Error("Cancelled");const t=await executeToolCall(e,n,r);m.push(t)}i.push({role:"assistant",content:e.content}),i.push({role:"user",content:m})}return l>=I_&&process.stderr.write(`Warning: Reached maximum conversation turns (${I_}). The response may be incomplete. Consider breaking your query into smaller parts.\n`),u}__name(setupConversationContext,"setupConversationContext"),__name(callApi,"callApi"),__name(executeToolCall,"executeToolCall"),__name(processQuery,"processQuery"),zt();var N_=__name(e=>e&&!e.startsWith("-")?e:void 0,"parsePrompt"),R_=__name(async()=>{await checkAuthAndPromptLogin()||process.exit(1)},"ensureAuthenticated"),$_=__name(e=>{const t={};return e.trust&&(t.trust=!0),e.dangerouslySkipPermissions&&(t.dangerouslySkipPermissions=!0,t.trust=!0),e.skipOnboarding&&(t.skipOnboarding=!0),e.plan&&(t.plan=!0),e.permissionMode&&(t.permissionMode=e.permissionMode),t},"buildRuntimeOptions"),L_=__name(({options:e,runtimeOptions:t,initialPrompt:n})=>e.resume?{resume:!0,...t}:e.continue?{continue:!0,...t}:{...t,initialPrompt:n},"getInteractiveConfig"),M_=__name((e,t)=>"string"==typeof e.print&&e.print.trim()?e.print:t&&!t.startsWith("-")?t:"","extractPrintQuery");async function interactiveModeAction(e,t){if(t.addDir&&t.addDir.length>0)for(const e of t.addDir)addDirectory(e);if(void 0!==t.print){const n=M_(t,e);return void await printMode({query:n,dangerouslySkipPermissions:t.dangerouslySkipPermissions})}const n=N_(e);await R_();const r=$_(t),s=L_({options:t,runtimeOptions:r,initialPrompt:n});__(s)}__name(interactiveModeAction,"interactiveModeAction"),Nt(),$n(),Vr(),globalThis.COMMAND_CODE_CWD=process.cwd();var O_=__name(()=>process.cwd(),"getCwd"),D_=__name(()=>process.argv.slice(2),"getArgs"),q_=__name(e=>e.includes("--local")?"local":e.includes("--staging")?"staging":"production","getEnv"),F_=__name(()=>{const e=O_(),t=D_(),n=q_(t);dlog(`[Startup] cwd: ${e}`),dlog(`[Startup] args: ${t.join(" ")}`),dlog(`[Startup] env: ${n}`),dlog(`[Startup] traceId: ${getTraceId()??"unavailable"}`)},"logStartupInfo");async function preRun(){F_(),process.argv.includes("--ide-setup")&&(formatSetupResult(await runIDESetup()).forEach(e=>console.log(e)),process.exit(0)),await maybeRunPendingUpdate(),checkForUpdateAsync(),setTimeout(()=>ensureExtensionInstalled().catch(()=>{}),100)}__name(preRun,"preRun"),Nt(),Ot(),$n(),yr(),ir();var j_=getPackageJson(),z_=__name((e,t=[])=>[...t,e],"collectAddDir");function displayCustomHelp(){const e=j_.version,t=getInvokedCommandName(),n=Ak.filter(e=>!("/provider"===e.key&&!isInternalTeamFlagEnforced()));console.log(),console.log(Be.bold("Command Code")+Be.gray(` v${e}`)),console.log(Be.gray(Tk)),console.log(),console.log(Be.bold("Usage")),console.log(` ${t} <command> [options]`),console.log(),console.log(Be.bold("Options"));for(const e of Pk){const n=e.key.replace(/^cmd/,t);console.log(" "+n.padEnd(kk)+Be.gray(e.description))}console.log(),console.log(Be.bold("Commands"));for(const e of xk){const n=e.key.replace(/^cmd/,t);console.log(" "+n.padEnd(kk)+Be.gray(e.description))}console.log(),console.log(Be.bold("Slash Commands"));for(const e of n)console.log(" "+e.key.padEnd(kk)+Be.gray(e.description));console.log(),console.log(Be.bold("Keyboard Shortcuts"));for(const e of _k)console.log(" "+e.key.padEnd(kk)+Be.gray(e.description));console.log(),console.log(Be.bold("Examples"));for(const e of Nk){const n=e.key.replace(/^cmd/,t);console.log(" "+n.padEnd(kk)+Be.gray(e.description))}console.log(),console.log(Be.cyan("❯")+" "+Be.gray(Rk.replace(/cmd/,t))),console.log(),console.log(Be.bold("Links"));for(const e of Ik)console.log(" "+e.key.padEnd(kk)+Be.cyan(e.description));console.log()}function createProgram(){const e=new Ae;return e.name(getInvokedCommandName()).description("Command Code with your coding taste.").version(j_.version,"-v, --version","display the version number").argument("[prompt]","Your prompt to run in interactive mode").option("-r, --resume","Resume a session (pick from history)").option("-c, --continue"," Continue the most recent session in the current directory").option("-t, --trust","Trust the project (skip initial trust permission prompt)").option("--dangerously-skip-permissions","Bypass all permission prompts (use with caution)").option("--plan","Start in plan mode (read-only exploration and planning)").addOption(new xe("--permission-mode <mode>","Set permission mode").choices(["standard","plan","auto-accept"])).option("--skip-onboarding","Skip taste onboarding (for non-interactive/automated runs)").option("-p, --print [query]","Run in non-interactive mode, output response and exit").option("--ide-setup","Setup extension to fetch IDE context").option("--add-dir <directory>","Add directory to workspace context",z_,[]).addOption(new xe(ft).hideHelp()).addOption(new xe(yt).hideHelp()).addOption(new xe("-d, --debug","Enable debug mode").hideHelp()).addOption(new xe("--local","Use local server").hideHelp()).addOption(new xe("--staging","Use staging server").hideHelp()).helpOption("-h, --help","Display help message").allowUnknownOption(),e.configureHelp({formatHelp:__name(()=>(displayCustomHelp(),""),"formatHelp")}),e}function setupCommanderHooks(e){e.hook("preAction",(e,t)=>{dlogSection("cmd");const n=t.name(),r=t.parent?.name();dlog(`[cmd] ${r&&r!==n?"subcommand":"running"}: ${n}`);const s=t.opts(),o=Object.entries(s).filter(([,e])=>void 0!==e&&!1!==e).map(([e,t])=>!0===t?`--${e}`:`--${e}=${t}`).join(" ");o&&dlog(`[cmd] options: ${o}`);const i=t.args;i.length>0&&dlog(`[cmd] arguments: ${i.join(" ")}`)}),e.hook("postAction",()=>{dlogSection("Done")})}__name(displayCustomHelp,"displayCustomHelp"),__name(createProgram,"createProgram"),__name(setupCommanderHooks,"setupCommanderHooks"),Nt(),Vr(),Jr(),AC();var B_=!1;function setupTelemetry(){initTelemetry()&&(startSession(),trackSystemInfo(),registerCleanupHandlers())}async function trackSystemInfo(){try{const e=process.version,t=h.platform(),n=h.arch();let r,s,o,i;try{const e=await getAuthenticatedEntity();e.success&&(r=e.user?.userName,s=e.user?.id,o=e.org?.login,i=e.org?.id)}catch{}if(!s)try{const e=await loadCredentials();s=e?.userId}catch{}systemInfo({userName:r,userId:s,orgLogin:o,orgId:i,nodeVersion:e,platform:t,arch:n})}catch{}}function registerCleanupHandlers(){process.on("beforeExit",async()=>{await shutdownTelemetry()}),process.on("exit",()=>{shutdownTelemetrySync()}),process.on("SIGINT",handleShutdownSignal),process.on("SIGTERM",handleShutdownSignal)}function handleShutdownSignal(){B_||(B_=!0,shutdownTelemetry().finally(()=>{process.exit(0)}))}async function openGitHubIssue(e){const t=buildGitHubIssueUrl(e),n=Ie("Opening GitHub issues...").start();try{await ie(t,{wait:!1,background:!0}),n.succeed(`Opened ${createOSC8Link(t,"GitHub issue")} in your browser`),console.log("")}catch(e){n.fail("Failed to open browser"),console.log(""),console.log(createOSC8Link(t,"Open GitHub issue manually")),console.log("")}}__name(setupTelemetry,"setupTelemetry"),__name(trackSystemInfo,"trackSystemInfo"),__name(registerCleanupHandlers,"registerCleanupHandlers"),__name(handleShutdownSignal,"handleShutdownSignal"),Qs(),Nt(),__name(openGitHubIssue,"openGitHubIssue");var U_=new Ae("feedback").description("Open GitHub issues to share feedback or report bugs").argument("[title]","Optional issue title").action(openGitHubIssue);Nt();var W_=new Ae("help").description("Display help information").allowUnknownOption().allowExcessArguments().action(function(){this.parent?.help()});async function runInfo(e){const{waitUntilExit:t}=ee(B.createElement(Qv,{verbose:e.verbose,text:e.text}));await t()}Nt(),Nt(),__name(runInfo,"runInfo");var Q_=new Ae("info").description("Display system information").option("--verbose","Show detailed CPU and network information").option("--text","Print plain text without colors").allowUnknownOption().allowExcessArguments().action(async e=>{await runInfo(e)});function runLearnTaste(){const{unmount:e}=ee(B.createElement(g_,{onComplete:__name(()=>{e(),process.exit(0)},"onComplete"),onError:__name(()=>{e(),process.exit(1)},"onError")}))}Nt(),Ot(),Nt(),__name(runLearnTaste,"runLearnTaste"),$n(),Vr();var G_=new Ae(Tt.LEARN_TASTE).description("Learn from your previous sessions - updates your taste profile").allowUnknownOption().allowExcessArguments().action(async()=>{try{runLearnTaste()}catch(e){trackError({error:sanitizeErrorForTelemetry({error:e instanceof Error?e:new Error(String(e)),label:"learn_taste_render_failed"}),context:{component:Br.LEARN_TASTE_COMMAND,heading:"Learn taste render failed"}}),dlog(`[/learn-taste] render failed: ${e instanceof Error?e.message:String(e)}`),await shutdownTelemetry(),process.exit(1)}});function addMcpCommand(){const e=new Ae("add");return e.description("Add an MCP server").argument("<name>","Server name (unique identifier)").argument("[url]","Server URL (required for http transport)").option("-t, --transport <type>","Transport type (stdio or http)","stdio").addOption(new xe("-s, --scope <scope>","Configuration scope").choices(["local","project","user"]).default("local")).option("-e, --env <KEY=value>","Environment variable (repeatable)",collectKeyValue,{}).option("-H, --header <header>","HTTP header (repeatable, http only)",collectHeaders,{}).allowUnknownOption().allowExcessArguments().action(async(e,t,n,r)=>{const s=getInvokedCommandName();try{let o;/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(e)&&!e.includes("__")||(console.error(Be.red(`Error: Invalid server name '${e}'`)),console.error(Be.gray("Names must start with a letter or number, contain only letters, numbers, hyphens, and single underscores")),process.exit(1)),"stdio"!==n.transport&&"http"!==n.transport&&(console.error(Be.red(`Error: Invalid transport type '${n.transport}'`)),console.error(Be.gray("Valid options: stdio, http")),process.exit(1));let i=!1;if("http"===n.transport){t||(console.error(Be.red("Error: URL is required for http transport")),console.error(Be.gray("Usage: cmd mcp add --transport http <name> <url>")),process.exit(1));try{new URL(t)}catch{console.error(Be.red(`Error: Invalid URL '${t}'`)),process.exit(1)}o={transport:"http",enabled:!0,url:t,...Object.keys(n.header).length>0&&{headers:n.header},...Object.keys(n.env).length>0&&{env:n.env}},console.log(Be.gray("Checking server authentication requirements..."));const r=await checkServerAuthRequirements(t);if(r.error&&console.log(Be.yellow(`Warning: ${r.error}`)),r.requiresAuth&&r.metadata){console.log(Be.cyan("Server requires OAuth authentication."));let t,n="command-code";if(r.metadata.registrationEndpoint){console.log(Be.gray("Registering OAuth client..."));const e=await registerOAuthClient({registrationEndpoint:r.metadata.registrationEndpoint,clientName:"Command Code CLI",redirectUris:[`http://127.0.0.1:${no}/callback`]});e&&(n=e.clientId,t=e.clientSecret)}o.oauth={authorizationUrl:r.metadata.authorizationEndpoint,tokenUrl:r.metadata.tokenEndpoint,clientId:n,clientSecret:t,scopes:r.metadata.scopes},console.log(Be.gray("A browser window will open for authentication.\n"));const s=await performOAuthFlow(e,{authorizationUrl:r.metadata.authorizationEndpoint,tokenUrl:r.metadata.tokenEndpoint,clientId:n,clientSecret:t,scopes:r.metadata.scopes},{onStatus:__name(e=>{console.log(Be.gray(` ${e}`))},"onStatus")});s.success?console.log(Be.green("✓ Successfully authenticated")):(i=!0,console.log(Be.yellow(`Warning: Authentication failed: ${s.error}`)),console.log(Be.gray("You can retry with: cmd mcp auth "+e)),console.log(Be.gray("Or authenticate via the /mcp menu in a session")))}}else{const s=r.args,i=process.argv.indexOf("--");let a,l=[];if(-1!==i){const e=process.argv.slice(i+1);0===e.length&&(console.error(Be.red("Error: Command is required for stdio transport")),console.error(Be.gray("Usage: cmd mcp add --transport stdio <name> -- <command> [args...]")),process.exit(1)),a=e[0],l=e.slice(1)}else if(t){a=t;const n=s.indexOf(e);-1!==n&&s.length>n+2&&(l=s.slice(n+2))}else console.error(Be.red("Error: Command is required for stdio transport")),console.error(Be.gray("Usage: cmd mcp add --transport stdio <name> -- <command> [args...]")),console.error(Be.gray(" or: cmd mcp add <name> <command> [args...]")),process.exit(1);o={transport:"stdio",enabled:!0,command:a,...l.length>0&&{args:l},...Object.keys(n.env).length>0&&{env:n.env}}}await addMcpServer({name:e,serverConfig:o,scope:n.scope});const a="user"===n.scope?"global":"project"===n.scope?"project":"local";if(i?console.log(Be.yellow(`✓ Added MCP server '${e}' to ${a} config (authentication pending)`)):console.log(Be.green(`✓ Added MCP server '${e}' to ${a} config`)),"http"===o.transport)console.log(Be.gray(` URL: ${o.url}`));else{const e=[o.command,...o.args||[]].join(" ");console.log(Be.gray(` Command: ${e}`))}console.log(""),console.log(Be.cyan("Next steps:")),console.log(Be.gray(`Start ${s} and run /mcp to manage configured MCP servers.`))}catch(e){console.error(Be.red(`Error: ${e instanceof Error?e.message:String(e)}`)),process.exit(1)}}),e}function collectKeyValue(e,t){const[n,...r]=e.split("=");return n&&0!==r.length||(console.error(Be.red(`Error: Invalid format '${e}', expected KEY=value`)),process.exit(1)),t[n]=r.join("="),t}function collectHeaders(e,t){const n=e.indexOf(":");-1===n&&(console.error(Be.red(`Error: Invalid header format '${e}', expected 'Header: value'`)),process.exit(1));const r=e.substring(0,n).trim(),s=e.substring(n+1).trim();return r||(console.error(Be.red(`Error: Empty header name in '${e}'`)),process.exit(1)),t[r]=s,t}function listMcpCommand(){const e=new Ae("list");return e.description("List configured MCP servers").action(async()=>{try{const e=await listMcpServers();if(0===e.length)return console.log(Be.yellow("\nNo MCP servers configured\n")),console.log(Be.gray("Add a server with:")),console.log(Be.gray(" cmd mcp add --transport http <name> <url>")),console.log(Be.gray(" cmd mcp add --transport stdio <name> -- <command>")),void console.log(Be.gray("\nDocs: https://commandcode.ai/docs/mcp"));console.log(Be.hex("#E4CCFF").bold("\nMCP Servers\n"));const t=Math.max(4,...e.map(e=>e.name.length)),n=5,r=7;console.log(Be.dim(` ${"NAME".padEnd(t)} ${"TYPE".padEnd(n)} ${"SCOPE".padEnd(r)} AUTH STATUS`));for(const s of e){const e=s.config.enabled?Be.green("enabled"):Be.gray("disabled");let o;o=s.config.oauth?await hasTokens(s.name)?Be.green(be.tick):Be.red(be.cross):s.config.headers||s.config.env?Be.green(be.tick):Be.gray("-"),console.log(` ${Be.white(s.name.padEnd(t))} ${Be.cyan(s.config.transport.padEnd(n))} ${Be.gray(s.scope.padEnd(r))} ${o} ${e}`)}console.log(Be.dim(`\nTotal: ${e.length} server${1!==e.length?"s":""}\n`))}catch(e){console.error(Be.red(`Error: ${e instanceof Error?e.message:String(e)}`)),process.exit(1)}}),e}function getMcpCommand(){const e=new Ae("get");return e.description("Show details for an MCP server").argument("<name>","Server name").action(async e=>{try{const t=await getMcpServer({name:e});t||(console.error(Be.red(`Error: MCP server '${e}' not found`)),process.exit(1));const{config:n,scope:r}=t;if(console.log(Be.hex("#E4CCFF").bold(`\nMCP Server: ${e}\n`)),console.log(` ${Be.dim("Scope:")} ${r}`),console.log(` ${Be.dim("Transport:")} ${n.transport}`),console.log(` ${Be.dim("Status:")} ${n.enabled?Be.green("enabled"):Be.gray("disabled")}`),"http"===n.transport){if(console.log(` ${Be.dim("URL:")} ${n.url}`),n.headers&&Object.keys(n.headers).length>0){console.log(` ${Be.dim("Headers:")}`);for(const[e,t]of Object.entries(n.headers)){const n=e.toLowerCase().includes("auth")||e.toLowerCase().includes("token")||e.toLowerCase().includes("key")?"***":t;console.log(` ${e}: ${n}`)}}}else console.log(` ${Be.dim("Command:")} ${n.command}`),n.args&&n.args.length>0&&console.log(` ${Be.dim("Args:")} ${n.args.join(" ")}`);if(n.env&&Object.keys(n.env).length>0){console.log(` ${Be.dim("Environment:")}`);for(const[e,t]of Object.entries(n.env)){const n=e.toLowerCase().includes("key")||e.toLowerCase().includes("secret")||e.toLowerCase().includes("token")||e.toLowerCase().includes("password")?"***":t;console.log(` ${e}=${n}`)}}console.log("")}catch(e){console.error(Be.red(`Error: ${e instanceof Error?e.message:String(e)}`)),process.exit(1)}}),e}function removeMcpCommand(){const e=new Ae("remove");return e.description("Remove an MCP server").argument("<name>","Server name").addOption(new xe("-s, --scope <scope>","Scope to remove from (auto-detects if not specified)").choices(["local","project","user"])).action(async(e,t)=>{try{const n=await getMcpServer({name:e});n||(console.error(Be.red(`Error: MCP server '${e}' not found`)),process.exit(1));const r=t.scope||n.scope;t.scope&&t.scope!==n.scope&&(console.error(Be.red(`Error: Server '${e}' is defined in '${n.scope}' scope, not '${t.scope}'`)),process.exit(1)),await removeMcpServer({name:e,scope:r})||(console.error(Be.red(`Error: Failed to remove server '${e}'`)),process.exit(1));const s="user"===r?"global":"project"===r?"project":"local";console.log(Be.green(`✓ Removed MCP server '${e}' from ${s} config`))}catch(e){console.error(Be.red(`Error: ${e instanceof Error?e.message:String(e)}`)),process.exit(1)}}),e}function addJsonMcpCommand(){const e=new Ae("add-json");return e.description("Add an MCP server from JSON configuration").argument("<name>","Server name (unique identifier)").argument("<json>","Server configuration as JSON string").addOption(new xe("-s, --scope <scope>","Configuration scope").choices(["local","project","user"]).default("local")).option("--client-secret <secret>","OAuth client secret (injected into oauth config)").action(async(e,t,n)=>{const r=getInvokedCommandName();try{let s,o;/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(e)&&!e.includes("__")||(console.error(Be.red(`Error: Invalid server name '${e}'`)),console.error(Be.gray("Names must start with a letter or number, contain only letters, numbers, hyphens, and single underscores")),process.exit(1));try{s=JSON.parse(t)}catch{console.error(Be.red("Error: Invalid JSON")),console.error(Be.gray("Make sure to quote the JSON string properly")),console.error(Be.gray(`Example: ${r} mcp add-json github '{"type":"stdio","command":"npx"}'`)),process.exit(1)}s&&"object"==typeof s&&"type"in s&&!("transport"in s)&&(s.transport=s.type,delete s.type),s?.oauth?.callbackPort&&(o=s.oauth.callbackPort,delete s.oauth.callbackPort),n.clientSecret&&s?.oauth&&(s.oauth.clientSecret=n.clientSecret);const i=js.safeParse(s);if(!i.success){console.error(Be.red("Error: Invalid server configuration"));for(const e of i.error.issues)console.error(Be.gray(` ${e.path.join(".")}: ${e.message}`));process.exit(1)}const a=i.data;let l=!1;if("http"!==a.transport||a.url||(console.error(Be.red("Error: URL is required for http type")),process.exit(1)),"stdio"!==a.transport||a.command||(console.error(Be.red("Error: Command is required for stdio type")),process.exit(1)),await addMcpServer({name:e,serverConfig:a,scope:n.scope}),a.oauth){console.log(Be.cyan("Starting OAuth authentication...")),console.log(Be.gray("A browser window will open for authentication.\n"));const t={authorizationUrl:a.oauth.authorizationUrl,tokenUrl:a.oauth.tokenUrl,clientId:a.oauth.clientId,clientSecret:a.oauth.clientSecret,scopes:a.oauth.scopes},n=await performOAuthFlow(e,t,{...o&&{port:o},onStatus:__name(e=>{console.log(Be.gray(` ${e}`))},"onStatus")});n.success?console.log(Be.green(`\n✓ Successfully authenticated with '${e}'`)):(l=!0,console.error(Be.yellow(`\nWarning: Authentication failed: ${n.error}`)),console.error(Be.gray(`You can retry with: ${r} mcp auth ${e}`)),console.error(Be.gray("Or authenticate via the /mcp menu in a session")))}const u="user"===n.scope?"global":"project"===n.scope?"project":"local";if(l?console.log(Be.yellow(`✓ Added MCP server '${e}' to ${u} config (authentication pending)`)):console.log(Be.green(`✓ Added MCP server '${e}' to ${u} config`)),"http"===a.transport)console.log(Be.gray(` URL: ${a.url}`));else{const e=[a.command,...a.args||[]].join(" ");console.log(Be.gray(` Command: ${e}`))}console.log(""),console.log(Be.cyan("Next steps:")),console.log(Be.gray(`Start ${r} and run /mcp to manage configured MCP servers.`))}catch(e){console.error(Be.red(`Error: ${e instanceof Error?e.message:String(e)}`)),process.exit(1)}}),e}function authMcpCommand(){const e=new Ae("auth");return e.description("Manage OAuth authentication for MCP servers").argument("[server]","Server name to authenticate").option("--status","Check authentication status").option("--clear","Clear stored authentication").option("--list","List servers with stored authentication").action(async(e,t)=>{const n=getInvokedCommandName();try{if(t.list){const e=await listServersWithTokens();if(0===e.length)return void console.log(Be.yellow("No servers with stored authentication."));console.log(Be.hex("#E4CCFF").bold("\nAuthenticated MCP Servers\n"));for(const t of e){const e=await getTokens(t),n=!e||isTokenExpired(e)?Be.yellow("expired"):Be.green("valid");console.log(` ${t}: ${n}`)}return void console.log("")}if(e||(console.error(Be.red("Error: Server name is required")),console.error(Be.gray(`Usage: ${n} mcp auth <server>`)),console.error(Be.gray(` ${n} mcp auth --list`)),process.exit(1)),t.status){if(!await hasTokens(e))return void console.log(Be.yellow(`No authentication stored for '${e}'`));const t=await getTokens(e);if(!t)return void console.log(Be.yellow(`No authentication stored for '${e}'`));if(isTokenExpired(t))console.log(Be.yellow(`Authentication for '${e}' has expired`)),t.refreshToken&&console.log(Be.gray(" A refresh token is available for re-authentication"));else{if(console.log(Be.green(`Authentication for '${e}' is valid`)),t.expiresAt){const e=Math.round((t.expiresAt-Date.now())/1e3/60);console.log(Be.gray(` Expires in ${e} minutes`))}t.scope&&console.log(Be.gray(` Scopes: ${t.scope}`))}return}if(t.clear)return void(await deleteTokens(e)?console.log(Be.green(`✓ Cleared authentication for '${e}'`)):console.log(Be.yellow(`No authentication stored for '${e}'`)));const r=await getMcpServer({name:e});r||(console.error(Be.red(`Error: MCP server '${e}' not found`)),console.error(Be.gray(`Use "${n} mcp list" to see configured servers`)),process.exit(1)),r.config.oauth||(console.error(Be.red(`Error: Server '${e}' does not have OAuth configured`)),console.error(Be.gray(`Add OAuth config using "${n} mcp add-json" with oauth field`)),process.exit(1));const s={authorizationUrl:r.config.oauth.authorizationUrl,tokenUrl:r.config.oauth.tokenUrl,clientId:r.config.oauth.clientId,clientSecret:r.config.oauth.clientSecret,scopes:r.config.oauth.scopes};console.log(Be.cyan(`Authenticating with '${e}'...`)),console.log(Be.gray("A browser window will open for authentication.\n"));const o=await performOAuthFlow(e,s,{onStatus:__name(e=>{console.log(Be.gray(` ${e}`))},"onStatus")});if(o.success)return console.log(Be.green(`\n✓ Successfully authenticated with '${e}'`)),void console.log(Be.gray("Restart the session to connect with the authenticated server."));console.error(Be.red(`\nError: Authentication failed: ${o.error}`)),console.log(Be.gray(`Try again with "${n} mcp auth ${e}"`)),process.exit(1)}catch(e){console.error(Be.red(`Error: ${e instanceof Error?e.message:String(e)}`)),process.exit(1)}}),e}function createMcpCommand(){const e=new Ae("mcp");return e.description("Manage MCP (Model Context Protocol) servers").allowUnknownOption().allowExcessArguments(),e.addCommand(addMcpCommand()),e.addCommand(listMcpCommand()),e.addCommand(getMcpCommand()),e.addCommand(removeMcpCommand()),e.addCommand(addJsonMcpCommand()),e.addCommand(authMcpCommand()),e}function getTastePath(t){const{target:n}=t;if("local-project"===n)return e.join(process.cwd(),".commandcode","taste");if("local-global"===n)return e.join(h.homedir(),".commandcode","taste");throw new Error(`Remote storage not yet implemented: ${n}`)}function getRootTasteFile(t){const{target:n}=t;return e.join(getTastePath({target:n}),"taste.md")}function getCategoryPath(t){const{target:n,category:r}=t;return e.join(getTastePath({target:n}),r)}function getCategoryTasteFile(t){const{target:n,category:r}=t;return e.join(getCategoryPath({target:n,category:r}),"taste.md")}Nt(),Nt(),__name(addMcpCommand,"addMcpCommand"),__name(collectKeyValue,"collectKeyValue"),__name(collectHeaders,"collectHeaders"),Nt(),__name(listMcpCommand,"listMcpCommand"),Nt(),__name(getMcpCommand,"getMcpCommand"),Nt(),__name(removeMcpCommand,"removeMcpCommand"),Nt(),__name(addJsonMcpCommand,"addJsonMcpCommand"),Nt(),__name(authMcpCommand,"authMcpCommand"),__name(createMcpCommand,"createMcpCommand"),Nt(),Ot(),Nt(),Nt(),fC(),Nt(),Ot(),__name(getTastePath,"getTastePath"),__name(getRootTasteFile,"getRootTasteFile"),__name(getCategoryPath,"getCategoryPath"),__name(getCategoryTasteFile,"getCategoryTasteFile"),Nt(),Nt();var H_=/confidence:/i;function findLookaheadEnd(e,t){const n=e.slice(t),r=n.findIndex(e=>{const t=e.trim();return t.startsWith("#")||t.startsWith("-")||H_.test(t)});if(-1===r)return{endIdx:e.length,inclusive:!1};const s=n[r].trim();return{endIdx:t+r,inclusive:H_.test(s)&&!s.startsWith("#")&&!s.startsWith("-")}}function joinMultiLineLearning(e,t,n){const{endIdx:r,inclusive:s}=findLookaheadEnd(e,t),o=s?r+1:r;return{combined:[n,...e.slice(t,o).map(e=>e.trim()).filter(e=>e.length>0)].join(" "),nextIdx:o}}function processRawLine(e,t){const n=e[t],r=t+1,s=n.trim();if(!s.startsWith("-"))return{entry:{text:n,originalLineNum:r},nextIdx:t+1};if(H_.test(s))return{entry:{text:n,originalLineNum:r},nextIdx:t+1};const{combined:o,nextIdx:i}=joinMultiLineLearning(e,t+1,n);return{entry:{text:o,originalLineNum:r},nextIdx:i}}function preprocessLines(e){const t=[];let n=0;for(;n<e.length;){const{entry:r,nextIdx:s}=processRawLine(e,n);t.push(r),n=s}return t}function validateLearningLine(e){const{line:t,lineNum:n}=e,r=[],s=t.substring(1).trim();if(!H_.test(s))return r.push({line:n,severity:"error",message:'Learning is missing "Confidence:" field',suggestion:'Format: "- Learning text. Confidence: 0.95" (value between 0.0 and 1.0)'}),r;const o=Array.from(s.matchAll(/confidence:\s*(\S+)/gi)),i=o.length>0?o[o.length-1]:null;if(!i)return r.push({line:n,severity:"error",message:"Confidence field is present but has no value",suggestion:'Add a number after "Confidence:" (e.g., Confidence: 0.95)'}),r;const a=i[1],l=parseFloat(a);if(isNaN(l))return r.push({line:n,severity:"error",message:`Confidence value "${a}" is not a valid number`,suggestion:"Use a decimal number between 0.0 and 1.0 (e.g., 0.95)"}),r;(l<0||l>1)&&r.push({line:n,severity:"error",message:`Confidence value ${l} is out of range`,suggestion:"Confidence must be between 0.0 and 1.0"}),l>=0&&l<=1&&0===l&&r.push({line:n,severity:"warning",message:"Confidence is 0.0 - this learning may not be useful",suggestion:"Consider removing learnings with 0 confidence"});const u=void 0!==i.index?s.substring(0,i.index).trim():s.trim();return u&&0!==u.length?(u.length<3&&r.push({line:n,severity:"warning",message:"Learning text is very short",suggestion:"Provide more descriptive text for clarity"}),r):(r.push({line:n,severity:"error",message:'Learning has no text before "Confidence:"',suggestion:'Add descriptive text (e.g., "Use pnpm for package management")'}),r)}function hasReferenceAfterCategory(e){const{lines:t,categoryLineIndex:n}=e,r=t.slice(n+1,n+4),s=r.findIndex(e=>e.trim().startsWith("# "));return(-1===s?r:r.slice(0,s)).some(e=>e.includes("See [")&&e.includes("taste.md"))}function buildResult(e){const{issues:t,filePath:n}=e,r=t.filter(e=>"error"===e.severity),s=t.filter(e=>"warning"===e.severity),o=0===r.length;if(0===t.length)return{valid:o,issues:[...t],summary:`${be.tick} ${n} is valid`};const i=[];r.length>0&&i.push(`${r.length} error${r.length>1?"s":""}`),s.length>0&&i.push(`${s.length} warning${s.length>1?"s":""}`);const a=r.length>0?be.cross:be.warning;return{valid:o,issues:[...t],summary:`${a} ${n} has ${i.join(", ")}`}}function formatSingleIssue(e,t){const n=[`${e.line?Be.dim(` Line ${e.line}: `):" "}${t(e.message)}`];return e.suggestion&&n.push(Be.dim(` → ${e.suggestion}`)),n}function formatIssueGroup(e,t,n){return 0===e.length?[]:[n,...e.flatMap(e=>formatSingleIssue(e,t)),""]}function formatValidationIssues(e){const{result:t,verbose:n=!0}=e;if(0===t.issues.length){const e=t.summary.charAt(0),n=t.summary.substring(2);return`${Be.green(e)} ${Be.dim(n)}`}if(!n)return t.summary;const r=t.issues.filter(e=>"error"===e.severity),s=t.issues.filter(e=>"warning"===e.severity);return[r.length>0?Be.red(t.summary):Be.yellow(t.summary),"",...formatIssueGroup(r,Be.red,Be.bold(Be.red("Errors:"))),...formatIssueGroup(s,Be.yellow,Be.bold(Be.yellow("Warnings:")))].join("\n").trim()}__name(findLookaheadEnd,"findLookaheadEnd"),__name(joinMultiLineLearning,"joinMultiLineLearning"),__name(processRawLine,"processRawLine"),__name(preprocessLines,"preprocessLines"),__name(validateLearningLine,"validateLearningLine"),__name(hasReferenceAfterCategory,"hasReferenceAfterCategory"),__name(buildResult,"buildResult"),Nt(),__name(formatSingleIssue,"formatSingleIssue"),__name(formatIssueGroup,"formatIssueGroup"),__name(formatValidationIssues,"formatValidationIssues");var V_=new Set(["# Taste (Continuously Learned by [CommandCode][cmd])","# Taste (Continuously Learned by CommandCode.ai)","# Taste (Continuously Learned by CommandCode)"]);function warnIfEmptyCategory(e,t){!e.currentCategory||e.learningsInCurrentCategory>0||hasReferenceAfterCategory({lines:t,categoryLineIndex:e.categoryLineNumber-1})||e.issues.push({line:e.categoryLineNumber,severity:"warning",message:`Category '${e.currentCategory}' has no learnings`,suggestion:"Add at least one learning or remove this category"})}function processHeading(e){const{line:t,lineNum:n,state:r,rawLines:s}=e;V_.has(t.trim())||(r.hasAnyCategory=!0,warnIfEmptyCategory(r,s),r.currentCategory=t.trim().substring(2).trim(),r.categoryLineNumber=n,r.learningsInCurrentCategory=0)}function processLearning(e){const{line:t,lineNum:n,state:r}=e;r.currentCategory?(r.learningsInCurrentCategory++,r.issues.push(...validateLearningLine({line:t.trim(),lineNum:n}))):r.issues.push({line:n,severity:"error",message:"Learning found outside of any category",suggestion:'Add a category header (e.g., "# cli") before this learning'})}__name(warnIfEmptyCategory,"warnIfEmptyCategory"),__name(processHeading,"processHeading"),__name(processLearning,"processLearning");var K_=/^see \[[^\]]+\/taste\.md\]\([^\)]+\/taste\.md\)$/i,Y_=/^\[cmd\]: https:\/\/commandcode\.ai\/$/i;function processLine(e){const{line:t,lineNum:n,state:r,rawLines:s}=e,o=t.trim();o&&(o.startsWith("# ")?processHeading({line:t,lineNum:n,state:r,rawLines:s}):o.startsWith("-")?processLearning({line:t,lineNum:n,state:r}):K_.test(o)||Y_.test(o)||r.issues.push({line:n,severity:"error",message:"Invalid content - must be a category header (# name) or learning (- text)",suggestion:"Remove this line or format it as a category (# name) or learning (- text. Confidence: 0.XX)"}))}function checkFinalCategory(e){const{state:t,rawLines:n}=e;!t.currentCategory||t.learningsInCurrentCategory>0||!t.categoryLineNumber||hasReferenceAfterCategory({lines:n,categoryLineIndex:t.categoryLineNumber-1})||t.issues.push({line:t.categoryLineNumber,severity:"warning",message:`Category '${t.currentCategory}' has no learnings`,suggestion:"Add at least one learning or remove this category"})}function validateTasteFile(e){const{content:t,filePath:n}=e,r=[];if(!t.trim())return r.push({severity:"error",message:"File is empty",suggestion:"Add at least one category with learnings"}),buildResult({issues:r,filePath:n});const s=t.split("\n"),o=preprocessLines(s),i={currentCategory:null,categoryLineNumber:null,learningsInCurrentCategory:0,hasAnyCategory:!1,issues:r};for(const{text:e,originalLineNum:t}of o)processLine({line:e,lineNum:t,state:i,rawLines:s});return checkFinalCategory({state:i,rawLines:s}),buildResult({issues:r,filePath:n})}__name(processLine,"processLine"),__name(checkFinalCategory,"checkFinalCategory"),__name(validateTasteFile,"validateTasteFile");var J_=__name(e=>"local-global"===e?"global":"project","locationLabel"),X_=__name(({file:e,error:t})=>({success:!1,filesLinted:[],errors:[{file:e,error:t}],totalErrors:0,totalWarnings:0}),"failResult");function resolvePackageFile(e,t){const n=getCategoryTasteFile({target:t,category:e});return E(n)?{result:{path:n,displayName:`${e}/taste.md`}}:{error:{file:e,error:`Taste package '${e}' not found in ${J_(t)}`}}}function collectSpecificFiles(e){const{packages:t,target:n}=e,r=t.map(e=>resolvePackageFile(e,n));return{files:r.filter(e=>"result"in e).map(e=>e.result),errors:r.filter(e=>"error"in e).map(e=>e.error)}}async function collectAllFiles(e){const{tastePath:t,target:n}=e,r=[],s=getRootTasteFile({target:n});E(s)&&r.push({path:s,displayName:"taste.md"});const o=(await $.readdir(t,{withFileTypes:!0})).filter(e=>e.isDirectory()).map(e=>({entry:e,categoryFile:getCategoryTasteFile({target:n,category:e.name})})).filter(({categoryFile:e})=>E(e)).map(({entry:e,categoryFile:t})=>({path:t,displayName:`${e.name}/taste.md`}));return r.push(...o),r}async function lintFile(e){let t=await $.readFile(e.path,"utf-8");const n=migrateHeader({content:t});n!==t&&(await $.writeFile(e.path,n,"utf-8"),t=n);const r=validateTasteFile({content:t,filePath:e.displayName}),s=r.issues.filter(e=>"error"===e.severity).length,o=r.issues.filter(e=>"warning"===e.severity).length,i=formatValidationIssues({result:r});return{file:e.displayName,valid:r.valid,errors:s,warnings:o,formatted:i}}async function lintSpecificPackages(e){const{packages:t,target:n}=e,{files:r,errors:s}=collectSpecificFiles({packages:t,target:n});if(0===r.length&&s.length>0)return{success:!1,filesLinted:[],errors:s,totalErrors:0,totalWarnings:0};if(0===r.length)return X_({file:"all",error:`No taste files found in ${J_(n)}`});const o=await Promise.all(r.map(lintFile)),i=o.reduce((e,t)=>e+t.errors,0),a=o.reduce((e,t)=>e+t.warnings,0);return{success:o.every(e=>e.valid)&&0===s.length,filesLinted:o,errors:s,totalErrors:i,totalWarnings:a}}async function lintAllFiles(e){const{tastePath:t,target:n}=e,r=await collectAllFiles({tastePath:t,target:n});if(0===r.length)return X_({file:"all",error:`No taste files found in ${J_(n)}`});const s=await Promise.all(r.map(lintFile)),o=s.reduce((e,t)=>e+t.errors,0),i=s.reduce((e,t)=>e+t.warnings,0);return{success:s.every(e=>e.valid),filesLinted:s,errors:[],totalErrors:o,totalWarnings:i}}async function lint(e){const{packages:t,target:n}=e,r=getTastePath({target:n});return E(r)?t.length>0?lintSpecificPackages({packages:t,target:n}):lintAllFiles({tastePath:r,target:n}):X_({file:"all",error:`No taste directory found in ${J_(n)}`})}function resolveConflictStrategy(e){const t=[e.skip&&"skip",e.merge&&"merge",e.overwrite&&"overwrite"].filter(Boolean);return t.length>1&&exitWithError(`Cannot combine --${t[0]} and --${t[1]}. Choose one conflict strategy.`),t[0]}__name(resolvePackageFile,"resolvePackageFile"),__name(collectSpecificFiles,"collectSpecificFiles"),__name(collectAllFiles,"collectAllFiles"),__name(lintFile,"lintFile"),__name(lintSpecificPackages,"lintSpecificPackages"),__name(lintAllFiles,"lintAllFiles"),__name(lint,"lint"),Nt(),Vr(),__name(resolveConflictStrategy,"resolveConflictStrategy");var Z_=Be.bgGreen.black.bold(" TASTE ");function shortenPath(e){const t=process.env.HOME??process.env.USERPROFILE??"";return t&&e.startsWith(t)?`~${e.slice(t.length)}`:e}function exitWithError(e){console.error(`${Be.red("Error:")} ${e.replace(/^Error:\s*/i,"")}`),process.exit(1)}function formatUsageLine(e){const t=e.match(/^(\s*(?:Usage:|or:)?\s*)(cmd)(\s+.+?)(\s+\(.*\))?$/);return t?`${Be.dim(t[1])}${Be.green(t[2])}${Be.white(t[3]??"")}${t[4]?Be.dim(t[4]):""}`:Be.dim(e)}function exitWithUsage({message:e,usage:t}){console.error(`${Be.red("Error:")} ${e.replace(/^Error:\s*/i,"")}`);for(const e of t)console.error(formatUsageLine(e));process.exit(1)}function resolveRemoteDefault(e){return e.global||e.remote?e:{...e,remote:!0}}__name(shortenPath,"shortenPath"),__name(exitWithError,"exitWithError"),__name(formatUsageLine,"formatUsageLine"),__name(exitWithUsage,"exitWithUsage"),__name(resolveRemoteDefault,"resolveRemoteDefault");var eP=__name((e,t)=>t,"linkFallback");function getPackageLink({owner:e,packageName:t}){return ot(`commandcode.ai/${e}/${t}`,`https://commandcode.ai/${e}/${t}`,{fallback:eP})}function getProfileLink(e){return ot(`commandcode.ai/${e}`,`https://commandcode.ai/${e}`,{fallback:eP})}function wrapLine(e,t=0){const n=(process.stdout.columns||80)-t;return st(e,n,{trim:!1})}function formatMergeParts(e){const t=[];return e.added>0&&t.push(`${e.added} ${1===e.added?"learning":"learnings"} added`),e.updated>0&&t.push(`${e.updated} ${1===e.updated?"learning":"learnings"} updated`),e.unchanged>0&&t.push(`${e.unchanged} ${1===e.unchanged?"learning":"learnings"} unchanged`),t}function hasMergeConflictRisk(e){return(e.added>0||e.updated>0)&&e.unchanged>0}function hasMergeConflictRiskInRecord(e){return Object.values(e).some(hasMergeConflictRisk)}function logMergeReviewTip(){console.log(Be.yellow("\nTip: Review merged learnings to ensure no conflicting rules."))}function parseOwnerPackage(e){if(!e.includes("/"))return;const[t,n]=e.split("/");return t&&n?{owner:t,packageName:n}:void 0}function handleResultErrors(e){for(const t of e){const e=t.error.replace(/^Taste package(?: '.*?')? /,`Taste package '${t.pkg}' `);console.error(`${Be.red("Error:")} ${e}`)}process.exit(1)}function getTimeAgo(e){const t=Date.now()-e.getTime(),n=Math.floor(t/6e4),r=Math.floor(t/36e5),s=Math.floor(t/864e5);return n<1?"just now":n<60?`${n} minute${n>1?"s":""} ago`:r<24?`${r} hour${r>1?"s":""} ago`:`${s} day${s>1?"s":""} ago`}async function flushAndExit(e){await Promise.race([shutdownTelemetry(),new Promise(e=>setTimeout(e,500))]).catch(()=>{}),process.exit(e)}function withErrorHandler(e){return async(...t)=>{try{await e(...t),await flushAndExit(0)}catch(e){const t=e instanceof Error?e.message:String(e);console.error(Be.red(`Error: ${t}`)),await flushAndExit(1)}}}function createLintCommand(){return new Ae("lint").argument("[package]","Taste package name").option("-g, --global","Validate taste packages from global storage (~/.commandcode)").option("--all","Validate all taste packages").description(`Validate taste package format ${Be.dim("(structure, style, etc.)")}`).action(withErrorHandler(async(e,t)=>runLint({packageName:e,options:t})))}function validateLintOptions({packageName:e,options:t}){e||t.all||exitWithUsage({message:"Specify a taste package name or use --all to validate everything",usage:["cmd taste lint <package> validate a taste package","cmd taste lint --all validate all taste packages"]}),e&&t.all&&exitWithError("Use either a package name or --all, not both")}function logLintResults(e){for(const t of e.filesLinted)console.log(t.formatted);e.filesLinted.length>1&&logLintSummary(e),e.success||process.exit(1)}function logLintSummary({filesLinted:e,totalErrors:t,totalWarnings:n}){if(console.log(""),0===t&&0===n)return void console.log(`${Be.green(be.tick)} All ${Be.green(e.length)} taste files are valid`);const r=[];t>0&&r.push(Be.red(`${t} error${t>1?"s":""}`)),n>0&&r.push(Be.yellow(`${n} warning${n>1?"s":""}`)),console.log(`Summary: ${r.join(", ")} across ${e.length} files`)}async function runLint({packageName:e,options:t}){console.log(""),validateLintOptions({packageName:e,options:t});const n=await lint({packages:e?[e]:[],target:t.global?"local-global":"local-project"});if(n.errors.length>0){for(const e of n.errors)console.error(Be.red(`Error: ${e.error}`));process.exit(1)}logLintResults(n)}function parseSection(e){const{section:t,sourcePath:n}=e,r=t.split("\n"),s=r[0].trim(),o=r.map(e=>parseLearning({line:e})).filter(e=>null!==e);return 0===o.length?null:{category:normalizeCategory({category:s}),learnings:o,sourcePath:n}}function parsePackages(e){const{content:t,sourcePath:n}=e;return t.split(/^# /gm).filter(e=>e.trim()).filter(e=>!e.includes("See [")).map(e=>parseSection({section:e,sourcePath:n})).filter(e=>null!==e)}function parseLearning(e){const{line:t}=e,n=t.match(/^-?\s*(.+?)[\.:,]?\s*confidence:\s*(\d*\.?\d+)/i);if(!n)return null;const r=parseFloat(n[2]);return isNaN(r)||r<0||r>1?null:{text:n[1].trim(),confidence:r}}function normalizeCategory(e){const{category:t}=e;return t.toLowerCase().replace(/\s+/g,"-")}function denormalizeCategory(e){const{slug:t}=e;return t.split("-").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function formatPackage(e){const{pkg:t}=e;let n=`# ${denormalizeCategory({slug:t.category})}\n`;for(const e of t.learnings)n+=`- ${e.text}. Confidence: ${e.confidence.toFixed(2)}\n`;return n}async function readAndMigrateFile(e){const{filePath:t}=e,n=await $.readFile(t,"utf-8"),r=migrateHeader({content:n});return r===n?n:(await $.writeFile(t,r,"utf-8"),r)}function trimTrailingBlanks(e){const{lines:t,until:n}=e;let r=e.from;for(;r>n&&""===t[r].trim();)r--;return r}function findCategoryRange(e){const{lines:t,pattern:n}=e,r=t.findIndex(e=>n.test(e));if(-1===r)return null;const s=t.findIndex((e,t)=>t>r&&e.startsWith("# "));if(-1===s)return{start:r,end:t.length-1};const o=trimTrailingBlanks({lines:t,from:s-1,until:r});return{start:r,end:o}}function ensureHeader(e){if(!e)return lC+"\n\n";const t=e.trim();return t.startsWith(iC)||t.startsWith(cC)||t.startsWith(uC)?e:lC+"\n\n"+e}function ensureTrailingNewlines(e){return e?e.endsWith("\n\n")?e:e.endsWith("\n")?e+"\n":e+"\n\n":e}__name(getPackageLink,"getPackageLink"),__name(getProfileLink,"getProfileLink"),__name(wrapLine,"wrapLine"),__name(formatMergeParts,"formatMergeParts"),__name(hasMergeConflictRisk,"hasMergeConflictRisk"),__name(hasMergeConflictRiskInRecord,"hasMergeConflictRiskInRecord"),__name(logMergeReviewTip,"logMergeReviewTip"),__name(parseOwnerPackage,"parseOwnerPackage"),__name(handleResultErrors,"handleResultErrors"),__name(getTimeAgo,"getTimeAgo"),__name(flushAndExit,"flushAndExit"),__name(withErrorHandler,"withErrorHandler"),__name(createLintCommand,"createLintCommand"),__name(validateLintOptions,"validateLintOptions"),__name(logLintResults,"logLintResults"),__name(logLintSummary,"logLintSummary"),__name(runLint,"runLint"),Nt(),Es(),Nt(),Nt(),Nt(),__name(parseSection,"parseSection"),__name(parsePackages,"parsePackages"),__name(parseLearning,"parseLearning"),__name(normalizeCategory,"normalizeCategory"),__name(denormalizeCategory,"denormalizeCategory"),Nt(),__name(formatPackage,"formatPackage"),Nt(),fC(),__name(readAndMigrateFile,"readAndMigrateFile"),__name(trimTrailingBlanks,"trimTrailingBlanks"),__name(findCategoryRange,"findCategoryRange"),__name(ensureHeader,"ensureHeader"),__name(ensureTrailingNewlines,"ensureTrailingNewlines");var tP="local-global";async function loadCategoryPackages(e){if(!e.isDirectory())return[];const t=getCategoryTasteFile({target:tP,category:e.name});return E(t)?parsePackages({content:await readAndMigrateFile({filePath:t}),sourcePath:t}).map(t=>({...t,category:e.name})):[]}async function getPackageInfo(e){try{const t=await $.stat(e.sourcePath);return{category:e.category,learningCount:e.learnings.length,lastUpdated:t.mtime,filePath:e.sourcePath}}catch{return{category:e.category,learningCount:e.learnings.length,lastUpdated:new Date,filePath:e.sourcePath}}}async function getAllPackages(){const e=getTastePath({target:tP});if(!E(e))return[];const t=await $.readdir(e,{withFileTypes:!0});return(await Promise.all(t.map(loadCategoryPackages))).flat()}async function getPackage(e){const{category:t}=e,n=getCategoryTasteFile({target:tP,category:t});return E(n)&&parsePackages({content:await readAndMigrateFile({filePath:n}),sourcePath:n})[0]||null}async function writePackage(t){const{pkg:n}=t,r=getTastePath({target:tP});await $.mkdir(r,{recursive:!0});const s=getCategoryTasteFile({target:tP,category:n.category}),o=e.dirname(s);await $.mkdir(o,{recursive:!0});const i=formatPackage({pkg:n});await $.writeFile(s,i,"utf-8")}async function listPackages(){const e=await getAllPackages();return await Promise.all(e.map(getPackageInfo))}__name(loadCategoryPackages,"loadCategoryPackages"),__name(getPackageInfo,"getPackageInfo"),__name(getAllPackages,"getAllPackages"),__name(getPackage,"getPackage"),__name(writePackage,"writePackage"),__name(listPackages,"listPackages"),Nt(),Nt(),fC();var nP="local-project";async function removeCategoryFromRoot(e){const{category:t,rootFile:n}=e;if(!E(n))return null;const r=migrateHeader({content:await $.readFile(n,"utf-8")}).split("\n"),s=findCategoryRange({lines:r,pattern:new RegExp(`^# ${t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}$`,"i")});if(!s)return null;const o=r.slice(0,s.start),i=s.end<r.length-1?r.slice(s.end+1):[],a={before:o.join("\n").trim(),after:i.join("\n").trim()},l=[...o,...i].join("\n").trim();return""===l&&await $.rm(n,{force:!0}),""!==l&&await $.writeFile(n,l+"\n","utf-8"),a}async function removePackage(t){const{category:n}=t,r=getRootTasteFile({target:nP}),s=await removeCategoryFromRoot({category:n,rootFile:r}),o=getCategoryTasteFile({target:nP,category:n}),i=e.dirname(o);return E(i)&&await $.rm(i,{recursive:!0,force:!0}),s}async function writeToRoot(e){const{pkg:t,rootFile:n,categoryPosition:r}=e,s=formatPackage({pkg:t});if(r){let e=ensureHeader(migrateHeader({content:r.before}));e=ensureTrailingNewlines(e);const t=r.after?"\n\n"+r.after:"";return e+=s.trim()+t,void await $.writeFile(n,e.trim()+"\n","utf-8")}let o="";E(n)&&(o=await $.readFile(n,"utf-8"),o=migrateHeader({content:o})),o=ensureHeader(o),o=ensureTrailingNewlines(o),o+=s,await $.writeFile(n,o.trim()+"\n","utf-8")}async function writeToSubdirectory(t){const{pkg:n,rootFile:r,categoryPosition:s}=t,o=getCategoryTasteFile({target:nP,category:n.category}),i=e.dirname(o);await $.mkdir(i,{recursive:!0});const a=formatPackage({pkg:n});await $.writeFile(o,a,"utf-8");const l=`# ${n.category}\nSee [${n.category}/taste.md](${n.category}/taste.md)\n`;if(s){let e=ensureHeader(migrateHeader({content:s.before}));e=ensureTrailingNewlines(e);const t=s.after?"\n\n"+s.after:"";return e+=l.trim()+t,void await $.writeFile(r,e.trim()+"\n","utf-8")}let u="";E(r)&&(u=await $.readFile(r,"utf-8"),u=migrateHeader({content:u})),u=ensureHeader(u),u=ensureTrailingNewlines(u),u+=l,await $.writeFile(r,u.trim()+"\n","utf-8")}__name(removeCategoryFromRoot,"removeCategoryFromRoot"),__name(removePackage,"removePackage"),__name(writeToRoot,"writeToRoot"),__name(writeToSubdirectory,"writeToSubdirectory");var rP="local-project";async function loadCategoryPackages2(e){if(!e.isDirectory())return[];const t=getCategoryTasteFile({target:rP,category:e.name});return E(t)?parsePackages({content:await readAndMigrateFile({filePath:t}),sourcePath:t}).map(t=>({...t,category:e.name})):[]}async function getAllPackages2(){const e=getTastePath({target:rP});if(!E(e))return[];const t=[],n=getRootTasteFile({target:rP});if(E(n)){const e=parsePackages({content:await readAndMigrateFile({filePath:n}),sourcePath:n});t.push(...e)}const r=await $.readdir(e,{withFileTypes:!0}),s=(await Promise.all(r.map(loadCategoryPackages2))).flat();return t.push(...s),t}async function getPackage2(e){const{category:t}=e;return(await getAllPackages2()).find(e=>e.category===t)||null}async function writePackage2(e){const{pkg:t}=e,n=getTastePath({target:rP});await $.mkdir(n,{recursive:!0});const r=getRootTasteFile({target:rP}),s=await removePackage({category:t.category});t.learnings.length<=5?await writeToRoot({pkg:t,rootFile:r,categoryPosition:s}):await writeToSubdirectory({pkg:t,rootFile:r,categoryPosition:s})}function exists2(){const e=getTastePath({target:rP});return E(e)}async function appendCategoryFile(e,t){const n=getCategoryTasteFile({target:"local-project",category:t.category});if(!E(n))return;const r=await $.readFile(n,"utf-8"),s=new Blob([r],{type:"text/markdown"}),o=new File([s],"taste.md",{type:"text/markdown"});e.append(`files[${t.category}/taste.md]`,o)}async function prepareUploadFormData(t){const{packageName:n,pkg:r,description:s,type:o="category",isPublic:i=!1}=t,a=new FormData;a.append("name",n),s&&a.append("description",s),a.append("type",o),a.append("isPublic",String(i));const l=formatPackage({pkg:r}),u=new Blob([l],{type:"text/markdown"}),d=new File([u],"taste.md",{type:"text/markdown"});if(a.append("files[taste.md]",d),"category"===o)return a;const m=getTastePath({target:"local-project"}),p=e.join(m,r.category);if(!E(p))return a;const g=getCategoryTasteFile({target:"local-project",category:r.category});if(!E(g))return a;const h=await $.readFile(g,"utf-8"),f=new Blob([h],{type:"text/markdown"}),y=new File([f],"taste.md",{type:"text/markdown"});return a.append(`files[${r.category}/taste.md]`,y),a}async function prepareMultiplePackagesUpload(e){const{pkgs:t,projectName:n,description:r,isPublic:s=!1}=e,o=new FormData;o.append("name",n),r&&o.append("description",r),o.append("type","project"),o.append("isPublic",String(s));const i=getRootTasteFile({target:"local-project"});if(E(i)){const e=await $.readFile(i,"utf-8"),t=new Blob([e],{type:"text/markdown"}),n=new File([t],"taste.md",{type:"text/markdown"});o.append("files[taste.md]",n)}const a=t.map(e=>appendCategoryFile(o,e));return await Promise.all(a),o}function parseLearningLine(e){const t=e.match(/^-\s+(.+?)\.\s+Confidence:\s+([\d.]+)/);if(!t)return null;const n=t[1].trim(),r=parseFloat(t[2]);return!n||isNaN(r)?null:{text:n,confidence:r}}function parseTasteContent(e){return e.split("\n").filter(e=>{const t=e.trim();return t&&!t.startsWith("#")&&t.startsWith("-")}).map(e=>parseLearningLine(e.trim())).filter(e=>null!==e)}async function parseApiError(e){const{response:t,fallback:n}=e;try{const e=await t.json();return e.error?.message||e.message||n}catch{return n}}function throwTrackedError(e){const{message:t,label:n,heading:r,status:s,extra:o}=e,i=new Error(t);throw trackError({error:sanitizeErrorForTelemetry({error:i,label:n}),context:{component:Br.TASTE_REMOTE_STORAGE,heading:r,"http.status":s,...o}}),i}async function requireAuthKey(){const e=await getAuthKey();if(!e)throw new Error("No API key found. Please authenticate with: cmd login");return e}async function downloadPackage(e){const{owner:t,packageName:n}=e,r=getApiBaseUrl(),s=await tryPublicDownload({baseUrl:r,owner:t,packageName:n});if(s)return s;const o=await getAuthKey();if(!o)throw new Error("Package not found. If this is a private package, please authenticate with `cmd login`");return tryAuthenticatedDownload({baseUrl:r,owner:t,packageName:n,apiKey:o})}async function tryPublicDownload(e){const{baseUrl:t,owner:n,packageName:r}=e,s=`${t}${St.INTERNAL.PROFILE.PACKAGE_DOWNLOAD.replace(":login",n).replace(":packageName",r)}`;let o;try{o=await fetch(s,{method:"GET"})}catch{return null}if(o.ok){const{data:e}=await o.json();return{type:e.type||"category",files:e.files||[],isPublic:!0}}if(404===o.status)return null;throwTrackedError({message:await parseApiError({response:o,fallback:`Failed to download taste package (${o.status})`}),label:"download_public_error",heading:"Failed to download taste package (public)",status:o.status})}async function tryAuthenticatedDownload(e){const{baseUrl:t,owner:n,packageName:r,apiKey:s}=e,o=`${t}${St.BETA.TASTE.PACKAGES.DOWNLOAD.replace(":namespace",n).replace(":packageName",r)}`,i=await fetch(o,{method:"GET",headers:{Authorization:`Bearer ${s}`}});if(i.ok){const{data:e}=await i.json();return{type:e.type||"category",files:e.files||[],isPublic:e.isPublic??!1}}if(404===i.status)return null;throwTrackedError({message:await parseApiError({response:i,fallback:"Failed to download taste package"}),label:"download_auth_error",heading:"Failed to download taste package (authenticated)",status:i.status})}async function fetchSinglePackage(e){try{return await getPackage3({category:e.name})}catch(t){const n=t instanceof Error?t:new Error(String(t));return trackError({error:sanitizeErrorForTelemetry({error:n,label:"download_package_error"}),context:{component:Br.TASTE_REMOTE_STORAGE,heading:"Failed to download package","package.name":e.name}}),console.warn(`Warning: Failed to download package '${e.name}': ${n.message}`),null}}async function getAllPackages3(){const e=await requireAuthKey(),t=`${getApiBaseUrl()}${St.BETA.TASTE.PACKAGES.LIST}`,n=await fetch(t,{method:"GET",headers:{Authorization:`Bearer ${e}`}});n.ok||throwTrackedError({message:await parseApiError({response:n,fallback:"Failed to list taste packages"}),label:"list_packages_error",heading:"Failed to list taste packages",status:n.status});const{data:r}=await n.json(),s=r.packages||[];if(0===s.length)return[];const o=[];for(let e=0;e<s.length;e+=5){const t=s.slice(e,e+5),n=await Promise.all(t.map(fetchSinglePackage));o.push(...n.filter(e=>null!==e))}return o}async function getPackage3(e){const{category:t}=e;let n;await requireAuthKey();try{n=await getAuthenticatedEntity()}catch(e){const n=e instanceof Error?e:new Error(String(e));throw dlog(`[Auth] getPackage: entity endpoint unavailable — ${n.message}`),trackError({error:sanitizeErrorForTelemetry({error:n,label:"get_entity_error"}),context:{component:Br.TASTE_REMOTE_STORAGE,heading:"getAuthenticatedEntity failed in getPackage"}}),new Error(`Could not resolve your account to fetch '${t}'. Check your connection and try again.`)}if(!n.success||!n.user?.userName)throw new Error("Failed to get authenticated user information");return downloadRemotePackage({owner:n.user.userName,packageName:t})}async function downloadRemotePackage(e){const{owner:t,packageName:n}=e,r=await downloadPackage({owner:t,packageName:n});if(!r)return null;const s=r.files||[];if(0===s.length)return null;const o=s.find(e=>"taste.md"===e.file);if(!o)throw new Error(`No taste.md file found in package '${n}'`);return{category:n,learnings:parseTasteContent(o.content),sourcePath:`remote:${n}`,isPublic:r.isPublic??!1}}async function writePackage3(e){const{pkg:t,owner:n,isPublic:r=!1}=e,s=await requireAuthKey(),o=await prepareUploadFormData({packageName:t.category,pkg:t,type:"category",isPublic:r}),i=`${getApiBaseUrl()}${St.BETA.TASTE.PACKAGES.UPLOAD.replace(":namespace",n)}`,a=await fetch(i,{method:"POST",headers:{Authorization:`Bearer ${s}`},body:o});a.ok||throwTrackedError({message:await parseApiError({response:a,fallback:"Failed to upload taste package"}),label:"upload_package_error",heading:"Failed to upload taste package",status:a.status}),await a.json()}async function writePackages(e){const{packages:t,projectName:n,owner:r,isPublic:s=!1}=e,o=await requireAuthKey(),i=await prepareMultiplePackagesUpload({pkgs:t,projectName:n,isPublic:s}),a=`${getApiBaseUrl()}${St.BETA.TASTE.PACKAGES.UPLOAD.replace(":namespace",r)}`,l=await fetch(a,{method:"POST",headers:{Authorization:`Bearer ${o}`},body:i});l.ok||throwTrackedError({message:await parseApiError({response:l,fallback:"Failed to upload taste packages"}),label:"upload_packages_error",heading:"Failed to upload taste packages",status:l.status,extra:{"package.count":t.length}}),await l.json()}async function listPackages2(){const e=await requireAuthKey(),t=`${getApiBaseUrl()}${St.BETA.TASTE.PACKAGES.LIST}`,n=await fetch(t,{method:"GET",headers:{Authorization:`Bearer ${e}`}});n.ok||throwTrackedError({message:await parseApiError({response:n,fallback:"Failed to list taste packages"}),label:"list_packages_error",heading:"Failed to list packages",status:n.status});const{data:r}=await n.json();return(r.packages||[]).map(e=>({category:e.name,learningCount:e.learningCount||0,lastUpdated:e.createdAt?new Date(e.createdAt):new Date,filePath:"",isPublic:e.isPublic??!1,starCount:e.starCount??0,downloadCount:e.downloadCount??0,type:e.type??"category"}))}async function list(e){const{location:t}=e;if("local-global"===t)return listPackages();if("remote-project"===t||"remote-user"===t)return listPackages2();if("local-project"===t){const e=getRootTasteFile({target:"local-project"}),t=await getAllPackages2();return Promise.all(t.map(async t=>{let n;if(t.sourcePath!==e)try{n=(await $.stat(t.sourcePath)).mtime}catch{}return{category:t.category,learningCount:t.learnings.length,lastUpdated:n,filePath:t.sourcePath}}))}throw new Error(`Invalid location: ${t}`)}function createListCommand(){return new Ae("list").alias("ls").option("-g, --global","List global packages").addOption(new xe("-l, --local","Use local server").hideHelp()).option("--remote","List remote packages").addOption(new xe("--staging","Use staging environment").hideHelp()).description(`List available packages ${Be.dim("(project, global, or remote)")}`).action(withErrorHandler(async e=>runList({options:e})))}__name(loadCategoryPackages2,"loadCategoryPackages"),__name(getAllPackages2,"getAllPackages"),__name(getPackage2,"getPackage"),__name(writePackage2,"writePackage"),__name(exists2,"exists"),Nt(),ts(),Nt(),__name(appendCategoryFile,"appendCategoryFile"),__name(prepareUploadFormData,"prepareUploadFormData"),__name(prepareMultiplePackagesUpload,"prepareMultiplePackagesUpload"),Ot(),Nt(),__name(parseLearningLine,"parseLearningLine"),__name(parseTasteContent,"parseTasteContent"),AC(),Vr(),Nt(),Qs(),Vr(),__name(parseApiError,"parseApiError"),__name(throwTrackedError,"throwTrackedError"),__name(requireAuthKey,"requireAuthKey"),Nt(),ts(),Qs(),Ot(),__name(downloadPackage,"downloadPackage"),__name(tryPublicDownload,"tryPublicDownload"),__name(tryAuthenticatedDownload,"tryAuthenticatedDownload"),$n(),__name(fetchSinglePackage,"fetchSinglePackage"),__name(getAllPackages3,"getAllPackages"),__name(getPackage3,"getPackage"),__name(downloadRemotePackage,"downloadRemotePackage"),__name(writePackage3,"writePackage"),__name(writePackages,"writePackages"),__name(listPackages2,"listPackages"),__name(list,"list"),__name(createListCommand,"createListCommand");var sP={remote:{location:"remote-project",name:"remote",subtitle:"commandcode.ai account"},global:{location:"local-global",name:"global",subtitle:"~/.commandcode/taste"},project:{location:"local-project",name:"project",subtitle:".commandcode/taste"}};function resolveStorage(e){return e.remote?sP.remote:e.global?sP.global:sP.project}function getPackageDisplayLength(e){let t=e.category.length;return e.isPublic&&(t+=9),e.isPublic&&e.starCount&&(t+=` ${be.star}${e.starCount}`.length),e.downloadCount&&(t+=` ${be.arrowDown}${e.downloadCount}`.length),t}function formatPackageLine({pkg:e,maxLen:t}){const n=" ".repeat(t-getPackageDisplayLength(e)+2),r=e.lastUpdated?getTimeAgo(e.lastUpdated):null,s=r?`, updated ${r}`:"";return` ${Be.white(e.category)}${e.isPublic?Be.green(" [public]"):""}${e.isPublic&&e.starCount?Be.yellow(` ${be.star}${e.starCount}`):""}${e.downloadCount?Be.gray(` ${be.arrowDown}${e.downloadCount}`):""}${n}${Be.dim.gray(`(${e.learningCount} learnings${s})`)}`}function validateListOptions(e){e.global&&e.remote&&exitWithError("Error: Cannot specify both --global and --remote flags")}async function fetchPackages({options:e}){const t=resolveStorage(e),n=e.remote?Ie(`Fetching ${t.name} packages`).start():null,r=await list({location:t.location});return n?.stop(),{packages:r,storage:t}}async function getStorageLabel({options:e,fallback:t}){if(!e.remote)return t;const n=await getUserName();return n?getProfileLink(n):t}function printPackageTable({packages:e,subtitle:t}){console.log(`\n${Z_} Packages`),console.log(`${Be.gray("⎿")} ${Be.dim(t)}\n`);const n=Math.max(...e.map(getPackageDisplayLength));let r=0;for(const t of e)r+=t.learningCount,console.log(formatPackageLine({pkg:t,maxLen:n}));console.log(Be.dim(`\nTotal: ${e.length} packages, ${r} learnings\n`))}async function runList({options:e}){console.log(""),validateListOptions(e);const{packages:t,storage:n}=await fetchPackages({options:e});0!==t.length?printPackageTable({packages:t,subtitle:await getStorageLabel({options:e,fallback:n.subtitle})}):console.log(Be.yellow(`No taste packages found in ${n.name}`))}async function fetchAllPackages(e){const{target:t}=e;return"local-project"===t?getAllPackages2():"local-global"===t?getAllPackages():getAllPackages3()}function handleOpenError(e){return e instanceof Error&&e.message.includes("$EDITOR environment variable")?{success:!1,error:getEditorSetupInstructions()}:{success:!1,error:e instanceof Error?e.message:String(e)}}async function readCategoryLineNumber(t){const{filePath:n,category:r}=t,s=await $.readFile(n,"utf-8");if("taste.md"===e.basename(n)&&e.basename(e.dirname(n))===r)return 1;const o=s.split("\n").findIndex(e=>e.trim().toLowerCase()===`# ${r.toLowerCase()}`);return o>=0?o+1:1}async function findCategoryLineNumber(e){try{return await readCategoryLineNumber(e)}catch{return 1}}async function openPackage(e){const{packageName:t,target:n}=e,r=(await fetchAllPackages({target:n})).find(e=>e.category===t);if(!r){let e="project";return"local-global"===n&&(e="global"),"remote-project"!==n&&"remote-user"!==n||(e="remote"),{success:!1,error:`Taste package '${t}' not found in ${e}`}}const s=r.sourcePath,o=await findCategoryLineNumber({filePath:s,category:t});return await et([{file:s,line:o}]),{success:!0,filePath:s,lineNumber:o}}__name(resolveStorage,"resolveStorage"),__name(getPackageDisplayLength,"getPackageDisplayLength"),__name(formatPackageLine,"formatPackageLine"),__name(validateListOptions,"validateListOptions"),__name(fetchPackages,"fetchPackages"),__name(getStorageLabel,"getStorageLabel"),__name(printPackageTable,"printPackageTable"),__name(runList,"runList"),Nt(),Nt(),__name(fetchAllPackages,"fetchAllPackages"),__name(handleOpenError,"handleOpenError"),__name(readCategoryLineNumber,"readCategoryLineNumber"),__name(findCategoryLineNumber,"findCategoryLineNumber"),__name(openPackage,"openPackage");var oP=new Set(["local-project","local-global","remote-project","remote-user"]);async function open7(e){const{package:t,target:n}=e;if(!oP.has(n))return{success:!1,error:`Invalid target: ${n}`};try{return await openPackage({packageName:t,target:n})}catch(e){return handleOpenError(e)}}function getEditorSetupInstructions(){const e=it.platform;if("win32"===e)return'Error: No default editor found\n\nTo permanently set your default editor, run one of these commands:\n\nCommand Prompt (as Administrator):\n setx EDITOR "code" # VS Code\n setx EDITOR "notepad" # Notepad\n setx EDITOR "vim" # Vim (if installed via WSL/Git Bash)\n\nPowerShell:\n [Environment]::SetEnvironmentVariable("EDITOR", "code", "User")\n\nThen restart your terminal.';const t="darwin"===e?"~/.zshrc":"~/.bashrc";return`Error: No default editor found\n\nTo permanently set your default editor, run one of these commands:\n echo 'export EDITOR="code"' >> ${t} # VS Code\n echo 'export EDITOR="vim"' >> ${t} # Vim\n echo 'export EDITOR="nano"' >> ${t} # Nano\n echo 'export EDITOR="subl"' >> ${t} # Sublime Text\n\nFor bash users ${"darwin"===e?"(or ~/.bash_profile for bash)":"(or ~/.zshrc for zsh)"}, replace ${t} with the appropriate file.\n\nThen restart your terminal or run: source ${t}`}function createOpenCommand(){return new Ae("open").argument("[package]","Taste package name, or owner/package to open in browser").option("-g, --global","Open taste package from global storage (~/.commandcode)").description(`Open a taste package in your editor ${Be.dim("(use owner/package to open in browser)")}`).action(withErrorHandler(async(e,t)=>runOpen({packageName:e,options:t})))}function validateOpenOptions(e){e||exitWithUsage({message:"Specify a taste package name to open",usage:["cmd taste open <package> open taste package in editor","cmd taste open <package> -g open global taste package in editor","cmd taste open owner/package open package page in browser"]})}async function runOpen({packageName:e,options:t}){console.log(""),validateOpenOptions(e);const n=parseOwnerPackage(e);n?await openInBrowser(n):await openInEditor3({packageName:e,options:t})}async function openInBrowser(e){const t=`https://commandcode.ai/${e.owner}/${e.packageName}`;await ie(t);const n=getPackageLink({owner:e.owner,packageName:e.packageName});console.log(`${Be.green(be.tick)} Opened ${n} in browser`)}async function openInEditor3({packageName:e,options:t}){const n=t.global?"local-global":"local-project",r=await open7({package:e,target:n});r.success||exitWithError(r.error??"Unknown error"),console.log(`${Be.green(be.tick)} Opened ${Be.green(`'${e}'`)} taste package from ${t.global?"global":"project"}`)}__name(open7,"open"),__name(getEditorSetupInstructions,"getEditorSetupInstructions"),__name(createOpenCommand,"createOpenCommand"),__name(validateOpenOptions,"validateOpenOptions"),__name(runOpen,"runOpen"),__name(openInBrowser,"openInBrowser"),__name(openInEditor3,"openInEditor"),Nt(),Nt(),Nt(),Nt();var iP=null,aP=!1;function setActiveSpinner(e){iP=e}function stopActiveSpinner(e){iP&&(iP.stop(e),iP=null)}function setPrompted(e){aP=e}function wasPrompted(){return aP}function beginPrompt(e,t){stopActiveSpinner(),Ee.intro(Be.dim(e)),t&&Ee.log.message(Be.dim(t)),setPrompted(!0)}function handleCancel(e){Ee.isCancel(e)&&(Ee.cancel("Operation cancelled"),process.exit(0))}function startStrategySpinner(e){if("skip"===e){const e=Ee.spinner();return e.start("Skipping"),void e.stop("Skipped")}const t="merge"===e?"Merging":"Overwriting",n="merge"===e?"Merged":"Overwritten",r=Ee.spinner();r.start(t),setActiveSpinner({stop:__name(e=>r.stop(e??n),"stop"),cancel:__name(e=>r.cancel(e),"cancel"),error:__name(e=>r.error(e),"error")})}async function promptMergeStrategy(e){const{packageName:t,owner:n,localPkg:r,remoteLearningsCount:s}=e,o="This package already exists locally";if(!process.stdout.isTTY||!process.stdin.isTTY)return stopActiveSpinner(o),setPrompted(!0),Ee.log.warn("Non-interactive terminal detected, using default merge strategy"),"merge";beginPrompt(`Pulling ${Be.green(`'${t}'`)} from ${n}`,o),Ee.log.message(`Local: ${r.learnings.length} learnings\nRemote: ${s} learnings ${Be.dim(`(from ${n})`)}`);const i=await Ee.select({message:"What would you like to do?",options:[{value:"merge",label:"Merge",hint:"Combine both versions intelligently (default)"},{value:"overwrite",label:"Overwrite",hint:`Replace local with remote (${r.learnings.length} → ${s} learnings)`},{value:"skip",label:"Skip",hint:"Keep local version, ignore remote"}],initialValue:"merge"});handleCancel(i);const a=i;return startStrategySpinner(a),a}async function promptGlobalPushStrategy(e){const{packageName:t,localLearningsCount:n,globalPkg:r}=e,s="This package already exists in global storage";if(!process.stdout.isTTY||!process.stdin.isTTY)return stopActiveSpinner(s),setPrompted(!0),Ee.log.warn("Non-interactive terminal detected, using default merge strategy"),"merge";beginPrompt(`Pushing ${Be.green(`'${t}'`)} to global`,s),Ee.log.message(`Local: ${n} learnings\nGlobal: ${r.learnings.length} learnings`);const o=await Ee.select({message:"What would you like to do?",options:[{value:"merge",label:"Merge",hint:"Combine both versions intelligently (default)"},{value:"overwrite",label:"Overwrite",hint:`Replace global with local (${r.learnings.length} → ${n} learnings)`},{value:"skip",label:"Skip",hint:"Keep global version, cancel push"}],initialValue:"merge"});handleCancel(o);const i=o;return startStrategySpinner(i),i}async function promptGlobalPullStrategy(e){const{packageName:t,localPkg:n,globalLearningsCount:r}=e,s="This package already exists locally";if(!process.stdout.isTTY||!process.stdin.isTTY)return stopActiveSpinner(s),setPrompted(!0),Ee.log.warn("Non-interactive terminal detected, using default merge strategy"),"merge";beginPrompt(`Pulling ${Be.green(`'${t}'`)} from global`,s),Ee.log.message(`Local: ${n.learnings.length} learnings\nGlobal: ${r} learnings`);const o=await Ee.select({message:"What would you like to do?",options:[{value:"merge",label:"Merge",hint:"Combine both versions intelligently (default)"},{value:"overwrite",label:"Overwrite",hint:`Replace local with global (${n.learnings.length} → ${r} learnings)`},{value:"skip",label:"Skip",hint:"Keep local version, ignore global"}],initialValue:"merge"});handleCancel(o);const i=o;return startStrategySpinner(i),i}async function promptTypeMismatchStrategy(e){const{packageName:t,owner:n,localLearningsCount:r,remoteLearningsCount:s}=e,o=`Pushing local project taste to individual package '${t}'`;if(!process.stdout.isTTY||!process.stdin.isTTY)return stopActiveSpinner(o),setPrompted(!0),Ee.log.warn("Non-interactive terminal detected, skipping push"),"skip";const i=ot(`commandcode.ai/${n}/${t}`,`https://commandcode.ai/${n}/${t}`,{fallback:__name((e,t)=>t,"fallback")});beginPrompt(`Pushing ${Be.green(`'${t}'`)} to ${n}`,o),Ee.log.message(`Local: ${t} (${r} learnings)\nRemote: ${t} (${s} learnings) in ${n}`),Ee.log.info(`Current package: ${Be.cyan(i)} ${Be.dim("(review)")}`);const a=await Ee.select({message:"What would you like to do?",options:[{value:"skip",label:"Skip",hint:"Keep remote version, cancel push"},{value:"overwrite",label:"Overwrite",hint:"Replace individual remote package with local project taste"}],initialValue:"skip"});handleCancel(a);const l=a;return startStrategySpinner(l),l}async function promptSameTypeStrategy(e){const{packageName:t,owner:n,localLearningsCount:r,remoteLearningsCount:s}=e,o=`This package already exists in ${n}`;if(!process.stdout.isTTY||!process.stdin.isTTY)return stopActiveSpinner(o),setPrompted(!0),Ee.log.warn("Non-interactive terminal detected, skipping push"),"skip";const i=ot(`commandcode.ai/${n}/${t}`,`https://commandcode.ai/${n}/${t}`,{fallback:__name((e,t)=>t,"fallback")});beginPrompt(`Pushing ${Be.green(`'${t}'`)} to ${n}`,o),Ee.log.message(`Local: ${r} learnings\nRemote: ${s} learnings`),Ee.log.info(`Current package: ${Be.cyan(i)} ${Be.dim("(review)")}`);const a=await Ee.select({message:"What would you like to do?",options:[{value:"skip",label:"Skip",hint:"Keep remote version, cancel push"},{value:"overwrite",label:"Overwrite",hint:`Replace remote with local (${s} → ${r} learnings)`}],initialValue:"skip"});handleCancel(a);const l=a;return startStrategySpinner(l),l}function mergeSingleLearning(e,t,n,r){const s=t.get(e.text);return s?e.confidence>s.confidence?(n.set(e.text,e),void r.updated++):void r.unchanged++:(n.set(e.text,e),void r.added++)}function mergePackages(e){const{source:t,target:n}=e,r={added:0,updated:0,unchanged:0},s=new Map(n.map(e=>[e.text,e])),o=new Map(s);for(const e of t)mergeSingleLearning(e,s,o,r);const i=new Set(t.map(e=>e.text)),a=n.filter(e=>!i.has(e.text)).length;return r.unchanged+=a,{merged:Array.from(o.values()),details:r}}function validateSinglePackage(e,t){const n=validateTasteFile({content:formatPackage({pkg:e}),filePath:`${e.category}/taste.md`});if(!n.valid){const r=formatValidationIssues({result:n,verbose:!0});return{pkg:e.category,error:`Validation failed for taste package in ${t}:\n${r}`}}return n.issues.filter(e=>"warning"===e.severity).length>0&&(console.warn(`\nWarning: Taste package '${e.category}' in ${t} has validation warnings:\n`),console.warn(formatValidationIssues({result:n,verbose:!0})+"\n")),null}function validateSingleRemoteFile(e,t){const n=validateTasteFile({content:e.content,filePath:e.file});if(!n.valid){const r=formatValidationIssues({result:n,verbose:!0});return{pkg:t,error:`Validation failed for ${e.file}:\n${r}`}}return n.issues.filter(e=>"warning"===e.severity).length>0&&(console.warn(`\nWarning: File '${e.file}' has validation warnings:\n`),console.warn(formatValidationIssues({result:n,verbose:!0})+"\n")),null}function validatePackages(e){const{packages:t,label:n}=e;return t.map(e=>validateSinglePackage(e,n)).filter(e=>null!==e)}function validateRemoteFiles(e){const{files:t,packageName:n}=e;return t.map(e=>validateSingleRemoteFile(e,n)).filter(e=>null!==e)}function mergeOrKeep(e){const{source:t,existing:n}=e;if(!n)return{pkg:t,details:{added:t.learnings.length,updated:0,unchanged:0}};const r=mergePackages({source:t.learnings,target:n.learnings});return{pkg:{...t,learnings:r.merged},details:r.details}}async function resolveRemotePullStrategy(e){const{flagStrategy:t,overwrite:n,existingPkg:r,tastePkg:s,owner:o}=e;return"skip"===t?r?"skip":"merge":"merge"===t?"merge":"overwrite"===t||n?"overwrite":r?promptMergeStrategy({packageName:s.category,owner:o,localPkg:r,remoteLearningsCount:s.learnings.length}):"merge"}async function executePackageStrategy(e){const{tastePkg:t,owner:n,overwrite:r,flagStrategy:s,result:o}=e,i=await getPackage2({category:t.category}),a=await resolveRemotePullStrategy({flagStrategy:s,overwrite:r,existingPkg:i,tastePkg:t,owner:n});if("skip"===a)return void o.skipped?.push(t.category);if("overwrite"===a&&(await writePackage2({pkg:t}),o.packagesPulled.push(t.category),o.overwritten.push(t.category)),"merge"===a){const{pkg:e,details:n}=mergeOrKeep({source:t,existing:i});await writePackage2({pkg:e}),o.packagesPulled.push(t.category),o.mergeDetails[t.category]=n}const l=getCategoryTasteFile({target:"local-project",category:t.category});o.filePaths[t.category]=l}async function processPackage(e){const{tastePkg:t,result:n}=e;try{await executePackageStrategy(e)}catch(e){n.success=!1,n.errors.push({pkg:t.category,error:e instanceof Error?e.message:String(e)})}}async function pullProjectPackage(e){const{files:t,packageName:n,owner:r,overwrite:s,flagStrategy:o,result:i}=e,a=t.find(e=>"taste.md"===e.file);if(a){const e=parsePackages({content:a.content,sourcePath:`remote:${n}/taste.md`});for(const t of e)await processPackage({tastePkg:t,owner:r,overwrite:s,flagStrategy:o,result:i})}const l=t.filter(e=>"taste.md"!==e.file);for(const e of l){const t=e.file.replace("/taste.md",""),a={category:t,learnings:parseTasteContent(e.content),sourcePath:`remote:${n}/${t}`};await processPackage({tastePkg:a,owner:r,overwrite:s,flagStrategy:o,result:i})}}async function pullCategoryPackage(e){const{files:t,packageName:n,owner:r,overwrite:s,flagStrategy:o,result:i}=e,a=t.find(e=>"taste.md"===e.file);if(!a)return i.success=!1,void i.errors.push({pkg:n,error:"No taste.md file found in category package"});const l={category:n,learnings:parseTasteContent(a.content),sourcePath:`remote:${n}`};await processPackage({tastePkg:l,owner:r,overwrite:s,flagStrategy:o,result:i})}__name(setActiveSpinner,"setActiveSpinner"),__name(stopActiveSpinner,"stopActiveSpinner"),__name(setPrompted,"setPrompted"),__name(wasPrompted,"wasPrompted"),__name(beginPrompt,"beginPrompt"),__name(handleCancel,"handleCancel"),__name(startStrategySpinner,"startStrategySpinner"),__name(promptMergeStrategy,"promptMergeStrategy"),__name(promptGlobalPushStrategy,"promptGlobalPushStrategy"),__name(promptGlobalPullStrategy,"promptGlobalPullStrategy"),__name(promptTypeMismatchStrategy,"promptTypeMismatchStrategy"),__name(promptSameTypeStrategy,"promptSameTypeStrategy"),Nt(),Nt(),__name(mergeSingleLearning,"mergeSingleLearning"),__name(mergePackages,"mergePackages"),__name(validateSinglePackage,"validateSinglePackage"),__name(validateSingleRemoteFile,"validateSingleRemoteFile"),__name(validatePackages,"validatePackages"),__name(validateRemoteFiles,"validateRemoteFiles"),__name(mergeOrKeep,"mergeOrKeep"),Nt(),__name(resolveRemotePullStrategy,"resolveRemotePullStrategy"),__name(executePackageStrategy,"executePackageStrategy"),__name(processPackage,"processPackage"),__name(pullProjectPackage,"pullProjectPackage"),__name(pullCategoryPackage,"pullCategoryPackage");var lP=__name(({pkg:e,error:t})=>({success:!1,packagesPulled:[],errors:[{pkg:e,error:t}],mergeDetails:{},overwritten:[],filePaths:{}}),"fail"),cP=__name(()=>({success:!0,packagesPulled:[],skipped:[],errors:[],mergeDetails:{},overwritten:[],filePaths:{}}),"emptyResult"),uP=__name(e=>"local-global"===e?"global":"remote-project"===e?"remote project":"remote-user"===e?"remote":"source","sourceName");async function resolvePullStrategy(e){const{flagStrategy:t,overwrite:n,existingPkg:r,source:s,tastePkg:o}=e;return"skip"===t?r?"skip":"merge":"merge"===t?"merge":"overwrite"===t||n?"overwrite":r&&"local-global"===s?promptGlobalPullStrategy({packageName:o.category,localPkg:r,globalLearningsCount:o.learnings.length}):"merge"}async function executePullStrategy(e){const{tastePkg:t,source:n,flagStrategy:r,overwrite:s,result:o}=e,i=await getPackage2({category:t.category}),a=await resolvePullStrategy({flagStrategy:r,overwrite:s,existingPkg:i,source:n,tastePkg:t});if("skip"===a)return void o.skipped.push(t.category);if("overwrite"===a&&(await writePackage2({pkg:t}),o.packagesPulled.push(t.category),o.overwritten.push(t.category)),"merge"===a){const{pkg:e,details:n}=mergeOrKeep({source:t,existing:i});await writePackage2({pkg:e}),o.packagesPulled.push(t.category),o.mergeDetails[t.category]=n}const l=getCategoryTasteFile({target:"local-project",category:t.category});o.filePaths[t.category]=l}async function pullSinglePackage(e){const{tastePkg:t,result:n}=e;try{await executePullStrategy(e)}catch(e){n.success=!1,n.errors.push({pkg:t.category,error:e instanceof Error?e.message:String(e)})}}async function pull(e){const{packages:t,source:n,overwrite:r=!1,strategy:s}=e;if("local-global"!==n&&"remote-project"!==n&&"remote-user"!==n)return lP({pkg:"all",error:`Invalid source: ${n}`});const o=uP(n);let i;try{i="local-global"===n?await getAllPackages():await getAllPackages3()}catch(e){return lP({pkg:"all",error:e instanceof Error?e.message:String(e)})}if(0===i.length)return lP({pkg:"all",error:`No taste packages found in ${o}`});const a=validatePackages({packages:i,label:o});if(a.length>0)return{success:!1,packagesPulled:[],errors:[...a],mergeDetails:{},overwritten:[],filePaths:{}};const l=t.length>0?i.filter(e=>t.includes(e.category)):i;if(t.length>0&&0===l.length)return{success:!1,packagesPulled:[],errors:t.map(e=>({pkg:e,error:`Taste package not found in ${o}`})),mergeDetails:{},overwritten:[],filePaths:{}};const u=cP();for(const e of l)await pullSinglePackage({tastePkg:e,source:n,flagStrategy:s,overwrite:r,result:u});return u}async function executePullRemote(e){const{owner:t,packageName:n,overwrite:r,flagStrategy:s,result:o}=e,i=await downloadPackage({owner:t,packageName:n});if(!i)return lP({pkg:n,error:"Taste package not found in remote"});const{type:a,files:l}=i,u=validateRemoteFiles({files:l,packageName:n});if(u.length>0)return{success:!1,packagesPulled:[],errors:[...u],mergeDetails:{},overwritten:[],filePaths:{}};const d={files:l,packageName:n,owner:t,overwrite:r,flagStrategy:s,result:o};return"project"===a?(await pullProjectPackage(d),o):(await pullCategoryPackage(d),o)}async function pullRemote(e){const{owner:t,packageName:n,overwrite:r=!1,strategy:s}=e,o=cP();try{return await executePullRemote({owner:t,packageName:n,overwrite:r,flagStrategy:s,result:o})}catch(e){return lP({pkg:n,error:e instanceof Error?e.message:String(e)})}}function logResult(e){if(wasPrompted())return Ee.outro(e),void setPrompted(!1);console.log(e)}function buildPullMessage(e){const{pkgName:t,sourceName:n,filePath:r,options:s,mergeDetails:o}=e,i=wasPrompted()?"":`${be.tick} `,a=r?Be.dim(`\n ${shortenPath(r)}`):"";if(s.overwrite)return`${Be.green(i)}Replaced ${Be.green(`'${t}'`)} taste package in project`+a;if(o){const e=formatMergeParts(o);return`${Be.green(i)}Pulled ${Be.green(`'${t}'`)} taste package from ${n} ${Be.gray(`(${e.join(", ")})`)}`+a}return`${Be.green(i)}Pulled ${Be.green(`'${t}'`)} taste package from ${n}`+a}function logPullSingleSuccess(e){const{result:t,sourceName:n,options:r}=e;if(1!==t.packagesPulled.length)return!1;const s=t.packagesPulled[0],o=t.filePaths?.[s],i=t.mergeDetails?.[s];return logResult(buildPullMessage({pkgName:s,sourceName:n,filePath:o,options:r,mergeDetails:i})),!r.overwrite&&!!i&&hasMergeConflictRisk(i)}function logPullSummary(e){const{result:t,sourceName:n}=e,r=t.overwritten??[],s=t.skipped??[],o=t.packagesPulled.filter(e=>!r.includes(e)),i=t.packagesPulled.length+s.length,a=`${i} ${1===i?"package":"packages"}`,l=[];return o.length>0&&l.push(wrapLine(`${Be.green("Pulled")} (${o.length}) ${o.join(", ")}`,wasPrompted()?4:0)),r.length>0&&l.push(wrapLine(`${Be.yellow("Overwritten")} (${r.length}) ${r.join(", ")}`,wasPrompted()?4:0)),s.length>0&&l.push(wrapLine(`${Be.dim("Skipped")} (${s.length}) ${Be.dim(s.join(", "))}`,wasPrompted()?4:0)),wasPrompted()?(l.length>0&&Ee.log.message(l.join("\n")),Ee.outro(`${a} from ${n}`),setPrompted(!1),hasMergeConflictRiskInRecord(t.mergeDetails??{})):(console.log(`${Be.green(be.tick)} ${a} from ${n}`),l.length>0&&console.log(l.join("\n")),hasMergeConflictRiskInRecord(t.mergeDetails??{}))}function logPullSuccess(e){const{result:t,sourceName:n,options:r}=e,s=t.skipped??[];t.packagesPulled.length+s.length>1?logPullSummary({result:t,sourceName:n})&&logMergeReviewTip():s.length>0?logResult(Be.yellow(`Skipped '${s[0]}' — kept local version`)):logPullSingleSuccess({result:t,sourceName:n,options:r})&&logMergeReviewTip()}function createPullCommand(){return new Ae("pull").argument("[package]","Taste package name, or owner/package to pull from remote").option("-g, --global","Pull taste package from global storage (~/.commandcode)").addOption(new xe("--local","Use local server").hideHelp()).option("--remote","Pull taste package from commandcode.ai remote").option("--all","Pull all taste packages from global").option("--overwrite","Replace local package without prompting").option("--skip","Keep local package, skip conflicting pull").option("--merge","Auto-merge conflicting learnings without prompting").addOption(new xe("--staging","Use staging environment").hideHelp()).description(`Pull taste packages from remote or global into the project ${Be.dim("(prompts on conflicts)")}`).action(withErrorHandler(async(e,t)=>{setPrompted(!1);const n=resolveRemoteDefault(t),{result:r,owner:s}=await runPull({packageName:e,options:n});r.success||handleResultErrors(r.errors),logPullSuccess({result:r,sourceName:n.remote?s??"remote":"global",options:n})}))}function validatePullOptions(e){const{packageName:t,options:n}=e;n.global&&n.remote&&exitWithError("--global and --remote are mutually exclusive — pick one source"),n.remote&&n.all&&exitWithUsage({message:"--all is not supported for remote pull — specify a package instead",usage:["cmd taste pull <owner>/<package> pull a taste package from remote"]}),n.remote&&!t&&exitWithUsage({message:"Specify a taste package to pull from remote",usage:["cmd taste pull <owner>/<package> pull a taste package from remote","cmd taste pull <package> -g pull a taste package from global","cmd taste pull --all -g pull all taste packages from global"]}),n.remote&&t&&!t.includes("/")&&exitWithUsage({message:`Remote pull requires owner/package format — got '${t}'`,usage:["cmd taste pull <owner>/<package> e.g. cmd taste pull ahmadawais/code-style"]}),t||n.all||exitWithUsage({message:"Specify a taste package name or use --all to pull everything",usage:["cmd taste pull <owner>/<package> pull a taste package from remote","cmd taste pull <package> -g pull a taste package from global","cmd taste pull --all -g pull all taste packages from global"]}),t&&n.all&&exitWithError("Use either a package name or --all, not both"),resolveConflictStrategy(n)}async function runPull(e){const{packageName:t,options:n}=e;console.log("");const r=resolveRemoteDefault(n);validatePullOptions({packageName:t,options:r});const s=resolveConflictStrategy(r);return r.remote&&t?pullRemoteSingle({packageName:t,options:r,strategy:s}):pullGlobal({packageName:t,options:r,strategy:s})}async function pullRemoteSingle(e){const{packageName:t,options:n,strategy:r}=e,s=parseOwnerPackage(t);s||exitWithError("Invalid format — use owner/package (e.g. ahmadawais/code-style)"),setActiveSpinner(Ie("Pulling taste package").start());const o=await pullRemote({owner:s.owner,packageName:s.packageName,overwrite:n.overwrite,strategy:r});return stopActiveSpinner(),{result:o,owner:s.owner}}async function pullGlobal(e){const{packageName:t,options:n,strategy:r}=e;setActiveSpinner(Ie("Pulling taste package").start());const s=n.all||!t?[]:[t],o=await pull({packages:s,source:"local-global",overwrite:n.overwrite,strategy:r});return stopActiveSpinner(),{result:o}}async function fetchUserNamespaces(){const e=getApiBaseUrl(),t=new Vb({baseUrl:e}),n=await t.get({endpoint:St.ALPHA.NAMESPACES});if(!n.success)throw new Error("Failed to fetch namespaces");if("org"===n.type)return{userName:n.org.login,orgs:[]};const r=n.orgs.map(e=>({id:e.id,login:e.login,name:e.name}));return{userName:n.user.userName,orgs:r}}function logResult2(e){if(wasPrompted())return Ee.outro(e),void setPrompted(!1);console.log(e)}function logPushAllSuccess(t){const{result:n,options:r}=t;if(!r.all)return!1;if(0===n.packagesPushed.length){const e=n.skipped?.length??0;if(e>0){const t=wasPrompted()?"":`${be.tick} `,n=`${e} ${1===e?"package":"packages"}`;logResult2(`${Be.green(t)}Skipped ${n}`)}return!1}const s=n.packagesPushed.length,o=`${s} ${1===s?"package":"packages"}`,i=n.filePaths?.[n.packagesPushed[0]],a=r.global&&i?shortenPath(e.dirname(e.dirname(i))):i,l=wasPrompted()?"":`${be.tick} `;if(!a)return logResult2(`${Be.green(l)}Pushed ${o} to remote`),!1;if(r.overwrite||Boolean(n.overwritten?.length)){let e=0;if(n.mergeDetails)for(const t of Object.values(n.mergeDetails))e+=t.updated??0;const t=e>0?` ${Be.gray(`(${e} ${1===e?"learning":"learnings"} replaced)`)}`:"";return logResult2(`${Be.green(l)}Replaced ${o} in ${a}${t}`),!1}if(!n.mergeDetails||0===Object.keys(n.mergeDetails).length)return logResult2(`${Be.green(l)}Pushed ${o} to ${a}`),!1;let u=0,d=0,m=0;for(const e of Object.values(n.mergeDetails))u+=e.added??0,d+=e.updated??0,m+=e.unchanged??0;const p=formatMergeParts({added:u,updated:d,unchanged:m}),g=p.length>0?` ${Be.gray(`(${p.join(", ")})`)}`:"";return logResult2(`${Be.green(l)}Pushed ${o} to ${a}${g}`),(u>0||d>0)&&m>0}function logPushSingleSuccess(e){const{result:t,options:n}=e;if(n.all)return!1;if(1!==t.packagesPushed.length)return!1;const r=t.packagesPushed[0],s=t.filePaths?.[r],o=n.remote&&s,i=o?s:"global",a=wasPrompted()?"":`${be.tick} `,l=!o&&s?Be.dim(`\n ${shortenPath(s)}`):"";if(n.overwrite)return logResult2(`${Be.green(a)}Replaced ${Be.green(`'${r}'`)} taste package in ${i}`+l),!1;if(t.mergeDetails?.[r]){const e=t.mergeDetails[r],n=formatMergeParts(e);return logResult2(`${Be.green(a)}Pushed ${Be.green(`'${r}'`)} taste package to ${i} ${Be.gray(`(${n.join(", ")})`)}`+l),hasMergeConflictRisk(e)}return logResult2(`${Be.green(a)}Pushed ${Be.green(`'${r}'`)} taste package to ${i}`+l),!1}function logPushMultiSuccess(e){const{result:t,options:n}=e;if(n.all)return!1;if(t.packagesPushed.length<=1)return!1;const r=n.remote?"remote":"global",s=wasPrompted()?"":`${be.tick} `;return logResult2(wrapLine(`${Be.green(s)}Pushed ${Be.green(t.packagesPushed.length)} taste packages ${Be.green(`(${t.packagesPushed.join(", ")})`)} to ${r}`)),!(n.overwrite||!t.mergeDetails)&&hasMergeConflictRiskInRecord(t.mergeDetails)}function logPushUrls(e){const{result:t,options:n}=e;if(!n.remote||!t.filePaths)return;const r=new Set;for(const e of t.packagesPushed){const n=t.filePaths[e];if(!n||!n.includes("/"))continue;const[s,o]=n.split("/");if(!s||!o)continue;const i=getPackageLink({owner:s,packageName:o});r.has(i)||(r.add(i),console.log(Be.gray(` ${i}`)))}}function logConflictSummary(e){const{result:t}=e,n=t.overwritten??[],r=t.skipped??[],s=t.packagesPushed.filter(e=>!n.includes(e)),o=t.packagesPushed.length+r.length,i=[];s.length>0&&i.push(wrapLine(`${Be.green("Merged")} (${s.length}) ${s.join(", ")}`,4)),n.length>0&&i.push(wrapLine(`${Be.yellow("Overwritten")} (${n.length}) ${n.join(", ")}`,4)),r.length>0&&i.push(wrapLine(`${Be.dim("Skipped")} (${r.length}) ${Be.dim(r.join(", "))}`,4)),i.length>0&&Ee.log.message(i.join("\n"));const a=`${o} ${1===o?"package":"packages"}`;Ee.outro(a)}function logPushBreakdown(e){const t=e.overwritten??[],n=e.skipped??[];if(0===n.length&&0===t.length)return;const r=e.packagesPushed.filter(e=>!t.includes(e)),s=[];r.length>0&&s.push(wrapLine(`${Be.green("Pushed")} (${r.length}) ${r.join(", ")}`)),t.length>0&&s.push(wrapLine(`${Be.yellow("Overwritten")} (${t.length}) ${t.join(", ")}`)),n.length>0&&s.push(wrapLine(`${Be.dim("Skipped")} (${n.length}) ${Be.dim(n.join(", "))}`)),s.length>0&&console.log(s.join("\n"))}function logPushSuccess(e){const{result:t,options:n}=e;if(wasPrompted())return setPrompted(!1),logConflictSummary({result:t}),void logPushUrls({result:t,options:n});const r=logPushAllSuccess({result:t,options:n})||logPushSingleSuccess({result:t,options:n})||logPushMultiSuccess({result:t,options:n});n.all&&logPushBreakdown(t),logPushUrls({result:t,options:n}),r&&logMergeReviewTip()}__name(resolvePullStrategy,"resolvePullStrategy"),__name(executePullStrategy,"executePullStrategy"),__name(pullSinglePackage,"pullSinglePackage"),__name(pull,"pull"),__name(executePullRemote,"executePullRemote"),__name(pullRemote,"pullRemote"),Nt(),__name(logResult,"logResult"),__name(buildPullMessage,"buildPullMessage"),__name(logPullSingleSuccess,"logPullSingleSuccess"),__name(logPullSummary,"logPullSummary"),__name(logPullSuccess,"logPullSuccess"),__name(createPullCommand,"createPullCommand"),__name(validatePullOptions,"validatePullOptions"),__name(runPull,"runPull"),__name(pullRemoteSingle,"pullRemoteSingle"),__name(pullGlobal,"pullGlobal"),Nt(),$n(),Nt(),ts(),bE(),Ot(),__name(fetchUserNamespaces,"fetchUserNamespaces"),Nt(),__name(logResult2,"logResult"),__name(logPushAllSuccess,"logPushAllSuccess"),__name(logPushSingleSuccess,"logPushSingleSuccess"),__name(logPushMultiSuccess,"logPushMultiSuccess"),__name(logPushUrls,"logPushUrls"),__name(logConflictSummary,"logConflictSummary"),__name(logPushBreakdown,"logPushBreakdown"),__name(logPushSuccess,"logPushSuccess"),Nt(),AC(),Nt();var dP=__name(({pkg:e,error:t})=>({success:!1,packagesPushed:[],skipped:[],errors:[{pkg:e,error:t}],mergeDetails:{},overwritten:[],filePaths:{}}),"fail"),mP=__name(e=>e.reduce((e,t)=>t.file.endsWith("taste.md")?e+parseTasteContent(t.content).length:e,0),"countRemoteLearnings");async function resolvePushAllStrategy(e){const{flagStrategy:t,overwrite:n,existingProject:r,packagesToPush:s,projectName:o,owner:i}=e;if("skip"===t)return"skip";if("overwrite"===t||n)return"overwrite";if("merge"===t)return"overwrite";if(!r)return"overwrite";const a=r.type??"category",l=s.reduce((e,t)=>e+t.learnings.length,0),u=mP(r.files);return"project"!==a?promptTypeMismatchStrategy({packageName:o,owner:i,localLearningsCount:l,remoteLearningsCount:u}):promptSameTypeStrategy({packageName:o,owner:i,localLearningsCount:l,remoteLearningsCount:u})}async function executePushAllRemote(t){const{packagesToPush:n,owner:r,overwrite:s,isPublic:o,isPublicExplicitlySet:i,flagStrategy:a}=t,l=e.basename(process.cwd()),u={success:!0,packagesPushed:[],skipped:[],errors:[],mergeDetails:{},overwritten:[],filePaths:{}},d=await downloadPackage({owner:r,packageName:l});if("skip"===await resolvePushAllStrategy({flagStrategy:a,overwrite:s,existingProject:d,packagesToPush:n,projectName:l,owner:r}))return u.skipped.push(...n.map(e=>e.category)),u;await writePackages({packages:n,projectName:l,owner:r,isPublic:i?o:d?.isPublic??!1});for(const e of n)u.packagesPushed.push(e.category),u.filePaths[e.category]=`${r}/${l}`,u.mergeDetails[e.category]={added:e.learnings.length,updated:0,unchanged:0};return d&&u.overwritten.push(...n.map(e=>e.category)),u}async function pushAllRemote(e){try{return await executePushAllRemote(e)}catch(e){return dP({pkg:"all",error:e instanceof Error?e.message:String(e)})}}__name(resolvePushAllStrategy,"resolvePushAllStrategy"),__name(executePushAllRemote,"executePushAllRemote"),__name(pushAllRemote,"pushAllRemote");var pP=__name(({pkg:e,error:t})=>({success:!1,packagesPushed:[],skipped:[],errors:[{pkg:e,error:t}],mergeDetails:{},overwritten:[],filePaths:{}}),"fail"),gP=__name(()=>({success:!0,packagesPushed:[],skipped:[],errors:[],mergeDetails:{},overwritten:[],filePaths:{}}),"emptyResult");async function writePkg(e){const{pkg:t,target:n,owner:r,isPublic:s}=e;if("local-global"!==n){if(!r)throw new Error("Failed to get owner for remote push");await writePackage3({pkg:t,owner:r,isPublic:s})}else await writePackage({pkg:t})}__name(writePkg,"writePkg");var hP=__name(e=>{const{target:t,category:n,owner:r}=e;return"local-global"===t?getCategoryTasteFile({target:"local-global",category:n}):"remote-project"!==t&&"remote-user"!==t||!r?void 0:`${r}/${n}`},"getDestPath");async function getUserOwner(){try{const e=await getAuthenticatedEntity();if(e.success&&e.user?.userName)return e.user.userName}catch{}}async function resolveSinglePushStrategy(e){const{flagStrategy:t,overwrite:n,existingPkg:r,target:s,tastePkg:o}=e;return"skip"===t?r?"skip":"merge":"merge"===t?"merge":"overwrite"===t||n?"overwrite":r&&"local-global"===s?promptGlobalPushStrategy({packageName:o.category,localLearningsCount:o.learnings.length,globalPkg:r}):"merge"}async function executePushStrategy(e){const{tastePkg:t,target:n,flagStrategy:r,overwrite:s,userOwner:o,isPublic:i,result:a}=e,l="local-global"===n?await getPackage({category:t.category}):await getPackage3({category:t.category}),u=await resolveSinglePushStrategy({flagStrategy:r,overwrite:s,existingPkg:l,target:n,tastePkg:t});if("skip"===u)return void a.skipped.push(t.category);if("overwrite"===u&&(await writePkg({pkg:t,target:n,owner:o,isPublic:i}),a.packagesPushed.push(t.category),a.overwritten.push(t.category),a.mergeDetails[t.category]={added:0,updated:t.learnings.length,unchanged:0}),"merge"===u){const{pkg:e,details:r}=mergeOrKeep({source:t,existing:l});await writePkg({pkg:e,target:n,owner:o,isPublic:i}),a.packagesPushed.push(t.category),a.mergeDetails[t.category]=r}const d=hP({target:n,category:t.category,owner:o});d&&(a.filePaths[t.category]=d)}async function pushSinglePackage(e){const{tastePkg:t,result:n}=e;try{await executePushStrategy(e)}catch(e){n.success=!1,n.errors.push({pkg:t.category,error:e instanceof Error?e.message:String(e)})}}async function push(e){const t=void 0!==e.isPublic,{packages:n,target:r,overwrite:s=!1,isPublic:o=!1,strategy:i}=e;if(!exists2())return pP({pkg:"all",error:"No taste directory found in project"});const a=await getAllPackages2();if(0===a.length)return pP({pkg:"all",error:"No taste packages found in project"});const l=validatePackages({packages:a,label:"project"});if(l.length>0)return{success:!1,packagesPushed:[],skipped:[],errors:[...l],mergeDetails:{},overwritten:[],filePaths:{}};const u=n.length>0?a.filter(e=>n.includes(e.category)):a;if(n.length>0&&0===u.length)return{success:!1,packagesPushed:[],skipped:[],errors:n.map(e=>({pkg:e,error:"Taste package not found in project"})),mergeDetails:{},overwritten:[],filePaths:{}};const d="remote-project"===r||"remote-user"===r?e.owner??await getUserOwner():void 0;if("remote-project"===r&&0===n.length)return d?pushAllRemote({packagesToPush:u,owner:d,overwrite:s,isPublic:o,isPublicExplicitlySet:t,flagStrategy:i}):pP({pkg:"all",error:"Failed to get owner for remote push"});if("local-global"!==r&&"remote-project"!==r&&"remote-user"!==r)return pP({pkg:"all",error:`Invalid target: ${r}`});const m=gP();for(const e of u)await pushSinglePackage({tastePkg:e,target:r,flagStrategy:i,overwrite:s,userOwner:d,isPublic:o,result:m});return m}async function executeRemotePush(e){const t=void 0!==e.isPublic,{owner:n,packageName:r,overwrite:s=!1,isPublic:o=!1,strategy:i}=e,a=await getPackage2({category:r});if(!a)return pP({pkg:r,error:`Taste package '${r}' not found in local project`});const l=validateTasteFile({content:formatPackage({pkg:a}),filePath:`${a.category}/taste.md`});if(!l.valid){const e=formatValidationIssues({result:l,verbose:!0});return pP({pkg:r,error:`Validation failed:\n${e}`})}l.issues.filter(e=>"warning"===e.severity).length>0&&(console.warn(`\nWarning: Taste package '${r}' has validation warnings:\n`),console.warn(formatValidationIssues({result:l,verbose:!0})+"\n"));const u=await downloadRemotePackage({owner:n,packageName:r}),d=await resolveSinglePushStrategy({flagStrategy:i,overwrite:s,existingPkg:u,target:"remote-project",tastePkg:a}),m=t?o:u?.isPublic??!1,p=gP();if("skip"===d)return p.skipped.push(r),p;if("overwrite"===d&&(await writePackage3({pkg:a,owner:n,isPublic:m}),p.packagesPushed.push(r),p.overwritten.push(r)),"merge"===d){const{pkg:e,details:t}=mergeOrKeep({source:a,existing:u});await writePackage3({pkg:e,owner:n,isPublic:m}),p.packagesPushed.push(r),p.mergeDetails[r]=t}return p.filePaths[r]=`${n}/${r}`,p}async function pushRemote(e){const{packageName:t}=e;if(!exists2())return pP({pkg:t,error:"No taste directory found in project"});try{return await executeRemotePush(e)}catch(e){return pP({pkg:t,error:e instanceof Error?e.message:String(e)})}}async function promptOwnerSelection(e){const{userName:t,orgs:n}=e;if(0===n.length)return t;const r=[{value:t,label:t,hint:"Personal"},...n.map(e=>({value:e.login,label:e.name||e.login,hint:"Organization"}))],s=await Ee.select({message:"Owner",options:r,initialValue:t});return Ee.isCancel(s)&&(Ee.cancel("Operation cancelled"),process.exit(0)),s}function createPushCommand(){return new Ae("push").description(`Push taste packages to remote ${Be.dim("(commandcode.ai)")} or global ${Be.dim("(~/.commandcode)")}`).argument("[package]","Taste package name to push (omit with --all)").option("--all","Push all taste packages to remote").option("--remote","Push to commandcode.ai remote (default)").option("-g, --global","Push to local global storage (~/.commandcode)").addOption(new xe("--local","Use local server").hideHelp()).option("--public","Make package publicly discoverable on commandcode.ai").option("--private","Make package private (not publicly discoverable)").option("--owner <owner>","Push under a specific owner or organization").option("--overwrite","Replace existing package without prompting").option("--skip","Keep existing package, skip conflicting push").option("--merge","Auto-merge conflicting learnings without prompting").addOption(new xe("--staging","Push to staging environment").hideHelp()).action(withErrorHandler(async(e,t)=>{setPrompted(!1);const n=resolveRemoteDefault(t),r=await runPush({packageName:e,options:n});r.success||handleResultErrors(r.errors),logPushSuccess({result:r,options:n})}))}function validatePushOptions(e){const{packageName:t,options:n}=e;n.global&&n.remote&&exitWithError("--global and --remote are mutually exclusive — pick one destination"),n.public&&n.private&&exitWithError("--public and --private are mutually exclusive — pick one visibility"),n.owner&&n.global&&exitWithError("--owner only applies to remote pushes, not --global"),t||n.all||exitWithUsage({message:"Specify a taste package name or use --all to push everything",usage:["cmd taste push <package> push a taste package to remote (default)","cmd taste push --all push all taste packages to remote","cmd taste push <package> -g push a taste package to global (~/.commandcode)"]}),t&&n.all&&exitWithError("Use either a package name or --all, not both"),resolveConflictStrategy(n)}__name(getUserOwner,"getUserOwner"),__name(resolveSinglePushStrategy,"resolveSinglePushStrategy"),__name(executePushStrategy,"executePushStrategy"),__name(pushSinglePackage,"pushSinglePackage"),__name(push,"push"),__name(executeRemotePush,"executeRemotePush"),__name(pushRemote,"pushRemote"),Nt(),__name(promptOwnerSelection,"promptOwnerSelection"),__name(createPushCommand,"createPushCommand"),__name(validatePushOptions,"validatePushOptions");var fP=__name(e=>!!e.public||!e.private&&void 0,"resolveVisibility");async function validateOwnerAccess(e){let t;try{t=await fetchUserNamespaces()}catch(e){return void dlog(`[Auth] validateOwnerAccess: namespace service unavailable, skipping — ${e instanceof Error?e.message:String(e)}`)}const n=[t.userName,...t.orgs.map(e=>e.login)];n.includes(e)||exitWithError(`No push access to '${e}'. Available: ${n.join(", ")}`)}async function resolveOwnerForPush(e){const{packageName:t,owner:n}=e,r=parseOwnerPackage(t);if(r)return await validateOwnerAccess(r.owner),r;if(n)return await validateOwnerAccess(n),{owner:n,packageName:t};Ee.intro(Be.dim(`pushing ${t}`)),setPrompted(!0);const s=Ee.spinner();s.start("Resolving"),(await list({location:"local-project"})).some(e=>e.category===t)||(s.error("Failed"),Ee.outro(Be.red(`Taste package '${t}' not found in project`)),process.exit(1));const o=await fetchUserNamespaces();return s.stop(o.orgs.length>0?"Select owner to push to":""),{owner:o.orgs.length>0?await promptOwnerSelection(o):o.userName,packageName:t}}async function runPush(e){const{packageName:t,options:n}=e;console.log("");const r=resolveRemoteDefault(n);validatePushOptions({packageName:t,options:r});const s=resolveConflictStrategy(r);return r.remote&&r.all?pushRemoteAll({options:r,strategy:s}):r.remote?pushRemoteSingle({packageName:t,options:r,strategy:s}):pushGlobal({packageName:t,options:r,strategy:s})}async function pushRemoteAll(t){const{options:n,strategy:r}=t;n.owner&&await validateOwnerAccess(n.owner);const s=(await getAllPackages2()).length,o=`${s} ${1===s?"package":"packages"}`,i=e.basename(process.cwd()),a=resolveStrategyLabel({strategy:r,isRemote:!0});console.log(Be.dim(` Pushing ${o} to ${i} (remote)${a}`)),console.log(""),setActiveSpinner(Ie("Pushing taste packages").start());const l=await push({packages:[],target:"remote-project",overwrite:n.overwrite,isPublic:fP(n),strategy:r,owner:n.owner});return stopActiveSpinner(),l}async function pushRemoteSingle(e){const{packageName:t,options:n,strategy:r}=e,{owner:s,packageName:o}=await resolveOwnerForPush({packageName:t,owner:n.owner});startPushSpinner({owner:s,pkgName:o});const i=await pushRemote({owner:s,packageName:o,overwrite:n.overwrite,isPublic:fP(n),strategy:r});return stopActiveSpinner(`Pushed to ${s}/${o}`),i}function resolveStrategyLabel(e){const{strategy:t,isRemote:n=!1}=e;return"overwrite"===t?" · overwrite":"skip"===t?" · skip conflicts":"merge"===t?" · auto-merge":n?"":" · will prompt on conflicts"}function startPushSpinner(e){const{owner:t,pkgName:n}=e;if(wasPrompted()){const e=Ee.spinner();return e.start(`Pushing to ${t}/${n}`),void setActiveSpinner(e)}setActiveSpinner(Ie("Pushing taste package").start())}async function pushGlobal(e){const{packageName:t,options:n,strategy:r}=e,s=n.all||!t?[]:[t],o=await getAllPackages2(),i=s.length>0?s.length:o.length,a=`${i} ${1===i?"package":"packages"}`,l=shortenPath(getTastePath({target:"local-global"})),u=resolveStrategyLabel({strategy:r});console.log(Be.dim(` Pushing ${a} to ${l}${u}`)),console.log(""),setActiveSpinner(Ie("Pushing taste packages").start());const d=await push({packages:s,target:"local-global",overwrite:n.overwrite,strategy:r});return stopActiveSpinner(),d}function createTasteCommand(){const e=new Ae(Tt.TASTE);return e.description("Manage taste learning packages").allowUnknownOption().allowExcessArguments(),e.addCommand(createPushCommand()),e.addCommand(createPullCommand()),e.addCommand(createListCommand()),e.addCommand(createLintCommand()),e.addCommand(createOpenCommand()),e}function formatVersion(e,t,n=!1){const r=n?re.bold(re.green(t)):re.white(t);return`${re.dim(e)} ${r}`}function showVersionDetails(e){console.log(formatVersion("Current:",e.currentVersion)),console.log(formatVersion("Latest: ",e.latestVersion,!0)),console.log(""),console.log(`Run ${re.bold(re.green("cmd update"))} to install.`)}function showUpdateSuccessHint(){console.log(re.dim(`Run ${re.cyan("cmd")} to start using the new version.`))}function showManualUpdateHint(e){console.log(re.dim("Try updating manually:")),console.log(re.cyan(`npm i -g command-code@${e}`))}function showCheckFailure(){console.log(re.dim("Please check your internet connection or try again later."))}async function checkAction(){const e=Ie("Checking for updates...").start(),t=await checkForUpdateAvailable();if(!t)return e.fail("Failed to check for updates"),void showCheckFailure();t.updateAvailable?(e.stop(),console.log(""),console.log(`${re.green(be.tick)} Update available`),showVersionDetails(t)):e.succeed(`Up to date ${re.dim(`(${t.currentVersion})`)}`)}async function performUpdateAction(){const e=Ie("Checking for updates...").start(),t=await checkForUpdateAvailable();if(!t)return e.fail("Failed to check for updates"),void showCheckFailure();t.updateAvailable?(e.text=`Updating ${t.currentVersion} ${be.arrowRight} ${t.latestVersion}...`,(await performAutoUpdate({silent:!0,updateInfo:t})).success||(e.fail("Update failed"),trackError({error:sanitizeErrorForTelemetry({error:new Error("Update failed"),label:"cli_update_failed"}),context:{component:Br.UPDATE_COMMAND,heading:"CLI update failed","update.current_version":t.currentVersion,"update.target_version":t.latestVersion}}),showManualUpdateHint(t.latestVersion),await shutdownTelemetry(),process.exit(1)),e.succeed(`Updated to v${t.latestVersion}`),showUpdateSuccessHint()):e.succeed(`Up to date ${re.dim(`(${t.currentVersion})`)}`)}async function updateAction(e){e.checkOnly?await checkAction():await performUpdateAction()}__name(validateOwnerAccess,"validateOwnerAccess"),__name(resolveOwnerForPush,"resolveOwnerForPush"),__name(runPush,"runPush"),__name(pushRemoteAll,"pushRemoteAll"),__name(pushRemoteSingle,"pushRemoteSingle"),__name(resolveStrategyLabel,"resolveStrategyLabel"),__name(startPushSpinner,"startPushSpinner"),__name(pushGlobal,"pushGlobal"),__name(createTasteCommand,"createTasteCommand"),Nt(),Ot(),Vr(),__name(formatVersion,"formatVersion"),__name(showVersionDetails,"showVersionDetails"),__name(showUpdateSuccessHint,"showUpdateSuccessHint"),__name(showManualUpdateHint,"showManualUpdateHint"),__name(showCheckFailure,"showCheckFailure"),__name(checkAction,"checkAction"),__name(performUpdateAction,"performUpdateAction"),__name(updateAction,"updateAction");var yP=new Ae("update").description("Update Command Code to the latest version").option("--check-only","Check for updates without installing").allowUnknownOption().allowExcessArguments().action(updateAction);Nt(),Qs(),AC();var wP=__name((e,t)=>`${be.info} ${e}: ${re.cyan(t)}`,"formatInfoLine"),SP=__name(e=>re.bold(`${e}:`),"formatSectionHeader"),bP=__name(e=>re.red(e),"formatError"),EP=__name(e=>e instanceof Error?e.message:"Unknown error","formatErrorMessage"),CP=__name(e=>["",SP("User Information"),wP("Name",e.name),wP("Email",e.email),wP("Username",e.userName)],"buildUserOutput"),vP=__name(e=>["",SP("Organization"),wP("Name",e.name),wP("Login",e.login)],"buildOrgOutput"),TP=__name(e=>{e.forEach(e=>console.log(e))},"printLines"),kP=__name((e,t)=>{TP(CP(e)),t&&TP(vP(t)),console.log("")},"displayUserInfo"),_P=__name(e=>null!==e&&e.length>0,"validateApiKey"),PP=__name(e=>e.success&&null!==e.user,"validateUserData");async function whoamiAction(){const e=Ie("Fetching user information...").start();try{const t=await getAuthKey();_P(t)||(e.fail(bP('Not authenticated. Please login using "cmd auth login"')),process.exit(1));const n=await getAuthenticatedEntity();PP(n)||(e.fail(bP("Failed to fetch user info")),process.exit(1)),e.succeed("User information loaded"),kP(n.user,n.org)}catch(t){e.fail(bP(`Error: ${EP(t)}`)),process.exit(1)}}__name(whoamiAction,"whoamiAction");var AP=new Ae("whoami").description("Display current user information").allowUnknownOption().allowExcessArguments().action(whoamiAction);handleUnhandledErrors(),setupTelemetry(),await preRun();var xP=createProgram();xP.action(interactiveModeAction),xP.addCommand(W_),xP.addCommand(Q_),xP.addCommand(AP),xP.addCommand(yP),xP.addCommand(U_),xP.addCommand(createTasteCommand()),xP.addCommand(createMcpCommand()),xP.addCommand(G_),xP.addCommand(ps),xP.addCommand(bs),xP.addCommand(As),setupCommanderHooks(xP),xP.parse();
|