@automagik/genie 4.260423.12 → 4.260424.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/genie.js CHANGED
@@ -2701,7 +2701,7 @@ Run: genie send '<SHIP|FIX-FIRST|BLOCKED> \u2014 <summary>' --to ${reviewLeaderT
2701
2701
  WHERE repo_path = ${repo}
2702
2702
  AND wish_file LIKE ${pattern}
2703
2703
  ORDER BY seq
2704
- `).map((r)=>({id:r.id,seq:r.seq,title:r.title,stage:r.stage,repoPath:r.repo_path}))}var init_task_close_merged=__esm(()=>{init_wish_state()});import{existsSync as existsSync55,readFileSync as readFileSync35}from"fs";import{join as join66}from"path";function stripBackticks(value){return value.replace(/^`+|`+$/g,"").trim()}function stripBold(value){return value.replace(/^\*\*|\*\*$/g,"").trim()}function detectHeadings(lines){let spans=[],inFence=!1;for(let i2=0;i2<lines.length;i2++){let line=lines[i2];if(/^\s*```/.test(line)){inFence=!inFence;continue}if(inFence)continue;let m=/^(#{1,6})\s+(.*?)\s*$/.exec(line);if(!m)continue;spans.push({title:m[2],level:m[1].length,start:i2+1})}let total=lines.length;for(let i2=0;i2<spans.length;i2++){let current=spans[i2];current.contentStart=current.start+1;let end=total;for(let j=i2+1;j<spans.length;j++){let candidate=spans[j];if(candidate.level<=current.level){end=candidate.start-1;break}}current.end=end}return spans}function sliceContent(lines,span){let start3=span.contentStart-1,end=span.end;return lines.slice(start3,end)}function extractMetadataFromRows(lines){let metadata={},sawHeader=!1,sawDivider=!1;for(let raw of lines){let line=raw.trim();if(!line.startsWith("|")){if(sawHeader)break;continue}if(!sawHeader){sawHeader=!0;continue}if(!sawDivider){sawDivider=!0;continue}let cells=line.split("|").slice(1,-1).map((c)=>c.trim());if(cells.length<2)continue;let keyRaw=stripBold(cells[0]).toLowerCase(),mapped=METADATA_KEY_MAP[keyRaw];if(mapped)metadata[mapped]=stripBackticks(cells[1])}return{metadata,sawHeader}}function parseMetadataTable(lines,startLine){let{metadata,sawHeader}=extractMetadataFromRows(lines);if(!sawHeader)throw new WishParseError({rule:"metadata-table-missing-field",line:startLine,message:"Metadata table not found at top of wish"});for(let field of REQUIRED_METADATA_FIELDS)if(!metadata[field])throw new WishParseError({rule:"metadata-table-missing-field",line:startLine,message:`Metadata table is missing required field: ${field}`});return metadata}function parseBullets(lines){let out=[];for(let raw of lines){let m=/^\s*[-*]\s+(.*)$/.exec(raw);if(m)out.push(m[1].trim())}return out}function parseChecklist(lines){let out=[];for(let raw of lines){let m=/^\s*[-*]\s+\[[ xX]\]\s+(.*)$/.exec(raw);if(m)out.push(m[1].trim())}return out}function parsePipeTable(lines){let rows=[],sawHeader=!1,sawDivider=!1;for(let raw of lines){let line=raw.trim();if(!line.startsWith("|")){if(sawHeader)break;continue}if(!sawHeader){sawHeader=!0;continue}if(!sawDivider){sawDivider=!0;continue}let cells=line.split("|").slice(1,-1).map((c)=>c.trim());rows.push(cells)}return rows}function parseDecisions(lines){return parsePipeTable(lines).filter((r)=>r.length>=3).map((cells)=>({number:cells[0],decision:cells[1],rationale:cells[2]}))}function parseRisks(lines){return parsePipeTable(lines).filter((r)=>r.length>=3).map((cells)=>({risk:cells[0],severity:cells[1],mitigation:cells[2]}))}function parseExecutionStrategy2(allLines,span,allSpans){let entries=[],waveSpans=allSpans.filter((s2)=>s2.level===3&&s2.start>span.start&&s2.start<=span.end&&/^wave\s+/i.exec(s2.title));for(let waveSpan of waveSpans){let waveName=(/^(wave\s+\d+)/i.exec(waveSpan.title)?.[1]??waveSpan.title).trim(),rows=parsePipeTable(sliceContent(allLines,waveSpan));for(let row of rows){if(row.length<3)continue;entries.push({wave:waveName,group:row[0],agent:row[1],description:row[2]})}}return entries}function parseDependsOnValue(raw){let trimmed=raw.trim().replace(/\.$/,"");if(!trimmed)return{value:[],malformed:!0};if(/^none$/i.test(trimmed))return{value:"none",malformed:!1};let parts=trimmed.split(/\s*,\s*/).filter(Boolean),refPattern=/^(?:Group\s+\d+|[A-Za-z][A-Za-z0-9_-]*(?:\/(?:Group\s+\d+|[A-Za-z][A-Za-z0-9_-]*))*|[A-Za-z][A-Za-z0-9_-]*#\d+)$/i,malformed=parts.some((p)=>!refPattern.test(p));return{value:parts,malformed}}function extractLabeledField(lines,groupStartLine,labelRegex,stopRegex){let idx=lines.findIndex((l)=>labelRegex.test(l));if(idx<0)return{value:"",startLine:groupStartLine,endLine:groupStartLine,found:!1};let labelLine=lines[idx],inlineMatch=labelRegex.exec(labelLine),inline=inlineMatch?labelLine.slice(inlineMatch.index+inlineMatch[0].length).trim():"",collected=[];if(inline)collected.push(inline);let startLine=groupStartLine+idx;idx+=1;while(idx<lines.length){let line=lines[idx];if(stopRegex.test(line))break;collected.push(line),idx+=1}while(collected.length>0&&collected[collected.length-1].trim()==="")collected.pop();return{value:collected.join(`
2704
+ `).map((r)=>({id:r.id,seq:r.seq,title:r.title,stage:r.stage,repoPath:r.repo_path}))}var init_task_close_merged=__esm(()=>{init_wish_state()});import{existsSync as existsSync55,readFileSync as readFileSync36}from"fs";import{join as join66}from"path";function stripBackticks(value){return value.replace(/^`+|`+$/g,"").trim()}function stripBold(value){return value.replace(/^\*\*|\*\*$/g,"").trim()}function detectHeadings(lines){let spans=[],inFence=!1;for(let i2=0;i2<lines.length;i2++){let line=lines[i2];if(/^\s*```/.test(line)){inFence=!inFence;continue}if(inFence)continue;let m=/^(#{1,6})\s+(.*?)\s*$/.exec(line);if(!m)continue;spans.push({title:m[2],level:m[1].length,start:i2+1})}let total=lines.length;for(let i2=0;i2<spans.length;i2++){let current=spans[i2];current.contentStart=current.start+1;let end=total;for(let j=i2+1;j<spans.length;j++){let candidate=spans[j];if(candidate.level<=current.level){end=candidate.start-1;break}}current.end=end}return spans}function sliceContent(lines,span){let start3=span.contentStart-1,end=span.end;return lines.slice(start3,end)}function extractMetadataFromRows(lines){let metadata={},sawHeader=!1,sawDivider=!1;for(let raw of lines){let line=raw.trim();if(!line.startsWith("|")){if(sawHeader)break;continue}if(!sawHeader){sawHeader=!0;continue}if(!sawDivider){sawDivider=!0;continue}let cells=line.split("|").slice(1,-1).map((c)=>c.trim());if(cells.length<2)continue;let keyRaw=stripBold(cells[0]).toLowerCase(),mapped=METADATA_KEY_MAP[keyRaw];if(mapped)metadata[mapped]=stripBackticks(cells[1])}return{metadata,sawHeader}}function parseMetadataTable(lines,startLine){let{metadata,sawHeader}=extractMetadataFromRows(lines);if(!sawHeader)throw new WishParseError({rule:"metadata-table-missing-field",line:startLine,message:"Metadata table not found at top of wish"});for(let field of REQUIRED_METADATA_FIELDS)if(!metadata[field])throw new WishParseError({rule:"metadata-table-missing-field",line:startLine,message:`Metadata table is missing required field: ${field}`});return metadata}function parseBullets(lines){let out=[];for(let raw of lines){let m=/^\s*[-*]\s+(.*)$/.exec(raw);if(m)out.push(m[1].trim())}return out}function parseChecklist(lines){let out=[];for(let raw of lines){let m=/^\s*[-*]\s+\[[ xX]\]\s+(.*)$/.exec(raw);if(m)out.push(m[1].trim())}return out}function parsePipeTable(lines){let rows=[],sawHeader=!1,sawDivider=!1;for(let raw of lines){let line=raw.trim();if(!line.startsWith("|")){if(sawHeader)break;continue}if(!sawHeader){sawHeader=!0;continue}if(!sawDivider){sawDivider=!0;continue}let cells=line.split("|").slice(1,-1).map((c)=>c.trim());rows.push(cells)}return rows}function parseDecisions(lines){return parsePipeTable(lines).filter((r)=>r.length>=3).map((cells)=>({number:cells[0],decision:cells[1],rationale:cells[2]}))}function parseRisks(lines){return parsePipeTable(lines).filter((r)=>r.length>=3).map((cells)=>({risk:cells[0],severity:cells[1],mitigation:cells[2]}))}function parseExecutionStrategy2(allLines,span,allSpans){let entries=[],waveSpans=allSpans.filter((s2)=>s2.level===3&&s2.start>span.start&&s2.start<=span.end&&/^wave\s+/i.exec(s2.title));for(let waveSpan of waveSpans){let waveName=(/^(wave\s+\d+)/i.exec(waveSpan.title)?.[1]??waveSpan.title).trim(),rows=parsePipeTable(sliceContent(allLines,waveSpan));for(let row of rows){if(row.length<3)continue;entries.push({wave:waveName,group:row[0],agent:row[1],description:row[2]})}}return entries}function parseDependsOnValue(raw){let trimmed=raw.trim().replace(/\.$/,"");if(!trimmed)return{value:[],malformed:!0};if(/^none$/i.test(trimmed))return{value:"none",malformed:!1};let parts=trimmed.split(/\s*,\s*/).filter(Boolean),refPattern=/^(?:Group\s+\d+|[A-Za-z][A-Za-z0-9_-]*(?:\/(?:Group\s+\d+|[A-Za-z][A-Za-z0-9_-]*))*|[A-Za-z][A-Za-z0-9_-]*#\d+)$/i,malformed=parts.some((p)=>!refPattern.test(p));return{value:parts,malformed}}function extractLabeledField(lines,groupStartLine,labelRegex,stopRegex){let idx=lines.findIndex((l)=>labelRegex.test(l));if(idx<0)return{value:"",startLine:groupStartLine,endLine:groupStartLine,found:!1};let labelLine=lines[idx],inlineMatch=labelRegex.exec(labelLine),inline=inlineMatch?labelLine.slice(inlineMatch.index+inlineMatch[0].length).trim():"",collected=[];if(inline)collected.push(inline);let startLine=groupStartLine+idx;idx+=1;while(idx<lines.length){let line=lines[idx];if(stopRegex.test(line))break;collected.push(line),idx+=1}while(collected.length>0&&collected[collected.length-1].trim()==="")collected.pop();return{value:collected.join(`
2705
2705
  `).trim(),startLine,endLine:groupStartLine+idx-1,found:!0}}function extractValidationBody(rawValue){let vLines=rawValue.split(`
2706
2706
  `),inFence=!1,collected=[];for(let l of vLines){if(/^\s*```(\S*)\s*$/.exec(l)){if(!inFence){inFence=!0;continue}inFence=!1;break}if(inFence)collected.push(l)}return collected.length>0?collected.join(`
2707
2707
  `):rawValue}function parseExecutionGroup(_allLines,headerLine,headerLineNumber,bodyLines,bodyStartLine,bodyEndLine){let headerMatch=/^###\s+Group\s+(\d+)\s*:\s*(.+?)\s*$/i.exec(headerLine);if(!headerMatch)throw new WishParseError({rule:"group-header-format",line:headerLineNumber,message:`Execution group header not in canonical "### Group N: Title" form: ${headerLine.trim()}`});let number=Number.parseInt(headerMatch[1],10),title=headerMatch[2].trim(),stopRegex=/^(\*\*(Goal|Deliverables|Acceptance Criteria|Validation|depends-on)\s*:\*\*|---\s*$)/i,goalField=extractLabeledField(bodyLines,bodyStartLine,/^\*\*Goal:\*\*/i,stopRegex),deliverablesField=extractLabeledField(bodyLines,bodyStartLine,/^\*\*Deliverables:\*\*/i,stopRegex),acceptanceField=extractLabeledField(bodyLines,bodyStartLine,/^\*\*Acceptance Criteria:\*\*/i,stopRegex),validationField=extractLabeledField(bodyLines,bodyStartLine,/^\*\*Validation:\*\*/i,stopRegex),dependsOnField=extractLabeledField(bodyLines,bodyStartLine,/^\*\*depends-on:\*\*/i,stopRegex),acceptanceItems=acceptanceField.found?parseChecklist(acceptanceField.value.split(`
@@ -2712,7 +2712,7 @@ Run: genie send '<SHIP|FIX-FIRST|BLOCKED> \u2014 <summary>' --to ${reviewLeaderT
2712
2712
  `).split(`
2713
2713
  `),spans=detectHeadings(lines),{title,metadata,titleSpan,firstH2}=parseTitleAndMetadata(lines,spans),summary=requireSummary(lines,spans,firstH2?.start??titleSpan.start),scope=parseScopeSection(lines,spans),decisionsSpan=spans.find((s2)=>s2.level===2&&/^decisions$/i.test(s2.title)),decisions=decisionsSpan?parseDecisions(sliceContent(lines,decisionsSpan)):[],successSpan=spans.find((s2)=>s2.level===2&&/^success criteria$/i.test(s2.title)),successCriteria=successSpan?parseChecklist(sliceContent(lines,successSpan)):[],strategySpan=spans.find((s2)=>s2.level===2&&/^execution strategy$/i.test(s2.title)),executionStrategy=strategySpan?parseExecutionStrategy2(lines,strategySpan,spans):[],executionGroups=parseExecutionGroupsSection(lines,spans,firstH2?.start??titleSpan.start),qaSpan=spans.find((s2)=>s2.level===2&&/^qa criteria$/i.test(s2.title)),qaCriteria=qaSpan?parseChecklist(sliceContent(lines,qaSpan)):[],risksSpan=spans.find((s2)=>s2.level===2&&/^assumptions\s*\/\s*risks$/i.test(s2.title)),assumptionsRisks=risksSpan?parseRisks(sliceContent(lines,risksSpan)):[],reviewSpan=spans.find((s2)=>s2.level===2&&/^review results$/i.test(s2.title)),reviewResults=reviewSpan?stripHorizontalRules(sliceContent(lines,reviewSpan).join(`
2714
2714
  `)):"",filesSpan=spans.find((s2)=>s2.level===2&&/^files to create(\/modify)?$/i.test(s2.title)),filesToCreate=filesSpan?extractFencedBlock(sliceContent(lines,filesSpan).join(`
2715
- `)):"";return{title,metadata,summary,scope,decisions,successCriteria,executionStrategy,executionGroups,qaCriteria,assumptionsRisks,reviewResults,filesToCreate}}function parseWishFile(slug,options={}){let root=options.repoRoot??process.cwd(),path3=join66(root,".genie","wishes",slug,"WISH.md");if(!existsSync55(path3))throw new WishParseError({rule:"missing-title",line:1,file:path3,message:`Wish file not found: ${path3}`});let markdown=readFileSync35(path3,"utf8");try{return parseWish(markdown)}catch(err){if(err instanceof WishParseError)throw new WishParseError({rule:err.rule,line:err.line,column:err.column,message:err.message,file:path3});throw err}}var WishParseError,METADATA_KEY_MAP,REQUIRED_METADATA_FIELDS;var init_wish_parser=__esm(()=>{WishParseError=class WishParseError extends Error{rule;line;column;file;constructor(opts){super(opts.message);this.name="WishParseError",this.rule=opts.rule,this.line=opts.line,this.column=opts.column??1,this.file=opts.file}};METADATA_KEY_MAP={status:"status",slug:"slug",date:"date",author:"author",appetite:"appetite",branch:"branch","repos touched":"reposTouched",design:"design"},REQUIRED_METADATA_FIELDS=["status","slug","date","author","appetite","branch"]});var WishMetadataSchema,DecisionRowSchema,WaveEntrySchema,RiskRowSchema,DependsOnSchema,ExecutionGroupSchema,WishDocumentSchema;var init_wish_schema=__esm(()=>{init_zod();WishMetadataSchema=exports_external.object({status:exports_external.string().min(1),slug:exports_external.string().min(1),date:exports_external.string().min(1),author:exports_external.string().min(1),appetite:exports_external.string().min(1),branch:exports_external.string().min(1),reposTouched:exports_external.string().optional(),design:exports_external.string().optional()}),DecisionRowSchema=exports_external.object({number:exports_external.string(),decision:exports_external.string(),rationale:exports_external.string()}),WaveEntrySchema=exports_external.object({wave:exports_external.string(),group:exports_external.string(),agent:exports_external.string(),description:exports_external.string()}),RiskRowSchema=exports_external.object({risk:exports_external.string(),severity:exports_external.string(),mitigation:exports_external.string()}),DependsOnSchema=exports_external.union([exports_external.literal("none"),exports_external.array(exports_external.string().min(1)).min(1)]),ExecutionGroupSchema=exports_external.object({name:exports_external.string().min(1),number:exports_external.number().int().positive(),title:exports_external.string().min(1),goal:exports_external.string().min(1),deliverables:exports_external.string().min(1),acceptanceCriteria:exports_external.array(exports_external.string().min(1)).min(1),validation:exports_external.string(),dependsOn:DependsOnSchema,startLine:exports_external.number().int().positive(),endLine:exports_external.number().int().positive()}),WishDocumentSchema=exports_external.object({title:exports_external.string().min(1),metadata:WishMetadataSchema,summary:exports_external.string().min(1),scope:exports_external.object({in:exports_external.array(exports_external.string()),out:exports_external.array(exports_external.string().min(1)).min(1,"OUT scope must contain at least one bullet")}),decisions:exports_external.array(DecisionRowSchema),successCriteria:exports_external.array(exports_external.string().min(1)),executionStrategy:exports_external.array(WaveEntrySchema),executionGroups:exports_external.array(ExecutionGroupSchema).min(1,"Wish must contain at least one execution group"),qaCriteria:exports_external.array(exports_external.string()),assumptionsRisks:exports_external.array(RiskRowSchema),reviewResults:exports_external.string(),filesToCreate:exports_external.string()}).superRefine((doc,ctx)=>{let validNumbers=new Set(doc.executionGroups.map((g)=>g.number));for(let group of doc.executionGroups){if(group.dependsOn==="none")continue;for(let ref of group.dependsOn){let m=/^Group\s+(\d+)$/i.exec(ref.trim());if(!m)continue;let n=Number.parseInt(m[1],10);if(!validNumbers.has(n))ctx.addIssue({code:exports_external.ZodIssueCode.custom,path:["executionGroups"],message:`Group ${group.number} depends-on references non-existent Group ${n}`})}}})});var exports_wish_lint={};__export(exports_wish_lint,{lintWish:()=>lintWish,lintMarkdown:()=>lintMarkdown,formatLintReport:()=>formatLintReport,applyFixes:()=>applyFixes});function buildSummary(violations){let fixable=0,unfixable=0;for(let v of violations)if(v.fixable)fixable++;else unfixable++;return{total:violations.length,fixable,unfixable}}function findExecGroupsRange(lines){let inFence=!1,start3=-1;for(let i2=0;i2<lines.length;i2++){let raw=lines[i2];if(/^\s*```/.test(raw)){inFence=!inFence;continue}if(inFence)continue;if(/^##\s+Execution Groups\s*$/i.test(raw)){start3=i2;continue}if(start3>=0&&/^##\s+/.test(raw))return{start:start3,end:i2-1}}if(start3>=0)return{start:start3,end:lines.length-1};return null}function findFirstGroupHeaderLine(lines){let inFence=!1;for(let i2=0;i2<lines.length;i2++){let raw=lines[i2];if(/^\s*```/.test(raw)){inFence=!inFence;continue}if(inFence)continue;if(/^###\s+(group|grupo)\s+\d+/i.test(raw))return i2}return-1}function rewriteStrayGroupHeader(raw){let m=STRAY_GROUP_HEADER.exec(raw);if(!m)return null;let number=m[2],rest=(m[4]??"").trim();return`### Group ${number}: ${rest||"<TODO title>"}`}function detectParseErrorViolation(err){let parseRule=err.rule,fixable=Boolean({"missing-execution-groups-header":!0,"group-header-format":!0,"metadata-table-missing-field":!0}[parseRule]);return{rule:parseRule,severity:"error",line:err.line,column:err.column??1,message:err.message,fixable,fix:null}}function scanStrayGroupHeaders(lines,execRange){let out=[],inFence=!1,startIdx=execRange?execRange.start+1:0,endIdx=execRange?execRange.end:lines.length-1;for(let i2=startIdx;i2<=endIdx;i2++){let raw=lines[i2];if(/^\s*```/.test(raw)){inFence=!inFence;continue}if(inFence)continue;if(CANONICAL_GROUP_HEADER.test(raw))continue;if(!STRAY_GROUP_HEADER.exec(raw))continue;let rewritten=rewriteStrayGroupHeader(raw)??raw;out.push({rule:"group-header-format",severity:"error",line:i2+1,column:1,message:`Group header "${raw.trim()}" is not in canonical "### Group N: Title" form`,fixable:!0,fix:{kind:"rewrite",at:{line:i2+1},content:rewritten,range:{endLine:i2+1,endColumn:(raw.length||1)+1}}})}return out}function scanGroupFieldLabels(doc,lines){let out=[];for(let group of doc.executionGroups){let start3=Math.max(0,group.startLine),end=Math.min(lines.length,group.endLine),slice=lines.slice(start3,end);for(let{label,regex,rule}of REQUIRED_FIELD_LABELS){if(slice.findIndex((l)=>regex.test(l))>=0)continue;let insertAt=start3+1;out.push({rule,severity:"error",line:group.startLine,column:1,message:`Group ${group.number} (${group.title}) is missing the ${label} field label`,fixable:!0,fix:{kind:"insert",at:{line:insertAt},content:`
2715
+ `)):"";return{title,metadata,summary,scope,decisions,successCriteria,executionStrategy,executionGroups,qaCriteria,assumptionsRisks,reviewResults,filesToCreate}}function parseWishFile(slug,options={}){let root=options.repoRoot??process.cwd(),path3=join66(root,".genie","wishes",slug,"WISH.md");if(!existsSync55(path3))throw new WishParseError({rule:"missing-title",line:1,file:path3,message:`Wish file not found: ${path3}`});let markdown=readFileSync36(path3,"utf8");try{return parseWish(markdown)}catch(err){if(err instanceof WishParseError)throw new WishParseError({rule:err.rule,line:err.line,column:err.column,message:err.message,file:path3});throw err}}var WishParseError,METADATA_KEY_MAP,REQUIRED_METADATA_FIELDS;var init_wish_parser=__esm(()=>{WishParseError=class WishParseError extends Error{rule;line;column;file;constructor(opts){super(opts.message);this.name="WishParseError",this.rule=opts.rule,this.line=opts.line,this.column=opts.column??1,this.file=opts.file}};METADATA_KEY_MAP={status:"status",slug:"slug",date:"date",author:"author",appetite:"appetite",branch:"branch","repos touched":"reposTouched",design:"design"},REQUIRED_METADATA_FIELDS=["status","slug","date","author","appetite","branch"]});var WishMetadataSchema,DecisionRowSchema,WaveEntrySchema,RiskRowSchema,DependsOnSchema,ExecutionGroupSchema,WishDocumentSchema;var init_wish_schema=__esm(()=>{init_zod();WishMetadataSchema=exports_external.object({status:exports_external.string().min(1),slug:exports_external.string().min(1),date:exports_external.string().min(1),author:exports_external.string().min(1),appetite:exports_external.string().min(1),branch:exports_external.string().min(1),reposTouched:exports_external.string().optional(),design:exports_external.string().optional()}),DecisionRowSchema=exports_external.object({number:exports_external.string(),decision:exports_external.string(),rationale:exports_external.string()}),WaveEntrySchema=exports_external.object({wave:exports_external.string(),group:exports_external.string(),agent:exports_external.string(),description:exports_external.string()}),RiskRowSchema=exports_external.object({risk:exports_external.string(),severity:exports_external.string(),mitigation:exports_external.string()}),DependsOnSchema=exports_external.union([exports_external.literal("none"),exports_external.array(exports_external.string().min(1)).min(1)]),ExecutionGroupSchema=exports_external.object({name:exports_external.string().min(1),number:exports_external.number().int().positive(),title:exports_external.string().min(1),goal:exports_external.string().min(1),deliverables:exports_external.string().min(1),acceptanceCriteria:exports_external.array(exports_external.string().min(1)).min(1),validation:exports_external.string(),dependsOn:DependsOnSchema,startLine:exports_external.number().int().positive(),endLine:exports_external.number().int().positive()}),WishDocumentSchema=exports_external.object({title:exports_external.string().min(1),metadata:WishMetadataSchema,summary:exports_external.string().min(1),scope:exports_external.object({in:exports_external.array(exports_external.string()),out:exports_external.array(exports_external.string().min(1)).min(1,"OUT scope must contain at least one bullet")}),decisions:exports_external.array(DecisionRowSchema),successCriteria:exports_external.array(exports_external.string().min(1)),executionStrategy:exports_external.array(WaveEntrySchema),executionGroups:exports_external.array(ExecutionGroupSchema).min(1,"Wish must contain at least one execution group"),qaCriteria:exports_external.array(exports_external.string()),assumptionsRisks:exports_external.array(RiskRowSchema),reviewResults:exports_external.string(),filesToCreate:exports_external.string()}).superRefine((doc,ctx)=>{let validNumbers=new Set(doc.executionGroups.map((g)=>g.number));for(let group of doc.executionGroups){if(group.dependsOn==="none")continue;for(let ref of group.dependsOn){let m=/^Group\s+(\d+)$/i.exec(ref.trim());if(!m)continue;let n=Number.parseInt(m[1],10);if(!validNumbers.has(n))ctx.addIssue({code:exports_external.ZodIssueCode.custom,path:["executionGroups"],message:`Group ${group.number} depends-on references non-existent Group ${n}`})}}})});var exports_wish_lint={};__export(exports_wish_lint,{lintWish:()=>lintWish,lintMarkdown:()=>lintMarkdown,formatLintReport:()=>formatLintReport,applyFixes:()=>applyFixes});function buildSummary(violations){let fixable=0,unfixable=0;for(let v of violations)if(v.fixable)fixable++;else unfixable++;return{total:violations.length,fixable,unfixable}}function findExecGroupsRange(lines){let inFence=!1,start3=-1;for(let i2=0;i2<lines.length;i2++){let raw=lines[i2];if(/^\s*```/.test(raw)){inFence=!inFence;continue}if(inFence)continue;if(/^##\s+Execution Groups\s*$/i.test(raw)){start3=i2;continue}if(start3>=0&&/^##\s+/.test(raw))return{start:start3,end:i2-1}}if(start3>=0)return{start:start3,end:lines.length-1};return null}function findFirstGroupHeaderLine(lines){let inFence=!1;for(let i2=0;i2<lines.length;i2++){let raw=lines[i2];if(/^\s*```/.test(raw)){inFence=!inFence;continue}if(inFence)continue;if(/^###\s+(group|grupo)\s+\d+/i.test(raw))return i2}return-1}function rewriteStrayGroupHeader(raw){let m=STRAY_GROUP_HEADER.exec(raw);if(!m)return null;let number=m[2],rest=(m[4]??"").trim();return`### Group ${number}: ${rest||"<TODO title>"}`}function detectParseErrorViolation(err){let parseRule=err.rule,fixable=Boolean({"missing-execution-groups-header":!0,"group-header-format":!0,"metadata-table-missing-field":!0}[parseRule]);return{rule:parseRule,severity:"error",line:err.line,column:err.column??1,message:err.message,fixable,fix:null}}function scanStrayGroupHeaders(lines,execRange){let out=[],inFence=!1,startIdx=execRange?execRange.start+1:0,endIdx=execRange?execRange.end:lines.length-1;for(let i2=startIdx;i2<=endIdx;i2++){let raw=lines[i2];if(/^\s*```/.test(raw)){inFence=!inFence;continue}if(inFence)continue;if(CANONICAL_GROUP_HEADER.test(raw))continue;if(!STRAY_GROUP_HEADER.exec(raw))continue;let rewritten=rewriteStrayGroupHeader(raw)??raw;out.push({rule:"group-header-format",severity:"error",line:i2+1,column:1,message:`Group header "${raw.trim()}" is not in canonical "### Group N: Title" form`,fixable:!0,fix:{kind:"rewrite",at:{line:i2+1},content:rewritten,range:{endLine:i2+1,endColumn:(raw.length||1)+1}}})}return out}function scanGroupFieldLabels(doc,lines){let out=[];for(let group of doc.executionGroups){let start3=Math.max(0,group.startLine),end=Math.min(lines.length,group.endLine),slice=lines.slice(start3,end);for(let{label,regex,rule}of REQUIRED_FIELD_LABELS){if(slice.findIndex((l)=>regex.test(l))>=0)continue;let insertAt=start3+1;out.push({rule,severity:"error",line:group.startLine,column:1,message:`Group ${group.number} (${group.title}) is missing the ${label} field label`,fixable:!0,fix:{kind:"insert",at:{line:insertAt},content:`
2716
2716
  ${label} <TODO>
2717
2717
  `}})}}return out}function scanEmptyFieldContent(doc,lines){let out=[];for(let group of doc.executionGroups){let start3=Math.max(0,group.startLine),end=Math.min(lines.length,group.endLine),slice=lines.slice(start3,end),hasLabel=(regex)=>slice.some((l)=>regex.test(l)),checks=[{labelRegex:/^\*\*Goal\s*:\*\*/i,value:group.goal,rule:"missing-goal-field",name:"Goal"},{labelRegex:/^\*\*Deliverables\s*:\*\*/i,value:group.deliverables,rule:"missing-deliverables-field",name:"Deliverables"},{labelRegex:/^\*\*Acceptance Criteria\s*:\*\*/i,value:group.acceptanceCriteria.length>0?"x":"",rule:"missing-acceptance-field",name:"Acceptance Criteria"},{labelRegex:/^\*\*depends-on\s*:\*\*/i,value:group.dependsOn==="none"||Array.isArray(group.dependsOn)&&group.dependsOn.length>0?"x":"",rule:"missing-depends-on-field",name:"depends-on"}];for(let{labelRegex,value,rule,name}of checks){if(!hasLabel(labelRegex))continue;if(value.trim()!=="")continue;out.push({rule,severity:"error",line:group.startLine,column:1,message:`Group ${group.number} (${group.title}) has the ${name} label but no content`,fixable:!1,fix:null})}}return out}function findValidationFenceInfo(lines,group){let start3=Math.max(0,group.startLine),end=Math.min(lines.length,group.endLine),labelLine=-1;for(let i2=start3;i2<end;i2++)if(/^\*\*Validation\s*:\*\*/i.test(lines[i2])){labelLine=i2;break}if(labelLine<0)return null;let fenceLine=-1,fenceTag=null,fenceClose=null;for(let i2=labelLine+1;i2<end;i2++){let raw=lines[i2];if(/^\*\*(Goal|Deliverables|Acceptance Criteria|depends-on)\s*:\*\*/i.test(raw))break;let fenceOpen=/^\s*```(\S*)\s*$/.exec(raw);if(fenceOpen&&fenceLine<0){fenceLine=i2,fenceTag=fenceOpen[1]||"";continue}if(fenceLine>=0&&/^\s*```\s*$/.test(raw)){fenceClose=i2;break}}return{labelLine,fenceLine,fenceTag,fenceClose}}function collectValidationProse(lines,start3,end){let stop=end;for(let j=start3;j<end;j++)if(FIELD_BOUNDARY_REGEX.test(lines[j])){stop=j;break}let collected=[];for(let j=start3;j<stop;j++)collected.push(lines[j]);while(collected.length>0&&collected[collected.length-1].trim()==="")collected.pop();return collected}function violationForMissingFence(info,contentLines){if(!contentLines.some((l)=>l.trim()!==""))return{rule:"missing-validation-command",severity:"error",line:info.labelLine+1,column:1,message:"Validation block is empty \u2014 add a fenced `bash` block with the verification command",fixable:!1,fix:null};return{rule:"validation-not-fenced-bash",severity:"error",line:info.labelLine+1,column:1,message:"Validation block is not wrapped in a ```bash fenced code block",fixable:!0,fix:{kind:"rewrite",at:{line:info.labelLine+2},content:["```bash",...contentLines,"```"].join(`
2718
2718
  `),range:{endLine:info.labelLine+1+contentLines.length,endColumn:1}}}}function violationsForFencedBlock(lines,info){let out=[];if(info.fenceTag!=="bash")out.push({rule:"validation-not-fenced-bash",severity:"error",line:info.fenceLine+1,column:1,message:`Validation fence has tag "${info.fenceTag??"<none>"}" \u2014 expected \`bash\``,fixable:!0,fix:{kind:"rewrite",at:{line:info.fenceLine+1},content:"```bash",range:{endLine:info.fenceLine+1,endColumn:(lines[info.fenceLine].length||1)+1}}});if(info.fenceClose===null)return out;let body=[];for(let j=info.fenceLine+1;j<info.fenceClose;j++)body.push(lines[j]);if(!body.some((l)=>l.trim()!==""))out.push({rule:"missing-validation-command",severity:"error",line:info.fenceLine+1,column:1,message:"Validation bash block is empty \u2014 add a command that verifies this group",fixable:!1,fix:null});return out}function scanValidation(doc,lines){let out=[];for(let group of doc.executionGroups){let info=findValidationFenceInfo(lines,group);if(!info)continue;if(info.fenceLine<0){let contentLines=collectValidationProse(lines,info.labelLine+1,group.endLine);out.push(violationForMissingFence(info,contentLines));continue}out.push(...violationsForFencedBlock(lines,info))}return out}function findScopeHeaderLine(lines){let inFence=!1;for(let i2=0;i2<lines.length;i2++){let raw=lines[i2];if(/^\s*```/.test(raw)){inFence=!inFence;continue}if(inFence)continue;if(/^##\s+Scope\s*$/i.test(raw))return i2}return-1}function findScopeEndIdx(lines,scopeHeaderLine){for(let i2=scopeHeaderLine+1;i2<lines.length;i2++)if(/^##\s+/.test(lines[i2]))return i2;return lines.length}function findOutLine(lines,start3,end){for(let i2=start3;i2<end;i2++)if(/^###\s+OUT\b/i.test(lines[i2]))return i2;return-1}function scopeMissingViolation(line,message){return{rule:"scope-section-missing",severity:"error",line,column:1,message,fixable:!1,fix:null}}function scanScope(doc,lines){let out=[],scopeHeaderLine=findScopeHeaderLine(lines);if(scopeHeaderLine<0)return out.push(scopeMissingViolation(1,"Wish is missing the `## Scope` section")),out;let endIdx=findScopeEndIdx(lines,scopeHeaderLine),slice=lines.slice(scopeHeaderLine+1,endIdx),hasIn=slice.some((l)=>/^###\s+IN\b/i.test(l)),hasOut=slice.some((l)=>/^###\s+OUT\b/i.test(l));if(!hasIn&&!hasOut)return out.push(scopeMissingViolation(scopeHeaderLine+1,"`## Scope` section has no `### IN` or `### OUT` subsections")),out;if(!hasOut)out.push({rule:"scope-section-missing",severity:"error",line:scopeHeaderLine+1,column:1,message:"`## Scope` is missing the `### OUT` subsection",fixable:!0,fix:{kind:"insert",at:{line:endIdx+1},content:`### OUT
@@ -3265,14 +3265,14 @@ $ bun add react-devtools-core@7 -d
3265
3265
  AND a.ended_at IS NULL
3266
3266
  ORDER BY a.started_at DESC
3267
3267
  `).map(mapAssignment)}function mapExecutor(row){let meta=row.metadata;return{id:String(row.id),agentId:String(row.agent_id),agentName:row.agent_name?String(row.agent_name):null,provider:String(row.provider),transport:String(row.transport),pid:row.pid!=null?Number(row.pid):null,tmuxSession:row.tmux_session?String(row.tmux_session):null,tmuxPaneId:row.tmux_pane_id?String(row.tmux_pane_id):null,state:String(row.state),metadata:typeof meta==="string"?JSON.parse(meta):meta??{},startedAt:row.started_at instanceof Date?row.started_at.toISOString():String(row.started_at),role:row.role?String(row.role):null,team:row.team?String(row.team):null}}function mapAssignment(row){return{id:String(row.id),executorId:String(row.executor_id),taskId:row.task_id?String(row.task_id):null,taskTitle:row.task_title?String(row.task_title):null,wishSlug:row.wish_slug?String(row.wish_slug):null,groupNumber:row.group_number!=null?Number(row.group_number):null,startedAt:row.started_at instanceof Date?row.started_at.toISOString():String(row.started_at)}}import{execSync as execSync17}from"child_process";function execQuiet(cmd){try{return execSync17(cmd,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()}catch{return""}}function parsePaneLine(parts){let[sessionName,winIdxStr,winName,winActive,winPanes,paneIdxStr,paneId,panePidStr,paneCmd,paneTitle,paneSize,sessAttached,sessWindows,sessCreated,paneDead]=parts;return{sessionName,winIdxStr,session:{name:sessionName,attached:sessAttached==="1",windowCount:Number.parseInt(sessWindows,10)||0,created:Number.parseInt(sessCreated,10)||0},window:{sessionName,index:Number.parseInt(winIdxStr,10)||0,name:winName,active:winActive==="1",paneCount:Number.parseInt(winPanes,10)||0},pane:{sessionName,windowIndex:Number.parseInt(winIdxStr,10)||0,paneIndex:Number.parseInt(paneIdxStr,10)||0,paneId,pid:Number.parseInt(panePidStr,10)||0,command:paneCmd,title:paneTitle,size:paneSize,isDead:paneDead==="1"}}}function getTmuxInventory(){let paneOutput=execQuiet(`${tmuxBin()} -L genie list-panes -a -F '#{session_name}|#{window_index}|#{window_name}|#{window_active}|#{window_panes}|#{pane_index}|#{pane_id}|#{pane_pid}|#{pane_current_command}|#{pane_title}|#{pane_width}x#{pane_height}|#{session_attached}|#{session_windows}|#{session_created}|#{pane_dead}'`);if(!paneOutput)return[];let sessionMap=new Map,windowMap=new Map;for(let line of paneOutput.split(`
3268
- `)){if(!line)continue;let parts=line.split("|");if(parts.length<15)continue;let parsed=parsePaneLine(parts);if(!sessionMap.has(parsed.sessionName))sessionMap.set(parsed.sessionName,{...parsed.session,windows:[]});let winKey=`${parsed.sessionName}:${parsed.winIdxStr}`;if(!windowMap.has(winKey)){let win={...parsed.window,panes:[]};windowMap.set(winKey,win),sessionMap.get(parsed.sessionName)?.windows.push(win)}windowMap.get(winKey)?.panes.push(parsed.pane)}return Array.from(sessionMap.values()).sort((a,b3)=>a.name.localeCompare(b3.name))}function isPidAlive3(pid){try{return process.kill(pid,0),!0}catch{return!1}}function allClaudePanes(sessions2){return sessions2.flatMap((s2)=>s2.windows.flatMap((w2)=>w2.panes)).filter((p)=>p.command==="claude"||p.title.includes("claude"))}function detectGaps(executors,sessions2){let deadPidExecutors=executors.filter((e)=>e.pid!=null&&!isPidAlive3(e.pid)),executorPaneIds=new Set(executors.map((e)=>e.tmuxPaneId).filter(Boolean)),claudePanes=allClaudePanes(sessions2),orphanPanes=claudePanes.filter((p)=>!executorPaneIds.has(p.paneId)),linkedCount=executors.filter((e)=>e.tmuxPaneId&&!deadPidExecutors.some((d2)=>d2.id===e.id)).length,deadPaneCount=sessions2.flatMap((s2)=>s2.windows.flatMap((w2)=>w2.panes)).filter((p)=>p.isDead).length;return{deadPidExecutors,orphanPanes,linkedCount,totalExecutors:executors.length,totalClaudePanes:claudePanes.length,deadPaneCount}}async function collectDiagnostics(){let{loadExecutors:loadExecutors2,loadAssignments:loadAssignments2}=await Promise.resolve().then(() => exports_db2),sessions2=getTmuxInventory(),executors=await loadExecutors2(),executorIds=executors.map((e)=>e.id),assignments=await loadAssignments2(executorIds),gaps=detectGaps(executors,sessions2);if(gaps.deadPidExecutors.length>0){let{terminateExecutor:terminateExecutor2}=await Promise.resolve().then(() => (init_executor_registry(),exports_executor_registry)),{getConnection:getConnection2}=await Promise.resolve().then(() => (init_db(),exports_db)),sql=await getConnection2();await Promise.allSettled(gaps.deadPidExecutors.map(async(exec3)=>{if(await terminateExecutor2(exec3.id),exec3.agentId)await sql`UPDATE agents SET current_executor_id = NULL WHERE current_executor_id = ${exec3.id}`}))}return{sessions:sessions2,executors,assignments,gaps,timestamp:Date.now()}}var init_diagnostics=__esm(()=>{init_ensure_tmux()});import{existsSync as existsSync58,readFileSync as readFileSync36,unlinkSync as unlinkSync12}from"fs";import{homedir as homedir36}from"os";import{join as join71}from"path";function getInitialAgentFilePath(){let genieHome6=process.env.GENIE_HOME??join71(homedir36(),".genie");return join71(genieHome6,"tui-initial-agent")}function consumeInitialAgentSignal(){let filePath=getInitialAgentFilePath();if(!existsSync58(filePath))return;try{let agent=readFileSync36(filePath,"utf-8").trim();return unlinkSync12(filePath),agent||void 0}catch{return}}var init_initial_agent=()=>{};function toSessionName(agentName){return agentName.replace(/\//g,"-")}function buildSessionTree(snapshot){let executorByPaneId=new Map;for(let exec3 of snapshot.executors)if(exec3.tmuxPaneId)executorByPaneId.set(exec3.tmuxPaneId,exec3);return snapshot.sessions.filter((s2)=>s2.name!=="genie-tui").map((session)=>sessionToNode(session,executorByPaneId))}function buildWorkspaceTree(input){let{agentNames,sessions:sessions2,executors}=input,sessionByName=new Map;for(let s2 of sessions2)if(s2.name!=="genie-tui")sessionByName.set(s2.name,s2);let executorByPaneId=new Map;for(let exec3 of executors)if(exec3.tmuxPaneId)executorByPaneId.set(exec3.tmuxPaneId,exec3);let executorsByAgent=new Map;for(let exec3 of executors){let name=exec3.agentName??exec3.metadata?.agentName;if(typeof name==="string"){let list2=executorsByAgent.get(name)??[];list2.push(exec3),executorsByAgent.set(name,list2)}}let{topLevel,subsByParent}=groupAgentNames(agentNames),nodes=topLevel.map((name)=>{let node=buildAgentNode(name,sessionByName.get(toSessionName(name)),executorsByAgent.get(name)??[],executorByPaneId);return appendSubAgentNodes(node,subsByParent.get(name),sessionByName,executorsByAgent,executorByPaneId),node}),claimedSessions=new Set(agentNames.map(toSessionName));for(let[name,session]of sessionByName)if(!claimedSessions.has(name))nodes.push(sessionToNode(session,executorByPaneId));return nodes}function resolvePreferredWindowIndex(session,agentName){let windows=[...session.windows].sort((a,b3)=>a.index-b3.index),hasClaudePane=(window2)=>window2.panes.some((pane)=>!pane.isDead&&(pane.command==="claude"||pane.title.includes("claude")));return(windows.find((window2)=>window2.active&&hasClaudePane(window2))??(agentName?windows.find((window2)=>window2.name===agentName):void 0)??windows.find((window2)=>hasClaudePane(window2))??windows.find((window2)=>window2.active&&window2.index!==0)??windows.find((window2)=>window2.index!==0))?.index}function hasLiveClaudeWindow(session){return session.windows.some((window2)=>window2.panes.some((pane)=>!pane.isDead&&(pane.command==="claude"||pane.title.includes("claude"))))}function groupAgentNames(names){let topLevel=[],subsByParent=new Map;for(let name of names){let slashIdx=name.indexOf("/");if(slashIdx===-1)topLevel.push(name);else{let parent=name.slice(0,slashIdx),subs=subsByParent.get(parent)??[];subs.push(name),subsByParent.set(parent,subs)}}return{topLevel,subsByParent}}function appendSubAgentNodes(parent,subs,sessionByName,executorsByAgent,executorByPaneId){if(!subs)return;for(let subName of subs){let subLabel=subName.slice(subName.indexOf("/")+1),subNode=buildAgentNode(subName,sessionByName.get(toSessionName(subName)),executorsByAgent.get(subName)??[],executorByPaneId);subNode.label=subLabel,subNode.depth=1,parent.children.push(subNode)}}function countClaudePanes(session){return session.windows.reduce((sum,w2)=>sum+w2.panes.filter((p)=>p.command==="claude"||p.title.includes("claude")).length,0)}function buildAgentNode(name,session,agentExecutors,executorByPaneId){let wsState=deriveWsAgentState(session,agentExecutors),attachWindowIndex=session?resolvePreferredWindowIndex(session,name):void 0,children=[];if(session)for(let win of session.windows){if(win.index===0)continue;children.push(windowToNode(session.name,win,executorByPaneId))}return{id:`agent:${name}`,type:"agent",label:name,depth:0,expanded:children.length>0,children,data:{sessionName:toSessionName(name),windowCount:session?session.windows.length:0,attachWindowIndex,provider:agentExecutors[0]?.provider??null},activePanes:session?countClaudePanes(session):0,agentState:agentExecutors.length>0?deriveExecutorState(agentExecutors):void 0,wsAgentState:wsState}}function deriveWsAgentState(session,agentExecutors){if(!session)return"stopped";if(hasLiveClaudeWindow(session))return"running";for(let exec3 of agentExecutors){if(exec3.state==="error"||exec3.state==="terminated")return"error";if(exec3.state==="spawning")return"spawning"}if(agentExecutors.length===0)return"stopped";return"running"}function deriveExecutorState(execs){for(let e of execs)if(e.state==="working")return"working";for(let e of execs)if(e.state==="permission")return"permission";for(let e of execs)if(e.state==="error"||e.state==="terminated")return"error";return"idle"}function sessionToNode(session,executorMap){let claudePanes=session.windows.reduce((sum,w2)=>sum+w2.panes.filter((p)=>p.command==="claude"||p.title.includes("claude")).length,0);return{id:`session:${session.name}`,type:"session",label:session.name,depth:0,expanded:!0,children:session.windows.map((w2)=>windowToNode(session.name,w2,executorMap)),data:{attached:session.attached,windowCount:session.windowCount},activePanes:claudePanes,agentState:void 0,wsAgentState:void 0}}function windowToNode(sessionName,window2,executorMap){let activePanes=window2.panes.filter((p)=>!p.isDead&&(p.command==="claude"||p.title.includes("claude"))).length;return{id:`window:${sessionName}:${window2.index}`,type:"window",label:window2.name,depth:1,expanded:!0,children:window2.panes.map((p)=>paneToNode(sessionName,window2.index,p,executorMap)),data:{active:window2.active,paneCount:window2.paneCount},activePanes,agentState:void 0,wsAgentState:void 0}}function paneToNode(sessionName,windowIndex,pane,executorMap){let executor=executorMap.get(pane.paneId),isClaude=pane.command==="claude"||pane.title.includes("claude");return{id:`pane:${pane.paneId}`,type:"pane",label:derivePaneLabel(pane,executor,isClaude),depth:2,expanded:!1,children:[],data:{command:pane.command,isDead:pane.isDead,pid:pane.pid,size:pane.size,paneId:pane.paneId,sessionName,windowIndex},activePanes:0,agentState:derivePaneState(pane,executor),wsAgentState:void 0}}function derivePaneLabel(pane,executor,isClaude){if(executor?.agentName&&executor?.team)return`${executor.team}/${executor.agentName}`;if(executor?.agentName)return executor.agentName;if(pane.title&&pane.title!==pane.command&&!isDefaultPaneTitle(pane.title))return pane.title;if(isClaude)return"claude";return pane.command}function isDefaultPaneTitle(title){let hostname2=__require("os").hostname();return title===hostname2||title.startsWith(`${hostname2}.`)||title.startsWith("\u2733")}function derivePaneState(pane,executor){if(pane.isDead)return"error";if(!executor)return;let s2=executor.state;if(s2==="working")return"working";if(s2==="idle"||s2==="spawning")return"idle";if(s2==="permission")return"permission";if(s2==="error"||s2==="terminated")return"error";return}function getSessionTarget(node){if(node.type==="agent"){let sessionName=node.data.sessionName,attachWindowIndex=node.data.attachWindowIndex;if(typeof attachWindowIndex==="number")return{sessionName,windowIndex:attachWindowIndex};let firstWindowChild=node.children.find((child)=>child.type==="window");if(firstWindowChild){let parts=firstWindowChild.id.split(":");return{sessionName,windowIndex:Number(parts[2])}}return{sessionName}}if(node.type==="session")return{sessionName:node.label};if(node.type==="window"){let parts=node.id.split(":");return{sessionName:parts[1],windowIndex:Number(parts[2])}}if(node.type==="pane"){let data=node.data;return{sessionName:data.sessionName,windowIndex:data.windowIndex}}return null}var palette,icons;var init_theme2=__esm(()=>{palette={purple:"#a855f7",violet:"#7c3aed",cyan:"#22d3ee",emerald:"#34d399",bg:"#1a1028",bgLight:"#241838",bgLighter:"#2e2048",text:"#e2e8f0",textDim:"#94a3b8",textMuted:"#64748b",border:"#414868",borderActive:"#7c3aed",scrollTrack:"#414868",scrollThumb:"#7aa2f7",active:"#22d3ee",success:"#34d399",warning:"#fbbf24",error:"#f87171",idle:"#94a3b8"},icons={org:"\u25C6",project:"\u25B8",projectOpen:"\u25BE",board:"\u2261",boardOpen:"\u2261",column:"\u2502",task:"\u25CB",taskActive:"\u25CF",taskDone:"\u2713",agent:"\u25B6",collapsed:"\u25B8",expanded:"\u25BE"}});function flattenTree(nodes){let result2=[];function walk(node,depth){if(result2.push({node,depth,visible:!0}),node.expanded)for(let child of node.children)walk(child,depth+1)}for(let node of nodes)walk(node,0);return result2}function toggleNode(nodes,id){return nodes.map((node)=>{if(node.id===id)return{...node,expanded:!node.expanded};return{...node,children:toggleNode(node.children,id)}})}var import_jsx_dev_runtime2;var init_jsx_dev_runtime=__esm(()=>{import_jsx_dev_runtime2=__toESM(require_react_jsx_dev_runtime_development(),1)});function CliPreviewLine({intent,hint=DEFAULT_HINT}){let cli=null,errorMessage=null;try{cli=buildSpawnInvocation(intent).cli}catch(err){errorMessage=err instanceof Error?err.message:String(err)}if(errorMessage!==null)return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.error,children:`\u26A0 ${errorMessage}`},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:hint},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.cyan,children:"\u25B6 "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:cli},void 0,!1,void 0,this)]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:hint},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var DEFAULT_HINT="Enter to run \xB7 Esc to cancel";var init_CliPreviewLine=__esm(()=>{init_spawn_invocation();init_theme2();init_jsx_dev_runtime()});async function defaultLoadAgents(){let{spawn:spawn5}=await import("child_process"),bunPath=process.execPath||"bun",genieBin=process.argv[1],[command,args]=genieBin&&genieBin!=="genie"?[bunPath,[genieBin,"dir","ls","--json"]]:["genie",["dir","ls","--json"]],stdout=await new Promise((resolve15,reject)=>{let child=spawn5(command,args,{stdio:["ignore","pipe","ignore"]}),chunks=[];child.stdout.on("data",(c)=>chunks.push(c)),child.on("error",reject),child.on("close",()=>resolve15(Buffer.concat(chunks).toString("utf-8")))});return JSON.parse(stdout).map((e)=>typeof e?.name==="string"?{name:e.name}:null).filter((e)=>e!==null)}function buildIntent(agentName,target){let intent={kind:"spawn-agent",name:agentName,session:target.session};if(target.window!==void 0&&target.window.length>0)intent.window=target.window;else intent.newWindow=!0;return intent}function applyFilter2(agents,filter){if(filter.length===0)return agents;let needle=filter.toLowerCase();return agents.filter((a)=>a.name.toLowerCase().includes(needle))}function handleControlKey(key,deps){if(key.name==="escape")return deps.onCancel(),!0;if(key.name==="up"&&deps.filteredLength>0)return deps.setSelectedIndex((prev)=>prev<=0?deps.filteredLength-1:prev-1),!0;if(key.name==="down"&&deps.filteredLength>0)return deps.setSelectedIndex((prev)=>prev>=deps.filteredLength-1?0:prev+1),!0;if((key.name==="return"||key.name==="enter")&&deps.highlighted)return deps.onConfirm(buildIntent(deps.highlighted.name,deps.target)),!0;if(key.name==="backspace")return deps.setFilter((prev)=>prev.slice(0,-1)),!0;if(key.name==="up"||key.name==="down"||key.name==="return"||key.name==="enter")return!0;return!1}function appendCharIfPrintable(key,setFilter){let ch=key.sequence??key.name;if(typeof ch==="string"&&ch.length===1&&ch>=" "&&ch!=="\x7F")setFilter((prev)=>prev+ch)}function AgentPicker({target,onConfirm,onCancel,loadAgents=defaultLoadAgents}){let[agents,setAgents]=import_react14.useState(null),[loadError,setLoadError]=import_react14.useState(null),[filter,setFilter]=import_react14.useState(""),[selectedIndex,setSelectedIndex]=import_react14.useState(0);import_react14.useEffect(()=>{let active=!0;return loadAgents().then((list2)=>{if(!active)return;setAgents(list2)}).catch((err)=>{if(!active)return;setLoadError(err instanceof Error?err.message:String(err)),setAgents([])}),()=>{active=!1}},[loadAgents]);let filtered=import_react14.useMemo(()=>agents?applyFilter2(agents,filter):[],[agents,filter]);import_react14.useEffect(()=>{if(filtered.length===0){if(selectedIndex!==0)setSelectedIndex(0);return}if(selectedIndex>=filtered.length)setSelectedIndex(filtered.length-1)},[filtered.length,selectedIndex]);let highlighted=filtered[selectedIndex],previewIntent=highlighted?buildIntent(highlighted.name,target):null,handleKey=import_react14.useCallback((key)=>{if(handleControlKey(key,{onCancel,onConfirm,target,highlighted,filteredLength:filtered.length,setSelectedIndex,setFilter}))return;if(key.ctrl||key.meta)return;appendCharIfPrintable(key,setFilter)},[filtered.length,highlighted,onCancel,onConfirm,target]);useKeyboard(handleKey);let targetLabel=target.window?target.window:target.session,modeHint=target.window?"in window":"new window in session",statusText=agents===null?"Loading agents\u2026":loadError!==null?`Load failed: ${loadError}`:null;return import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:"#0a0a0a",children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderStyle:"rounded",borderColor:palette.violet,backgroundColor:palette.bgLight,width:80,flexDirection:"column",paddingX:1,paddingY:1,gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:"Spawn here"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` \u2014 ${modeHint} `},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:targetLabel},void 0,!1,void 0,this)]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"Filter: "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:filter.length>0?filter:" "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:filter.length>0?"":"(type to narrow)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),statusText!==null?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:loadError!==null?palette.error:palette.textDim,children:statusText},void 0,!1,void 0,this)},void 0,!1,void 0,this):filtered.length===0?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"No agents registered"},void 0,!1,void 0,this)},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:filtered.map((agent,i2)=>import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:i2===selectedIndex?palette.violet:palette.textDim,children:i2===selectedIndex?"\u25B8 ":" "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:i2===selectedIndex?palette.text:palette.textDim,children:agent.name},void 0,!1,void 0,this)]},agent.name,!0,void 0,this))},void 0,!1,void 0,this),previewIntent!==null?import_jsx_dev_runtime2.jsxDEV(CliPreviewLine,{intent:previewIntent},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var import_react14;var init_AgentPicker=__esm(async()=>{init_theme2();init_CliPreviewLine();init_jsx_dev_runtime();await init_react();import_react14=__toESM(require_react_development(),1)});function ContextMenu({items,onAction,onClose,positionY=0}){let[selectedIndex,setSelectedIndex]=import_react16.useState(0),[inputMode,setInputMode]=import_react16.useState(!1),inputRef=import_react16.useRef(""),selectOptions=items.map((item)=>({name:`${item.label}${item.shortcut?` ${item.shortcut}`:""}`,description:"",value:item.action}));useKeyboard(import_react16.useCallback((key)=>{if(inputMode)return;if(key.name==="escape"){onClose();return}for(let item of items)if(item.shortcut&&key.name===item.shortcut.toLowerCase()){if(item.needsInput)setInputMode(!0),inputRef.current="",setSelectedIndex(items.indexOf(item));else onAction(item.action);return}},[inputMode,items,onAction,onClose]));let handleSelect=import_react16.useCallback((_index,option)=>{let value=option?.value;if(!value)return;if(items.find((i2)=>i2.action===value)?.needsInput){setInputMode(!0),inputRef.current="";return}onAction(value)},[items,onAction]),handleInputChange=import_react16.useCallback((v2)=>{inputRef.current=v2},[]),handleInputSubmit=import_react16.useCallback(()=>{let item=items[selectedIndex],value=inputRef.current.trim();if(item&&value)onAction(item.action,value);setInputMode(!1),inputRef.current=""},[items,selectedIndex,onAction]);if(items.length===0)return onClose(),null;return import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",onMouseDown:()=>onClose(),children:[positionY>0?import_jsx_dev_runtime2.jsxDEV("box",{height:positionY},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderStyle:"rounded",borderColor:palette.violet,backgroundColor:palette.bgLight,width:32,height:inputMode?items.length+5:items.length+2,flexDirection:"column",onMouseDown:(e)=>e.stopPropagation?.(),children:[import_jsx_dev_runtime2.jsxDEV("select",{options:selectOptions,selectedIndex,onSelect:handleSelect,onChange:(index)=>setSelectedIndex(index),focused:!inputMode,height:items.length,showDescription:!1,selectedBackgroundColor:palette.violet,selectedTextColor:"#ffffff"},void 0,!1,void 0,this),inputMode?import_jsx_dev_runtime2.jsxDEV("box",{paddingX:1,height:3,flexDirection:"column",children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:[items[selectedIndex]?.label??"Input",":"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("input",{onChange:handleInputChange,onSubmit:handleInputSubmit,placeholder:"Type and press Enter...",focused:!0,width:28,backgroundColor:palette.bg,textColor:palette.text,placeholderColor:palette.textMuted},void 0,!1,void 0,this)]},void 0,!0,void 0,this):null]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var import_react16;var init_ContextMenu=__esm(async()=>{init_theme2();init_jsx_dev_runtime();await init_react();import_react16=__toESM(require_react_development(),1)});function buildRows(sessions2){let rows=[];for(let session of sessions2){if(session.name===TUI_SESSION2)continue;rows.push({kind:"session",sessionName:session.name,label:`${session.name} (new window)`});for(let win of session.windows){let windowLabel=win.name?` ${win.name}`:"";rows.push({kind:"window",sessionName:session.name,windowIndex:win.index,label:` ${session.name}:${win.index}${windowLabel}`})}}return rows}function pickFromRow(row){if(row.kind==="session")return{kind:"session",sessionName:row.sessionName};return{kind:"window",sessionName:row.sessionName,windowIndex:row.windowIndex}}function picksEqual(a,b3){if(a.kind==="session"&&b3.kind==="session")return a.sessionName===b3.sessionName;if(a.kind==="window"&&b3.kind==="window")return a.sessionName===b3.sessionName&&a.windowIndex===b3.windowIndex;return!1}function pickExists(pick,sessions2){let session=sessions2.find((s2)=>s2.name===pick.sessionName);if(!session)return!1;if(pick.kind==="session")return!0;return session.windows.some((w2)=>w2.index===pick.windowIndex)}function pickToIntent(agentName,pick){if(!pick)return{kind:"spawn-agent",name:agentName};if(pick.kind==="session")return{kind:"spawn-agent",name:agentName,session:pick.sessionName,newWindow:!0};return{kind:"spawn-agent",name:agentName,window:`${pick.sessionName}:${pick.windowIndex}`}}function pickLabel(pick){if(pick.kind==="session")return pick.sessionName;return`${pick.sessionName}:${pick.windowIndex}`}function SpawnTargetPicker({agentName,sessions:sessions2,onConfirm,onCancel}){let rows=import_react18.useMemo(()=>buildRows(sessions2),[sessions2]),[pick,setPick]=import_react18.useState(()=>rows[0]?pickFromRow(rows[0]):null),[staleError,setStaleError]=import_react18.useState(null);if(pick===null&&rows[0])setPick(pickFromRow(rows[0]));let selectedIndex=import_react18.useMemo(()=>{if(!pick)return-1;return rows.findIndex((r)=>picksEqual(pick,r))},[pick,rows]),movePick=import_react18.useCallback((delta)=>{if(rows.length===0)return;let next=((selectedIndex<0?0:selectedIndex)+delta+rows.length)%rows.length;setPick(pickFromRow(rows[next])),setStaleError(null)},[rows,selectedIndex]),handleEnter=import_react18.useCallback(()=>{if(!pick)return;if(!pickExists(pick,sessions2)){setStaleError(`Target "${pickLabel(pick)}" no longer exists \u2014 pick another.`);return}onConfirm(pickToIntent(agentName,pick))},[pick,sessions2,agentName,onConfirm]);useKeyboard(import_react18.useCallback((key)=>{let n=key.name;if(n==="escape"){onCancel();return}if(n==="enter"||n==="return"){handleEnter();return}if(n==="up"||n==="k")movePick(-1);else if(n==="down"||n==="j")movePick(1)},[onCancel,handleEnter,movePick]));let intent=import_react18.useMemo(()=>pickToIntent(agentName,pick),[agentName,pick]);return import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:"#0a0a0a",children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderStyle:"rounded",borderColor:palette.violet,backgroundColor:palette.bgLight,paddingX:2,paddingY:1,flexDirection:"column",width:60,gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:`Spawn "${agentName}" into\u2026`},void 0,!1,void 0,this)},void 0,!1,void 0,this),rows.length===0?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"No tmux sessions available. Press Esc to cancel."},void 0,!1,void 0,this)},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:rows.map((row,i2)=>import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:i2===selectedIndex?palette.cyan:palette.text,children:[i2===selectedIndex?"> ":" ",row.label]},void 0,!0,void 0,this)},`${row.kind}:${row.sessionName}:${row.kind==="window"?row.windowIndex:""}`,!1,void 0,this))},void 0,!1,void 0,this),staleError?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.error,children:`\u26A0 ${staleError}`},void 0,!1,void 0,this)},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV(CliPreviewLine,{intent},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var import_react18,TUI_SESSION2="genie-tui";var init_SpawnTargetPicker=__esm(async()=>{init_theme2();init_CliPreviewLine();init_jsx_dev_runtime();await init_react();import_react18=__toESM(require_react_development(),1)});var require_package=__commonJS((exports,module2)=>{module2.exports={name:"systeminformation",version:"5.31.5",description:"Advanced, lightweight system and OS information library",license:"MIT",author:"Sebastian Hildebrandt <hildebrandt@plus-innovations.com> (https://plus-innovations.com)",homepage:"https://systeminformation.io",main:"./lib/index.js",type:"commonjs",bin:{systeminformation:"lib/cli.js"},types:"./lib/index.d.ts",scripts:{test:"node ./test/test.js",testDeno:"deno run -A ./test/test.js"},files:["lib/"],keywords:["system information","sysinfo","monitor","monitoring","os","linux","osx","windows","freebsd","openbsd","netbsd","cpu","cpuload","physical cores","logical cores","processor","cores","threads","socket type","memory","file system","fsstats","diskio","block devices","netstats","network","network interfaces","network connections","network stats","iface","printer","processes","users","internet","battery","docker","docker stats","docker processes","graphics","graphic card","graphic controller","gpu","display","smart","disk layout","usb","audio","bluetooth","wifi","wifinetworks","virtual box","virtualbox","vm","backend","hardware","BIOS","chassis"],repository:{type:"git",url:"git+https://github.com/sebhildebrandt/systeminformation.git"},funding:{type:"Buy me a coffee",url:"https://www.buymeacoffee.com/systeminfo"},os:["darwin","linux","win32","freebsd","openbsd","netbsd","sunos","android"],engines:{node:">=8.0.0"}}});var require_util3=__commonJS((exports)=>{var os4=__require("os"),fs3=__require("fs"),path6=__require("path"),spawn5=__require("child_process").spawn,exec3=__require("child_process").exec,execSync18=__require("child_process").execSync,util4=__require("util"),_platform=process.platform,_linux=_platform==="linux"||_platform==="android",_darwin=_platform==="darwin",_windows=_platform==="win32",_freebsd=_platform==="freebsd",_openbsd=_platform==="openbsd",_netbsd=_platform==="netbsd",_cores=0,codepage="",_smartMonToolsInstalled=null,_rpi_cpuinfo=null,WINDIR=process.env.WINDIR||"C:\\Windows",_psChild,_psResult="",_psCmds=[],_psPersistent=!1,_powerShell="",_psToUTF8="$OutputEncoding = [System.Console]::OutputEncoding = [System.Console]::InputEncoding = [System.Text.Encoding]::UTF8 ; ",_psCmdStart="--###START###--",_psError="--ERROR--",_psCmdSeperator="--###ENDCMD###--",_psIdSeperator="--##ID##--",execOptsWin={windowsHide:!0,maxBuffer:104857600,encoding:"UTF-8",env:Object.assign({},process.env,{LANG:"en_US.UTF-8"})},execOptsLinux={maxBuffer:104857600,encoding:"UTF-8",stdio:["pipe","pipe","ignore"]};function toInt(value){let result2=parseInt(value,10);if(isNaN(result2))result2=0;return result2}function splitByNumber(str5){let numberStarted=!1,num="",cpart="";for(let c of str5)if(c>="0"&&c<="9"||numberStarted)numberStarted=!0,num+=c;else cpart+=c;return[cpart,num]}var stringObj=new String,stringReplace=new String().replace,stringToLower=new String().toLowerCase,stringToString=new String().toString,stringSubstr=new String().substr,stringSubstring=new String().substring,stringTrim=new String().trim,stringStartWith=new String().startsWith,mathMin=Math.min;function isFunction(functionToCheck){return functionToCheck&&{}.toString.call(functionToCheck)==="[object Function]"}function unique(obj){let uniques=[],stringify2={};for(let i2=0;i2<obj.length;i2++){let keys=Object.keys(obj[i2]);keys.sort((a,b3)=>{return a-b3});let str5="";for(let j2=0;j2<keys.length;j2++)str5+=JSON.stringify(keys[j2]),str5+=JSON.stringify(obj[i2][keys[j2]]);if(!{}.hasOwnProperty.call(stringify2,str5))uniques.push(obj[i2]),stringify2[str5]=!0}return uniques}function sortByKey(array,keys){return array.sort((a,b3)=>{let x2="",y2="";return keys.forEach((key)=>{x2=x2+a[key],y2=y2+b3[key]}),x2<y2?-1:x2>y2?1:0})}function cores(){if(_cores===0)_cores=os4.cpus().length;return _cores}function getValue(lines,property,separator,trimmed,lineMatch){separator=separator||":",property=property.toLowerCase(),trimmed=trimmed||!1,lineMatch=lineMatch||!1;let result2="";return lines.some((line)=>{let lineLower=line.toLowerCase().replace(/\t/g,"");if(trimmed)lineLower=lineLower.trim();if(lineLower.startsWith(property)&&(lineMatch?lineLower.match(property+separator)||lineLower.match(property+" "+separator):!0)){let parts=trimmed?line.trim().split(separator):line.split(separator);if(parts.length>=2)return parts.shift(),result2=parts.join(separator).trim(),!0}return!1}),result2}function decodeEscapeSequence(str5,base){return base=base||16,str5.replace(/\\x([0-9A-Fa-f]{2})/g,function(){return String.fromCharCode(parseInt(arguments[1],base))})}function detectSplit(str5){let seperator="",part=0;return str5.split("").forEach((element)=>{if(element>="0"&&element<="9"){if(part===1)part++}else{if(part===0)part++;if(part===1)seperator+=element}}),seperator}function parseTime(t2,pmDesignator){pmDesignator=pmDesignator||"",t2=t2.toUpperCase();let hour=0,min=0,splitter=detectSplit(t2),parts=t2.split(splitter);if(parts.length>=2){if(parts[2])parts[1]+=parts[2];let isPM=parts[1]&&parts[1].toLowerCase().indexOf("pm")>-1||parts[1].toLowerCase().indexOf("p.m.")>-1||parts[1].toLowerCase().indexOf("p. m.")>-1||parts[1].toLowerCase().indexOf("n")>-1||parts[1].toLowerCase().indexOf("ch")>-1||parts[1].toLowerCase().indexOf("\xF6s")>-1||pmDesignator&&parts[1].toLowerCase().indexOf(pmDesignator)>-1;return hour=parseInt(parts[0],10),min=parseInt(parts[1],10),hour=isPM&&hour<12?hour+12:hour,("0"+hour).substr(-2)+":"+("0"+min).substr(-2)}}function parseDateTime(dt,culture){let result2={date:"",time:""};culture=culture||{};let dateFormat=(culture.dateFormat||"").toLowerCase(),pmDesignator=culture.pmDesignator||"",parts=dt.split(" ");if(parts[0]){if(parts[0].indexOf("/")>=0){let dtparts=parts[0].split("/");if(dtparts.length===3)if(dtparts[0].length===4)result2.date=dtparts[0]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[2]).substr(-2);else if(dtparts[2].length===2)if(dateFormat.indexOf("/d/")>-1||dateFormat.indexOf("/dd/")>-1)result2.date="20"+dtparts[2]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[0]).substr(-2);else result2.date="20"+dtparts[2]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[0]).substr(-2);else if((dt.toLowerCase().indexOf("pm")>-1||dt.toLowerCase().indexOf("p.m.")>-1||dt.toLowerCase().indexOf("p. m.")>-1||dt.toLowerCase().indexOf("am")>-1||dt.toLowerCase().indexOf("a.m.")>-1||dt.toLowerCase().indexOf("a. m.")>-1||dateFormat.indexOf("/d/")>-1||dateFormat.indexOf("/dd/")>-1)&&dateFormat.indexOf("dd/")!==0)result2.date=dtparts[2]+"-"+("0"+dtparts[0]).substr(-2)+"-"+("0"+dtparts[1]).substr(-2);else result2.date=dtparts[2]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[0]).substr(-2)}if(parts[0].indexOf(".")>=0){let dtparts=parts[0].split(".");if(dtparts.length===3)if(dateFormat.indexOf(".d.")>-1||dateFormat.indexOf(".dd.")>-1)result2.date=dtparts[2]+"-"+("0"+dtparts[0]).substr(-2)+"-"+("0"+dtparts[1]).substr(-2);else result2.date=dtparts[2]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[0]).substr(-2)}if(parts[0].indexOf("-")>=0){let dtparts=parts[0].split("-");if(dtparts.length===3)result2.date=dtparts[0]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[2]).substr(-2)}}if(parts[1]){parts.shift();let time=parts.join(" ");result2.time=parseTime(time,pmDesignator)}return result2}function parseHead(head,rights){let space=rights>0,count=1,from=0,to=0,result2=[];for(let i2=0;i2<head.length;i2++)if(count<=rights){if(/\s/.test(head[i2])&&!space)to=i2-1,result2.push({from,to:to+1,cap:head.substring(from,to+1)}),from=to+2,count++;space=head[i2]===" "}else{if(!/\s/.test(head[i2])&&space){if(to=i2-1,from<to)result2.push({from,to,cap:head.substring(from,to)});from=to+1,count++}space=head[i2]===" "}to=5000,result2.push({from,to,cap:head.substring(from,to)});let len=result2.length;for(let i2=0;i2<len;i2++)if(result2[i2].cap.replace(/\s/g,"").length===0){if(i2+1<len)result2[i2].to=result2[i2+1].to,result2[i2].cap=result2[i2].cap+result2[i2+1].cap,result2.splice(i2+1,1),len=len-1}return result2}function findObjectByKey(array,key,value){for(let i2=0;i2<array.length;i2++)if(array[i2][key]===value)return i2;return-1}function getPowershell(){if(_powerShell="powershell.exe",_windows){let defaultPath=`${WINDIR}\\system32\\WindowsPowerShell\\v1.0\\powershell.exe`;if(fs3.existsSync(defaultPath))_powerShell=defaultPath}}function getVboxmanage(){return _windows?`"${process.env.VBOX_INSTALL_PATH||process.env.VBOX_MSI_INSTALL_PATH}\\VBoxManage.exe"`:"vboxmanage"}function powerShellProceedResults(data){let id="",parts,res="";if(data.indexOf(_psCmdStart)>=0){parts=data.split(_psCmdStart);let parts2=parts[1].split(_psIdSeperator);if(id=parts2[0],parts2.length>1)data=parts2.slice(1).join(_psIdSeperator)}if(data.indexOf(_psCmdSeperator)>=0)parts=data.split(_psCmdSeperator),res=parts[0];let remove=-1;for(let i2=0;i2<_psCmds.length;i2++)if(_psCmds[i2].id===id)remove=i2,_psCmds[i2].callback(res);if(remove>=0)_psCmds.splice(remove,1)}function powerShellStart(){if(!_psChild){if(_psChild=spawn5(_powerShell,["-NoProfile","-NoLogo","-InputFormat","Text","-NoExit","-Command","-"],{stdio:"pipe",windowsHide:!0,maxBuffer:104857600,encoding:"UTF-8",env:Object.assign({},process.env,{LANG:"en_US.UTF-8"})}),_psChild&&_psChild.pid)_psPersistent=!0,_psChild.stdout.on("data",(data)=>{if(_psResult=_psResult+data.toString("utf8"),data.indexOf(_psCmdSeperator)>=0)powerShellProceedResults(_psResult),_psResult=""}),_psChild.stderr.on("data",()=>{powerShellProceedResults(_psResult+_psError)}),_psChild.on("error",()=>{powerShellProceedResults(_psResult+_psError)}),_psChild.on("close",()=>{if(_psChild)_psChild.kill()})}}function powerShellRelease(){try{if(_psChild)_psChild.stdin.write("exit"+os4.EOL),_psChild.stdin.end()}catch{if(_psChild)_psChild.kill()}_psPersistent=!1,_psChild=null}function powerShell(cmd){if(_psPersistent){let id=Math.random().toString(36).substring(2,12);return new Promise((resolve15)=>{process.nextTick(()=>{function callback(data){resolve15(data)}_psCmds.push({id,cmd,callback,start:new Date});try{if(_psChild&&_psChild.pid)_psChild.stdin.write(_psToUTF8+"echo "+_psCmdStart+id+_psIdSeperator+"; "+os4.EOL+cmd+os4.EOL+"echo "+_psCmdSeperator+os4.EOL)}catch{resolve15("")}})})}else{let result2="";return new Promise((resolve15)=>{process.nextTick(()=>{try{let osVersion=os4.release().split(".").map(Number),spanOptions=osVersion[0]<10?["-NoProfile","-NoLogo","-InputFormat","Text","-NoExit","-ExecutionPolicy","Unrestricted","-Command","-"]:["-NoProfile","-NoLogo","-InputFormat","Text","-ExecutionPolicy","Unrestricted","-Command",_psToUTF8+cmd],child=spawn5(_powerShell,spanOptions,{stdio:"pipe",windowsHide:!0,maxBuffer:104857600,encoding:"UTF-8",env:Object.assign({},process.env,{LANG:"en_US.UTF-8"})});if(child&&!child.pid)child.on("error",()=>{resolve15(result2)});if(child&&child.pid){if(child.stdout.on("data",(data)=>{result2=result2+data.toString("utf8")}),child.stderr.on("data",()=>{child.kill(),resolve15(result2)}),child.on("close",()=>{child.kill(),resolve15(result2)}),child.on("error",()=>{child.kill(),resolve15(result2)}),osVersion[0]<10)try{child.stdin.write(_psToUTF8+cmd+os4.EOL),child.stdin.write("exit"+os4.EOL),child.stdin.end()}catch{child.kill(),resolve15(result2)}}else resolve15(result2)}catch{resolve15(result2)}})})}}function execSafe(cmd,args,options){let result2="";return options=options||{},new Promise((resolve15)=>{process.nextTick(()=>{try{let child=spawn5(cmd,args,options);if(child&&!child.pid)child.on("error",()=>{resolve15(result2)});if(child&&child.pid)child.stdout.on("data",(data)=>{result2+=data.toString()}),child.on("close",()=>{child.kill(),resolve15(result2)}),child.on("error",()=>{child.kill(),resolve15(result2)});else resolve15(result2)}catch{resolve15(result2)}})})}function getCodepage(){if(_windows){if(!codepage)try{let parts=execSync18("chcp",execOptsWin).toString().split(`\r
3268
+ `)){if(!line)continue;let parts=line.split("|");if(parts.length<15)continue;let parsed=parsePaneLine(parts);if(!sessionMap.has(parsed.sessionName))sessionMap.set(parsed.sessionName,{...parsed.session,windows:[]});let winKey=`${parsed.sessionName}:${parsed.winIdxStr}`;if(!windowMap.has(winKey)){let win={...parsed.window,panes:[]};windowMap.set(winKey,win),sessionMap.get(parsed.sessionName)?.windows.push(win)}windowMap.get(winKey)?.panes.push(parsed.pane)}return Array.from(sessionMap.values()).sort((a,b3)=>a.name.localeCompare(b3.name))}function isPidAlive3(pid){try{return process.kill(pid,0),!0}catch{return!1}}function allClaudePanes(sessions2){return sessions2.flatMap((s2)=>s2.windows.flatMap((w2)=>w2.panes)).filter((p)=>p.command==="claude"||p.title.includes("claude"))}function detectGaps(executors,sessions2){let deadPidExecutors=executors.filter((e)=>e.pid!=null&&!isPidAlive3(e.pid)),executorPaneIds=new Set(executors.map((e)=>e.tmuxPaneId).filter(Boolean)),claudePanes=allClaudePanes(sessions2),orphanPanes=claudePanes.filter((p)=>!executorPaneIds.has(p.paneId)),linkedCount=executors.filter((e)=>e.tmuxPaneId&&!deadPidExecutors.some((d2)=>d2.id===e.id)).length,deadPaneCount=sessions2.flatMap((s2)=>s2.windows.flatMap((w2)=>w2.panes)).filter((p)=>p.isDead).length;return{deadPidExecutors,orphanPanes,linkedCount,totalExecutors:executors.length,totalClaudePanes:claudePanes.length,deadPaneCount}}async function collectDiagnostics(){let{loadExecutors:loadExecutors2,loadAssignments:loadAssignments2}=await Promise.resolve().then(() => exports_db2),sessions2=getTmuxInventory(),executors=await loadExecutors2(),executorIds=executors.map((e)=>e.id),assignments=await loadAssignments2(executorIds),gaps=detectGaps(executors,sessions2);if(gaps.deadPidExecutors.length>0){let{terminateExecutor:terminateExecutor2}=await Promise.resolve().then(() => (init_executor_registry(),exports_executor_registry)),{getConnection:getConnection2}=await Promise.resolve().then(() => (init_db(),exports_db)),sql=await getConnection2();await Promise.allSettled(gaps.deadPidExecutors.map(async(exec3)=>{if(await terminateExecutor2(exec3.id),exec3.agentId)await sql`UPDATE agents SET current_executor_id = NULL WHERE current_executor_id = ${exec3.id}`}))}return{sessions:sessions2,executors,assignments,gaps,timestamp:Date.now()}}var init_diagnostics=__esm(()=>{init_ensure_tmux()});import{existsSync as existsSync58,readFileSync as readFileSync37,unlinkSync as unlinkSync12}from"fs";import{homedir as homedir36}from"os";import{join as join71}from"path";function getInitialAgentFilePath(){let genieHome6=process.env.GENIE_HOME??join71(homedir36(),".genie");return join71(genieHome6,"tui-initial-agent")}function consumeInitialAgentSignal(){let filePath=getInitialAgentFilePath();if(!existsSync58(filePath))return;try{let agent=readFileSync37(filePath,"utf-8").trim();return unlinkSync12(filePath),agent||void 0}catch{return}}var init_initial_agent=()=>{};function toSessionName(agentName){return agentName.replace(/\//g,"-")}function buildSessionTree(snapshot){let executorByPaneId=new Map;for(let exec3 of snapshot.executors)if(exec3.tmuxPaneId)executorByPaneId.set(exec3.tmuxPaneId,exec3);return snapshot.sessions.filter((s2)=>s2.name!=="genie-tui").map((session)=>sessionToNode(session,executorByPaneId))}function buildWorkspaceTree(input){let{agentNames,sessions:sessions2,executors}=input,sessionByName=new Map;for(let s2 of sessions2)if(s2.name!=="genie-tui")sessionByName.set(s2.name,s2);let executorByPaneId=new Map;for(let exec3 of executors)if(exec3.tmuxPaneId)executorByPaneId.set(exec3.tmuxPaneId,exec3);let executorsByAgent=new Map;for(let exec3 of executors){let name=exec3.agentName??exec3.metadata?.agentName;if(typeof name==="string"){let list2=executorsByAgent.get(name)??[];list2.push(exec3),executorsByAgent.set(name,list2)}}let{topLevel,subsByParent}=groupAgentNames(agentNames),nodes=topLevel.map((name)=>{let node=buildAgentNode(name,sessionByName.get(toSessionName(name)),executorsByAgent.get(name)??[],executorByPaneId);return appendSubAgentNodes(node,subsByParent.get(name),sessionByName,executorsByAgent,executorByPaneId),node}),claimedSessions=new Set(agentNames.map(toSessionName));for(let[name,session]of sessionByName)if(!claimedSessions.has(name))nodes.push(sessionToNode(session,executorByPaneId));return nodes}function resolvePreferredWindowIndex(session,agentName){let windows=[...session.windows].sort((a,b3)=>a.index-b3.index),hasClaudePane=(window2)=>window2.panes.some((pane)=>!pane.isDead&&(pane.command==="claude"||pane.title.includes("claude")));return(windows.find((window2)=>window2.active&&hasClaudePane(window2))??(agentName?windows.find((window2)=>window2.name===agentName):void 0)??windows.find((window2)=>hasClaudePane(window2))??windows.find((window2)=>window2.active&&window2.index!==0)??windows.find((window2)=>window2.index!==0))?.index}function hasLiveClaudeWindow(session){return session.windows.some((window2)=>window2.panes.some((pane)=>!pane.isDead&&(pane.command==="claude"||pane.title.includes("claude"))))}function groupAgentNames(names){let topLevel=[],subsByParent=new Map;for(let name of names){let slashIdx=name.indexOf("/");if(slashIdx===-1)topLevel.push(name);else{let parent=name.slice(0,slashIdx),subs=subsByParent.get(parent)??[];subs.push(name),subsByParent.set(parent,subs)}}return{topLevel,subsByParent}}function appendSubAgentNodes(parent,subs,sessionByName,executorsByAgent,executorByPaneId){if(!subs)return;for(let subName of subs){let subLabel=subName.slice(subName.indexOf("/")+1),subNode=buildAgentNode(subName,sessionByName.get(toSessionName(subName)),executorsByAgent.get(subName)??[],executorByPaneId);subNode.label=subLabel,subNode.depth=1,parent.children.push(subNode)}}function countClaudePanes(session){return session.windows.reduce((sum,w2)=>sum+w2.panes.filter((p)=>p.command==="claude"||p.title.includes("claude")).length,0)}function buildAgentNode(name,session,agentExecutors,executorByPaneId){let wsState=deriveWsAgentState(session,agentExecutors),attachWindowIndex=session?resolvePreferredWindowIndex(session,name):void 0,children=[];if(session)for(let win of session.windows){if(win.index===0)continue;children.push(windowToNode(session.name,win,executorByPaneId))}return{id:`agent:${name}`,type:"agent",label:name,depth:0,expanded:children.length>0,children,data:{sessionName:toSessionName(name),windowCount:session?session.windows.length:0,attachWindowIndex,provider:agentExecutors[0]?.provider??null},activePanes:session?countClaudePanes(session):0,agentState:agentExecutors.length>0?deriveExecutorState(agentExecutors):void 0,wsAgentState:wsState}}function deriveWsAgentState(session,agentExecutors){if(!session)return"stopped";if(hasLiveClaudeWindow(session))return"running";for(let exec3 of agentExecutors){if(exec3.state==="error"||exec3.state==="terminated")return"error";if(exec3.state==="spawning")return"spawning"}if(agentExecutors.length===0)return"stopped";return"running"}function deriveExecutorState(execs){for(let e of execs)if(e.state==="working")return"working";for(let e of execs)if(e.state==="permission")return"permission";for(let e of execs)if(e.state==="error"||e.state==="terminated")return"error";return"idle"}function sessionToNode(session,executorMap){let claudePanes=session.windows.reduce((sum,w2)=>sum+w2.panes.filter((p)=>p.command==="claude"||p.title.includes("claude")).length,0);return{id:`session:${session.name}`,type:"session",label:session.name,depth:0,expanded:!0,children:session.windows.map((w2)=>windowToNode(session.name,w2,executorMap)),data:{attached:session.attached,windowCount:session.windowCount},activePanes:claudePanes,agentState:void 0,wsAgentState:void 0}}function windowToNode(sessionName,window2,executorMap){let activePanes=window2.panes.filter((p)=>!p.isDead&&(p.command==="claude"||p.title.includes("claude"))).length;return{id:`window:${sessionName}:${window2.index}`,type:"window",label:window2.name,depth:1,expanded:!0,children:window2.panes.map((p)=>paneToNode(sessionName,window2.index,p,executorMap)),data:{active:window2.active,paneCount:window2.paneCount},activePanes,agentState:void 0,wsAgentState:void 0}}function paneToNode(sessionName,windowIndex,pane,executorMap){let executor=executorMap.get(pane.paneId),isClaude=pane.command==="claude"||pane.title.includes("claude");return{id:`pane:${pane.paneId}`,type:"pane",label:derivePaneLabel(pane,executor,isClaude),depth:2,expanded:!1,children:[],data:{command:pane.command,isDead:pane.isDead,pid:pane.pid,size:pane.size,paneId:pane.paneId,sessionName,windowIndex},activePanes:0,agentState:derivePaneState(pane,executor),wsAgentState:void 0}}function derivePaneLabel(pane,executor,isClaude){if(executor?.agentName&&executor?.team)return`${executor.team}/${executor.agentName}`;if(executor?.agentName)return executor.agentName;if(pane.title&&pane.title!==pane.command&&!isDefaultPaneTitle(pane.title))return pane.title;if(isClaude)return"claude";return pane.command}function isDefaultPaneTitle(title){let hostname2=__require("os").hostname();return title===hostname2||title.startsWith(`${hostname2}.`)||title.startsWith("\u2733")}function derivePaneState(pane,executor){if(pane.isDead)return"error";if(!executor)return;let s2=executor.state;if(s2==="working")return"working";if(s2==="idle"||s2==="spawning")return"idle";if(s2==="permission")return"permission";if(s2==="error"||s2==="terminated")return"error";return}function getSessionTarget(node){if(node.type==="agent"){let sessionName=node.data.sessionName,attachWindowIndex=node.data.attachWindowIndex;if(typeof attachWindowIndex==="number")return{sessionName,windowIndex:attachWindowIndex};let firstWindowChild=node.children.find((child)=>child.type==="window");if(firstWindowChild){let parts=firstWindowChild.id.split(":");return{sessionName,windowIndex:Number(parts[2])}}return{sessionName}}if(node.type==="session")return{sessionName:node.label};if(node.type==="window"){let parts=node.id.split(":");return{sessionName:parts[1],windowIndex:Number(parts[2])}}if(node.type==="pane"){let data=node.data;return{sessionName:data.sessionName,windowIndex:data.windowIndex}}return null}var palette,icons;var init_theme2=__esm(()=>{palette={purple:"#a855f7",violet:"#7c3aed",cyan:"#22d3ee",emerald:"#34d399",bg:"#1a1028",bgLight:"#241838",bgLighter:"#2e2048",text:"#e2e8f0",textDim:"#94a3b8",textMuted:"#64748b",border:"#414868",borderActive:"#7c3aed",scrollTrack:"#414868",scrollThumb:"#7aa2f7",active:"#22d3ee",success:"#34d399",warning:"#fbbf24",error:"#f87171",idle:"#94a3b8"},icons={org:"\u25C6",project:"\u25B8",projectOpen:"\u25BE",board:"\u2261",boardOpen:"\u2261",column:"\u2502",task:"\u25CB",taskActive:"\u25CF",taskDone:"\u2713",agent:"\u25B6",collapsed:"\u25B8",expanded:"\u25BE"}});function flattenTree(nodes){let result2=[];function walk(node,depth){if(result2.push({node,depth,visible:!0}),node.expanded)for(let child of node.children)walk(child,depth+1)}for(let node of nodes)walk(node,0);return result2}function toggleNode(nodes,id){return nodes.map((node)=>{if(node.id===id)return{...node,expanded:!node.expanded};return{...node,children:toggleNode(node.children,id)}})}var import_jsx_dev_runtime2;var init_jsx_dev_runtime=__esm(()=>{import_jsx_dev_runtime2=__toESM(require_react_jsx_dev_runtime_development(),1)});function CliPreviewLine({intent,hint=DEFAULT_HINT}){let cli=null,errorMessage=null;try{cli=buildSpawnInvocation(intent).cli}catch(err){errorMessage=err instanceof Error?err.message:String(err)}if(errorMessage!==null)return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.error,children:`\u26A0 ${errorMessage}`},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:hint},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.cyan,children:"\u25B6 "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:cli},void 0,!1,void 0,this)]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:hint},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var DEFAULT_HINT="Enter to run \xB7 Esc to cancel";var init_CliPreviewLine=__esm(()=>{init_spawn_invocation();init_theme2();init_jsx_dev_runtime()});async function defaultLoadAgents(){let{spawn:spawn5}=await import("child_process"),bunPath=process.execPath||"bun",genieBin=process.argv[1],[command,args]=genieBin&&genieBin!=="genie"?[bunPath,[genieBin,"dir","ls","--json"]]:["genie",["dir","ls","--json"]],stdout=await new Promise((resolve15,reject)=>{let child=spawn5(command,args,{stdio:["ignore","pipe","ignore"]}),chunks=[];child.stdout.on("data",(c)=>chunks.push(c)),child.on("error",reject),child.on("close",()=>resolve15(Buffer.concat(chunks).toString("utf-8")))});return JSON.parse(stdout).map((e)=>typeof e?.name==="string"?{name:e.name}:null).filter((e)=>e!==null)}function buildIntent(agentName,target){let intent={kind:"spawn-agent",name:agentName,session:target.session};if(target.window!==void 0&&target.window.length>0)intent.window=target.window;else intent.newWindow=!0;return intent}function applyFilter2(agents,filter){if(filter.length===0)return agents;let needle=filter.toLowerCase();return agents.filter((a)=>a.name.toLowerCase().includes(needle))}function handleControlKey(key,deps){if(key.name==="escape")return deps.onCancel(),!0;if(key.name==="up"&&deps.filteredLength>0)return deps.setSelectedIndex((prev)=>prev<=0?deps.filteredLength-1:prev-1),!0;if(key.name==="down"&&deps.filteredLength>0)return deps.setSelectedIndex((prev)=>prev>=deps.filteredLength-1?0:prev+1),!0;if((key.name==="return"||key.name==="enter")&&deps.highlighted)return deps.onConfirm(buildIntent(deps.highlighted.name,deps.target)),!0;if(key.name==="backspace")return deps.setFilter((prev)=>prev.slice(0,-1)),!0;if(key.name==="up"||key.name==="down"||key.name==="return"||key.name==="enter")return!0;return!1}function appendCharIfPrintable(key,setFilter){let ch=key.sequence??key.name;if(typeof ch==="string"&&ch.length===1&&ch>=" "&&ch!=="\x7F")setFilter((prev)=>prev+ch)}function AgentPicker({target,onConfirm,onCancel,loadAgents=defaultLoadAgents}){let[agents,setAgents]=import_react14.useState(null),[loadError,setLoadError]=import_react14.useState(null),[filter,setFilter]=import_react14.useState(""),[selectedIndex,setSelectedIndex]=import_react14.useState(0);import_react14.useEffect(()=>{let active=!0;return loadAgents().then((list2)=>{if(!active)return;setAgents(list2)}).catch((err)=>{if(!active)return;setLoadError(err instanceof Error?err.message:String(err)),setAgents([])}),()=>{active=!1}},[loadAgents]);let filtered=import_react14.useMemo(()=>agents?applyFilter2(agents,filter):[],[agents,filter]);import_react14.useEffect(()=>{if(filtered.length===0){if(selectedIndex!==0)setSelectedIndex(0);return}if(selectedIndex>=filtered.length)setSelectedIndex(filtered.length-1)},[filtered.length,selectedIndex]);let highlighted=filtered[selectedIndex],previewIntent=highlighted?buildIntent(highlighted.name,target):null,handleKey=import_react14.useCallback((key)=>{if(handleControlKey(key,{onCancel,onConfirm,target,highlighted,filteredLength:filtered.length,setSelectedIndex,setFilter}))return;if(key.ctrl||key.meta)return;appendCharIfPrintable(key,setFilter)},[filtered.length,highlighted,onCancel,onConfirm,target]);useKeyboard(handleKey);let targetLabel=target.window?target.window:target.session,modeHint=target.window?"in window":"new window in session",statusText=agents===null?"Loading agents\u2026":loadError!==null?`Load failed: ${loadError}`:null;return import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:"#0a0a0a",children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderStyle:"rounded",borderColor:palette.violet,backgroundColor:palette.bgLight,width:80,flexDirection:"column",paddingX:1,paddingY:1,gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:"Spawn here"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` \u2014 ${modeHint} `},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:targetLabel},void 0,!1,void 0,this)]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"Filter: "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:filter.length>0?filter:" "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:filter.length>0?"":"(type to narrow)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),statusText!==null?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:loadError!==null?palette.error:palette.textDim,children:statusText},void 0,!1,void 0,this)},void 0,!1,void 0,this):filtered.length===0?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"No agents registered"},void 0,!1,void 0,this)},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:filtered.map((agent,i2)=>import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:i2===selectedIndex?palette.violet:palette.textDim,children:i2===selectedIndex?"\u25B8 ":" "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:i2===selectedIndex?palette.text:palette.textDim,children:agent.name},void 0,!1,void 0,this)]},agent.name,!0,void 0,this))},void 0,!1,void 0,this),previewIntent!==null?import_jsx_dev_runtime2.jsxDEV(CliPreviewLine,{intent:previewIntent},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var import_react14;var init_AgentPicker=__esm(async()=>{init_theme2();init_CliPreviewLine();init_jsx_dev_runtime();await init_react();import_react14=__toESM(require_react_development(),1)});function ContextMenu({items,onAction,onClose,positionY=0}){let[selectedIndex,setSelectedIndex]=import_react16.useState(0),[inputMode,setInputMode]=import_react16.useState(!1),inputRef=import_react16.useRef(""),selectOptions=items.map((item)=>({name:`${item.label}${item.shortcut?` ${item.shortcut}`:""}`,description:"",value:item.action}));useKeyboard(import_react16.useCallback((key)=>{if(inputMode)return;if(key.name==="escape"){onClose();return}for(let item of items)if(item.shortcut&&key.name===item.shortcut.toLowerCase()){if(item.needsInput)setInputMode(!0),inputRef.current="",setSelectedIndex(items.indexOf(item));else onAction(item.action);return}},[inputMode,items,onAction,onClose]));let handleSelect=import_react16.useCallback((_index,option)=>{let value=option?.value;if(!value)return;if(items.find((i2)=>i2.action===value)?.needsInput){setInputMode(!0),inputRef.current="";return}onAction(value)},[items,onAction]),handleInputChange=import_react16.useCallback((v2)=>{inputRef.current=v2},[]),handleInputSubmit=import_react16.useCallback(()=>{let item=items[selectedIndex],value=inputRef.current.trim();if(item&&value)onAction(item.action,value);setInputMode(!1),inputRef.current=""},[items,selectedIndex,onAction]);if(items.length===0)return onClose(),null;return import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",onMouseDown:()=>onClose(),children:[positionY>0?import_jsx_dev_runtime2.jsxDEV("box",{height:positionY},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderStyle:"rounded",borderColor:palette.violet,backgroundColor:palette.bgLight,width:32,height:inputMode?items.length+5:items.length+2,flexDirection:"column",onMouseDown:(e)=>e.stopPropagation?.(),children:[import_jsx_dev_runtime2.jsxDEV("select",{options:selectOptions,selectedIndex,onSelect:handleSelect,onChange:(index)=>setSelectedIndex(index),focused:!inputMode,height:items.length,showDescription:!1,selectedBackgroundColor:palette.violet,selectedTextColor:"#ffffff"},void 0,!1,void 0,this),inputMode?import_jsx_dev_runtime2.jsxDEV("box",{paddingX:1,height:3,flexDirection:"column",children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:[items[selectedIndex]?.label??"Input",":"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("input",{onChange:handleInputChange,onSubmit:handleInputSubmit,placeholder:"Type and press Enter...",focused:!0,width:28,backgroundColor:palette.bg,textColor:palette.text,placeholderColor:palette.textMuted},void 0,!1,void 0,this)]},void 0,!0,void 0,this):null]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var import_react16;var init_ContextMenu=__esm(async()=>{init_theme2();init_jsx_dev_runtime();await init_react();import_react16=__toESM(require_react_development(),1)});function buildRows(sessions2){let rows=[];for(let session of sessions2){if(session.name===TUI_SESSION2)continue;rows.push({kind:"session",sessionName:session.name,label:`${session.name} (new window)`});for(let win of session.windows){let windowLabel=win.name?` ${win.name}`:"";rows.push({kind:"window",sessionName:session.name,windowIndex:win.index,label:` ${session.name}:${win.index}${windowLabel}`})}}return rows}function pickFromRow(row){if(row.kind==="session")return{kind:"session",sessionName:row.sessionName};return{kind:"window",sessionName:row.sessionName,windowIndex:row.windowIndex}}function picksEqual(a,b3){if(a.kind==="session"&&b3.kind==="session")return a.sessionName===b3.sessionName;if(a.kind==="window"&&b3.kind==="window")return a.sessionName===b3.sessionName&&a.windowIndex===b3.windowIndex;return!1}function pickExists(pick,sessions2){let session=sessions2.find((s2)=>s2.name===pick.sessionName);if(!session)return!1;if(pick.kind==="session")return!0;return session.windows.some((w2)=>w2.index===pick.windowIndex)}function pickToIntent(agentName,pick){if(!pick)return{kind:"spawn-agent",name:agentName};if(pick.kind==="session")return{kind:"spawn-agent",name:agentName,session:pick.sessionName,newWindow:!0};return{kind:"spawn-agent",name:agentName,window:`${pick.sessionName}:${pick.windowIndex}`}}function pickLabel(pick){if(pick.kind==="session")return pick.sessionName;return`${pick.sessionName}:${pick.windowIndex}`}function SpawnTargetPicker({agentName,sessions:sessions2,onConfirm,onCancel}){let rows=import_react18.useMemo(()=>buildRows(sessions2),[sessions2]),[pick,setPick]=import_react18.useState(()=>rows[0]?pickFromRow(rows[0]):null),[staleError,setStaleError]=import_react18.useState(null);if(pick===null&&rows[0])setPick(pickFromRow(rows[0]));let selectedIndex=import_react18.useMemo(()=>{if(!pick)return-1;return rows.findIndex((r)=>picksEqual(pick,r))},[pick,rows]),movePick=import_react18.useCallback((delta)=>{if(rows.length===0)return;let next=((selectedIndex<0?0:selectedIndex)+delta+rows.length)%rows.length;setPick(pickFromRow(rows[next])),setStaleError(null)},[rows,selectedIndex]),handleEnter=import_react18.useCallback(()=>{if(!pick)return;if(!pickExists(pick,sessions2)){setStaleError(`Target "${pickLabel(pick)}" no longer exists \u2014 pick another.`);return}onConfirm(pickToIntent(agentName,pick))},[pick,sessions2,agentName,onConfirm]);useKeyboard(import_react18.useCallback((key)=>{let n=key.name;if(n==="escape"){onCancel();return}if(n==="enter"||n==="return"){handleEnter();return}if(n==="up"||n==="k")movePick(-1);else if(n==="down"||n==="j")movePick(1)},[onCancel,handleEnter,movePick]));let intent=import_react18.useMemo(()=>pickToIntent(agentName,pick),[agentName,pick]);return import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:"#0a0a0a",children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderStyle:"rounded",borderColor:palette.violet,backgroundColor:palette.bgLight,paddingX:2,paddingY:1,flexDirection:"column",width:60,gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:`Spawn "${agentName}" into\u2026`},void 0,!1,void 0,this)},void 0,!1,void 0,this),rows.length===0?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"No tmux sessions available. Press Esc to cancel."},void 0,!1,void 0,this)},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:rows.map((row,i2)=>import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:i2===selectedIndex?palette.cyan:palette.text,children:[i2===selectedIndex?"> ":" ",row.label]},void 0,!0,void 0,this)},`${row.kind}:${row.sessionName}:${row.kind==="window"?row.windowIndex:""}`,!1,void 0,this))},void 0,!1,void 0,this),staleError?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.error,children:`\u26A0 ${staleError}`},void 0,!1,void 0,this)},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV(CliPreviewLine,{intent},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var import_react18,TUI_SESSION2="genie-tui";var init_SpawnTargetPicker=__esm(async()=>{init_theme2();init_CliPreviewLine();init_jsx_dev_runtime();await init_react();import_react18=__toESM(require_react_development(),1)});var require_package=__commonJS((exports,module2)=>{module2.exports={name:"systeminformation",version:"5.31.5",description:"Advanced, lightweight system and OS information library",license:"MIT",author:"Sebastian Hildebrandt <hildebrandt@plus-innovations.com> (https://plus-innovations.com)",homepage:"https://systeminformation.io",main:"./lib/index.js",type:"commonjs",bin:{systeminformation:"lib/cli.js"},types:"./lib/index.d.ts",scripts:{test:"node ./test/test.js",testDeno:"deno run -A ./test/test.js"},files:["lib/"],keywords:["system information","sysinfo","monitor","monitoring","os","linux","osx","windows","freebsd","openbsd","netbsd","cpu","cpuload","physical cores","logical cores","processor","cores","threads","socket type","memory","file system","fsstats","diskio","block devices","netstats","network","network interfaces","network connections","network stats","iface","printer","processes","users","internet","battery","docker","docker stats","docker processes","graphics","graphic card","graphic controller","gpu","display","smart","disk layout","usb","audio","bluetooth","wifi","wifinetworks","virtual box","virtualbox","vm","backend","hardware","BIOS","chassis"],repository:{type:"git",url:"git+https://github.com/sebhildebrandt/systeminformation.git"},funding:{type:"Buy me a coffee",url:"https://www.buymeacoffee.com/systeminfo"},os:["darwin","linux","win32","freebsd","openbsd","netbsd","sunos","android"],engines:{node:">=8.0.0"}}});var require_util3=__commonJS((exports)=>{var os4=__require("os"),fs3=__require("fs"),path6=__require("path"),spawn5=__require("child_process").spawn,exec3=__require("child_process").exec,execSync18=__require("child_process").execSync,util4=__require("util"),_platform=process.platform,_linux=_platform==="linux"||_platform==="android",_darwin=_platform==="darwin",_windows=_platform==="win32",_freebsd=_platform==="freebsd",_openbsd=_platform==="openbsd",_netbsd=_platform==="netbsd",_cores=0,codepage="",_smartMonToolsInstalled=null,_rpi_cpuinfo=null,WINDIR=process.env.WINDIR||"C:\\Windows",_psChild,_psResult="",_psCmds=[],_psPersistent=!1,_powerShell="",_psToUTF8="$OutputEncoding = [System.Console]::OutputEncoding = [System.Console]::InputEncoding = [System.Text.Encoding]::UTF8 ; ",_psCmdStart="--###START###--",_psError="--ERROR--",_psCmdSeperator="--###ENDCMD###--",_psIdSeperator="--##ID##--",execOptsWin={windowsHide:!0,maxBuffer:104857600,encoding:"UTF-8",env:Object.assign({},process.env,{LANG:"en_US.UTF-8"})},execOptsLinux={maxBuffer:104857600,encoding:"UTF-8",stdio:["pipe","pipe","ignore"]};function toInt(value){let result2=parseInt(value,10);if(isNaN(result2))result2=0;return result2}function splitByNumber(str5){let numberStarted=!1,num="",cpart="";for(let c of str5)if(c>="0"&&c<="9"||numberStarted)numberStarted=!0,num+=c;else cpart+=c;return[cpart,num]}var stringObj=new String,stringReplace=new String().replace,stringToLower=new String().toLowerCase,stringToString=new String().toString,stringSubstr=new String().substr,stringSubstring=new String().substring,stringTrim=new String().trim,stringStartWith=new String().startsWith,mathMin=Math.min;function isFunction(functionToCheck){return functionToCheck&&{}.toString.call(functionToCheck)==="[object Function]"}function unique(obj){let uniques=[],stringify2={};for(let i2=0;i2<obj.length;i2++){let keys=Object.keys(obj[i2]);keys.sort((a,b3)=>{return a-b3});let str5="";for(let j2=0;j2<keys.length;j2++)str5+=JSON.stringify(keys[j2]),str5+=JSON.stringify(obj[i2][keys[j2]]);if(!{}.hasOwnProperty.call(stringify2,str5))uniques.push(obj[i2]),stringify2[str5]=!0}return uniques}function sortByKey(array,keys){return array.sort((a,b3)=>{let x2="",y2="";return keys.forEach((key)=>{x2=x2+a[key],y2=y2+b3[key]}),x2<y2?-1:x2>y2?1:0})}function cores(){if(_cores===0)_cores=os4.cpus().length;return _cores}function getValue(lines,property,separator,trimmed,lineMatch){separator=separator||":",property=property.toLowerCase(),trimmed=trimmed||!1,lineMatch=lineMatch||!1;let result2="";return lines.some((line)=>{let lineLower=line.toLowerCase().replace(/\t/g,"");if(trimmed)lineLower=lineLower.trim();if(lineLower.startsWith(property)&&(lineMatch?lineLower.match(property+separator)||lineLower.match(property+" "+separator):!0)){let parts=trimmed?line.trim().split(separator):line.split(separator);if(parts.length>=2)return parts.shift(),result2=parts.join(separator).trim(),!0}return!1}),result2}function decodeEscapeSequence(str5,base){return base=base||16,str5.replace(/\\x([0-9A-Fa-f]{2})/g,function(){return String.fromCharCode(parseInt(arguments[1],base))})}function detectSplit(str5){let seperator="",part=0;return str5.split("").forEach((element)=>{if(element>="0"&&element<="9"){if(part===1)part++}else{if(part===0)part++;if(part===1)seperator+=element}}),seperator}function parseTime(t2,pmDesignator){pmDesignator=pmDesignator||"",t2=t2.toUpperCase();let hour=0,min=0,splitter=detectSplit(t2),parts=t2.split(splitter);if(parts.length>=2){if(parts[2])parts[1]+=parts[2];let isPM=parts[1]&&parts[1].toLowerCase().indexOf("pm")>-1||parts[1].toLowerCase().indexOf("p.m.")>-1||parts[1].toLowerCase().indexOf("p. m.")>-1||parts[1].toLowerCase().indexOf("n")>-1||parts[1].toLowerCase().indexOf("ch")>-1||parts[1].toLowerCase().indexOf("\xF6s")>-1||pmDesignator&&parts[1].toLowerCase().indexOf(pmDesignator)>-1;return hour=parseInt(parts[0],10),min=parseInt(parts[1],10),hour=isPM&&hour<12?hour+12:hour,("0"+hour).substr(-2)+":"+("0"+min).substr(-2)}}function parseDateTime(dt,culture){let result2={date:"",time:""};culture=culture||{};let dateFormat=(culture.dateFormat||"").toLowerCase(),pmDesignator=culture.pmDesignator||"",parts=dt.split(" ");if(parts[0]){if(parts[0].indexOf("/")>=0){let dtparts=parts[0].split("/");if(dtparts.length===3)if(dtparts[0].length===4)result2.date=dtparts[0]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[2]).substr(-2);else if(dtparts[2].length===2)if(dateFormat.indexOf("/d/")>-1||dateFormat.indexOf("/dd/")>-1)result2.date="20"+dtparts[2]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[0]).substr(-2);else result2.date="20"+dtparts[2]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[0]).substr(-2);else if((dt.toLowerCase().indexOf("pm")>-1||dt.toLowerCase().indexOf("p.m.")>-1||dt.toLowerCase().indexOf("p. m.")>-1||dt.toLowerCase().indexOf("am")>-1||dt.toLowerCase().indexOf("a.m.")>-1||dt.toLowerCase().indexOf("a. m.")>-1||dateFormat.indexOf("/d/")>-1||dateFormat.indexOf("/dd/")>-1)&&dateFormat.indexOf("dd/")!==0)result2.date=dtparts[2]+"-"+("0"+dtparts[0]).substr(-2)+"-"+("0"+dtparts[1]).substr(-2);else result2.date=dtparts[2]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[0]).substr(-2)}if(parts[0].indexOf(".")>=0){let dtparts=parts[0].split(".");if(dtparts.length===3)if(dateFormat.indexOf(".d.")>-1||dateFormat.indexOf(".dd.")>-1)result2.date=dtparts[2]+"-"+("0"+dtparts[0]).substr(-2)+"-"+("0"+dtparts[1]).substr(-2);else result2.date=dtparts[2]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[0]).substr(-2)}if(parts[0].indexOf("-")>=0){let dtparts=parts[0].split("-");if(dtparts.length===3)result2.date=dtparts[0]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[2]).substr(-2)}}if(parts[1]){parts.shift();let time=parts.join(" ");result2.time=parseTime(time,pmDesignator)}return result2}function parseHead(head,rights){let space=rights>0,count=1,from=0,to=0,result2=[];for(let i2=0;i2<head.length;i2++)if(count<=rights){if(/\s/.test(head[i2])&&!space)to=i2-1,result2.push({from,to:to+1,cap:head.substring(from,to+1)}),from=to+2,count++;space=head[i2]===" "}else{if(!/\s/.test(head[i2])&&space){if(to=i2-1,from<to)result2.push({from,to,cap:head.substring(from,to)});from=to+1,count++}space=head[i2]===" "}to=5000,result2.push({from,to,cap:head.substring(from,to)});let len=result2.length;for(let i2=0;i2<len;i2++)if(result2[i2].cap.replace(/\s/g,"").length===0){if(i2+1<len)result2[i2].to=result2[i2+1].to,result2[i2].cap=result2[i2].cap+result2[i2+1].cap,result2.splice(i2+1,1),len=len-1}return result2}function findObjectByKey(array,key,value){for(let i2=0;i2<array.length;i2++)if(array[i2][key]===value)return i2;return-1}function getPowershell(){if(_powerShell="powershell.exe",_windows){let defaultPath=`${WINDIR}\\system32\\WindowsPowerShell\\v1.0\\powershell.exe`;if(fs3.existsSync(defaultPath))_powerShell=defaultPath}}function getVboxmanage(){return _windows?`"${process.env.VBOX_INSTALL_PATH||process.env.VBOX_MSI_INSTALL_PATH}\\VBoxManage.exe"`:"vboxmanage"}function powerShellProceedResults(data){let id="",parts,res="";if(data.indexOf(_psCmdStart)>=0){parts=data.split(_psCmdStart);let parts2=parts[1].split(_psIdSeperator);if(id=parts2[0],parts2.length>1)data=parts2.slice(1).join(_psIdSeperator)}if(data.indexOf(_psCmdSeperator)>=0)parts=data.split(_psCmdSeperator),res=parts[0];let remove=-1;for(let i2=0;i2<_psCmds.length;i2++)if(_psCmds[i2].id===id)remove=i2,_psCmds[i2].callback(res);if(remove>=0)_psCmds.splice(remove,1)}function powerShellStart(){if(!_psChild){if(_psChild=spawn5(_powerShell,["-NoProfile","-NoLogo","-InputFormat","Text","-NoExit","-Command","-"],{stdio:"pipe",windowsHide:!0,maxBuffer:104857600,encoding:"UTF-8",env:Object.assign({},process.env,{LANG:"en_US.UTF-8"})}),_psChild&&_psChild.pid)_psPersistent=!0,_psChild.stdout.on("data",(data)=>{if(_psResult=_psResult+data.toString("utf8"),data.indexOf(_psCmdSeperator)>=0)powerShellProceedResults(_psResult),_psResult=""}),_psChild.stderr.on("data",()=>{powerShellProceedResults(_psResult+_psError)}),_psChild.on("error",()=>{powerShellProceedResults(_psResult+_psError)}),_psChild.on("close",()=>{if(_psChild)_psChild.kill()})}}function powerShellRelease(){try{if(_psChild)_psChild.stdin.write("exit"+os4.EOL),_psChild.stdin.end()}catch{if(_psChild)_psChild.kill()}_psPersistent=!1,_psChild=null}function powerShell(cmd){if(_psPersistent){let id=Math.random().toString(36).substring(2,12);return new Promise((resolve15)=>{process.nextTick(()=>{function callback(data){resolve15(data)}_psCmds.push({id,cmd,callback,start:new Date});try{if(_psChild&&_psChild.pid)_psChild.stdin.write(_psToUTF8+"echo "+_psCmdStart+id+_psIdSeperator+"; "+os4.EOL+cmd+os4.EOL+"echo "+_psCmdSeperator+os4.EOL)}catch{resolve15("")}})})}else{let result2="";return new Promise((resolve15)=>{process.nextTick(()=>{try{let osVersion=os4.release().split(".").map(Number),spanOptions=osVersion[0]<10?["-NoProfile","-NoLogo","-InputFormat","Text","-NoExit","-ExecutionPolicy","Unrestricted","-Command","-"]:["-NoProfile","-NoLogo","-InputFormat","Text","-ExecutionPolicy","Unrestricted","-Command",_psToUTF8+cmd],child=spawn5(_powerShell,spanOptions,{stdio:"pipe",windowsHide:!0,maxBuffer:104857600,encoding:"UTF-8",env:Object.assign({},process.env,{LANG:"en_US.UTF-8"})});if(child&&!child.pid)child.on("error",()=>{resolve15(result2)});if(child&&child.pid){if(child.stdout.on("data",(data)=>{result2=result2+data.toString("utf8")}),child.stderr.on("data",()=>{child.kill(),resolve15(result2)}),child.on("close",()=>{child.kill(),resolve15(result2)}),child.on("error",()=>{child.kill(),resolve15(result2)}),osVersion[0]<10)try{child.stdin.write(_psToUTF8+cmd+os4.EOL),child.stdin.write("exit"+os4.EOL),child.stdin.end()}catch{child.kill(),resolve15(result2)}}else resolve15(result2)}catch{resolve15(result2)}})})}}function execSafe(cmd,args,options){let result2="";return options=options||{},new Promise((resolve15)=>{process.nextTick(()=>{try{let child=spawn5(cmd,args,options);if(child&&!child.pid)child.on("error",()=>{resolve15(result2)});if(child&&child.pid)child.stdout.on("data",(data)=>{result2+=data.toString()}),child.on("close",()=>{child.kill(),resolve15(result2)}),child.on("error",()=>{child.kill(),resolve15(result2)});else resolve15(result2)}catch{resolve15(result2)}})})}function getCodepage(){if(_windows){if(!codepage)try{let parts=execSync18("chcp",execOptsWin).toString().split(`\r
3269
3269
  `)[0].split(":");codepage=parts.length>1?parts[1].replace(".","").trim():""}catch{codepage="437"}return codepage}if(_linux||_darwin||_freebsd||_openbsd||_netbsd){if(!codepage)try{let parts=execSync18("echo $LANG",execOptsLinux).toString().split(`\r
3270
3270
  `)[0].split(".");if(codepage=parts.length>1?parts[1].trim():"",!codepage)codepage="UTF-8"}catch{codepage="UTF-8"}return codepage}}function smartMonToolsInstalled(){if(_smartMonToolsInstalled!==null)return _smartMonToolsInstalled;if(_smartMonToolsInstalled=!1,_windows)try{let pathArray=execSync18("WHERE smartctl 2>nul",execOptsWin).toString().split(`\r
3271
3271
  `);if(pathArray&&pathArray.length)_smartMonToolsInstalled=pathArray[0].indexOf(":\\")>=0;else _smartMonToolsInstalled=!1}catch{_smartMonToolsInstalled=!1}if(_linux||_darwin||_freebsd||_openbsd||_netbsd)try{_smartMonToolsInstalled=execSync18("which smartctl 2>/dev/null",execOptsLinux).toString().split(`\r
3272
3272
  `).length>0}catch{util4.noop()}return _smartMonToolsInstalled}function isRaspberry(cpuinfo){let PI_MODEL_NO=["BCM2708","BCM2709","BCM2710","BCM2711","BCM2712","BCM2835","BCM2836","BCM2837","BCM2837B0"];if(_rpi_cpuinfo!==null)cpuinfo=_rpi_cpuinfo;else if(cpuinfo===void 0)try{cpuinfo=fs3.readFileSync("/proc/cpuinfo",{encoding:"utf8"}).toString().split(`
3273
3273
  `),_rpi_cpuinfo=cpuinfo}catch{return!1}let hardware=getValue(cpuinfo,"hardware"),model=getValue(cpuinfo,"model");return hardware&&PI_MODEL_NO.indexOf(hardware)>-1||model&&model.indexOf("Raspberry Pi")>-1}function isRaspbian(){let osrelease=[];try{osrelease=fs3.readFileSync("/etc/os-release",{encoding:"utf8"}).toString().split(`
3274
3274
  `)}catch{return!1}let id=getValue(osrelease,"id","=");return id&&id.indexOf("raspbian")>-1}function execWin(cmd,opts,callback){if(!callback)callback=opts,opts=execOptsWin;let newCmd="chcp 65001 > nul && cmd /C "+cmd+" && chcp "+codepage+" > nul";exec3(newCmd,opts,(error2,stdout)=>{callback(error2,stdout)})}function darwinXcodeExists(){let cmdLineToolsExists=fs3.existsSync("/Library/Developer/CommandLineTools/usr/bin/"),xcodeAppExists=fs3.existsSync("/Applications/Xcode.app/Contents/Developer/Tools"),xcodeExists=fs3.existsSync("/Library/Developer/Xcode/");return cmdLineToolsExists||xcodeExists||xcodeAppExists}function nanoSeconds(){let time=process.hrtime();if(!Array.isArray(time)||time.length!==2)return 0;return+time[0]*1e9+ +time[1]}function countUniqueLines(lines,startingWith){startingWith=startingWith||"";let uniqueLines=[];return lines.forEach((line)=>{if(line.startsWith(startingWith)){if(uniqueLines.indexOf(line)===-1)uniqueLines.push(line)}}),uniqueLines.length}function countLines(lines,startingWith){startingWith=startingWith||"";let uniqueLines=[];return lines.forEach((line)=>{if(line.startsWith(startingWith))uniqueLines.push(line)}),uniqueLines.length}function sanitizeShellString(str5,strict){if(typeof strict>"u")strict=!1;let s2=str5||"",result2="",l=mathMin(s2.length,2000);for(let i2=0;i2<=l;i2++)if(!(s2[i2]===void 0||s2[i2]===">"||s2[i2]==="<"||s2[i2]==="*"||s2[i2]==="?"||s2[i2]==="["||s2[i2]==="]"||s2[i2]==="|"||s2[i2]==="\u02DA"||s2[i2]==="$"||s2[i2]===";"||s2[i2]==="&"||s2[i2]==="]"||s2[i2]==="#"||s2[i2]==="\\"||s2[i2]==="\t"||s2[i2]===`
3275
- `||s2[i2]==="\r"||s2[i2]==="'"||s2[i2]==="`"||s2[i2]==='"'||s2[i2].length>1||strict&&s2[i2]==="("||strict&&s2[i2]===")"||strict&&s2[i2]==="@"||strict&&s2[i2]===" "||strict&&s2[i2]==="{"||strict&&s2[i2]===";"||strict&&s2[i2]==="}"))result2=result2+s2[i2];return result2}function isPrototypePolluted(){let notPolluted=!0,st="";try{st.__proto__.replace=stringReplace,st.__proto__.toLowerCase=stringToLower,st.__proto__.toString=stringToString,st.__proto__.substr=stringSubstr,st.__proto__.substring=stringSubstring,st.__proto__.trim=stringTrim,st.__proto__.startsWith=stringStartWith}catch(e){Object.setPrototypeOf(st,stringObj)}notPolluted=notPolluted||!1;let ms=Date.now();if(typeof ms==="number"&&ms>1600000000000){let l=ms%100+15;for(let i2=0;i2<l;i2++){let r=Math.random()*61.99999999+1,rs=parseInt(Math.floor(r).toString(),10),rs2=parseInt(r.toString().split(".")[0],10),q2=Math.random()*61.99999999+1,qs=parseInt(Math.floor(q2).toString(),10),qs2=parseInt(q2.toString().split(".")[0],10);notPolluted=notPolluted&&r!==q2,notPolluted=notPolluted&&rs===rs2&&qs===qs2,st+="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"[rs-1]}notPolluted=notPolluted&&st.length===l;let p=Math.random()*l*0.9999999999,stm=st.substr(0,p)+" "+st.substr(p,2000);try{stm.__proto__.replace=stringReplace}catch(e){Object.setPrototypeOf(stm,stringObj)}let sto=stm.replace(/ /g,"");notPolluted=notPolluted&&st===sto,p=Math.random()*l*0.9999999999,stm=st.substr(0,p)+"{"+st.substr(p,2000),sto=stm.replace(/{/g,""),notPolluted=notPolluted&&st===sto,p=Math.random()*l*0.9999999999,stm=st.substr(0,p)+"*"+st.substr(p,2000),sto=stm.replace(/\*/g,""),notPolluted=notPolluted&&st===sto,p=Math.random()*l*0.9999999999,stm=st.substr(0,p)+"$"+st.substr(p,2000),sto=stm.replace(/\$/g,""),notPolluted=notPolluted&&st===sto;let stl=st.toLowerCase();notPolluted=notPolluted&&stl.length===l&&stl[l-1]&&!stl[l];for(let i2=0;i2<l;i2++){let s1=st[i2];try{s1.__proto__.toLowerCase=stringToLower}catch{Object.setPrototypeOf(st,stringObj)}let s22=stl?stl[i2]:"",s1l=s1.toLowerCase();notPolluted=notPolluted&&s1l[0]===s22&&s1l[0]&&!s1l[1]}}return!notPolluted}function hex2bin(hex){return("00000000"+parseInt(hex,16).toString(2)).substr(-8)}function getFilesInPath(source){let{lstatSync:lstatSync2,readdirSync:readdirSync11}=fs3,join72=path6.join;function isDirectory2(source2){return lstatSync2(source2).isDirectory()}function isFile2(source2){return lstatSync2(source2).isFile()}function getDirectories(source2){return readdirSync11(source2).map((name)=>{return join72(source2,name)}).filter(isDirectory2)}function getFiles(source2){return readdirSync11(source2).map((name)=>{return join72(source2,name)}).filter(isFile2)}function getFilesRecursively(source2){try{return getDirectories(source2).map((dir)=>{return getFilesRecursively(dir)}).reduce((a,b3)=>{return a.concat(b3)},[]).concat(getFiles(source2))}catch{return[]}}if(fs3.existsSync(source))return getFilesRecursively(source);else return[]}function decodePiCpuinfo(lines){if(_rpi_cpuinfo===null)_rpi_cpuinfo=lines;else if(lines===void 0)lines=_rpi_cpuinfo;let oldRevisionCodes={"0002":{type:"B",revision:"1.0",memory:256,manufacturer:"Egoman",processor:"BCM2835"},"0003":{type:"B",revision:"1.0",memory:256,manufacturer:"Egoman",processor:"BCM2835"},"0004":{type:"B",revision:"2.0",memory:256,manufacturer:"Sony UK",processor:"BCM2835"},"0005":{type:"B",revision:"2.0",memory:256,manufacturer:"Qisda",processor:"BCM2835"},"0006":{type:"B",revision:"2.0",memory:256,manufacturer:"Egoman",processor:"BCM2835"},"0007":{type:"A",revision:"2.0",memory:256,manufacturer:"Egoman",processor:"BCM2835"},"0008":{type:"A",revision:"2.0",memory:256,manufacturer:"Sony UK",processor:"BCM2835"},"0009":{type:"A",revision:"2.0",memory:256,manufacturer:"Qisda",processor:"BCM2835"},"000d":{type:"B",revision:"2.0",memory:512,manufacturer:"Egoman",processor:"BCM2835"},"000e":{type:"B",revision:"2.0",memory:512,manufacturer:"Sony UK",processor:"BCM2835"},"000f":{type:"B",revision:"2.0",memory:512,manufacturer:"Egoman",processor:"BCM2835"},"0010":{type:"B+",revision:"1.2",memory:512,manufacturer:"Sony UK",processor:"BCM2835"},"0011":{type:"CM1",revision:"1.0",memory:512,manufacturer:"Sony UK",processor:"BCM2835"},"0012":{type:"A+",revision:"1.1",memory:256,manufacturer:"Sony UK",processor:"BCM2835"},"0013":{type:"B+",revision:"1.2",memory:512,manufacturer:"Embest",processor:"BCM2835"},"0014":{type:"CM1",revision:"1.0",memory:512,manufacturer:"Embest",processor:"BCM2835"},"0015":{type:"A+",revision:"1.1",memory:256,manufacturer:"512MB\tEmbest",processor:"BCM2835"}},processorList=["BCM2835","BCM2836","BCM2837","BCM2711","BCM2712"],manufacturerList=["Sony UK","Egoman","Embest","Sony Japan","Embest","Stadium"],typeList={"00":"A","01":"B","02":"A+","03":"B+","04":"2B","05":"Alpha (early prototype)","06":"CM1","08":"3B","09":"Zero","0a":"CM3","0c":"Zero W","0d":"3B+","0e":"3A+","0f":"Internal use only",10:"CM3+",11:"4B",12:"Zero 2 W",13:"400",14:"CM4",15:"CM4S",16:"Internal use only",17:"5",18:"CM5",19:"500/500+","1a":"CM5 Lite"},revisionCode=getValue(lines,"revision",":",!0),model=getValue(lines,"model:",":",!0),serial=getValue(lines,"serial",":",!0),result2={};if({}.hasOwnProperty.call(oldRevisionCodes,revisionCode))result2={model,serial,revisionCode,memory:oldRevisionCodes[revisionCode].memory,manufacturer:oldRevisionCodes[revisionCode].manufacturer,processor:oldRevisionCodes[revisionCode].processor,type:oldRevisionCodes[revisionCode].type,revision:oldRevisionCodes[revisionCode].revision};else{let revision=("00000000"+getValue(lines,"revision",":",!0).toLowerCase()).substr(-8),memSizeCode=parseInt(hex2bin(revision.substr(2,1)).substr(5,3),2)||0,manufacturer=manufacturerList[parseInt(revision.substr(3,1),10)],processor=processorList[parseInt(revision.substr(4,1),10)],typeCode=revision.substr(5,2);result2={model,serial,revisionCode,memory:256*Math.pow(2,memSizeCode),manufacturer,processor,type:{}.hasOwnProperty.call(typeList,typeCode)?typeList[typeCode]:"",revision:"1."+revision.substr(7,1)}}return result2}function getRpiGpu(cpuinfo){if(_rpi_cpuinfo===null&&cpuinfo!==void 0)_rpi_cpuinfo=cpuinfo;else if(cpuinfo===void 0&&_rpi_cpuinfo!==null)cpuinfo=_rpi_cpuinfo;else try{cpuinfo=fs3.readFileSync("/proc/cpuinfo",{encoding:"utf8"}).toString().split(`
3275
+ `||s2[i2]==="\r"||s2[i2]==="'"||s2[i2]==="`"||s2[i2]==='"'||s2[i2].length>1||strict&&s2[i2]==="("||strict&&s2[i2]===")"||strict&&s2[i2]==="@"||strict&&s2[i2]===" "||strict&&s2[i2]==="{"||strict&&s2[i2]===";"||strict&&s2[i2]==="}"))result2=result2+s2[i2];return result2}function isPrototypePolluted(){let notPolluted=!0,st="";try{st.__proto__.replace=stringReplace,st.__proto__.toLowerCase=stringToLower,st.__proto__.toString=stringToString,st.__proto__.substr=stringSubstr,st.__proto__.substring=stringSubstring,st.__proto__.trim=stringTrim,st.__proto__.startsWith=stringStartWith}catch(e){Object.setPrototypeOf(st,stringObj)}notPolluted=notPolluted||!1;let ms=Date.now();if(typeof ms==="number"&&ms>1600000000000){let l=ms%100+15;for(let i2=0;i2<l;i2++){let r=Math.random()*61.99999999+1,rs=parseInt(Math.floor(r).toString(),10),rs2=parseInt(r.toString().split(".")[0],10),q2=Math.random()*61.99999999+1,qs=parseInt(Math.floor(q2).toString(),10),qs2=parseInt(q2.toString().split(".")[0],10);notPolluted=notPolluted&&r!==q2,notPolluted=notPolluted&&rs===rs2&&qs===qs2,st+="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"[rs-1]}notPolluted=notPolluted&&st.length===l;let p=Math.random()*l*0.9999999999,stm=st.substr(0,p)+" "+st.substr(p,2000);try{stm.__proto__.replace=stringReplace}catch(e){Object.setPrototypeOf(stm,stringObj)}let sto=stm.replace(/ /g,"");notPolluted=notPolluted&&st===sto,p=Math.random()*l*0.9999999999,stm=st.substr(0,p)+"{"+st.substr(p,2000),sto=stm.replace(/{/g,""),notPolluted=notPolluted&&st===sto,p=Math.random()*l*0.9999999999,stm=st.substr(0,p)+"*"+st.substr(p,2000),sto=stm.replace(/\*/g,""),notPolluted=notPolluted&&st===sto,p=Math.random()*l*0.9999999999,stm=st.substr(0,p)+"$"+st.substr(p,2000),sto=stm.replace(/\$/g,""),notPolluted=notPolluted&&st===sto;let stl=st.toLowerCase();notPolluted=notPolluted&&stl.length===l&&stl[l-1]&&!stl[l];for(let i2=0;i2<l;i2++){let s1=st[i2];try{s1.__proto__.toLowerCase=stringToLower}catch{Object.setPrototypeOf(st,stringObj)}let s22=stl?stl[i2]:"",s1l=s1.toLowerCase();notPolluted=notPolluted&&s1l[0]===s22&&s1l[0]&&!s1l[1]}}return!notPolluted}function hex2bin(hex){return("00000000"+parseInt(hex,16).toString(2)).substr(-8)}function getFilesInPath(source){let{lstatSync:lstatSync2,readdirSync:readdirSync12}=fs3,join72=path6.join;function isDirectory2(source2){return lstatSync2(source2).isDirectory()}function isFile2(source2){return lstatSync2(source2).isFile()}function getDirectories(source2){return readdirSync12(source2).map((name)=>{return join72(source2,name)}).filter(isDirectory2)}function getFiles(source2){return readdirSync12(source2).map((name)=>{return join72(source2,name)}).filter(isFile2)}function getFilesRecursively(source2){try{return getDirectories(source2).map((dir)=>{return getFilesRecursively(dir)}).reduce((a,b3)=>{return a.concat(b3)},[]).concat(getFiles(source2))}catch{return[]}}if(fs3.existsSync(source))return getFilesRecursively(source);else return[]}function decodePiCpuinfo(lines){if(_rpi_cpuinfo===null)_rpi_cpuinfo=lines;else if(lines===void 0)lines=_rpi_cpuinfo;let oldRevisionCodes={"0002":{type:"B",revision:"1.0",memory:256,manufacturer:"Egoman",processor:"BCM2835"},"0003":{type:"B",revision:"1.0",memory:256,manufacturer:"Egoman",processor:"BCM2835"},"0004":{type:"B",revision:"2.0",memory:256,manufacturer:"Sony UK",processor:"BCM2835"},"0005":{type:"B",revision:"2.0",memory:256,manufacturer:"Qisda",processor:"BCM2835"},"0006":{type:"B",revision:"2.0",memory:256,manufacturer:"Egoman",processor:"BCM2835"},"0007":{type:"A",revision:"2.0",memory:256,manufacturer:"Egoman",processor:"BCM2835"},"0008":{type:"A",revision:"2.0",memory:256,manufacturer:"Sony UK",processor:"BCM2835"},"0009":{type:"A",revision:"2.0",memory:256,manufacturer:"Qisda",processor:"BCM2835"},"000d":{type:"B",revision:"2.0",memory:512,manufacturer:"Egoman",processor:"BCM2835"},"000e":{type:"B",revision:"2.0",memory:512,manufacturer:"Sony UK",processor:"BCM2835"},"000f":{type:"B",revision:"2.0",memory:512,manufacturer:"Egoman",processor:"BCM2835"},"0010":{type:"B+",revision:"1.2",memory:512,manufacturer:"Sony UK",processor:"BCM2835"},"0011":{type:"CM1",revision:"1.0",memory:512,manufacturer:"Sony UK",processor:"BCM2835"},"0012":{type:"A+",revision:"1.1",memory:256,manufacturer:"Sony UK",processor:"BCM2835"},"0013":{type:"B+",revision:"1.2",memory:512,manufacturer:"Embest",processor:"BCM2835"},"0014":{type:"CM1",revision:"1.0",memory:512,manufacturer:"Embest",processor:"BCM2835"},"0015":{type:"A+",revision:"1.1",memory:256,manufacturer:"512MB\tEmbest",processor:"BCM2835"}},processorList=["BCM2835","BCM2836","BCM2837","BCM2711","BCM2712"],manufacturerList=["Sony UK","Egoman","Embest","Sony Japan","Embest","Stadium"],typeList={"00":"A","01":"B","02":"A+","03":"B+","04":"2B","05":"Alpha (early prototype)","06":"CM1","08":"3B","09":"Zero","0a":"CM3","0c":"Zero W","0d":"3B+","0e":"3A+","0f":"Internal use only",10:"CM3+",11:"4B",12:"Zero 2 W",13:"400",14:"CM4",15:"CM4S",16:"Internal use only",17:"5",18:"CM5",19:"500/500+","1a":"CM5 Lite"},revisionCode=getValue(lines,"revision",":",!0),model=getValue(lines,"model:",":",!0),serial=getValue(lines,"serial",":",!0),result2={};if({}.hasOwnProperty.call(oldRevisionCodes,revisionCode))result2={model,serial,revisionCode,memory:oldRevisionCodes[revisionCode].memory,manufacturer:oldRevisionCodes[revisionCode].manufacturer,processor:oldRevisionCodes[revisionCode].processor,type:oldRevisionCodes[revisionCode].type,revision:oldRevisionCodes[revisionCode].revision};else{let revision=("00000000"+getValue(lines,"revision",":",!0).toLowerCase()).substr(-8),memSizeCode=parseInt(hex2bin(revision.substr(2,1)).substr(5,3),2)||0,manufacturer=manufacturerList[parseInt(revision.substr(3,1),10)],processor=processorList[parseInt(revision.substr(4,1),10)],typeCode=revision.substr(5,2);result2={model,serial,revisionCode,memory:256*Math.pow(2,memSizeCode),manufacturer,processor,type:{}.hasOwnProperty.call(typeList,typeCode)?typeList[typeCode]:"",revision:"1."+revision.substr(7,1)}}return result2}function getRpiGpu(cpuinfo){if(_rpi_cpuinfo===null&&cpuinfo!==void 0)_rpi_cpuinfo=cpuinfo;else if(cpuinfo===void 0&&_rpi_cpuinfo!==null)cpuinfo=_rpi_cpuinfo;else try{cpuinfo=fs3.readFileSync("/proc/cpuinfo",{encoding:"utf8"}).toString().split(`
3276
3276
  `),_rpi_cpuinfo=cpuinfo}catch{return!1}let rpi=decodePiCpuinfo(cpuinfo);if(rpi.type==="4B"||rpi.type==="CM4"||rpi.type==="CM4S"||rpi.type==="400")return"VideoCore VI";if(rpi.type==="5"||rpi.type==="500")return"VideoCore VII";return"VideoCore IV"}function promiseAll(promises){let resolvingPromises=promises.map((promise)=>new Promise((resolve15)=>{let payload=[,,];promise.then((result2)=>{payload[0]=result2}).catch((error2)=>{payload[1]=error2}).then(()=>{resolve15(payload)})})),errors3=[],results=[];return Promise.all(resolvingPromises).then((items)=>{return items.forEach((payload)=>{if(payload[1])errors3.push(payload[1]),results.push(null);else errors3.push(null),results.push(payload[0])}),{errors:errors3,results}})}function promisify3(nodeStyleFunction){return()=>{let args=Array.prototype.slice.call(arguments);return new Promise((resolve15,reject)=>{args.push((err,data)=>{if(err)reject(err);else resolve15(data)}),nodeStyleFunction.apply(null,args)})}}function promisifySave(nodeStyleFunction){return()=>{let args=Array.prototype.slice.call(arguments);return new Promise((resolve15)=>{args.push((err,data)=>{resolve15(data)}),nodeStyleFunction.apply(null,args)})}}function linuxVersion(){let result2="";if(_linux)try{result2=execSync18("uname -v",execOptsLinux).toString()}catch{result2=""}return result2}function plistParser(xmlStr){let tags=["array","dict","key","string","integer","date","real","data","boolean","arrayEmpty"],startStr="<plist version",pos=xmlStr.indexOf("<plist version"),len=xmlStr.length;while(xmlStr[pos]!==">"&&pos<len)pos++;let depth=0,inTagStart=!1,inTagContent=!1,inTagEnd=!1,metaData=[{tagStart:"",tagEnd:"",tagContent:"",key:"",data:null}],c="",cn=xmlStr[pos];while(pos<len){if(c=cn,pos+1<len)cn=xmlStr[pos+1];if(c==="<"){if(inTagContent=!1,cn==="/")inTagEnd=!0;else if(metaData[depth].tagStart){if(metaData[depth].tagContent="",!metaData[depth].data)metaData[depth].data=metaData[depth].tagStart==="array"?[]:{};depth++,metaData.push({tagStart:"",tagEnd:"",tagContent:"",key:null,data:null}),inTagStart=!0,inTagContent=!1}else if(!inTagStart)inTagStart=!0}else if(c===">"){if(metaData[depth].tagStart==="true/")inTagStart=!1,inTagEnd=!0,metaData[depth].tagStart="",metaData[depth].tagEnd="/boolean",metaData[depth].data=!0;if(metaData[depth].tagStart==="false/")inTagStart=!1,inTagEnd=!0,metaData[depth].tagStart="",metaData[depth].tagEnd="/boolean",metaData[depth].data=!1;if(metaData[depth].tagStart==="array/")inTagStart=!1,inTagEnd=!0,metaData[depth].tagStart="",metaData[depth].tagEnd="/arrayEmpty",metaData[depth].data=[];if(inTagContent)inTagContent=!1;if(inTagStart){if(inTagStart=!1,inTagContent=!0,metaData[depth].tagStart==="array")metaData[depth].data=[];if(metaData[depth].tagStart==="dict")metaData[depth].data={}}if(inTagEnd){if(inTagEnd=!1,metaData[depth].tagEnd&&tags.indexOf(metaData[depth].tagEnd.substr(1))>=0)if(metaData[depth].tagEnd==="/dict"||metaData[depth].tagEnd==="/array"){if(depth>1&&metaData[depth-2].tagStart==="array")metaData[depth-2].data.push(metaData[depth-1].data);if(depth>1&&metaData[depth-2].tagStart==="dict")metaData[depth-2].data[metaData[depth-1].key]=metaData[depth-1].data;depth--,metaData.pop(),metaData[depth].tagContent="",metaData[depth].tagStart="",metaData[depth].tagEnd=""}else{if(metaData[depth].tagEnd==="/key"&&metaData[depth].tagContent)metaData[depth].key=metaData[depth].tagContent;else{if(metaData[depth].tagEnd==="/real"&&metaData[depth].tagContent)metaData[depth].data=parseFloat(metaData[depth].tagContent)||0;if(metaData[depth].tagEnd==="/integer"&&metaData[depth].tagContent)metaData[depth].data=parseInt(metaData[depth].tagContent)||0;if(metaData[depth].tagEnd==="/string"&&metaData[depth].tagContent)metaData[depth].data=metaData[depth].tagContent||"";if(metaData[depth].tagEnd==="/boolean")metaData[depth].data=metaData[depth].tagContent||!1;if(metaData[depth].tagEnd==="/arrayEmpty")metaData[depth].data=metaData[depth].tagContent||[];if(depth>0&&metaData[depth-1].tagStart==="array")metaData[depth-1].data.push(metaData[depth].data);if(depth>0&&metaData[depth-1].tagStart==="dict")metaData[depth-1].data[metaData[depth].key]=metaData[depth].data}metaData[depth].tagContent="",metaData[depth].tagStart="",metaData[depth].tagEnd=""}metaData[depth].tagEnd="",inTagStart=!1,inTagContent=!1}}else{if(inTagStart)metaData[depth].tagStart+=c;if(inTagEnd)metaData[depth].tagEnd+=c;if(inTagContent)metaData[depth].tagContent+=c}pos++}return metaData[0].data}function strIsNumeric(str5){return typeof str5==="string"&&!isNaN(str5)&&!isNaN(parseFloat(str5))}function plistReader(output){let lines=output.split(`
3277
3277
  `);for(let i2=0;i2<lines.length;i2++){if(lines[i2].indexOf(" = ")>=0){let lineParts=lines[i2].split(" = ");if(lineParts[0]=lineParts[0].trim(),!lineParts[0].startsWith('"'))lineParts[0]='"'+lineParts[0]+'"';if(lineParts[1]=lineParts[1].trim(),lineParts[1].indexOf('"')===-1&&lineParts[1].endsWith(";")){let valueString=lineParts[1].substring(0,lineParts[1].length-1);if(!strIsNumeric(valueString))lineParts[1]=`"${valueString}";`}if(lineParts[1].indexOf('"')>=0&&lineParts[1].endsWith(";")){let valueString=lineParts[1].substring(0,lineParts[1].length-1).replace(/"/g,"");if(strIsNumeric(valueString))lineParts[1]=`${valueString};`}lines[i2]=lineParts.join(" : ")}if(lines[i2]=lines[i2].replace(/\(/g,"[").replace(/\)/g,"]").replace(/;/g,",").trim(),lines[i2].startsWith("}")&&lines[i2-1]&&lines[i2-1].endsWith(","))lines[i2-1]=lines[i2-1].substring(0,lines[i2-1].length-1)}output=lines.join("");let obj={};try{obj=JSON.parse(output)}catch(e){noop4()}return obj}function semverCompare(v1,v2){let res=0,parts1=v1.split("."),parts2=v2.split(".");if(parts1[0]<parts2[0])res=1;else if(parts1[0]>parts2[0])res=-1;else if(parts1[0]===parts2[0]&&parts1.length>=2&&parts2.length>=2){if(parts1[1]<parts2[1])res=1;else if(parts1[1]>parts2[1])res=-1;else if(parts1[1]===parts2[1]){if(parts1.length>=3&&parts2.length>=3){if(parts1[2]<parts2[2])res=1;else if(parts1[2]>parts2[2])res=-1}else if(parts2.length>=3)res=1}}return res}function getAppleModel(key){let list2=[{key:"Mac17,7",name:"MacBook Pro",size:"16-inch",processor:"M5 Max",year:"2026",additional:""},{key:"Mac17,6",name:"MacBook Pro",size:"14-inch",processor:"M5 Max",year:"2026",additional:""},{key:"Mac17,5",name:"MacBook Pro",size:"16-inch",processor:"M5 Pro",year:"2026",additional:""},{key:"Mac17,4",name:"MacBook Pro",size:"14-inch",processor:"M5 Pro",year:"2026",additional:""},{key:"Mac17,1",name:"MacBook Neo",size:"14-inch",processor:"A18 Pro",year:"2026",additional:""},{key:"Mac17,3",name:"MacBook Pro",size:"16-inch",processor:"M5",year:"2025",additional:""},{key:"Mac17,2",name:"MacBook Pro",size:"14-inch",processor:"M5",year:"2025",additional:""},{key:"Mac16,13",name:"MacBook Air",size:"15-inch",processor:"M4",year:"2025",additional:""},{key:"Mac16,12",name:"MacBook Air",size:"13-inch",processor:"M4",year:"2025",additional:""},{key:"Mac15,13",name:"MacBook Air",size:"15-inch",processor:"M3",year:"2024",additional:""},{key:"Mac15,12",name:"MacBook Air",size:"13-inch",processor:"M3",year:"2024",additional:""},{key:"Mac14,15",name:"MacBook Air",size:"15-inch",processor:"M2",year:"2024",additional:""},{key:"Mac14,2",name:"MacBook Air",size:"13-inch",processor:"M2",year:"2022",additional:""},{key:"MacBookAir10,1",name:"MacBook Air",size:"13-inch",processor:"M1",year:"2020",additional:""},{key:"MacBookAir9,1",name:"MacBook Air",size:"13-inch",processor:"",year:"2020",additional:""},{key:"MacBookAir8,2",name:"MacBook Air",size:"13-inch",processor:"",year:"2019",additional:""},{key:"MacBookAir8,1",name:"MacBook Air",size:"13-inch",processor:"",year:"2018",additional:""},{key:"MacBookAir7,2",name:"MacBook Air",size:"13-inch",processor:"",year:"2017",additional:""},{key:"MacBookAir7,2",name:"MacBook Air",size:"13-inch",processor:"",year:"Early 2015",additional:""},{key:"MacBookAir7,1",name:"MacBook Air",size:"11-inch",processor:"",year:"Early 2015",additional:""},{key:"MacBookAir6,2",name:"MacBook Air",size:"13-inch",processor:"",year:"Early 2014",additional:""},{key:"MacBookAir6,1",name:"MacBook Air",size:"11-inch",processor:"",year:"Early 2014",additional:""},{key:"MacBookAir6,2",name:"MacBook Air",size:"13-inch",processor:"",year:"Mid 2013",additional:""},{key:"MacBookAir6,1",name:"MacBook Air",size:"11-inch",processor:"",year:"Mid 2013",additional:""},{key:"MacBookAir5,2",name:"MacBook Air",size:"13-inch",processor:"",year:"Mid 2012",additional:""},{key:"MacBookAir5,1",name:"MacBook Air",size:"11-inch",processor:"",year:"Mid 2012",additional:""},{key:"MacBookAir4,2",name:"MacBook Air",size:"13-inch",processor:"",year:"Mid 2011",additional:""},{key:"MacBookAir4,1",name:"MacBook Air",size:"11-inch",processor:"",year:"Mid 2011",additional:""},{key:"MacBookAir3,2",name:"MacBook Air",size:"13-inch",processor:"",year:"Late 2010",additional:""},{key:"MacBookAir3,1",name:"MacBook Air",size:"11-inch",processor:"",year:"Late 2010",additional:""},{key:"MacBookAir2,1",name:"MacBook Air",size:"13-inch",processor:"",year:"Mid 2009",additional:""},{key:"Mac16,1",name:"MacBook Pro",size:"14-inch",processor:"M4",year:"2024",additional:""},{key:"Mac16,6",name:"MacBook Pro",size:"14-inch",processor:"M4 Pro",year:"2024",additional:""},{key:"Mac16,8",name:"MacBook Pro",size:"14-inch",processor:"M4 Max",year:"2024",additional:""},{key:"Mac16,5",name:"MacBook Pro",size:"16-inch",processor:"M4 Pro",year:"2024",additional:""},{key:"Mac16,6",name:"MacBook Pro",size:"16-inch",processor:"M4 Max",year:"2024",additional:""},{key:"Mac15,3",name:"MacBook Pro",size:"14-inch",processor:"M3",year:"Nov 2023",additional:""},{key:"Mac15,6",name:"MacBook Pro",size:"14-inch",processor:"M3 Pro",year:"Nov 2023",additional:""},{key:"Mac15,8",name:"MacBook Pro",size:"14-inch",processor:"M3 Pro",year:"Nov 2023",additional:""},{key:"Mac15,10",name:"MacBook Pro",size:"14-inch",processor:"M3 Max",year:"Nov 2023",additional:""},{key:"Mac15,7",name:"MacBook Pro",size:"16-inch",processor:"M3 Pro",year:"Nov 2023",additional:""},{key:"Mac15,9",name:"MacBook Pro",size:"16-inch",processor:"M3 Pro",year:"Nov 2023",additional:""},{key:"Mac15,11",name:"MacBook Pro",size:"16-inch",processor:"M3 Max",year:"Nov 2023",additional:""},{key:"Mac14,5",name:"MacBook Pro",size:"14-inch",processor:"M2 Max",year:"2023",additional:""},{key:"Mac14,9",name:"MacBook Pro",size:"14-inch",processor:"M2 Max",year:"2023",additional:""},{key:"Mac14,6",name:"MacBook Pro",size:"16-inch",processor:"M2 Max",year:"2023",additional:""},{key:"Mac14,10",name:"MacBook Pro",size:"16-inch",processor:"M2 Max",year:"2023",additional:""},{key:"Mac14,7",name:"MacBook Pro",size:"13-inch",processor:"M2",year:"2022",additional:""},{key:"MacBookPro18,3",name:"MacBook Pro",size:"14-inch",processor:"M1 Pro",year:"2021",additional:""},{key:"MacBookPro18,4",name:"MacBook Pro",size:"14-inch",processor:"M1 Max",year:"2021",additional:""},{key:"MacBookPro18,1",name:"MacBook Pro",size:"16-inch",processor:"M1 Pro",year:"2021",additional:""},{key:"MacBookPro18,2",name:"MacBook Pro",size:"16-inch",processor:"M1 Max",year:"2021",additional:""},{key:"MacBookPro17,1",name:"MacBook Pro",size:"13-inch",processor:"M1",year:"2020",additional:""},{key:"MacBookPro16,3",name:"MacBook Pro",size:"13-inch",processor:"",year:"2020",additional:"Two Thunderbolt 3 ports"},{key:"MacBookPro16,2",name:"MacBook Pro",size:"13-inch",processor:"",year:"2020",additional:"Four Thunderbolt 3 ports"},{key:"MacBookPro16,1",name:"MacBook Pro",size:"16-inch",processor:"",year:"2019",additional:""},{key:"MacBookPro16,4",name:"MacBook Pro",size:"16-inch",processor:"",year:"2019",additional:""},{key:"MacBookPro15,3",name:"MacBook Pro",size:"15-inch",processor:"",year:"2019",additional:""},{key:"MacBookPro15,2",name:"MacBook Pro",size:"13-inch",processor:"",year:"2019",additional:""},{key:"MacBookPro15,1",name:"MacBook Pro",size:"15-inch",processor:"",year:"2019",additional:""},{key:"MacBookPro15,4",name:"MacBook Pro",size:"13-inch",processor:"",year:"2019",additional:"Two Thunderbolt 3 ports"},{key:"MacBookPro15,1",name:"MacBook Pro",size:"15-inch",processor:"",year:"2018",additional:""},{key:"MacBookPro15,2",name:"MacBook Pro",size:"13-inch",processor:"",year:"2018",additional:"Four Thunderbolt 3 ports"},{key:"MacBookPro14,1",name:"MacBook Pro",size:"13-inch",processor:"",year:"2017",additional:"Two Thunderbolt 3 ports"},{key:"MacBookPro14,2",name:"MacBook Pro",size:"13-inch",processor:"",year:"2017",additional:"Four Thunderbolt 3 ports"},{key:"MacBookPro14,3",name:"MacBook Pro",size:"15-inch",processor:"",year:"2017",additional:""},{key:"MacBookPro13,1",name:"MacBook Pro",size:"13-inch",processor:"",year:"2016",additional:"Two Thunderbolt 3 ports"},{key:"MacBookPro13,2",name:"MacBook Pro",size:"13-inch",processor:"",year:"2016",additional:"Four Thunderbolt 3 ports"},{key:"MacBookPro13,3",name:"MacBook Pro",size:"15-inch",processor:"",year:"2016",additional:""},{key:"MacBookPro11,4",name:"MacBook Pro",size:"15-inch",processor:"",year:"Mid 2015",additional:""},{key:"MacBookPro11,5",name:"MacBook Pro",size:"15-inch",processor:"",year:"Mid 2015",additional:""},{key:"MacBookPro12,1",name:"MacBook Pro",size:"13-inch",processor:"",year:"Early 2015",additional:""},{key:"MacBookPro11,2",name:"MacBook Pro",size:"15-inch",processor:"",year:"Late 2013",additional:""},{key:"MacBookPro11,3",name:"MacBook Pro",size:"15-inch",processor:"",year:"Late 2013",additional:""},{key:"MacBookPro11,1",name:"MacBook Pro",size:"13-inch",processor:"",year:"Late 2013",additional:""},{key:"MacBookPro10,1",name:"MacBook Pro",size:"15-inch",processor:"",year:"Mid 2012",additional:""},{key:"MacBookPro10,2",name:"MacBook Pro",size:"13-inch",processor:"",year:"Late 2012",additional:""},{key:"MacBookPro9,1",name:"MacBook Pro",size:"15-inch",processor:"",year:"Mid 2012",additional:""},{key:"MacBookPro9,2",name:"MacBook Pro",size:"13-inch",processor:"",year:"Mid 2012",additional:""},{key:"MacBookPro8,3",name:"MacBook Pro",size:"17-inch",processor:"",year:"Early 2011",additional:""},{key:"MacBookPro8,2",name:"MacBook Pro",size:"15-inch",processor:"",year:"Early 2011",additional:""},{key:"MacBookPro8,1",name:"MacBook Pro",size:"13-inch",processor:"",year:"Early 2011",additional:""},{key:"MacBookPro6,1",name:"MacBook Pro",size:"17-inch",processor:"",year:"Mid 2010",additional:""},{key:"MacBookPro6,2",name:"MacBook Pro",size:"15-inch",processor:"",year:"Mid 2010",additional:""},{key:"MacBookPro7,1",name:"MacBook Pro",size:"13-inch",processor:"",year:"Mid 2010",additional:""},{key:"MacBookPro5,2",name:"MacBook Pro",size:"17-inch",processor:"",year:"Early 2009",additional:""},{key:"MacBookPro5,3",name:"MacBook Pro",size:"15-inch",processor:"",year:"Mid 2009",additional:""},{key:"MacBookPro5,5",name:"MacBook Pro",size:"13-inch",processor:"",year:"Mid 2009",additional:""},{key:"MacBookPro5,1",name:"MacBook Pro",size:"15-inch",processor:"",year:"Late 2008",additional:""},{key:"MacBookPro4,1",name:"MacBook Pro",size:"15-inch",processor:"",year:"Early 2008",additional:""},{key:"MacBook10,1",name:"MacBook",size:"12-inch",processor:"",year:"2017",additional:""},{key:"MacBook9,1",name:"MacBook",size:"12-inch",processor:"",year:"Early 2016",additional:""},{key:"MacBook8,1",name:"MacBook",size:"12-inch",processor:"",year:"Early 2015",additional:""},{key:"MacBook7,1",name:"MacBook",size:"13-inch",processor:"",year:"Mid 2010",additional:""},{key:"MacBook6,1",name:"MacBook",size:"13-inch",processor:"",year:"Late 2009",additional:""},{key:"MacBook5,2",name:"MacBook",size:"13-inch",processor:"",year:"Early 2009",additional:""},{key:"Mac14,13",name:"Mac Studio",size:"",processor:"M2 Max",year:"2023",additional:""},{key:"Mac14,14",name:"Mac Studio",size:"",processor:"M2 Ultra",year:"2023",additional:""},{key:"Mac15,14",name:"Mac Studio",size:"",processor:"M3 Ultra",year:"2025",additional:""},{key:"Mac16,9",name:"Mac Studio",size:"",processor:"M4 Max",year:"2025",additional:""},{key:"Mac13,1",name:"Mac Studio",size:"",processor:"M1 Max",year:"2022",additional:""},{key:"Mac13,2",name:"Mac Studio",size:"",processor:"M1 Ultra",year:"2022",additional:""},{key:"Mac16,11",name:"Mac mini",size:"",processor:"M4 Pro",year:"2024",additional:""},{key:"Mac16,10",name:"Mac mini",size:"",processor:"M4",year:"2024",additional:""},{key:"Mac14,3",name:"Mac mini",size:"",processor:"M2",year:"2023",additional:""},{key:"Mac14,12",name:"Mac mini",size:"",processor:"M2 Pro",year:"2023",additional:""},{key:"Macmini9,1",name:"Mac mini",size:"",processor:"M1",year:"2020",additional:""},{key:"Macmini8,1",name:"Mac mini",size:"",processor:"",year:"Late 2018",additional:""},{key:"Macmini7,1",name:"Mac mini",size:"",processor:"",year:"Late 2014",additional:""},{key:"Macmini6,1",name:"Mac mini",size:"",processor:"",year:"Late 2012",additional:""},{key:"Macmini6,2",name:"Mac mini",size:"",processor:"",year:"Late 2012",additional:""},{key:"Macmini5,1",name:"Mac mini",size:"",processor:"",year:"Mid 2011",additional:""},{key:"Macmini5,2",name:"Mac mini",size:"",processor:"",year:"Mid 2011",additional:""},{key:"Macmini4,1",name:"Mac mini",size:"",processor:"",year:"Mid 2010",additional:""},{key:"Macmini3,1",name:"Mac mini",size:"",processor:"",year:"Early 2009",additional:""},{key:"Mac16,3",name:"iMac",size:"24-inch",processor:"M4",year:"2024",additional:"Four ports"},{key:"Mac16,2",name:"iMac",size:"24-inch",processor:"M4",year:"2024",additional:"Two ports"},{key:"Mac15,5",name:"iMac",size:"24-inch",processor:"M3",year:"2023",additional:"Four ports"},{key:"Mac15,4",name:"iMac",size:"24-inch",processor:"M3",year:"2023",additional:"Two ports"},{key:"iMac21,1",name:"iMac",size:"24-inch",processor:"M1",year:"2021",additional:""},{key:"iMac21,2",name:"iMac",size:"24-inch",processor:"M1",year:"2021",additional:""},{key:"iMac20,1",name:"iMac",size:"27-inch",processor:"",year:"2020",additional:"Retina 5K"},{key:"iMac20,2",name:"iMac",size:"27-inch",processor:"",year:"2020",additional:"Retina 5K"},{key:"iMac19,1",name:"iMac",size:"27-inch",processor:"",year:"2019",additional:"Retina 5K"},{key:"iMac19,2",name:"iMac",size:"21.5-inch",processor:"",year:"2019",additional:"Retina 4K"},{key:"iMacPro1,1",name:"iMac Pro",size:"",processor:"",year:"2017",additional:""},{key:"iMac18,3",name:"iMac",size:"27-inch",processor:"",year:"2017",additional:"Retina 5K"},{key:"iMac18,2",name:"iMac",size:"21.5-inch",processor:"",year:"2017",additional:"Retina 4K"},{key:"iMac18,1",name:"iMac",size:"21.5-inch",processor:"",year:"2017",additional:""},{key:"iMac17,1",name:"iMac",size:"27-inch",processor:"",year:"Late 2015",additional:"Retina 5K"},{key:"iMac16,2",name:"iMac",size:"21.5-inch",processor:"",year:"Late 2015",additional:"Retina 4K"},{key:"iMac16,1",name:"iMac",size:"21.5-inch",processor:"",year:"Late 2015",additional:""},{key:"iMac15,1",name:"iMac",size:"27-inch",processor:"",year:"Late 2014",additional:"Retina 5K"},{key:"iMac14,4",name:"iMac",size:"21.5-inch",processor:"",year:"Mid 2014",additional:""},{key:"iMac14,2",name:"iMac",size:"27-inch",processor:"",year:"Late 2013",additional:""},{key:"iMac14,1",name:"iMac",size:"21.5-inch",processor:"",year:"Late 2013",additional:""},{key:"iMac13,2",name:"iMac",size:"27-inch",processor:"",year:"Late 2012",additional:""},{key:"iMac13,1",name:"iMac",size:"21.5-inch",processor:"",year:"Late 2012",additional:""},{key:"iMac12,2",name:"iMac",size:"27-inch",processor:"",year:"Mid 2011",additional:""},{key:"iMac12,1",name:"iMac",size:"21.5-inch",processor:"",year:"Mid 2011",additional:""},{key:"iMac11,3",name:"iMac",size:"27-inch",processor:"",year:"Mid 2010",additional:""},{key:"iMac11,2",name:"iMac",size:"21.5-inch",processor:"",year:"Mid 2010",additional:""},{key:"iMac10,1",name:"iMac",size:"21.5-inch",processor:"",year:"Late 2009",additional:""},{key:"iMac9,1",name:"iMac",size:"20-inch",processor:"",year:"Early 2009",additional:""},{key:"Mac14,8",name:"Mac Pro",size:"",processor:"",year:"2023",additional:""},{key:"Mac14,8",name:"Mac Pro",size:"",processor:"",year:"2023",additional:"Rack"},{key:"MacPro7,1",name:"Mac Pro",size:"",processor:"",year:"2019",additional:""},{key:"MacPro7,1",name:"Mac Pro",size:"",processor:"",year:"2019",additional:"Rack"},{key:"MacPro6,1",name:"Mac Pro",size:"",processor:"",year:"Late 2013",additional:""},{key:"MacPro5,1",name:"Mac Pro",size:"",processor:"",year:"Mid 2012",additional:""},{key:"MacPro5,1",name:"Mac Pro Server",size:"",processor:"",year:"Mid 2012",additional:"Server"},{key:"MacPro5,1",name:"Mac Pro",size:"",processor:"",year:"Mid 2010",additional:""},{key:"MacPro5,1",name:"Mac Pro Server",size:"",processor:"",year:"Mid 2010",additional:"Server"},{key:"MacPro4,1",name:"Mac Pro",size:"",processor:"",year:"Early 2009",additional:""}].filter((model)=>model.key===key);if(list2.length===0)return{key,model:"Apple",version:"Unknown"};let features=[];if(list2[0].size)features.push(list2[0].size);if(list2[0].processor)features.push(list2[0].processor);if(list2[0].year)features.push(list2[0].year);if(list2[0].additional)features.push(list2[0].additional);return{key,model:list2[0].name,version:list2[0].name+" ("+features.join(", ")+")"}}function checkWebsite(url,timeout=5000){let http=url.startsWith("https:")||url.indexOf(":443/")>0||url.indexOf(":8443/")>0?__require("https"):__require("http"),t2=Date.now();return new Promise((resolve15)=>{let request=http.get(url,(res)=>{res.on("data",()=>{}),res.on("end",()=>{resolve15({url,statusCode:res.statusCode,message:res.statusMessage,time:Date.now()-t2})})}).on("error",(e)=>{resolve15({url,statusCode:404,message:e.message,time:Date.now()-t2})}).setTimeout(timeout,()=>{request.destroy(),resolve15({url,statusCode:408,message:"Request Timeout",time:Date.now()-t2})})})}function cleanString(str5){return str5.replace(/To Be Filled By O.E.M./g,"")}function noop4(){}exports.toInt=toInt;exports.splitByNumber=splitByNumber;exports.execOptsWin=execOptsWin;exports.execOptsLinux=execOptsLinux;exports.getCodepage=getCodepage;exports.execWin=execWin;exports.isFunction=isFunction;exports.unique=unique;exports.sortByKey=sortByKey;exports.cores=cores;exports.getValue=getValue;exports.decodeEscapeSequence=decodeEscapeSequence;exports.parseDateTime=parseDateTime;exports.parseHead=parseHead;exports.findObjectByKey=findObjectByKey;exports.darwinXcodeExists=darwinXcodeExists;exports.getVboxmanage=getVboxmanage;exports.powerShell=powerShell;exports.powerShellStart=powerShellStart;exports.powerShellRelease=powerShellRelease;exports.execSafe=execSafe;exports.nanoSeconds=nanoSeconds;exports.countUniqueLines=countUniqueLines;exports.countLines=countLines;exports.noop=noop4;exports.isRaspberry=isRaspberry;exports.isRaspbian=isRaspbian;exports.sanitizeShellString=sanitizeShellString;exports.isPrototypePolluted=isPrototypePolluted;exports.decodePiCpuinfo=decodePiCpuinfo;exports.getRpiGpu=getRpiGpu;exports.promiseAll=promiseAll;exports.promisify=promisify3;exports.promisifySave=promisifySave;exports.smartMonToolsInstalled=smartMonToolsInstalled;exports.linuxVersion=linuxVersion;exports.plistParser=plistParser;exports.plistReader=plistReader;exports.stringObj=stringObj;exports.stringReplace=stringReplace;exports.stringToLower=stringToLower;exports.stringToString=stringToString;exports.stringSubstr=stringSubstr;exports.stringSubstring=stringSubstring;exports.stringTrim=stringTrim;exports.stringStartWith=stringStartWith;exports.mathMin=mathMin;exports.WINDIR=WINDIR;exports.getFilesInPath=getFilesInPath;exports.semverCompare=semverCompare;exports.getAppleModel=getAppleModel;exports.checkWebsite=checkWebsite;exports.cleanString=cleanString;exports.getPowershell=getPowershell});var require_osinfo=__commonJS((exports)=>{var os4=__require("os"),fs3=__require("fs"),util4=require_util3(),exec3=__require("child_process").exec,execSync18=__require("child_process").execSync,_platform=process.platform,_linux=_platform==="linux"||_platform==="android",_darwin=_platform==="darwin",_windows=_platform==="win32",_freebsd=_platform==="freebsd",_openbsd=_platform==="openbsd",_netbsd=_platform==="netbsd",_sunos=_platform==="sunos";function time(){let t2=new Date().toString().split(" "),timezoneName="";try{timezoneName=Intl.DateTimeFormat().resolvedOptions().timeZone}catch{timezoneName=t2.length>=7?t2.slice(6).join(" ").replace(/\(/g,"").replace(/\)/g,""):""}let result2={current:Date.now(),uptime:os4.uptime(),timezone:t2.length>=7?t2[5]:"",timezoneName};if(_darwin||_linux)try{let lines=execSync18("date +%Z && date +%z && ls -l /etc/localtime 2>/dev/null",util4.execOptsLinux).toString().split(os4.EOL);if(lines.length>3&&!lines[0])lines.shift();let timezone=lines[0]||"";if(timezone.startsWith("+")||timezone.startsWith("-"))timezone="GMT";return{current:Date.now(),uptime:os4.uptime(),timezone:lines[1]?timezone+lines[1]:timezone,timezoneName:lines[2]&&lines[2].indexOf("/zoneinfo/")>0?lines[2].split("/zoneinfo/")[1]||"":""}}catch{util4.noop()}return result2}exports.time=time;function getLogoFile(distro){distro=distro||"",distro=distro.toLowerCase();let result2=_platform;if(_windows)result2="windows";else if(distro.indexOf("mac os")!==-1||distro.indexOf("macos")!==-1)result2="apple";else if(distro.indexOf("arch")!==-1)result2="arch";else if(distro.indexOf("cachy")!==-1)result2="cachy";else if(distro.indexOf("centos")!==-1)result2="centos";else if(distro.indexOf("coreos")!==-1)result2="coreos";else if(distro.indexOf("debian")!==-1)result2="debian";else if(distro.indexOf("deepin")!==-1)result2="deepin";else if(distro.indexOf("elementary")!==-1)result2="elementary";else if(distro.indexOf("endeavour")!==-1)result2="endeavour";else if(distro.indexOf("fedora")!==-1)result2="fedora";else if(distro.indexOf("gentoo")!==-1)result2="gentoo";else if(distro.indexOf("mageia")!==-1)result2="mageia";else if(distro.indexOf("mandriva")!==-1)result2="mandriva";else if(distro.indexOf("manjaro")!==-1)result2="manjaro";else if(distro.indexOf("mint")!==-1)result2="mint";else if(distro.indexOf("mx")!==-1)result2="mx";else if(distro.indexOf("openbsd")!==-1)result2="openbsd";else if(distro.indexOf("freebsd")!==-1)result2="freebsd";else if(distro.indexOf("opensuse")!==-1)result2="opensuse";else if(distro.indexOf("pclinuxos")!==-1)result2="pclinuxos";else if(distro.indexOf("puppy")!==-1)result2="puppy";else if(distro.indexOf("popos")!==-1)result2="popos";else if(distro.indexOf("raspbian")!==-1)result2="raspbian";else if(distro.indexOf("reactos")!==-1)result2="reactos";else if(distro.indexOf("redhat")!==-1)result2="redhat";else if(distro.indexOf("slackware")!==-1)result2="slackware";else if(distro.indexOf("sugar")!==-1)result2="sugar";else if(distro.indexOf("steam")!==-1)result2="steam";else if(distro.indexOf("suse")!==-1)result2="suse";else if(distro.indexOf("mate")!==-1)result2="ubuntu-mate";else if(distro.indexOf("lubuntu")!==-1)result2="lubuntu";else if(distro.indexOf("xubuntu")!==-1)result2="xubuntu";else if(distro.indexOf("ubuntu")!==-1)result2="ubuntu";else if(distro.indexOf("solaris")!==-1)result2="solaris";else if(distro.indexOf("tails")!==-1)result2="tails";else if(distro.indexOf("feren")!==-1)result2="ferenos";else if(distro.indexOf("robolinux")!==-1)result2="robolinux";else if(_linux&&distro)result2=distro.toLowerCase().trim().replace(/\s+/g,"-");return result2}var WINDOWS_RELEASES=[[26200,"25H2"],[26100,"24H2"],[22631,"23H2"],[22621,"22H2"],[19045,"22H2"],[22000,"21H2"],[19044,"21H2"],[19043,"21H1"],[19042,"20H2"],[19041,"2004"],[18363,"1909"],[18362,"1903"],[17763,"1809"],[17134,"1803"]];function getWindowsRelease(build){for(let[minBuild,label]of WINDOWS_RELEASES)if(build>=minBuild)return label;return""}function getFQDN(){let fqdn=os4.hostname;if(_linux||_darwin)try{fqdn=execSync18("hostname -f 2>/dev/null",util4.execOptsLinux).toString().split(os4.EOL)[0]}catch{util4.noop()}if(_freebsd||_openbsd||_netbsd)try{fqdn=execSync18("hostname 2>/dev/null").toString().split(os4.EOL)[0]}catch{util4.noop()}if(_windows)try{fqdn=execSync18("echo %COMPUTERNAME%.%USERDNSDOMAIN%",util4.execOptsWin).toString().replace(".%USERDNSDOMAIN%","").split(os4.EOL)[0]}catch{util4.noop()}return fqdn}function osInfo(callback){return new Promise((resolve15)=>{process.nextTick(()=>{let result2={platform:_platform==="win32"?"Windows":_platform,distro:"unknown",release:"unknown",codename:"",kernel:os4.release(),arch:os4.arch(),hostname:os4.hostname(),fqdn:getFQDN(),codepage:"",logofile:"",serial:"",build:"",servicepack:"",uefi:!1};if(_linux)exec3("cat /etc/*-release; cat /usr/lib/os-release; cat /etc/openwrt_release",(error2,stdout)=>{let release={};stdout.toString().split(`
3278
3278
  `).forEach((line)=>{if(line.indexOf("=")!==-1)release[line.split("=")[0].trim().toUpperCase()]=line.split("=")[1].trim()}),result2.distro=(release.DISTRIB_ID||release.NAME||"unknown").replace(/"/g,""),result2.logofile=getLogoFile(result2.distro);let releaseVersion=(release.VERSION||"").replace(/"/g,""),codename=(release.DISTRIB_CODENAME||release.VERSION_CODENAME||"").replace(/"/g,""),prettyName=(release.PRETTY_NAME||"").replace(/"/g,"");if(prettyName.indexOf(result2.distro+" ")===0)releaseVersion=prettyName.replace(result2.distro+" ","").trim();if(releaseVersion.indexOf("(")>=0)codename=releaseVersion.split("(")[1].replace(/[()]/g,"").trim(),releaseVersion=releaseVersion.split("(")[0].trim();result2.release=(releaseVersion||release.DISTRIB_RELEASE||release.VERSION_ID||"unknown").replace(/"/g,""),result2.codename=codename,result2.codepage=util4.getCodepage(),result2.build=(release.BUILD_ID||"").replace(/"/g,"").trim(),isUefiLinux().then((uefi)=>{result2.uefi=uefi,uuid().then((data)=>{if(result2.serial=data.os,callback)callback(result2);resolve15(result2)})})});if(_freebsd||_openbsd||_netbsd)exec3("sysctl kern.ostype kern.osrelease kern.osrevision kern.hostuuid machdep.bootmethod kern.geom.confxml",(error2,stdout)=>{let lines=stdout.toString().split(`
@@ -3650,7 +3650,7 @@ Bus `);for(let i2=1;i2<parts.length;i2++){let usb2=parseLinuxUsb(parts[i2]);resu
3650
3650
  `);if(util4.getValue(lines,"class",":",!0).toLowerCase().indexOf("audio")>=0){let audio2=parseLinuxAudioPciMM(lines,audioPCI);result2.push(audio2)}})}if(callback)callback(result2);resolve15(result2)});if(_darwin)exec3("system_profiler SPAudioDataType -json",(error2,stdout)=>{if(!error2)try{let outObj=JSON.parse(stdout.toString());if(outObj.SPAudioDataType&&outObj.SPAudioDataType.length&&outObj.SPAudioDataType[0]&&outObj.SPAudioDataType[0]._items&&outObj.SPAudioDataType[0]._items.length)for(let i2=0;i2<outObj.SPAudioDataType[0]._items.length;i2++){let audio2=parseDarwinAudio(outObj.SPAudioDataType[0]._items[i2],i2);result2.push(audio2)}}catch{util4.noop()}if(callback)callback(result2);resolve15(result2)});if(_windows)util4.powerShell("Get-CimInstance Win32_SoundDevice | select DeviceID,StatusInfo,Name,Manufacturer | fl").then((stdout,error2)=>{if(!error2)stdout.toString().split(/\n\s*\n/).forEach((element)=>{let lines=element.split(`
3651
3651
  `);if(util4.getValue(lines,"name",":"))result2.push(parseWindowsAudio(lines))});if(callback)callback(result2);resolve15(result2)});if(_sunos)resolve15(null)})})}exports.audio=audio});var require_bluetoothVendors=__commonJS((exports,module2)=>{module2.exports={0:"Ericsson Technology Licensing",1:"Nokia Mobile Phones",2:"Intel Corp.",3:"IBM Corp.",4:"Toshiba Corp.",5:"3Com",6:"Microsoft",7:"Lucent",8:"Motorola",9:"Infineon Technologies AG",10:"Cambridge Silicon Radio",11:"Silicon Wave",12:"Digianswer A/S",13:"Texas Instruments Inc.",14:"Ceva, Inc. (formerly Parthus Technologies, Inc.)",15:"Broadcom Corporation",16:"Mitel Semiconductor",17:"Widcomm, Inc",18:"Zeevo, Inc.",19:"Atmel Corporation",20:"Mitsubishi Electric Corporation",21:"RTX Telecom A/S",22:"KC Technology Inc.",23:"NewLogic",24:"Transilica, Inc.",25:"Rohde & Schwarz GmbH & Co. KG",26:"TTPCom Limited",27:"Signia Technologies, Inc.",28:"Conexant Systems Inc.",29:"Qualcomm",30:"Inventel",31:"AVM Berlin",32:"BandSpeed, Inc.",33:"Mansella Ltd",34:"NEC Corporation",35:"WavePlus Technology Co., Ltd.",36:"Alcatel",37:"NXP Semiconductors (formerly Philips Semiconductors)",38:"C Technologies",39:"Open Interface",40:"R F Micro Devices",41:"Hitachi Ltd",42:"Symbol Technologies, Inc.",43:"Tenovis",44:"Macronix International Co. Ltd.",45:"GCT Semiconductor",46:"Norwood Systems",47:"MewTel Technology Inc.",48:"ST Microelectronics",49:"Synopsis",50:"Red-M (Communications) Ltd",51:"Commil Ltd",52:"Computer Access Technology Corporation (CATC)",53:"Eclipse (HQ Espana) S.L.",54:"Renesas Electronics Corporation",55:"Mobilian Corporation",56:"Terax",57:"Integrated System Solution Corp.",58:"Matsushita Electric Industrial Co., Ltd.",59:"Gennum Corporation",60:"BlackBerry Limited (formerly Research In Motion)",61:"IPextreme, Inc.",62:"Systems and Chips, Inc.",63:"Bluetooth SIG, Inc.",64:"Seiko Epson Corporation",65:"Integrated Silicon Solution Taiwan, Inc.",66:"CONWISE Technology Corporation Ltd",67:"PARROT SA",68:"Socket Mobile",69:"Atheros Communications, Inc.",70:"MediaTek, Inc.",71:"Bluegiga",72:"Marvell Technology Group Ltd.",73:"3DSP Corporation",74:"Accel Semiconductor Ltd.",75:"Continental Automotive Systems",76:"Apple, Inc.",77:"Staccato Communications, Inc.",78:"Avago Technologies",79:"APT Licensing Ltd.",80:"SiRF Technology",81:"Tzero Technologies, Inc.",82:"J&M Corporation",83:"Free2move AB",84:"3DiJoy Corporation",85:"Plantronics, Inc.",86:"Sony Ericsson Mobile Communications",87:"Harman International Industries, Inc.",88:"Vizio, Inc.",89:"Nordic Semiconductor ASA",90:"EM Microelectronic-Marin SA",91:"Ralink Technology Corporation",92:"Belkin International, Inc.",93:"Realtek Semiconductor Corporation",94:"Stonestreet One, LLC",95:"Wicentric, Inc.",96:"RivieraWaves S.A.S",97:"RDA Microelectronics",98:"Gibson Guitars",99:"MiCommand Inc.",100:"Band XI International, LLC",101:"Hewlett-Packard Company",102:"9Solutions Oy",103:"GN Netcom A/S",104:"General Motors",105:"A&D Engineering, Inc.",106:"MindTree Ltd.",107:"Polar Electro OY",108:"Beautiful Enterprise Co., Ltd.",109:"BriarTek, Inc.",110:"Summit Data Communications, Inc.",111:"Sound ID",112:"Monster, LLC",113:"connectBlue AB",114:"ShangHai Super Smart Electronics Co. Ltd.",115:"Group Sense Ltd.",116:"Zomm, LLC",117:"Samsung Electronics Co. Ltd.",118:"Creative Technology Ltd.",119:"Laird Technologies",120:"Nike, Inc.",121:"lesswire AG",122:"MStar Semiconductor, Inc.",123:"Hanlynn Technologies",124:"A & R Cambridge",125:"Seers Technology Co. Ltd",126:"Sports Tracking Technologies Ltd.",127:"Autonet Mobile",128:"DeLorme Publishing Company, Inc.",129:"WuXi Vimicro",130:"Sennheiser Communications A/S",131:"TimeKeeping Systems, Inc.",132:"Ludus Helsinki Ltd.",133:"BlueRadios, Inc.",134:"equinox AG",135:"Garmin International, Inc.",136:"Ecotest",137:"GN ReSound A/S",138:"Jawbone",139:"Topcorn Positioning Systems, LLC",140:"Gimbal Inc. (formerly Qualcomm Labs, Inc. and Qualcomm Retail Solutions, Inc.)",141:"Zscan Software",142:"Quintic Corp.",143:"Stollman E+V GmbH",144:"Funai Electric Co., Ltd.",145:"Advanced PANMOBIL Systems GmbH & Co. KG",146:"ThinkOptics, Inc.",147:"Universal Electronics, Inc.",148:"Airoha Technology Corp.",149:"NEC Lighting, Ltd.",150:"ODM Technology, Inc.",151:"ConnecteDevice Ltd.",152:"zer01.tv GmbH",153:"i.Tech Dynamic Global Distribution Ltd.",154:"Alpwise",155:"Jiangsu Toppower Automotive Electronics Co., Ltd.",156:"Colorfy, Inc.",157:"Geoforce Inc.",158:"Bose Corporation",159:"Suunto Oy",160:"Kensington Computer Products Group",161:"SR-Medizinelektronik",162:"Vertu Corporation Limited",163:"Meta Watch Ltd.",164:"LINAK A/S",165:"OTL Dynamics LLC",166:"Panda Ocean Inc.",167:"Visteon Corporation",168:"ARP Devices Limited",169:"Magneti Marelli S.p.A",170:"CAEN RFID srl",171:"Ingenieur-Systemgruppe Zahn GmbH",172:"Green Throttle Games",173:"Peter Systemtechnik GmbH",174:"Omegawave Oy",175:"Cinetix",176:"Passif Semiconductor Corp",177:"Saris Cycling Group, Inc",178:"Bekey A/S",179:"Clarinox Technologies Pty. Ltd.",180:"BDE Technology Co., Ltd.",181:"Swirl Networks",182:"Meso international",183:"TreLab Ltd",184:"Qualcomm Innovation Center, Inc. (QuIC)",185:"Johnson Controls, Inc.",186:"Starkey Laboratories Inc.",187:"S-Power Electronics Limited",188:"Ace Sensor Inc",189:"Aplix Corporation",190:"AAMP of America",191:"Stalmart Technology Limited",192:"AMICCOM Electronics Corporation",193:"Shenzhen Excelsecu Data Technology Co.,Ltd",194:"Geneq Inc.",195:"adidas AG",196:"LG Electronics",197:"Onset Computer Corporation",198:"Selfly BV",199:"Quuppa Oy.",200:"GeLo Inc",201:"Evluma",202:"MC10",203:"Binauric SE",204:"Beats Electronics",205:"Microchip Technology Inc.",206:"Elgato Systems GmbH",207:"ARCHOS SA",208:"Dexcom, Inc.",209:"Polar Electro Europe B.V.",210:"Dialog Semiconductor B.V.",211:"Taixingbang\xA0Technology (HK) Co,. LTD.",212:"Kawantech",213:"Austco Communication Systems",214:"Timex Group USA, Inc.",215:"Qualcomm Technologies, Inc.",216:"Qualcomm Connected Experiences, Inc.",217:"Voyetra Turtle Beach",218:"txtr GmbH",219:"Biosentronics",220:"Procter & Gamble",221:"Hosiden Corporation",222:"Muzik LLC",223:"Misfit Wearables Corp",224:"Google",225:"Danlers Ltd",226:"Semilink Inc",227:"inMusic Brands, Inc",228:"L.S. Research Inc.",229:"Eden Software Consultants Ltd.",230:"Freshtemp",231:"KS Technologies",232:"ACTS Technologies",233:"Vtrack Systems",234:"Nielsen-Kellerman Company",235:"Server Technology, Inc.",236:"BioResearch Associates",237:"Jolly Logic, LLC",238:"Above Average Outcomes, Inc.",239:"Bitsplitters GmbH",240:"PayPal, Inc.",241:"Witron Technology Limited",242:"Aether Things\xA0Inc. (formerly Morse Project Inc.)",243:"Kent Displays Inc.",244:"Nautilus Inc.",245:"Smartifier Oy",246:"Elcometer Limited",247:"VSN Technologies Inc.",248:"AceUni Corp., Ltd.",249:"StickNFind",250:"Crystal Code AB",251:"KOUKAAM a.s.",252:"Delphi Corporation",253:"ValenceTech Limited",254:"Reserved",255:"Typo Products, LLC",256:"TomTom International BV",257:"Fugoo, Inc",258:"Keiser Corporation",259:"Bang & Olufsen A/S",260:"PLUS Locations Systems Pty Ltd",261:"Ubiquitous Computing Technology Corporation",262:"Innovative Yachtter Solutions",263:"William Demant Holding A/S",264:"Chicony Electronics Co., Ltd.",265:"Atus BV",266:"Codegate Ltd.",267:"ERi, Inc.",268:"Transducers Direct, LLC",269:"Fujitsu Ten Limited",270:"Audi AG",271:"HiSilicon Technologies Co., Ltd.",272:"Nippon Seiki Co., Ltd.",273:"Steelseries ApS",274:"vyzybl Inc.",275:"Openbrain Technologies, Co., Ltd.",276:"Xensr",277:"e.solutions",278:"1OAK Technologies",279:"Wimoto Technologies Inc",280:"Radius Networks, Inc.",281:"Wize Technology Co., Ltd.",282:"Qualcomm Labs, Inc.",283:"Aruba Networks",284:"Baidu",285:"Arendi AG",286:"Skoda Auto a.s.",287:"Volkswagon AG",288:"Porsche AG",289:"Sino Wealth Electronic Ltd.",290:"AirTurn, Inc.",291:"Kinsa, Inc.",292:"HID Global",293:"SEAT es",294:"Promethean Ltd.",295:"Salutica Allied Solutions",296:"GPSI Group Pty Ltd",297:"Nimble Devices Oy",298:"Changzhou Yongse Infotech Co., Ltd",299:"SportIQ",300:"TEMEC Instruments B.V.",301:"Sony Corporation",302:"ASSA ABLOY",303:"Clarion Co., Ltd.",304:"Warehouse Innovations",305:"Cypress Semiconductor Corporation",306:"MADS Inc",307:"Blue Maestro Limited",308:"Resolution Products, Inc.",309:"Airewear LLC",310:"Seed Labs, Inc. (formerly ETC sp. z.o.o.)",311:"Prestigio Plaza Ltd.",312:"NTEO Inc.",313:"Focus Systems Corporation",314:"Tencent Holdings Limited",315:"Allegion",316:"Murata Manufacuring Co., Ltd.",318:"Nod, Inc.",319:"B&B Manufacturing Company",320:"Alpine\xA0Electronics\xA0(China)\xA0Co.,\xA0Ltd",321:"FedEx Services",322:"Grape Systems Inc.",323:"Bkon Connect",324:"Lintech GmbH",325:"Novatel Wireless",326:"Ciright",327:"Mighty Cast, Inc.",328:"Ambimat Electronics",329:"Perytons Ltd.",330:"Tivoli Audio, LLC",331:"Master Lock",332:"Mesh-Net Ltd",333:"Huizhou Desay SV Automotive CO., LTD.",334:"Tangerine, Inc.",335:"B&W Group Ltd.",336:"Pioneer Corporation",337:"OnBeep",338:"Vernier Software & Technology",339:"ROL Ergo",340:"Pebble Technology",341:"NETATMO",342:"Accumulate AB",343:"Anhui Huami Information Technology Co., Ltd.",344:"Inmite s.r.o.",345:"ChefSteps, Inc.",346:"micas AG",347:"Biomedical Research Ltd.",348:"Pitius Tec S.L.",349:"Estimote, Inc.",350:"Unikey Technologies, Inc.",351:"Timer Cap Co.",352:"AwoX",353:"yikes",354:"MADSGlobal NZ Ltd.",355:"PCH International",356:"Qingdao Yeelink Information Technology Co., Ltd.",357:"Milwaukee Tool (formerly Milwaukee Electric Tools)",358:"MISHIK Pte Ltd",359:"Bayer HealthCare",360:"Spicebox LLC",361:"emberlight",362:"Cooper-Atkins Corporation",363:"Qblinks",364:"MYSPHERA",365:"LifeScan Inc",366:"Volantic AB",367:"Podo Labs, Inc",368:"Roche Diabetes Care AG",369:"Amazon Fulfillment Service",370:"Connovate Technology Private Limited",371:"Kocomojo, LLC",372:"Everykey LLC",373:"Dynamic Controls",374:"SentriLock",375:"I-SYST inc.",376:"CASIO COMPUTER CO., LTD.",377:"LAPIS Semiconductor Co., Ltd.",378:"Telemonitor, Inc.",379:"taskit GmbH",380:"Daimler AG",381:"BatAndCat",382:"BluDotz Ltd",383:"XTel ApS",384:"Gigaset Communications GmbH",385:"Gecko Health Innovations, Inc.",386:"HOP Ubiquitous",387:"To Be Assigned",388:"Nectar",389:"bel\u2019apps LLC",390:"CORE Lighting Ltd",391:"Seraphim Sense Ltd",392:"Unico RBC",393:"Physical Enterprises Inc.",394:"Able Trend Technology Limited",395:"Konica Minolta, Inc.",396:"Wilo SE",397:"Extron Design Services",398:"Fitbit, Inc.",399:"Fireflies Systems",400:"Intelletto Technologies Inc.",401:"FDK CORPORATION",402:"Cloudleaf, Inc",403:"Maveric Automation LLC",404:"Acoustic Stream Corporation",405:"Zuli",406:"Paxton Access Ltd",407:"WiSilica Inc",408:"Vengit Limited",409:"SALTO SYSTEMS S.L.",410:"TRON Forum (formerly T-Engine Forum)",411:"CUBETECH s.r.o.",412:"Cokiya Incorporated",413:"CVS Health",414:"Ceruus",415:"Strainstall Ltd",416:"Channel Enterprises (HK) Ltd.",417:"FIAMM",418:"GIGALANE.CO.,LTD",419:"EROAD",420:"Mine Safety Appliances",421:"Icon Health and Fitness",422:"Asandoo GmbH",423:"ENERGOUS CORPORATION",424:"Taobao",425:"Canon Inc.",426:"Geophysical Technology Inc.",427:"Facebook, Inc.",428:"Nipro Diagnostics, Inc.",429:"FlightSafety International",430:"Earlens Corporation",431:"Sunrise Micro Devices, Inc.",432:"Star Micronics Co., Ltd.",433:"Netizens Sp. z o.o.",434:"Nymi Inc.",435:"Nytec, Inc.",436:"Trineo Sp. z o.o.",437:"Nest Labs Inc.",438:"LM Technologies Ltd",439:"General Electric Company",440:"i+D3 S.L.",441:"HANA Micron",442:"Stages Cycling LLC",443:"Cochlear Bone Anchored Solutions AB",444:"SenionLab AB",445:"Syszone Co., Ltd",446:"Pulsate Mobile Ltd.",447:"Hong Kong HunterSun Electronic Limited",448:"pironex GmbH",449:"BRADATECH Corp.",450:"Transenergooil AG",451:"Bunch",452:"DME Microelectronics",453:"Bitcraze AB",454:"HASWARE Inc.",455:"Abiogenix Inc.",456:"Poly-Control ApS",457:"Avi-on",458:"Laerdal Medical AS",459:"Fetch My Pet",460:"Sam Labs Ltd.",461:"Chengdu Synwing Technology Ltd",462:"HOUWA SYSTEM DESIGN, k.k.",463:"BSH",464:"Primus Inter Pares Ltd",465:"August",466:"Gill Electronics",467:"Sky Wave Design",468:"Newlab S.r.l.",469:"ELAD srl",470:"G-wearables inc.",471:"Squadrone Systems Inc.",472:"Code Corporation",473:"Savant Systems LLC",474:"Logitech International SA",475:"Innblue Consulting",476:"iParking Ltd.",477:"Koninklijke Philips Electronics N.V.",478:"Minelab Electronics Pty Limited",479:"Bison Group Ltd.",480:"Widex A/S",481:"Jolla Ltd",482:"Lectronix, Inc.",483:"Caterpillar Inc",484:"Freedom Innovations",485:"Dynamic Devices Ltd",486:"Technology Solutions (UK) Ltd",487:"IPS Group Inc.",488:"STIR",489:"Sano, Inc",490:"Advanced Application Design, Inc.",491:"AutoMap LLC",492:"Spreadtrum Communications Shanghai Ltd",493:"CuteCircuit LTD",494:"Valeo Service",495:"Fullpower Technologies, Inc.",496:"KloudNation",497:"Zebra Technologies Corporation",498:"Itron, Inc.",499:"The University of Tokyo",500:"UTC Fire and Security",501:"Cool Webthings Limited",502:"DJO Global",503:"Gelliner Limited",504:"Anyka (Guangzhou) Microelectronics Technology Co, LTD",505:"Medtronic, Inc.",506:"Gozio, Inc.",507:"Form Lifting, LLC",508:"Wahoo Fitness, LLC",509:"Kontakt Micro-Location Sp. z o.o.",510:"Radio System Corporation",511:"Freescale Semiconductor, Inc.",512:"Verifone Systems PTe Ltd. Taiwan Branch",513:"AR Timing",514:"Rigado LLC",515:"Kemppi Oy",516:"Tapcentive Inc.",517:"Smartbotics Inc.",518:"Otter Products, LLC",519:"STEMP Inc.",520:"LumiGeek LLC",521:"InvisionHeart Inc.",522:"Macnica Inc. ",523:"Jaguar Land Rover Limited",524:"CoroWare Technologies, Inc",525:"Simplo Technology Co., LTD",526:"Omron Healthcare Co., LTD",527:"Comodule GMBH",528:"ikeGPS",529:"Telink Semiconductor Co. Ltd",530:"Interplan Co., Ltd",531:"Wyler AG",532:"IK Multimedia Production srl",533:"Lukoton Experience Oy",534:"MTI Ltd",535:"Tech4home, Lda",536:"Hiotech AB",537:"DOTT Limited",538:"Blue Speck Labs, LLC",539:"Cisco Systems, Inc",540:"Mobicomm Inc",541:"Edamic",542:"Goodnet, Ltd",543:"Luster Leaf Products Inc",544:"Manus Machina BV",545:"Mobiquity Networks Inc",546:"Praxis Dynamics",547:"Philip Morris Products S.A.",548:"Comarch SA",549:"Nestl Nespresso S.A.",550:"Merlinia A/S",551:"LifeBEAM Technologies",552:"Twocanoes Labs, LLC",553:"Muoverti Limited",554:"Stamer Musikanlagen GMBH",555:"Tesla Motors",556:"Pharynks Corporation",557:"Lupine",558:"Siemens AG",559:"Huami (Shanghai) Culture Communication CO., LTD",560:"Foster Electric Company, Ltd",561:"ETA SA",562:"x-Senso Solutions Kft",563:"Shenzhen SuLong Communication Ltd",564:"FengFan (BeiJing) Technology Co, Ltd",565:"Qrio Inc",566:"Pitpatpet Ltd",567:"MSHeli s.r.l.",568:"Trakm8 Ltd",569:"JIN CO, Ltd",570:"Alatech Tehnology",571:"Beijing CarePulse Electronic Technology Co, Ltd",572:"Awarepoint",573:"ViCentra B.V.",574:"Raven Industries",575:"WaveWare Technologies Inc.",576:"Argenox Technologies",577:"Bragi GmbH",578:"16Lab Inc",579:"Masimo Corp",580:"Iotera Inc",581:"Endress+Hauser",582:"ACKme Networks, Inc.",583:"FiftyThree Inc.",584:"Parker Hannifin Corp",585:"Transcranial Ltd",586:"Uwatec AG",587:"Orlan LLC",588:"Blue Clover Devices",589:"M-Way Solutions GmbH",590:"Microtronics Engineering GmbH",591:"Schneider Schreibgerte GmbH",592:"Sapphire Circuits LLC",593:"Lumo Bodytech Inc.",594:"UKC Technosolution",595:"Xicato Inc.",596:"Playbrush",597:"Dai Nippon Printing Co., Ltd.",598:"G24 Power Limited",599:"AdBabble Local Commerce Inc.",600:"Devialet SA",601:"ALTYOR",602:"University of Applied Sciences Valais/Haute Ecole Valaisanne",603:"Five Interactive, LLC dba Zendo",604:"NetEaseHangzhouNetwork co.Ltd.",605:"Lexmark International Inc.",606:"Fluke Corporation",607:"Yardarm Technologies",608:"SensaRx",609:"SECVRE GmbH",610:"Glacial Ridge Technologies",611:"Identiv, Inc.",612:"DDS, Inc.",613:"SMK Corporation",614:"Schawbel Technologies LLC",615:"XMI Systems SA",616:"Cerevo",617:"Torrox GmbH & Co KG",618:"Gemalto",619:"DEKA Research & Development Corp.",620:"Domster Tadeusz Szydlowski",621:"Technogym SPA",622:"FLEURBAEY BVBA",623:"Aptcode Solutions",624:"LSI ADL Technology",625:"Animas Corp",626:"Alps Electric Co., Ltd.",627:"OCEASOFT",628:"Motsai Research",629:"Geotab",630:"E.G.O. Elektro-Gertebau GmbH",631:"bewhere inc",632:"Johnson Outdoors Inc",633:"steute Schaltgerate GmbH & Co. KG",634:"Ekomini inc.",635:"DEFA AS",636:"Aseptika Ltd",637:"HUAWEI Technologies Co., Ltd. ( )",638:"HabitAware, LLC",639:"ruwido austria gmbh",640:"ITEC corporation",641:"StoneL",642:"Sonova AG",643:"Maven Machines, Inc.",644:"Synapse Electronics",645:"Standard Innovation Inc.",646:"RF Code, Inc.",647:"Wally Ventures S.L.",648:"Willowbank Electronics Ltd",649:"SK Telecom",650:"Jetro AS",651:"Code Gears LTD",652:"NANOLINK APS",653:"IF, LLC",654:"RF Digital Corp",655:"Church & Dwight Co., Inc",656:"Multibit Oy",657:"CliniCloud Inc",658:"SwiftSensors",659:"Blue Bite",660:"ELIAS GmbH",661:"Sivantos GmbH",662:"Petzl",663:"storm power ltd",664:"EISST Ltd",665:"Inexess Technology Simma KG",666:"Currant, Inc.",667:"C2 Development, Inc.",668:"Blue Sky Scientific, LLC",669:"ALOTTAZS LABS, LLC",670:"Kupson spol. s r.o.",671:"Areus Engineering GmbH",672:"Impossible Camera GmbH",673:"InventureTrack Systems",674:"LockedUp",675:"Itude",676:"Pacific Lock Company",677:"Tendyron Corporation ( )",678:"Robert Bosch GmbH",679:"Illuxtron international B.V.",680:"miSport Ltd.",681:"Chargelib",682:"Doppler Lab",683:"BBPOS Limited",684:"RTB Elektronik GmbH & Co. KG",685:"Rx Networks, Inc.",686:"WeatherFlow, Inc.",687:"Technicolor USA Inc.",688:"Bestechnic(Shanghai),Ltd",689:"Raden Inc",690:"JouZen Oy",691:"CLABER S.P.A.",692:"Hyginex, Inc.",693:"HANSHIN ELECTRIC RAILWAY CO.,LTD.",694:"Schneider Electric",695:"Oort Technologies LLC",696:"Chrono Therapeutics",697:"Rinnai Corporation",698:"Swissprime Technologies AG",699:"Koha.,Co.Ltd",700:"Genevac Ltd",701:"Chemtronics",702:"Seguro Technology Sp. z o.o.",703:"Redbird Flight Simulations",704:"Dash Robotics",705:"LINE Corporation",706:"Guillemot Corporation",707:"Techtronic Power Tools Technology Limited",708:"Wilson Sporting Goods",709:"Lenovo (Singapore) Pte Ltd. ( )",710:"Ayatan Sensors",711:"Electronics Tomorrow Limited",712:"VASCO Data Security International, Inc.",713:"PayRange Inc.",714:"ABOV Semiconductor",715:"AINA-Wireless Inc.",716:"Eijkelkamp Soil & Water",717:"BMA ergonomics b.v.",718:"Teva Branded Pharmaceutical Products R&D, Inc.",719:"Anima",720:"3M",721:"Empatica Srl",722:"Afero, Inc.",723:"Powercast Corporation",724:"Secuyou ApS",725:"OMRON Corporation",726:"Send Solutions",727:"NIPPON SYSTEMWARE CO.,LTD.",728:"Neosfar",729:"Fliegl Agrartechnik GmbH",730:"Gilvader",731:"Digi International Inc (R)",732:"DeWalch Technologies, Inc.",733:"Flint Rehabilitation Devices, LLC",734:"Samsung SDS Co., Ltd.",735:"Blur Product Development",736:"University of Michigan",737:"Victron Energy BV",738:"NTT docomo",739:"Carmanah Technologies Corp.",740:"Bytestorm Ltd.",741:"Espressif Incorporated ( () )",742:"Unwire",743:"Connected Yard, Inc.",744:"American Music Environments",745:"Sensogram Technologies, Inc.",746:"Fujitsu Limited",747:"Ardic Technology",748:"Delta Systems, Inc",749:"HTC Corporation",750:"Citizen Holdings Co., Ltd.",751:"SMART-INNOVATION.inc",752:"Blackrat Software",753:"The Idea Cave, LLC",754:"GoPro, Inc.",755:"AuthAir, Inc",756:"Vensi, Inc.",757:"Indagem Tech LLC",758:"Intemo Technologies",759:"DreamVisions co., Ltd.",760:"Runteq Oy Ltd",761:"IMAGINATION TECHNOLOGIES LTD",762:"CoSTAR TEchnologies",763:"Clarius Mobile Health Corp.",764:"Shanghai Frequen Microelectronics Co., Ltd.",765:"Uwanna, Inc.",766:"Lierda Science & Technology Group Co., Ltd.",767:"Silicon Laboratories",768:"World Moto Inc.",769:"Giatec Scientific Inc.",770:"Loop Devices, Inc",771:"IACA electronique",772:"Martians Inc",773:"Swipp ApS",774:"Life Laboratory Inc.",775:"FUJI INDUSTRIAL CO.,LTD.",776:"Surefire, LLC",777:"Dolby Labs",778:"Ellisys",779:"Magnitude Lighting Converters",780:"Hilti AG",781:"Devdata S.r.l.",782:"Deviceworx",783:"Shortcut Labs",784:"SGL Italia S.r.l.",785:"PEEQ DATA",786:"Ducere Technologies Pvt Ltd",787:"DiveNav, Inc.",788:"RIIG AI Sp. z o.o.",789:"Thermo Fisher Scientific",790:"AG Measurematics Pvt. Ltd.",791:"CHUO Electronics CO., LTD.",792:"Aspenta International",793:"Eugster Frismag AG",794:"Amber wireless GmbH",795:"HQ Inc",796:"Lab Sensor Solutions",797:"Enterlab ApS",798:"Eyefi, Inc.",799:"MetaSystem S.p.A.",800:"SONO ELECTRONICS. CO., LTD",801:"Jewelbots",802:"Compumedics Limited",803:"Rotor Bike Components",804:"Astro, Inc.",805:"Amotus Solutions",806:"Healthwear Technologies (Changzhou)Ltd",807:"Essex Electronics",808:"Grundfos A/S",809:"Eargo, Inc.",810:"Electronic Design Lab",811:"ESYLUX",812:"NIPPON SMT.CO.,Ltd",813:"BM innovations GmbH",814:"indoormap",815:"OttoQ Inc",816:"North Pole Engineering",817:"3flares Technologies Inc.",818:"Electrocompaniet A.S.",819:"Mul-T-Lock",820:"Corentium AS",821:"Enlighted Inc",822:"GISTIC",823:"AJP2 Holdings, LLC",824:"COBI GmbH",825:"Blue Sky Scientific, LLC",826:"Appception, Inc.",827:"Courtney Thorne Limited",828:"Virtuosys",829:"TPV Technology Limited",830:"Monitra SA",831:"Automation Components, Inc.",832:"Letsense s.r.l.",833:"Etesian Technologies LLC",834:"GERTEC BRASIL LTDA.",835:"Drekker Development Pty. Ltd.",836:"Whirl Inc",837:"Locus Positioning",838:"Acuity Brands Lighting, Inc",839:"Prevent Biometrics",840:"Arioneo",841:"VersaMe",842:"Vaddio",843:"Libratone A/S",844:"HM Electronics, Inc.",845:"TASER International, Inc.",846:"SafeTrust Inc.",847:"Heartland Payment Systems",848:"Bitstrata Systems Inc.",849:"Pieps GmbH",850:"iRiding(Xiamen)Technology Co.,Ltd.",851:"Alpha Audiotronics, Inc.",852:"TOPPAN FORMS CO.,LTD.",853:"Sigma Designs, Inc.",854:"Spectrum Brands, Inc.",855:"Polymap Wireless",856:"MagniWare Ltd.",857:"Novotec Medical GmbH",858:"Medicom Innovation Partner a/s",859:"Matrix Inc.",860:"Eaton Corporation",861:"KYS",862:"Naya Health, Inc.",863:"Acromag",864:"Insulet Corporation",865:"Wellinks Inc.",866:"ON Semiconductor",867:"FREELAP SA",868:"Favero Electronics Srl",869:"BioMech Sensor LLC",870:"BOLTT Sports technologies Private limited",871:"Saphe International",872:"Metormote AB",873:"littleBits",874:"SetPoint Medical",875:"BRControls Products BV",876:"Zipcar",877:"AirBolt Pty Ltd",878:"KeepTruckin Inc",879:"Motiv, Inc.",880:"Wazombi Labs O",881:"ORBCOMM",882:"Nixie Labs, Inc.",883:"AppNearMe Ltd",884:"Holman Industries",885:"Expain AS",886:"Electronic Temperature Instruments Ltd",887:"Plejd AB",888:"Propeller Health",889:"Shenzhen iMCO Electronic Technology Co.,Ltd",890:"Algoria",891:"Apption Labs Inc.",892:"Cronologics Corporation",893:"MICRODIA Ltd.",894:"lulabytes S.L.",895:"Nestec S.A.",896:"LLC MEGA - F service",897:"Sharp Corporation",898:"Precision Outcomes Ltd",899:"Kronos Incorporated",900:"OCOSMOS Co., Ltd.",901:"Embedded Electronic Solutions Ltd. dba e2Solutions",902:"Aterica Inc.",903:"BluStor PMC, Inc.",904:"Kapsch TrafficCom AB",905:"ActiveBlu Corporation",906:"Kohler Mira Limited",907:"Noke",908:"Appion Inc.",909:"Resmed Ltd",910:"Crownstone B.V.",911:"Xiaomi Inc.",912:"INFOTECH s.r.o.",913:"Thingsquare AB",914:"T&D",915:"LAVAZZA S.p.A.",916:"Netclearance Systems, Inc.",917:"SDATAWAY",918:"BLOKS GmbH",919:"LEGO System A/S",920:"Thetatronics Ltd",921:"Nikon Corporation",922:"NeST",923:"South Silicon Valley Microelectronics",924:"ALE International",925:"CareView Communications, Inc.",926:"SchoolBoard Limited",927:"Molex Corporation",928:"IVT Wireless Limited",929:"Alpine Labs LLC",930:"Candura Instruments",931:"SmartMovt Technology Co., Ltd",932:"Token Zero Ltd",933:"ACE CAD Enterprise Co., Ltd. (ACECAD)",934:"Medela, Inc",935:"AeroScout",936:"Esrille Inc.",937:"THINKERLY SRL",938:"Exon Sp. z o.o.",939:"Meizu Technology Co., Ltd.",940:"Smablo LTD",941:"XiQ",942:"Allswell Inc.",943:"Comm-N-Sense Corp DBA Verigo",944:"VIBRADORM GmbH",945:"Otodata Wireless Network Inc.",946:"Propagation Systems Limited",947:"Midwest Instruments & Controls",948:"Alpha Nodus, inc.",949:"petPOMM, Inc",950:"Mattel",951:"Airbly Inc.",952:"A-Safe Limited",953:"FREDERIQUE CONSTANT SA",954:"Maxscend Microelectronics Company Limited",955:"Abbott Diabetes Care",956:"ASB Bank Ltd",957:"amadas",958:"Applied Science, Inc.",959:"iLumi Solutions Inc.",960:"Arch Systems Inc.",961:"Ember Technologies, Inc.",962:"Snapchat Inc",963:"Casambi Technologies Oy",964:"Pico Technology Inc.",965:"St. Jude Medical, Inc.",966:"Intricon",967:"Structural Health Systems, Inc.",968:"Avvel International",969:"Gallagher Group",970:"In2things Automation Pvt. Ltd.",971:"SYSDEV Srl",972:"Vonkil Technologies Ltd",973:"Wynd Technologies, Inc.",974:"CONTRINEX S.A.",975:"MIRA, Inc.",976:"Watteam Ltd",977:"Density Inc.",978:"IOT Pot India Private Limited",979:"Sigma Connectivity AB",980:"PEG PEREGO SPA",981:"Wyzelink Systems Inc.",982:"Yota Devices LTD",983:"FINSECUR",984:"Zen-Me Labs Ltd",985:"3IWare Co., Ltd.",986:"EnOcean GmbH",987:"Instabeat, Inc",988:"Nima Labs",989:"Andreas Stihl AG & Co. KG",990:"Nathan Rhoades LLC",991:"Grob Technologies, LLC",992:"Actions (Zhuhai) Technology Co., Limited",993:"SPD Development Company Ltd",994:"Sensoan Oy",995:"Qualcomm Life Inc",996:"Chip-ing AG",997:"ffly4u",998:"IoT Instruments Oy",999:"TRUE Fitness Technology",1000:"Reiner Kartengeraete GmbH & Co. KG.",1001:"SHENZHEN LEMONJOY TECHNOLOGY CO., LTD.",1002:"Hello Inc.",1003:"Evollve Inc.",1004:"Jigowatts Inc.",1005:"BASIC MICRO.COM,INC.",1006:"CUBE TECHNOLOGIES",1007:"foolography GmbH",1008:"CLINK",1009:"Hestan Smart Cooking Inc.",1010:"WindowMaster A/S",1011:"Flowscape AB",1012:"PAL Technologies Ltd",1013:"WHERE, Inc.",1014:"Iton Technology Corp.",1015:"Owl Labs Inc.",1016:"Rockford Corp.",1017:"Becon Technologies Co.,Ltd.",1018:"Vyassoft Technologies Inc",1019:"Nox Medical",1020:"Kimberly-Clark",1021:"Trimble Navigation Ltd.",1022:"Littelfuse",1023:"Withings",1024:"i-developer IT Beratung UG",1026:"Sears Holdings Corporation",1027:"Gantner Electronic GmbH",1028:"Authomate Inc",1029:"Vertex International, Inc.",1030:"Airtago",1031:"Swiss Audio SA",1032:"ToGetHome Inc.",1033:"AXIS",1034:"Openmatics",1035:"Jana Care Inc.",1036:"Senix Corporation",1037:"NorthStar Battery Company, LLC",1038:"SKF (U.K.) Limited",1039:"CO-AX Technology, Inc.",1040:"Fender Musical Instruments",1041:"Luidia Inc",1042:"SEFAM",1043:"Wireless Cables Inc",1044:"Lightning Protection International Pty Ltd",1045:"Uber Technologies Inc",1046:"SODA GmbH",1047:"Fatigue Science",1048:"Alpine Electronics Inc.",1049:"Novalogy LTD",1050:"Friday Labs Limited",1051:"OrthoAccel Technologies",1052:"WaterGuru, Inc.",1053:"Benning Elektrotechnik und Elektronik GmbH & Co. KG",1054:"Dell Computer Corporation",1055:"Kopin Corporation",1056:"TecBakery GmbH",1057:"Backbone Labs, Inc.",1058:"DELSEY SA",1059:"Chargifi Limited",1060:"Trainesense Ltd.",1061:"Unify Software and Solutions GmbH & Co. KG",1062:"Husqvarna AB",1063:"Focus fleet and fuel management inc",1064:"SmallLoop, LLC",1065:"Prolon Inc.",1066:"BD Medical",1067:"iMicroMed Incorporated",1068:"Ticto N.V.",1069:"Meshtech AS",1070:"MemCachier Inc.",1071:"Danfoss A/S",1072:"SnapStyk Inc.",1073:"Amyway Corporation",1074:"Silk Labs, Inc.",1075:"Pillsy Inc.",1076:"Hatch Baby, Inc.",1077:"Blocks Wearables Ltd.",1078:"Drayson Technologies (Europe) Limited",1079:"eBest IOT Inc.",1080:"Helvar Ltd",1081:"Radiance Technologies",1082:"Nuheara Limited",1083:"Appside co., ltd.",1084:"DeLaval",1085:"Coiler Corporation",1086:"Thermomedics, Inc.",1087:"Tentacle Sync GmbH",1088:"Valencell, Inc.",1089:"iProtoXi Oy",1090:"SECOM CO., LTD.",1091:"Tucker International LLC",1092:"Metanate Limited",1093:"Kobian Canada Inc.",1094:"NETGEAR, Inc.",1095:"Fabtronics Australia Pty Ltd",1096:"Grand Centrix GmbH",1097:"1UP USA.com llc",1098:"SHIMANO INC.",1099:"Nain Inc.",1100:"LifeStyle Lock, LLC",1101:"VEGA Grieshaber KG",1102:"Xtrava Inc.",1103:"TTS Tooltechnic Systems AG & Co. KG",1104:"Teenage Engineering AB",1105:"Tunstall Nordic AB",1106:"Svep Design Center AB",1107:"GreenPeak Technologies BV",1108:"Sphinx Electronics GmbH & Co KG",1109:"Atomation",1110:"Nemik Consulting Inc",1111:"RF INNOVATION",1112:"Mini Solution Co., Ltd.",1113:"Lumenetix, Inc",1114:"2048450 Ontario Inc",1115:"SPACEEK LTD",1116:"Delta T Corporation",1117:"Boston Scientific Corporation",1118:"Nuviz, Inc.",1119:"Real Time Automation, Inc.",1120:"Kolibree",1121:"vhf elektronik GmbH",1122:"Bonsai Systems GmbH",1123:"Fathom Systems Inc.",1124:"Bellman & Symfon",1125:"International Forte Group LLC",1126:"CycleLabs Solutions inc.",1127:"Codenex Oy",1128:"Kynesim Ltd",1129:"Palago AB",1130:"INSIGMA INC.",1131:"PMD Solutions",1132:"Qingdao Realtime Technology Co., Ltd.",1133:"BEGA Gantenbrink-Leuchten KG",1134:"Pambor Ltd.",65535:"SPECIAL USE/DEFAULT"}});var require_bluetooth=__commonJS((exports)=>{var exec3=__require("child_process").exec,execSync18=__require("child_process").execSync,path6=__require("path"),util4=require_util3(),bluetoothVendors=require_bluetoothVendors(),fs3=__require("fs"),_platform=process.platform,_linux=_platform==="linux"||_platform==="android",_darwin=_platform==="darwin",_windows=_platform==="win32",_freebsd=_platform==="freebsd",_openbsd=_platform==="openbsd",_netbsd=_platform==="netbsd",_sunos=_platform==="sunos";function parseBluetoothType(str5){let result2="";if(str5.indexOf("keyboard")>=0)result2="Keyboard";if(str5.indexOf("mouse")>=0)result2="Mouse";if(str5.indexOf("trackpad")>=0)result2="Trackpad";if(str5.indexOf("audio")>=0)result2="Audio";if(str5.indexOf("sound")>=0)result2="Audio";if(str5.indexOf("microph")>=0)result2="Microphone";if(str5.indexOf("speaker")>=0)result2="Speaker";if(str5.indexOf("headset")>=0)result2="Headset";if(str5.indexOf("phone")>=0)result2="Phone";if(str5.indexOf("macbook")>=0)result2="Computer";if(str5.indexOf("imac")>=0)result2="Computer";if(str5.indexOf("ipad")>=0)result2="Tablet";if(str5.indexOf("watch")>=0)result2="Watch";if(str5.indexOf("headphone")>=0)result2="Headset";return result2}function parseBluetoothManufacturer(str5){let result2=str5.split(" ")[0];if(str5=str5.toLowerCase(),str5.indexOf("apple")>=0)result2="Apple";if(str5.indexOf("ipad")>=0)result2="Apple";if(str5.indexOf("imac")>=0)result2="Apple";if(str5.indexOf("iphone")>=0)result2="Apple";if(str5.indexOf("magic mouse")>=0)result2="Apple";if(str5.indexOf("magic track")>=0)result2="Apple";if(str5.indexOf("macbook")>=0)result2="Apple";return result2}function parseBluetoothVendor(str5){let id=parseInt(str5);if(!isNaN(id))return bluetoothVendors[id]}function parseLinuxBluetoothInfo(lines,macAddr1,macAddr2){let result2={};return result2.device=null,result2.name=util4.getValue(lines,"name","="),result2.manufacturer=null,result2.macDevice=macAddr1,result2.macHost=macAddr2,result2.batteryPercent=null,result2.type=parseBluetoothType(result2.name.toLowerCase()),result2.connected=!1,result2}function parseDarwinBluetoothDevices(bluetoothObject,macAddr2){let result2={},typeStr=((bluetoothObject.device_minorClassOfDevice_string||bluetoothObject.device_majorClassOfDevice_string||bluetoothObject.device_minorType||"")+(bluetoothObject.device_name||"")).toLowerCase();return result2.device=bluetoothObject.device_services||"",result2.name=bluetoothObject.device_name||"",result2.manufacturer=bluetoothObject.device_manufacturer||parseBluetoothVendor(bluetoothObject.device_vendorID)||parseBluetoothManufacturer(bluetoothObject.device_name||"")||"",result2.macDevice=(bluetoothObject.device_addr||bluetoothObject.device_address||"").toLowerCase().replace(/-/g,":"),result2.macHost=macAddr2,result2.batteryPercent=bluetoothObject.device_batteryPercent||null,result2.type=parseBluetoothType(typeStr),result2.connected=bluetoothObject.device_isconnected==="attrib_Yes"||!1,result2}function parseWindowsBluetooth(lines){let result2={};return result2.device=null,result2.name=util4.getValue(lines,"name",":"),result2.manufacturer=util4.getValue(lines,"manufacturer",":"),result2.macDevice=null,result2.macHost=null,result2.batteryPercent=null,result2.type=parseBluetoothType(result2.name.toLowerCase()),result2.connected=null,result2}function bluetoothDevices(callback){return new Promise((resolve15)=>{process.nextTick(()=>{let result2=[];if(_linux){util4.getFilesInPath("/var/lib/bluetooth/").forEach((element)=>{let filename=path6.basename(element),pathParts=element.split("/"),macAddr1=pathParts.length>=6?pathParts[pathParts.length-2]:null,macAddr2=pathParts.length>=7?pathParts[pathParts.length-3]:null;if(filename==="info"){let infoFile=fs3.readFileSync(element,{encoding:"utf8"}).split(`
3652
3652
  `);result2.push(parseLinuxBluetoothInfo(infoFile,macAddr1,macAddr2))}});try{let hdicon=execSync18("hcitool con",util4.execOptsLinux).toString().toLowerCase();for(let i2=0;i2<result2.length;i2++)if(result2[i2].macDevice&&result2[i2].macDevice.length>10&&hdicon.indexOf(result2[i2].macDevice.toLowerCase())>=0)result2[i2].connected=!0}catch{util4.noop()}if(callback)callback(result2);resolve15(result2)}if(_darwin)exec3("system_profiler SPBluetoothDataType -json",(error2,stdout)=>{if(!error2)try{let outObj=JSON.parse(stdout.toString());if(outObj.SPBluetoothDataType&&outObj.SPBluetoothDataType.length&&outObj.SPBluetoothDataType[0]&&outObj.SPBluetoothDataType[0].device_title&&outObj.SPBluetoothDataType[0].device_title.length){let macAddr2=null;if(outObj.SPBluetoothDataType[0].local_device_title&&outObj.SPBluetoothDataType[0].local_device_title.general_address)macAddr2=outObj.SPBluetoothDataType[0].local_device_title.general_address.toLowerCase().replace(/-/g,":");outObj.SPBluetoothDataType[0].device_title.forEach((element)=>{let obj=element,objKey=Object.keys(obj);if(objKey&&objKey.length===1){let innerObject=obj[objKey[0]];innerObject.device_name=objKey[0];let bluetoothDevice=parseDarwinBluetoothDevices(innerObject,macAddr2);result2.push(bluetoothDevice)}})}if(outObj.SPBluetoothDataType&&outObj.SPBluetoothDataType.length&&outObj.SPBluetoothDataType[0]&&outObj.SPBluetoothDataType[0].device_connected&&outObj.SPBluetoothDataType[0].device_connected.length){let macAddr2=outObj.SPBluetoothDataType[0].controller_properties&&outObj.SPBluetoothDataType[0].controller_properties.controller_address?outObj.SPBluetoothDataType[0].controller_properties.controller_address.toLowerCase().replace(/-/g,":"):null;outObj.SPBluetoothDataType[0].device_connected.forEach((element)=>{let obj=element,objKey=Object.keys(obj);if(objKey&&objKey.length===1){let innerObject=obj[objKey[0]];innerObject.device_name=objKey[0],innerObject.device_isconnected="attrib_Yes";let bluetoothDevice=parseDarwinBluetoothDevices(innerObject,macAddr2);result2.push(bluetoothDevice)}})}if(outObj.SPBluetoothDataType&&outObj.SPBluetoothDataType.length&&outObj.SPBluetoothDataType[0]&&outObj.SPBluetoothDataType[0].device_not_connected&&outObj.SPBluetoothDataType[0].device_not_connected.length){let macAddr2=outObj.SPBluetoothDataType[0].controller_properties&&outObj.SPBluetoothDataType[0].controller_properties.controller_address?outObj.SPBluetoothDataType[0].controller_properties.controller_address.toLowerCase().replace(/-/g,":"):null;outObj.SPBluetoothDataType[0].device_not_connected.forEach((element)=>{let obj=element,objKey=Object.keys(obj);if(objKey&&objKey.length===1){let innerObject=obj[objKey[0]];innerObject.device_name=objKey[0],innerObject.device_isconnected="attrib_No";let bluetoothDevice=parseDarwinBluetoothDevices(innerObject,macAddr2);result2.push(bluetoothDevice)}})}}catch{util4.noop()}if(callback)callback(result2);resolve15(result2)});if(_windows)util4.powerShell("Get-CimInstance Win32_PNPEntity | select PNPClass, Name, Manufacturer, Status, Service, ConfigManagerErrorCode, Present | fl").then((stdout,error2)=>{if(!error2)stdout.toString().split(/\n\s*\n/).forEach((part)=>{let lines=part.split(`
3653
- `),service=util4.getValue(lines,"Service",":"),errorCode=util4.getValue(lines,"ConfigManagerErrorCode",":");if(util4.getValue(lines,"PNPClass",":").toLowerCase()==="bluetooth"&&errorCode==="0"&&service==="")result2.push(parseWindowsBluetooth(lines))});if(callback)callback(result2);resolve15(result2)});if(_freebsd||_netbsd||_openbsd||_sunos)resolve15(null)})})}exports.bluetoothDevices=bluetoothDevices});var require_lib5=__commonJS((exports)=>{var lib_version=require_package().version,util4=require_util3(),system=require_system(),osInfo=require_osinfo(),cpu=require_cpu(),memory=require_memory(),battery=require_battery(),graphics=require_graphics(),filesystem=require_filesystem(),network=require_network(),wifi=require_wifi(),processes=require_processes(),users=require_users(),internet=require_internet(),docker=require_docker(),vbox=require_virtualbox(),printer=require_printer(),usb=require_usb(),audio=require_audio(),bluetooth=require_bluetooth(),_platform=process.platform,_windows=_platform==="win32",_freebsd=_platform==="freebsd",_openbsd=_platform==="openbsd",_netbsd=_platform==="netbsd",_sunos=_platform==="sunos";if(_windows)util4.getCodepage(),util4.getPowershell();function version(){return lib_version}function getStaticData(callback){return new Promise((resolve15)=>{process.nextTick(()=>{let data={};data.version=version(),Promise.all([system.system(),system.bios(),system.baseboard(),system.chassis(),osInfo.osInfo(),osInfo.uuid(),osInfo.versions(),cpu.cpu(),cpu.cpuFlags(),graphics.graphics(),network.networkInterfaces(),memory.memLayout(),filesystem.diskLayout(),audio.audio(),bluetooth.bluetoothDevices(),usb.usb(),printer.printer()]).then((res)=>{if(data.system=res[0],data.bios=res[1],data.baseboard=res[2],data.chassis=res[3],data.os=res[4],data.uuid=res[5],data.versions=res[6],data.cpu=res[7],data.cpu.flags=res[8],data.graphics=res[9],data.net=res[10],data.memLayout=res[11],data.diskLayout=res[12],data.audio=res[13],data.bluetooth=res[14],data.usb=res[15],data.printer=res[16],callback)callback(data);resolve15(data)})})})}function getDynamicData(srv,iface,callback){if(util4.isFunction(iface))callback=iface,iface="";if(util4.isFunction(srv))callback=srv,srv="";return new Promise((resolve15)=>{process.nextTick(()=>{iface=iface||network.getDefaultNetworkInterface(),srv=srv||"";let functionProcessed=(()=>{let totalFunctions=15;if(_windows)totalFunctions=13;if(_freebsd||_openbsd||_netbsd)totalFunctions=11;if(_sunos)totalFunctions=6;return function(){if(--totalFunctions===0){if(callback)callback(data);resolve15(data)}}})(),data={};if(data.time=osInfo.time(),data.node=process.versions.node,data.v8=process.versions.v8,cpu.cpuCurrentSpeed().then((res)=>{data.cpuCurrentSpeed=res,functionProcessed()}),users.users().then((res)=>{data.users=res,functionProcessed()}),processes.processes().then((res)=>{data.processes=res,functionProcessed()}),cpu.currentLoad().then((res)=>{data.currentLoad=res,functionProcessed()}),!_sunos)cpu.cpuTemperature().then((res)=>{data.temp=res,functionProcessed()});if(!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)network.networkStats(iface).then((res)=>{data.networkStats=res,functionProcessed()});if(!_sunos)network.networkConnections().then((res)=>{data.networkConnections=res,functionProcessed()});if(memory.mem().then((res)=>{data.mem=res,functionProcessed()}),!_sunos)battery().then((res)=>{data.battery=res,functionProcessed()});if(!_sunos)processes.services(srv).then((res)=>{data.services=res,functionProcessed()});if(!_sunos)filesystem.fsSize().then((res)=>{data.fsSize=res,functionProcessed()});if(!_windows&&!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)filesystem.fsStats().then((res)=>{data.fsStats=res,functionProcessed()});if(!_windows&&!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)filesystem.disksIO().then((res)=>{data.disksIO=res,functionProcessed()});if(!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)wifi.wifiNetworks().then((res)=>{data.wifiNetworks=res,functionProcessed()});internet.inetLatency().then((res)=>{data.inetLatency=res,functionProcessed()})})})}function getAllData(srv,iface,callback){return new Promise((resolve15)=>{process.nextTick(()=>{let data={};if(iface&&util4.isFunction(iface)&&!callback)callback=iface,iface="";if(srv&&util4.isFunction(srv)&&!iface&&!callback)callback=srv,srv="",iface="";getStaticData().then((res)=>{data=res,getDynamicData(srv,iface).then((res2)=>{for(let key in res2)if({}.hasOwnProperty.call(res2,key))data[key]=res2[key];if(callback)callback(data);resolve15(data)})})})})}function get3(valueObject,callback){return new Promise((resolve15)=>{process.nextTick(()=>{let allPromises=Object.keys(valueObject).filter((func)=>({}).hasOwnProperty.call(exports,func)).map((func)=>{let params=valueObject[func].substring(valueObject[func].lastIndexOf("(")+1,valueObject[func].lastIndexOf(")")),funcWithoutParams=func.indexOf(")")>=0?func.split(")")[1].trim():func;if(funcWithoutParams=func.indexOf("|")>=0?func.split("|")[0].trim():funcWithoutParams,params)return exports[funcWithoutParams](params);else return exports[funcWithoutParams]("")});Promise.all(allPromises).then((data)=>{let result2={},i2=0;for(let key in valueObject)if({}.hasOwnProperty.call(valueObject,key)&&{}.hasOwnProperty.call(exports,key)&&data.length>i2){if(valueObject[key]==="*"||valueObject[key]==="all")result2[key]=data[i2];else{let keys=valueObject[key],filter="",filterParts=[];if(keys.indexOf(")")>=0)keys=keys.split(")")[1].trim();if(keys.indexOf("|")>=0)filter=keys.split("|")[1].trim(),filterParts=filter.split(":"),keys=keys.split("|")[0].trim();if(keys=keys.replace(/,/g," ").replace(/ +/g," ").split(" "),data[i2])if(Array.isArray(data[i2])){let partialArray=[];data[i2].forEach((element)=>{let partialRes={};if(keys.length===1&&(keys[0]==="*"||keys[0]==="all"))partialRes=element;else keys.forEach((k2)=>{if({}.hasOwnProperty.call(element,k2))partialRes[k2]=element[k2]});if(filter&&filterParts.length===2){if({}.hasOwnProperty.call(partialRes,filterParts[0].trim())){let val=partialRes[filterParts[0].trim()];if(typeof val==="number"){if(val===parseFloat(filterParts[1].trim()))partialArray.push(partialRes)}else if(typeof val==="string"){if(val.toLowerCase()===filterParts[1].trim().toLowerCase())partialArray.push(partialRes)}}}else partialArray.push(partialRes)}),result2[key]=partialArray}else{let partialRes={};keys.forEach((k2)=>{if({}.hasOwnProperty.call(data[i2],k2))partialRes[k2]=data[i2][k2]}),result2[key]=partialRes}else result2[key]={}}i2++}if(callback)callback(result2);resolve15(result2)})})})}function observe(valueObject,interval,callback){let _data=null;return setInterval(()=>{get3(valueObject).then((data)=>{if(JSON.stringify(_data)!==JSON.stringify(data))_data=Object.assign({},data),callback(data)})},interval)}exports.version=version;exports.system=system.system;exports.bios=system.bios;exports.baseboard=system.baseboard;exports.chassis=system.chassis;exports.time=osInfo.time;exports.osInfo=osInfo.osInfo;exports.versions=osInfo.versions;exports.shell=osInfo.shell;exports.uuid=osInfo.uuid;exports.cpu=cpu.cpu;exports.cpuFlags=cpu.cpuFlags;exports.cpuCache=cpu.cpuCache;exports.cpuCurrentSpeed=cpu.cpuCurrentSpeed;exports.cpuTemperature=cpu.cpuTemperature;exports.currentLoad=cpu.currentLoad;exports.fullLoad=cpu.fullLoad;exports.mem=memory.mem;exports.memLayout=memory.memLayout;exports.battery=battery;exports.graphics=graphics.graphics;exports.fsSize=filesystem.fsSize;exports.fsOpenFiles=filesystem.fsOpenFiles;exports.blockDevices=filesystem.blockDevices;exports.fsStats=filesystem.fsStats;exports.disksIO=filesystem.disksIO;exports.diskLayout=filesystem.diskLayout;exports.networkInterfaceDefault=network.networkInterfaceDefault;exports.networkGatewayDefault=network.networkGatewayDefault;exports.networkInterfaces=network.networkInterfaces;exports.networkStats=network.networkStats;exports.networkConnections=network.networkConnections;exports.wifiNetworks=wifi.wifiNetworks;exports.wifiInterfaces=wifi.wifiInterfaces;exports.wifiConnections=wifi.wifiConnections;exports.services=processes.services;exports.processes=processes.processes;exports.processLoad=processes.processLoad;exports.users=users.users;exports.inetChecksite=internet.inetChecksite;exports.inetLatency=internet.inetLatency;exports.dockerInfo=docker.dockerInfo;exports.dockerImages=docker.dockerImages;exports.dockerContainers=docker.dockerContainers;exports.dockerContainerStats=docker.dockerContainerStats;exports.dockerContainerProcesses=docker.dockerContainerProcesses;exports.dockerVolumes=docker.dockerVolumes;exports.dockerAll=docker.dockerAll;exports.vboxInfo=vbox.vboxInfo;exports.printer=printer.printer;exports.usb=usb.usb;exports.audio=audio.audio;exports.bluetoothDevices=bluetooth.bluetoothDevices;exports.getStaticData=getStaticData;exports.getDynamicData=getDynamicData;exports.getAllData=getAllData;exports.get=get3;exports.observe=observe;exports.powerShellStart=util4.powerShellStart;exports.powerShellRelease=util4.powerShellRelease});import os4 from"os";function toGB(bytes){return Math.round(bytes/1073741824*10)/10}function bar(percent,width){let p=Math.max(0,Math.min(100,percent)),filled=Math.round(p/100*width);return`[${"=".repeat(filled)}${"-".repeat(width-filled)}]`}function pickColor(percent){if(percent>80)return palette.error;if(percent>50)return palette.warning;return palette.emerald}function SystemStats(){let[stats2,setStats]=import_react19.useState(null),mountedRef=import_react19.useRef(!0);if(import_react19.useEffect(()=>{mountedRef.current=!0;async function refresh(){try{let[cpu2,mem]=await Promise.all([import_systeminformation.default.currentLoad(),import_systeminformation.default.mem()]);if(!mountedRef.current)return;let coreCount=os4.cpus().length,avg1=os4.loadavg()[0],sorted=cpu2.cpus.map((c,i2)=>({id:i2,load:Math.round(c.load)})).sort((a,b3)=>b3.load-a.load);setStats({cpu:{combined:Math.round(cpu2.currentLoad),hotCores:sorted.slice(0,3),coreCount},ram:{usedGB:toGB(mem.active),totalGB:toGB(mem.total),percent:mem.total>0?Math.round(mem.active/mem.total*100):0},swap:{usedGB:toGB(mem.swapused),totalGB:toGB(mem.swaptotal),percent:mem.swaptotal>0?Math.round(mem.swapused/mem.swaptotal*100):0},load:{percent:coreCount>0?Math.round(avg1/coreCount*100):0,busy:Math.round(avg1*10)/10,total:coreCount}})}catch{}}refresh();let timer2=setInterval(refresh,3000);return()=>{mountedRef.current=!1,clearInterval(timer2)}},[]),!stats2)return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,backgroundColor:palette.bgLight,children:import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:"genie"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` v${VERSION}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this);let{cpu,ram,swap,load:load3}=stats2,hotStr=cpu.hotCores.map((c)=>`#${c.id} ${c.load}%`).join(" ");return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,backgroundColor:palette.bgLight,children:[import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:"genie"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` v${VERSION}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"CPU "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(cpu.combined),children:`${String(cpu.combined).padStart(3)}% ${bar(cpu.combined,8)}`},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` ${cpu.coreCount}c`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:" hot "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.warning,children:hotStr},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"RAM "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(ram.percent),children:`${ram.usedGB}/${ram.totalGB}G ${bar(ram.percent,8)}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),swap.totalGB>0?import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"SWP "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(swap.percent),children:`${swap.usedGB}/${swap.totalGB}G ${bar(swap.percent,8)}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Load "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(load3.percent),children:`${load3.percent}%`},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` (${load3.busy}/${load3.total} busy)`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var import_react19,import_systeminformation;var init_SystemStats=__esm(()=>{init_version();init_theme2();init_jsx_dev_runtime();import_react19=__toESM(require_react_development(),1),import_systeminformation=__toESM(require_lib5(),1)});function validateName(name){if(name.length===0)return null;try{return validateBranchName(name),null}catch(err){return err instanceof Error?err.message:String(err)}}function TeamCreate({availableAgents,workspaceRoot,onConfirm,onCancel}){let[step,setStep]=import_react21.useState("name"),[teamName,setTeamName]=import_react21.useState(""),[selected,setSelected]=import_react21.useState(()=>new Set),[memberCursor,setMemberCursor]=import_react21.useState(0),nameError=import_react21.useMemo(()=>validateName(teamName),[teamName]),nameValid=teamName.length>0&&nameError===null,intent=import_react21.useMemo(()=>({kind:"create-team",name:teamName.length>0?teamName:"TEAM_NAME",repo:workspaceRoot}),[teamName,workspaceRoot]),handleNameChange=import_react21.useCallback((value)=>{setTeamName(value)},[]),advanceFromName=import_react21.useCallback(()=>{if(!nameValid)return;setStep("members")},[nameValid]),toggleMember=import_react21.useCallback((name)=>{setSelected((prev)=>{let next=new Set(prev);if(next.has(name))next.delete(name);else next.add(name);return next})},[]),confirmMembers=import_react21.useCallback(()=>{onConfirm({teamName,members:Array.from(selected)})},[onConfirm,teamName,selected]);return useKeyboard((key)=>{if(step==="name"){handleNameStepKey(key,{onCancel,nameValid,advanceFromName});return}handleMembersStepKey(key,{availableAgents,memberCursor,setStep,setMemberCursor,toggleMember,confirmMembers})}),import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:"#0a0a0a",children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderColor:palette.violet,backgroundColor:"#111111",paddingX:3,paddingY:1,flexDirection:"column",width:64,gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:"New team"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:step==="name"?" \u2014 step 1 of 2":" \u2014 step 2 of 2"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),step==="name"?import_jsx_dev_runtime2.jsxDEV(NameStep,{value:teamName,onChange:handleNameChange,onSubmit:advanceFromName,errorMessage:nameError},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV(MembersStep,{agents:availableAgents,selected,cursor:memberCursor},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV(CliPreviewLine,{intent,hint:step==="name"?"Enter: next \xB7 Esc: cancel":"Space: toggle \xB7 Enter: create \xB7 Esc: back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}function NameStep({value,onChange,onSubmit,errorMessage}){return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"Team name (git-branch-safe):"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("input",{value,onInput:onChange,onChange,onSubmit,focused:!0,placeholder:"feat/auth-bug",backgroundColor:palette.bg,textColor:palette.text,placeholderColor:palette.textMuted},void 0,!1,void 0,this),errorMessage!==null?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.error,children:`\u26A0 ${errorMessage}`},void 0,!1,void 0,this)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}function MembersStep({agents,selected,cursor}){if(agents.length===0)return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"No agents registered"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Members can be hired later via `genie team hire`."},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"Select members (space to toggle):"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:agents.map((name,idx)=>{let isSelected=selected.has(name),isCursor=idx===cursor,tick=isSelected?"[x]":"[ ]",prefix=isCursor?"\u25B6 ":" ";return import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:isCursor?palette.cyan:palette.textMuted,children:prefix},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:isSelected?palette.success:palette.textDim,children:tick},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:` ${name}`},void 0,!1,void 0,this)]},name,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function isEnter(key){return key.name==="enter"||key.name==="return"}function handleNameStepKey(key,opts){if(key.name==="escape"){opts.onCancel();return}if(isEnter(key)&&opts.nameValid)opts.advanceFromName()}function handleMembersStepKey(key,opts){if(key.name==="escape"){opts.setStep("name");return}if(opts.availableAgents.length===0){if(isEnter(key))opts.confirmMembers();return}if(key.name==="up"||key.name==="k"){opts.setMemberCursor((prev)=>prev<=0?opts.availableAgents.length-1:prev-1);return}if(key.name==="down"||key.name==="j"){opts.setMemberCursor((prev)=>prev>=opts.availableAgents.length-1?0:prev+1);return}if(key.name==="space"){let name=opts.availableAgents[opts.memberCursor];if(name)opts.toggleMember(name);return}if(isEnter(key))opts.confirmMembers()}var import_react21;var init_TeamCreate=__esm(async()=>{init_team_manager();init_theme2();init_CliPreviewLine();init_jsx_dev_runtime();await init_react();import_react21=__toESM(require_react_development(),1)});function getNodeIcon(node){if(node.type==="agent")return getAgentIcon(node);switch(node.type){case"session":return node.data.attached?"\u25B6":"\u25B8";case"window":return node.data.active?"\u25A0":"\u25A1";case"pane":return getPaneIcon(node);default:return" "}}function getAgentIcon(node){switch(node.wsAgentState){case"running":return"\u25CF";case"stopped":return"\u25CB";case"error":return"\u2298";case"spawning":return"\u231B";default:return"\u25CB"}}function getPaneIcon(node){if(node.data.isDead)return"\u2718";if(node.agentState==="working")return"\u25CF";if(node.agentState==="idle")return"\u25CB";if(node.agentState==="permission")return"\u26A0";if(node.agentState==="error")return"\u2718";if(node.data.command==="claude")return"\u25C6";return"\u25CB"}function getNodeColor(node){if(node.type==="agent")return getAgentColor(node);switch(node.type){case"session":return node.data.attached?palette.emerald:palette.textDim;case"window":return node.data.active?palette.cyan:palette.text;case"pane":return getPaneColor(node);default:return palette.text}}function getAgentColor(node){switch(node.wsAgentState){case"running":return palette.emerald;case"stopped":return palette.textDim;case"error":return palette.error;case"spawning":return palette.warning;default:return palette.textDim}}function getPaneColor(node){if(node.data.isDead)return palette.error;if(node.agentState==="working")return palette.cyan;if(node.agentState==="permission")return palette.warning;if(node.agentState==="error")return palette.error;if(node.agentState==="idle")return palette.textDim;if(node.data.command==="claude")return palette.cyan;return palette.textDim}function getNodeSuffix(node){if(node.type==="agent"){if(node.wsAgentState==="spawning"&&node.activePanes===0)return" [stuck \u2014 press R to retry]";let wc=node.data.windowCount;if(wc>1)return` (${wc} windows)`;if(wc===1)return" (1 window)";return""}if(node.type==="session"||node.type==="pane"){let count=node.activePanes;if(count>0)return` ${icons.agent}${count}`}return""}function getStateColor(state){switch(state){case"working":return palette.cyan;case"idle":return palette.textDim;case"permission":return palette.warning;case"error":return palette.error;default:return palette.textMuted}}var import_react22,TreeNodeRow;var init_TreeNode=__esm(()=>{init_theme2();init_jsx_dev_runtime();import_react22=__toESM(require_react_development(),1),TreeNodeRow=import_react22.memo(function({node,selected,onSelect,onToggle,onContextMenu}){let indent2=" ".repeat(node.depth),hasChildren=node.children.length>0,expandIcon=hasChildren?node.expanded?icons.expanded:icons.collapsed:" ",icon=getNodeIcon(node),color2=getNodeColor(node),suffix=getNodeSuffix(node);return import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",backgroundColor:selected?palette.violet:void 0,onMouseDown:(event)=>{if(event.button===2&&onContextMenu){onSelect(node.id),onContextMenu(node.id);return}if(onSelect(node.id),hasChildren)onToggle(node.id)},children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:[indent2,expandIcon," "]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:color2,children:[icon," "]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:selected?"#ffffff":palette.text,children:node.label},void 0,!1,void 0,this),suffix?import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:suffix},void 0,!1,void 0,this):null,node.agentState?import_jsx_dev_runtime2.jsxDEV("span",{fg:getStateColor(node.agentState),children:[" ",node.agentState]},void 0,!0,void 0,this):null,import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:` [${node.type}]`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)})});function useDiagnosticsRefresh(setDiagnostics,setRequestedInitialAgent){import_react24.useEffect(()=>{let active=!0;async function refresh(){try{let snap=await collectDiagnostics();if(!active)return;setDiagnostics(snap);let signaledAgent=consumeInitialAgentSignal();if(signaledAgent)setRequestedInitialAgent(signaledAgent)}catch(err){console.error("TUI: diagnostics failed:",err)}}refresh();let timer2=setInterval(refresh,2000);return()=>{active=!1,clearInterval(timer2)}},[setDiagnostics,setRequestedInitialAgent])}function useSessionTreeBuilder(diagnostics,workspaceRoot,setSessionTree){import_react24.useEffect(()=>{if(!diagnostics)return;let newTree;if(workspaceRoot){let agentNames=scanAgents(workspaceRoot);newTree=buildWorkspaceTree({agentNames,sessions:diagnostics.sessions,executors:diagnostics.executors})}else newTree=buildSessionTree(diagnostics);setSessionTree((prev)=>mergeExpandedState(prev,newTree))},[diagnostics,workspaceRoot,setSessionTree])}function useStableSelection(flatNodes,selectedIndex,setSelectedIndex,selectedNodeId){import_react24.useEffect(()=>{let node=flatNodes[selectedIndex]?.node;if(node)selectedNodeId.current=node.id},[selectedIndex,flatNodes,selectedNodeId]),import_react24.useLayoutEffect(()=>{if(flatNodes.length===0)return;if(selectedIndex>=flatNodes.length){setSelectedIndex(flatNodes.length-1);return}if(!selectedNodeId.current)return;let currentAtIndex=flatNodes[selectedIndex]?.node;if(currentAtIndex&&currentAtIndex.id===selectedNodeId.current)return;let restored=flatNodes.findIndex((n)=>n.node.id===selectedNodeId.current);if(restored>=0)setSelectedIndex(restored)},[flatNodes])}function useInitialAgentSelection(requestedInitialAgent,flatNodes,setSelectedIndex,setRequestedInitialAgent,onTmuxSessionSelect){import_react24.useEffect(()=>{if(!requestedInitialAgent||flatNodes.length===0)return;let idx=flatNodes.findIndex((n)=>n.node.id===`agent:${requestedInitialAgent}`);if(idx<0)return;setSelectedIndex(idx);let node=flatNodes[idx].node;if(node.type==="agent"&&node.wsAgentState!=="running"&&node.wsAgentState!=="spawning")spawnAgent(agentNameFromNode(node),onTmuxSessionSelect);setRequestedInitialAgent(void 0)},[requestedInitialAgent,flatNodes,onTmuxSessionSelect,setSelectedIndex,setRequestedInitialAgent])}function useAutoAttach(flatNodes,selectedIndex,lastTarget,onTmuxSessionSelect){import_react24.useEffect(()=>{let current=flatNodes[selectedIndex]?.node;if(!current)return;let target=getSessionTarget(current);if(!target)return;if(current.type==="agent"&&current.wsAgentState!=="running")return;let key=`${target.sessionName}:${target.windowIndex??""}`;if(key===lastTarget.current)return;lastTarget.current=key,onTmuxSessionSelect(target.sessionName,target.windowIndex)},[selectedIndex,flatNodes,onTmuxSessionSelect,lastTarget])}function useNavKeyboard(opts){useKeyboard((key)=>{if(opts.keyboardDisabled)return;if(opts.spawnIntoAgent!==null||opts.spawnPickerTarget!==null)return;if(tryOpenTeamCreate(key,{workspaceRoot:opts.workspaceRoot,showTeamCreate:opts.showTeamCreate,contextMenuNodeId:opts.contextMenuNodeId,handleOpenTeamCreate:opts.handleOpenTeamCreate}))return;if(opts.showTeamCreate)return;handleKeyboardInput(key,opts)})}function computeNavCounts(workspaceRoot,sessionTree,diagnostics){if(workspaceRoot)return{agentCount:sessionTree.filter((n)=>n.type==="agent").length,runningCount:sessionTree.filter((n)=>n.wsAgentState==="running").length};let paneSum=diagnostics?.sessions.reduce((sum,s2)=>sum+s2.windows.reduce((ws,w2)=>ws+w2.panes.length,0),0)??0;return{agentCount:diagnostics?.sessions.length??0,runningCount:paneSum}}function Nav({onTmuxSessionSelect,onNewAgentWindow,workspaceRoot,initialAgent,keyboardDisabled=!1}){let[diagnostics,setDiagnostics]=import_react24.useState(null),[sessionTree,setSessionTree]=import_react24.useState([]),[selectedIndex,setSelectedIndex]=import_react24.useState(0),[requestedInitialAgent,setRequestedInitialAgent]=import_react24.useState(initialAgent),[contextMenuNodeId,setContextMenuNodeId]=import_react24.useState(null),[spawnIntoAgent,setSpawnIntoAgent]=import_react24.useState(null),[spawnPickerTarget,setSpawnPickerTarget]=import_react24.useState(null),lastTarget=import_react24.useRef(null),selectedNodeId=import_react24.useRef(null);useDiagnosticsRefresh(setDiagnostics,setRequestedInitialAgent),useSessionTreeBuilder(diagnostics,workspaceRoot,setSessionTree);let flatNodes=import_react24.useMemo(()=>flattenTree(sessionTree),[sessionTree]);useStableSelection(flatNodes,selectedIndex,setSelectedIndex,selectedNodeId),useInitialAgentSelection(requestedInitialAgent,flatNodes,setSelectedIndex,setRequestedInitialAgent,onTmuxSessionSelect),useAutoAttach(flatNodes,selectedIndex,lastTarget,onTmuxSessionSelect);let handleSelect=import_react24.useCallback((id)=>{let idx=flatNodes.findIndex((n)=>n.node.id===id);if(idx>=0)setSelectedIndex(idx)},[flatNodes]),handleToggle=import_react24.useCallback((id)=>{setSessionTree((prev)=>toggleNode(prev,id))},[]),handleVerticalNav=import_react24.useCallback((keyName2)=>{let rowCount=flatNodes.length;if(rowCount===0)return;if(keyName2==="up"||keyName2==="k")setSelectedIndex((prev)=>prev===0?rowCount-1:prev-1);else if(keyName2==="down"||keyName2==="j")setSelectedIndex((prev)=>prev>=rowCount-1?0:prev+1)},[flatNodes.length]),handleExpandCollapse=import_react24.useCallback((keyName2)=>{let node=flatNodes[selectedIndex]?.node;if(!node)return;if((keyName2==="right"||keyName2==="l")&&node.children.length>0&&!node.expanded)handleToggle(node.id);else if((keyName2==="left"||keyName2==="h")&&node.expanded)handleToggle(node.id)},[flatNodes,selectedIndex,handleToggle]),handleEnter=import_react24.useCallback(()=>{let node=flatNodes[selectedIndex]?.node;if(!node)return;if(node.type==="agent"){handleEnterAgent(node,onTmuxSessionSelect);return}if(node.children.length>0)handleToggle(node.id);let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex)},[flatNodes,selectedIndex,handleToggle,onTmuxSessionSelect]),handleRetry=import_react24.useCallback(()=>{let node=flatNodes[selectedIndex]?.node;if(!node||node.type!=="agent")return;if(node.wsAgentState!=="spawning"&&node.wsAgentState!=="error")return;(async()=>{try{let{reconcileStaleSpawns:reconcileStaleSpawns2}=await Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry));await reconcileStaleSpawns2()}catch{}spawnAgent(agentNameFromNode(node),onTmuxSessionSelect)})()},[flatNodes,selectedIndex,onTmuxSessionSelect]),handleContextMenu=import_react24.useCallback((nodeId)=>{let flat=flatNodes.find((n)=>n.node.id===nodeId);if(flat&&buildMenuItems(flat.node).length>0)setContextMenuNodeId(nodeId)},[flatNodes]),handleContextMenuAction=import_react24.useCallback((action,payload)=>{let node=flatNodes.find((n)=>n.node.id===contextMenuNodeId)?.node;if(!node)return;if(setContextMenuNodeId(null),action==="spawn-here"){let target=resolveSpawnHereTarget(node);if(target)setSpawnPickerTarget(target);return}dispatchContextMenuAction(action,node,payload,{sessionTree,onTmuxSessionSelect,onNewAgentWindow,openSpawnInto:setSpawnIntoAgent})},[flatNodes,contextMenuNodeId,sessionTree,onTmuxSessionSelect,onNewAgentWindow]),handleSpawnIntoConfirm=import_react24.useCallback((intent)=>{executeSpawnIntent(intent),setSpawnIntoAgent(null)},[]),handleSpawnIntoCancel=import_react24.useCallback(()=>{setSpawnIntoAgent(null)},[]),handleSpawnPickerConfirm=import_react24.useCallback((intent)=>{setSpawnPickerTarget(null),executeSpawnIntent(intent)},[]),handleSpawnPickerCancel=import_react24.useCallback(()=>{setSpawnPickerTarget(null)},[]),_menuDisabled=keyboardDisabled||contextMenuNodeId!==null,{showTeamCreate,handleOpenTeamCreate,handleTeamCreateConfirm,handleTeamCreateCancel}=useTeamCreateControls({workspaceRoot,diagnostics,onTmuxSessionSelect});useNavKeyboard({keyboardDisabled,spawnIntoAgent,spawnPickerTarget,workspaceRoot,showTeamCreate,contextMenuNodeId,handleOpenTeamCreate,flatNodes,selectedIndex,setContextMenuNodeId,handleVerticalNav,handleExpandCollapse,handleEnter,handleRetry,onNewAgentWindow});let{agentCount,runningCount}=computeNavCounts(workspaceRoot,sessionTree,diagnostics),headerLabel=workspaceRoot?"Agents":"Sessions";return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",width:"100%",height:"100%",backgroundColor:palette.bg,children:[import_jsx_dev_runtime2.jsxDEV("box",{height:1,paddingX:1,backgroundColor:palette.bgLight,children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:headerLabel},void 0,!1,void 0,this),diagnostics?import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:[" ",workspaceRoot?`${runningCount}/${agentCount}`:`${agentCount}s ${runningCount}p`]},void 0,!0,void 0,this):null]},void 0,!0,void 0,this)},void 0,!1,void 0,this),diagnostics?import_jsx_dev_runtime2.jsxDEV("scrollbox",{focused:!0,height:"100%",style:{scrollbarOptions:{showArrows:!1,trackOptions:{foregroundColor:palette.scrollThumb,backgroundColor:palette.scrollTrack}}},children:flatNodes.map((flat,i2)=>import_jsx_dev_runtime2.jsxDEV(TreeNodeRow,{node:flat.node,selected:i2===selectedIndex,onSelect:handleSelect,onToggle:handleToggle,onContextMenu:handleContextMenu},flat.node.id,!1,void 0,this))},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV("box",{flexGrow:1,justifyContent:"center",alignItems:"center",children:import_jsx_dev_runtime2.jsxDEV("text",{fg:palette.textDim,children:"Collecting..."},void 0,!1,void 0,this)},void 0,!1,void 0,this),contextMenuNodeId?import_jsx_dev_runtime2.jsxDEV(ContextMenu,{items:buildMenuItems(flatNodes.find((n)=>n.node.id===contextMenuNodeId)?.node??{}),onAction:handleContextMenuAction,onClose:()=>setContextMenuNodeId(null),positionY:flatNodes.findIndex((n)=>n.node.id===contextMenuNodeId)+1},void 0,!1,void 0,this):null,spawnIntoAgent!==null?import_jsx_dev_runtime2.jsxDEV(SpawnTargetPicker,{agentName:spawnIntoAgent,sessions:diagnostics?.sessions??[],onConfirm:handleSpawnIntoConfirm,onCancel:handleSpawnIntoCancel},void 0,!1,void 0,this):null,spawnPickerTarget!==null?import_jsx_dev_runtime2.jsxDEV(AgentPicker,{target:spawnPickerTarget,onConfirm:handleSpawnPickerConfirm,onCancel:handleSpawnPickerCancel},void 0,!1,void 0,this):null,showTeamCreate?import_jsx_dev_runtime2.jsxDEV(TeamCreate,{availableAgents:workspaceRoot?scanAgents(workspaceRoot):[],workspaceRoot,onConfirm:handleTeamCreateConfirm,onCancel:handleTeamCreateCancel},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV(SystemStats,{},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,paddingX:1,backgroundColor:palette.bgLight,children:import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:buildFooterHint(workspaceRoot)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function useTeamCreateControls(opts){let{workspaceRoot,diagnostics,onTmuxSessionSelect}=opts,[showTeamCreate,setShowTeamCreate]=import_react24.useState(!1),pendingTeamNameRef=import_react24.useRef(null),handleOpenTeamCreate=import_react24.useCallback(()=>{if(!workspaceRoot)return;setShowTeamCreate(!0)},[workspaceRoot]),handleTeamCreateConfirm=import_react24.useCallback((result2)=>{setShowTeamCreate(!1),runTeamCreation(result2,workspaceRoot),pendingTeamNameRef.current=result2.teamName},[workspaceRoot]),handleTeamCreateCancel=import_react24.useCallback(()=>{setShowTeamCreate(!1)},[]);return import_react24.useEffect(()=>{let pending=pendingTeamNameRef.current;if(!pending||!diagnostics)return;let session=diagnostics.sessions.find((s2)=>s2.name===pending);if(!session)return;pendingTeamNameRef.current=null,onTmuxSessionSelect(session.name,resolvePreferredWindowIndex(session,pending))},[diagnostics,onTmuxSessionSelect]),{showTeamCreate,handleOpenTeamCreate,handleTeamCreateConfirm,handleTeamCreateCancel}}function handleEnterAgent(node,onTmuxSessionSelect){if(node.wsAgentState!=="running"&&node.wsAgentState!=="spawning")spawnAgent(agentNameFromNode(node),onTmuxSessionSelect);else if(node.wsAgentState==="running"){let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex)}}function dispatchContextMenuAction(action,node,payload,deps){let name=node.label;if(action==="spawn-into"&&node.type==="agent"&&deps.openSpawnInto){deps.openSpawnInto(agentNameFromNode(node));return}if(handleAttachAction(action,node,deps.onTmuxSessionSelect))return;if(handleRetryAction(action,name,deps.onTmuxSessionSelect))return;if(handleGenieAction(action,name,payload))return;let tmuxServer=process.env.GENIE_TMUX_SERVER||"genie";if(handleRenameAction(action,node,tmuxServer,payload))return;if(handleAgentWindowActions(action,node,name,tmuxServer,deps.onNewAgentWindow))return;if(handleSessionNodeActions(action,node,tmuxServer,payload))return;if(handleWindowNodeActions(action,node,deps.sessionTree,tmuxServer,payload))return;handlePaneNodeActions(action,node,deps.sessionTree,tmuxServer,deps.onNewAgentWindow)}function handleAttachAction(action,node,onTmuxSessionSelect){if(action!=="attach")return!1;let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex);return!0}function handleRetryAction(action,name,onTmuxSessionSelect){if(action!=="retry")return!1;return(async()=>{try{let{reconcileStaleSpawns:reconcileStaleSpawns2}=await Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry));await reconcileStaleSpawns2()}catch{}spawnAgent(name,onTmuxSessionSelect)})(),!0}function handleGenieAction(action,name,payload){if(action==="send"&&payload)return executeGenie(["agent","send",payload,"--to",name]),!0;if(action==="answer-text"&&payload)return executeGenie(["agent","answer",name,`text:${payload}`]),!0;let genieArgs={spawn:["spawn",name],"spawn-plan":["spawn",name,"--plan-mode"],stop:["agent","stop",name],kill:["agent","kill",name],log:["agent","log",name],show:["agent","show",name],read:["read",name],"answer-yes":["agent","answer",name,"yes"],"answer-no":["agent","answer",name,"no"]}[action];if(genieArgs)return executeGenie(genieArgs),!0;return!1}function handleRenameAction(action,node,tmuxServer,payload){if(action==="rename-session"&&payload){let sess=node.type==="agent"?node.data.sessionName||node.label:node.id.split(":").slice(1).join(":");return executeTmux3(["-L",tmuxServer,"rename-session","-t",sess,payload]),!0}if(action==="rename-window"&&payload){let idParts=node.id.split(":"),windowTarget=`${idParts[1]}:${idParts[2]}`;return executeTmux3(["-L",tmuxServer,"rename-window","-t",windowTarget,payload]),!0}if(action==="rename-pane"&&payload&&node.type==="pane"){let paneId=node.data.paneId;return executeTmux3(["-L",tmuxServer,"select-pane","-t",`${paneId}`,"-T",payload]),!0}return!1}function handleAgentWindowActions(action,node,name,tmuxServer,onNewAgentWindow){if(action==="agent-new-window"&&node.type==="agent"){if(onNewAgentWindow)onNewAgentWindow(agentNameFromNode(node));return!0}if(action==="new-empty-window"&&node.type==="agent"){let sessionName=node.data.sessionName||name;return executeTmux3(["-L",tmuxServer,"new-window","-a","-t",sessionName]),!0}return!1}function handleSessionNodeActions(action,node,tmuxServer,payload){if(node.type!=="session")return!1;let sess=node.id.split(":").slice(1).join(":");if(action==="kill-session")return executeTmux3(["-L",tmuxServer,"kill-session","-t",sess]),!0;if(action==="new-window")return executeTmux3(["-L",tmuxServer,"new-window","-a","-t",sess]),!0;if(action==="clone-session")return executeTmux3(["-L",tmuxServer,"new-session","-d","-s",`${sess}-clone`,"-t",sess]),!0;if(action==="spawn-in-session"&&payload)return executeGenie(["spawn",payload,"--session",sess]),!0;return!1}function handleWindowNodeActions(action,node,sessionTree,tmuxServer,payload){if(node.type!=="window")return!1;let idParts=node.id.split(":"),windowTarget=`${idParts[1]}:${idParts[2]}`;if(action==="kill-window")return executeTmux3(["-L",tmuxServer,"kill-window","-t",windowTarget]),!0;if(action==="window-new-agent"){let parentAgent=findParentAgent(sessionTree,node.id);if(parentAgent){let agentFullName=agentNameFromNode(parentAgent),suffix=Date.now()%1e4,role=`${agentFullName}-${suffix}`;executeGenie(["spawn",agentFullName,"--role",role,"--window",windowTarget])}return!0}if(action==="split-pane")return executeTmux3(["-L",tmuxServer,"split-window","-t",windowTarget]),!0;if(action==="spawn-in-window"&&payload)return executeGenie(["spawn",payload,"--session",idParts[1]]),!0;return!1}function handlePaneNodeActions(action,node,sessionTree,tmuxServer,onNewAgentWindow){if(node.type!=="pane")return!1;let paneId=node.data.paneId;if(action==="clone-agent"){let parentAgent=findParentAgent(sessionTree,node.id);if(parentAgent&&onNewAgentWindow)onNewAgentWindow(agentNameFromNode(parentAgent));return!0}if(action==="kill-pane")return executeTmux3(["-L",tmuxServer,"kill-pane","-t",`${paneId}`]),!0;if(action==="split-h")return executeTmux3(["-L",tmuxServer,"split-window","-h","-t",`${paneId}`]),!0;if(action==="split-v")return executeTmux3(["-L",tmuxServer,"split-window","-v","-t",`${paneId}`]),!0;return!1}function buildFooterHint(workspaceRoot){return`\u2191\u2193:nav \u2190\u2192:expand Enter:${workspaceRoot?"spawn/attach":"attach"} ^T:new${workspaceRoot?" ^N:team":""} R:retry .:menu`}function tryOpenTeamCreate(key,opts){if(!key.ctrl||key.name!=="n")return!1;if(!opts.workspaceRoot||opts.showTeamCreate||opts.contextMenuNodeId)return!1;return opts.handleOpenTeamCreate(),!0}function tryOpenContextMenu(flatNodes,selectedIndex,setContextMenuNodeId){let node=flatNodes[selectedIndex]?.node;if(node&&buildMenuItems(node).length>0)return setContextMenuNodeId(node.id),!0;return!1}function dispatchNavKey(key,handlers2,agentAction){let n=key.name;if(n==="up"||n==="k"||n==="down"||n==="j")handlers2.handleVerticalNav(n);else if(n==="right"||n==="l"||n==="left"||n==="h")handlers2.handleExpandCollapse(n);else if(n==="enter"||n==="return")handlers2.handleEnter();else if(n==="r")handlers2.handleRetry();else if(key.ctrl&&n==="t")agentAction()}function handleKeyboardInput(key,opts){if(key.name==="."&&!opts.contextMenuNodeId){if(tryOpenContextMenu(opts.flatNodes,opts.selectedIndex,opts.setContextMenuNodeId))return}if(opts.contextMenuNodeId)return;dispatchNavKey(key,opts,()=>{let node=opts.flatNodes[opts.selectedIndex]?.node;if(node?.type==="agent"&&node.wsAgentState==="running"&&opts.onNewAgentWindow)opts.onNewAgentWindow(agentNameFromNode(node))})}function agentNameFromNode(node){return node.id.replace(/^agent:/,"")}function spawnAgent(name,onTmuxSessionSelect){try{let{spawn:spawn5}=__require("child_process"),{join:join72,resolve:resolve15}=__require("path"),{existsSync:existsSync59,mkdirSync:mkdirSync24,openSync:openSync3}=__require("fs"),{homedir:homedir37}=__require("os"),bunPath=process.execPath||"bun",genieBin=process.argv[1],wsRoot=process.env.GENIE_TUI_WORKSPACE,sessionName=name.replace(/\//g,"-"),cwd;if(wsRoot){let parentName=name.includes("/")?name.slice(0,name.indexOf("/")):name,agentDir=resolve15(join72(wsRoot,"agents",parentName));if(existsSync59(agentDir))cwd=agentDir}let{GENIE_TUI_PANE:_a,GENIE_TUI_RIGHT:_b,GENIE_TUI_WORKSPACE:_c,GENIE_IS_DAEMON:_d,...cleanEnv}=process.env,logDir=join72(homedir37(),".genie","logs","tui-spawn");try{mkdirSync24(logDir,{recursive:!0})}catch{}let logPath=join72(logDir,`${sessionName}-${Date.now()}.log`),logFd;try{logFd=openSync3(logPath,"a")}catch{logFd=void 0}let spawnOpts=logFd!==void 0?{detached:!0,stdio:["ignore",logFd,logFd],cwd,env:cleanEnv}:{detached:!0,stdio:"ignore",cwd,env:cleanEnv},child=genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,"spawn",name,"--session",sessionName,"--new-window"],spawnOpts):spawn5("genie",["spawn",name,"--session",sessionName,"--new-window"],spawnOpts);if(child.on("exit",(code)=>{if(code&&code!==0)console.error(`TUI: spawn "${name}" exited ${code}. See ${logPath}`)}),child.on("error",(err)=>{console.error(`TUI: spawn "${name}" error: ${err.message}. See ${logPath}`)}),child.unref(),onTmuxSessionSelect)attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect)}catch(err){console.error(`TUI: spawn failed for ${name}:`,err instanceof Error?err.message:err)}}function attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect,attempt=0){(async()=>{try{let session=(await collectDiagnostics()).sessions.find((candidate)=>candidate.name===sessionName);if(session){let windowIndex=resolvePreferredWindowIndex(session,sessionName);if(windowIndex!==void 0){onTmuxSessionSelect(sessionName,windowIndex);return}}}catch{}if(attempt>=40){onTmuxSessionSelect(sessionName);return}setTimeout(()=>{attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect,attempt+1)},250)})()}function executeTmux3(args){try{let{spawn:spawn5}=__require("child_process");spawn5("tmux",args,{detached:!0,stdio:"ignore"}).unref()}catch{}}function executeGenie(args){try{let{spawn:spawn5}=__require("child_process"),bunPath=process.execPath||"bun",genieBin=process.argv[1];(genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,...args],{detached:!0,stdio:"ignore"}):spawn5("genie",args,{detached:!0,stdio:"ignore"})).unref()}catch{}}function executeGenieAwaited(args){return new Promise((resolve15,reject)=>{try{let{spawn:spawn5}=__require("child_process"),bunPath=process.execPath||"bun",genieBin=process.argv[1],child=genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,...args],{stdio:"ignore"}):spawn5("genie",args,{stdio:"ignore"});child.on("exit",(code)=>resolve15(code)),child.on("error",reject)}catch(err){reject(err instanceof Error?err:Error(String(err)))}})}function resolveSpawnHereTarget(node){if(node.type==="session"){let sess=node.id.split(":").slice(1).join(":");if(sess.length===0)return null;return{session:sess}}if(node.type==="window"){let idParts=node.id.split(":");if(idParts.length<3)return null;return{session:idParts[1],window:`${idParts[1]}:${idParts[2]}`}}return null}function executeSpawnIntent(intent){try{let{argv}=buildSpawnInvocation(intent);executeGenie(argv)}catch(err){console.error("TUI: spawn-intent execution failed:",err instanceof Error?err.message:err)}}async function runTeamCreation(result2,workspaceRoot){let argv;try{({argv}=buildSpawnInvocation({kind:"create-team",name:result2.teamName,repo:workspaceRoot}))}catch(err){console.error("TUI: team create intent build failed:",err instanceof Error?err.message:err);return}let createExit=null;try{createExit=await executeGenieAwaited(argv)}catch(err){console.error("TUI: team create spawn failed:",err instanceof Error?err.message:err);return}if(createExit!==0){console.error(`TUI: team create exited ${createExit} \u2014 skipping member hires for "${result2.teamName}"`);return}for(let member of result2.members)try{let code=await executeGenieAwaited(["team","hire",member,"--team",result2.teamName]);if(code!==0)console.error(`TUI: team hire "${member}" exited ${code} \u2014 continuing with remaining members`)}catch(err){console.error(`TUI: team hire "${member}" failed:`,err instanceof Error?err.message:err)}}function findParentAgent(tree,targetId){for(let node of tree){if(node.type==="agent"&&containsNode(node,targetId))return node;let found=findParentAgent(node.children,targetId);if(found)return found}return null}function containsNode(node,targetId){if(node.id===targetId)return!0;return node.children.some((c)=>containsNode(c,targetId))}function mergeExpandedState(oldTree,newTree){if(oldTree.length===0)return newTree;let oldState=new Map;function collect(nodes){for(let n of nodes)oldState.set(n.id,{expanded:n.expanded,childCount:n.children.length}),collect(n.children)}collect(oldTree);function apply(nodes){return nodes.map((n)=>({...n,expanded:(()=>{let previous=oldState.get(n.id);if(!previous)return n.expanded;if(previous.childCount===0&&n.children.length>0)return n.expanded;return previous.expanded})(),children:apply(n.children)}))}return apply(newTree)}var import_react24;var init_Nav=__esm(async()=>{init_spawn_invocation();init_workspace();init_diagnostics();init_initial_agent();init_theme2();init_SystemStats();init_TreeNode();init_jsx_dev_runtime();await __promiseAll([init_react(),init_AgentPicker(),init_ContextMenu(),init_SpawnTargetPicker(),init_TeamCreate()]);import_react24=__toESM(require_react_development(),1)});function QuitDialog({onConfirm,onCancel}){return useKeyboard((key)=>{if(key.name==="enter"||key.name==="return"||key.name==="y")onConfirm();else if(key.name==="escape"||key.name==="n")onCancel()}),import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:"#0a0a0a",children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderColor:palette.violet,backgroundColor:"#111111",paddingX:3,paddingY:1,flexDirection:"column",alignItems:"center",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:"Quit genie?"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:"Enter"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:" to quit "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:" | "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:" Esc"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:" to cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Hint: Ctrl+D to detach (keep running)"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var init_QuitDialog=__esm(async()=>{init_theme2();init_jsx_dev_runtime();await init_react()});import{execSync as execSync18}from"child_process";import{readFileSync as readFileSync37}from"fs";function App({rightPane,workspaceRoot,initialAgent}){let[showQuit,setShowQuit]=import_react27.useState(!1);useKeyboard((key)=>{if(key.ctrl&&key.name==="q")if(showQuit)handleQuit();else setShowQuit(!0)});let handleQuit=import_react27.useCallback(()=>{try{let genieHome6=process.env.GENIE_HOME??`${process.env.HOME}/.genie`,pid=readFileSync37(`${genieHome6}/serve.pid`,"utf-8").trim();process.kill(Number.parseInt(pid,10),"SIGTERM")}catch{}try{execSync18("tmux -L genie-tui kill-server",{stdio:"ignore"})}catch{}},[]),handleTmuxSessionSelect=import_react27.useCallback((sessionName,windowIndex)=>{if(!rightPane)return;attachProjectWindow(rightPane,sessionName,windowIndex)},[rightPane]);return import_jsx_dev_runtime2.jsxDEV("box",{width:"100%",height:"100%",children:[import_jsx_dev_runtime2.jsxDEV(Nav,{onTmuxSessionSelect:handleTmuxSessionSelect,onNewAgentWindow:newAgentWindow,workspaceRoot,initialAgent,keyboardDisabled:showQuit},void 0,!1,void 0,this),showQuit?import_jsx_dev_runtime2.jsxDEV(QuitDialog,{onConfirm:handleQuit,onCancel:()=>setShowQuit(!1)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}var import_react27;var init_app=__esm(async()=>{init_tmux2();init_jsx_dev_runtime();await __promiseAll([init_react(),init_Nav(),init_QuitDialog()]);import_react27=__toESM(require_react_development(),1)});var exports_render={};__export(exports_render,{renderNav:()=>renderNav});async function renderNav(){let rightPane=process.env.GENIE_TUI_RIGHT||void 0,workspaceRoot=process.env.GENIE_TUI_WORKSPACE||void 0,initialAgent=process.env.GENIE_TUI_AGENT||void 0,renderer=await createCliRenderer({exitOnCtrlC:!1,useMouse:!0,useThread:process.platform!=="darwin"});createRoot(renderer).render(import_jsx_dev_runtime2.jsxDEV(App,{rightPane,workspaceRoot,initialAgent},void 0,!1,void 0,this)),await new Promise((resolve15)=>{renderer.once("destroy",resolve15)})}var init_render=__esm(async()=>{init_jsx_dev_runtime();await __promiseAll([init_core(),init_react(),init_app()])});var exports_tui={};__export(exports_tui,{launchTui:()=>launchTui});async function launchTui(){let{renderNav:renderNav2}=await init_render().then(() => exports_render);await renderNav2()}var exports_resolve_agent_cwd={};__export(exports_resolve_agent_cwd,{resolveAgentFromCwd:()=>resolveAgentFromCwd});import{existsSync as existsSync59}from"fs";import{basename as basename15,dirname as dirname19,join as join72,relative as relative7,sep as sep3}from"path";function isRelativeWithin(rel,original){return!rel.startsWith("..")&&rel!==original}function resolveFromCanonicalDir(cwd,agentsDir){let relToAgents=relative7(agentsDir,cwd);if(!isRelativeWithin(relToAgents,cwd))return null;let segments=relToAgents.split(sep3).filter(Boolean);if(segments.length===0)return null;let agentName=segments[0];if(!existsSync59(join72(agentsDir,agentName,"AGENTS.md")))return null;let source=segments.length===1?"exact":"parent";return{agent:agentName,source}}function resolveFromWalkUp(cwd,workspaceRoot){let wsRel=relative7(workspaceRoot,cwd);if(!isRelativeWithin(wsRel,cwd))return null;let current=cwd;while(current!==workspaceRoot&&current!==dirname19(current)){if(existsSync59(join72(current,"AGENTS.md")))return{agent:basename15(current),source:"parent"};current=dirname19(current)}return null}function resolveAgentFromCwd(cwd,workspaceRoot){return resolveFromCanonicalDir(cwd,join72(workspaceRoot,"agents"))??resolveFromWalkUp(cwd,workspaceRoot)??{agent:"genie",source:"default"}}var init_resolve_agent_cwd=()=>{};var import__=__toESM(require_commander(),1),{program,createCommand,createArgument,createOption,CommanderError,InvalidArgumentError,InvalidOptionArgumentError,Command,Argument,Option,Help}=import__.default;init_claude_settings();init_ensure_tmux();init_genie_config2();init_system_detect();init_workspace();import{existsSync as existsSync17,readFileSync as readFileSync12,readdirSync as readdirSync5,statSync as statSync2,unlinkSync as unlinkSync6}from"fs";import{homedir as homedir15}from"os";import{join as join19}from"path";var{$:$3}=globalThis.Bun;import{existsSync as existsSync5,readFileSync as readFileSync4,realpathSync as realpathSync2}from"fs";import{dirname as dirname2,join as join5}from"path";var PKG_NAME="@automagik/genie";async function runSilent(cmd,args){try{let proc=Bun.spawn([cmd,...args],{stdout:"pipe",stderr:"ignore",stdin:"ignore"}),text=await new Response(proc.stdout).text();if(await proc.exited!==0)return null;let trimmed=text.trim();return trimmed.length>0?trimmed:null}catch{return null}}function findPackageJson(realBinPath){let dir=dirname2(realBinPath);for(let i=0;i<8;i++){let candidate=join5(dir,"package.json");if(existsSync5(candidate))try{let parsed=JSON.parse(readFileSync4(candidate,"utf-8"));if(parsed.name===PKG_NAME&&typeof parsed.version==="string")return{path:candidate,version:parsed.version}}catch{}let parent=dirname2(dir);if(parent===dir)break;dir=parent}return null}function safeRealpath(p){try{return realpathSync2(p)}catch{return p}}async function probeOne(installer,binDir){if(!binDir)return null;let binPath=join5(binDir,"genie");if(!existsSync5(binPath))return null;let real=safeRealpath(binPath),pkg=findPackageJson(real);if(!pkg)return null;return{installer,binPath,packageJsonPath:pkg.path,version:pkg.version}}async function probeInstallers(){let entries=[],npmRoot=await runSilent("npm",["root","-g"]),npmBin=npmRoot?join5(dirname2(npmRoot),"bin"):null,bunBin=await runSilent("bun",["pm","-g","bin"]),pnpmRoot=await runSilent("pnpm",["root","-g"]),pnpmBin=process.env.PNPM_HOME??(pnpmRoot?join5(dirname2(pnpmRoot),"bin"):null),yarnBin=await runSilent("yarn",["global","bin"]),probes=[["npm",npmBin],["bun",bunBin],["pnpm",pnpmBin],["yarn",yarnBin]];for(let[id,dir]of probes){let entry=await probeOne(id,dir);if(entry)entries.push(entry)}return entries}async function probeResolvedBinary(){let path=await runSilent("which",["genie"]);if(!path)return null;return{path,realPath:safeRealpath(path)}}function compareVersions(a,b){let pa=a.split(".").map((s)=>Number.parseInt(s,10)),pb=b.split(".").map((s)=>Number.parseInt(s,10)),len=Math.max(pa.length,pb.length);for(let i=0;i<len;i++){let na=Number.isFinite(pa[i])?pa[i]:0,nb=Number.isFinite(pb[i])?pb[i]:0;if(na!==nb)return na-nb}return 0}function uninstallHint(installer){switch(installer){case"npm":return`npm uninstall -g ${PKG_NAME}`;case"bun":return`bun remove -g ${PKG_NAME}`;case"pnpm":return`pnpm remove -g ${PKG_NAME}`;case"yarn":return`yarn global remove ${PKG_NAME}`}}function classifyInstallerResolution(state){let{resolved,installers}=state;if(!resolved)return[{name:"Resolved binary",status:"warn",message:"`which genie` returned nothing",suggestion:"Add the installer bin dir to PATH, or reinstall with: npm install -g @automagik/genie"}];let owner=installers.find((e)=>safeRealpath(e.binPath)===resolved.realPath)??null,rows=[];if(!owner){rows.push({name:"Resolved binary",status:"warn",message:`${resolved.path} (not owned by a detected installer)`,suggestion:"Likely a dev checkout or manual symlink. Package-manager updates (`npm i -g`, `bun add -g`) will not replace this binary."});for(let entry of installers)rows.push({name:`Also installed via ${entry.installer}`,status:"warn",message:`${entry.version} at ${entry.binPath}`});return rows}rows.push({name:"Resolved binary",status:"pass",message:`${resolved.path} (${owner.installer} @ ${owner.version})`});let others=installers.filter((e)=>e.installer!==owner.installer);if(others.length===0)return rows;let newest=[...installers].sort((a,b)=>compareVersions(b.version,a.version))[0],resolverIsStale=compareVersions(owner.version,newest.version)<0;for(let entry of others){let stale=compareVersions(entry.version,owner.version)<0;rows.push({name:`Also installed via ${entry.installer}`,status:"warn",message:`${entry.version}${stale?" (stale)":""} at ${entry.binPath}`,suggestion:`Remove with: ${uninstallHint(entry.installer)}`})}if(resolverIsStale)rows.push({name:"Update path",status:"warn",message:`${owner.installer}@${owner.version} is stale; ${newest.installer}@${newest.version} is newer but shadowed`,suggestion:`Either reinstall via the resolver (${uninstallHint(owner.installer).replace("uninstall","install").replace("remove","add")}) or remove the resolver so ${newest.installer} takes over.`});return rows}async function collectInstallerResolution(){let[resolved,installers]=await Promise.all([probeResolvedBinary(),probeInstallers()]);return classifyInstallerResolution({resolved,installers})}init_db();init_emit();import{existsSync as existsSync15,readFileSync as readFileSync10}from"fs";import{homedir as homedir13}from"os";import{join as join17}from"path";var WATCHER_META_TYPES=["emitter.rejected","emitter.queue.depth","emitter.latency_p99","notify.delivery.lag","stream.gap.detected","correlation.orphan.rate"];function spillJournalPath(){let home=process.env.GENIE_HOME??join17(homedir13(),".genie");return join17(home,"data","emit-spill.jsonl")}function collectWatchdogStatus(){let timerPresent=existsSync15("/etc/systemd/system/genie-watchdog.timer"),servicePresent=existsSync15("/etc/systemd/system/genie-watchdog.service");if(timerPresent&&servicePresent)return{status:"ok"};if(!timerPresent&&!servicePresent)return{status:"warn",detail:"watchdog not installed \u2014 run: bun run packages/watchdog/src/cli.ts install"};return{status:"warn",detail:`partial install: timer=${timerPresent} service=${servicePresent}`}}function collectSpillJournalStatus(){try{if(isSpillJournalEmpty())return"empty";return"pending"}catch{let path2=spillJournalPath();try{if(!existsSync15(path2))return"empty";return readFileSync10(path2,"utf8").trim().length===0?"empty":"pending"}catch{return"unknown"}}}async function collectWatcherMetricStatus(sql){let rows=await sql.unsafe(`
3653
+ `),service=util4.getValue(lines,"Service",":"),errorCode=util4.getValue(lines,"ConfigManagerErrorCode",":");if(util4.getValue(lines,"PNPClass",":").toLowerCase()==="bluetooth"&&errorCode==="0"&&service==="")result2.push(parseWindowsBluetooth(lines))});if(callback)callback(result2);resolve15(result2)});if(_freebsd||_netbsd||_openbsd||_sunos)resolve15(null)})})}exports.bluetoothDevices=bluetoothDevices});var require_lib5=__commonJS((exports)=>{var lib_version=require_package().version,util4=require_util3(),system=require_system(),osInfo=require_osinfo(),cpu=require_cpu(),memory=require_memory(),battery=require_battery(),graphics=require_graphics(),filesystem=require_filesystem(),network=require_network(),wifi=require_wifi(),processes=require_processes(),users=require_users(),internet=require_internet(),docker=require_docker(),vbox=require_virtualbox(),printer=require_printer(),usb=require_usb(),audio=require_audio(),bluetooth=require_bluetooth(),_platform=process.platform,_windows=_platform==="win32",_freebsd=_platform==="freebsd",_openbsd=_platform==="openbsd",_netbsd=_platform==="netbsd",_sunos=_platform==="sunos";if(_windows)util4.getCodepage(),util4.getPowershell();function version(){return lib_version}function getStaticData(callback){return new Promise((resolve15)=>{process.nextTick(()=>{let data={};data.version=version(),Promise.all([system.system(),system.bios(),system.baseboard(),system.chassis(),osInfo.osInfo(),osInfo.uuid(),osInfo.versions(),cpu.cpu(),cpu.cpuFlags(),graphics.graphics(),network.networkInterfaces(),memory.memLayout(),filesystem.diskLayout(),audio.audio(),bluetooth.bluetoothDevices(),usb.usb(),printer.printer()]).then((res)=>{if(data.system=res[0],data.bios=res[1],data.baseboard=res[2],data.chassis=res[3],data.os=res[4],data.uuid=res[5],data.versions=res[6],data.cpu=res[7],data.cpu.flags=res[8],data.graphics=res[9],data.net=res[10],data.memLayout=res[11],data.diskLayout=res[12],data.audio=res[13],data.bluetooth=res[14],data.usb=res[15],data.printer=res[16],callback)callback(data);resolve15(data)})})})}function getDynamicData(srv,iface,callback){if(util4.isFunction(iface))callback=iface,iface="";if(util4.isFunction(srv))callback=srv,srv="";return new Promise((resolve15)=>{process.nextTick(()=>{iface=iface||network.getDefaultNetworkInterface(),srv=srv||"";let functionProcessed=(()=>{let totalFunctions=15;if(_windows)totalFunctions=13;if(_freebsd||_openbsd||_netbsd)totalFunctions=11;if(_sunos)totalFunctions=6;return function(){if(--totalFunctions===0){if(callback)callback(data);resolve15(data)}}})(),data={};if(data.time=osInfo.time(),data.node=process.versions.node,data.v8=process.versions.v8,cpu.cpuCurrentSpeed().then((res)=>{data.cpuCurrentSpeed=res,functionProcessed()}),users.users().then((res)=>{data.users=res,functionProcessed()}),processes.processes().then((res)=>{data.processes=res,functionProcessed()}),cpu.currentLoad().then((res)=>{data.currentLoad=res,functionProcessed()}),!_sunos)cpu.cpuTemperature().then((res)=>{data.temp=res,functionProcessed()});if(!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)network.networkStats(iface).then((res)=>{data.networkStats=res,functionProcessed()});if(!_sunos)network.networkConnections().then((res)=>{data.networkConnections=res,functionProcessed()});if(memory.mem().then((res)=>{data.mem=res,functionProcessed()}),!_sunos)battery().then((res)=>{data.battery=res,functionProcessed()});if(!_sunos)processes.services(srv).then((res)=>{data.services=res,functionProcessed()});if(!_sunos)filesystem.fsSize().then((res)=>{data.fsSize=res,functionProcessed()});if(!_windows&&!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)filesystem.fsStats().then((res)=>{data.fsStats=res,functionProcessed()});if(!_windows&&!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)filesystem.disksIO().then((res)=>{data.disksIO=res,functionProcessed()});if(!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)wifi.wifiNetworks().then((res)=>{data.wifiNetworks=res,functionProcessed()});internet.inetLatency().then((res)=>{data.inetLatency=res,functionProcessed()})})})}function getAllData(srv,iface,callback){return new Promise((resolve15)=>{process.nextTick(()=>{let data={};if(iface&&util4.isFunction(iface)&&!callback)callback=iface,iface="";if(srv&&util4.isFunction(srv)&&!iface&&!callback)callback=srv,srv="",iface="";getStaticData().then((res)=>{data=res,getDynamicData(srv,iface).then((res2)=>{for(let key in res2)if({}.hasOwnProperty.call(res2,key))data[key]=res2[key];if(callback)callback(data);resolve15(data)})})})})}function get3(valueObject,callback){return new Promise((resolve15)=>{process.nextTick(()=>{let allPromises=Object.keys(valueObject).filter((func)=>({}).hasOwnProperty.call(exports,func)).map((func)=>{let params=valueObject[func].substring(valueObject[func].lastIndexOf("(")+1,valueObject[func].lastIndexOf(")")),funcWithoutParams=func.indexOf(")")>=0?func.split(")")[1].trim():func;if(funcWithoutParams=func.indexOf("|")>=0?func.split("|")[0].trim():funcWithoutParams,params)return exports[funcWithoutParams](params);else return exports[funcWithoutParams]("")});Promise.all(allPromises).then((data)=>{let result2={},i2=0;for(let key in valueObject)if({}.hasOwnProperty.call(valueObject,key)&&{}.hasOwnProperty.call(exports,key)&&data.length>i2){if(valueObject[key]==="*"||valueObject[key]==="all")result2[key]=data[i2];else{let keys=valueObject[key],filter="",filterParts=[];if(keys.indexOf(")")>=0)keys=keys.split(")")[1].trim();if(keys.indexOf("|")>=0)filter=keys.split("|")[1].trim(),filterParts=filter.split(":"),keys=keys.split("|")[0].trim();if(keys=keys.replace(/,/g," ").replace(/ +/g," ").split(" "),data[i2])if(Array.isArray(data[i2])){let partialArray=[];data[i2].forEach((element)=>{let partialRes={};if(keys.length===1&&(keys[0]==="*"||keys[0]==="all"))partialRes=element;else keys.forEach((k2)=>{if({}.hasOwnProperty.call(element,k2))partialRes[k2]=element[k2]});if(filter&&filterParts.length===2){if({}.hasOwnProperty.call(partialRes,filterParts[0].trim())){let val=partialRes[filterParts[0].trim()];if(typeof val==="number"){if(val===parseFloat(filterParts[1].trim()))partialArray.push(partialRes)}else if(typeof val==="string"){if(val.toLowerCase()===filterParts[1].trim().toLowerCase())partialArray.push(partialRes)}}}else partialArray.push(partialRes)}),result2[key]=partialArray}else{let partialRes={};keys.forEach((k2)=>{if({}.hasOwnProperty.call(data[i2],k2))partialRes[k2]=data[i2][k2]}),result2[key]=partialRes}else result2[key]={}}i2++}if(callback)callback(result2);resolve15(result2)})})})}function observe(valueObject,interval,callback){let _data=null;return setInterval(()=>{get3(valueObject).then((data)=>{if(JSON.stringify(_data)!==JSON.stringify(data))_data=Object.assign({},data),callback(data)})},interval)}exports.version=version;exports.system=system.system;exports.bios=system.bios;exports.baseboard=system.baseboard;exports.chassis=system.chassis;exports.time=osInfo.time;exports.osInfo=osInfo.osInfo;exports.versions=osInfo.versions;exports.shell=osInfo.shell;exports.uuid=osInfo.uuid;exports.cpu=cpu.cpu;exports.cpuFlags=cpu.cpuFlags;exports.cpuCache=cpu.cpuCache;exports.cpuCurrentSpeed=cpu.cpuCurrentSpeed;exports.cpuTemperature=cpu.cpuTemperature;exports.currentLoad=cpu.currentLoad;exports.fullLoad=cpu.fullLoad;exports.mem=memory.mem;exports.memLayout=memory.memLayout;exports.battery=battery;exports.graphics=graphics.graphics;exports.fsSize=filesystem.fsSize;exports.fsOpenFiles=filesystem.fsOpenFiles;exports.blockDevices=filesystem.blockDevices;exports.fsStats=filesystem.fsStats;exports.disksIO=filesystem.disksIO;exports.diskLayout=filesystem.diskLayout;exports.networkInterfaceDefault=network.networkInterfaceDefault;exports.networkGatewayDefault=network.networkGatewayDefault;exports.networkInterfaces=network.networkInterfaces;exports.networkStats=network.networkStats;exports.networkConnections=network.networkConnections;exports.wifiNetworks=wifi.wifiNetworks;exports.wifiInterfaces=wifi.wifiInterfaces;exports.wifiConnections=wifi.wifiConnections;exports.services=processes.services;exports.processes=processes.processes;exports.processLoad=processes.processLoad;exports.users=users.users;exports.inetChecksite=internet.inetChecksite;exports.inetLatency=internet.inetLatency;exports.dockerInfo=docker.dockerInfo;exports.dockerImages=docker.dockerImages;exports.dockerContainers=docker.dockerContainers;exports.dockerContainerStats=docker.dockerContainerStats;exports.dockerContainerProcesses=docker.dockerContainerProcesses;exports.dockerVolumes=docker.dockerVolumes;exports.dockerAll=docker.dockerAll;exports.vboxInfo=vbox.vboxInfo;exports.printer=printer.printer;exports.usb=usb.usb;exports.audio=audio.audio;exports.bluetoothDevices=bluetooth.bluetoothDevices;exports.getStaticData=getStaticData;exports.getDynamicData=getDynamicData;exports.getAllData=getAllData;exports.get=get3;exports.observe=observe;exports.powerShellStart=util4.powerShellStart;exports.powerShellRelease=util4.powerShellRelease});import os4 from"os";function toGB(bytes){return Math.round(bytes/1073741824*10)/10}function bar(percent,width){let p=Math.max(0,Math.min(100,percent)),filled=Math.round(p/100*width);return`[${"=".repeat(filled)}${"-".repeat(width-filled)}]`}function pickColor(percent){if(percent>80)return palette.error;if(percent>50)return palette.warning;return palette.emerald}function SystemStats(){let[stats2,setStats]=import_react19.useState(null),mountedRef=import_react19.useRef(!0);if(import_react19.useEffect(()=>{mountedRef.current=!0;async function refresh(){try{let[cpu2,mem]=await Promise.all([import_systeminformation.default.currentLoad(),import_systeminformation.default.mem()]);if(!mountedRef.current)return;let coreCount=os4.cpus().length,avg1=os4.loadavg()[0],sorted=cpu2.cpus.map((c,i2)=>({id:i2,load:Math.round(c.load)})).sort((a,b3)=>b3.load-a.load);setStats({cpu:{combined:Math.round(cpu2.currentLoad),hotCores:sorted.slice(0,3),coreCount},ram:{usedGB:toGB(mem.active),totalGB:toGB(mem.total),percent:mem.total>0?Math.round(mem.active/mem.total*100):0},swap:{usedGB:toGB(mem.swapused),totalGB:toGB(mem.swaptotal),percent:mem.swaptotal>0?Math.round(mem.swapused/mem.swaptotal*100):0},load:{percent:coreCount>0?Math.round(avg1/coreCount*100):0,busy:Math.round(avg1*10)/10,total:coreCount}})}catch{}}refresh();let timer2=setInterval(refresh,3000);return()=>{mountedRef.current=!1,clearInterval(timer2)}},[]),!stats2)return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,backgroundColor:palette.bgLight,children:import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:"genie"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` v${VERSION}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this);let{cpu,ram,swap,load:load3}=stats2,hotStr=cpu.hotCores.map((c)=>`#${c.id} ${c.load}%`).join(" ");return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,backgroundColor:palette.bgLight,children:[import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:"genie"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` v${VERSION}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"CPU "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(cpu.combined),children:`${String(cpu.combined).padStart(3)}% ${bar(cpu.combined,8)}`},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` ${cpu.coreCount}c`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:" hot "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.warning,children:hotStr},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"RAM "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(ram.percent),children:`${ram.usedGB}/${ram.totalGB}G ${bar(ram.percent,8)}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),swap.totalGB>0?import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"SWP "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(swap.percent),children:`${swap.usedGB}/${swap.totalGB}G ${bar(swap.percent,8)}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Load "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(load3.percent),children:`${load3.percent}%`},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` (${load3.busy}/${load3.total} busy)`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var import_react19,import_systeminformation;var init_SystemStats=__esm(()=>{init_version();init_theme2();init_jsx_dev_runtime();import_react19=__toESM(require_react_development(),1),import_systeminformation=__toESM(require_lib5(),1)});function validateName(name){if(name.length===0)return null;try{return validateBranchName(name),null}catch(err){return err instanceof Error?err.message:String(err)}}function TeamCreate({availableAgents,workspaceRoot,onConfirm,onCancel}){let[step,setStep]=import_react21.useState("name"),[teamName,setTeamName]=import_react21.useState(""),[selected,setSelected]=import_react21.useState(()=>new Set),[memberCursor,setMemberCursor]=import_react21.useState(0),nameError=import_react21.useMemo(()=>validateName(teamName),[teamName]),nameValid=teamName.length>0&&nameError===null,intent=import_react21.useMemo(()=>({kind:"create-team",name:teamName.length>0?teamName:"TEAM_NAME",repo:workspaceRoot}),[teamName,workspaceRoot]),handleNameChange=import_react21.useCallback((value)=>{setTeamName(value)},[]),advanceFromName=import_react21.useCallback(()=>{if(!nameValid)return;setStep("members")},[nameValid]),toggleMember=import_react21.useCallback((name)=>{setSelected((prev)=>{let next=new Set(prev);if(next.has(name))next.delete(name);else next.add(name);return next})},[]),confirmMembers=import_react21.useCallback(()=>{onConfirm({teamName,members:Array.from(selected)})},[onConfirm,teamName,selected]);return useKeyboard((key)=>{if(step==="name"){handleNameStepKey(key,{onCancel,nameValid,advanceFromName});return}handleMembersStepKey(key,{availableAgents,memberCursor,setStep,setMemberCursor,toggleMember,confirmMembers})}),import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:"#0a0a0a",children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderColor:palette.violet,backgroundColor:"#111111",paddingX:3,paddingY:1,flexDirection:"column",width:64,gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:"New team"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:step==="name"?" \u2014 step 1 of 2":" \u2014 step 2 of 2"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),step==="name"?import_jsx_dev_runtime2.jsxDEV(NameStep,{value:teamName,onChange:handleNameChange,onSubmit:advanceFromName,errorMessage:nameError},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV(MembersStep,{agents:availableAgents,selected,cursor:memberCursor},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV(CliPreviewLine,{intent,hint:step==="name"?"Enter: next \xB7 Esc: cancel":"Space: toggle \xB7 Enter: create \xB7 Esc: back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}function NameStep({value,onChange,onSubmit,errorMessage}){return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"Team name (git-branch-safe):"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("input",{value,onInput:onChange,onChange,onSubmit,focused:!0,placeholder:"feat/auth-bug",backgroundColor:palette.bg,textColor:palette.text,placeholderColor:palette.textMuted},void 0,!1,void 0,this),errorMessage!==null?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.error,children:`\u26A0 ${errorMessage}`},void 0,!1,void 0,this)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}function MembersStep({agents,selected,cursor}){if(agents.length===0)return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"No agents registered"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Members can be hired later via `genie team hire`."},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"Select members (space to toggle):"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:agents.map((name,idx)=>{let isSelected=selected.has(name),isCursor=idx===cursor,tick=isSelected?"[x]":"[ ]",prefix=isCursor?"\u25B6 ":" ";return import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:isCursor?palette.cyan:palette.textMuted,children:prefix},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:isSelected?palette.success:palette.textDim,children:tick},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:` ${name}`},void 0,!1,void 0,this)]},name,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function isEnter(key){return key.name==="enter"||key.name==="return"}function handleNameStepKey(key,opts){if(key.name==="escape"){opts.onCancel();return}if(isEnter(key)&&opts.nameValid)opts.advanceFromName()}function handleMembersStepKey(key,opts){if(key.name==="escape"){opts.setStep("name");return}if(opts.availableAgents.length===0){if(isEnter(key))opts.confirmMembers();return}if(key.name==="up"||key.name==="k"){opts.setMemberCursor((prev)=>prev<=0?opts.availableAgents.length-1:prev-1);return}if(key.name==="down"||key.name==="j"){opts.setMemberCursor((prev)=>prev>=opts.availableAgents.length-1?0:prev+1);return}if(key.name==="space"){let name=opts.availableAgents[opts.memberCursor];if(name)opts.toggleMember(name);return}if(isEnter(key))opts.confirmMembers()}var import_react21;var init_TeamCreate=__esm(async()=>{init_team_manager();init_theme2();init_CliPreviewLine();init_jsx_dev_runtime();await init_react();import_react21=__toESM(require_react_development(),1)});function getNodeIcon(node){if(node.type==="agent")return getAgentIcon(node);switch(node.type){case"session":return node.data.attached?"\u25B6":"\u25B8";case"window":return node.data.active?"\u25A0":"\u25A1";case"pane":return getPaneIcon(node);default:return" "}}function getAgentIcon(node){switch(node.wsAgentState){case"running":return"\u25CF";case"stopped":return"\u25CB";case"error":return"\u2298";case"spawning":return"\u231B";default:return"\u25CB"}}function getPaneIcon(node){if(node.data.isDead)return"\u2718";if(node.agentState==="working")return"\u25CF";if(node.agentState==="idle")return"\u25CB";if(node.agentState==="permission")return"\u26A0";if(node.agentState==="error")return"\u2718";if(node.data.command==="claude")return"\u25C6";return"\u25CB"}function getNodeColor(node){if(node.type==="agent")return getAgentColor(node);switch(node.type){case"session":return node.data.attached?palette.emerald:palette.textDim;case"window":return node.data.active?palette.cyan:palette.text;case"pane":return getPaneColor(node);default:return palette.text}}function getAgentColor(node){switch(node.wsAgentState){case"running":return palette.emerald;case"stopped":return palette.textDim;case"error":return palette.error;case"spawning":return palette.warning;default:return palette.textDim}}function getPaneColor(node){if(node.data.isDead)return palette.error;if(node.agentState==="working")return palette.cyan;if(node.agentState==="permission")return palette.warning;if(node.agentState==="error")return palette.error;if(node.agentState==="idle")return palette.textDim;if(node.data.command==="claude")return palette.cyan;return palette.textDim}function getNodeSuffix(node){if(node.type==="agent"){if(node.wsAgentState==="spawning"&&node.activePanes===0)return" [stuck \u2014 press R to retry]";let wc=node.data.windowCount;if(wc>1)return` (${wc} windows)`;if(wc===1)return" (1 window)";return""}if(node.type==="session"||node.type==="pane"){let count=node.activePanes;if(count>0)return` ${icons.agent}${count}`}return""}function getStateColor(state){switch(state){case"working":return palette.cyan;case"idle":return palette.textDim;case"permission":return palette.warning;case"error":return palette.error;default:return palette.textMuted}}var import_react22,TreeNodeRow;var init_TreeNode=__esm(()=>{init_theme2();init_jsx_dev_runtime();import_react22=__toESM(require_react_development(),1),TreeNodeRow=import_react22.memo(function({node,selected,onSelect,onToggle,onContextMenu}){let indent2=" ".repeat(node.depth),hasChildren=node.children.length>0,expandIcon=hasChildren?node.expanded?icons.expanded:icons.collapsed:" ",icon=getNodeIcon(node),color2=getNodeColor(node),suffix=getNodeSuffix(node);return import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",backgroundColor:selected?palette.violet:void 0,onMouseDown:(event)=>{if(event.button===2&&onContextMenu){onSelect(node.id),onContextMenu(node.id);return}if(onSelect(node.id),hasChildren)onToggle(node.id)},children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:[indent2,expandIcon," "]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:color2,children:[icon," "]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:selected?"#ffffff":palette.text,children:node.label},void 0,!1,void 0,this),suffix?import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:suffix},void 0,!1,void 0,this):null,node.agentState?import_jsx_dev_runtime2.jsxDEV("span",{fg:getStateColor(node.agentState),children:[" ",node.agentState]},void 0,!0,void 0,this):null,import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:` [${node.type}]`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)})});function useDiagnosticsRefresh(setDiagnostics,setRequestedInitialAgent){import_react24.useEffect(()=>{let active=!0;async function refresh(){try{let snap=await collectDiagnostics();if(!active)return;setDiagnostics(snap);let signaledAgent=consumeInitialAgentSignal();if(signaledAgent)setRequestedInitialAgent(signaledAgent)}catch(err){console.error("TUI: diagnostics failed:",err)}}refresh();let timer2=setInterval(refresh,2000);return()=>{active=!1,clearInterval(timer2)}},[setDiagnostics,setRequestedInitialAgent])}function useSessionTreeBuilder(diagnostics,workspaceRoot,setSessionTree){import_react24.useEffect(()=>{if(!diagnostics)return;let newTree;if(workspaceRoot){let agentNames=scanAgents(workspaceRoot);newTree=buildWorkspaceTree({agentNames,sessions:diagnostics.sessions,executors:diagnostics.executors})}else newTree=buildSessionTree(diagnostics);setSessionTree((prev)=>mergeExpandedState(prev,newTree))},[diagnostics,workspaceRoot,setSessionTree])}function useStableSelection(flatNodes,selectedIndex,setSelectedIndex,selectedNodeId){import_react24.useEffect(()=>{let node=flatNodes[selectedIndex]?.node;if(node)selectedNodeId.current=node.id},[selectedIndex,flatNodes,selectedNodeId]),import_react24.useLayoutEffect(()=>{if(flatNodes.length===0)return;if(selectedIndex>=flatNodes.length){setSelectedIndex(flatNodes.length-1);return}if(!selectedNodeId.current)return;let currentAtIndex=flatNodes[selectedIndex]?.node;if(currentAtIndex&&currentAtIndex.id===selectedNodeId.current)return;let restored=flatNodes.findIndex((n)=>n.node.id===selectedNodeId.current);if(restored>=0)setSelectedIndex(restored)},[flatNodes])}function useInitialAgentSelection(requestedInitialAgent,flatNodes,setSelectedIndex,setRequestedInitialAgent,onTmuxSessionSelect){import_react24.useEffect(()=>{if(!requestedInitialAgent||flatNodes.length===0)return;let idx=flatNodes.findIndex((n)=>n.node.id===`agent:${requestedInitialAgent}`);if(idx<0)return;setSelectedIndex(idx);let node=flatNodes[idx].node;if(node.type==="agent"&&node.wsAgentState!=="running"&&node.wsAgentState!=="spawning")spawnAgent(agentNameFromNode(node),onTmuxSessionSelect);setRequestedInitialAgent(void 0)},[requestedInitialAgent,flatNodes,onTmuxSessionSelect,setSelectedIndex,setRequestedInitialAgent])}function useAutoAttach(flatNodes,selectedIndex,lastTarget,onTmuxSessionSelect){import_react24.useEffect(()=>{let current=flatNodes[selectedIndex]?.node;if(!current)return;let target=getSessionTarget(current);if(!target)return;if(current.type==="agent"&&current.wsAgentState!=="running")return;let key=`${target.sessionName}:${target.windowIndex??""}`;if(key===lastTarget.current)return;lastTarget.current=key,onTmuxSessionSelect(target.sessionName,target.windowIndex)},[selectedIndex,flatNodes,onTmuxSessionSelect,lastTarget])}function useNavKeyboard(opts){useKeyboard((key)=>{if(opts.keyboardDisabled)return;if(opts.spawnIntoAgent!==null||opts.spawnPickerTarget!==null)return;if(tryOpenTeamCreate(key,{workspaceRoot:opts.workspaceRoot,showTeamCreate:opts.showTeamCreate,contextMenuNodeId:opts.contextMenuNodeId,handleOpenTeamCreate:opts.handleOpenTeamCreate}))return;if(opts.showTeamCreate)return;handleKeyboardInput(key,opts)})}function computeNavCounts(workspaceRoot,sessionTree,diagnostics){if(workspaceRoot)return{agentCount:sessionTree.filter((n)=>n.type==="agent").length,runningCount:sessionTree.filter((n)=>n.wsAgentState==="running").length};let paneSum=diagnostics?.sessions.reduce((sum,s2)=>sum+s2.windows.reduce((ws,w2)=>ws+w2.panes.length,0),0)??0;return{agentCount:diagnostics?.sessions.length??0,runningCount:paneSum}}function Nav({onTmuxSessionSelect,onNewAgentWindow,workspaceRoot,initialAgent,keyboardDisabled=!1}){let[diagnostics,setDiagnostics]=import_react24.useState(null),[sessionTree,setSessionTree]=import_react24.useState([]),[selectedIndex,setSelectedIndex]=import_react24.useState(0),[requestedInitialAgent,setRequestedInitialAgent]=import_react24.useState(initialAgent),[contextMenuNodeId,setContextMenuNodeId]=import_react24.useState(null),[spawnIntoAgent,setSpawnIntoAgent]=import_react24.useState(null),[spawnPickerTarget,setSpawnPickerTarget]=import_react24.useState(null),lastTarget=import_react24.useRef(null),selectedNodeId=import_react24.useRef(null);useDiagnosticsRefresh(setDiagnostics,setRequestedInitialAgent),useSessionTreeBuilder(diagnostics,workspaceRoot,setSessionTree);let flatNodes=import_react24.useMemo(()=>flattenTree(sessionTree),[sessionTree]);useStableSelection(flatNodes,selectedIndex,setSelectedIndex,selectedNodeId),useInitialAgentSelection(requestedInitialAgent,flatNodes,setSelectedIndex,setRequestedInitialAgent,onTmuxSessionSelect),useAutoAttach(flatNodes,selectedIndex,lastTarget,onTmuxSessionSelect);let handleSelect=import_react24.useCallback((id)=>{let idx=flatNodes.findIndex((n)=>n.node.id===id);if(idx>=0)setSelectedIndex(idx)},[flatNodes]),handleToggle=import_react24.useCallback((id)=>{setSessionTree((prev)=>toggleNode(prev,id))},[]),handleVerticalNav=import_react24.useCallback((keyName2)=>{let rowCount=flatNodes.length;if(rowCount===0)return;if(keyName2==="up"||keyName2==="k")setSelectedIndex((prev)=>prev===0?rowCount-1:prev-1);else if(keyName2==="down"||keyName2==="j")setSelectedIndex((prev)=>prev>=rowCount-1?0:prev+1)},[flatNodes.length]),handleExpandCollapse=import_react24.useCallback((keyName2)=>{let node=flatNodes[selectedIndex]?.node;if(!node)return;if((keyName2==="right"||keyName2==="l")&&node.children.length>0&&!node.expanded)handleToggle(node.id);else if((keyName2==="left"||keyName2==="h")&&node.expanded)handleToggle(node.id)},[flatNodes,selectedIndex,handleToggle]),handleEnter=import_react24.useCallback(()=>{let node=flatNodes[selectedIndex]?.node;if(!node)return;if(node.type==="agent"){handleEnterAgent(node,onTmuxSessionSelect);return}if(node.children.length>0)handleToggle(node.id);let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex)},[flatNodes,selectedIndex,handleToggle,onTmuxSessionSelect]),handleRetry=import_react24.useCallback(()=>{let node=flatNodes[selectedIndex]?.node;if(!node||node.type!=="agent")return;if(node.wsAgentState!=="spawning"&&node.wsAgentState!=="error")return;(async()=>{try{let{reconcileStaleSpawns:reconcileStaleSpawns2}=await Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry));await reconcileStaleSpawns2()}catch{}spawnAgent(agentNameFromNode(node),onTmuxSessionSelect)})()},[flatNodes,selectedIndex,onTmuxSessionSelect]),handleContextMenu=import_react24.useCallback((nodeId)=>{let flat=flatNodes.find((n)=>n.node.id===nodeId);if(flat&&buildMenuItems(flat.node).length>0)setContextMenuNodeId(nodeId)},[flatNodes]),handleContextMenuAction=import_react24.useCallback((action,payload)=>{let node=flatNodes.find((n)=>n.node.id===contextMenuNodeId)?.node;if(!node)return;if(setContextMenuNodeId(null),action==="spawn-here"){let target=resolveSpawnHereTarget(node);if(target)setSpawnPickerTarget(target);return}dispatchContextMenuAction(action,node,payload,{sessionTree,onTmuxSessionSelect,onNewAgentWindow,openSpawnInto:setSpawnIntoAgent})},[flatNodes,contextMenuNodeId,sessionTree,onTmuxSessionSelect,onNewAgentWindow]),handleSpawnIntoConfirm=import_react24.useCallback((intent)=>{executeSpawnIntent(intent),setSpawnIntoAgent(null)},[]),handleSpawnIntoCancel=import_react24.useCallback(()=>{setSpawnIntoAgent(null)},[]),handleSpawnPickerConfirm=import_react24.useCallback((intent)=>{setSpawnPickerTarget(null),executeSpawnIntent(intent)},[]),handleSpawnPickerCancel=import_react24.useCallback(()=>{setSpawnPickerTarget(null)},[]),_menuDisabled=keyboardDisabled||contextMenuNodeId!==null,{showTeamCreate,handleOpenTeamCreate,handleTeamCreateConfirm,handleTeamCreateCancel}=useTeamCreateControls({workspaceRoot,diagnostics,onTmuxSessionSelect});useNavKeyboard({keyboardDisabled,spawnIntoAgent,spawnPickerTarget,workspaceRoot,showTeamCreate,contextMenuNodeId,handleOpenTeamCreate,flatNodes,selectedIndex,setContextMenuNodeId,handleVerticalNav,handleExpandCollapse,handleEnter,handleRetry,onNewAgentWindow});let{agentCount,runningCount}=computeNavCounts(workspaceRoot,sessionTree,diagnostics),headerLabel=workspaceRoot?"Agents":"Sessions";return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",width:"100%",height:"100%",backgroundColor:palette.bg,children:[import_jsx_dev_runtime2.jsxDEV("box",{height:1,paddingX:1,backgroundColor:palette.bgLight,children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:headerLabel},void 0,!1,void 0,this),diagnostics?import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:[" ",workspaceRoot?`${runningCount}/${agentCount}`:`${agentCount}s ${runningCount}p`]},void 0,!0,void 0,this):null]},void 0,!0,void 0,this)},void 0,!1,void 0,this),diagnostics?import_jsx_dev_runtime2.jsxDEV("scrollbox",{focused:!0,height:"100%",style:{scrollbarOptions:{showArrows:!1,trackOptions:{foregroundColor:palette.scrollThumb,backgroundColor:palette.scrollTrack}}},children:flatNodes.map((flat,i2)=>import_jsx_dev_runtime2.jsxDEV(TreeNodeRow,{node:flat.node,selected:i2===selectedIndex,onSelect:handleSelect,onToggle:handleToggle,onContextMenu:handleContextMenu},flat.node.id,!1,void 0,this))},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV("box",{flexGrow:1,justifyContent:"center",alignItems:"center",children:import_jsx_dev_runtime2.jsxDEV("text",{fg:palette.textDim,children:"Collecting..."},void 0,!1,void 0,this)},void 0,!1,void 0,this),contextMenuNodeId?import_jsx_dev_runtime2.jsxDEV(ContextMenu,{items:buildMenuItems(flatNodes.find((n)=>n.node.id===contextMenuNodeId)?.node??{}),onAction:handleContextMenuAction,onClose:()=>setContextMenuNodeId(null),positionY:flatNodes.findIndex((n)=>n.node.id===contextMenuNodeId)+1},void 0,!1,void 0,this):null,spawnIntoAgent!==null?import_jsx_dev_runtime2.jsxDEV(SpawnTargetPicker,{agentName:spawnIntoAgent,sessions:diagnostics?.sessions??[],onConfirm:handleSpawnIntoConfirm,onCancel:handleSpawnIntoCancel},void 0,!1,void 0,this):null,spawnPickerTarget!==null?import_jsx_dev_runtime2.jsxDEV(AgentPicker,{target:spawnPickerTarget,onConfirm:handleSpawnPickerConfirm,onCancel:handleSpawnPickerCancel},void 0,!1,void 0,this):null,showTeamCreate?import_jsx_dev_runtime2.jsxDEV(TeamCreate,{availableAgents:workspaceRoot?scanAgents(workspaceRoot):[],workspaceRoot,onConfirm:handleTeamCreateConfirm,onCancel:handleTeamCreateCancel},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV(SystemStats,{},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,paddingX:1,backgroundColor:palette.bgLight,children:import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:buildFooterHint(workspaceRoot)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function useTeamCreateControls(opts){let{workspaceRoot,diagnostics,onTmuxSessionSelect}=opts,[showTeamCreate,setShowTeamCreate]=import_react24.useState(!1),pendingTeamNameRef=import_react24.useRef(null),handleOpenTeamCreate=import_react24.useCallback(()=>{if(!workspaceRoot)return;setShowTeamCreate(!0)},[workspaceRoot]),handleTeamCreateConfirm=import_react24.useCallback((result2)=>{setShowTeamCreate(!1),runTeamCreation(result2,workspaceRoot),pendingTeamNameRef.current=result2.teamName},[workspaceRoot]),handleTeamCreateCancel=import_react24.useCallback(()=>{setShowTeamCreate(!1)},[]);return import_react24.useEffect(()=>{let pending=pendingTeamNameRef.current;if(!pending||!diagnostics)return;let session=diagnostics.sessions.find((s2)=>s2.name===pending);if(!session)return;pendingTeamNameRef.current=null,onTmuxSessionSelect(session.name,resolvePreferredWindowIndex(session,pending))},[diagnostics,onTmuxSessionSelect]),{showTeamCreate,handleOpenTeamCreate,handleTeamCreateConfirm,handleTeamCreateCancel}}function handleEnterAgent(node,onTmuxSessionSelect){if(node.wsAgentState!=="running"&&node.wsAgentState!=="spawning")spawnAgent(agentNameFromNode(node),onTmuxSessionSelect);else if(node.wsAgentState==="running"){let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex)}}function dispatchContextMenuAction(action,node,payload,deps){let name=node.label;if(action==="spawn-into"&&node.type==="agent"&&deps.openSpawnInto){deps.openSpawnInto(agentNameFromNode(node));return}if(handleAttachAction(action,node,deps.onTmuxSessionSelect))return;if(handleRetryAction(action,name,deps.onTmuxSessionSelect))return;if(handleGenieAction(action,name,payload))return;let tmuxServer=process.env.GENIE_TMUX_SERVER||"genie";if(handleRenameAction(action,node,tmuxServer,payload))return;if(handleAgentWindowActions(action,node,name,tmuxServer,deps.onNewAgentWindow))return;if(handleSessionNodeActions(action,node,tmuxServer,payload))return;if(handleWindowNodeActions(action,node,deps.sessionTree,tmuxServer,payload))return;handlePaneNodeActions(action,node,deps.sessionTree,tmuxServer,deps.onNewAgentWindow)}function handleAttachAction(action,node,onTmuxSessionSelect){if(action!=="attach")return!1;let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex);return!0}function handleRetryAction(action,name,onTmuxSessionSelect){if(action!=="retry")return!1;return(async()=>{try{let{reconcileStaleSpawns:reconcileStaleSpawns2}=await Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry));await reconcileStaleSpawns2()}catch{}spawnAgent(name,onTmuxSessionSelect)})(),!0}function handleGenieAction(action,name,payload){if(action==="send"&&payload)return executeGenie(["agent","send",payload,"--to",name]),!0;if(action==="answer-text"&&payload)return executeGenie(["agent","answer",name,`text:${payload}`]),!0;let genieArgs={spawn:["spawn",name],"spawn-plan":["spawn",name,"--plan-mode"],stop:["agent","stop",name],kill:["agent","kill",name],log:["agent","log",name],show:["agent","show",name],read:["read",name],"answer-yes":["agent","answer",name,"yes"],"answer-no":["agent","answer",name,"no"]}[action];if(genieArgs)return executeGenie(genieArgs),!0;return!1}function handleRenameAction(action,node,tmuxServer,payload){if(action==="rename-session"&&payload){let sess=node.type==="agent"?node.data.sessionName||node.label:node.id.split(":").slice(1).join(":");return executeTmux3(["-L",tmuxServer,"rename-session","-t",sess,payload]),!0}if(action==="rename-window"&&payload){let idParts=node.id.split(":"),windowTarget=`${idParts[1]}:${idParts[2]}`;return executeTmux3(["-L",tmuxServer,"rename-window","-t",windowTarget,payload]),!0}if(action==="rename-pane"&&payload&&node.type==="pane"){let paneId=node.data.paneId;return executeTmux3(["-L",tmuxServer,"select-pane","-t",`${paneId}`,"-T",payload]),!0}return!1}function handleAgentWindowActions(action,node,name,tmuxServer,onNewAgentWindow){if(action==="agent-new-window"&&node.type==="agent"){if(onNewAgentWindow)onNewAgentWindow(agentNameFromNode(node));return!0}if(action==="new-empty-window"&&node.type==="agent"){let sessionName=node.data.sessionName||name;return executeTmux3(["-L",tmuxServer,"new-window","-a","-t",sessionName]),!0}return!1}function handleSessionNodeActions(action,node,tmuxServer,payload){if(node.type!=="session")return!1;let sess=node.id.split(":").slice(1).join(":");if(action==="kill-session")return executeTmux3(["-L",tmuxServer,"kill-session","-t",sess]),!0;if(action==="new-window")return executeTmux3(["-L",tmuxServer,"new-window","-a","-t",sess]),!0;if(action==="clone-session")return executeTmux3(["-L",tmuxServer,"new-session","-d","-s",`${sess}-clone`,"-t",sess]),!0;if(action==="spawn-in-session"&&payload)return executeGenie(["spawn",payload,"--session",sess]),!0;return!1}function handleWindowNodeActions(action,node,sessionTree,tmuxServer,payload){if(node.type!=="window")return!1;let idParts=node.id.split(":"),windowTarget=`${idParts[1]}:${idParts[2]}`;if(action==="kill-window")return executeTmux3(["-L",tmuxServer,"kill-window","-t",windowTarget]),!0;if(action==="window-new-agent"){let parentAgent=findParentAgent(sessionTree,node.id);if(parentAgent){let agentFullName=agentNameFromNode(parentAgent),suffix=Date.now()%1e4,role=`${agentFullName}-${suffix}`;executeGenie(["spawn",agentFullName,"--role",role,"--window",windowTarget])}return!0}if(action==="split-pane")return executeTmux3(["-L",tmuxServer,"split-window","-t",windowTarget]),!0;if(action==="spawn-in-window"&&payload)return executeGenie(["spawn",payload,"--session",idParts[1]]),!0;return!1}function handlePaneNodeActions(action,node,sessionTree,tmuxServer,onNewAgentWindow){if(node.type!=="pane")return!1;let paneId=node.data.paneId;if(action==="clone-agent"){let parentAgent=findParentAgent(sessionTree,node.id);if(parentAgent&&onNewAgentWindow)onNewAgentWindow(agentNameFromNode(parentAgent));return!0}if(action==="kill-pane")return executeTmux3(["-L",tmuxServer,"kill-pane","-t",`${paneId}`]),!0;if(action==="split-h")return executeTmux3(["-L",tmuxServer,"split-window","-h","-t",`${paneId}`]),!0;if(action==="split-v")return executeTmux3(["-L",tmuxServer,"split-window","-v","-t",`${paneId}`]),!0;return!1}function buildFooterHint(workspaceRoot){return`\u2191\u2193:nav \u2190\u2192:expand Enter:${workspaceRoot?"spawn/attach":"attach"} ^T:new${workspaceRoot?" ^N:team":""} R:retry .:menu`}function tryOpenTeamCreate(key,opts){if(!key.ctrl||key.name!=="n")return!1;if(!opts.workspaceRoot||opts.showTeamCreate||opts.contextMenuNodeId)return!1;return opts.handleOpenTeamCreate(),!0}function tryOpenContextMenu(flatNodes,selectedIndex,setContextMenuNodeId){let node=flatNodes[selectedIndex]?.node;if(node&&buildMenuItems(node).length>0)return setContextMenuNodeId(node.id),!0;return!1}function dispatchNavKey(key,handlers2,agentAction){let n=key.name;if(n==="up"||n==="k"||n==="down"||n==="j")handlers2.handleVerticalNav(n);else if(n==="right"||n==="l"||n==="left"||n==="h")handlers2.handleExpandCollapse(n);else if(n==="enter"||n==="return")handlers2.handleEnter();else if(n==="r")handlers2.handleRetry();else if(key.ctrl&&n==="t")agentAction()}function handleKeyboardInput(key,opts){if(key.name==="."&&!opts.contextMenuNodeId){if(tryOpenContextMenu(opts.flatNodes,opts.selectedIndex,opts.setContextMenuNodeId))return}if(opts.contextMenuNodeId)return;dispatchNavKey(key,opts,()=>{let node=opts.flatNodes[opts.selectedIndex]?.node;if(node?.type==="agent"&&node.wsAgentState==="running"&&opts.onNewAgentWindow)opts.onNewAgentWindow(agentNameFromNode(node))})}function agentNameFromNode(node){return node.id.replace(/^agent:/,"")}function spawnAgent(name,onTmuxSessionSelect){try{let{spawn:spawn5}=__require("child_process"),{join:join72,resolve:resolve15}=__require("path"),{existsSync:existsSync59,mkdirSync:mkdirSync24,openSync:openSync3}=__require("fs"),{homedir:homedir37}=__require("os"),bunPath=process.execPath||"bun",genieBin=process.argv[1],wsRoot=process.env.GENIE_TUI_WORKSPACE,sessionName=name.replace(/\//g,"-"),cwd;if(wsRoot){let parentName=name.includes("/")?name.slice(0,name.indexOf("/")):name,agentDir=resolve15(join72(wsRoot,"agents",parentName));if(existsSync59(agentDir))cwd=agentDir}let{GENIE_TUI_PANE:_a,GENIE_TUI_RIGHT:_b,GENIE_TUI_WORKSPACE:_c,GENIE_IS_DAEMON:_d,...cleanEnv}=process.env,logDir=join72(homedir37(),".genie","logs","tui-spawn");try{mkdirSync24(logDir,{recursive:!0})}catch{}let logPath=join72(logDir,`${sessionName}-${Date.now()}.log`),logFd;try{logFd=openSync3(logPath,"a")}catch{logFd=void 0}let spawnOpts=logFd!==void 0?{detached:!0,stdio:["ignore",logFd,logFd],cwd,env:cleanEnv}:{detached:!0,stdio:"ignore",cwd,env:cleanEnv},child=genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,"spawn",name,"--session",sessionName,"--new-window"],spawnOpts):spawn5("genie",["spawn",name,"--session",sessionName,"--new-window"],spawnOpts);if(child.on("exit",(code)=>{if(code&&code!==0)console.error(`TUI: spawn "${name}" exited ${code}. See ${logPath}`)}),child.on("error",(err)=>{console.error(`TUI: spawn "${name}" error: ${err.message}. See ${logPath}`)}),child.unref(),onTmuxSessionSelect)attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect)}catch(err){console.error(`TUI: spawn failed for ${name}:`,err instanceof Error?err.message:err)}}function attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect,attempt=0){(async()=>{try{let session=(await collectDiagnostics()).sessions.find((candidate)=>candidate.name===sessionName);if(session){let windowIndex=resolvePreferredWindowIndex(session,sessionName);if(windowIndex!==void 0){onTmuxSessionSelect(sessionName,windowIndex);return}}}catch{}if(attempt>=40){onTmuxSessionSelect(sessionName);return}setTimeout(()=>{attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect,attempt+1)},250)})()}function executeTmux3(args){try{let{spawn:spawn5}=__require("child_process");spawn5("tmux",args,{detached:!0,stdio:"ignore"}).unref()}catch{}}function executeGenie(args){try{let{spawn:spawn5}=__require("child_process"),bunPath=process.execPath||"bun",genieBin=process.argv[1];(genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,...args],{detached:!0,stdio:"ignore"}):spawn5("genie",args,{detached:!0,stdio:"ignore"})).unref()}catch{}}function executeGenieAwaited(args){return new Promise((resolve15,reject)=>{try{let{spawn:spawn5}=__require("child_process"),bunPath=process.execPath||"bun",genieBin=process.argv[1],child=genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,...args],{stdio:"ignore"}):spawn5("genie",args,{stdio:"ignore"});child.on("exit",(code)=>resolve15(code)),child.on("error",reject)}catch(err){reject(err instanceof Error?err:Error(String(err)))}})}function resolveSpawnHereTarget(node){if(node.type==="session"){let sess=node.id.split(":").slice(1).join(":");if(sess.length===0)return null;return{session:sess}}if(node.type==="window"){let idParts=node.id.split(":");if(idParts.length<3)return null;return{session:idParts[1],window:`${idParts[1]}:${idParts[2]}`}}return null}function executeSpawnIntent(intent){try{let{argv}=buildSpawnInvocation(intent);executeGenie(argv)}catch(err){console.error("TUI: spawn-intent execution failed:",err instanceof Error?err.message:err)}}async function runTeamCreation(result2,workspaceRoot){let argv;try{({argv}=buildSpawnInvocation({kind:"create-team",name:result2.teamName,repo:workspaceRoot}))}catch(err){console.error("TUI: team create intent build failed:",err instanceof Error?err.message:err);return}let createExit=null;try{createExit=await executeGenieAwaited(argv)}catch(err){console.error("TUI: team create spawn failed:",err instanceof Error?err.message:err);return}if(createExit!==0){console.error(`TUI: team create exited ${createExit} \u2014 skipping member hires for "${result2.teamName}"`);return}for(let member of result2.members)try{let code=await executeGenieAwaited(["team","hire",member,"--team",result2.teamName]);if(code!==0)console.error(`TUI: team hire "${member}" exited ${code} \u2014 continuing with remaining members`)}catch(err){console.error(`TUI: team hire "${member}" failed:`,err instanceof Error?err.message:err)}}function findParentAgent(tree,targetId){for(let node of tree){if(node.type==="agent"&&containsNode(node,targetId))return node;let found=findParentAgent(node.children,targetId);if(found)return found}return null}function containsNode(node,targetId){if(node.id===targetId)return!0;return node.children.some((c)=>containsNode(c,targetId))}function mergeExpandedState(oldTree,newTree){if(oldTree.length===0)return newTree;let oldState=new Map;function collect(nodes){for(let n of nodes)oldState.set(n.id,{expanded:n.expanded,childCount:n.children.length}),collect(n.children)}collect(oldTree);function apply(nodes){return nodes.map((n)=>({...n,expanded:(()=>{let previous=oldState.get(n.id);if(!previous)return n.expanded;if(previous.childCount===0&&n.children.length>0)return n.expanded;return previous.expanded})(),children:apply(n.children)}))}return apply(newTree)}var import_react24;var init_Nav=__esm(async()=>{init_spawn_invocation();init_workspace();init_diagnostics();init_initial_agent();init_theme2();init_SystemStats();init_TreeNode();init_jsx_dev_runtime();await __promiseAll([init_react(),init_AgentPicker(),init_ContextMenu(),init_SpawnTargetPicker(),init_TeamCreate()]);import_react24=__toESM(require_react_development(),1)});function QuitDialog({onConfirm,onCancel}){return useKeyboard((key)=>{if(key.name==="enter"||key.name==="return"||key.name==="y")onConfirm();else if(key.name==="escape"||key.name==="n")onCancel()}),import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:"#0a0a0a",children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderColor:palette.violet,backgroundColor:"#111111",paddingX:3,paddingY:1,flexDirection:"column",alignItems:"center",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:"Quit genie?"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:"Enter"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:" to quit "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:" | "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:" Esc"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:" to cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Hint: Ctrl+D to detach (keep running)"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var init_QuitDialog=__esm(async()=>{init_theme2();init_jsx_dev_runtime();await init_react()});import{execSync as execSync18}from"child_process";import{readFileSync as readFileSync38}from"fs";function App({rightPane,workspaceRoot,initialAgent}){let[showQuit,setShowQuit]=import_react27.useState(!1);useKeyboard((key)=>{if(key.ctrl&&key.name==="q")if(showQuit)handleQuit();else setShowQuit(!0)});let handleQuit=import_react27.useCallback(()=>{try{let genieHome6=process.env.GENIE_HOME??`${process.env.HOME}/.genie`,pid=readFileSync38(`${genieHome6}/serve.pid`,"utf-8").trim();process.kill(Number.parseInt(pid,10),"SIGTERM")}catch{}try{execSync18("tmux -L genie-tui kill-server",{stdio:"ignore"})}catch{}},[]),handleTmuxSessionSelect=import_react27.useCallback((sessionName,windowIndex)=>{if(!rightPane)return;attachProjectWindow(rightPane,sessionName,windowIndex)},[rightPane]);return import_jsx_dev_runtime2.jsxDEV("box",{width:"100%",height:"100%",children:[import_jsx_dev_runtime2.jsxDEV(Nav,{onTmuxSessionSelect:handleTmuxSessionSelect,onNewAgentWindow:newAgentWindow,workspaceRoot,initialAgent,keyboardDisabled:showQuit},void 0,!1,void 0,this),showQuit?import_jsx_dev_runtime2.jsxDEV(QuitDialog,{onConfirm:handleQuit,onCancel:()=>setShowQuit(!1)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}var import_react27;var init_app=__esm(async()=>{init_tmux2();init_jsx_dev_runtime();await __promiseAll([init_react(),init_Nav(),init_QuitDialog()]);import_react27=__toESM(require_react_development(),1)});var exports_render={};__export(exports_render,{renderNav:()=>renderNav});async function renderNav(){let rightPane=process.env.GENIE_TUI_RIGHT||void 0,workspaceRoot=process.env.GENIE_TUI_WORKSPACE||void 0,initialAgent=process.env.GENIE_TUI_AGENT||void 0,renderer=await createCliRenderer({exitOnCtrlC:!1,useMouse:!0,useThread:process.platform!=="darwin"});createRoot(renderer).render(import_jsx_dev_runtime2.jsxDEV(App,{rightPane,workspaceRoot,initialAgent},void 0,!1,void 0,this)),await new Promise((resolve15)=>{renderer.once("destroy",resolve15)})}var init_render=__esm(async()=>{init_jsx_dev_runtime();await __promiseAll([init_core(),init_react(),init_app()])});var exports_tui={};__export(exports_tui,{launchTui:()=>launchTui});async function launchTui(){let{renderNav:renderNav2}=await init_render().then(() => exports_render);await renderNav2()}var exports_resolve_agent_cwd={};__export(exports_resolve_agent_cwd,{resolveAgentFromCwd:()=>resolveAgentFromCwd});import{existsSync as existsSync59}from"fs";import{basename as basename15,dirname as dirname19,join as join72,relative as relative7,sep as sep3}from"path";function isRelativeWithin(rel,original){return!rel.startsWith("..")&&rel!==original}function resolveFromCanonicalDir(cwd,agentsDir){let relToAgents=relative7(agentsDir,cwd);if(!isRelativeWithin(relToAgents,cwd))return null;let segments=relToAgents.split(sep3).filter(Boolean);if(segments.length===0)return null;let agentName=segments[0];if(!existsSync59(join72(agentsDir,agentName,"AGENTS.md")))return null;let source=segments.length===1?"exact":"parent";return{agent:agentName,source}}function resolveFromWalkUp(cwd,workspaceRoot){let wsRel=relative7(workspaceRoot,cwd);if(!isRelativeWithin(wsRel,cwd))return null;let current=cwd;while(current!==workspaceRoot&&current!==dirname19(current)){if(existsSync59(join72(current,"AGENTS.md")))return{agent:basename15(current),source:"parent"};current=dirname19(current)}return null}function resolveAgentFromCwd(cwd,workspaceRoot){return resolveFromCanonicalDir(cwd,join72(workspaceRoot,"agents"))??resolveFromWalkUp(cwd,workspaceRoot)??{agent:"genie",source:"default"}}var init_resolve_agent_cwd=()=>{};var import__=__toESM(require_commander(),1),{program,createCommand,createArgument,createOption,CommanderError,InvalidArgumentError,InvalidOptionArgumentError,Command,Argument,Option,Help}=import__.default;init_claude_settings();init_ensure_tmux();init_genie_config2();init_system_detect();init_workspace();import{existsSync as existsSync17,readFileSync as readFileSync12,readdirSync as readdirSync5,statSync as statSync2,unlinkSync as unlinkSync6}from"fs";import{homedir as homedir15}from"os";import{join as join19}from"path";var{$:$3}=globalThis.Bun;import{existsSync as existsSync5,readFileSync as readFileSync4,realpathSync as realpathSync2}from"fs";import{dirname as dirname2,join as join5}from"path";var PKG_NAME="@automagik/genie";async function runSilent(cmd,args){try{let proc=Bun.spawn([cmd,...args],{stdout:"pipe",stderr:"ignore",stdin:"ignore"}),text=await new Response(proc.stdout).text();if(await proc.exited!==0)return null;let trimmed=text.trim();return trimmed.length>0?trimmed:null}catch{return null}}function findPackageJson(realBinPath){let dir=dirname2(realBinPath);for(let i=0;i<8;i++){let candidate=join5(dir,"package.json");if(existsSync5(candidate))try{let parsed=JSON.parse(readFileSync4(candidate,"utf-8"));if(parsed.name===PKG_NAME&&typeof parsed.version==="string")return{path:candidate,version:parsed.version}}catch{}let parent=dirname2(dir);if(parent===dir)break;dir=parent}return null}function safeRealpath(p){try{return realpathSync2(p)}catch{return p}}async function probeOne(installer,binDir){if(!binDir)return null;let binPath=join5(binDir,"genie");if(!existsSync5(binPath))return null;let real=safeRealpath(binPath),pkg=findPackageJson(real);if(!pkg)return null;return{installer,binPath,packageJsonPath:pkg.path,version:pkg.version}}async function probeInstallers(){let entries=[],npmRoot=await runSilent("npm",["root","-g"]),npmBin=npmRoot?join5(dirname2(npmRoot),"bin"):null,bunBin=await runSilent("bun",["pm","-g","bin"]),pnpmRoot=await runSilent("pnpm",["root","-g"]),pnpmBin=process.env.PNPM_HOME??(pnpmRoot?join5(dirname2(pnpmRoot),"bin"):null),yarnBin=await runSilent("yarn",["global","bin"]),probes=[["npm",npmBin],["bun",bunBin],["pnpm",pnpmBin],["yarn",yarnBin]];for(let[id,dir]of probes){let entry=await probeOne(id,dir);if(entry)entries.push(entry)}return entries}async function probeResolvedBinary(){let path=await runSilent("which",["genie"]);if(!path)return null;return{path,realPath:safeRealpath(path)}}function compareVersions(a,b){let pa=a.split(".").map((s)=>Number.parseInt(s,10)),pb=b.split(".").map((s)=>Number.parseInt(s,10)),len=Math.max(pa.length,pb.length);for(let i=0;i<len;i++){let na=Number.isFinite(pa[i])?pa[i]:0,nb=Number.isFinite(pb[i])?pb[i]:0;if(na!==nb)return na-nb}return 0}function uninstallHint(installer){switch(installer){case"npm":return`npm uninstall -g ${PKG_NAME}`;case"bun":return`bun remove -g ${PKG_NAME}`;case"pnpm":return`pnpm remove -g ${PKG_NAME}`;case"yarn":return`yarn global remove ${PKG_NAME}`}}function classifyInstallerResolution(state){let{resolved,installers}=state;if(!resolved)return[{name:"Resolved binary",status:"warn",message:"`which genie` returned nothing",suggestion:"Add the installer bin dir to PATH, or reinstall with: npm install -g @automagik/genie"}];let owner=installers.find((e)=>safeRealpath(e.binPath)===resolved.realPath)??null,rows=[];if(!owner){rows.push({name:"Resolved binary",status:"warn",message:`${resolved.path} (not owned by a detected installer)`,suggestion:"Likely a dev checkout or manual symlink. Package-manager updates (`npm i -g`, `bun add -g`) will not replace this binary."});for(let entry of installers)rows.push({name:`Also installed via ${entry.installer}`,status:"warn",message:`${entry.version} at ${entry.binPath}`});return rows}rows.push({name:"Resolved binary",status:"pass",message:`${resolved.path} (${owner.installer} @ ${owner.version})`});let others=installers.filter((e)=>e.installer!==owner.installer);if(others.length===0)return rows;let newest=[...installers].sort((a,b)=>compareVersions(b.version,a.version))[0],resolverIsStale=compareVersions(owner.version,newest.version)<0;for(let entry of others){let stale=compareVersions(entry.version,owner.version)<0;rows.push({name:`Also installed via ${entry.installer}`,status:"warn",message:`${entry.version}${stale?" (stale)":""} at ${entry.binPath}`,suggestion:`Remove with: ${uninstallHint(entry.installer)}`})}if(resolverIsStale)rows.push({name:"Update path",status:"warn",message:`${owner.installer}@${owner.version} is stale; ${newest.installer}@${newest.version} is newer but shadowed`,suggestion:`Either reinstall via the resolver (${uninstallHint(owner.installer).replace("uninstall","install").replace("remove","add")}) or remove the resolver so ${newest.installer} takes over.`});return rows}async function collectInstallerResolution(){let[resolved,installers]=await Promise.all([probeResolvedBinary(),probeInstallers()]);return classifyInstallerResolution({resolved,installers})}init_db();init_emit();import{existsSync as existsSync15,readFileSync as readFileSync10}from"fs";import{homedir as homedir13}from"os";import{join as join17}from"path";var WATCHER_META_TYPES=["emitter.rejected","emitter.queue.depth","emitter.latency_p99","notify.delivery.lag","stream.gap.detected","correlation.orphan.rate"];function spillJournalPath(){let home=process.env.GENIE_HOME??join17(homedir13(),".genie");return join17(home,"data","emit-spill.jsonl")}function collectWatchdogStatus(){let timerPresent=existsSync15("/etc/systemd/system/genie-watchdog.timer"),servicePresent=existsSync15("/etc/systemd/system/genie-watchdog.service");if(timerPresent&&servicePresent)return{status:"ok"};if(!timerPresent&&!servicePresent)return{status:"warn",detail:"watchdog not installed \u2014 run: bun run packages/watchdog/src/cli.ts install"};return{status:"warn",detail:`partial install: timer=${timerPresent} service=${servicePresent}`}}function collectSpillJournalStatus(){try{if(isSpillJournalEmpty())return"empty";return"pending"}catch{let path2=spillJournalPath();try{if(!existsSync15(path2))return"empty";return readFileSync10(path2,"utf8").trim().length===0?"empty":"pending"}catch{return"unknown"}}}async function collectWatcherMetricStatus(sql){let rows=await sql.unsafe(`
3654
3654
  SELECT subject AS type, max(created_at) AS last_seen_at
3655
3655
  FROM genie_runtime_events
3656
3656
  WHERE subject = ANY($1)
@@ -4163,7 +4163,9 @@ Team: ${teamName}
4163
4163
  LIMIT ${limit}
4164
4164
  `;if(rows.length===0){console.log(`No execution history for schedule "${schedule.name}"`),await shutdown();return}console.log(`
4165
4165
  History for "${schedule.name}":
4166
- `);let tableRows=rows.map((r)=>[formatTimestamp2(r.due_at),r.trigger_status,r.run_status??"-",formatDuration2(r.duration_ms),r.error?r.error.slice(0,60):"-"]);printTable2(["DUE AT","TRIGGER","RUN","DURATION","ERROR"],tableRows),await shutdown()}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}}function registerScheduleCommands(program2){let schedule=program2.command("schedule").description("Manage scheduled triggers");schedule.command("create <name>").description("Create a new schedule").requiredOption("--command <cmd>",'Command to execute (e.g., "genie spawn reviewer")').option("--at <time>","One-time schedule at absolute time (ISO 8601)").option("--every <interval>","Repeating schedule: duration (10m, 2h, 24h) or cron expression").option("--after <duration>","One-time schedule after delay (10m, 2h)").option("--timezone <tz>","Timezone for schedule (default: UTC)","UTC").option("--lease-timeout <duration>","Lease timeout for runs (default: 5m)").action(async(name,options)=>{await scheduleCreateCommand(name,options)}),schedule.command("list").description("List schedules with next due trigger").option("--json","Output as JSON").option("--watch","Refresh every 2s").action(async(options)=>{await scheduleListCommand(options)}),schedule.command("cancel <name>").description("Cancel a schedule and skip pending triggers").option("--filter <expr>","Filter expression (e.g., status=pending)").action(async(name,options)=>{await scheduleCancelCommand(name,options)}),schedule.command("retry <name>").description("Reset a failed trigger to pending").action(async(name)=>{await scheduleRetryCommand(name)}),schedule.command("history <name>").description("Show past executions for a schedule").option("--limit <n>","Max rows to show (default: 20)",Number.parseInt).action(async(name,options)=>{await scheduleHistoryCommand(name,options)})}import{spawnSync as spawnSync7}from"child_process";import{existsSync as existsSync54,realpathSync as realpathSync6}from"fs";import{dirname as dirname14,join as join65,resolve as resolve12}from"path";var defaultDeps5={existsSync:existsSync54,realpathSync:realpathSync6,spawnSync:spawnSync7,setExitCode:(exitCode)=>{process.exitCode=exitCode}};function collectRepeatedOption(value,previous){return[...previous,value]}function resolveGenieRoot2(argv1=process.argv[1],deps=defaultDeps5){try{if(argv1){let scriptDir=dirname14(deps.realpathSync(argv1)),candidates=[resolve12(scriptDir,".."),resolve12(scriptDir,"..","..")];for(let candidate of candidates)if(deps.existsSync(join65(candidate,"package.json")))return candidate}}catch{}return resolve12(import.meta.dir,"..","..")}function resolveSecScanScript(argv1=process.argv[1],deps=defaultDeps5){let root=resolveGenieRoot2(argv1,deps),scriptPath=join65(root,"scripts","sec-scan.cjs");if(!deps.existsSync(scriptPath))throw Error(`Security scanner payload not found at ${scriptPath}`);return scriptPath}function buildSecScanArgv(options){let args=[];if(options.json)args.push("--json");if(options.allHomes)args.push("--all-homes");for(let homePath of options.home??[])args.push("--home",homePath);for(let rootPath of options.root??[])args.push("--root",rootPath);return args}function runSecScan(options,deps=defaultDeps5){let args=[resolveSecScanScript(process.argv[1],deps),...buildSecScanArgv(options)],result2=deps.spawnSync(process.execPath,args,{stdio:"inherit"});if(result2.error)throw result2.error;return result2.status??1}function applySecScanExitCode(exitCode,deps=defaultDeps5){if(exitCode!==0)deps.setExitCode(exitCode)}function registerSecCommands(program2,deps=defaultDeps5){program2.command("sec").description("Security tooling \u2014 host compromise triage and IOC hunts").command("scan",{isDefault:!0}).description("Scan host for TeamPCP/CanisterWorm-style package compromise indicators").option("--json","Output as JSON").option("--all-homes","Scan /root, /home/*, /Users/*, and WSL Windows homes when present").option("--home <path>","Add a specific home directory to scan",collectRepeatedOption,[]).option("--root <path>","Add an application root to scan for project evidence",collectRepeatedOption,[]).action((options)=>{let exitCode=runSecScan(options,deps);applySecScanExitCode(exitCode,deps)})}init_serve();init_db();init_session_backfill();init_term_format();function resolveAgentLabel(r){if(r.agent_name)return r.agent_name;if(r.executor_id)return r.executor_id.slice(0,12);if(r.agent_id)return r.agent_id;return"(orphaned)"}async function sessionsListCommand(options){if(!await isAvailable())console.error("Database not available."),process.exit(1);let sql=await getConnection(),limit=Number(options.limit)||50,sourceFilter=options.source?sql`AND e.metadata->>'source' = ${options.source}`:sql``,rows;if(options.active)rows=await sql`
4166
+ `);let tableRows=rows.map((r)=>[formatTimestamp2(r.due_at),r.trigger_status,r.run_status??"-",formatDuration2(r.duration_ms),r.error?r.error.slice(0,60):"-"]);printTable2(["DUE AT","TRIGGER","RUN","DURATION","ERROR"],tableRows),await shutdown()}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}}function registerScheduleCommands(program2){let schedule=program2.command("schedule").description("Manage scheduled triggers");schedule.command("create <name>").description("Create a new schedule").requiredOption("--command <cmd>",'Command to execute (e.g., "genie spawn reviewer")').option("--at <time>","One-time schedule at absolute time (ISO 8601)").option("--every <interval>","Repeating schedule: duration (10m, 2h, 24h) or cron expression").option("--after <duration>","One-time schedule after delay (10m, 2h)").option("--timezone <tz>","Timezone for schedule (default: UTC)","UTC").option("--lease-timeout <duration>","Lease timeout for runs (default: 5m)").action(async(name,options)=>{await scheduleCreateCommand(name,options)}),schedule.command("list").description("List schedules with next due trigger").option("--json","Output as JSON").option("--watch","Refresh every 2s").action(async(options)=>{await scheduleListCommand(options)}),schedule.command("cancel <name>").description("Cancel a schedule and skip pending triggers").option("--filter <expr>","Filter expression (e.g., status=pending)").action(async(name,options)=>{await scheduleCancelCommand(name,options)}),schedule.command("retry <name>").description("Reset a failed trigger to pending").action(async(name)=>{await scheduleRetryCommand(name)}),schedule.command("history <name>").description("Show past executions for a schedule").option("--limit <n>","Max rows to show (default: 20)",Number.parseInt).action(async(name,options)=>{await scheduleHistoryCommand(name,options)})}import{spawnSync as spawnSync7}from"child_process";import{existsSync as existsSync54,readFileSync as readFileSync35,readdirSync as readdirSync11,realpathSync as realpathSync6}from"fs";import{dirname as dirname14,join as join65,resolve as resolve12}from"path";var defaultDeps5={existsSync:existsSync54,realpathSync:realpathSync6,readFileSync:(path3,encoding)=>readFileSync35(path3,encoding),spawnSync:(command,args,options)=>spawnSync7(command,args,options),setExitCode:(exitCode)=>{process.exitCode=exitCode},stdout:(line)=>process.stdout.write(`${line}
4167
+ `),stderr:(line)=>process.stderr.write(`${line}
4168
+ `),now:()=>new Date};function collectRepeatedOption(value,previous){return[...previous,value]}function collectKillPid(value,previous){let pid=Number.parseInt(value,10);if(!Number.isFinite(pid)||pid<=0)throw Error(`--kill-pid expects a positive integer, got "${value}"`);return[...previous,pid]}function resolveGenieRoot2(argv1=process.argv[1],deps=defaultDeps5){try{if(argv1){let scriptDir=dirname14(deps.realpathSync(argv1)),candidates=[resolve12(scriptDir,".."),resolve12(scriptDir,"..","..")];for(let candidate of candidates)if(deps.existsSync(join65(candidate,"package.json")))return candidate}}catch{}return resolve12(import.meta.dir,"..","..")}function resolveSecScanScript(argv1=process.argv[1],deps=defaultDeps5){let root=resolveGenieRoot2(argv1,deps),scriptPath=join65(root,"scripts","sec-scan.cjs");if(!deps.existsSync(scriptPath))throw Error(`Security scanner payload not found at ${scriptPath}`);return scriptPath}function resolveSecRemediateScript(argv1=process.argv[1],deps=defaultDeps5){let root=resolveGenieRoot2(argv1,deps),scriptPath=join65(root,"scripts","sec-remediate.cjs");if(!deps.existsSync(scriptPath))throw Error(`Security remediation payload not found at ${scriptPath}`);return scriptPath}var BOOLEAN_FLAG_MAP=[["json","--json"],["allHomes","--all-homes"],["noProgress","--no-progress"],["quiet","--quiet"],["verbose","--verbose"],["progressJson","--progress-json"],["redact","--redact"],["impactSurface","--impact-surface"]],REPEATED_FLAG_MAP=[["home","--home"],["root","--root"],["phaseBudget","--phase-budget"]],STRING_FLAG_MAP=[["progressInterval","--progress-interval"],["eventsFile","--events-file"]];function buildSecScanArgv(options){let args=[];for(let[key,flag]of BOOLEAN_FLAG_MAP)if(options[key])args.push(flag);for(let[key,flag]of REPEATED_FLAG_MAP){let values2=options[key]??[];for(let value of values2)args.push(flag,value)}for(let[key,flag]of STRING_FLAG_MAP){let value=options[key];if(value)args.push(flag,value)}if(options.persist===!1)args.push("--no-persist");return args}function buildSecRemediateArgv(options){let args=[];if(options.dryRun)args.push("--dry-run");if(options.apply)args.push("--apply");if(options.resume)args.push("--resume",options.resume);if(options.scanReport)args.push("--scan-report",options.scanReport);if(options.scanId)args.push("--scan-id",options.scanId);if(options.plan)args.push("--plan",options.plan);if(options.quarantineDir)args.push("--quarantine-dir",options.quarantineDir);if(options.unsafeUnverified)args.push("--unsafe-unverified",options.unsafeUnverified);if(options.remediatePartial)args.push("--remediate-partial");if(options.confirmIncompleteScan)args.push("--confirm-incomplete-scan",options.confirmIncompleteScan);for(let pid of options.killPid??[])args.push("--kill-pid",String(pid));if(options.autoConfirmFrom)args.push("--auto-confirm-from",options.autoConfirmFrom);if(options.json)args.push("--json");return args}function runSecScan(options,deps=defaultDeps5){let args=[resolveSecScanScript(process.argv[1],deps),...buildSecScanArgv(options)],result2=deps.spawnSync(process.execPath,args,{stdio:"inherit"});if(result2.error)throw result2.error;return result2.status??1}function runSecRemediate(options,deps=defaultDeps5){let args=[resolveSecRemediateScript(process.argv[1],deps),...buildSecRemediateArgv(options)],result2=deps.spawnSync(process.execPath,args,{stdio:"inherit"});if(result2.error)throw result2.error;return result2.status??1}function runSecRestore(quarantineId,deps=defaultDeps5){let args=[resolveSecRemediateScript(process.argv[1],deps),"--restore",quarantineId],result2=deps.spawnSync(process.execPath,args,{stdio:"inherit"});if(result2.error)throw result2.error;return result2.status??1}function buildSecRollbackArgv(scanId,options){let args=["--rollback",scanId];if(options.json)args.push("--json");return args}function buildSecQuarantineListArgv(options){let args=["--quarantine-list"];if(options.json)args.push("--json");return args}function buildSecQuarantineGcArgv(options){let args=["--quarantine-gc"];if(options.olderThan)args.push("--older-than",options.olderThan);if(options.confirmGc)args.push("--confirm-gc",options.confirmGc);if(options.json)args.push("--json");return args}function runSecRollback(scanId,options,deps=defaultDeps5){let args=[resolveSecRemediateScript(process.argv[1],deps),...buildSecRollbackArgv(scanId,options)],result2=deps.spawnSync(process.execPath,args,{stdio:"inherit"});if(result2.error)throw result2.error;return result2.status??1}function runSecQuarantineList(options,deps=defaultDeps5){let args=[resolveSecRemediateScript(process.argv[1],deps),...buildSecQuarantineListArgv(options)],result2=deps.spawnSync(process.execPath,args,{stdio:"inherit"});if(result2.error)throw result2.error;return result2.status??1}function runSecQuarantineGc(options,deps=defaultDeps5){let args=[resolveSecRemediateScript(process.argv[1],deps),...buildSecQuarantineGcArgv(options)],result2=deps.spawnSync(process.execPath,args,{stdio:"inherit"});if(result2.error)throw result2.error;return result2.status??1}function applySecScanExitCode(exitCode,deps=defaultDeps5){if(exitCode!==0)deps.setExitCode(exitCode)}var VERIFY_EXIT={VERIFIED:0,SIGNATURE_INVALID:2,SIGNER_IDENTITY_MISMATCH:3,PROVENANCE_INVALID:4,NO_SIGNATURE_MATERIAL:5,MISSING_BINARY:127},SIGNER_IDENTITY_REGEXP="^https://github.com/automagik-dev/genie/.github/workflows/release.yml@",SIGNER_OIDC_ISSUER="https://token.actions.githubusercontent.com",PROVENANCE_SOURCE_URI="github.com/automagik-dev/genie",COSIGN_NO_KEY_SENTINEL="BEGIN COSIGN NO-PINNED-KEY SENTINEL";function discoverSignatureBundle(bundleDir,deps=defaultDeps5){if(!deps.existsSync(bundleDir))return null;let candidates=[];try{for(let entry2 of readdirSync11(bundleDir))if(entry2.endsWith(".tgz"))candidates.push(entry2)}catch{return null}for(let tarballName of candidates){let tarball=join65(bundleDir,tarballName),signature=`${tarball}.sig`,certificate=`${tarball}.cert`;if(!deps.existsSync(signature))continue;if(!deps.existsSync(certificate))continue;let provenancePath=join65(bundleDir,"provenance.intoto.jsonl"),provenance=deps.existsSync(provenancePath)?provenancePath:null;return{tarball,signature,certificate,provenance}}return null}function readsAsCosignSentinel(path3,deps=defaultDeps5){if(!deps.existsSync(path3))return!1;try{return deps.readFileSync(path3,"utf8").includes(COSIGN_NO_KEY_SENTINEL)}catch{return!1}}function ensureBinary(name,deps){let result2=deps.spawnSync(name,["--version"],{stdio:"pipe",encoding:"utf8"});if(result2.error)return{ok:!1,binary:name,reason:result2.error.message};if((result2.status??1)!==0)return{ok:!1,binary:name,reason:`${name} --version exited non-zero`};return{ok:!0,binary:name}}function buildVerifyResult(exitCode,ctx){return{exitCode,json:{verified:exitCode===VERIFY_EXIT.VERIFIED,exit_code:exitCode,signer_identity:SIGNER_IDENTITY_REGEXP,signer_oidc_issuer:SIGNER_OIDC_ISSUER,signature_source:ctx.bundle?.signature??null,provenance_source:ctx.bundle?.provenance??null,tarball_path:ctx.bundle?.tarball??null,verified_at:ctx.verifiedAt,pinned_key_fingerprint:null,signing_mode:"cosign-keyless",offline:ctx.offline,errors:ctx.errors}}}function classifyCosignFailure(stderr){let lower=stderr.toLowerCase();return lower.includes("certificate identity")||lower.includes("subject does not match")||lower.includes("oidc issuer")?VERIFY_EXIT.SIGNER_IDENTITY_MISMATCH:VERIFY_EXIT.SIGNATURE_INVALID}function runCosignStep(bundle,offline,errors3,deps){let cosignCheck=ensureBinary("cosign",deps);if(!cosignCheck.ok)return errors3.push(`cosign not available in PATH (${cosignCheck.reason??"unknown"}). Install from https://docs.sigstore.dev/cosign/installation/.`),VERIFY_EXIT.MISSING_BINARY;let cosignArgs=["verify-blob","--certificate-identity-regexp",SIGNER_IDENTITY_REGEXP,"--certificate-oidc-issuer",SIGNER_OIDC_ISSUER,"--signature",bundle.signature,"--certificate",bundle.certificate,bundle.tarball];if(offline)cosignArgs.push("--insecure-ignore-tlog","--offline");let result2=deps.spawnSync("cosign",cosignArgs,{stdio:"pipe",encoding:"utf8"});if(result2.error)return errors3.push(`cosign spawn failed: ${result2.error.message}`),VERIFY_EXIT.MISSING_BINARY;if((result2.status??1)===0)return VERIFY_EXIT.VERIFIED;let stderr=typeof result2.stderr==="string"?result2.stderr:"";if(stderr)errors3.push(stderr.trim());return classifyCosignFailure(stderr)}function runSlsaStep(bundle,errors3,deps){if(!bundle.provenance)return errors3.push(`provenance.intoto.jsonl missing alongside ${bundle.tarball} \u2014 cosign passed but SLSA provenance cannot be checked.`),VERIFY_EXIT.PROVENANCE_INVALID;let slsaCheck=ensureBinary("slsa-verifier",deps);if(!slsaCheck.ok)return errors3.push(`slsa-verifier not available in PATH (${slsaCheck.reason??"unknown"}). Install from https://github.com/slsa-framework/slsa-verifier.`),VERIFY_EXIT.MISSING_BINARY;let result2=deps.spawnSync("slsa-verifier",["verify-artifact",bundle.tarball,"--provenance-path",bundle.provenance,"--source-uri",PROVENANCE_SOURCE_URI],{stdio:"pipe",encoding:"utf8"});if(result2.error)return errors3.push(`slsa-verifier spawn failed: ${result2.error.message}`),VERIFY_EXIT.MISSING_BINARY;if((result2.status??1)===0)return VERIFY_EXIT.VERIFIED;let stderr=typeof result2.stderr==="string"?result2.stderr:"";if(stderr)errors3.push(stderr.trim());return VERIFY_EXIT.PROVENANCE_INVALID}function resolveBundleDir(options,genieRoot){if(options.bundleDir)return options.bundleDir;if(options.tarball)return dirname14(resolve12(options.tarball));return resolve12(genieRoot)}function runVerifyInstall(options,deps=defaultDeps5){let errors3=[],verifiedAt=deps.now().toISOString(),offline=options.offline===!0,genieRoot=resolveGenieRoot2(process.argv[1],deps),bundleDir=resolveBundleDir(options,genieRoot),bundle=discoverSignatureBundle(bundleDir,deps),ctx={bundle,verifiedAt,offline,errors:errors3};if(!bundle){if(errors3.push(`No signed release bundle found under ${bundleDir}. Expected <pkg>.tgz + .sig + .cert + provenance.intoto.jsonl.`),readsAsCosignSentinel(join65(genieRoot,".github","cosign.pub"),deps))errors3.push(".github/cosign.pub is the documented NO-KEY sentinel \u2014 release signing is cosign KEYLESS ONLY; there is no public key to pin.");return buildVerifyResult(VERIFY_EXIT.NO_SIGNATURE_MATERIAL,ctx)}let cosignExit=runCosignStep(bundle,offline,errors3,deps);if(cosignExit!==VERIFY_EXIT.VERIFIED)return buildVerifyResult(cosignExit,ctx);let slsaExit=runSlsaStep(bundle,errors3,deps);return buildVerifyResult(slsaExit,ctx)}function emitHumanReport(result2,options,deps){let{json:json2,exitCode}=result2,status=json2.verified?"OK":"FAIL";if(deps.stdout(`verify-install: ${status} (exit ${exitCode})`),deps.stdout(` signing mode: ${json2.signing_mode}`),deps.stdout(` signer identity: ${json2.signer_identity}`),deps.stdout(` OIDC issuer: ${json2.signer_oidc_issuer}`),deps.stdout(` provenance source: ${PROVENANCE_SOURCE_URI}`),deps.stdout(` tarball: ${json2.tarball_path??"(not found)"}`),deps.stdout(` signature: ${json2.signature_source??"(not found)"}`),deps.stdout(` provenance: ${json2.provenance_source??"(not found)"}`),deps.stdout(` verified_at: ${json2.verified_at}`),deps.stdout(` offline: ${json2.offline?"yes (skips Rekor tlog)":"no"}`),options.offline)deps.stdout(" warning: offline mode skips the Rekor transparency log; revoked certs are not detected.");if(json2.errors.length>0){deps.stderr("verify-install errors:");for(let err of json2.errors)deps.stderr(` - ${err}`)}}function runVerifyInstallCommand(options,deps=defaultDeps5){let result2=runVerifyInstall(options,deps);if(options.json)deps.stdout(JSON.stringify(result2.json));else emitHumanReport(result2,options,deps);return result2.exitCode}function registerSecCommands(program2,deps=defaultDeps5){let sec=program2.command("sec").description("Security tooling \u2014 host compromise triage and IOC hunts");sec.command("scan",{isDefault:!0}).description("Scan host for TeamPCP/CanisterWorm-style package compromise indicators").option("--json","Output as JSON envelope").option("--all-homes","Scan /root, /home/*, /Users/*, and WSL Windows homes when present").option("--home <path>","Add a specific home directory to scan",collectRepeatedOption,[]).option("--root <path>","Add an application root to scan for project evidence",collectRepeatedOption,[]).option("--no-progress","Suppress progress output on stderr").option("--quiet","Suppress progress and banners on stderr").option("--verbose","Emit extra diagnostics on stderr").option("--progress-json","Emit progress as NDJSON events to stderr").option("--progress-interval <ms>","Progress tick interval in milliseconds").option("--events-file <path>","Append structured NDJSON events to a 0600-mode file").option("--redact","Hash $HOME-prefixed paths; scrub AWS/GitHub/npm/JWT patterns").option("--no-persist","Do not persist the report to $GENIE_HOME/sec-scan/").option("--impact-surface","Scan for at-risk local material (secrets, wallets, browsers)").option("--phase-budget <name=ms>","Budget (ms) for a named phase (repeatable)",collectRepeatedOption,[]).action((options)=>{let exitCode=runSecScan(options,deps);applySecScanExitCode(exitCode,deps)}),sec.command("remediate").description("Reversibly remediate findings from a sec scan (dry-run by default)").option("--dry-run","Generate a plan manifest without mutating anything (default mode)").option("--apply","Execute a previously-generated plan (requires --plan)").option("--resume <path>","Resume a previously-aborted apply from its resume file").option("--scan-report <path>","Path to a scan JSON report (use with --dry-run)").option("--scan-id <ulid>","ULID of a persisted scan in $GENIE_HOME/sec-scan/").option("--plan <path>","Path to a frozen plan manifest (required with --apply)").option("--quarantine-dir <path>","Override quarantine root (must be on same device as targets)").option("--unsafe-unverified <id>","Bypass binary signature requirement (logs incident id + ack)").option("--remediate-partial","Allow remediation against a coverage-capped scan (requires typed ack)").option("--confirm-incomplete-scan <ack>","Typed ack for --remediate-partial").option("--kill-pid <pid>","Authorize SIGTERM to a PID matching a plan entry",collectKillPid,[]).option("--auto-confirm-from <path>","Non-interactive consent map (testing only)").option("--json","Emit JSON summary to stdout").action((options)=>{let normalized={...options};if(!normalized.dryRun&&!normalized.apply&&!normalized.resume)normalized.dryRun=!0;let exitCode=runSecRemediate(normalized,deps);applySecScanExitCode(exitCode,deps)}),sec.command("restore <quarantine-id>").description("Restore every action under a quarantine id (sha256-verified per file)").action((quarantineId)=>{let exitCode=runSecRestore(quarantineId,deps);applySecScanExitCode(exitCode,deps)}),sec.command("rollback <scan-id>").description("Bulk undo every quarantined action for a scan (walks audit log in reverse)").option("--json","Emit JSON summary to stdout").action((scanId,options)=>{let exitCode=runSecRollback(scanId,options,deps);applySecScanExitCode(exitCode,deps)});let quarantine=sec.command("quarantine").description("Quarantine lifecycle (list, gc)");quarantine.command("list").description("List quarantines with id, timestamp, size, status, scan_id").option("--json","Emit JSON rows to stdout").action((options)=>{let exitCode=runSecQuarantineList(options,deps);applySecScanExitCode(exitCode,deps)}),quarantine.command("gc").description("Delete restored/abandoned quarantines older than <duration> (refuses active)").requiredOption("--older-than <duration>","Duration threshold, e.g. 30d, 24h, 15m").option("--confirm-gc <token>","Typed ack: CONFIRM-GC-<6-hex>").option("--json","Emit JSON summary to stdout").action((options)=>{let exitCode=runSecQuarantineGc(options,deps);applySecScanExitCode(exitCode,deps)}),sec.command("verify-install").description("Verify the cosign signature + SLSA provenance of the running @automagik/genie release.").option("--offline","Skip the Rekor transparency-log check (signature + cert still verified)").option("--json","Emit machine-readable verification report on stdout").option("--tarball <path>","Point at a specific release tarball (for local verification)").option("--bundle-dir <path>","Directory containing <pkg>.tgz + .sig + .cert + provenance").action((options)=>{let exitCode=runVerifyInstallCommand(options,deps);applySecScanExitCode(exitCode,deps)})}init_serve();init_db();init_session_backfill();init_term_format();function resolveAgentLabel(r){if(r.agent_name)return r.agent_name;if(r.executor_id)return r.executor_id.slice(0,12);if(r.agent_id)return r.agent_id;return"(orphaned)"}async function sessionsListCommand(options){if(!await isAvailable())console.error("Database not available."),process.exit(1);let sql=await getConnection(),limit=Number(options.limit)||50,sourceFilter=options.source?sql`AND e.metadata->>'source' = ${options.source}`:sql``,rows;if(options.active)rows=await sql`
4167
4169
  SELECT s.*, a.custom_name as agent_name
4168
4170
  FROM sessions s
4169
4171
  LEFT JOIN executors e ON s.executor_id = e.id
@@ -4226,7 +4228,7 @@ History for "${schedule.name}":
4226
4228
  LIMIT ${limit}
4227
4229
  `;if(options.json){console.log(JSON.stringify(rows,null,2));return}if(rows.length===0){console.log(`No results for "${query2}".`);return}for(let r of rows)console.log(`[${formatRelativeTimestamp(r.timestamp)}] ${r.agent_label??"orphaned"} / ${r.session_id.slice(0,12)}`),console.log(` ${r.role}${r.tool_name?` [${r.tool_name}]`:""}: ${r.headline}`);console.log(`
4228
4230
  (${rows.length} result${rows.length===1?"":"s"})`)}async function sessionsSyncStatusCommand(){if(!await isAvailable())console.error("Database not available."),process.exit(1);let sql=await getConnection(),status=await getBackfillStatus(sql);if(!status){console.log("No backfill has been started. It runs automatically on first daemon start.");return}let pct=status.totalFiles>0?(status.processedFiles/status.totalFiles*100).toFixed(1):"0.0",mbRead=(status.processedBytes/1024/1024).toFixed(1),mbTotal=(status.totalBytes/1024/1024).toFixed(1);console.log(`Session backfill: ${status.processedFiles} / ${status.totalFiles} files (${pct}%)`),console.log(`Bytes read: ${mbRead} MB / ${mbTotal} MB`),console.log(`Errors: ${status.errors}`),console.log(`Status: ${status.status}`)}function registerSessionsCommands(program2){let sessions2=program2.command("sessions").description("Session history \u2014 list, replay, search");sessions2.command("list",{isDefault:!0}).description("List Claude Code sessions").option("--active","Show only active sessions").option("--orphaned","Show only orphaned sessions").option("--agent <name>","Filter by agent").option("--source <name>","Filter by executor metadata source (e.g. omni)").option("--limit <n>","Max number of sessions to return (default: 50)").option("--json","Output as JSON").action(async(options)=>{await sessionsListCommand(options)}),sessions2.command("replay <session-id>").description("Replay a session \u2014 interleave content + events").option("--json","Output as JSON").action(async(sessionId,options)=>{await sessionsReplayCommand(sessionId,options)}),sessions2.command("search <query>").description("Full-text search across session content").option("--json","Output as JSON").option("--limit <n>","Max results","20").action(async(query2,options)=>{await sessionsSearchCommand(query2,options)}),sessions2.command("sync").description("Check session backfill progress").action(async()=>{await sessionsSyncStatusCommand()})}init_state();init_term_format();var _taskService7;async function getTaskService7(){if(!_taskService7)_taskService7=await Promise.resolve().then(() => (init_task_service(),exports_task_service));return _taskService7}function registerTagCommands(program2){let tag=program2.command("tag").description("Tag management");tag.command("list").description("List all tags").option("--type <typeId>","Filter by task type").option("--json","Output as JSON").action(async(options)=>{try{let tags=await(await getTaskService7()).listTags(options.type);if(options.json){console.log(JSON.stringify(tags,null,2));return}console.log(` ${padRight("ID",20)} ${padRight("NAME",20)} ${padRight("COLOR",10)} TYPE`),console.log(` ${"\u2500".repeat(55)}`);for(let t of tags)console.log(` ${padRight(t.id,20)} ${padRight(t.name,20)} ${padRight(t.color,10)} ${t.typeId??"-"}`);console.log(`
4229
- ${tags.length} tag${tags.length===1?"":"s"}`)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}}),tag.command("create <name>").description("Create a custom tag").option("--color <hex>","Tag color (hex)","#9ca3af").option("--type <typeId>","Associate with a task type").action(async(name,options)=>{try{let ts3=await getTaskService7(),id=name.toLowerCase().replace(/\s+/g,"-"),t=await ts3.createTag({id,name,color:options.color,typeId:options.type});console.log(`Created tag "${t.name}" (${t.id}) with color ${t.color}.`)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}})}init_term_format();var _taskService8;async function getTaskService8(){if(!_taskService8)_taskService8=await Promise.resolve().then(() => (init_task_service(),exports_task_service));return _taskService8}var _boardService2;async function getBoardService2(){if(!_boardService2)_boardService2=await Promise.resolve().then(() => (init_board_service(),exports_board_service));return _boardService2}var _closeMergedService;async function getCloseMergedService(){if(!_closeMergedService)_closeMergedService=await Promise.resolve().then(() => (init_task_close_merged(),exports_task_close_merged));return _closeMergedService}function localActor2(name){return{actorType:"local",actorId:name}}function currentActor3(){let name=process.env.GENIE_AGENT_NAME??"cli";return localActor2(name)}function getRunId(){return process.env.GENIE_RUN_ID??`run-${Date.now()}`}var PRIORITY_COLORS={urgent:"\x1B[31m",high:"\x1B[33m",normal:"\x1B[0m",low:"\x1B[90m"},RESET2="\x1B[0m";async function resolveDefaultBoardId(){try{let{execSync:execSync17}=await import("child_process"),repoRoot=execSync17("git rev-parse --show-toplevel",{encoding:"utf-8"}).trim(),{join:join66}=await import("path"),configPath2=join66(repoRoot,".genie","config.json"),{existsSync:existsSync55,readFileSync:readFileSync35}=await import("fs");if(existsSync55(configPath2)){let config=JSON.parse(readFileSync35(configPath2,"utf-8"));if(config.activeBoard)return config.activeBoard}}catch{}return null}async function handleInvalidStageError(taskId,message){try{let task=await(await getTaskService8()).getTask(taskId);if(!task?.boardId)return;let board=await(await getBoardService2()).getBoard(task.boardId);if(!board)return;let validCols=board.columns.sort((a,b2)=>a.position-b2.position).map((c)=>c.name).join(" \u2192 ");console.error(`Error: ${message}
4231
+ ${tags.length} tag${tags.length===1?"":"s"}`)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}}),tag.command("create <name>").description("Create a custom tag").option("--color <hex>","Tag color (hex)","#9ca3af").option("--type <typeId>","Associate with a task type").action(async(name,options)=>{try{let ts3=await getTaskService7(),id=name.toLowerCase().replace(/\s+/g,"-"),t=await ts3.createTag({id,name,color:options.color,typeId:options.type});console.log(`Created tag "${t.name}" (${t.id}) with color ${t.color}.`)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}})}init_term_format();var _taskService8;async function getTaskService8(){if(!_taskService8)_taskService8=await Promise.resolve().then(() => (init_task_service(),exports_task_service));return _taskService8}var _boardService2;async function getBoardService2(){if(!_boardService2)_boardService2=await Promise.resolve().then(() => (init_board_service(),exports_board_service));return _boardService2}var _closeMergedService;async function getCloseMergedService(){if(!_closeMergedService)_closeMergedService=await Promise.resolve().then(() => (init_task_close_merged(),exports_task_close_merged));return _closeMergedService}function localActor2(name){return{actorType:"local",actorId:name}}function currentActor3(){let name=process.env.GENIE_AGENT_NAME??"cli";return localActor2(name)}function getRunId(){return process.env.GENIE_RUN_ID??`run-${Date.now()}`}var PRIORITY_COLORS={urgent:"\x1B[31m",high:"\x1B[33m",normal:"\x1B[0m",low:"\x1B[90m"},RESET2="\x1B[0m";async function resolveDefaultBoardId(){try{let{execSync:execSync17}=await import("child_process"),repoRoot=execSync17("git rev-parse --show-toplevel",{encoding:"utf-8"}).trim(),{join:join66}=await import("path"),configPath2=join66(repoRoot,".genie","config.json"),{existsSync:existsSync55,readFileSync:readFileSync36}=await import("fs");if(existsSync55(configPath2)){let config=JSON.parse(readFileSync36(configPath2,"utf-8"));if(config.activeBoard)return config.activeBoard}}catch{}return null}async function handleInvalidStageError(taskId,message){try{let task=await(await getTaskService8()).getTask(taskId);if(!task?.boardId)return;let board=await(await getBoardService2()).getBoard(task.boardId);if(!board)return;let validCols=board.columns.sort((a,b2)=>a.position-b2.position).map((c)=>c.name).join(" \u2192 ");console.error(`Error: ${message}
4230
4232
  Valid columns for board "${board.name}": ${validCols}`),process.exit(1)}catch{}}async function resolveBoardOption(boardName){if(boardName){let board=await(await getBoardService2()).getBoard(boardName);if(!board)console.error(`Error: Board not found: ${boardName}`),process.exit(1);return board.id}return await resolveDefaultBoardId()??void 0}function getProjectName(repoPath){let parts=repoPath.split("/");return parts[parts.length-1]||repoPath}function formatTaskRow(t,showProject,hasExternal){let seq2=showProject?`${getProjectName(t.repoPath)}#${t.seq}`:`#${t.seq}`,title=truncate2(t.title,38),color2=t.status==="archived"?"\x1B[90m":PRIORITY_COLORS[t.priority]??"",due=formatDate(t.dueDate),proj=showProject?`${padRight(getProjectName(t.repoPath),16)} `:"",ext=hasExternal?`${padRight(truncate2(t.externalId??"",25),27)} `:"",statusLabel=t.status==="archived"?"\x1B[90m[archived]\x1B[0m":t.status;return` ${padRight(seq2,showProject?22:6)} ${proj}${padRight(title,40)} ${ext}${padRight(t.stage,12)} ${padRight(statusLabel,12)} ${color2}${padRight(t.priority,10)}${RESET2} ${padRight(due,12)}`}function printTaskList(tasks,showProject=!1){if(tasks.length===0){console.log("No tasks found.");return}let hasExternal=tasks.some((t)=>t.externalId),extCol=hasExternal?`${padRight("EXTERNAL",27)} `:"",projCol=showProject?`${padRight("PROJECT",16)} `:"",header=` ${padRight("#",6)} ${projCol}${padRight("TITLE",40)} ${extCol}${padRight("STAGE",12)} ${padRight("STATUS",12)} ${padRight("PRIORITY",10)} ${padRight("DUE",12)}`,lineLen=(showProject?108:92)+(hasExternal?28:0);console.log(header),console.log(` ${"\u2500".repeat(lineLen)}`);for(let t of tasks)console.log(formatTaskRow(t,showProject,hasExternal));console.log(`
4231
4233
  ${tasks.length} task${tasks.length===1?"":"s"}`)}function printTaskFields(task){console.log(""),console.log(`Task #${task.seq}: ${task.title}`),console.log("\u2500".repeat(60)),console.log(` ID: ${task.id}`),console.log(` Type: ${task.typeId}`),console.log(` Stage: ${task.stage}`),console.log(` Status: ${task.status}`),console.log(` Priority: ${task.priority}`);let optionalFields=[["Description",task.description],["Criteria",task.acceptanceCriteria],["Effort",task.estimatedEffort],["Start",task.startDate?formatDate(task.startDate):null],["Due",task.dueDate?formatDate(task.dueDate):null],["Blocked",task.blockedReason],["Parent",task.parentId],["Release",task.releaseId],["Wish",task.wishFile],["External",task.externalId],["Ext URL",task.externalUrl]];for(let[label,value]of optionalFields)if(value)console.log(` ${padRight(`${label}:`,12)} ${value}`);if(task.checkoutRunId)console.log(` Checkout: ${task.checkoutRunId} (since ${formatTimestamp(task.executionLockedAt)})`);if(console.log(` Created: ${formatTimestamp(task.createdAt)}`),task.startedAt)console.log(` Started: ${formatTimestamp(task.startedAt)}`);if(task.endedAt)console.log(` Ended: ${formatTimestamp(task.endedAt)}`)}async function printTaskRelations(task){let ts3=await getTaskService8(),actors=await ts3.getTaskActors(task.id,task.repoPath);if(actors.length>0){console.log(`
4232
4234
  Actors:`);for(let a of actors)console.log(` ${a.role}: ${a.actorId} (${a.actorType})`)}let tags=await ts3.getTaskTags(task.id,task.repoPath);if(tags.length>0)console.log(`