sidekick-agent-hub 0.26.3 → 0.26.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/sidekick-main.mjs +5 -5
- package/package.json +1 -1
package/dist/sidekick-main.mjs
CHANGED
|
@@ -745,7 +745,7 @@ ${lce()}`:lce();jQ(e.filePath,o,e.mode)}function mYe(){for(let t of B3())pYe(t)}
|
|
|
745
745
|
`);if(i>=0){r=r.slice(0,i);break}if(r.length>1e6)break}}catch{return null}finally{(0,pb.closeSync)(e)}try{return JSON.parse(r)}catch{return null}}function UXe(t,e){let n;try{n=(0,pb.readFileSync)(t,"utf8")}catch{return[]}let r=[];for(let o of n.split(`
|
|
746
746
|
`)){let i=o.trim();if(i&&!e?.(i))try{r.push(JSON.parse(i))}catch{}}return r}function LXe(t=150){let e=[],n=new Set,r=o=>{let i;try{i=(0,pb.readdirSync)(o,{withFileTypes:!0})}catch{return}for(let s of i){let c=(0,sN.join)(o,s.name);if(s.isDirectory())r(c);else if(s.isFile()&&s.name.startsWith("rollout-")&&s.name.endsWith(".jsonl"))try{if(n.has(c))continue;n.add(c),e.push({path:c,mtime:(0,pb.statSync)(c).mtimeMs})}catch{}}};for(let o of(0,$Xe.getCodexMonitoringHomes)()){let i=(0,sN.join)(o,"sessions");zXe(i)&&r(i)}return e.sort((o,i)=>i.mtime-o.mtime).slice(0,t).map(o=>o.path)}function Lle(t,e=3){let n=(0,sN.resolve)(t),r=[];for(let o of LXe())if(FXe(o)?.payload?.cwd===n&&(r.push(o),r.length>=e))break;return r}function HXe(t){if(typeof t!="string")return t&&typeof t=="object"?t:{};try{return JSON.parse(t)}catch{return{}}}function Sq(t){return typeof t=="string"?t:void 0}function MC(t,e){return{agent:"codex",sessionPath:t,source:e}}function qXe(t){let n=t.action?.command;return Array.isArray(n)?n.map(String).join(" "):Sq(n)}function ZXe(t,e){let n=[];for(let r of String(t).matchAll(/^\*\*\* (?:Update|Add|Delete) File: (.+)$/gm))for(let o of(0,wl.extractFilePaths)(r[1].trim(),e))n.push(o);return n}function Fle(t,e,n,r,o){for(let i of(0,wl.extractUrls)(e))t.urls.push((0,wl.urlAsset)(i,r,o));for(let i of(0,wl.extractFilePaths)(e,n))t.paths.push((0,wl.pathAsset)(i,r,o));for(let i of(0,wl.extractCommands)(e))t.commands.push((0,wl.commandAsset)(i,r,o))}function Ule(t,e,n,r,o){for(let i of(0,wl.extractUrls)(e))t.urls.push((0,wl.urlAsset)(i,r,o));for(let i of(0,wl.extractFilePaths)(e,n))t.paths.push((0,wl.pathAsset)(i,r,o))}function GXe(t,e=3){let n=(0,sN.resolve)(t),r=Lle(n,e),o={urls:[],paths:[],commands:[],plans:[],hadSession:r.length>0},i=s=>s.includes('"type":"function_call_output"')||s.includes('"type":"reasoning"')||s.includes('"type":"token_count"');for(let s of r)for(let c of UXe(s,i)){let d=c.payload;if(!d)continue;let m=Sq(c.timestamp);if(d.type==="function_call"){if(jXe.has(d.name)){let h=HXe(d.arguments);Ule(o,h.cmd??h.command,n,m,MC(s,`tool:${String(d.name)}`))}}else if(d.type==="local_shell_call")Ule(o,qXe(d),n,m,MC(s,"tool:local_shell"));else if(d.type==="item_completed"){let h=d.item,y=Sq(h?.text);h?.type==="Plan"&&y?.trim()&&o.plans.push((0,wl.planAsset)(y,m,MC(s,"plan")))}else if(d.type==="custom_tool_call"&&d.name==="apply_patch"){let h=MC(s,"tool:apply_patch");for(let y of ZXe(d.input,n))o.paths.push((0,wl.pathAsset)(y,m,h))}else if(d.type==="message"&&Array.isArray(d.content))for(let h of d.content)Fle(o,h.text,n,m,MC(s,"message"));else d.type==="agent_message"&&Fle(o,d.message,n,m,MC(s,"message"))}return o}});var Hle=Q(Cq=>{"use strict";Object.defineProperty(Cq,"__esModule",{value:!0});Cq.gatherAssetsForCwd=WXe;var VXe=ue("node:path"),KXe=bq(),YXe=Eq(),mb=Yx(),JXe=["claude","codex"];function WXe(t={}){let e=(0,VXe.resolve)(t.cwd||process.cwd()),n=t.sessionsPerAgent??3,r=t.agents??JXe,o={...mb.DEFAULT_CAPS,...t.caps||{}},i=[];r.includes("claude")&&i.push((0,KXe.readClaudeAssets)(e,n)),r.includes("codex")&&i.push((0,YXe.readCodexAssets)(e,n));let s=(c,d)=>(0,mb.capped)((0,mb.dedupeAssets)(i.flatMap(m=>m[c]).sort(mb.byTimestampDesc)),d);return{urls:s("urls",o.url),paths:s("paths",o.path),commands:s("commands",o.command),plans:(0,mb.capped)((0,mb.dedupePlansByTitle)(i.flatMap(c=>c.plans).sort(mb.byTimestampDesc)),o.plan),inChat:i.some(c=>c.hadSession)}}});var Vle=Q(QC=>{"use strict";Object.defineProperty(QC,"__esModule",{value:!0});QC.ToolCallTracker=void 0;QC.extractToolCalls=Zle;QC.extractToolCall=Gle;var uN=lR();function qle(t){if(t==null)return;let e=typeof t=="string"?t:JSON.stringify(t,null,2);return e.length>5e3?`${e.slice(0,5e3)}
|
|
747
747
|
...(truncated)`:e}function Zle(t){if(t.type!=="assistant")return[];let e=t.message?.content;if(!Array.isArray(e))return[];let n=new Date(t.timestamp),r=[];for(let o of e)if(o&&typeof o=="object"&&"type"in o&&o.type==="tool_use"){let i=o;if(i.name){let s=i.is_error===!0||i.error!=null,c=i.error??i.output;r.push({name:i.name,input:i.input??{},timestamp:n,toolUseId:i.id,...s?{isError:!0,output:qle(c),errorMessage:(0,uN.extractErrorMessage)(c,i.name),errorCategory:(0,uN.categorizeError)(c)}:{}})}}return r}var Iq=class{pending=new Map;process(e){let n=[];for(let i of Zle(e))i.toolUseId?this.pending.set(i.toolUseId,i):n.push(i);let r=Gle(e);if(r){let i=e.message?.id;i?(r.toolUseId=i,this.pending.set(i,r)):n.push(r)}let o=e.message?.content;if(!Array.isArray(o))return n;for(let i of o){if(!i||typeof i!="object"||!("type"in i)||i.type!=="tool_result")continue;let s=i;if(!s.tool_use_id)continue;let c=this.pending.get(s.tool_use_id);c&&(this.pending.delete(s.tool_use_id),c.duration=typeof s.duration=="number"?s.duration:Math.max(0,new Date(e.timestamp).getTime()-c.timestamp.getTime()),c.isError=s.is_error===!0,c.output=qle(s.content),c.isError&&(c.errorMessage=(0,uN.extractErrorMessage)(s.content,c.name),c.errorCategory=(0,uN.categorizeError)(s.content)),n.push(c))}return n}reset(){this.pending.clear()}};QC.ToolCallTracker=Iq;function Gle(t){return t.type!=="tool_use"||!t.tool?.name?null:{name:t.tool.name,input:t.tool.input??{},timestamp:new Date(t.timestamp)}}});var Yle=Q(qt=>{"use strict";Object.defineProperty(qt,"__esModule",{value:!0});qt.providerQuotaMapSchema=qt.zaiProviderQuotaStateSchema=qt.codexProviderQuotaStateSchema=qt.claudeProviderQuotaStateSchema=qt.providerQuotaStateSchema=qt.runtimeQuotaProviderSchema=qt.quotaFailureDescriptorSchema=qt.peakHoursStateSchema=qt.quotaStateSchema=qt.codexResetCreditsSnapshotSchema=qt.codexResetCreditSchema=qt.quotaFreshnessSchema=qt.quotaCapturedSourceSchema=qt.quotaSourceSchema=qt.quotaProviderIdSchema=qt.quotaFailureKindSchema=qt.quotaWindowSchema=void 0;var Et=gy(),Kle=dy();qt.quotaWindowSchema=Et.z.object({utilization:Et.z.number(),resetsAt:Et.z.string()});qt.quotaFailureKindSchema=Et.z.enum(["auth","network","rate_limit","server","unknown"]);qt.quotaProviderIdSchema=Et.z.enum(Kle.QUOTA_PROVIDER_IDS);qt.quotaSourceSchema=Et.z.enum(["api","session","cache","statusline"]);qt.quotaCapturedSourceSchema=Et.z.enum(["api","session","statusline"]);qt.quotaFreshnessSchema=Et.z.enum(["fresh","aging","stale"]);qt.codexResetCreditSchema=Et.z.object({title:Et.z.string().optional(),status:Et.z.string(),resetType:Et.z.string().optional(),expiresAt:Et.z.string(),grantedAt:Et.z.string().optional()});qt.codexResetCreditsSnapshotSchema=Et.z.object({availableCount:Et.z.number(),totalEarnedCount:Et.z.number().optional(),credits:Et.z.array(qt.codexResetCreditSchema),source:Et.z.enum(["api","cache"]).optional(),capturedAt:Et.z.string().optional()});qt.quotaStateSchema=Et.z.object({fiveHour:qt.quotaWindowSchema,sevenDay:qt.quotaWindowSchema,available:Et.z.boolean(),error:Et.z.string().optional(),failureKind:qt.quotaFailureKindSchema.optional(),httpStatus:Et.z.number().optional(),retryAfterMs:Et.z.number().optional(),projectedFiveHour:Et.z.number().optional(),projectedSevenDay:Et.z.number().optional(),providerId:qt.quotaProviderIdSchema.optional(),source:qt.quotaSourceSchema.optional(),capturedSource:qt.quotaCapturedSourceSchema.optional(),capturedAt:Et.z.string().optional(),stale:Et.z.boolean().optional(),ageMs:Et.z.number().finite().nonnegative().optional(),freshness:qt.quotaFreshnessSchema.optional(),fiveHourLabel:Et.z.string().optional(),sevenDayLabel:Et.z.string().optional(),limitId:Et.z.string().optional(),limitName:Et.z.string().optional(),credits:Et.z.unknown().optional(),resetCredits:qt.codexResetCreditsSnapshotSchema.optional(),planType:Et.z.string().optional(),rateLimitReachedType:Et.z.string().optional()});qt.peakHoursStateSchema=Et.z.object({status:Et.z.enum(["peak","off_peak","unknown"]),isPeak:Et.z.boolean(),sessionLimitSpeed:Et.z.enum(["normal","faster","unknown"]),label:Et.z.string(),peakHoursDescription:Et.z.string(),nextChange:Et.z.string().nullable(),minutesUntilChange:Et.z.number().nullable(),note:Et.z.string(),updatedAt:Et.z.string(),unavailable:Et.z.boolean(),notApplicable:Et.z.boolean().optional(),source:Et.z.enum(["promoclock","schedule"]).optional()});qt.quotaFailureDescriptorSchema=Et.z.object({severity:Et.z.enum(["info","warning","error"]),title:Et.z.string(),message:Et.z.string(),detail:Et.z.string().optional(),alertKey:Et.z.string(),isRetryable:Et.z.boolean()});qt.runtimeQuotaProviderSchema=Et.z.enum(Kle.RUNTIME_QUOTA_PROVIDER_IDS);var cN={accountLabel:Et.z.string().optional(),accountDetail:Et.z.string().optional(),peakHours:qt.peakHoursStateSchema.nullable().optional(),failure:qt.quotaFailureDescriptorSchema.nullable().optional()};qt.providerQuotaStateSchema=qt.quotaStateSchema.extend({runtimeProvider:qt.runtimeQuotaProviderSchema,...cN});qt.claudeProviderQuotaStateSchema=qt.quotaStateSchema.extend({runtimeProvider:Et.z.literal("claude"),...cN});qt.codexProviderQuotaStateSchema=qt.quotaStateSchema.extend({runtimeProvider:Et.z.literal("codex"),...cN});qt.zaiProviderQuotaStateSchema=qt.quotaStateSchema.extend({runtimeProvider:Et.z.literal("zai"),...cN});qt.providerQuotaMapSchema=Et.z.object({claude:qt.claudeProviderQuotaStateSchema.optional(),codex:qt.codexProviderQuotaStateSchema.optional(),zai:qt.zaiProviderQuotaStateSchema.optional()})});var Jle=Q(Ng=>{"use strict";Object.defineProperty(Ng,"__esModule",{value:!0});Ng.quotaHistoryDailyBucketSchema=Ng.quotaHistorySampleSchema=Ng.quotaHistoryRuntimeProviderSchema=void 0;var Pi=gy();Ng.quotaHistoryRuntimeProviderSchema=Pi.z.enum(["claude","codex","zai"]);Ng.quotaHistorySampleSchema=Pi.z.object({timestamp:Pi.z.string(),runtimeProvider:Ng.quotaHistoryRuntimeProviderSchema,providerId:Pi.z.string(),workspaceId:Pi.z.string(),fiveHour:Pi.z.object({utilization:Pi.z.number(),resetsAt:Pi.z.string()}),sevenDay:Pi.z.object({utilization:Pi.z.number(),resetsAt:Pi.z.string()}),available:Pi.z.boolean(),error:Pi.z.string().optional(),source:Pi.z.enum(["session","cache","api","statusline"]).optional(),stale:Pi.z.boolean().optional()});Ng.quotaHistoryDailyBucketSchema=Pi.z.object({date:Pi.z.string(),samples:Pi.z.number(),maxUtilizationFiveHour:Pi.z.number(),maxUtilizationSevenDay:Pi.z.number(),avgUtilizationFiveHour:Pi.z.number(),avgUtilizationSevenDay:Pi.z.number(),anyUnavailable:Pi.z.boolean()})});var Wle=Q(Oy=>{"use strict";Object.defineProperty(Oy,"__esModule",{value:!0});Oy.activeAccountStatusSchema=Oy.activeProviderAccountStatusSchema=void 0;var By=gy();Oy.activeProviderAccountStatusSchema=By.z.object({present:By.z.boolean(),accountId:By.z.string().optional(),email:By.z.string().optional(),label:By.z.string().optional()});Oy.activeAccountStatusSchema=By.z.object({ok:By.z.boolean(),claude:Oy.activeProviderAccountStatusSchema,codex:Oy.activeProviderAccountStatusSchema,error:By.z.string().optional()})});var Xle=Q(Vs=>{"use strict";Object.defineProperty(Vs,"__esModule",{value:!0});Vs.listAllAccountsResultSchema=Vs.savedAccountProfileSchema=Vs.accountEntrySchema=Vs.accountLoginStatusSchema=Vs.beginAccountLoginResultSchema=Vs.accountManagerResultSchema=Vs.accountProviderIdSchema=void 0;var un=gy(),XXe=dy();Vs.accountProviderIdSchema=un.z.enum(XXe.ACCOUNT_PROVIDER_IDS);Vs.accountManagerResultSchema=un.z.object({success:un.z.boolean(),error:un.z.string().optional(),warning:un.z.string().optional(),needsLogin:un.z.boolean().optional(),profileId:un.z.string().optional(),codexHome:un.z.string().optional()});var eet=un.z.object({success:un.z.literal(!0),loginId:un.z.string(),alreadyComplete:un.z.boolean().optional(),command:un.z.string().optional(),args:un.z.array(un.z.string()).optional(),env:un.z.record(un.z.string(),un.z.string()).optional(),configDir:un.z.string().optional()}),tet=un.z.object({success:un.z.literal(!1),error:un.z.string()});Vs.beginAccountLoginResultSchema=un.z.union([eet,tet]);Vs.accountLoginStatusSchema=un.z.object({state:un.z.enum(["pending","authenticated","failed"]),email:un.z.string().optional(),error:un.z.string().optional()});Vs.accountEntrySchema=un.z.object({uuid:un.z.string(),email:un.z.string(),label:un.z.string().optional(),addedAt:un.z.string()});var net=un.z.object({email:un.z.string().optional(),workspaceId:un.z.string().optional(),planType:un.z.string().optional(),authMode:un.z.enum(["chatgpt","api-key","unknown"]).optional()});Vs.savedAccountProfileSchema=un.z.object({id:un.z.string(),providerId:Vs.accountProviderIdSchema,addedAt:un.z.string(),label:un.z.string().optional(),email:un.z.string().optional(),providerAccountId:un.z.string().optional(),metadata:net.optional()});Vs.listAllAccountsResultSchema=un.z.object({claude:un.z.array(Vs.accountEntrySchema),codex:un.z.array(Vs.savedAccountProfileSchema),activeByProvider:un.z.object({"claude-code":un.z.string().nullable(),codex:un.z.string().nullable()})})});var ede=Q(sr=>{"use strict";Object.defineProperty(sr,"__esModule",{value:!0});sr.assistantTurnProjectionSchema=sr.assistantTurnSubagentSchema=sr.assistantTurnSubagentStatusSchema=sr.assistantTurnProcessSchema=sr.assistantTurnTimelineItemSchema=sr.assistantTurnReasoningTimelineItemSchema=sr.assistantTurnProcessStepSchema=sr.assistantTurnToolGroupStepSchema=sr.assistantTurnNarrationStepSchema=sr.assistantTurnToolRefSchema=sr.assistantTurnEventSchema=sr.assistantTurnEventTypeSchema=void 0;var dr=gy();sr.assistantTurnEventTypeSchema=dr.z.enum(["text","thinking","tool_use","tool_result","status","error","delta","progress"]);sr.assistantTurnEventSchema=dr.z.object({eventType:sr.assistantTurnEventTypeSchema,content:dr.z.string(),deltaKind:dr.z.enum(["text","thinking","tool_input"]).optional(),toolName:dr.z.string().optional(),toolInput:dr.z.unknown().optional(),toolUseId:dr.z.string().optional()});sr.assistantTurnToolRefSchema=dr.z.object({toolName:dr.z.string(),toolInput:dr.z.string().optional(),toolUseId:dr.z.string().optional()});sr.assistantTurnNarrationStepSchema=dr.z.object({kind:dr.z.literal("narration"),text:dr.z.string()});sr.assistantTurnToolGroupStepSchema=dr.z.object({kind:dr.z.literal("toolGroup"),tools:dr.z.array(sr.assistantTurnToolRefSchema)});sr.assistantTurnProcessStepSchema=dr.z.discriminatedUnion("kind",[sr.assistantTurnNarrationStepSchema,sr.assistantTurnToolGroupStepSchema]);sr.assistantTurnReasoningTimelineItemSchema=dr.z.object({kind:dr.z.literal("reasoning"),text:dr.z.string()});sr.assistantTurnTimelineItemSchema=dr.z.discriminatedUnion("kind",[sr.assistantTurnReasoningTimelineItemSchema,sr.assistantTurnNarrationStepSchema,sr.assistantTurnToolGroupStepSchema]);sr.assistantTurnProcessSchema=dr.z.object({steps:dr.z.array(sr.assistantTurnProcessStepSchema)});sr.assistantTurnSubagentStatusSchema=dr.z.enum(["running","completed","failed"]);sr.assistantTurnSubagentSchema=dr.z.object({id:dr.z.string(),label:dr.z.string(),agentType:dr.z.string().optional(),status:sr.assistantTurnSubagentStatusSchema});sr.assistantTurnProjectionSchema=dr.z.object({schemaVersion:dr.z.literal(2),answer:dr.z.string(),reasoning:dr.z.string(),reasoningBlocks:dr.z.array(dr.z.string()),process:sr.assistantTurnProcessSchema,timeline:dr.z.array(sr.assistantTurnTimelineItemSchema),subagents:dr.z.array(sr.assistantTurnSubagentSchema)})});var wq=Q(Wx=>{"use strict";Object.defineProperty(Wx,"__esModule",{value:!0});Wx.toLegacyProviderStatus=ret;Wx.fetchProviderStatus=set;Wx.fetchOpenAIStatus=aet;function ret(t){if(t.availability==="unavailable")return{indicator:"none",description:"Status unavailable",affectedComponents:[],activeIncident:null,updatedAt:t.checkedAt};let e=t.incidents?.[0];return{indicator:t.severity==="maintenance"?"minor":t.severity,description:t.description,affectedComponents:t.components.filter(n=>n.status!=="operational").map(({name:n,status:r})=>({name:n,status:r})),activeIncident:e?{name:e.title,impact:e.impact,shortlink:e.url??"",updatedAt:e.updatedAt??""}:null,updatedAt:t.providerUpdatedAt??""}}var oet="https://status.claude.com",iet="https://status.openai.com";function tde(){return{indicator:"none",description:"Status unavailable",affectedComponents:[],activeIncident:null,updatedAt:new Date().toISOString()}}async function rde(t){try{let e=await nde(`${t}/api/v2/status.json`);if(!e.ok)return tde();let n=await e.json(),r=n.status?.indicator??"none",o=n.status?.description??"",i=n.page?.updated_at??new Date().toISOString();if(r==="none")return{indicator:r,description:o,affectedComponents:[],activeIncident:null,updatedAt:i};let s=await nde(`${t}/api/v2/summary.json`);if(!s.ok)return{indicator:r,description:o,affectedComponents:[],activeIncident:null,updatedAt:i};let c=await s.json(),d=(c.components??[]).filter(y=>y.status&&y.status!=="operational").map(y=>({name:y.name??"Unknown",status:y.status??"unknown"})),m=(c.incidents??[]).find(y=>y.status!=="resolved"&&y.status!=="postmortem"),h=m?{name:m.name??"Unknown incident",impact:m.impact??"unknown",shortlink:m.shortlink??"",updatedAt:m.updated_at??i}:null;return{indicator:r,description:o,affectedComponents:d,activeIncident:h,updatedAt:i}}catch{return tde()}}async function nde(t){let e=new AbortController,n=setTimeout(()=>e.abort(),1e4);n.unref();try{return await fetch(t,{signal:e.signal})}finally{clearTimeout(n)}}async function set(){return rde(oet)}async function aet(){return rde(iet)}});var lN=Q(Tq=>{"use strict";Object.defineProperty(Tq,"__esModule",{value:!0});Tq.fetchProviderServiceStatus=fet;var uet={"claude-code":"https://status.claude.com/api/v2/summary.json",codex:"https://status.openai.com/api/v2/summary.json"};function NC(t){if(!t||typeof t!="object"||Array.isArray(t))throw new Error("Invalid object");return t}function Dl(t){if(typeof t!="string"||!t.trim())throw new Error("Invalid string");return t}function ode(t){if(t==null)return null;let e=Dl(t);if(!/^\d{4}-\d{2}-\d{2}T/.test(e)||!Number.isFinite(Date.parse(e)))throw new Error("Invalid date");return e}function cet(t){if(t==null)return null;let e=Dl(t),n=new URL(e);if(n.protocol!=="https:"&&n.protocol!=="http:")throw new Error("Invalid link");return e}function Dq(t){if(!Array.isArray(t))throw new Error("Invalid array");return t}function det(t){let e=NC(t),n=NC(e.status),r=Dl(n.indicator);if(!["none","minor","major","critical","maintenance"].includes(r))throw new Error("Invalid severity");let o=Dq(e.components).map(s=>{let c=NC(s);return{id:Dl(c.id),name:Dl(c.name),status:Dl(c.status)}}),i=e.incidents===void 0?null:Dq(e.incidents).map(s=>{let c=NC(s),d=c.components??c.component_ids;return{id:Dl(c.id),title:Dl(c.name),status:Dl(c.status),impact:Dl(c.impact),url:cet(c.shortlink??c.url),updatedAt:ode(c.updated_at),componentIds:d===void 0?null:Dq(d).map(m=>Dl(typeof m=="string"?m:NC(m).id))}}).filter(s=>!["resolved","postmortem"].includes(s.status.toLowerCase()));return{availability:"observed",severity:r,description:Dl(n.description),providerUpdatedAt:ode(NC(e.page).updated_at),components:o,incidents:i}}async function fet(t,{signal:e}={}){let n=uet[t],r=()=>({provider:t,sourceUrl:n,checkedAt:new Date().toISOString()}),o=(v,_)=>({...r(),availability:"unavailable",reason:v,..._!==void 0?{httpStatus:_}:{}});if(e?.aborted)return o("cancelled");let i=new AbortController,s,c=()=>{},d=new Promise((v,_)=>{c=_}),m=v=>{s||(s=v,i.abort(),c(new Error(v)))},h=()=>m("cancelled");e?.addEventListener("abort",h,{once:!0});let y=setTimeout(()=>m("timeout"),1e4);y.unref?.();try{return await Promise.race([d,(async()=>{let v=await fetch(n,{signal:i.signal,credentials:"omit"});if(!v.ok)return o("http_error",v.status);let _;try{_=await v.json()}catch(I){return o(s??(I instanceof SyntaxError?"invalid_response":"network_error"))}try{return{...r(),...det(_)}}catch{return o("invalid_response")}})()])}catch{return o(s??"network_error")}finally{clearTimeout(y),e?.removeEventListener("abort",h)}}});var cde=Q(zf=>{"use strict";var pet=zf&&zf.__createBinding||(Object.create?(function(t,e,n,r){r===void 0&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);(!o||("get"in o?!e.__esModule:o.writable||o.configurable))&&(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}):(function(t,e,n,r){r===void 0&&(r=n),t[r]=e[n]})),met=zf&&zf.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),Bq=zf&&zf.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(n){var r=[];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(r[r.length]=o);return r},t(e)};return function(e){if(e&&e.__esModule)return e;var n={};if(e!=null)for(var r=t(e),o=0;o<r.length;o++)r[o]!=="default"&&pet(n,e,r[o]);return met(n,e),n}})();Object.defineProperty(zf,"__esModule",{value:!0});zf.getSessionDiagnostics=ude;zf.runDoctor=Cet;zf.formatHealthReport=Iet;var dN=Bq(ue("fs")),het=Bq(ue("os")),xq=Bq(ue("path")),get=Fx(),Aet=is(),Xx=yx(),ide=wq(),sde=lN(),yet=bC(),vet=S6(),_et=w6(),bet=Bx();function ude(t){let e=(0,Xx.encodeWorkspacePath)(t),n=(0,Xx.getSessionDirectory)(t),r=xq.join(het.homedir(),".claude","projects"),o=[],i=!1;try{dN.existsSync(r)&&(o=dN.readdirSync(r).filter(h=>{try{return dN.statSync(xq.join(r,h)).isDirectory()}catch{return!1}}).sort()),i=dN.existsSync(n)}catch{}let s=(0,Xx.discoverSessionDirectory)(t),c=xq.basename(t).toLowerCase(),d=o.filter(h=>{let y=h.toLowerCase();return y.includes(c)||c.includes(y.split("-").pop()||"")}),m=(0,Xx.findSubdirectorySessionDirs)(t);return{workspacePath:t,encodedPath:e,expectedSessionDir:n,expectedDirExists:i,discoveredSessionDir:s,existingProjectDirs:o,similarDirs:d,platform:process.platform,subdirectoryMatches:m,selectedSubdirectoryMatch:m.length>0?(0,Xx.getMostRecentlyActiveSessionDir)(m):null}}function ade(){return{indicator:"none",description:"Status unavailable",affectedComponents:[],activeIncident:null,updatedAt:new Date().toISOString()}}async function Eet(t,e){let{providers:n}=(0,vet.createSessionProviders)({providerIds:[t]}),r=n[0],o=`Session discovery (${r?.displayName??t})`;try{if(!r)throw new Error(`${t} could not be initialized.`);let i=r.listSessionFilesAsync?await r.listSessionFilesAsync(e):r.findAllSessions(e);if(i.length>0)return{id:"session_discovery",status:"ok",title:o,message:`Found ${i.length} ${r.displayName} session${i.length===1?"":"s"} for ${e}.`};let s=r.getLastOperationStatus?.(),c=r.getRuntimeStatus?.(),d=s&&!s.usable?s.runtimeStatus:c&&!c.available?c:void 0;return{id:"session_discovery",status:"warning",title:o,message:d?.message??`No ${r.displayName} sessions found for ${e}.`,repair:d?.kind==="sqlite_missing"?"Install sqlite3 and ensure it is on PATH, then rerun sidekick doctor.":`Start ${r.displayName} in this project, or inspect ${r.getSessionDirectory(e)}.`}}catch(i){return{id:"session_discovery",status:"warning",title:o,message:i instanceof Error?i.message:String(i),repair:`Check ${t} session storage permissions and rerun sidekick doctor.`}}finally{for(let i of n)i.dispose()}}async function Cet(t={}){let e=(0,Aet.resolveProjectIdentity)(t.cwd),n=ude(e.cwd),r=(0,get.getActiveAccountStatus)(void 0,{selfHeal:!1}),o=t.provider&&t.provider!=="auto"?t.provider:(0,_et.detectProvider)(),i=t.openCodeStatus;if(!i){let D=new bet.OpenCodeDatabase((0,yet.getOpenCodeDataDir)());D.open(),i=D.getRuntimeStatus(),D.close()}let s=t.fetchServiceStatuses||!t.fetchStatuses?await(t.fetchServiceStatuses??(async()=>{let[D,O]=await Promise.all([(0,sde.fetchProviderServiceStatus)("claude-code"),(0,sde.fetchProviderServiceStatus)("codex")]);return{claude:D,openai:O}}))().catch(()=>{let D=O=>({availability:"unavailable",provider:O,checkedAt:new Date().toISOString(),sourceUrl:`https://status.${O==="codex"?"openai":"claude"}.com/api/v2/summary.json`,reason:"network_error"});return{claude:D("claude-code"),openai:D("codex")}}):void 0,c=s?{claude:(0,ide.toLegacyProviderStatus)(s.claude),openai:(0,ide.toLegacyProviderStatus)(s.openai)}:await t.fetchStatuses().catch(()=>({claude:ade(),openai:ade()})),d=[];d.push(e.hasLegacyMismatch?{id:"project_slug",status:"warning",title:"Project path resolves to a different slug",message:`Legacy ${e.legacySlug}; canonical ${e.canonicalSlug}.`,repair:`Open the resolved path (${e.resolvedCwd}) and merge any legacy project stores into the canonical slug. Sidekick readers keep the legacy fallback.`}:{id:"project_slug",status:"ok",title:"Project identity",message:`Canonical slug: ${e.canonicalSlug}`}),d.push(await Eet(o,e.resolvedCwd));let m=i.available?{id:"opencode_sqlite",status:"ok",title:"OpenCode database",message:"OpenCode database and sqlite3 are available."}:i.kind==="db_missing"?{id:"opencode_sqlite",status:"info",title:"OpenCode database",message:"No OpenCode database was found; this is expected if OpenCode is not used."}:{id:"opencode_sqlite",status:"warning",title:"OpenCode database",message:i.message??`OpenCode database unavailable (${i.kind}).`,repair:i.kind==="sqlite_missing"?"Install sqlite3 and ensure the sqlite3 executable is on PATH, then rerun sidekick doctor.":"Make sqlite3 executable and verify the OpenCode database is readable."};o!=="opencode"&&m.status==="warning"&&(m.status="info",m.message+=" This does not affect the selected session provider."),d.push(m),d.push({id:"accounts",status:r.ok?"ok":"info",title:"Accounts and credentials",message:r.ok?`Detected ${[r.claude.present&&"Claude",r.codex.present&&"Codex"].filter(Boolean).join(" and ")} credentials.`:r.error??"No Claude or Codex credentials were detected.",...r.ok?{}:{repair:"Sign in with claude or codex to refresh account quota. Existing sessions can be monitored without saved credentials."}});let h=s?Object.entries(s).filter(([,D])=>D.availability==="unavailable").map(([D])=>D):Object.entries(c).filter(([,D])=>D.description==="Status unavailable").map(([D])=>D),y=s?Object.entries(s).filter(([,D])=>D.availability==="observed"&&D.severity!=="none").map(([D])=>D):Object.entries(c).filter(([,D])=>D.indicator!=="none").map(([D])=>D),v=s?Object.entries(s).filter(([,D])=>D.availability==="observed"&&D.incidents===null).map(([D])=>D):[],_=[...y.length?[`Public vendor degradation reported for: ${y.join(", ")}.`]:[],...h.length?[`Status pages unavailable for: ${h.join(", ")}.`]:[],...v.length?[`Incident information unavailable for: ${v.join(", ")}.`]:[]];d.push({id:"provider_api",status:y.includes(o==="codex"?"openai":o==="claude-code"?"claude":"")?"warning":_.length?"info":"ok",title:"Public provider service status",message:(_.length?_.join(" "):"Claude and OpenAI status pages report normal operation.")+" Public status does not establish request connectivity or authentication."});let I=t.deprecatedSettings??[];d.push({id:"deprecated_settings",status:I.length>0?"warning":"ok",title:"Deprecated settings",message:I.length>0?I.map(D=>`${D.key}${D.replacement?` \u2192 ${D.replacement}`:""}`).join(", "):"No deprecated Sidekick settings detected.",...I.length>0?{repair:"Move each configured value to its replacement and remove the deprecated setting."}:{}});let w=d.some(D=>D.status==="error")?"unhealthy":d.some(D=>D.status==="warning")?"attention":"healthy";return{schemaVersion:1,generatedAt:new Date().toISOString(),project:e,status:w,checks:d,accounts:r,openCode:i,providerStatus:c,...s?{serviceStatus:s}:{},sessions:n,sessionProvider:o}}function Iet(t){let e={ok:"\u2713",warning:"!",error:"\u2715",info:"\xB7"},n=[`Sidekick Doctor \u2014 ${t.status}`,`Project: ${t.project.resolvedCwd}`,""];for(let r of t.checks)n.push(`${e[r.status]} ${r.title}: ${r.message}`),r.repair&&n.push(` Repair: ${r.repair}`);return n.join(`
|
|
748
|
-
`)}});var fde=Q($C=>{"use strict";Object.defineProperty($C,"__esModule",{value:!0});$C.FAILING_TOOL_TREND_ARROWS=void 0;$C.failingToolTrend=dde;$C.mergeFailingToolWindows=wet;var lde=.1;function dde(t,e){let n=e/4.285714285714286;if(n<=0)return t>0?"up":"flat";let r=t/n;return r>1+lde?"up":r<1-lde?"down":"flat"}$C.FAILING_TOOL_TREND_ARROWS={up:"\u2191",down:"\u2193",flat:"\u2192"};function wet(t,e){let n=new Map;for(let r of e)n.set(r.tool,{tool:r.tool,last7:0,last30:r.failures,categories:{...r.categories??{}},trend:"flat"});for(let r of t){let o=n.get(r.tool);o?(o.last7=r.failures,o.last30=Math.max(o.last30,r.failures)):n.set(r.tool,{tool:r.tool,last7:r.failures,last30:r.failures,categories:{...r.categories??{}},trend:"flat"})}for(let r of n.values())r.trend=dde(r.last7,r.last30);return[...n.values()].sort((r,o)=>o.last7-r.last7||o.last30-r.last30||r.tool.localeCompare(o.tool))}});var gde=Q(Oq=>{"use strict";Object.defineProperty(Oq,"__esModule",{value:!0});Oq.diagnoseProviderFailure=Oet;function Ff(t,e){try{return t&&typeof t=="object"?t[e]:void 0}catch{return}}function fN(t){return typeof t=="string"?t.slice(0,16384):""}function pde(t){let e=typeof t=="string"&&/^\d{3}$/.test(t)?Number(t):t;return typeof e=="number"&&Number.isInteger(e)&&e>=100&&e<=599?e:void 0}function hde(t){return typeof t=="string"&&t.length<=64&&/^(?:\d{4}-\d{2}-\d{2}T|(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), )/.test(t)&&Number.isFinite(Date.parse(t))?new Date(t).toISOString():void 0}function Det(t){if(typeof t=="number"||typeof t=="string"&&/^\d+(\.\d+)?$/.test(t)){let n=Number(t)*1e3;return Number.isFinite(n)&&n>=0&&n<=Number.MAX_SAFE_INTEGER?{kind:"delay",delayMs:n}:void 0}let e=hde(t);return e?{kind:"date",at:e}:void 0}function pN(t){return t==="oauth"?"oauth_reauthentication_required":t==="api-key"?"api_credentials_rejected":"authentication_rejected"}function Tet(t,e){switch(t.toLowerCase().replace(/[^a-z0-9]/g,"")){case"missingcredentials":case"notloggedin":case"signedout":return"missing_credentials";case"invalidapikey":case"apikeyrejected":return"api_credentials_rejected";case"oauthtokenexpired":case"refreshtokenexpired":case"refreshtokenreused":case"invalidgrant":return"oauth_reauthentication_required";case"authenticationerror":case"autherror":case"invalidtoken":case"tokenexpired":case"unauthorized":return pN(e);case"threadnotfound":case"invalidthreadid":case"conversationnotfound":case"invalidconversation":case"conversationexpired":case"invalidsessionid":return"invalid_provider_session";case"executionpolicydenied":case"sandboxdenied":case"approvaldenied":return"execution_policy_denied";case"ratelimiterror":case"ratelimitexceeded":case"toomanyrequests":return"rate_limited";case"overloadederror":case"serveroverloaded":return"overloaded";case"serviceunavailable":case"internalservererror":case"servererror":return"service_unavailable";case"timeouterror":case"apiconnectiontimeouterror":case"etimedout":case"underrconnecttimeout":case"underrheaderstimeout":case"deadlineexceeded":return"timeout";case"econnreset":case"econnrefused":case"enotfound":case"eaiagain":case"enetunreach":case"ehostunreach":case"apiconnectionerror":return"connection_failed";case"runtimenotfound":case"runtimeunavailable":case"modulenotfound":case"errmodulenotfound":return"runtime_unavailable";case"contextlengthexceeded":case"contextwindowexceeded":case"prompttoolong":return"context_overflow";default:return}}function mde(t,e){if(t===401)return pN(e);if(t===408||t===504)return"timeout";if(t===429)return"rate_limited";if(t===529)return"overloaded";if(t>=500)return"service_unavailable"}function xet(t,e){if(/\b(execution policy|sandbox policy|approval)\b.{0,60}\b(denied|blocked|rejected|not allowed)\b/i.test(t))return"execution_policy_denied";if(/\b(thread|conversation|session id)\b.{0,60}\b(not found|invalid|expired|does not exist)\b|\b(invalid|expired) (thread|conversation|session id)\b/i.test(t))return"invalid_provider_session";if(/\b(oauth|refresh token)\b.{0,60}\b(expired|invalid|rejected|revoked)\b/i.test(t))return"oauth_reauthentication_required";if(/\b(api[ _-]?key)\b.{0,60}\b(invalid|incorrect|rejected|revoked|expired)\b|\b(invalid|incorrect|rejected) api[ _-]?key\b/i.test(t))return"api_credentials_rejected";if(/\b(no|missing) (oauth |api[ _-]?key |authentication )?(credentials|token|api[ _-]?key)\b|\bnot (logged|signed) in\b|\bsigned out\b|\bapi[ _-]?key (not configured|not set)\b/i.test(t))return"missing_credentials";if(/\b(authentication failed|invalid authentication|credentials (rejected|expired)|token (expired|rejected|invalid))\b/i.test(t))return pN(e);if(/\b(context (length|window).{0,40}(exceed|overflow)|prompt (is )?too long|maximum context length)\b/i.test(t))return"context_overflow";if(/\b(overloaded|over capacity|server busy)\b/i.test(t))return"overloaded";if(/\b(rate[ _-]?limit|too many requests)\b/i.test(t))return"rate_limited";if(/\b(timed? ?out|deadline exceeded|etimedout)\b/i.test(t))return"timeout";if(/\b(service unavailable|bad gateway|internal server error)\b/i.test(t))return"service_unavailable";if(/\b(enotfound|eai_again|econnreset|econnrefused|dns (failure|lookup failed)|fetch failed|network (error|unreachable)|connection (reset|refused|terminated|termination)|upstream connect error|socket hang up)\b/i.test(t))return"connection_failed";if(/\b(claude|codex|cli|runtime|executable)\b.{0,60}\b(not found|not installed|unavailable|not executable)\b|\bspawn\s+\S+\s+(ENOENT|EACCES)\b/i.test(t))return"runtime_unavailable"}function Bet(t,e){switch(t){case"missing_credentials":return e==="oauth"?"sign_in":e==="api-key"?"update_credentials":"check_authentication";case"oauth_reauthentication_required":return"sign_in";case"api_credentials_rejected":return"update_credentials";case"authentication_rejected":return"check_authentication";case"invalid_provider_session":return"start_new_session";case"connection_failed":return"check_connection";case"execution_policy_denied":return"review_execution_policy";case"runtime_unavailable":return"repair_runtime";case"context_overflow":return"reduce_context";case"unknown":return"inspect_error";default:return"retry_later"}}function Oet(t){let e=[],n=[],r=new Set,o=[{value:t.error,depth:0}],i,s;for(let v=0;v<o.length&&v<32;v++){let{value:_,depth:I}=o[v];if(typeof _=="string"){n.push(fN(_));continue}if(!_||typeof _!="object"||r.has(_))continue;r.add(_);for(let P of["code","type","name"])e.push(fN(Ff(_,P)));n.push(fN(Ff(_,"message")));for(let P of["status","statusCode","httpStatus","status_code"])i??=pde(Ff(_,P));let w=Ff(_,"headers"),D=typeof Headers<"u"&&w instanceof Headers?w.get("retry-after"):Ff(w,"retry-after")??Ff(w,"Retry-After");s??=Det(D);let O=Ff(_,"retryAfterMs");if(!s&&typeof O=="number"&&Number.isFinite(O)&&O>=0&&O<=Number.MAX_SAFE_INTEGER&&(s={kind:"delay",delayMs:O}),Ff(_,"code")==="ENOENT"&&/^spawn\b/.test(fN(Ff(_,"syscall")))&&e.push("runtime_unavailable"),I<5){for(let R of["error","cause","response","data","body"]){let L=Ff(_,R);if(typeof L=="string"&&L.length<=16384&&L.trim().startsWith("{"))try{L=JSON.parse(L)}catch{}L!=null&&o.push({value:L,depth:I+1})}let P=Ff(_,"errors");if(Array.isArray(P))for(let R of P.slice(0,8))o.push({value:R,depth:I+1})}}let c,d=t.authentication,m=hde(d?.checkedAt);d&&m&&["oauth","api-key","unknown"].includes(d.credentialKind)&&["authenticated","missing","signed-out","expired","rejected","unknown"].includes(d.state)&&["local-check","provider-response"].includes(d.source)&&(c={credentialKind:d.credentialKind,state:d.state,checkedAt:m,source:d.source});let h=e.map(v=>Tet(v,t.credentialKind)).find(v=>v!==void 0),y="structured-error";if(!h&&i!==void 0&&(h=mde(i,t.credentialKind),y="http-status"),!h){y="message";for(let v of n){let _=v.match(/\b(?:HTTP(?:\/\d(?:\.\d)?)?(?: error)?|(?:unexpected )?status(?: code)?|API error)\s*[:=]?\s*(\d{3})\b|\b(401|403|429|50[02349]|529)\s+(?:Unauthorized|Forbidden|Too Many Requests|Bad Gateway|Service Unavailable|Internal Server Error|Gateway Timeout)\b/i),I=_?pde(_[1]??_[2]):void 0;if(i===void 0&&I!==void 0&&(i=I,h=mde(I,t.credentialKind)),h??=xet(v,t.credentialKind),h)break}}return!h&&c&&c.credentialKind===t.credentialKind&&((c.state==="missing"||c.state==="signed-out")&&(h="missing_credentials"),(c.state==="expired"||c.state==="rejected")&&(h=pN(t.credentialKind)),h&&(y="authentication-check")),h??="unknown",{provider:t.provider,credentialKind:t.credentialKind,diagnosis:h,recovery:Bet(h,t.credentialKind),evidence:h==="unknown"?[]:[{source:y,rule:h,...y==="authentication-check"?{checkedAt:c.checkedAt}:{}}],...c?{authentication:c}:{},...i!==void 0?{httpStatus:i}:{},...s?{retryAfter:s}:{}}}});var on=Q(C=>{"use strict";Object.defineProperty(C,"__esModule",{value:!0});C.isAggregateCodexLimit=C.fileFingerprintParts=C.fileFingerprint=C.observedSessionSourceFromProvider=C.ObservedSessionCollector=C.weekKey=C.usageBucketKey=C.summarizeUsageRows=C.bucketUsage=C.importSessionHistory=C.ACTIVE_SESSION_MTIME_THRESHOLD_MS=C.sessionSummaryFromStats=C.removeSessionSummary=C.markFileImported=C.isFileImported=C.applySessionSummary=C.pruneUsageCache=C.getUsageCacheDir=C.collectUsageEvents=C.USAGE_CACHE_VERSION=C.MAX_USAGE_CACHE_FILES=C.findActiveBillingBlock=C.computeBillingBlocks=C.BILLING_BLOCK_DURATION_MS=C.writeStateFile=C.readStateFile=C.quotaToStateFile=C.getStateFilePath=C.billingBlockToStateFile=C.STATE_FILE_SCHEMA_VERSION=C.STATE_FILE_NAME=C.sessionFingerprintParts=C.fingerprintString=C.readSessionReportInputs=C.readSessionFileStats=C.providerContextSizeFn=C.firstUserPrompt=C.computeSessionFileStats=C.readSessionTranscript=C.listRecentSessions=C.projectSessionTranscript=C.estimateSerializedTokens=C.estimateTextTokens=C.TOKEN_TOTAL_LABEL=C.TOKEN_CONTEXT_LABEL=C.sumTokenTotals=C.summarizeTokens=C.calculateNormalizedUsageCost=C.extractNormalizedUsage=C.normalizeProviderUsage=void 0;C.derivePendingUserRequestV1=C.createProviderSessionAdapterV1=C.createSessionProviders=C.SESSION_PROVIDER_IDS=C.renderHandoffUrlTemplate=C.addNote=C.decisionFingerprint=C.addDecision=C.completeTask=C.addTask=C.withFileLockSync=C.updateJsonStoreAtomicSync=C.updateJsonStoreAtomic=C.atomicWriteFileSync=C.atomicWriteJsonSync=C.atomicWriteJson=C.readClaudeCodePlanFiles=C.getPlanAnalytics=C.writePlans=C.getLatestPlan=C.readPlans=C.readLatestHandoff=C.readHistory=C.readNotes=C.readDecisions=C.readTasks=C.migrateLegacyProjectStores=C.resolveProjectIdentity=C.getProjectSlugRaw=C.getProjectSlug=C.encodeWorkspacePath=C.getGlobalDataPath=C.getProjectDataPath=C.setConfigDir=C.getDefaultConfigDir=C.getConfigDirOverride=C.getConfigDir=C.CONFIG_DIR_ENV_VAR=C.MAX_PLANS_PER_PROJECT=C.PLAN_SCHEMA_VERSION=C.createEmptyDataStore=C.createEmptyTokenTotals=C.HISTORICAL_SESSION_RETENTION_LIMIT=C.HISTORICAL_DATA_SCHEMA_VERSION=C.STALENESS_THRESHOLDS=C.IMPORTANCE_DECAY_FACTORS=C.KNOWLEDGE_NOTE_SCHEMA_VERSION=C.DECISION_LOG_SCHEMA_VERSION=C.normalizeTaskStatus=C.TASK_PERSISTENCE_SCHEMA_VERSION=void 0;C.readSessionPreview=C.listSessionPreviewsAsync=C.listSessionPreviews=C.readCodexHistory=C.parseMcpToolName=C.scanSubagentTraces=C.findAllSessionsWithWorktrees=C.discoverWorktreeSiblings=C.resolveWorktreeMainRepo=C.getAllClaudeProjectFolders=C.decodeEncodedPath=C.getMostRecentlyActiveSessionDir=C.findSubdirectorySessionDirs=C.findSessionFilesWithStats=C.findSessionsInDirectory=C.findAllClaudeSessions=C.findActiveClaudeSession=C.discoverSessionDirectory=C.getClaudeSessionDirectory=C.encodeClaudeWorkspacePath=C.SESSION_ACTIVITY_STALENESS_MS=C.SESSION_ACTIVITY_GRACE_PERIOD_MS=C.refreshSessionActivityState=C.detectSessionActivity=C.classifySessionActivity=C.extractTaskInfo=C.scanSubagentDir=C.normalizeCodexToolInput=C.normalizeCodexToolName=C.extractPatchFilePaths=C.CodexRolloutParser=C.parseDbPartData=C.parseDbMessageData=C.convertOpenCodeMessage=C.detectPlanModeFromText=C.normalizeToolInput=C.normalizeToolName=C.TRUNCATION_PATTERNS=C.JsonlParser=C.walkRolloutFilesAsync=C.walkRolloutFiles=C.findCodexRolloutFile=C.CodexProvider=C.getOpenCodeDataDir=C.OpenCodeProvider=C.ClaudeCodeProvider=C.getAllDetectedProviders=C.detectProvider=C._resetProviderDetectionCache=C.getObservedActivityReason=void 0;C.EventAggregator=C.getRandomPhrase=C.PHRASE_CATEGORIES=C.ALL_PHRASES=C.HIGHLIGHT_CSS=C.clearHighlightCache=C.highlightEvent=C.formatSessionJson=C.formatSessionMarkdown=C.formatSessionText=C.classifyNoise=C.shouldMergeWithPrevious=C.classifyFollowEvent=C.classifyMessage=C.getSoftNoiseReason=C.isHardNoiseFollowEvent=C.isHardNoise=C.formatToolSummary=C.parseLocalDateKey=C.formatTokenCount=C.formatLocalDateKey=C.formatDurationMs=C.addLocalDays=C.createJsonlTail=C.toFollowEvents=C.resolveSessionPath=C.createWatcher=C.parseChangelog=C.extractProposedPlanShared=C.parsePlanMarkdownShared=C.PlanExtractor=C.segmentAssistantTurn=C.reasoningSummary=C.isAssistantTurnSubagentTool=C.extractTurnSubagents=C.assistantTurnEventsFromSessionEvents=C.readSessionContextSnapshot=C.createSessionContextProjector=C.calculateSessionContextPressure=C.buildSessionContextSnapshot=C.composeContext=C.FilterEngine=C.searchSessions=C.CodexDatabase=C.OpenCodeDatabase=C.discoverDebugLogs=C.collapseDuplicates=C.filterByLevel=C.parseDebugLog=C.readSessionPreviewAsync=void 0;C.finalizeAccountLogin=C.getAccountLoginStatusAsync=C.getAccountLoginStatus=C.beginAccountLogin=C.isMultiAccountEnabled=C.resolveActiveClaudeAccount=C.getActiveAccount=C.listAccounts=C.removeAccount=C.reconcileClaudeAuthState=C.applyActiveClaudeToLiveHome=C.resolveActiveClaudeHome=C.switchToAccount=C.addCurrentAccount=C.readActiveClaudeAccount=C.writeAccountRegistry=C.readAccountRegistry=C.ensureDefaultAccounts=C.readClaudeMaxAccessTokenSync=C.readClaudeMaxCredentials=C.writeActiveCredentials=C.readActiveCredentials=C.openInBrowser=C.parseTranscriptFromEvents=C.parseTranscript=C.generateHtmlReport=C.formatCompactionLedger=C.calculateCompactionLedger=C.describeCostProvenance=C.classifyCostProvenance=C.calculateCodeImpact=C.scoreSessionQuality=C.calculateQualityTrend=C.PatternExtractor=C.HeatmapTracker=C.FrequencyTracker=C.readErrorHistory=C.getTopFailingTools=C.appendErrorHistory=C.MAX_ERROR_HISTORY_SESSIONS=C.ERROR_HISTORY_SCHEMA_VERSION=C.getSnapshotPath=C.MAX_SNAPSHOT_FILES=C.pruneSnapshots=C.isSnapshotValid=C.deleteSnapshot=C.loadSnapshot=C.saveSnapshot=C.SessionMonitor=C.parseTodoDependencies=void 0;C.FIVE_HOUR_WINDOW_MS=C.AutoSwitchController=C.decideAutoSwitch=C.DEFAULT_AUTO_SWITCH_CONFIG=C.removeLauncher=C.writeLauncher=C.isShellHookInstalled=C.uninstallShellHook=C.installShellHook=C.setTerminalActiveProfile=C.removeCodexAccount=C.switchToCodexAccountAsync=C.switchToCodexAccount=C.finalizeCodexAccountAsync=C.finalizeCodexAccount=C.prepareCodexAccountAsync=C.prepareCodexAccount=C.getCodexExecutionEnv=C.resolveSidekickCodexHome=C.resolveActiveCodexAccount=C.getActiveCodexAccount=C.listCodexAccounts=C.getSystemCodexHome=C.getCodexMonitoringHomes=C.getCodexProfileHome=C.getCodexProfilesDir=C.readClaudeProfileIdentity=C.isClaudeProfileAuthenticated=C.claudeKeychainService=C.claudeKeychainSuffix=C.getClaudeProfileHome=C.getClaudeProfilesDir=C.onAccountsChanged=C.getActiveAccountStatus=C.ACCOUNT_PROVIDER_IDS=C.removeSavedAccountProfile=C.replaceSavedAccountProfiles=C.setActiveSavedAccount=C.upsertSavedAccountProfile=C.getActiveSavedAccount=C.listSavedAccountProfiles=C.writeSavedAccountRegistry=C.readSavedAccountRegistry=C.getAccountsDir=C.resolveClaudeLoginCommand=C.listAllAccounts=C.switchAccountAsync=C.switchAccount=C.spawnAccountLogin=C.finalizeAccountLoginAsync=void 0;C.calculateCostWithPricing=C.calculateCost=C.getModelInfo=C.resolveModelPricing=C.getModelPricing=C.parseModelId=C.DEFAULT_CONTEXT_WINDOW=C.resolveModelContextWindow=C.getModelContextWindowSize=C.selectStatuslineAccount=C.formatStatusline=C.estimateTimeToQuota=C.BurnRateCalculator=C.RUNTIME_QUOTA_PROVIDER_IDS=C.MultiProviderQuotaService=C.resolveZaiQuota=C.readZaiCredentials=C.quotaStateFromZaiQuotaLimitPayload=C.fetchZaiQuotaFromApi=C.CodexQuotaWatcher=C.resolveCodexQuotaFromLocalSources=C.resolveCodexQuota=C.readLatestCodexQuotaFromRollouts=C.quotaFromCodexRateLimits=C.fetchCodexQuotaFromApi=C.fetchCodexResetCreditsFromApi=C.getWorkspaceIdFromPath=C.pruneQuotaHistory=C.readQuotaHistoryDailyBuckets=C.readQuotaHistoryRange=C.appendQuotaHistorySample=C.quotaFromStatuslinePayload=C.parseClaudeStatuslinePayload=C.evaluateQuotaThresholds=C.describeQuotaThresholdAlert=C.DEFAULT_QUOTA_THRESHOLDS=C.QUOTA_FRESH_MAX_AGE_MS=C.QUOTA_AGING_MAX_AGE_MS=C.formatQuotaAge=C.classifyQuotaFreshness=C.resolveQuota=C.writeQuotaSnapshot=C.readQuotaSnapshot=C.QuotaPoller=C.describeQuotaFailure=C.withQuotaProjections=C.projectQuotaWindow=C.fetchQuota=C.SEVEN_DAY_WINDOW_MS=C.QUOTA_PROVIDER_IDS=void 0;C.providerQuotaStateSchema=C.runtimeQuotaProviderSchema=C.quotaFailureDescriptorSchema=C.peakHoursStateSchema=C.codexResetCreditsSnapshotSchema=C.codexResetCreditSchema=C.quotaSourceSchema=C.quotaProviderIdSchema=C.quotaFailureKindSchema=C.quotaStateSchema=C.quotaWindowSchema=C.extractSessionEvents=C.permissionModeSchema=C.sessionEventSchema=C.sessionMessageSchema=C.messageUsageSchema=C.ToolCallTracker=C.extractToolCalls=C.extractToolCall=C.extractErrorMessage=C.categorizeError=C.gatherAssetsForCwd=C.codexSessions=C.readCodexAssets=C.claudeSessions=C.readClaudeAssets=C.extractCommands=C.extractFilePaths=C.extractUrls=C.extractTokenUsage=C.getObservedContextWindowPath=C.recordObservedContextWindow=C.loadObservedContextWindows=C.LITELLM_CATALOG_URL=C.normalizeLiteLlmContextWindows=C.normalizeLiteLlmCatalog=C.hydratePricingCatalog=C.RESOLVED_MODEL_CATALOG_SCHEMA_VERSION=C.resolveModelAlias=C.registerModelAlias=C.importResolvedModelCatalog=C.exportResolvedModelCatalog=C.MODEL_PROVIDER_IDS=C.formatCost=C.sortModelIds=C.compareModelIds=C.getModelDisplayInfo=C.shortModelName=C.mergeCostSources=C.calculateCostWithProvenance=void 0;C.fetchProviderServiceStatus=C.diagnoseProviderFailure=C.mergeFailingToolWindows=C.failingToolTrend=C.FAILING_TOOL_TREND_ARROWS=C.scopePeakHoursToSessionProvider=C.PEAK_HOURS_DESCRIPTION=C.PEAK_HOURS_CACHE_MS=C.isClaudeCodeSessionProvider=C.getScheduledPeakHoursState=C.fetchPeakHoursStatus=C.DEFAULT_PEAK_HOURS_TIMEOUT_MS=C.createPeakHoursNotApplicableState=C._resetPeakHoursCache=C.runDoctor=C.getSessionDiagnostics=C.formatHealthReport=C.toLegacyProviderStatus=C.fetchOpenAIStatus=C.fetchProviderStatus=C.assistantTurnToolRefSchema=C.assistantTurnToolGroupStepSchema=C.assistantTurnTimelineItemSchema=C.assistantTurnSubagentStatusSchema=C.assistantTurnSubagentSchema=C.assistantTurnReasoningTimelineItemSchema=C.assistantTurnProjectionSchema=C.assistantTurnProcessStepSchema=C.assistantTurnProcessSchema=C.assistantTurnNarrationStepSchema=C.assistantTurnEventTypeSchema=C.assistantTurnEventSchema=C.listAllAccountsResultSchema=C.savedAccountProfileSchema=C.accountEntrySchema=C.accountLoginStatusSchema=C.beginAccountLoginResultSchema=C.accountManagerResultSchema=C.accountProviderIdSchema=C.activeAccountStatusSchema=C.activeProviderAccountStatusSchema=C.quotaHistoryDailyBucketSchema=C.quotaHistorySampleSchema=C.quotaHistoryRuntimeProviderSchema=C.providerQuotaMapSchema=C.zaiProviderQuotaStateSchema=C.codexProviderQuotaStateSchema=C.claudeProviderQuotaStateSchema=void 0;var kq=Up();Object.defineProperty(C,"normalizeProviderUsage",{enumerable:!0,get:function(){return kq.normalizeProviderUsage}});Object.defineProperty(C,"extractNormalizedUsage",{enumerable:!0,get:function(){return kq.extractNormalizedUsage}});Object.defineProperty(C,"calculateNormalizedUsageCost",{enumerable:!0,get:function(){return kq.calculateNormalizedUsageCost}});var mN=jE();Object.defineProperty(C,"summarizeTokens",{enumerable:!0,get:function(){return mN.summarizeTokens}});Object.defineProperty(C,"sumTokenTotals",{enumerable:!0,get:function(){return mN.sumTokenTotals}});Object.defineProperty(C,"TOKEN_CONTEXT_LABEL",{enumerable:!0,get:function(){return mN.TOKEN_CONTEXT_LABEL}});Object.defineProperty(C,"TOKEN_TOTAL_LABEL",{enumerable:!0,get:function(){return mN.TOKEN_TOTAL_LABEL}});var Ade=WP();Object.defineProperty(C,"estimateTextTokens",{enumerable:!0,get:function(){return Ade.estimateTextTokens}});Object.defineProperty(C,"estimateSerializedTokens",{enumerable:!0,get:function(){return Ade.estimateSerializedTokens}});var ket=QT();Object.defineProperty(C,"projectSessionTranscript",{enumerable:!0,get:function(){return ket.projectSessionTranscript}});var yde=IL();Object.defineProperty(C,"listRecentSessions",{enumerable:!0,get:function(){return yde.listRecentSessions}});Object.defineProperty(C,"readSessionTranscript",{enumerable:!0,get:function(){return yde.readSessionTranscript}});var hN=mg();Object.defineProperty(C,"computeSessionFileStats",{enumerable:!0,get:function(){return hN.computeSessionFileStats}});Object.defineProperty(C,"firstUserPrompt",{enumerable:!0,get:function(){return hN.firstUserPrompt}});Object.defineProperty(C,"providerContextSizeFn",{enumerable:!0,get:function(){return hN.providerContextSizeFn}});Object.defineProperty(C,"readSessionFileStats",{enumerable:!0,get:function(){return hN.readSessionFileStats}});var Pet=E4();Object.defineProperty(C,"readSessionReportInputs",{enumerable:!0,get:function(){return Pet.readSessionReportInputs}});var vde=tC();Object.defineProperty(C,"fingerprintString",{enumerable:!0,get:function(){return vde.fingerprintString}});Object.defineProperty(C,"sessionFingerprintParts",{enumerable:!0,get:function(){return vde.sessionFingerprintParts}});var hb=$M();Object.defineProperty(C,"STATE_FILE_NAME",{enumerable:!0,get:function(){return hb.STATE_FILE_NAME}});Object.defineProperty(C,"STATE_FILE_SCHEMA_VERSION",{enumerable:!0,get:function(){return hb.STATE_FILE_SCHEMA_VERSION}});Object.defineProperty(C,"billingBlockToStateFile",{enumerable:!0,get:function(){return hb.billingBlockToStateFile}});Object.defineProperty(C,"getStateFilePath",{enumerable:!0,get:function(){return hb.getStateFilePath}});Object.defineProperty(C,"quotaToStateFile",{enumerable:!0,get:function(){return hb.quotaToStateFile}});Object.defineProperty(C,"readStateFile",{enumerable:!0,get:function(){return hb.readStateFile}});Object.defineProperty(C,"writeStateFile",{enumerable:!0,get:function(){return hb.writeStateFile}});var Pq=R4();Object.defineProperty(C,"BILLING_BLOCK_DURATION_MS",{enumerable:!0,get:function(){return Pq.BILLING_BLOCK_DURATION_MS}});Object.defineProperty(C,"computeBillingBlocks",{enumerable:!0,get:function(){return Pq.computeBillingBlocks}});Object.defineProperty(C,"findActiveBillingBlock",{enumerable:!0,get:function(){return Pq.findActiveBillingBlock}});var eB=z4();Object.defineProperty(C,"MAX_USAGE_CACHE_FILES",{enumerable:!0,get:function(){return eB.MAX_USAGE_CACHE_FILES}});Object.defineProperty(C,"USAGE_CACHE_VERSION",{enumerable:!0,get:function(){return eB.USAGE_CACHE_VERSION}});Object.defineProperty(C,"collectUsageEvents",{enumerable:!0,get:function(){return eB.collectUsageEvents}});Object.defineProperty(C,"getUsageCacheDir",{enumerable:!0,get:function(){return eB.getUsageCacheDir}});Object.defineProperty(C,"pruneUsageCache",{enumerable:!0,get:function(){return eB.pruneUsageCache}});var tB=FM();Object.defineProperty(C,"applySessionSummary",{enumerable:!0,get:function(){return tB.applySessionSummary}});Object.defineProperty(C,"isFileImported",{enumerable:!0,get:function(){return tB.isFileImported}});Object.defineProperty(C,"markFileImported",{enumerable:!0,get:function(){return tB.markFileImported}});Object.defineProperty(C,"removeSessionSummary",{enumerable:!0,get:function(){return tB.removeSessionSummary}});Object.defineProperty(C,"sessionSummaryFromStats",{enumerable:!0,get:function(){return tB.sessionSummaryFromStats}});var _de=H4();Object.defineProperty(C,"ACTIVE_SESSION_MTIME_THRESHOLD_MS",{enumerable:!0,get:function(){return _de.ACTIVE_SESSION_MTIME_THRESHOLD_MS}});Object.defineProperty(C,"importSessionHistory",{enumerable:!0,get:function(){return _de.importSessionHistory}});var gN=q4();Object.defineProperty(C,"bucketUsage",{enumerable:!0,get:function(){return gN.bucketUsage}});Object.defineProperty(C,"summarizeUsageRows",{enumerable:!0,get:function(){return gN.summarizeUsageRows}});Object.defineProperty(C,"usageBucketKey",{enumerable:!0,get:function(){return gN.usageBucketKey}});Object.defineProperty(C,"weekKey",{enumerable:!0,get:function(){return gN.weekKey}});var AN=qM();Object.defineProperty(C,"ObservedSessionCollector",{enumerable:!0,get:function(){return AN.ObservedSessionCollector}});Object.defineProperty(C,"observedSessionSourceFromProvider",{enumerable:!0,get:function(){return AN.observedSessionSourceFromProvider}});Object.defineProperty(C,"fileFingerprint",{enumerable:!0,get:function(){return AN.fileFingerprint}});Object.defineProperty(C,"fileFingerprintParts",{enumerable:!0,get:function(){return AN.fileFingerprintParts}});var Ret=ux();Object.defineProperty(C,"isAggregateCodexLimit",{enumerable:!0,get:function(){return Ret.isAggregateCodexLimit}});var bde=X4();Object.defineProperty(C,"TASK_PERSISTENCE_SCHEMA_VERSION",{enumerable:!0,get:function(){return bde.TASK_PERSISTENCE_SCHEMA_VERSION}});Object.defineProperty(C,"normalizeTaskStatus",{enumerable:!0,get:function(){return bde.normalizeTaskStatus}});var Met=eH();Object.defineProperty(C,"DECISION_LOG_SCHEMA_VERSION",{enumerable:!0,get:function(){return Met.DECISION_LOG_SCHEMA_VERSION}});var Rq=tH();Object.defineProperty(C,"KNOWLEDGE_NOTE_SCHEMA_VERSION",{enumerable:!0,get:function(){return Rq.KNOWLEDGE_NOTE_SCHEMA_VERSION}});Object.defineProperty(C,"IMPORTANCE_DECAY_FACTORS",{enumerable:!0,get:function(){return Rq.IMPORTANCE_DECAY_FACTORS}});Object.defineProperty(C,"STALENESS_THRESHOLDS",{enumerable:!0,get:function(){return Rq.STALENESS_THRESHOLDS}});var yN=F4();Object.defineProperty(C,"HISTORICAL_DATA_SCHEMA_VERSION",{enumerable:!0,get:function(){return yN.HISTORICAL_DATA_SCHEMA_VERSION}});Object.defineProperty(C,"HISTORICAL_SESSION_RETENTION_LIMIT",{enumerable:!0,get:function(){return yN.HISTORICAL_SESSION_RETENTION_LIMIT}});Object.defineProperty(C,"createEmptyTokenTotals",{enumerable:!0,get:function(){return yN.createEmptyTokenTotals}});Object.defineProperty(C,"createEmptyDataStore",{enumerable:!0,get:function(){return yN.createEmptyDataStore}});var Sde=nH();Object.defineProperty(C,"PLAN_SCHEMA_VERSION",{enumerable:!0,get:function(){return Sde.PLAN_SCHEMA_VERSION}});Object.defineProperty(C,"MAX_PLANS_PER_PROJECT",{enumerable:!0,get:function(){return Sde.MAX_PLANS_PER_PROJECT}});var Uf=is();Object.defineProperty(C,"CONFIG_DIR_ENV_VAR",{enumerable:!0,get:function(){return Uf.CONFIG_DIR_ENV_VAR}});Object.defineProperty(C,"getConfigDir",{enumerable:!0,get:function(){return Uf.getConfigDir}});Object.defineProperty(C,"getConfigDirOverride",{enumerable:!0,get:function(){return Uf.getConfigDirOverride}});Object.defineProperty(C,"getDefaultConfigDir",{enumerable:!0,get:function(){return Uf.getDefaultConfigDir}});Object.defineProperty(C,"setConfigDir",{enumerable:!0,get:function(){return Uf.setConfigDir}});Object.defineProperty(C,"getProjectDataPath",{enumerable:!0,get:function(){return Uf.getProjectDataPath}});Object.defineProperty(C,"getGlobalDataPath",{enumerable:!0,get:function(){return Uf.getGlobalDataPath}});Object.defineProperty(C,"encodeWorkspacePath",{enumerable:!0,get:function(){return Uf.encodeWorkspacePath}});Object.defineProperty(C,"getProjectSlug",{enumerable:!0,get:function(){return Uf.getProjectSlug}});Object.defineProperty(C,"getProjectSlugRaw",{enumerable:!0,get:function(){return Uf.getProjectSlugRaw}});Object.defineProperty(C,"resolveProjectIdentity",{enumerable:!0,get:function(){return Uf.resolveProjectIdentity}});var Qet=fx();Object.defineProperty(C,"migrateLegacyProjectStores",{enumerable:!0,get:function(){return Qet.migrateLegacyProjectStores}});var Net=iH();Object.defineProperty(C,"readTasks",{enumerable:!0,get:function(){return Net.readTasks}});var $et=aH();Object.defineProperty(C,"readDecisions",{enumerable:!0,get:function(){return $et.readDecisions}});var jet=cH();Object.defineProperty(C,"readNotes",{enumerable:!0,get:function(){return jet.readNotes}});var zet=dH();Object.defineProperty(C,"readHistory",{enumerable:!0,get:function(){return zet.readHistory}});var Fet=fH();Object.defineProperty(C,"readLatestHandoff",{enumerable:!0,get:function(){return Fet.readLatestHandoff}});var nB=Eie();Object.defineProperty(C,"readPlans",{enumerable:!0,get:function(){return nB.readPlans}});Object.defineProperty(C,"getLatestPlan",{enumerable:!0,get:function(){return nB.getLatestPlan}});Object.defineProperty(C,"writePlans",{enumerable:!0,get:function(){return nB.writePlans}});Object.defineProperty(C,"getPlanAnalytics",{enumerable:!0,get:function(){return nB.getPlanAnalytics}});Object.defineProperty(C,"readClaudeCodePlanFiles",{enumerable:!0,get:function(){return nB.readClaudeCodePlanFiles}});var jC=la();Object.defineProperty(C,"atomicWriteJson",{enumerable:!0,get:function(){return jC.atomicWriteJson}});Object.defineProperty(C,"atomicWriteJsonSync",{enumerable:!0,get:function(){return jC.atomicWriteJsonSync}});Object.defineProperty(C,"atomicWriteFileSync",{enumerable:!0,get:function(){return jC.atomicWriteFileSync}});Object.defineProperty(C,"updateJsonStoreAtomic",{enumerable:!0,get:function(){return jC.updateJsonStoreAtomic}});Object.defineProperty(C,"updateJsonStoreAtomicSync",{enumerable:!0,get:function(){return jC.updateJsonStoreAtomicSync}});Object.defineProperty(C,"withFileLockSync",{enumerable:!0,get:function(){return jC.withFileLockSync}});var Ede=Tie();Object.defineProperty(C,"addTask",{enumerable:!0,get:function(){return Ede.addTask}});Object.defineProperty(C,"completeTask",{enumerable:!0,get:function(){return Ede.completeTask}});var Cde=Oie();Object.defineProperty(C,"addDecision",{enumerable:!0,get:function(){return Cde.addDecision}});Object.defineProperty(C,"decisionFingerprint",{enumerable:!0,get:function(){return Cde.decisionFingerprint}});var Uet=Rie();Object.defineProperty(C,"addNote",{enumerable:!0,get:function(){return Uet.addNote}});var Let=Mie();Object.defineProperty(C,"renderHandoffUrlTemplate",{enumerable:!0,get:function(){return Let.renderHandoffUrlTemplate}});var Het=AH();Object.defineProperty(C,"SESSION_PROVIDER_IDS",{enumerable:!0,get:function(){return Het.SESSION_PROVIDER_IDS}});var qet=S6();Object.defineProperty(C,"createSessionProviders",{enumerable:!0,get:function(){return qet.createSessionProviders}});var Mq=K4();Object.defineProperty(C,"createProviderSessionAdapterV1",{enumerable:!0,get:function(){return Mq.createProviderSessionAdapterV1}});Object.defineProperty(C,"derivePendingUserRequestV1",{enumerable:!0,get:function(){return Mq.derivePendingUserRequestV1}});Object.defineProperty(C,"getObservedActivityReason",{enumerable:!0,get:function(){return Mq.getObservedActivityReason}});var Qq=w6();Object.defineProperty(C,"_resetProviderDetectionCache",{enumerable:!0,get:function(){return Qq._resetProviderDetectionCache}});Object.defineProperty(C,"detectProvider",{enumerable:!0,get:function(){return Qq.detectProvider}});Object.defineProperty(C,"getAllDetectedProviders",{enumerable:!0,get:function(){return Qq.getAllDetectedProviders}});var Zet=OH();Object.defineProperty(C,"ClaudeCodeProvider",{enumerable:!0,get:function(){return Zet.ClaudeCodeProvider}});var Ide=bC();Object.defineProperty(C,"OpenCodeProvider",{enumerable:!0,get:function(){return Ide.OpenCodeProvider}});Object.defineProperty(C,"getOpenCodeDataDir",{enumerable:!0,get:function(){return Ide.getOpenCodeDataDir}});var wde=AC();Object.defineProperty(C,"CodexProvider",{enumerable:!0,get:function(){return wde.CodexProvider}});Object.defineProperty(C,"findCodexRolloutFile",{enumerable:!0,get:function(){return wde.findCodexRolloutFile}});var Dde=wx();Object.defineProperty(C,"walkRolloutFiles",{enumerable:!0,get:function(){return Dde.walkRolloutFiles}});Object.defineProperty(C,"walkRolloutFilesAsync",{enumerable:!0,get:function(){return Dde.walkRolloutFilesAsync}});var Tde=FE();Object.defineProperty(C,"JsonlParser",{enumerable:!0,get:function(){return Tde.JsonlParser}});Object.defineProperty(C,"TRUNCATION_PATTERNS",{enumerable:!0,get:function(){return Tde.TRUNCATION_PATTERNS}});var zC=_x();Object.defineProperty(C,"normalizeToolName",{enumerable:!0,get:function(){return zC.normalizeToolName}});Object.defineProperty(C,"normalizeToolInput",{enumerable:!0,get:function(){return zC.normalizeToolInput}});Object.defineProperty(C,"detectPlanModeFromText",{enumerable:!0,get:function(){return zC.detectPlanModeFromText}});Object.defineProperty(C,"convertOpenCodeMessage",{enumerable:!0,get:function(){return zC.convertOpenCodeMessage}});Object.defineProperty(C,"parseDbMessageData",{enumerable:!0,get:function(){return zC.parseDbMessageData}});Object.defineProperty(C,"parseDbPartData",{enumerable:!0,get:function(){return zC.parseDbPartData}});var vN=eQ();Object.defineProperty(C,"CodexRolloutParser",{enumerable:!0,get:function(){return vN.CodexRolloutParser}});Object.defineProperty(C,"extractPatchFilePaths",{enumerable:!0,get:function(){return vN.extractPatchFilePaths}});Object.defineProperty(C,"normalizeCodexToolName",{enumerable:!0,get:function(){return vN.normalizeCodexToolName}});Object.defineProperty(C,"normalizeCodexToolInput",{enumerable:!0,get:function(){return vN.normalizeCodexToolInput}});var xde=DH();Object.defineProperty(C,"scanSubagentDir",{enumerable:!0,get:function(){return xde.scanSubagentDir}});Object.defineProperty(C,"extractTaskInfo",{enumerable:!0,get:function(){return xde.extractTaskInfo}});var rB=UM();Object.defineProperty(C,"classifySessionActivity",{enumerable:!0,get:function(){return rB.classifySessionActivity}});Object.defineProperty(C,"detectSessionActivity",{enumerable:!0,get:function(){return rB.detectSessionActivity}});Object.defineProperty(C,"refreshSessionActivityState",{enumerable:!0,get:function(){return rB.refreshSessionActivityState}});Object.defineProperty(C,"SESSION_ACTIVITY_GRACE_PERIOD_MS",{enumerable:!0,get:function(){return rB.SESSION_ACTIVITY_GRACE_PERIOD_MS}});Object.defineProperty(C,"SESSION_ACTIVITY_STALENESS_MS",{enumerable:!0,get:function(){return rB.SESSION_ACTIVITY_STALENESS_MS}});var xc=yx();Object.defineProperty(C,"encodeClaudeWorkspacePath",{enumerable:!0,get:function(){return xc.encodeWorkspacePath}});Object.defineProperty(C,"getClaudeSessionDirectory",{enumerable:!0,get:function(){return xc.getSessionDirectory}});Object.defineProperty(C,"discoverSessionDirectory",{enumerable:!0,get:function(){return xc.discoverSessionDirectory}});Object.defineProperty(C,"findActiveClaudeSession",{enumerable:!0,get:function(){return xc.findActiveSession}});Object.defineProperty(C,"findAllClaudeSessions",{enumerable:!0,get:function(){return xc.findAllSessions}});Object.defineProperty(C,"findSessionsInDirectory",{enumerable:!0,get:function(){return xc.findSessionsInDirectory}});Object.defineProperty(C,"findSessionFilesWithStats",{enumerable:!0,get:function(){return xc.findSessionFilesWithStats}});Object.defineProperty(C,"findSubdirectorySessionDirs",{enumerable:!0,get:function(){return xc.findSubdirectorySessionDirs}});Object.defineProperty(C,"getMostRecentlyActiveSessionDir",{enumerable:!0,get:function(){return xc.getMostRecentlyActiveSessionDir}});Object.defineProperty(C,"decodeEncodedPath",{enumerable:!0,get:function(){return xc.decodeEncodedPath}});Object.defineProperty(C,"getAllClaudeProjectFolders",{enumerable:!0,get:function(){return xc.getAllProjectFolders}});Object.defineProperty(C,"resolveWorktreeMainRepo",{enumerable:!0,get:function(){return xc.resolveWorktreeMainRepo}});Object.defineProperty(C,"discoverWorktreeSiblings",{enumerable:!0,get:function(){return xc.discoverWorktreeSiblings}});Object.defineProperty(C,"findAllSessionsWithWorktrees",{enumerable:!0,get:function(){return xc.findAllSessionsWithWorktrees}});var Get=Oae();Object.defineProperty(C,"scanSubagentTraces",{enumerable:!0,get:function(){return Get.scanSubagentTraces}});var Vet=vH();Object.defineProperty(C,"parseMcpToolName",{enumerable:!0,get:function(){return Vet.parseMcpToolName}});var Ket=x6();Object.defineProperty(C,"readCodexHistory",{enumerable:!0,get:function(){return Ket.readCodexHistory}});var _N=ox();Object.defineProperty(C,"listSessionPreviews",{enumerable:!0,get:function(){return _N.listSessionPreviews}});Object.defineProperty(C,"listSessionPreviewsAsync",{enumerable:!0,get:function(){return _N.listSessionPreviewsAsync}});Object.defineProperty(C,"readSessionPreview",{enumerable:!0,get:function(){return _N.readSessionPreview}});Object.defineProperty(C,"readSessionPreviewAsync",{enumerable:!0,get:function(){return _N.readSessionPreviewAsync}});var bN=Mae();Object.defineProperty(C,"parseDebugLog",{enumerable:!0,get:function(){return bN.parseDebugLog}});Object.defineProperty(C,"filterByLevel",{enumerable:!0,get:function(){return bN.filterByLevel}});Object.defineProperty(C,"collapseDuplicates",{enumerable:!0,get:function(){return bN.collapseDuplicates}});Object.defineProperty(C,"discoverDebugLogs",{enumerable:!0,get:function(){return bN.discoverDebugLogs}});var Yet=Bx();Object.defineProperty(C,"OpenCodeDatabase",{enumerable:!0,get:function(){return Yet.OpenCodeDatabase}});var Jet=zH();Object.defineProperty(C,"CodexDatabase",{enumerable:!0,get:function(){return Jet.CodexDatabase}});var Wet=Qae();Object.defineProperty(C,"searchSessions",{enumerable:!0,get:function(){return Wet.searchSessions}});var Xet=Nae();Object.defineProperty(C,"FilterEngine",{enumerable:!0,get:function(){return Xet.FilterEngine}});var ett=$ae();Object.defineProperty(C,"composeContext",{enumerable:!0,get:function(){return ett.composeContext}});var SN=px();Object.defineProperty(C,"buildSessionContextSnapshot",{enumerable:!0,get:function(){return SN.buildSessionContextSnapshot}});Object.defineProperty(C,"calculateSessionContextPressure",{enumerable:!0,get:function(){return SN.calculateSessionContextPressure}});Object.defineProperty(C,"createSessionContextProjector",{enumerable:!0,get:function(){return SN.createSessionContextProjector}});Object.defineProperty(C,"readSessionContextSnapshot",{enumerable:!0,get:function(){return SN.readSessionContextSnapshot}});var oB=Uae();Object.defineProperty(C,"assistantTurnEventsFromSessionEvents",{enumerable:!0,get:function(){return oB.assistantTurnEventsFromSessionEvents}});Object.defineProperty(C,"extractTurnSubagents",{enumerable:!0,get:function(){return oB.extractTurnSubagents}});Object.defineProperty(C,"isAssistantTurnSubagentTool",{enumerable:!0,get:function(){return oB.isAssistantTurnSubagentTool}});Object.defineProperty(C,"reasoningSummary",{enumerable:!0,get:function(){return oB.reasoningSummary}});Object.defineProperty(C,"segmentAssistantTurn",{enumerable:!0,get:function(){return oB.segmentAssistantTurn}});var Nq=eR();Object.defineProperty(C,"PlanExtractor",{enumerable:!0,get:function(){return Nq.PlanExtractor}});Object.defineProperty(C,"parsePlanMarkdownShared",{enumerable:!0,get:function(){return Nq.parsePlanMarkdown}});Object.defineProperty(C,"extractProposedPlanShared",{enumerable:!0,get:function(){return Nq.extractProposedPlan}});var ttt=Lae();Object.defineProperty(C,"parseChangelog",{enumerable:!0,get:function(){return ttt.parseChangelog}});var Bde=Xae();Object.defineProperty(C,"createWatcher",{enumerable:!0,get:function(){return Bde.createWatcher}});Object.defineProperty(C,"resolveSessionPath",{enumerable:!0,get:function(){return Bde.resolveSessionPath}});var ntt=rR();Object.defineProperty(C,"toFollowEvents",{enumerable:!0,get:function(){return ntt.toFollowEvents}});var rtt=U6();Object.defineProperty(C,"createJsonlTail",{enumerable:!0,get:function(){return rtt.createJsonlTail}});var iB=iC();Object.defineProperty(C,"addLocalDays",{enumerable:!0,get:function(){return iB.addLocalDays}});Object.defineProperty(C,"formatDurationMs",{enumerable:!0,get:function(){return iB.formatDurationMs}});Object.defineProperty(C,"formatLocalDateKey",{enumerable:!0,get:function(){return iB.formatLocalDateKey}});Object.defineProperty(C,"formatTokenCount",{enumerable:!0,get:function(){return iB.formatTokenCount}});Object.defineProperty(C,"parseLocalDateKey",{enumerable:!0,get:function(){return iB.parseLocalDateKey}});var ott=K_();Object.defineProperty(C,"formatToolSummary",{enumerable:!0,get:function(){return ott.formatToolSummary}});var gb=oR();Object.defineProperty(C,"isHardNoise",{enumerable:!0,get:function(){return gb.isHardNoise}});Object.defineProperty(C,"isHardNoiseFollowEvent",{enumerable:!0,get:function(){return gb.isHardNoiseFollowEvent}});Object.defineProperty(C,"getSoftNoiseReason",{enumerable:!0,get:function(){return gb.getSoftNoiseReason}});Object.defineProperty(C,"classifyMessage",{enumerable:!0,get:function(){return gb.classifyMessage}});Object.defineProperty(C,"classifyFollowEvent",{enumerable:!0,get:function(){return gb.classifyFollowEvent}});Object.defineProperty(C,"shouldMergeWithPrevious",{enumerable:!0,get:function(){return gb.shouldMergeWithPrevious}});Object.defineProperty(C,"classifyNoise",{enumerable:!0,get:function(){return gb.classifyNoise}});var $q=Y6();Object.defineProperty(C,"formatSessionText",{enumerable:!0,get:function(){return $q.formatSessionText}});Object.defineProperty(C,"formatSessionMarkdown",{enumerable:!0,get:function(){return $q.formatSessionMarkdown}});Object.defineProperty(C,"formatSessionJson",{enumerable:!0,get:function(){return $q.formatSessionJson}});var jq=nue();Object.defineProperty(C,"highlightEvent",{enumerable:!0,get:function(){return jq.highlight}});Object.defineProperty(C,"clearHighlightCache",{enumerable:!0,get:function(){return jq.clearHighlightCache}});Object.defineProperty(C,"HIGHLIGHT_CSS",{enumerable:!0,get:function(){return jq.HIGHLIGHT_CSS}});var zq=rue();Object.defineProperty(C,"ALL_PHRASES",{enumerable:!0,get:function(){return zq.ALL_PHRASES}});Object.defineProperty(C,"PHRASE_CATEGORIES",{enumerable:!0,get:function(){return zq.PHRASE_CATEGORIES}});Object.defineProperty(C,"getRandomPhrase",{enumerable:!0,get:function(){return zq.getRandomPhrase}});var Ode=J_();Object.defineProperty(C,"EventAggregator",{enumerable:!0,get:function(){return Ode.EventAggregator}});Object.defineProperty(C,"parseTodoDependencies",{enumerable:!0,get:function(){return Ode.parseTodoDependencies}});var itt=iue();Object.defineProperty(C,"SessionMonitor",{enumerable:!0,get:function(){return itt.SessionMonitor}});var Ab=uue();Object.defineProperty(C,"saveSnapshot",{enumerable:!0,get:function(){return Ab.saveSnapshot}});Object.defineProperty(C,"loadSnapshot",{enumerable:!0,get:function(){return Ab.loadSnapshot}});Object.defineProperty(C,"deleteSnapshot",{enumerable:!0,get:function(){return Ab.deleteSnapshot}});Object.defineProperty(C,"isSnapshotValid",{enumerable:!0,get:function(){return Ab.isSnapshotValid}});Object.defineProperty(C,"pruneSnapshots",{enumerable:!0,get:function(){return Ab.pruneSnapshots}});Object.defineProperty(C,"MAX_SNAPSHOT_FILES",{enumerable:!0,get:function(){return Ab.MAX_SNAPSHOT_FILES}});Object.defineProperty(C,"getSnapshotPath",{enumerable:!0,get:function(){return Ab.getSnapshotPath}});var sB=due();Object.defineProperty(C,"ERROR_HISTORY_SCHEMA_VERSION",{enumerable:!0,get:function(){return sB.ERROR_HISTORY_SCHEMA_VERSION}});Object.defineProperty(C,"MAX_ERROR_HISTORY_SESSIONS",{enumerable:!0,get:function(){return sB.MAX_ERROR_HISTORY_SESSIONS}});Object.defineProperty(C,"appendErrorHistory",{enumerable:!0,get:function(){return sB.appendErrorHistory}});Object.defineProperty(C,"getTopFailingTools",{enumerable:!0,get:function(){return sB.getTopFailingTools}});Object.defineProperty(C,"readErrorHistory",{enumerable:!0,get:function(){return sB.readErrorHistory}});var stt=kL();Object.defineProperty(C,"FrequencyTracker",{enumerable:!0,get:function(){return stt.FrequencyTracker}});var att=RL();Object.defineProperty(C,"HeatmapTracker",{enumerable:!0,get:function(){return att.HeatmapTracker}});var utt=QL();Object.defineProperty(C,"PatternExtractor",{enumerable:!0,get:function(){return utt.PatternExtractor}});var kde=fue();Object.defineProperty(C,"calculateQualityTrend",{enumerable:!0,get:function(){return kde.calculateQualityTrend}});Object.defineProperty(C,"scoreSessionQuality",{enumerable:!0,get:function(){return kde.scoreSessionQuality}});var ctt=pue();Object.defineProperty(C,"calculateCodeImpact",{enumerable:!0,get:function(){return ctt.calculateCodeImpact}});var Pde=Y_();Object.defineProperty(C,"classifyCostProvenance",{enumerable:!0,get:function(){return Pde.classifyCostProvenance}});Object.defineProperty(C,"describeCostProvenance",{enumerable:!0,get:function(){return Pde.describeCostProvenance}});var Rde=hue();Object.defineProperty(C,"calculateCompactionLedger",{enumerable:!0,get:function(){return Rde.calculateCompactionLedger}});Object.defineProperty(C,"formatCompactionLedger",{enumerable:!0,get:function(){return Rde.formatCompactionLedger}});var EN=Sue();Object.defineProperty(C,"generateHtmlReport",{enumerable:!0,get:function(){return EN.generateHtmlReport}});Object.defineProperty(C,"parseTranscript",{enumerable:!0,get:function(){return EN.parseTranscript}});Object.defineProperty(C,"parseTranscriptFromEvents",{enumerable:!0,get:function(){return EN.parseTranscriptFromEvents}});Object.defineProperty(C,"openInBrowser",{enumerable:!0,get:function(){return EN.openInBrowser}});var Mde=$x();Object.defineProperty(C,"readActiveCredentials",{enumerable:!0,get:function(){return Mde.readActiveCredentials}});Object.defineProperty(C,"writeActiveCredentials",{enumerable:!0,get:function(){return Mde.writeActiveCredentials}});var Qde=jx();Object.defineProperty(C,"readClaudeMaxCredentials",{enumerable:!0,get:function(){return Qde.readClaudeMaxCredentials}});Object.defineProperty(C,"readClaudeMaxAccessTokenSync",{enumerable:!0,get:function(){return Qde.readClaudeMaxAccessTokenSync}});var ltt=Jue();Object.defineProperty(C,"ensureDefaultAccounts",{enumerable:!0,get:function(){return ltt.ensureDefaultAccounts}});var Tl=Iy();Object.defineProperty(C,"readAccountRegistry",{enumerable:!0,get:function(){return Tl.readAccountRegistry}});Object.defineProperty(C,"writeAccountRegistry",{enumerable:!0,get:function(){return Tl.writeAccountRegistry}});Object.defineProperty(C,"readActiveClaudeAccount",{enumerable:!0,get:function(){return Tl.readActiveClaudeAccount}});Object.defineProperty(C,"addCurrentAccount",{enumerable:!0,get:function(){return Tl.addCurrentAccount}});Object.defineProperty(C,"switchToAccount",{enumerable:!0,get:function(){return Tl.switchToAccount}});Object.defineProperty(C,"resolveActiveClaudeHome",{enumerable:!0,get:function(){return Tl.resolveActiveClaudeHome}});Object.defineProperty(C,"applyActiveClaudeToLiveHome",{enumerable:!0,get:function(){return Tl.applyActiveClaudeToLiveHome}});Object.defineProperty(C,"reconcileClaudeAuthState",{enumerable:!0,get:function(){return Tl.reconcileClaudeAuthState}});Object.defineProperty(C,"removeAccount",{enumerable:!0,get:function(){return Tl.removeAccount}});Object.defineProperty(C,"listAccounts",{enumerable:!0,get:function(){return Tl.listAccounts}});Object.defineProperty(C,"getActiveAccount",{enumerable:!0,get:function(){return Tl.getActiveAccount}});Object.defineProperty(C,"resolveActiveClaudeAccount",{enumerable:!0,get:function(){return Tl.resolveActiveClaudeAccount}});Object.defineProperty(C,"isMultiAccountEnabled",{enumerable:!0,get:function(){return Tl.isMultiAccountEnabled}});var th=_3();Object.defineProperty(C,"beginAccountLogin",{enumerable:!0,get:function(){return th.beginAccountLogin}});Object.defineProperty(C,"getAccountLoginStatus",{enumerable:!0,get:function(){return th.getAccountLoginStatus}});Object.defineProperty(C,"getAccountLoginStatusAsync",{enumerable:!0,get:function(){return th.getAccountLoginStatusAsync}});Object.defineProperty(C,"finalizeAccountLogin",{enumerable:!0,get:function(){return th.finalizeAccountLogin}});Object.defineProperty(C,"finalizeAccountLoginAsync",{enumerable:!0,get:function(){return th.finalizeAccountLoginAsync}});Object.defineProperty(C,"spawnAccountLogin",{enumerable:!0,get:function(){return th.spawnAccountLogin}});Object.defineProperty(C,"switchAccount",{enumerable:!0,get:function(){return th.switchAccount}});Object.defineProperty(C,"switchAccountAsync",{enumerable:!0,get:function(){return th.switchAccountAsync}});Object.defineProperty(C,"listAllAccounts",{enumerable:!0,get:function(){return th.listAllAccounts}});Object.defineProperty(C,"resolveClaudeLoginCommand",{enumerable:!0,get:function(){return th.resolveClaudeLoginCommand}});var $g=Hm();Object.defineProperty(C,"getAccountsDir",{enumerable:!0,get:function(){return $g.getAccountsDir}});Object.defineProperty(C,"readSavedAccountRegistry",{enumerable:!0,get:function(){return $g.readSavedAccountRegistry}});Object.defineProperty(C,"writeSavedAccountRegistry",{enumerable:!0,get:function(){return $g.writeSavedAccountRegistry}});Object.defineProperty(C,"listSavedAccountProfiles",{enumerable:!0,get:function(){return $g.listSavedAccountProfiles}});Object.defineProperty(C,"getActiveSavedAccount",{enumerable:!0,get:function(){return $g.getActiveSavedAccount}});Object.defineProperty(C,"upsertSavedAccountProfile",{enumerable:!0,get:function(){return $g.upsertSavedAccountProfile}});Object.defineProperty(C,"setActiveSavedAccount",{enumerable:!0,get:function(){return $g.setActiveSavedAccount}});Object.defineProperty(C,"replaceSavedAccountProfiles",{enumerable:!0,get:function(){return $g.replaceSavedAccountProfiles}});Object.defineProperty(C,"removeSavedAccountProfile",{enumerable:!0,get:function(){return $g.removeSavedAccountProfile}});var dtt=Hm();Object.defineProperty(C,"ACCOUNT_PROVIDER_IDS",{enumerable:!0,get:function(){return dtt.ACCOUNT_PROVIDER_IDS}});var ftt=Fx();Object.defineProperty(C,"getActiveAccountStatus",{enumerable:!0,get:function(){return ftt.getActiveAccountStatus}});var ptt=qx();Object.defineProperty(C,"onAccountsChanged",{enumerable:!0,get:function(){return ptt.onAccountsChanged}});var FC=Nx();Object.defineProperty(C,"getClaudeProfilesDir",{enumerable:!0,get:function(){return FC.getClaudeProfilesDir}});Object.defineProperty(C,"getClaudeProfileHome",{enumerable:!0,get:function(){return FC.getClaudeProfileHome}});Object.defineProperty(C,"claudeKeychainSuffix",{enumerable:!0,get:function(){return FC.claudeKeychainSuffix}});Object.defineProperty(C,"claudeKeychainService",{enumerable:!0,get:function(){return FC.claudeKeychainService}});Object.defineProperty(C,"isClaudeProfileAuthenticated",{enumerable:!0,get:function(){return FC.isClaudeProfileAuthenticated}});Object.defineProperty(C,"readClaudeProfileIdentity",{enumerable:!0,get:function(){return FC.readClaudeProfileIdentity}});var mu=Sc();Object.defineProperty(C,"getCodexProfilesDir",{enumerable:!0,get:function(){return mu.getCodexProfilesDir}});Object.defineProperty(C,"getCodexProfileHome",{enumerable:!0,get:function(){return mu.getCodexProfileHome}});Object.defineProperty(C,"getCodexMonitoringHomes",{enumerable:!0,get:function(){return mu.getCodexMonitoringHomes}});Object.defineProperty(C,"getSystemCodexHome",{enumerable:!0,get:function(){return mu.getSystemCodexHome}});Object.defineProperty(C,"listCodexAccounts",{enumerable:!0,get:function(){return mu.listCodexAccounts}});Object.defineProperty(C,"getActiveCodexAccount",{enumerable:!0,get:function(){return mu.getActiveCodexAccount}});Object.defineProperty(C,"resolveActiveCodexAccount",{enumerable:!0,get:function(){return mu.resolveActiveCodexAccount}});Object.defineProperty(C,"resolveSidekickCodexHome",{enumerable:!0,get:function(){return mu.resolveSidekickCodexHome}});Object.defineProperty(C,"getCodexExecutionEnv",{enumerable:!0,get:function(){return mu.getCodexExecutionEnv}});Object.defineProperty(C,"prepareCodexAccount",{enumerable:!0,get:function(){return mu.prepareCodexAccount}});Object.defineProperty(C,"prepareCodexAccountAsync",{enumerable:!0,get:function(){return mu.prepareCodexAccountAsync}});Object.defineProperty(C,"finalizeCodexAccount",{enumerable:!0,get:function(){return mu.finalizeCodexAccount}});Object.defineProperty(C,"finalizeCodexAccountAsync",{enumerable:!0,get:function(){return mu.finalizeCodexAccountAsync}});Object.defineProperty(C,"switchToCodexAccount",{enumerable:!0,get:function(){return mu.switchToCodexAccount}});Object.defineProperty(C,"switchToCodexAccountAsync",{enumerable:!0,get:function(){return mu.switchToCodexAccountAsync}});Object.defineProperty(C,"removeCodexAccount",{enumerable:!0,get:function(){return mu.removeCodexAccount}});var UC=Ace();Object.defineProperty(C,"setTerminalActiveProfile",{enumerable:!0,get:function(){return UC.setTerminalActiveProfile}});Object.defineProperty(C,"installShellHook",{enumerable:!0,get:function(){return UC.installShellHook}});Object.defineProperty(C,"uninstallShellHook",{enumerable:!0,get:function(){return UC.uninstallShellHook}});Object.defineProperty(C,"isShellHookInstalled",{enumerable:!0,get:function(){return UC.isShellHookInstalled}});Object.defineProperty(C,"writeLauncher",{enumerable:!0,get:function(){return UC.writeLauncher}});Object.defineProperty(C,"removeLauncher",{enumerable:!0,get:function(){return UC.removeLauncher}});var Fq=xce();Object.defineProperty(C,"DEFAULT_AUTO_SWITCH_CONFIG",{enumerable:!0,get:function(){return Fq.DEFAULT_AUTO_SWITCH_CONFIG}});Object.defineProperty(C,"decideAutoSwitch",{enumerable:!0,get:function(){return Fq.decideAutoSwitch}});Object.defineProperty(C,"AutoSwitchController",{enumerable:!0,get:function(){return Fq.AutoSwitchController}});var LC=vd();Object.defineProperty(C,"FIVE_HOUR_WINDOW_MS",{enumerable:!0,get:function(){return LC.FIVE_HOUR_WINDOW_MS}});Object.defineProperty(C,"QUOTA_PROVIDER_IDS",{enumerable:!0,get:function(){return LC.QUOTA_PROVIDER_IDS}});Object.defineProperty(C,"SEVEN_DAY_WINDOW_MS",{enumerable:!0,get:function(){return LC.SEVEN_DAY_WINDOW_MS}});Object.defineProperty(C,"fetchQuota",{enumerable:!0,get:function(){return LC.fetchQuota}});Object.defineProperty(C,"projectQuotaWindow",{enumerable:!0,get:function(){return LC.projectQuotaWindow}});Object.defineProperty(C,"withQuotaProjections",{enumerable:!0,get:function(){return LC.withQuotaProjections}});var mtt=UQ();Object.defineProperty(C,"describeQuotaFailure",{enumerable:!0,get:function(){return mtt.describeQuotaFailure}});var htt=Bce();Object.defineProperty(C,"QuotaPoller",{enumerable:!0,get:function(){return htt.QuotaPoller}});var Nde=Rg();Object.defineProperty(C,"readQuotaSnapshot",{enumerable:!0,get:function(){return Nde.readQuotaSnapshot}});Object.defineProperty(C,"writeQuotaSnapshot",{enumerable:!0,get:function(){return Nde.writeQuotaSnapshot}});var gtt=Xce();Object.defineProperty(C,"resolveQuota",{enumerable:!0,get:function(){return gtt.resolveQuota}});var CN=vd();Object.defineProperty(C,"classifyQuotaFreshness",{enumerable:!0,get:function(){return CN.classifyQuotaFreshness}});Object.defineProperty(C,"formatQuotaAge",{enumerable:!0,get:function(){return CN.formatQuotaAge}});Object.defineProperty(C,"QUOTA_AGING_MAX_AGE_MS",{enumerable:!0,get:function(){return CN.QUOTA_AGING_MAX_AGE_MS}});Object.defineProperty(C,"QUOTA_FRESH_MAX_AGE_MS",{enumerable:!0,get:function(){return CN.QUOTA_FRESH_MAX_AGE_MS}});var Uq=tle();Object.defineProperty(C,"DEFAULT_QUOTA_THRESHOLDS",{enumerable:!0,get:function(){return Uq.DEFAULT_QUOTA_THRESHOLDS}});Object.defineProperty(C,"describeQuotaThresholdAlert",{enumerable:!0,get:function(){return Uq.describeQuotaThresholdAlert}});Object.defineProperty(C,"evaluateQuotaThresholds",{enumerable:!0,get:function(){return Uq.evaluateQuotaThresholds}});var $de=eq();Object.defineProperty(C,"parseClaudeStatuslinePayload",{enumerable:!0,get:function(){return $de.parseClaudeStatuslinePayload}});Object.defineProperty(C,"quotaFromStatuslinePayload",{enumerable:!0,get:function(){return $de.quotaFromStatuslinePayload}});var aB=JQ();Object.defineProperty(C,"appendQuotaHistorySample",{enumerable:!0,get:function(){return aB.appendQuotaHistorySample}});Object.defineProperty(C,"readQuotaHistoryRange",{enumerable:!0,get:function(){return aB.readQuotaHistoryRange}});Object.defineProperty(C,"readQuotaHistoryDailyBuckets",{enumerable:!0,get:function(){return aB.readQuotaHistoryDailyBuckets}});Object.defineProperty(C,"pruneQuotaHistory",{enumerable:!0,get:function(){return aB.pruneQuotaHistory}});Object.defineProperty(C,"getWorkspaceIdFromPath",{enumerable:!0,get:function(){return aB.getWorkspaceIdFromPath}});var HC=qQ();Object.defineProperty(C,"fetchCodexResetCreditsFromApi",{enumerable:!0,get:function(){return HC.fetchCodexResetCreditsFromApi}});Object.defineProperty(C,"fetchCodexQuotaFromApi",{enumerable:!0,get:function(){return HC.fetchCodexQuotaFromApi}});Object.defineProperty(C,"quotaFromCodexRateLimits",{enumerable:!0,get:function(){return HC.quotaFromCodexRateLimits}});Object.defineProperty(C,"readLatestCodexQuotaFromRollouts",{enumerable:!0,get:function(){return HC.readLatestCodexQuotaFromRollouts}});Object.defineProperty(C,"resolveCodexQuota",{enumerable:!0,get:function(){return HC.resolveCodexQuota}});Object.defineProperty(C,"resolveCodexQuotaFromLocalSources",{enumerable:!0,get:function(){return HC.resolveCodexQuotaFromLocalSources}});var Att=uq();Object.defineProperty(C,"CodexQuotaWatcher",{enumerable:!0,get:function(){return Att.CodexQuotaWatcher}});var IN=G3();Object.defineProperty(C,"fetchZaiQuotaFromApi",{enumerable:!0,get:function(){return IN.fetchZaiQuotaFromApi}});Object.defineProperty(C,"quotaStateFromZaiQuotaLimitPayload",{enumerable:!0,get:function(){return IN.quotaStateFromZaiQuotaLimitPayload}});Object.defineProperty(C,"readZaiCredentials",{enumerable:!0,get:function(){return IN.readZaiCredentials}});Object.defineProperty(C,"resolveZaiQuota",{enumerable:!0,get:function(){return IN.resolveZaiQuota}});var ytt=Sle();Object.defineProperty(C,"MultiProviderQuotaService",{enumerable:!0,get:function(){return ytt.MultiProviderQuotaService}});var vtt=Ele();Object.defineProperty(C,"RUNTIME_QUOTA_PROVIDER_IDS",{enumerable:!0,get:function(){return vtt.RUNTIME_QUOTA_PROVIDER_IDS}});var jde=rx();Object.defineProperty(C,"BurnRateCalculator",{enumerable:!0,get:function(){return jde.BurnRateCalculator}});Object.defineProperty(C,"estimateTimeToQuota",{enumerable:!0,get:function(){return jde.estimateTimeToQuota}});var zde=mq();Object.defineProperty(C,"formatStatusline",{enumerable:!0,get:function(){return zde.formatStatusline}});Object.defineProperty(C,"selectStatuslineAccount",{enumerable:!0,get:function(){return zde.selectStatuslineAccount}});var Lq=Fp();Object.defineProperty(C,"getModelContextWindowSize",{enumerable:!0,get:function(){return Lq.getModelContextWindowSize}});Object.defineProperty(C,"resolveModelContextWindow",{enumerable:!0,get:function(){return Lq.resolveModelContextWindow}});Object.defineProperty(C,"DEFAULT_CONTEXT_WINDOW",{enumerable:!0,get:function(){return Lq.DEFAULT_CONTEXT_WINDOW}});var Bc=OT();Object.defineProperty(C,"parseModelId",{enumerable:!0,get:function(){return Bc.parseModelId}});Object.defineProperty(C,"getModelPricing",{enumerable:!0,get:function(){return Bc.getModelPricing}});Object.defineProperty(C,"resolveModelPricing",{enumerable:!0,get:function(){return Bc.resolveModelPricing}});Object.defineProperty(C,"getModelInfo",{enumerable:!0,get:function(){return Bc.getModelInfo}});Object.defineProperty(C,"calculateCost",{enumerable:!0,get:function(){return Bc.calculateCost}});Object.defineProperty(C,"calculateCostWithPricing",{enumerable:!0,get:function(){return Bc.calculateCostWithPricing}});Object.defineProperty(C,"calculateCostWithProvenance",{enumerable:!0,get:function(){return Bc.calculateCostWithProvenance}});Object.defineProperty(C,"mergeCostSources",{enumerable:!0,get:function(){return Bc.mergeCostSources}});Object.defineProperty(C,"shortModelName",{enumerable:!0,get:function(){return Bc.shortModelName}});Object.defineProperty(C,"getModelDisplayInfo",{enumerable:!0,get:function(){return Bc.getModelDisplayInfo}});Object.defineProperty(C,"compareModelIds",{enumerable:!0,get:function(){return Bc.compareModelIds}});Object.defineProperty(C,"sortModelIds",{enumerable:!0,get:function(){return Bc.sortModelIds}});Object.defineProperty(C,"formatCost",{enumerable:!0,get:function(){return Bc.formatCost}});Object.defineProperty(C,"MODEL_PROVIDER_IDS",{enumerable:!0,get:function(){return Bc.MODEL_PROVIDER_IDS}});var uB=wle();Object.defineProperty(C,"exportResolvedModelCatalog",{enumerable:!0,get:function(){return uB.exportResolvedModelCatalog}});Object.defineProperty(C,"importResolvedModelCatalog",{enumerable:!0,get:function(){return uB.importResolvedModelCatalog}});Object.defineProperty(C,"registerModelAlias",{enumerable:!0,get:function(){return uB.registerModelAlias}});Object.defineProperty(C,"resolveModelAlias",{enumerable:!0,get:function(){return uB.resolveModelAlias}});Object.defineProperty(C,"RESOLVED_MODEL_CATALOG_SCHEMA_VERSION",{enumerable:!0,get:function(){return uB.RESOLVED_MODEL_CATALOG_SCHEMA_VERSION}});var wN=yq();Object.defineProperty(C,"hydratePricingCatalog",{enumerable:!0,get:function(){return wN.hydratePricingCatalog}});Object.defineProperty(C,"normalizeLiteLlmCatalog",{enumerable:!0,get:function(){return wN.normalizeLiteLlmCatalog}});Object.defineProperty(C,"normalizeLiteLlmContextWindows",{enumerable:!0,get:function(){return wN.normalizeLiteLlmContextWindows}});Object.defineProperty(C,"LITELLM_CATALOG_URL",{enumerable:!0,get:function(){return wN.LITELLM_CATALOG_URL}});var Hq=fQ();Object.defineProperty(C,"loadObservedContextWindows",{enumerable:!0,get:function(){return Hq.loadObservedContextWindows}});Object.defineProperty(C,"recordObservedContextWindow",{enumerable:!0,get:function(){return Hq.recordObservedContextWindow}});Object.defineProperty(C,"getObservedContextWindowPath",{enumerable:!0,get:function(){return Hq.getObservedContextWindowPath}});var _tt=kle();Object.defineProperty(C,"extractTokenUsage",{enumerable:!0,get:function(){return _tt.extractTokenUsage}});var qq=Yx();Object.defineProperty(C,"extractUrls",{enumerable:!0,get:function(){return qq.extractUrls}});Object.defineProperty(C,"extractFilePaths",{enumerable:!0,get:function(){return qq.extractFilePaths}});Object.defineProperty(C,"extractCommands",{enumerable:!0,get:function(){return qq.extractCommands}});var Fde=bq();Object.defineProperty(C,"readClaudeAssets",{enumerable:!0,get:function(){return Fde.readClaudeAssets}});Object.defineProperty(C,"claudeSessions",{enumerable:!0,get:function(){return Fde.claudeSessions}});var Ude=Eq();Object.defineProperty(C,"readCodexAssets",{enumerable:!0,get:function(){return Ude.readCodexAssets}});Object.defineProperty(C,"codexSessions",{enumerable:!0,get:function(){return Ude.codexSessions}});var btt=Hle();Object.defineProperty(C,"gatherAssetsForCwd",{enumerable:!0,get:function(){return btt.gatherAssetsForCwd}});var Lde=lR();Object.defineProperty(C,"categorizeError",{enumerable:!0,get:function(){return Lde.categorizeError}});Object.defineProperty(C,"extractErrorMessage",{enumerable:!0,get:function(){return Lde.extractErrorMessage}});var Zq=Vle();Object.defineProperty(C,"extractToolCall",{enumerable:!0,get:function(){return Zq.extractToolCall}});Object.defineProperty(C,"extractToolCalls",{enumerable:!0,get:function(){return Zq.extractToolCalls}});Object.defineProperty(C,"ToolCallTracker",{enumerable:!0,get:function(){return Zq.ToolCallTracker}});var cB=QM();Object.defineProperty(C,"messageUsageSchema",{enumerable:!0,get:function(){return cB.messageUsageSchema}});Object.defineProperty(C,"sessionMessageSchema",{enumerable:!0,get:function(){return cB.sessionMessageSchema}});Object.defineProperty(C,"sessionEventSchema",{enumerable:!0,get:function(){return cB.sessionEventSchema}});Object.defineProperty(C,"permissionModeSchema",{enumerable:!0,get:function(){return cB.permissionModeSchema}});Object.defineProperty(C,"extractSessionEvents",{enumerable:!0,get:function(){return cB.extractSessionEvents}});var Fu=Yle();Object.defineProperty(C,"quotaWindowSchema",{enumerable:!0,get:function(){return Fu.quotaWindowSchema}});Object.defineProperty(C,"quotaStateSchema",{enumerable:!0,get:function(){return Fu.quotaStateSchema}});Object.defineProperty(C,"quotaFailureKindSchema",{enumerable:!0,get:function(){return Fu.quotaFailureKindSchema}});Object.defineProperty(C,"quotaProviderIdSchema",{enumerable:!0,get:function(){return Fu.quotaProviderIdSchema}});Object.defineProperty(C,"quotaSourceSchema",{enumerable:!0,get:function(){return Fu.quotaSourceSchema}});Object.defineProperty(C,"codexResetCreditSchema",{enumerable:!0,get:function(){return Fu.codexResetCreditSchema}});Object.defineProperty(C,"codexResetCreditsSnapshotSchema",{enumerable:!0,get:function(){return Fu.codexResetCreditsSnapshotSchema}});Object.defineProperty(C,"peakHoursStateSchema",{enumerable:!0,get:function(){return Fu.peakHoursStateSchema}});Object.defineProperty(C,"quotaFailureDescriptorSchema",{enumerable:!0,get:function(){return Fu.quotaFailureDescriptorSchema}});Object.defineProperty(C,"runtimeQuotaProviderSchema",{enumerable:!0,get:function(){return Fu.runtimeQuotaProviderSchema}});Object.defineProperty(C,"providerQuotaStateSchema",{enumerable:!0,get:function(){return Fu.providerQuotaStateSchema}});Object.defineProperty(C,"claudeProviderQuotaStateSchema",{enumerable:!0,get:function(){return Fu.claudeProviderQuotaStateSchema}});Object.defineProperty(C,"codexProviderQuotaStateSchema",{enumerable:!0,get:function(){return Fu.codexProviderQuotaStateSchema}});Object.defineProperty(C,"zaiProviderQuotaStateSchema",{enumerable:!0,get:function(){return Fu.zaiProviderQuotaStateSchema}});Object.defineProperty(C,"providerQuotaMapSchema",{enumerable:!0,get:function(){return Fu.providerQuotaMapSchema}});var Gq=Jle();Object.defineProperty(C,"quotaHistoryRuntimeProviderSchema",{enumerable:!0,get:function(){return Gq.quotaHistoryRuntimeProviderSchema}});Object.defineProperty(C,"quotaHistorySampleSchema",{enumerable:!0,get:function(){return Gq.quotaHistorySampleSchema}});Object.defineProperty(C,"quotaHistoryDailyBucketSchema",{enumerable:!0,get:function(){return Gq.quotaHistoryDailyBucketSchema}});var Hde=Wle();Object.defineProperty(C,"activeProviderAccountStatusSchema",{enumerable:!0,get:function(){return Hde.activeProviderAccountStatusSchema}});Object.defineProperty(C,"activeAccountStatusSchema",{enumerable:!0,get:function(){return Hde.activeAccountStatusSchema}});var yb=Xle();Object.defineProperty(C,"accountProviderIdSchema",{enumerable:!0,get:function(){return yb.accountProviderIdSchema}});Object.defineProperty(C,"accountManagerResultSchema",{enumerable:!0,get:function(){return yb.accountManagerResultSchema}});Object.defineProperty(C,"beginAccountLoginResultSchema",{enumerable:!0,get:function(){return yb.beginAccountLoginResultSchema}});Object.defineProperty(C,"accountLoginStatusSchema",{enumerable:!0,get:function(){return yb.accountLoginStatusSchema}});Object.defineProperty(C,"accountEntrySchema",{enumerable:!0,get:function(){return yb.accountEntrySchema}});Object.defineProperty(C,"savedAccountProfileSchema",{enumerable:!0,get:function(){return yb.savedAccountProfileSchema}});Object.defineProperty(C,"listAllAccountsResultSchema",{enumerable:!0,get:function(){return yb.listAllAccountsResultSchema}});var Dd=ede();Object.defineProperty(C,"assistantTurnEventSchema",{enumerable:!0,get:function(){return Dd.assistantTurnEventSchema}});Object.defineProperty(C,"assistantTurnEventTypeSchema",{enumerable:!0,get:function(){return Dd.assistantTurnEventTypeSchema}});Object.defineProperty(C,"assistantTurnNarrationStepSchema",{enumerable:!0,get:function(){return Dd.assistantTurnNarrationStepSchema}});Object.defineProperty(C,"assistantTurnProcessSchema",{enumerable:!0,get:function(){return Dd.assistantTurnProcessSchema}});Object.defineProperty(C,"assistantTurnProcessStepSchema",{enumerable:!0,get:function(){return Dd.assistantTurnProcessStepSchema}});Object.defineProperty(C,"assistantTurnProjectionSchema",{enumerable:!0,get:function(){return Dd.assistantTurnProjectionSchema}});Object.defineProperty(C,"assistantTurnReasoningTimelineItemSchema",{enumerable:!0,get:function(){return Dd.assistantTurnReasoningTimelineItemSchema}});Object.defineProperty(C,"assistantTurnSubagentSchema",{enumerable:!0,get:function(){return Dd.assistantTurnSubagentSchema}});Object.defineProperty(C,"assistantTurnSubagentStatusSchema",{enumerable:!0,get:function(){return Dd.assistantTurnSubagentStatusSchema}});Object.defineProperty(C,"assistantTurnTimelineItemSchema",{enumerable:!0,get:function(){return Dd.assistantTurnTimelineItemSchema}});Object.defineProperty(C,"assistantTurnToolGroupStepSchema",{enumerable:!0,get:function(){return Dd.assistantTurnToolGroupStepSchema}});Object.defineProperty(C,"assistantTurnToolRefSchema",{enumerable:!0,get:function(){return Dd.assistantTurnToolRefSchema}});var Vq=wq();Object.defineProperty(C,"fetchProviderStatus",{enumerable:!0,get:function(){return Vq.fetchProviderStatus}});Object.defineProperty(C,"fetchOpenAIStatus",{enumerable:!0,get:function(){return Vq.fetchOpenAIStatus}});Object.defineProperty(C,"toLegacyProviderStatus",{enumerable:!0,get:function(){return Vq.toLegacyProviderStatus}});var Kq=cde();Object.defineProperty(C,"formatHealthReport",{enumerable:!0,get:function(){return Kq.formatHealthReport}});Object.defineProperty(C,"getSessionDiagnostics",{enumerable:!0,get:function(){return Kq.getSessionDiagnostics}});Object.defineProperty(C,"runDoctor",{enumerable:!0,get:function(){return Kq.runDoctor}});var jg=lq();Object.defineProperty(C,"_resetPeakHoursCache",{enumerable:!0,get:function(){return jg._resetPeakHoursCache}});Object.defineProperty(C,"createPeakHoursNotApplicableState",{enumerable:!0,get:function(){return jg.createPeakHoursNotApplicableState}});Object.defineProperty(C,"DEFAULT_PEAK_HOURS_TIMEOUT_MS",{enumerable:!0,get:function(){return jg.DEFAULT_PEAK_HOURS_TIMEOUT_MS}});Object.defineProperty(C,"fetchPeakHoursStatus",{enumerable:!0,get:function(){return jg.fetchPeakHoursStatus}});Object.defineProperty(C,"getScheduledPeakHoursState",{enumerable:!0,get:function(){return jg.getScheduledPeakHoursState}});Object.defineProperty(C,"isClaudeCodeSessionProvider",{enumerable:!0,get:function(){return jg.isClaudeCodeSessionProvider}});Object.defineProperty(C,"PEAK_HOURS_CACHE_MS",{enumerable:!0,get:function(){return jg.PEAK_HOURS_CACHE_MS}});Object.defineProperty(C,"PEAK_HOURS_DESCRIPTION",{enumerable:!0,get:function(){return jg.PEAK_HOURS_DESCRIPTION}});Object.defineProperty(C,"scopePeakHoursToSessionProvider",{enumerable:!0,get:function(){return jg.scopePeakHoursToSessionProvider}});var Yq=fde();Object.defineProperty(C,"FAILING_TOOL_TREND_ARROWS",{enumerable:!0,get:function(){return Yq.FAILING_TOOL_TREND_ARROWS}});Object.defineProperty(C,"failingToolTrend",{enumerable:!0,get:function(){return Yq.failingToolTrend}});Object.defineProperty(C,"mergeFailingToolWindows",{enumerable:!0,get:function(){return Yq.mergeFailingToolWindows}});var Stt=gde();Object.defineProperty(C,"diagnoseProviderFailure",{enumerable:!0,get:function(){return Stt.diagnoseProviderFailure}});var Ett=lN();Object.defineProperty(C,"fetchProviderServiceStatus",{enumerable:!0,get:function(){return Ett.fetchProviderServiceStatus}})});var Kde=Q(ke=>{"use strict";Object.defineProperty(ke,"__esModule",{value:!0});ke.readSessionPreviewAsync=ke.readSessionPreview=ke.listSessionPreviewsAsync=ke.listSessionPreviews=ke.readCodexHistory=ke.walkRolloutFilesAsync=ke.walkRolloutFiles=ke.findCodexRolloutFile=ke.weekKey=ke.usageBucketKey=ke.summarizeUsageRows=ke.bucketUsage=ke.importSessionHistory=ke.ACTIVE_SESSION_MTIME_THRESHOLD_MS=ke.sessionSummaryFromStats=ke.removeSessionSummary=ke.markFileImported=ke.isFileImported=ke.applySessionSummary=ke.pruneUsageCache=ke.getUsageCacheDir=ke.collectUsageEvents=ke.USAGE_CACHE_VERSION=ke.MAX_USAGE_CACHE_FILES=ke.findActiveBillingBlock=ke.computeBillingBlocks=ke.BILLING_BLOCK_DURATION_MS=ke.writeStateFile=ke.readStateFile=ke.quotaToStateFile=ke.getStateFilePath=ke.billingBlockToStateFile=ke.STATE_FILE_SCHEMA_VERSION=ke.STATE_FILE_NAME=ke.sessionFingerprintParts=ke.fingerprintString=ke.readSessionReportInputs=ke.readSessionFileStats=ke.providerContextSizeFn=ke.firstUserPrompt=ke.computeSessionFileStats=ke.readSessionTranscript=ke.listRecentSessions=ke.getObservedContextWindowPath=ke.recordObservedContextWindow=ke.loadObservedContextWindows=ke.LITELLM_CATALOG_URL=ke.normalizeLiteLlmContextWindows=ke.normalizeLiteLlmCatalog=ke.hydratePricingCatalog=void 0;ke.fetchProviderServiceStatus=ke.fileFingerprintParts=ke.fileFingerprint=ke.observedSessionSourceFromProvider=ke.ObservedSessionCollector=void 0;var DN=yq();Object.defineProperty(ke,"hydratePricingCatalog",{enumerable:!0,get:function(){return DN.hydratePricingCatalog}});Object.defineProperty(ke,"normalizeLiteLlmCatalog",{enumerable:!0,get:function(){return DN.normalizeLiteLlmCatalog}});Object.defineProperty(ke,"normalizeLiteLlmContextWindows",{enumerable:!0,get:function(){return DN.normalizeLiteLlmContextWindows}});Object.defineProperty(ke,"LITELLM_CATALOG_URL",{enumerable:!0,get:function(){return DN.LITELLM_CATALOG_URL}});var Jq=fQ();Object.defineProperty(ke,"loadObservedContextWindows",{enumerable:!0,get:function(){return Jq.loadObservedContextWindows}});Object.defineProperty(ke,"recordObservedContextWindow",{enumerable:!0,get:function(){return Jq.recordObservedContextWindow}});Object.defineProperty(ke,"getObservedContextWindowPath",{enumerable:!0,get:function(){return Jq.getObservedContextWindowPath}});var qde=IL();Object.defineProperty(ke,"listRecentSessions",{enumerable:!0,get:function(){return qde.listRecentSessions}});Object.defineProperty(ke,"readSessionTranscript",{enumerable:!0,get:function(){return qde.readSessionTranscript}});var TN=mg();Object.defineProperty(ke,"computeSessionFileStats",{enumerable:!0,get:function(){return TN.computeSessionFileStats}});Object.defineProperty(ke,"firstUserPrompt",{enumerable:!0,get:function(){return TN.firstUserPrompt}});Object.defineProperty(ke,"providerContextSizeFn",{enumerable:!0,get:function(){return TN.providerContextSizeFn}});Object.defineProperty(ke,"readSessionFileStats",{enumerable:!0,get:function(){return TN.readSessionFileStats}});var Ctt=E4();Object.defineProperty(ke,"readSessionReportInputs",{enumerable:!0,get:function(){return Ctt.readSessionReportInputs}});var Zde=tC();Object.defineProperty(ke,"fingerprintString",{enumerable:!0,get:function(){return Zde.fingerprintString}});Object.defineProperty(ke,"sessionFingerprintParts",{enumerable:!0,get:function(){return Zde.sessionFingerprintParts}});var vb=$M();Object.defineProperty(ke,"STATE_FILE_NAME",{enumerable:!0,get:function(){return vb.STATE_FILE_NAME}});Object.defineProperty(ke,"STATE_FILE_SCHEMA_VERSION",{enumerable:!0,get:function(){return vb.STATE_FILE_SCHEMA_VERSION}});Object.defineProperty(ke,"billingBlockToStateFile",{enumerable:!0,get:function(){return vb.billingBlockToStateFile}});Object.defineProperty(ke,"getStateFilePath",{enumerable:!0,get:function(){return vb.getStateFilePath}});Object.defineProperty(ke,"quotaToStateFile",{enumerable:!0,get:function(){return vb.quotaToStateFile}});Object.defineProperty(ke,"readStateFile",{enumerable:!0,get:function(){return vb.readStateFile}});Object.defineProperty(ke,"writeStateFile",{enumerable:!0,get:function(){return vb.writeStateFile}});var Wq=R4();Object.defineProperty(ke,"BILLING_BLOCK_DURATION_MS",{enumerable:!0,get:function(){return Wq.BILLING_BLOCK_DURATION_MS}});Object.defineProperty(ke,"computeBillingBlocks",{enumerable:!0,get:function(){return Wq.computeBillingBlocks}});Object.defineProperty(ke,"findActiveBillingBlock",{enumerable:!0,get:function(){return Wq.findActiveBillingBlock}});var lB=z4();Object.defineProperty(ke,"MAX_USAGE_CACHE_FILES",{enumerable:!0,get:function(){return lB.MAX_USAGE_CACHE_FILES}});Object.defineProperty(ke,"USAGE_CACHE_VERSION",{enumerable:!0,get:function(){return lB.USAGE_CACHE_VERSION}});Object.defineProperty(ke,"collectUsageEvents",{enumerable:!0,get:function(){return lB.collectUsageEvents}});Object.defineProperty(ke,"getUsageCacheDir",{enumerable:!0,get:function(){return lB.getUsageCacheDir}});Object.defineProperty(ke,"pruneUsageCache",{enumerable:!0,get:function(){return lB.pruneUsageCache}});var dB=FM();Object.defineProperty(ke,"applySessionSummary",{enumerable:!0,get:function(){return dB.applySessionSummary}});Object.defineProperty(ke,"isFileImported",{enumerable:!0,get:function(){return dB.isFileImported}});Object.defineProperty(ke,"markFileImported",{enumerable:!0,get:function(){return dB.markFileImported}});Object.defineProperty(ke,"removeSessionSummary",{enumerable:!0,get:function(){return dB.removeSessionSummary}});Object.defineProperty(ke,"sessionSummaryFromStats",{enumerable:!0,get:function(){return dB.sessionSummaryFromStats}});var Gde=H4();Object.defineProperty(ke,"ACTIVE_SESSION_MTIME_THRESHOLD_MS",{enumerable:!0,get:function(){return Gde.ACTIVE_SESSION_MTIME_THRESHOLD_MS}});Object.defineProperty(ke,"importSessionHistory",{enumerable:!0,get:function(){return Gde.importSessionHistory}});var xN=q4();Object.defineProperty(ke,"bucketUsage",{enumerable:!0,get:function(){return xN.bucketUsage}});Object.defineProperty(ke,"summarizeUsageRows",{enumerable:!0,get:function(){return xN.summarizeUsageRows}});Object.defineProperty(ke,"usageBucketKey",{enumerable:!0,get:function(){return xN.usageBucketKey}});Object.defineProperty(ke,"weekKey",{enumerable:!0,get:function(){return xN.weekKey}});var Itt=AC();Object.defineProperty(ke,"findCodexRolloutFile",{enumerable:!0,get:function(){return Itt.findCodexRolloutFile}});var Vde=wx();Object.defineProperty(ke,"walkRolloutFiles",{enumerable:!0,get:function(){return Vde.walkRolloutFiles}});Object.defineProperty(ke,"walkRolloutFilesAsync",{enumerable:!0,get:function(){return Vde.walkRolloutFilesAsync}});var wtt=x6();Object.defineProperty(ke,"readCodexHistory",{enumerable:!0,get:function(){return wtt.readCodexHistory}});var BN=ox();Object.defineProperty(ke,"listSessionPreviews",{enumerable:!0,get:function(){return BN.listSessionPreviews}});Object.defineProperty(ke,"listSessionPreviewsAsync",{enumerable:!0,get:function(){return BN.listSessionPreviewsAsync}});Object.defineProperty(ke,"readSessionPreview",{enumerable:!0,get:function(){return BN.readSessionPreview}});Object.defineProperty(ke,"readSessionPreviewAsync",{enumerable:!0,get:function(){return BN.readSessionPreviewAsync}});var ON=qM();Object.defineProperty(ke,"ObservedSessionCollector",{enumerable:!0,get:function(){return ON.ObservedSessionCollector}});Object.defineProperty(ke,"observedSessionSourceFromProvider",{enumerable:!0,get:function(){return ON.observedSessionSourceFromProvider}});Object.defineProperty(ke,"fileFingerprint",{enumerable:!0,get:function(){return ON.fileFingerprint}});Object.defineProperty(ke,"fileFingerprintParts",{enumerable:!0,get:function(){return ON.fileFingerprintParts}});var Dtt=lN();Object.defineProperty(ke,"fetchProviderServiceStatus",{enumerable:!0,get:function(){return Dtt.fetchProviderServiceStatus}})});function xtt(t){return t===void 0||t.startsWith("-")?!1:!Ttt.has(t)}function Btt(t=process.argv.slice(2),e=process.env){if(t.includes("--offline"))return!0;let n=e.SIDEKICK_OFFLINE;return n==="1"||n==="true"}function Jde(t){return kN||(kN=(async()=>{(0,PN.loadObservedContextWindows)().catch(()=>{}),xtt(t)&&await Promise.all([(0,PN.hydratePricingCatalog)({offline:Btt()}).catch(()=>{}),(0,Yde.ensureDefaultAccounts)().catch(()=>{})])})(),kN)}var Yde,PN,Ttt,kN,Wde=F(()=>{"use strict";Yde=me(on(),1),PN=me(Kde(),1),Ttt=new Set(["statusline","today","history"]);kN=null});function Xq(){return new QE("--provider <id>","Session provider (default: auto)").choices(["claude-code","opencode","codex","auto"])}function Xde(){return new QE("--provider <id>","Provider to inspect (default: auto)").choices(["claude-code","opencode","codex","zai","auto"])}function efe(){return new QE("--provider <id>","Limit to a single runtime provider: claude, codex, zai (default: all)").choices(["claude","claude-code","codex","zai","z.ai"])}function tfe(){return new QE("--theme <theme>","Color theme").default("dark").choices(["dark","light"])}function nfe(){return new QE("--status <status>","Filter by status (default: all)").choices(["pending","completed","all"])}var rfe=F(()=>{"use strict";mL()});function ofe(t){return`Error: ${t instanceof Error?t.message:String(t)}
|
|
748
|
+
`)}});var fde=Q($C=>{"use strict";Object.defineProperty($C,"__esModule",{value:!0});$C.FAILING_TOOL_TREND_ARROWS=void 0;$C.failingToolTrend=dde;$C.mergeFailingToolWindows=wet;var lde=.1;function dde(t,e){let n=e/4.285714285714286;if(n<=0)return t>0?"up":"flat";let r=t/n;return r>1+lde?"up":r<1-lde?"down":"flat"}$C.FAILING_TOOL_TREND_ARROWS={up:"\u2191",down:"\u2193",flat:"\u2192"};function wet(t,e){let n=new Map;for(let r of e)n.set(r.tool,{tool:r.tool,last7:0,last30:r.failures,categories:{...r.categories??{}},trend:"flat"});for(let r of t){let o=n.get(r.tool);o?(o.last7=r.failures,o.last30=Math.max(o.last30,r.failures)):n.set(r.tool,{tool:r.tool,last7:r.failures,last30:r.failures,categories:{...r.categories??{}},trend:"flat"})}for(let r of n.values())r.trend=dde(r.last7,r.last30);return[...n.values()].sort((r,o)=>o.last7-r.last7||o.last30-r.last30||r.tool.localeCompare(o.tool))}});var gde=Q(Oq=>{"use strict";Object.defineProperty(Oq,"__esModule",{value:!0});Oq.diagnoseProviderFailure=Oet;function Ff(t,e){try{return t&&typeof t=="object"?t[e]:void 0}catch{return}}function fN(t){return typeof t=="string"?t.slice(0,16384):""}function pde(t){let e=typeof t=="string"&&/^\d{3}$/.test(t)?Number(t):t;return typeof e=="number"&&Number.isInteger(e)&&e>=100&&e<=599?e:void 0}function hde(t){return typeof t=="string"&&t.length<=64&&/^(?:\d{4}-\d{2}-\d{2}T|(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), )/.test(t)&&Number.isFinite(Date.parse(t))?new Date(t).toISOString():void 0}function Det(t){if(typeof t=="number"||typeof t=="string"&&/^\d+(\.\d+)?$/.test(t)){let n=Number(t)*1e3;return Number.isFinite(n)&&n>=0&&n<=Number.MAX_SAFE_INTEGER?{kind:"delay",delayMs:n}:void 0}let e=hde(t);return e?{kind:"date",at:e}:void 0}function pN(t){return t==="oauth"?"oauth_reauthentication_required":t==="api-key"?"api_credentials_rejected":"authentication_rejected"}function Tet(t,e){switch(t.toLowerCase().replace(/[^a-z0-9]/g,"")){case"missingcredentials":case"notloggedin":case"signedout":return"missing_credentials";case"invalidapikey":case"apikeyrejected":return"api_credentials_rejected";case"oauthtokenexpired":case"refreshtokenexpired":case"refreshtokenreused":case"invalidgrant":return"oauth_reauthentication_required";case"authenticationerror":case"autherror":case"invalidtoken":case"tokenexpired":case"unauthorized":return pN(e);case"threadnotfound":case"invalidthreadid":case"conversationnotfound":case"invalidconversation":case"conversationexpired":case"invalidsessionid":return"invalid_provider_session";case"executionpolicydenied":case"sandboxdenied":case"approvaldenied":return"execution_policy_denied";case"ratelimiterror":case"ratelimitexceeded":case"toomanyrequests":return"rate_limited";case"overloadederror":case"serveroverloaded":return"overloaded";case"serviceunavailable":case"internalservererror":case"servererror":return"service_unavailable";case"timeouterror":case"apiconnectiontimeouterror":case"etimedout":case"underrconnecttimeout":case"underrheaderstimeout":case"deadlineexceeded":return"timeout";case"econnreset":case"econnrefused":case"enotfound":case"eaiagain":case"enetunreach":case"ehostunreach":case"apiconnectionerror":return"connection_failed";case"runtimenotfound":case"runtimeunavailable":case"modulenotfound":case"errmodulenotfound":return"runtime_unavailable";case"contextlengthexceeded":case"contextwindowexceeded":case"prompttoolong":return"context_overflow";default:return}}function mde(t,e){if(t===401)return pN(e);if(t===408||t===504)return"timeout";if(t===429)return"rate_limited";if(t===529)return"overloaded";if(t>=500)return"service_unavailable"}function xet(t,e){if(/\b(execution policy|sandbox policy|approval)\b.{0,60}\b(denied|blocked|rejected|not allowed)\b|\bdenied by policy\b/i.test(t))return"execution_policy_denied";if(/\b(oauth (?:(?:access |refresh )?token|credentials?)|refresh token) (?:is |was |has (?:been )?)?(expired|invalid|rejected|revoked)\b/i.test(t))return"oauth_reauthentication_required";if(/\b(thread|conversation|session id)\b.{0,60}\b(not found|invalid|expired|does not exist)\b|\b(invalid|expired) (thread|conversation|session id)\b/i.test(t))return"invalid_provider_session";if(/\b(oauth|refresh token)\b.{0,60}\b(expired|invalid|rejected|revoked)\b/i.test(t))return"oauth_reauthentication_required";if(/\b(api[ _-]?key)\b.{0,60}\b(invalid|incorrect|rejected|revoked|expired)\b|\b(invalid|incorrect|rejected) api[ _-]?key\b/i.test(t))return"api_credentials_rejected";if(/\b(no|missing) (oauth |api[ _-]?key |authentication )?(credentials|token|api[ _-]?key)\b|\bnot (logged|signed) in\b|\bsigned out\b|\bapi[ _-]?key (not configured|not set)\b/i.test(t))return"missing_credentials";if(/\b(authentication failed|invalid authentication|credentials (rejected|expired)|token (expired|rejected|invalid)|login (has |is )?expired|please re-?authenticate)\b/i.test(t))return pN(e);if(/\b(context (length|window).{0,40}(exceed|overflow)|prompt (is )?too long|maximum context length)\b/i.test(t))return"context_overflow";if(/\b(overloaded|over capacity|server busy)\b/i.test(t))return"overloaded";if(/\b(rate[ _-]?limit|too many requests)\b/i.test(t))return"rate_limited";if(/\b(timed? ?out|deadline exceeded|etimedout)\b/i.test(t))return"timeout";if(/\b(service unavailable|bad gateway|internal server error)\b/i.test(t))return"service_unavailable";if(/\b(enotfound|eai_again|econnreset|econnrefused|dns (failure|lookup failed)|fetch failed|network (error|unreachable)|connection (reset|refused|terminated|termination)|upstream connect error|socket hang up)\b/i.test(t))return"connection_failed";if(/\b(claude|codex|cli|runtime|executable)\b.{0,60}\b(not found|not installed|unavailable|not executable)\b|\bspawn\s+\S+\s+(ENOENT|EACCES)\b/i.test(t))return"runtime_unavailable"}function Bet(t,e){switch(t){case"missing_credentials":return e==="oauth"?"sign_in":e==="api-key"?"update_credentials":"check_authentication";case"oauth_reauthentication_required":return"sign_in";case"api_credentials_rejected":return"update_credentials";case"authentication_rejected":return"check_authentication";case"invalid_provider_session":return"start_new_session";case"connection_failed":return"check_connection";case"execution_policy_denied":return"review_execution_policy";case"runtime_unavailable":return"repair_runtime";case"context_overflow":return"reduce_context";case"unknown":return"inspect_error";default:return"retry_later"}}function Oet(t){let e=[],n=[],r=new Set,o=[{value:t.error,depth:0}],i,s;for(let v=0;v<o.length&&v<32;v++){let{value:_,depth:I}=o[v];if(typeof _=="string"){n.push(fN(_));continue}if(!_||typeof _!="object"||r.has(_))continue;r.add(_);for(let P of["code","type","name"])e.push(fN(Ff(_,P)));n.push(fN(Ff(_,"message")));for(let P of["status","statusCode","httpStatus","status_code"])i??=pde(Ff(_,P));let w=Ff(_,"headers"),D=typeof Headers<"u"&&w instanceof Headers?w.get("retry-after"):Ff(w,"retry-after")??Ff(w,"Retry-After");s??=Det(D);let O=Ff(_,"retryAfterMs");if(!s&&typeof O=="number"&&Number.isFinite(O)&&O>=0&&O<=Number.MAX_SAFE_INTEGER&&(s={kind:"delay",delayMs:O}),Ff(_,"code")==="ENOENT"&&/^spawn\b/.test(fN(Ff(_,"syscall")))&&e.push("runtime_unavailable"),I<5){for(let R of["error","cause","response","data","body"]){let L=Ff(_,R);if(typeof L=="string"&&L.length<=16384&&L.trim().startsWith("{"))try{L=JSON.parse(L)}catch{}L!=null&&o.push({value:L,depth:I+1})}let P=Ff(_,"errors");if(Array.isArray(P))for(let R of P.slice(0,8))o.push({value:R,depth:I+1})}}let c,d=t.authentication,m=hde(d?.checkedAt);d&&m&&["oauth","api-key","unknown"].includes(d.credentialKind)&&["authenticated","missing","signed-out","expired","rejected","unknown"].includes(d.state)&&["local-check","provider-response"].includes(d.source)&&(c={credentialKind:d.credentialKind,state:d.state,checkedAt:m,source:d.source});let h=e.map(v=>Tet(v,t.credentialKind)).find(v=>v!==void 0),y="structured-error";if(!h&&i!==void 0&&(h=mde(i,t.credentialKind),y="http-status"),!h){y="message";for(let v of n){let _=v.match(/\b(?:HTTP(?:\/\d(?:\.\d)?)?(?: error)?|(?:unexpected )?status(?: code)?|API error)\s*[:=]?\s*(\d{3})\b|\b(401|403|429|50[02349]|529)\s+(?:Unauthorized|Forbidden|Too Many Requests|Bad Gateway|Service Unavailable|Internal Server Error|Gateway Timeout)\b/i),I=_?pde(_[1]??_[2]):void 0;if(i===void 0&&I!==void 0&&(i=I,h=mde(I,t.credentialKind)),h??=xet(v,t.credentialKind),h)break}}return!h&&c&&c.credentialKind===t.credentialKind&&((c.state==="missing"||c.state==="signed-out")&&(h="missing_credentials"),(c.state==="expired"||c.state==="rejected")&&(h=pN(t.credentialKind)),h&&(y="authentication-check")),h??="unknown",{provider:t.provider,credentialKind:t.credentialKind,diagnosis:h,recovery:Bet(h,t.credentialKind),evidence:h==="unknown"?[]:[{source:y,rule:h,...y==="authentication-check"?{checkedAt:c.checkedAt}:{}}],...c?{authentication:c}:{},...i!==void 0?{httpStatus:i}:{},...s?{retryAfter:s}:{}}}});var on=Q(C=>{"use strict";Object.defineProperty(C,"__esModule",{value:!0});C.isAggregateCodexLimit=C.fileFingerprintParts=C.fileFingerprint=C.observedSessionSourceFromProvider=C.ObservedSessionCollector=C.weekKey=C.usageBucketKey=C.summarizeUsageRows=C.bucketUsage=C.importSessionHistory=C.ACTIVE_SESSION_MTIME_THRESHOLD_MS=C.sessionSummaryFromStats=C.removeSessionSummary=C.markFileImported=C.isFileImported=C.applySessionSummary=C.pruneUsageCache=C.getUsageCacheDir=C.collectUsageEvents=C.USAGE_CACHE_VERSION=C.MAX_USAGE_CACHE_FILES=C.findActiveBillingBlock=C.computeBillingBlocks=C.BILLING_BLOCK_DURATION_MS=C.writeStateFile=C.readStateFile=C.quotaToStateFile=C.getStateFilePath=C.billingBlockToStateFile=C.STATE_FILE_SCHEMA_VERSION=C.STATE_FILE_NAME=C.sessionFingerprintParts=C.fingerprintString=C.readSessionReportInputs=C.readSessionFileStats=C.providerContextSizeFn=C.firstUserPrompt=C.computeSessionFileStats=C.readSessionTranscript=C.listRecentSessions=C.projectSessionTranscript=C.estimateSerializedTokens=C.estimateTextTokens=C.TOKEN_TOTAL_LABEL=C.TOKEN_CONTEXT_LABEL=C.sumTokenTotals=C.summarizeTokens=C.calculateNormalizedUsageCost=C.extractNormalizedUsage=C.normalizeProviderUsage=void 0;C.derivePendingUserRequestV1=C.createProviderSessionAdapterV1=C.createSessionProviders=C.SESSION_PROVIDER_IDS=C.renderHandoffUrlTemplate=C.addNote=C.decisionFingerprint=C.addDecision=C.completeTask=C.addTask=C.withFileLockSync=C.updateJsonStoreAtomicSync=C.updateJsonStoreAtomic=C.atomicWriteFileSync=C.atomicWriteJsonSync=C.atomicWriteJson=C.readClaudeCodePlanFiles=C.getPlanAnalytics=C.writePlans=C.getLatestPlan=C.readPlans=C.readLatestHandoff=C.readHistory=C.readNotes=C.readDecisions=C.readTasks=C.migrateLegacyProjectStores=C.resolveProjectIdentity=C.getProjectSlugRaw=C.getProjectSlug=C.encodeWorkspacePath=C.getGlobalDataPath=C.getProjectDataPath=C.setConfigDir=C.getDefaultConfigDir=C.getConfigDirOverride=C.getConfigDir=C.CONFIG_DIR_ENV_VAR=C.MAX_PLANS_PER_PROJECT=C.PLAN_SCHEMA_VERSION=C.createEmptyDataStore=C.createEmptyTokenTotals=C.HISTORICAL_SESSION_RETENTION_LIMIT=C.HISTORICAL_DATA_SCHEMA_VERSION=C.STALENESS_THRESHOLDS=C.IMPORTANCE_DECAY_FACTORS=C.KNOWLEDGE_NOTE_SCHEMA_VERSION=C.DECISION_LOG_SCHEMA_VERSION=C.normalizeTaskStatus=C.TASK_PERSISTENCE_SCHEMA_VERSION=void 0;C.readSessionPreview=C.listSessionPreviewsAsync=C.listSessionPreviews=C.readCodexHistory=C.parseMcpToolName=C.scanSubagentTraces=C.findAllSessionsWithWorktrees=C.discoverWorktreeSiblings=C.resolveWorktreeMainRepo=C.getAllClaudeProjectFolders=C.decodeEncodedPath=C.getMostRecentlyActiveSessionDir=C.findSubdirectorySessionDirs=C.findSessionFilesWithStats=C.findSessionsInDirectory=C.findAllClaudeSessions=C.findActiveClaudeSession=C.discoverSessionDirectory=C.getClaudeSessionDirectory=C.encodeClaudeWorkspacePath=C.SESSION_ACTIVITY_STALENESS_MS=C.SESSION_ACTIVITY_GRACE_PERIOD_MS=C.refreshSessionActivityState=C.detectSessionActivity=C.classifySessionActivity=C.extractTaskInfo=C.scanSubagentDir=C.normalizeCodexToolInput=C.normalizeCodexToolName=C.extractPatchFilePaths=C.CodexRolloutParser=C.parseDbPartData=C.parseDbMessageData=C.convertOpenCodeMessage=C.detectPlanModeFromText=C.normalizeToolInput=C.normalizeToolName=C.TRUNCATION_PATTERNS=C.JsonlParser=C.walkRolloutFilesAsync=C.walkRolloutFiles=C.findCodexRolloutFile=C.CodexProvider=C.getOpenCodeDataDir=C.OpenCodeProvider=C.ClaudeCodeProvider=C.getAllDetectedProviders=C.detectProvider=C._resetProviderDetectionCache=C.getObservedActivityReason=void 0;C.EventAggregator=C.getRandomPhrase=C.PHRASE_CATEGORIES=C.ALL_PHRASES=C.HIGHLIGHT_CSS=C.clearHighlightCache=C.highlightEvent=C.formatSessionJson=C.formatSessionMarkdown=C.formatSessionText=C.classifyNoise=C.shouldMergeWithPrevious=C.classifyFollowEvent=C.classifyMessage=C.getSoftNoiseReason=C.isHardNoiseFollowEvent=C.isHardNoise=C.formatToolSummary=C.parseLocalDateKey=C.formatTokenCount=C.formatLocalDateKey=C.formatDurationMs=C.addLocalDays=C.createJsonlTail=C.toFollowEvents=C.resolveSessionPath=C.createWatcher=C.parseChangelog=C.extractProposedPlanShared=C.parsePlanMarkdownShared=C.PlanExtractor=C.segmentAssistantTurn=C.reasoningSummary=C.isAssistantTurnSubagentTool=C.extractTurnSubagents=C.assistantTurnEventsFromSessionEvents=C.readSessionContextSnapshot=C.createSessionContextProjector=C.calculateSessionContextPressure=C.buildSessionContextSnapshot=C.composeContext=C.FilterEngine=C.searchSessions=C.CodexDatabase=C.OpenCodeDatabase=C.discoverDebugLogs=C.collapseDuplicates=C.filterByLevel=C.parseDebugLog=C.readSessionPreviewAsync=void 0;C.finalizeAccountLogin=C.getAccountLoginStatusAsync=C.getAccountLoginStatus=C.beginAccountLogin=C.isMultiAccountEnabled=C.resolveActiveClaudeAccount=C.getActiveAccount=C.listAccounts=C.removeAccount=C.reconcileClaudeAuthState=C.applyActiveClaudeToLiveHome=C.resolveActiveClaudeHome=C.switchToAccount=C.addCurrentAccount=C.readActiveClaudeAccount=C.writeAccountRegistry=C.readAccountRegistry=C.ensureDefaultAccounts=C.readClaudeMaxAccessTokenSync=C.readClaudeMaxCredentials=C.writeActiveCredentials=C.readActiveCredentials=C.openInBrowser=C.parseTranscriptFromEvents=C.parseTranscript=C.generateHtmlReport=C.formatCompactionLedger=C.calculateCompactionLedger=C.describeCostProvenance=C.classifyCostProvenance=C.calculateCodeImpact=C.scoreSessionQuality=C.calculateQualityTrend=C.PatternExtractor=C.HeatmapTracker=C.FrequencyTracker=C.readErrorHistory=C.getTopFailingTools=C.appendErrorHistory=C.MAX_ERROR_HISTORY_SESSIONS=C.ERROR_HISTORY_SCHEMA_VERSION=C.getSnapshotPath=C.MAX_SNAPSHOT_FILES=C.pruneSnapshots=C.isSnapshotValid=C.deleteSnapshot=C.loadSnapshot=C.saveSnapshot=C.SessionMonitor=C.parseTodoDependencies=void 0;C.FIVE_HOUR_WINDOW_MS=C.AutoSwitchController=C.decideAutoSwitch=C.DEFAULT_AUTO_SWITCH_CONFIG=C.removeLauncher=C.writeLauncher=C.isShellHookInstalled=C.uninstallShellHook=C.installShellHook=C.setTerminalActiveProfile=C.removeCodexAccount=C.switchToCodexAccountAsync=C.switchToCodexAccount=C.finalizeCodexAccountAsync=C.finalizeCodexAccount=C.prepareCodexAccountAsync=C.prepareCodexAccount=C.getCodexExecutionEnv=C.resolveSidekickCodexHome=C.resolveActiveCodexAccount=C.getActiveCodexAccount=C.listCodexAccounts=C.getSystemCodexHome=C.getCodexMonitoringHomes=C.getCodexProfileHome=C.getCodexProfilesDir=C.readClaudeProfileIdentity=C.isClaudeProfileAuthenticated=C.claudeKeychainService=C.claudeKeychainSuffix=C.getClaudeProfileHome=C.getClaudeProfilesDir=C.onAccountsChanged=C.getActiveAccountStatus=C.ACCOUNT_PROVIDER_IDS=C.removeSavedAccountProfile=C.replaceSavedAccountProfiles=C.setActiveSavedAccount=C.upsertSavedAccountProfile=C.getActiveSavedAccount=C.listSavedAccountProfiles=C.writeSavedAccountRegistry=C.readSavedAccountRegistry=C.getAccountsDir=C.resolveClaudeLoginCommand=C.listAllAccounts=C.switchAccountAsync=C.switchAccount=C.spawnAccountLogin=C.finalizeAccountLoginAsync=void 0;C.calculateCostWithPricing=C.calculateCost=C.getModelInfo=C.resolveModelPricing=C.getModelPricing=C.parseModelId=C.DEFAULT_CONTEXT_WINDOW=C.resolveModelContextWindow=C.getModelContextWindowSize=C.selectStatuslineAccount=C.formatStatusline=C.estimateTimeToQuota=C.BurnRateCalculator=C.RUNTIME_QUOTA_PROVIDER_IDS=C.MultiProviderQuotaService=C.resolveZaiQuota=C.readZaiCredentials=C.quotaStateFromZaiQuotaLimitPayload=C.fetchZaiQuotaFromApi=C.CodexQuotaWatcher=C.resolveCodexQuotaFromLocalSources=C.resolveCodexQuota=C.readLatestCodexQuotaFromRollouts=C.quotaFromCodexRateLimits=C.fetchCodexQuotaFromApi=C.fetchCodexResetCreditsFromApi=C.getWorkspaceIdFromPath=C.pruneQuotaHistory=C.readQuotaHistoryDailyBuckets=C.readQuotaHistoryRange=C.appendQuotaHistorySample=C.quotaFromStatuslinePayload=C.parseClaudeStatuslinePayload=C.evaluateQuotaThresholds=C.describeQuotaThresholdAlert=C.DEFAULT_QUOTA_THRESHOLDS=C.QUOTA_FRESH_MAX_AGE_MS=C.QUOTA_AGING_MAX_AGE_MS=C.formatQuotaAge=C.classifyQuotaFreshness=C.resolveQuota=C.writeQuotaSnapshot=C.readQuotaSnapshot=C.QuotaPoller=C.describeQuotaFailure=C.withQuotaProjections=C.projectQuotaWindow=C.fetchQuota=C.SEVEN_DAY_WINDOW_MS=C.QUOTA_PROVIDER_IDS=void 0;C.providerQuotaStateSchema=C.runtimeQuotaProviderSchema=C.quotaFailureDescriptorSchema=C.peakHoursStateSchema=C.codexResetCreditsSnapshotSchema=C.codexResetCreditSchema=C.quotaSourceSchema=C.quotaProviderIdSchema=C.quotaFailureKindSchema=C.quotaStateSchema=C.quotaWindowSchema=C.extractSessionEvents=C.permissionModeSchema=C.sessionEventSchema=C.sessionMessageSchema=C.messageUsageSchema=C.ToolCallTracker=C.extractToolCalls=C.extractToolCall=C.extractErrorMessage=C.categorizeError=C.gatherAssetsForCwd=C.codexSessions=C.readCodexAssets=C.claudeSessions=C.readClaudeAssets=C.extractCommands=C.extractFilePaths=C.extractUrls=C.extractTokenUsage=C.getObservedContextWindowPath=C.recordObservedContextWindow=C.loadObservedContextWindows=C.LITELLM_CATALOG_URL=C.normalizeLiteLlmContextWindows=C.normalizeLiteLlmCatalog=C.hydratePricingCatalog=C.RESOLVED_MODEL_CATALOG_SCHEMA_VERSION=C.resolveModelAlias=C.registerModelAlias=C.importResolvedModelCatalog=C.exportResolvedModelCatalog=C.MODEL_PROVIDER_IDS=C.formatCost=C.sortModelIds=C.compareModelIds=C.getModelDisplayInfo=C.shortModelName=C.mergeCostSources=C.calculateCostWithProvenance=void 0;C.fetchProviderServiceStatus=C.diagnoseProviderFailure=C.mergeFailingToolWindows=C.failingToolTrend=C.FAILING_TOOL_TREND_ARROWS=C.scopePeakHoursToSessionProvider=C.PEAK_HOURS_DESCRIPTION=C.PEAK_HOURS_CACHE_MS=C.isClaudeCodeSessionProvider=C.getScheduledPeakHoursState=C.fetchPeakHoursStatus=C.DEFAULT_PEAK_HOURS_TIMEOUT_MS=C.createPeakHoursNotApplicableState=C._resetPeakHoursCache=C.runDoctor=C.getSessionDiagnostics=C.formatHealthReport=C.toLegacyProviderStatus=C.fetchOpenAIStatus=C.fetchProviderStatus=C.assistantTurnToolRefSchema=C.assistantTurnToolGroupStepSchema=C.assistantTurnTimelineItemSchema=C.assistantTurnSubagentStatusSchema=C.assistantTurnSubagentSchema=C.assistantTurnReasoningTimelineItemSchema=C.assistantTurnProjectionSchema=C.assistantTurnProcessStepSchema=C.assistantTurnProcessSchema=C.assistantTurnNarrationStepSchema=C.assistantTurnEventTypeSchema=C.assistantTurnEventSchema=C.listAllAccountsResultSchema=C.savedAccountProfileSchema=C.accountEntrySchema=C.accountLoginStatusSchema=C.beginAccountLoginResultSchema=C.accountManagerResultSchema=C.accountProviderIdSchema=C.activeAccountStatusSchema=C.activeProviderAccountStatusSchema=C.quotaHistoryDailyBucketSchema=C.quotaHistorySampleSchema=C.quotaHistoryRuntimeProviderSchema=C.providerQuotaMapSchema=C.zaiProviderQuotaStateSchema=C.codexProviderQuotaStateSchema=C.claudeProviderQuotaStateSchema=void 0;var kq=Up();Object.defineProperty(C,"normalizeProviderUsage",{enumerable:!0,get:function(){return kq.normalizeProviderUsage}});Object.defineProperty(C,"extractNormalizedUsage",{enumerable:!0,get:function(){return kq.extractNormalizedUsage}});Object.defineProperty(C,"calculateNormalizedUsageCost",{enumerable:!0,get:function(){return kq.calculateNormalizedUsageCost}});var mN=jE();Object.defineProperty(C,"summarizeTokens",{enumerable:!0,get:function(){return mN.summarizeTokens}});Object.defineProperty(C,"sumTokenTotals",{enumerable:!0,get:function(){return mN.sumTokenTotals}});Object.defineProperty(C,"TOKEN_CONTEXT_LABEL",{enumerable:!0,get:function(){return mN.TOKEN_CONTEXT_LABEL}});Object.defineProperty(C,"TOKEN_TOTAL_LABEL",{enumerable:!0,get:function(){return mN.TOKEN_TOTAL_LABEL}});var Ade=WP();Object.defineProperty(C,"estimateTextTokens",{enumerable:!0,get:function(){return Ade.estimateTextTokens}});Object.defineProperty(C,"estimateSerializedTokens",{enumerable:!0,get:function(){return Ade.estimateSerializedTokens}});var ket=QT();Object.defineProperty(C,"projectSessionTranscript",{enumerable:!0,get:function(){return ket.projectSessionTranscript}});var yde=IL();Object.defineProperty(C,"listRecentSessions",{enumerable:!0,get:function(){return yde.listRecentSessions}});Object.defineProperty(C,"readSessionTranscript",{enumerable:!0,get:function(){return yde.readSessionTranscript}});var hN=mg();Object.defineProperty(C,"computeSessionFileStats",{enumerable:!0,get:function(){return hN.computeSessionFileStats}});Object.defineProperty(C,"firstUserPrompt",{enumerable:!0,get:function(){return hN.firstUserPrompt}});Object.defineProperty(C,"providerContextSizeFn",{enumerable:!0,get:function(){return hN.providerContextSizeFn}});Object.defineProperty(C,"readSessionFileStats",{enumerable:!0,get:function(){return hN.readSessionFileStats}});var Pet=E4();Object.defineProperty(C,"readSessionReportInputs",{enumerable:!0,get:function(){return Pet.readSessionReportInputs}});var vde=tC();Object.defineProperty(C,"fingerprintString",{enumerable:!0,get:function(){return vde.fingerprintString}});Object.defineProperty(C,"sessionFingerprintParts",{enumerable:!0,get:function(){return vde.sessionFingerprintParts}});var hb=$M();Object.defineProperty(C,"STATE_FILE_NAME",{enumerable:!0,get:function(){return hb.STATE_FILE_NAME}});Object.defineProperty(C,"STATE_FILE_SCHEMA_VERSION",{enumerable:!0,get:function(){return hb.STATE_FILE_SCHEMA_VERSION}});Object.defineProperty(C,"billingBlockToStateFile",{enumerable:!0,get:function(){return hb.billingBlockToStateFile}});Object.defineProperty(C,"getStateFilePath",{enumerable:!0,get:function(){return hb.getStateFilePath}});Object.defineProperty(C,"quotaToStateFile",{enumerable:!0,get:function(){return hb.quotaToStateFile}});Object.defineProperty(C,"readStateFile",{enumerable:!0,get:function(){return hb.readStateFile}});Object.defineProperty(C,"writeStateFile",{enumerable:!0,get:function(){return hb.writeStateFile}});var Pq=R4();Object.defineProperty(C,"BILLING_BLOCK_DURATION_MS",{enumerable:!0,get:function(){return Pq.BILLING_BLOCK_DURATION_MS}});Object.defineProperty(C,"computeBillingBlocks",{enumerable:!0,get:function(){return Pq.computeBillingBlocks}});Object.defineProperty(C,"findActiveBillingBlock",{enumerable:!0,get:function(){return Pq.findActiveBillingBlock}});var eB=z4();Object.defineProperty(C,"MAX_USAGE_CACHE_FILES",{enumerable:!0,get:function(){return eB.MAX_USAGE_CACHE_FILES}});Object.defineProperty(C,"USAGE_CACHE_VERSION",{enumerable:!0,get:function(){return eB.USAGE_CACHE_VERSION}});Object.defineProperty(C,"collectUsageEvents",{enumerable:!0,get:function(){return eB.collectUsageEvents}});Object.defineProperty(C,"getUsageCacheDir",{enumerable:!0,get:function(){return eB.getUsageCacheDir}});Object.defineProperty(C,"pruneUsageCache",{enumerable:!0,get:function(){return eB.pruneUsageCache}});var tB=FM();Object.defineProperty(C,"applySessionSummary",{enumerable:!0,get:function(){return tB.applySessionSummary}});Object.defineProperty(C,"isFileImported",{enumerable:!0,get:function(){return tB.isFileImported}});Object.defineProperty(C,"markFileImported",{enumerable:!0,get:function(){return tB.markFileImported}});Object.defineProperty(C,"removeSessionSummary",{enumerable:!0,get:function(){return tB.removeSessionSummary}});Object.defineProperty(C,"sessionSummaryFromStats",{enumerable:!0,get:function(){return tB.sessionSummaryFromStats}});var _de=H4();Object.defineProperty(C,"ACTIVE_SESSION_MTIME_THRESHOLD_MS",{enumerable:!0,get:function(){return _de.ACTIVE_SESSION_MTIME_THRESHOLD_MS}});Object.defineProperty(C,"importSessionHistory",{enumerable:!0,get:function(){return _de.importSessionHistory}});var gN=q4();Object.defineProperty(C,"bucketUsage",{enumerable:!0,get:function(){return gN.bucketUsage}});Object.defineProperty(C,"summarizeUsageRows",{enumerable:!0,get:function(){return gN.summarizeUsageRows}});Object.defineProperty(C,"usageBucketKey",{enumerable:!0,get:function(){return gN.usageBucketKey}});Object.defineProperty(C,"weekKey",{enumerable:!0,get:function(){return gN.weekKey}});var AN=qM();Object.defineProperty(C,"ObservedSessionCollector",{enumerable:!0,get:function(){return AN.ObservedSessionCollector}});Object.defineProperty(C,"observedSessionSourceFromProvider",{enumerable:!0,get:function(){return AN.observedSessionSourceFromProvider}});Object.defineProperty(C,"fileFingerprint",{enumerable:!0,get:function(){return AN.fileFingerprint}});Object.defineProperty(C,"fileFingerprintParts",{enumerable:!0,get:function(){return AN.fileFingerprintParts}});var Ret=ux();Object.defineProperty(C,"isAggregateCodexLimit",{enumerable:!0,get:function(){return Ret.isAggregateCodexLimit}});var bde=X4();Object.defineProperty(C,"TASK_PERSISTENCE_SCHEMA_VERSION",{enumerable:!0,get:function(){return bde.TASK_PERSISTENCE_SCHEMA_VERSION}});Object.defineProperty(C,"normalizeTaskStatus",{enumerable:!0,get:function(){return bde.normalizeTaskStatus}});var Met=eH();Object.defineProperty(C,"DECISION_LOG_SCHEMA_VERSION",{enumerable:!0,get:function(){return Met.DECISION_LOG_SCHEMA_VERSION}});var Rq=tH();Object.defineProperty(C,"KNOWLEDGE_NOTE_SCHEMA_VERSION",{enumerable:!0,get:function(){return Rq.KNOWLEDGE_NOTE_SCHEMA_VERSION}});Object.defineProperty(C,"IMPORTANCE_DECAY_FACTORS",{enumerable:!0,get:function(){return Rq.IMPORTANCE_DECAY_FACTORS}});Object.defineProperty(C,"STALENESS_THRESHOLDS",{enumerable:!0,get:function(){return Rq.STALENESS_THRESHOLDS}});var yN=F4();Object.defineProperty(C,"HISTORICAL_DATA_SCHEMA_VERSION",{enumerable:!0,get:function(){return yN.HISTORICAL_DATA_SCHEMA_VERSION}});Object.defineProperty(C,"HISTORICAL_SESSION_RETENTION_LIMIT",{enumerable:!0,get:function(){return yN.HISTORICAL_SESSION_RETENTION_LIMIT}});Object.defineProperty(C,"createEmptyTokenTotals",{enumerable:!0,get:function(){return yN.createEmptyTokenTotals}});Object.defineProperty(C,"createEmptyDataStore",{enumerable:!0,get:function(){return yN.createEmptyDataStore}});var Sde=nH();Object.defineProperty(C,"PLAN_SCHEMA_VERSION",{enumerable:!0,get:function(){return Sde.PLAN_SCHEMA_VERSION}});Object.defineProperty(C,"MAX_PLANS_PER_PROJECT",{enumerable:!0,get:function(){return Sde.MAX_PLANS_PER_PROJECT}});var Uf=is();Object.defineProperty(C,"CONFIG_DIR_ENV_VAR",{enumerable:!0,get:function(){return Uf.CONFIG_DIR_ENV_VAR}});Object.defineProperty(C,"getConfigDir",{enumerable:!0,get:function(){return Uf.getConfigDir}});Object.defineProperty(C,"getConfigDirOverride",{enumerable:!0,get:function(){return Uf.getConfigDirOverride}});Object.defineProperty(C,"getDefaultConfigDir",{enumerable:!0,get:function(){return Uf.getDefaultConfigDir}});Object.defineProperty(C,"setConfigDir",{enumerable:!0,get:function(){return Uf.setConfigDir}});Object.defineProperty(C,"getProjectDataPath",{enumerable:!0,get:function(){return Uf.getProjectDataPath}});Object.defineProperty(C,"getGlobalDataPath",{enumerable:!0,get:function(){return Uf.getGlobalDataPath}});Object.defineProperty(C,"encodeWorkspacePath",{enumerable:!0,get:function(){return Uf.encodeWorkspacePath}});Object.defineProperty(C,"getProjectSlug",{enumerable:!0,get:function(){return Uf.getProjectSlug}});Object.defineProperty(C,"getProjectSlugRaw",{enumerable:!0,get:function(){return Uf.getProjectSlugRaw}});Object.defineProperty(C,"resolveProjectIdentity",{enumerable:!0,get:function(){return Uf.resolveProjectIdentity}});var Qet=fx();Object.defineProperty(C,"migrateLegacyProjectStores",{enumerable:!0,get:function(){return Qet.migrateLegacyProjectStores}});var Net=iH();Object.defineProperty(C,"readTasks",{enumerable:!0,get:function(){return Net.readTasks}});var $et=aH();Object.defineProperty(C,"readDecisions",{enumerable:!0,get:function(){return $et.readDecisions}});var jet=cH();Object.defineProperty(C,"readNotes",{enumerable:!0,get:function(){return jet.readNotes}});var zet=dH();Object.defineProperty(C,"readHistory",{enumerable:!0,get:function(){return zet.readHistory}});var Fet=fH();Object.defineProperty(C,"readLatestHandoff",{enumerable:!0,get:function(){return Fet.readLatestHandoff}});var nB=Eie();Object.defineProperty(C,"readPlans",{enumerable:!0,get:function(){return nB.readPlans}});Object.defineProperty(C,"getLatestPlan",{enumerable:!0,get:function(){return nB.getLatestPlan}});Object.defineProperty(C,"writePlans",{enumerable:!0,get:function(){return nB.writePlans}});Object.defineProperty(C,"getPlanAnalytics",{enumerable:!0,get:function(){return nB.getPlanAnalytics}});Object.defineProperty(C,"readClaudeCodePlanFiles",{enumerable:!0,get:function(){return nB.readClaudeCodePlanFiles}});var jC=la();Object.defineProperty(C,"atomicWriteJson",{enumerable:!0,get:function(){return jC.atomicWriteJson}});Object.defineProperty(C,"atomicWriteJsonSync",{enumerable:!0,get:function(){return jC.atomicWriteJsonSync}});Object.defineProperty(C,"atomicWriteFileSync",{enumerable:!0,get:function(){return jC.atomicWriteFileSync}});Object.defineProperty(C,"updateJsonStoreAtomic",{enumerable:!0,get:function(){return jC.updateJsonStoreAtomic}});Object.defineProperty(C,"updateJsonStoreAtomicSync",{enumerable:!0,get:function(){return jC.updateJsonStoreAtomicSync}});Object.defineProperty(C,"withFileLockSync",{enumerable:!0,get:function(){return jC.withFileLockSync}});var Ede=Tie();Object.defineProperty(C,"addTask",{enumerable:!0,get:function(){return Ede.addTask}});Object.defineProperty(C,"completeTask",{enumerable:!0,get:function(){return Ede.completeTask}});var Cde=Oie();Object.defineProperty(C,"addDecision",{enumerable:!0,get:function(){return Cde.addDecision}});Object.defineProperty(C,"decisionFingerprint",{enumerable:!0,get:function(){return Cde.decisionFingerprint}});var Uet=Rie();Object.defineProperty(C,"addNote",{enumerable:!0,get:function(){return Uet.addNote}});var Let=Mie();Object.defineProperty(C,"renderHandoffUrlTemplate",{enumerable:!0,get:function(){return Let.renderHandoffUrlTemplate}});var Het=AH();Object.defineProperty(C,"SESSION_PROVIDER_IDS",{enumerable:!0,get:function(){return Het.SESSION_PROVIDER_IDS}});var qet=S6();Object.defineProperty(C,"createSessionProviders",{enumerable:!0,get:function(){return qet.createSessionProviders}});var Mq=K4();Object.defineProperty(C,"createProviderSessionAdapterV1",{enumerable:!0,get:function(){return Mq.createProviderSessionAdapterV1}});Object.defineProperty(C,"derivePendingUserRequestV1",{enumerable:!0,get:function(){return Mq.derivePendingUserRequestV1}});Object.defineProperty(C,"getObservedActivityReason",{enumerable:!0,get:function(){return Mq.getObservedActivityReason}});var Qq=w6();Object.defineProperty(C,"_resetProviderDetectionCache",{enumerable:!0,get:function(){return Qq._resetProviderDetectionCache}});Object.defineProperty(C,"detectProvider",{enumerable:!0,get:function(){return Qq.detectProvider}});Object.defineProperty(C,"getAllDetectedProviders",{enumerable:!0,get:function(){return Qq.getAllDetectedProviders}});var Zet=OH();Object.defineProperty(C,"ClaudeCodeProvider",{enumerable:!0,get:function(){return Zet.ClaudeCodeProvider}});var Ide=bC();Object.defineProperty(C,"OpenCodeProvider",{enumerable:!0,get:function(){return Ide.OpenCodeProvider}});Object.defineProperty(C,"getOpenCodeDataDir",{enumerable:!0,get:function(){return Ide.getOpenCodeDataDir}});var wde=AC();Object.defineProperty(C,"CodexProvider",{enumerable:!0,get:function(){return wde.CodexProvider}});Object.defineProperty(C,"findCodexRolloutFile",{enumerable:!0,get:function(){return wde.findCodexRolloutFile}});var Dde=wx();Object.defineProperty(C,"walkRolloutFiles",{enumerable:!0,get:function(){return Dde.walkRolloutFiles}});Object.defineProperty(C,"walkRolloutFilesAsync",{enumerable:!0,get:function(){return Dde.walkRolloutFilesAsync}});var Tde=FE();Object.defineProperty(C,"JsonlParser",{enumerable:!0,get:function(){return Tde.JsonlParser}});Object.defineProperty(C,"TRUNCATION_PATTERNS",{enumerable:!0,get:function(){return Tde.TRUNCATION_PATTERNS}});var zC=_x();Object.defineProperty(C,"normalizeToolName",{enumerable:!0,get:function(){return zC.normalizeToolName}});Object.defineProperty(C,"normalizeToolInput",{enumerable:!0,get:function(){return zC.normalizeToolInput}});Object.defineProperty(C,"detectPlanModeFromText",{enumerable:!0,get:function(){return zC.detectPlanModeFromText}});Object.defineProperty(C,"convertOpenCodeMessage",{enumerable:!0,get:function(){return zC.convertOpenCodeMessage}});Object.defineProperty(C,"parseDbMessageData",{enumerable:!0,get:function(){return zC.parseDbMessageData}});Object.defineProperty(C,"parseDbPartData",{enumerable:!0,get:function(){return zC.parseDbPartData}});var vN=eQ();Object.defineProperty(C,"CodexRolloutParser",{enumerable:!0,get:function(){return vN.CodexRolloutParser}});Object.defineProperty(C,"extractPatchFilePaths",{enumerable:!0,get:function(){return vN.extractPatchFilePaths}});Object.defineProperty(C,"normalizeCodexToolName",{enumerable:!0,get:function(){return vN.normalizeCodexToolName}});Object.defineProperty(C,"normalizeCodexToolInput",{enumerable:!0,get:function(){return vN.normalizeCodexToolInput}});var xde=DH();Object.defineProperty(C,"scanSubagentDir",{enumerable:!0,get:function(){return xde.scanSubagentDir}});Object.defineProperty(C,"extractTaskInfo",{enumerable:!0,get:function(){return xde.extractTaskInfo}});var rB=UM();Object.defineProperty(C,"classifySessionActivity",{enumerable:!0,get:function(){return rB.classifySessionActivity}});Object.defineProperty(C,"detectSessionActivity",{enumerable:!0,get:function(){return rB.detectSessionActivity}});Object.defineProperty(C,"refreshSessionActivityState",{enumerable:!0,get:function(){return rB.refreshSessionActivityState}});Object.defineProperty(C,"SESSION_ACTIVITY_GRACE_PERIOD_MS",{enumerable:!0,get:function(){return rB.SESSION_ACTIVITY_GRACE_PERIOD_MS}});Object.defineProperty(C,"SESSION_ACTIVITY_STALENESS_MS",{enumerable:!0,get:function(){return rB.SESSION_ACTIVITY_STALENESS_MS}});var xc=yx();Object.defineProperty(C,"encodeClaudeWorkspacePath",{enumerable:!0,get:function(){return xc.encodeWorkspacePath}});Object.defineProperty(C,"getClaudeSessionDirectory",{enumerable:!0,get:function(){return xc.getSessionDirectory}});Object.defineProperty(C,"discoverSessionDirectory",{enumerable:!0,get:function(){return xc.discoverSessionDirectory}});Object.defineProperty(C,"findActiveClaudeSession",{enumerable:!0,get:function(){return xc.findActiveSession}});Object.defineProperty(C,"findAllClaudeSessions",{enumerable:!0,get:function(){return xc.findAllSessions}});Object.defineProperty(C,"findSessionsInDirectory",{enumerable:!0,get:function(){return xc.findSessionsInDirectory}});Object.defineProperty(C,"findSessionFilesWithStats",{enumerable:!0,get:function(){return xc.findSessionFilesWithStats}});Object.defineProperty(C,"findSubdirectorySessionDirs",{enumerable:!0,get:function(){return xc.findSubdirectorySessionDirs}});Object.defineProperty(C,"getMostRecentlyActiveSessionDir",{enumerable:!0,get:function(){return xc.getMostRecentlyActiveSessionDir}});Object.defineProperty(C,"decodeEncodedPath",{enumerable:!0,get:function(){return xc.decodeEncodedPath}});Object.defineProperty(C,"getAllClaudeProjectFolders",{enumerable:!0,get:function(){return xc.getAllProjectFolders}});Object.defineProperty(C,"resolveWorktreeMainRepo",{enumerable:!0,get:function(){return xc.resolveWorktreeMainRepo}});Object.defineProperty(C,"discoverWorktreeSiblings",{enumerable:!0,get:function(){return xc.discoverWorktreeSiblings}});Object.defineProperty(C,"findAllSessionsWithWorktrees",{enumerable:!0,get:function(){return xc.findAllSessionsWithWorktrees}});var Get=Oae();Object.defineProperty(C,"scanSubagentTraces",{enumerable:!0,get:function(){return Get.scanSubagentTraces}});var Vet=vH();Object.defineProperty(C,"parseMcpToolName",{enumerable:!0,get:function(){return Vet.parseMcpToolName}});var Ket=x6();Object.defineProperty(C,"readCodexHistory",{enumerable:!0,get:function(){return Ket.readCodexHistory}});var _N=ox();Object.defineProperty(C,"listSessionPreviews",{enumerable:!0,get:function(){return _N.listSessionPreviews}});Object.defineProperty(C,"listSessionPreviewsAsync",{enumerable:!0,get:function(){return _N.listSessionPreviewsAsync}});Object.defineProperty(C,"readSessionPreview",{enumerable:!0,get:function(){return _N.readSessionPreview}});Object.defineProperty(C,"readSessionPreviewAsync",{enumerable:!0,get:function(){return _N.readSessionPreviewAsync}});var bN=Mae();Object.defineProperty(C,"parseDebugLog",{enumerable:!0,get:function(){return bN.parseDebugLog}});Object.defineProperty(C,"filterByLevel",{enumerable:!0,get:function(){return bN.filterByLevel}});Object.defineProperty(C,"collapseDuplicates",{enumerable:!0,get:function(){return bN.collapseDuplicates}});Object.defineProperty(C,"discoverDebugLogs",{enumerable:!0,get:function(){return bN.discoverDebugLogs}});var Yet=Bx();Object.defineProperty(C,"OpenCodeDatabase",{enumerable:!0,get:function(){return Yet.OpenCodeDatabase}});var Jet=zH();Object.defineProperty(C,"CodexDatabase",{enumerable:!0,get:function(){return Jet.CodexDatabase}});var Wet=Qae();Object.defineProperty(C,"searchSessions",{enumerable:!0,get:function(){return Wet.searchSessions}});var Xet=Nae();Object.defineProperty(C,"FilterEngine",{enumerable:!0,get:function(){return Xet.FilterEngine}});var ett=$ae();Object.defineProperty(C,"composeContext",{enumerable:!0,get:function(){return ett.composeContext}});var SN=px();Object.defineProperty(C,"buildSessionContextSnapshot",{enumerable:!0,get:function(){return SN.buildSessionContextSnapshot}});Object.defineProperty(C,"calculateSessionContextPressure",{enumerable:!0,get:function(){return SN.calculateSessionContextPressure}});Object.defineProperty(C,"createSessionContextProjector",{enumerable:!0,get:function(){return SN.createSessionContextProjector}});Object.defineProperty(C,"readSessionContextSnapshot",{enumerable:!0,get:function(){return SN.readSessionContextSnapshot}});var oB=Uae();Object.defineProperty(C,"assistantTurnEventsFromSessionEvents",{enumerable:!0,get:function(){return oB.assistantTurnEventsFromSessionEvents}});Object.defineProperty(C,"extractTurnSubagents",{enumerable:!0,get:function(){return oB.extractTurnSubagents}});Object.defineProperty(C,"isAssistantTurnSubagentTool",{enumerable:!0,get:function(){return oB.isAssistantTurnSubagentTool}});Object.defineProperty(C,"reasoningSummary",{enumerable:!0,get:function(){return oB.reasoningSummary}});Object.defineProperty(C,"segmentAssistantTurn",{enumerable:!0,get:function(){return oB.segmentAssistantTurn}});var Nq=eR();Object.defineProperty(C,"PlanExtractor",{enumerable:!0,get:function(){return Nq.PlanExtractor}});Object.defineProperty(C,"parsePlanMarkdownShared",{enumerable:!0,get:function(){return Nq.parsePlanMarkdown}});Object.defineProperty(C,"extractProposedPlanShared",{enumerable:!0,get:function(){return Nq.extractProposedPlan}});var ttt=Lae();Object.defineProperty(C,"parseChangelog",{enumerable:!0,get:function(){return ttt.parseChangelog}});var Bde=Xae();Object.defineProperty(C,"createWatcher",{enumerable:!0,get:function(){return Bde.createWatcher}});Object.defineProperty(C,"resolveSessionPath",{enumerable:!0,get:function(){return Bde.resolveSessionPath}});var ntt=rR();Object.defineProperty(C,"toFollowEvents",{enumerable:!0,get:function(){return ntt.toFollowEvents}});var rtt=U6();Object.defineProperty(C,"createJsonlTail",{enumerable:!0,get:function(){return rtt.createJsonlTail}});var iB=iC();Object.defineProperty(C,"addLocalDays",{enumerable:!0,get:function(){return iB.addLocalDays}});Object.defineProperty(C,"formatDurationMs",{enumerable:!0,get:function(){return iB.formatDurationMs}});Object.defineProperty(C,"formatLocalDateKey",{enumerable:!0,get:function(){return iB.formatLocalDateKey}});Object.defineProperty(C,"formatTokenCount",{enumerable:!0,get:function(){return iB.formatTokenCount}});Object.defineProperty(C,"parseLocalDateKey",{enumerable:!0,get:function(){return iB.parseLocalDateKey}});var ott=K_();Object.defineProperty(C,"formatToolSummary",{enumerable:!0,get:function(){return ott.formatToolSummary}});var gb=oR();Object.defineProperty(C,"isHardNoise",{enumerable:!0,get:function(){return gb.isHardNoise}});Object.defineProperty(C,"isHardNoiseFollowEvent",{enumerable:!0,get:function(){return gb.isHardNoiseFollowEvent}});Object.defineProperty(C,"getSoftNoiseReason",{enumerable:!0,get:function(){return gb.getSoftNoiseReason}});Object.defineProperty(C,"classifyMessage",{enumerable:!0,get:function(){return gb.classifyMessage}});Object.defineProperty(C,"classifyFollowEvent",{enumerable:!0,get:function(){return gb.classifyFollowEvent}});Object.defineProperty(C,"shouldMergeWithPrevious",{enumerable:!0,get:function(){return gb.shouldMergeWithPrevious}});Object.defineProperty(C,"classifyNoise",{enumerable:!0,get:function(){return gb.classifyNoise}});var $q=Y6();Object.defineProperty(C,"formatSessionText",{enumerable:!0,get:function(){return $q.formatSessionText}});Object.defineProperty(C,"formatSessionMarkdown",{enumerable:!0,get:function(){return $q.formatSessionMarkdown}});Object.defineProperty(C,"formatSessionJson",{enumerable:!0,get:function(){return $q.formatSessionJson}});var jq=nue();Object.defineProperty(C,"highlightEvent",{enumerable:!0,get:function(){return jq.highlight}});Object.defineProperty(C,"clearHighlightCache",{enumerable:!0,get:function(){return jq.clearHighlightCache}});Object.defineProperty(C,"HIGHLIGHT_CSS",{enumerable:!0,get:function(){return jq.HIGHLIGHT_CSS}});var zq=rue();Object.defineProperty(C,"ALL_PHRASES",{enumerable:!0,get:function(){return zq.ALL_PHRASES}});Object.defineProperty(C,"PHRASE_CATEGORIES",{enumerable:!0,get:function(){return zq.PHRASE_CATEGORIES}});Object.defineProperty(C,"getRandomPhrase",{enumerable:!0,get:function(){return zq.getRandomPhrase}});var Ode=J_();Object.defineProperty(C,"EventAggregator",{enumerable:!0,get:function(){return Ode.EventAggregator}});Object.defineProperty(C,"parseTodoDependencies",{enumerable:!0,get:function(){return Ode.parseTodoDependencies}});var itt=iue();Object.defineProperty(C,"SessionMonitor",{enumerable:!0,get:function(){return itt.SessionMonitor}});var Ab=uue();Object.defineProperty(C,"saveSnapshot",{enumerable:!0,get:function(){return Ab.saveSnapshot}});Object.defineProperty(C,"loadSnapshot",{enumerable:!0,get:function(){return Ab.loadSnapshot}});Object.defineProperty(C,"deleteSnapshot",{enumerable:!0,get:function(){return Ab.deleteSnapshot}});Object.defineProperty(C,"isSnapshotValid",{enumerable:!0,get:function(){return Ab.isSnapshotValid}});Object.defineProperty(C,"pruneSnapshots",{enumerable:!0,get:function(){return Ab.pruneSnapshots}});Object.defineProperty(C,"MAX_SNAPSHOT_FILES",{enumerable:!0,get:function(){return Ab.MAX_SNAPSHOT_FILES}});Object.defineProperty(C,"getSnapshotPath",{enumerable:!0,get:function(){return Ab.getSnapshotPath}});var sB=due();Object.defineProperty(C,"ERROR_HISTORY_SCHEMA_VERSION",{enumerable:!0,get:function(){return sB.ERROR_HISTORY_SCHEMA_VERSION}});Object.defineProperty(C,"MAX_ERROR_HISTORY_SESSIONS",{enumerable:!0,get:function(){return sB.MAX_ERROR_HISTORY_SESSIONS}});Object.defineProperty(C,"appendErrorHistory",{enumerable:!0,get:function(){return sB.appendErrorHistory}});Object.defineProperty(C,"getTopFailingTools",{enumerable:!0,get:function(){return sB.getTopFailingTools}});Object.defineProperty(C,"readErrorHistory",{enumerable:!0,get:function(){return sB.readErrorHistory}});var stt=kL();Object.defineProperty(C,"FrequencyTracker",{enumerable:!0,get:function(){return stt.FrequencyTracker}});var att=RL();Object.defineProperty(C,"HeatmapTracker",{enumerable:!0,get:function(){return att.HeatmapTracker}});var utt=QL();Object.defineProperty(C,"PatternExtractor",{enumerable:!0,get:function(){return utt.PatternExtractor}});var kde=fue();Object.defineProperty(C,"calculateQualityTrend",{enumerable:!0,get:function(){return kde.calculateQualityTrend}});Object.defineProperty(C,"scoreSessionQuality",{enumerable:!0,get:function(){return kde.scoreSessionQuality}});var ctt=pue();Object.defineProperty(C,"calculateCodeImpact",{enumerable:!0,get:function(){return ctt.calculateCodeImpact}});var Pde=Y_();Object.defineProperty(C,"classifyCostProvenance",{enumerable:!0,get:function(){return Pde.classifyCostProvenance}});Object.defineProperty(C,"describeCostProvenance",{enumerable:!0,get:function(){return Pde.describeCostProvenance}});var Rde=hue();Object.defineProperty(C,"calculateCompactionLedger",{enumerable:!0,get:function(){return Rde.calculateCompactionLedger}});Object.defineProperty(C,"formatCompactionLedger",{enumerable:!0,get:function(){return Rde.formatCompactionLedger}});var EN=Sue();Object.defineProperty(C,"generateHtmlReport",{enumerable:!0,get:function(){return EN.generateHtmlReport}});Object.defineProperty(C,"parseTranscript",{enumerable:!0,get:function(){return EN.parseTranscript}});Object.defineProperty(C,"parseTranscriptFromEvents",{enumerable:!0,get:function(){return EN.parseTranscriptFromEvents}});Object.defineProperty(C,"openInBrowser",{enumerable:!0,get:function(){return EN.openInBrowser}});var Mde=$x();Object.defineProperty(C,"readActiveCredentials",{enumerable:!0,get:function(){return Mde.readActiveCredentials}});Object.defineProperty(C,"writeActiveCredentials",{enumerable:!0,get:function(){return Mde.writeActiveCredentials}});var Qde=jx();Object.defineProperty(C,"readClaudeMaxCredentials",{enumerable:!0,get:function(){return Qde.readClaudeMaxCredentials}});Object.defineProperty(C,"readClaudeMaxAccessTokenSync",{enumerable:!0,get:function(){return Qde.readClaudeMaxAccessTokenSync}});var ltt=Jue();Object.defineProperty(C,"ensureDefaultAccounts",{enumerable:!0,get:function(){return ltt.ensureDefaultAccounts}});var Tl=Iy();Object.defineProperty(C,"readAccountRegistry",{enumerable:!0,get:function(){return Tl.readAccountRegistry}});Object.defineProperty(C,"writeAccountRegistry",{enumerable:!0,get:function(){return Tl.writeAccountRegistry}});Object.defineProperty(C,"readActiveClaudeAccount",{enumerable:!0,get:function(){return Tl.readActiveClaudeAccount}});Object.defineProperty(C,"addCurrentAccount",{enumerable:!0,get:function(){return Tl.addCurrentAccount}});Object.defineProperty(C,"switchToAccount",{enumerable:!0,get:function(){return Tl.switchToAccount}});Object.defineProperty(C,"resolveActiveClaudeHome",{enumerable:!0,get:function(){return Tl.resolveActiveClaudeHome}});Object.defineProperty(C,"applyActiveClaudeToLiveHome",{enumerable:!0,get:function(){return Tl.applyActiveClaudeToLiveHome}});Object.defineProperty(C,"reconcileClaudeAuthState",{enumerable:!0,get:function(){return Tl.reconcileClaudeAuthState}});Object.defineProperty(C,"removeAccount",{enumerable:!0,get:function(){return Tl.removeAccount}});Object.defineProperty(C,"listAccounts",{enumerable:!0,get:function(){return Tl.listAccounts}});Object.defineProperty(C,"getActiveAccount",{enumerable:!0,get:function(){return Tl.getActiveAccount}});Object.defineProperty(C,"resolveActiveClaudeAccount",{enumerable:!0,get:function(){return Tl.resolveActiveClaudeAccount}});Object.defineProperty(C,"isMultiAccountEnabled",{enumerable:!0,get:function(){return Tl.isMultiAccountEnabled}});var th=_3();Object.defineProperty(C,"beginAccountLogin",{enumerable:!0,get:function(){return th.beginAccountLogin}});Object.defineProperty(C,"getAccountLoginStatus",{enumerable:!0,get:function(){return th.getAccountLoginStatus}});Object.defineProperty(C,"getAccountLoginStatusAsync",{enumerable:!0,get:function(){return th.getAccountLoginStatusAsync}});Object.defineProperty(C,"finalizeAccountLogin",{enumerable:!0,get:function(){return th.finalizeAccountLogin}});Object.defineProperty(C,"finalizeAccountLoginAsync",{enumerable:!0,get:function(){return th.finalizeAccountLoginAsync}});Object.defineProperty(C,"spawnAccountLogin",{enumerable:!0,get:function(){return th.spawnAccountLogin}});Object.defineProperty(C,"switchAccount",{enumerable:!0,get:function(){return th.switchAccount}});Object.defineProperty(C,"switchAccountAsync",{enumerable:!0,get:function(){return th.switchAccountAsync}});Object.defineProperty(C,"listAllAccounts",{enumerable:!0,get:function(){return th.listAllAccounts}});Object.defineProperty(C,"resolveClaudeLoginCommand",{enumerable:!0,get:function(){return th.resolveClaudeLoginCommand}});var $g=Hm();Object.defineProperty(C,"getAccountsDir",{enumerable:!0,get:function(){return $g.getAccountsDir}});Object.defineProperty(C,"readSavedAccountRegistry",{enumerable:!0,get:function(){return $g.readSavedAccountRegistry}});Object.defineProperty(C,"writeSavedAccountRegistry",{enumerable:!0,get:function(){return $g.writeSavedAccountRegistry}});Object.defineProperty(C,"listSavedAccountProfiles",{enumerable:!0,get:function(){return $g.listSavedAccountProfiles}});Object.defineProperty(C,"getActiveSavedAccount",{enumerable:!0,get:function(){return $g.getActiveSavedAccount}});Object.defineProperty(C,"upsertSavedAccountProfile",{enumerable:!0,get:function(){return $g.upsertSavedAccountProfile}});Object.defineProperty(C,"setActiveSavedAccount",{enumerable:!0,get:function(){return $g.setActiveSavedAccount}});Object.defineProperty(C,"replaceSavedAccountProfiles",{enumerable:!0,get:function(){return $g.replaceSavedAccountProfiles}});Object.defineProperty(C,"removeSavedAccountProfile",{enumerable:!0,get:function(){return $g.removeSavedAccountProfile}});var dtt=Hm();Object.defineProperty(C,"ACCOUNT_PROVIDER_IDS",{enumerable:!0,get:function(){return dtt.ACCOUNT_PROVIDER_IDS}});var ftt=Fx();Object.defineProperty(C,"getActiveAccountStatus",{enumerable:!0,get:function(){return ftt.getActiveAccountStatus}});var ptt=qx();Object.defineProperty(C,"onAccountsChanged",{enumerable:!0,get:function(){return ptt.onAccountsChanged}});var FC=Nx();Object.defineProperty(C,"getClaudeProfilesDir",{enumerable:!0,get:function(){return FC.getClaudeProfilesDir}});Object.defineProperty(C,"getClaudeProfileHome",{enumerable:!0,get:function(){return FC.getClaudeProfileHome}});Object.defineProperty(C,"claudeKeychainSuffix",{enumerable:!0,get:function(){return FC.claudeKeychainSuffix}});Object.defineProperty(C,"claudeKeychainService",{enumerable:!0,get:function(){return FC.claudeKeychainService}});Object.defineProperty(C,"isClaudeProfileAuthenticated",{enumerable:!0,get:function(){return FC.isClaudeProfileAuthenticated}});Object.defineProperty(C,"readClaudeProfileIdentity",{enumerable:!0,get:function(){return FC.readClaudeProfileIdentity}});var mu=Sc();Object.defineProperty(C,"getCodexProfilesDir",{enumerable:!0,get:function(){return mu.getCodexProfilesDir}});Object.defineProperty(C,"getCodexProfileHome",{enumerable:!0,get:function(){return mu.getCodexProfileHome}});Object.defineProperty(C,"getCodexMonitoringHomes",{enumerable:!0,get:function(){return mu.getCodexMonitoringHomes}});Object.defineProperty(C,"getSystemCodexHome",{enumerable:!0,get:function(){return mu.getSystemCodexHome}});Object.defineProperty(C,"listCodexAccounts",{enumerable:!0,get:function(){return mu.listCodexAccounts}});Object.defineProperty(C,"getActiveCodexAccount",{enumerable:!0,get:function(){return mu.getActiveCodexAccount}});Object.defineProperty(C,"resolveActiveCodexAccount",{enumerable:!0,get:function(){return mu.resolveActiveCodexAccount}});Object.defineProperty(C,"resolveSidekickCodexHome",{enumerable:!0,get:function(){return mu.resolveSidekickCodexHome}});Object.defineProperty(C,"getCodexExecutionEnv",{enumerable:!0,get:function(){return mu.getCodexExecutionEnv}});Object.defineProperty(C,"prepareCodexAccount",{enumerable:!0,get:function(){return mu.prepareCodexAccount}});Object.defineProperty(C,"prepareCodexAccountAsync",{enumerable:!0,get:function(){return mu.prepareCodexAccountAsync}});Object.defineProperty(C,"finalizeCodexAccount",{enumerable:!0,get:function(){return mu.finalizeCodexAccount}});Object.defineProperty(C,"finalizeCodexAccountAsync",{enumerable:!0,get:function(){return mu.finalizeCodexAccountAsync}});Object.defineProperty(C,"switchToCodexAccount",{enumerable:!0,get:function(){return mu.switchToCodexAccount}});Object.defineProperty(C,"switchToCodexAccountAsync",{enumerable:!0,get:function(){return mu.switchToCodexAccountAsync}});Object.defineProperty(C,"removeCodexAccount",{enumerable:!0,get:function(){return mu.removeCodexAccount}});var UC=Ace();Object.defineProperty(C,"setTerminalActiveProfile",{enumerable:!0,get:function(){return UC.setTerminalActiveProfile}});Object.defineProperty(C,"installShellHook",{enumerable:!0,get:function(){return UC.installShellHook}});Object.defineProperty(C,"uninstallShellHook",{enumerable:!0,get:function(){return UC.uninstallShellHook}});Object.defineProperty(C,"isShellHookInstalled",{enumerable:!0,get:function(){return UC.isShellHookInstalled}});Object.defineProperty(C,"writeLauncher",{enumerable:!0,get:function(){return UC.writeLauncher}});Object.defineProperty(C,"removeLauncher",{enumerable:!0,get:function(){return UC.removeLauncher}});var Fq=xce();Object.defineProperty(C,"DEFAULT_AUTO_SWITCH_CONFIG",{enumerable:!0,get:function(){return Fq.DEFAULT_AUTO_SWITCH_CONFIG}});Object.defineProperty(C,"decideAutoSwitch",{enumerable:!0,get:function(){return Fq.decideAutoSwitch}});Object.defineProperty(C,"AutoSwitchController",{enumerable:!0,get:function(){return Fq.AutoSwitchController}});var LC=vd();Object.defineProperty(C,"FIVE_HOUR_WINDOW_MS",{enumerable:!0,get:function(){return LC.FIVE_HOUR_WINDOW_MS}});Object.defineProperty(C,"QUOTA_PROVIDER_IDS",{enumerable:!0,get:function(){return LC.QUOTA_PROVIDER_IDS}});Object.defineProperty(C,"SEVEN_DAY_WINDOW_MS",{enumerable:!0,get:function(){return LC.SEVEN_DAY_WINDOW_MS}});Object.defineProperty(C,"fetchQuota",{enumerable:!0,get:function(){return LC.fetchQuota}});Object.defineProperty(C,"projectQuotaWindow",{enumerable:!0,get:function(){return LC.projectQuotaWindow}});Object.defineProperty(C,"withQuotaProjections",{enumerable:!0,get:function(){return LC.withQuotaProjections}});var mtt=UQ();Object.defineProperty(C,"describeQuotaFailure",{enumerable:!0,get:function(){return mtt.describeQuotaFailure}});var htt=Bce();Object.defineProperty(C,"QuotaPoller",{enumerable:!0,get:function(){return htt.QuotaPoller}});var Nde=Rg();Object.defineProperty(C,"readQuotaSnapshot",{enumerable:!0,get:function(){return Nde.readQuotaSnapshot}});Object.defineProperty(C,"writeQuotaSnapshot",{enumerable:!0,get:function(){return Nde.writeQuotaSnapshot}});var gtt=Xce();Object.defineProperty(C,"resolveQuota",{enumerable:!0,get:function(){return gtt.resolveQuota}});var CN=vd();Object.defineProperty(C,"classifyQuotaFreshness",{enumerable:!0,get:function(){return CN.classifyQuotaFreshness}});Object.defineProperty(C,"formatQuotaAge",{enumerable:!0,get:function(){return CN.formatQuotaAge}});Object.defineProperty(C,"QUOTA_AGING_MAX_AGE_MS",{enumerable:!0,get:function(){return CN.QUOTA_AGING_MAX_AGE_MS}});Object.defineProperty(C,"QUOTA_FRESH_MAX_AGE_MS",{enumerable:!0,get:function(){return CN.QUOTA_FRESH_MAX_AGE_MS}});var Uq=tle();Object.defineProperty(C,"DEFAULT_QUOTA_THRESHOLDS",{enumerable:!0,get:function(){return Uq.DEFAULT_QUOTA_THRESHOLDS}});Object.defineProperty(C,"describeQuotaThresholdAlert",{enumerable:!0,get:function(){return Uq.describeQuotaThresholdAlert}});Object.defineProperty(C,"evaluateQuotaThresholds",{enumerable:!0,get:function(){return Uq.evaluateQuotaThresholds}});var $de=eq();Object.defineProperty(C,"parseClaudeStatuslinePayload",{enumerable:!0,get:function(){return $de.parseClaudeStatuslinePayload}});Object.defineProperty(C,"quotaFromStatuslinePayload",{enumerable:!0,get:function(){return $de.quotaFromStatuslinePayload}});var aB=JQ();Object.defineProperty(C,"appendQuotaHistorySample",{enumerable:!0,get:function(){return aB.appendQuotaHistorySample}});Object.defineProperty(C,"readQuotaHistoryRange",{enumerable:!0,get:function(){return aB.readQuotaHistoryRange}});Object.defineProperty(C,"readQuotaHistoryDailyBuckets",{enumerable:!0,get:function(){return aB.readQuotaHistoryDailyBuckets}});Object.defineProperty(C,"pruneQuotaHistory",{enumerable:!0,get:function(){return aB.pruneQuotaHistory}});Object.defineProperty(C,"getWorkspaceIdFromPath",{enumerable:!0,get:function(){return aB.getWorkspaceIdFromPath}});var HC=qQ();Object.defineProperty(C,"fetchCodexResetCreditsFromApi",{enumerable:!0,get:function(){return HC.fetchCodexResetCreditsFromApi}});Object.defineProperty(C,"fetchCodexQuotaFromApi",{enumerable:!0,get:function(){return HC.fetchCodexQuotaFromApi}});Object.defineProperty(C,"quotaFromCodexRateLimits",{enumerable:!0,get:function(){return HC.quotaFromCodexRateLimits}});Object.defineProperty(C,"readLatestCodexQuotaFromRollouts",{enumerable:!0,get:function(){return HC.readLatestCodexQuotaFromRollouts}});Object.defineProperty(C,"resolveCodexQuota",{enumerable:!0,get:function(){return HC.resolveCodexQuota}});Object.defineProperty(C,"resolveCodexQuotaFromLocalSources",{enumerable:!0,get:function(){return HC.resolveCodexQuotaFromLocalSources}});var Att=uq();Object.defineProperty(C,"CodexQuotaWatcher",{enumerable:!0,get:function(){return Att.CodexQuotaWatcher}});var IN=G3();Object.defineProperty(C,"fetchZaiQuotaFromApi",{enumerable:!0,get:function(){return IN.fetchZaiQuotaFromApi}});Object.defineProperty(C,"quotaStateFromZaiQuotaLimitPayload",{enumerable:!0,get:function(){return IN.quotaStateFromZaiQuotaLimitPayload}});Object.defineProperty(C,"readZaiCredentials",{enumerable:!0,get:function(){return IN.readZaiCredentials}});Object.defineProperty(C,"resolveZaiQuota",{enumerable:!0,get:function(){return IN.resolveZaiQuota}});var ytt=Sle();Object.defineProperty(C,"MultiProviderQuotaService",{enumerable:!0,get:function(){return ytt.MultiProviderQuotaService}});var vtt=Ele();Object.defineProperty(C,"RUNTIME_QUOTA_PROVIDER_IDS",{enumerable:!0,get:function(){return vtt.RUNTIME_QUOTA_PROVIDER_IDS}});var jde=rx();Object.defineProperty(C,"BurnRateCalculator",{enumerable:!0,get:function(){return jde.BurnRateCalculator}});Object.defineProperty(C,"estimateTimeToQuota",{enumerable:!0,get:function(){return jde.estimateTimeToQuota}});var zde=mq();Object.defineProperty(C,"formatStatusline",{enumerable:!0,get:function(){return zde.formatStatusline}});Object.defineProperty(C,"selectStatuslineAccount",{enumerable:!0,get:function(){return zde.selectStatuslineAccount}});var Lq=Fp();Object.defineProperty(C,"getModelContextWindowSize",{enumerable:!0,get:function(){return Lq.getModelContextWindowSize}});Object.defineProperty(C,"resolveModelContextWindow",{enumerable:!0,get:function(){return Lq.resolveModelContextWindow}});Object.defineProperty(C,"DEFAULT_CONTEXT_WINDOW",{enumerable:!0,get:function(){return Lq.DEFAULT_CONTEXT_WINDOW}});var Bc=OT();Object.defineProperty(C,"parseModelId",{enumerable:!0,get:function(){return Bc.parseModelId}});Object.defineProperty(C,"getModelPricing",{enumerable:!0,get:function(){return Bc.getModelPricing}});Object.defineProperty(C,"resolveModelPricing",{enumerable:!0,get:function(){return Bc.resolveModelPricing}});Object.defineProperty(C,"getModelInfo",{enumerable:!0,get:function(){return Bc.getModelInfo}});Object.defineProperty(C,"calculateCost",{enumerable:!0,get:function(){return Bc.calculateCost}});Object.defineProperty(C,"calculateCostWithPricing",{enumerable:!0,get:function(){return Bc.calculateCostWithPricing}});Object.defineProperty(C,"calculateCostWithProvenance",{enumerable:!0,get:function(){return Bc.calculateCostWithProvenance}});Object.defineProperty(C,"mergeCostSources",{enumerable:!0,get:function(){return Bc.mergeCostSources}});Object.defineProperty(C,"shortModelName",{enumerable:!0,get:function(){return Bc.shortModelName}});Object.defineProperty(C,"getModelDisplayInfo",{enumerable:!0,get:function(){return Bc.getModelDisplayInfo}});Object.defineProperty(C,"compareModelIds",{enumerable:!0,get:function(){return Bc.compareModelIds}});Object.defineProperty(C,"sortModelIds",{enumerable:!0,get:function(){return Bc.sortModelIds}});Object.defineProperty(C,"formatCost",{enumerable:!0,get:function(){return Bc.formatCost}});Object.defineProperty(C,"MODEL_PROVIDER_IDS",{enumerable:!0,get:function(){return Bc.MODEL_PROVIDER_IDS}});var uB=wle();Object.defineProperty(C,"exportResolvedModelCatalog",{enumerable:!0,get:function(){return uB.exportResolvedModelCatalog}});Object.defineProperty(C,"importResolvedModelCatalog",{enumerable:!0,get:function(){return uB.importResolvedModelCatalog}});Object.defineProperty(C,"registerModelAlias",{enumerable:!0,get:function(){return uB.registerModelAlias}});Object.defineProperty(C,"resolveModelAlias",{enumerable:!0,get:function(){return uB.resolveModelAlias}});Object.defineProperty(C,"RESOLVED_MODEL_CATALOG_SCHEMA_VERSION",{enumerable:!0,get:function(){return uB.RESOLVED_MODEL_CATALOG_SCHEMA_VERSION}});var wN=yq();Object.defineProperty(C,"hydratePricingCatalog",{enumerable:!0,get:function(){return wN.hydratePricingCatalog}});Object.defineProperty(C,"normalizeLiteLlmCatalog",{enumerable:!0,get:function(){return wN.normalizeLiteLlmCatalog}});Object.defineProperty(C,"normalizeLiteLlmContextWindows",{enumerable:!0,get:function(){return wN.normalizeLiteLlmContextWindows}});Object.defineProperty(C,"LITELLM_CATALOG_URL",{enumerable:!0,get:function(){return wN.LITELLM_CATALOG_URL}});var Hq=fQ();Object.defineProperty(C,"loadObservedContextWindows",{enumerable:!0,get:function(){return Hq.loadObservedContextWindows}});Object.defineProperty(C,"recordObservedContextWindow",{enumerable:!0,get:function(){return Hq.recordObservedContextWindow}});Object.defineProperty(C,"getObservedContextWindowPath",{enumerable:!0,get:function(){return Hq.getObservedContextWindowPath}});var _tt=kle();Object.defineProperty(C,"extractTokenUsage",{enumerable:!0,get:function(){return _tt.extractTokenUsage}});var qq=Yx();Object.defineProperty(C,"extractUrls",{enumerable:!0,get:function(){return qq.extractUrls}});Object.defineProperty(C,"extractFilePaths",{enumerable:!0,get:function(){return qq.extractFilePaths}});Object.defineProperty(C,"extractCommands",{enumerable:!0,get:function(){return qq.extractCommands}});var Fde=bq();Object.defineProperty(C,"readClaudeAssets",{enumerable:!0,get:function(){return Fde.readClaudeAssets}});Object.defineProperty(C,"claudeSessions",{enumerable:!0,get:function(){return Fde.claudeSessions}});var Ude=Eq();Object.defineProperty(C,"readCodexAssets",{enumerable:!0,get:function(){return Ude.readCodexAssets}});Object.defineProperty(C,"codexSessions",{enumerable:!0,get:function(){return Ude.codexSessions}});var btt=Hle();Object.defineProperty(C,"gatherAssetsForCwd",{enumerable:!0,get:function(){return btt.gatherAssetsForCwd}});var Lde=lR();Object.defineProperty(C,"categorizeError",{enumerable:!0,get:function(){return Lde.categorizeError}});Object.defineProperty(C,"extractErrorMessage",{enumerable:!0,get:function(){return Lde.extractErrorMessage}});var Zq=Vle();Object.defineProperty(C,"extractToolCall",{enumerable:!0,get:function(){return Zq.extractToolCall}});Object.defineProperty(C,"extractToolCalls",{enumerable:!0,get:function(){return Zq.extractToolCalls}});Object.defineProperty(C,"ToolCallTracker",{enumerable:!0,get:function(){return Zq.ToolCallTracker}});var cB=QM();Object.defineProperty(C,"messageUsageSchema",{enumerable:!0,get:function(){return cB.messageUsageSchema}});Object.defineProperty(C,"sessionMessageSchema",{enumerable:!0,get:function(){return cB.sessionMessageSchema}});Object.defineProperty(C,"sessionEventSchema",{enumerable:!0,get:function(){return cB.sessionEventSchema}});Object.defineProperty(C,"permissionModeSchema",{enumerable:!0,get:function(){return cB.permissionModeSchema}});Object.defineProperty(C,"extractSessionEvents",{enumerable:!0,get:function(){return cB.extractSessionEvents}});var Fu=Yle();Object.defineProperty(C,"quotaWindowSchema",{enumerable:!0,get:function(){return Fu.quotaWindowSchema}});Object.defineProperty(C,"quotaStateSchema",{enumerable:!0,get:function(){return Fu.quotaStateSchema}});Object.defineProperty(C,"quotaFailureKindSchema",{enumerable:!0,get:function(){return Fu.quotaFailureKindSchema}});Object.defineProperty(C,"quotaProviderIdSchema",{enumerable:!0,get:function(){return Fu.quotaProviderIdSchema}});Object.defineProperty(C,"quotaSourceSchema",{enumerable:!0,get:function(){return Fu.quotaSourceSchema}});Object.defineProperty(C,"codexResetCreditSchema",{enumerable:!0,get:function(){return Fu.codexResetCreditSchema}});Object.defineProperty(C,"codexResetCreditsSnapshotSchema",{enumerable:!0,get:function(){return Fu.codexResetCreditsSnapshotSchema}});Object.defineProperty(C,"peakHoursStateSchema",{enumerable:!0,get:function(){return Fu.peakHoursStateSchema}});Object.defineProperty(C,"quotaFailureDescriptorSchema",{enumerable:!0,get:function(){return Fu.quotaFailureDescriptorSchema}});Object.defineProperty(C,"runtimeQuotaProviderSchema",{enumerable:!0,get:function(){return Fu.runtimeQuotaProviderSchema}});Object.defineProperty(C,"providerQuotaStateSchema",{enumerable:!0,get:function(){return Fu.providerQuotaStateSchema}});Object.defineProperty(C,"claudeProviderQuotaStateSchema",{enumerable:!0,get:function(){return Fu.claudeProviderQuotaStateSchema}});Object.defineProperty(C,"codexProviderQuotaStateSchema",{enumerable:!0,get:function(){return Fu.codexProviderQuotaStateSchema}});Object.defineProperty(C,"zaiProviderQuotaStateSchema",{enumerable:!0,get:function(){return Fu.zaiProviderQuotaStateSchema}});Object.defineProperty(C,"providerQuotaMapSchema",{enumerable:!0,get:function(){return Fu.providerQuotaMapSchema}});var Gq=Jle();Object.defineProperty(C,"quotaHistoryRuntimeProviderSchema",{enumerable:!0,get:function(){return Gq.quotaHistoryRuntimeProviderSchema}});Object.defineProperty(C,"quotaHistorySampleSchema",{enumerable:!0,get:function(){return Gq.quotaHistorySampleSchema}});Object.defineProperty(C,"quotaHistoryDailyBucketSchema",{enumerable:!0,get:function(){return Gq.quotaHistoryDailyBucketSchema}});var Hde=Wle();Object.defineProperty(C,"activeProviderAccountStatusSchema",{enumerable:!0,get:function(){return Hde.activeProviderAccountStatusSchema}});Object.defineProperty(C,"activeAccountStatusSchema",{enumerable:!0,get:function(){return Hde.activeAccountStatusSchema}});var yb=Xle();Object.defineProperty(C,"accountProviderIdSchema",{enumerable:!0,get:function(){return yb.accountProviderIdSchema}});Object.defineProperty(C,"accountManagerResultSchema",{enumerable:!0,get:function(){return yb.accountManagerResultSchema}});Object.defineProperty(C,"beginAccountLoginResultSchema",{enumerable:!0,get:function(){return yb.beginAccountLoginResultSchema}});Object.defineProperty(C,"accountLoginStatusSchema",{enumerable:!0,get:function(){return yb.accountLoginStatusSchema}});Object.defineProperty(C,"accountEntrySchema",{enumerable:!0,get:function(){return yb.accountEntrySchema}});Object.defineProperty(C,"savedAccountProfileSchema",{enumerable:!0,get:function(){return yb.savedAccountProfileSchema}});Object.defineProperty(C,"listAllAccountsResultSchema",{enumerable:!0,get:function(){return yb.listAllAccountsResultSchema}});var Dd=ede();Object.defineProperty(C,"assistantTurnEventSchema",{enumerable:!0,get:function(){return Dd.assistantTurnEventSchema}});Object.defineProperty(C,"assistantTurnEventTypeSchema",{enumerable:!0,get:function(){return Dd.assistantTurnEventTypeSchema}});Object.defineProperty(C,"assistantTurnNarrationStepSchema",{enumerable:!0,get:function(){return Dd.assistantTurnNarrationStepSchema}});Object.defineProperty(C,"assistantTurnProcessSchema",{enumerable:!0,get:function(){return Dd.assistantTurnProcessSchema}});Object.defineProperty(C,"assistantTurnProcessStepSchema",{enumerable:!0,get:function(){return Dd.assistantTurnProcessStepSchema}});Object.defineProperty(C,"assistantTurnProjectionSchema",{enumerable:!0,get:function(){return Dd.assistantTurnProjectionSchema}});Object.defineProperty(C,"assistantTurnReasoningTimelineItemSchema",{enumerable:!0,get:function(){return Dd.assistantTurnReasoningTimelineItemSchema}});Object.defineProperty(C,"assistantTurnSubagentSchema",{enumerable:!0,get:function(){return Dd.assistantTurnSubagentSchema}});Object.defineProperty(C,"assistantTurnSubagentStatusSchema",{enumerable:!0,get:function(){return Dd.assistantTurnSubagentStatusSchema}});Object.defineProperty(C,"assistantTurnTimelineItemSchema",{enumerable:!0,get:function(){return Dd.assistantTurnTimelineItemSchema}});Object.defineProperty(C,"assistantTurnToolGroupStepSchema",{enumerable:!0,get:function(){return Dd.assistantTurnToolGroupStepSchema}});Object.defineProperty(C,"assistantTurnToolRefSchema",{enumerable:!0,get:function(){return Dd.assistantTurnToolRefSchema}});var Vq=wq();Object.defineProperty(C,"fetchProviderStatus",{enumerable:!0,get:function(){return Vq.fetchProviderStatus}});Object.defineProperty(C,"fetchOpenAIStatus",{enumerable:!0,get:function(){return Vq.fetchOpenAIStatus}});Object.defineProperty(C,"toLegacyProviderStatus",{enumerable:!0,get:function(){return Vq.toLegacyProviderStatus}});var Kq=cde();Object.defineProperty(C,"formatHealthReport",{enumerable:!0,get:function(){return Kq.formatHealthReport}});Object.defineProperty(C,"getSessionDiagnostics",{enumerable:!0,get:function(){return Kq.getSessionDiagnostics}});Object.defineProperty(C,"runDoctor",{enumerable:!0,get:function(){return Kq.runDoctor}});var jg=lq();Object.defineProperty(C,"_resetPeakHoursCache",{enumerable:!0,get:function(){return jg._resetPeakHoursCache}});Object.defineProperty(C,"createPeakHoursNotApplicableState",{enumerable:!0,get:function(){return jg.createPeakHoursNotApplicableState}});Object.defineProperty(C,"DEFAULT_PEAK_HOURS_TIMEOUT_MS",{enumerable:!0,get:function(){return jg.DEFAULT_PEAK_HOURS_TIMEOUT_MS}});Object.defineProperty(C,"fetchPeakHoursStatus",{enumerable:!0,get:function(){return jg.fetchPeakHoursStatus}});Object.defineProperty(C,"getScheduledPeakHoursState",{enumerable:!0,get:function(){return jg.getScheduledPeakHoursState}});Object.defineProperty(C,"isClaudeCodeSessionProvider",{enumerable:!0,get:function(){return jg.isClaudeCodeSessionProvider}});Object.defineProperty(C,"PEAK_HOURS_CACHE_MS",{enumerable:!0,get:function(){return jg.PEAK_HOURS_CACHE_MS}});Object.defineProperty(C,"PEAK_HOURS_DESCRIPTION",{enumerable:!0,get:function(){return jg.PEAK_HOURS_DESCRIPTION}});Object.defineProperty(C,"scopePeakHoursToSessionProvider",{enumerable:!0,get:function(){return jg.scopePeakHoursToSessionProvider}});var Yq=fde();Object.defineProperty(C,"FAILING_TOOL_TREND_ARROWS",{enumerable:!0,get:function(){return Yq.FAILING_TOOL_TREND_ARROWS}});Object.defineProperty(C,"failingToolTrend",{enumerable:!0,get:function(){return Yq.failingToolTrend}});Object.defineProperty(C,"mergeFailingToolWindows",{enumerable:!0,get:function(){return Yq.mergeFailingToolWindows}});var Stt=gde();Object.defineProperty(C,"diagnoseProviderFailure",{enumerable:!0,get:function(){return Stt.diagnoseProviderFailure}});var Ett=lN();Object.defineProperty(C,"fetchProviderServiceStatus",{enumerable:!0,get:function(){return Ett.fetchProviderServiceStatus}})});var Kde=Q(ke=>{"use strict";Object.defineProperty(ke,"__esModule",{value:!0});ke.readSessionPreviewAsync=ke.readSessionPreview=ke.listSessionPreviewsAsync=ke.listSessionPreviews=ke.readCodexHistory=ke.walkRolloutFilesAsync=ke.walkRolloutFiles=ke.findCodexRolloutFile=ke.weekKey=ke.usageBucketKey=ke.summarizeUsageRows=ke.bucketUsage=ke.importSessionHistory=ke.ACTIVE_SESSION_MTIME_THRESHOLD_MS=ke.sessionSummaryFromStats=ke.removeSessionSummary=ke.markFileImported=ke.isFileImported=ke.applySessionSummary=ke.pruneUsageCache=ke.getUsageCacheDir=ke.collectUsageEvents=ke.USAGE_CACHE_VERSION=ke.MAX_USAGE_CACHE_FILES=ke.findActiveBillingBlock=ke.computeBillingBlocks=ke.BILLING_BLOCK_DURATION_MS=ke.writeStateFile=ke.readStateFile=ke.quotaToStateFile=ke.getStateFilePath=ke.billingBlockToStateFile=ke.STATE_FILE_SCHEMA_VERSION=ke.STATE_FILE_NAME=ke.sessionFingerprintParts=ke.fingerprintString=ke.readSessionReportInputs=ke.readSessionFileStats=ke.providerContextSizeFn=ke.firstUserPrompt=ke.computeSessionFileStats=ke.readSessionTranscript=ke.listRecentSessions=ke.getObservedContextWindowPath=ke.recordObservedContextWindow=ke.loadObservedContextWindows=ke.LITELLM_CATALOG_URL=ke.normalizeLiteLlmContextWindows=ke.normalizeLiteLlmCatalog=ke.hydratePricingCatalog=void 0;ke.fetchProviderServiceStatus=ke.fileFingerprintParts=ke.fileFingerprint=ke.observedSessionSourceFromProvider=ke.ObservedSessionCollector=void 0;var DN=yq();Object.defineProperty(ke,"hydratePricingCatalog",{enumerable:!0,get:function(){return DN.hydratePricingCatalog}});Object.defineProperty(ke,"normalizeLiteLlmCatalog",{enumerable:!0,get:function(){return DN.normalizeLiteLlmCatalog}});Object.defineProperty(ke,"normalizeLiteLlmContextWindows",{enumerable:!0,get:function(){return DN.normalizeLiteLlmContextWindows}});Object.defineProperty(ke,"LITELLM_CATALOG_URL",{enumerable:!0,get:function(){return DN.LITELLM_CATALOG_URL}});var Jq=fQ();Object.defineProperty(ke,"loadObservedContextWindows",{enumerable:!0,get:function(){return Jq.loadObservedContextWindows}});Object.defineProperty(ke,"recordObservedContextWindow",{enumerable:!0,get:function(){return Jq.recordObservedContextWindow}});Object.defineProperty(ke,"getObservedContextWindowPath",{enumerable:!0,get:function(){return Jq.getObservedContextWindowPath}});var qde=IL();Object.defineProperty(ke,"listRecentSessions",{enumerable:!0,get:function(){return qde.listRecentSessions}});Object.defineProperty(ke,"readSessionTranscript",{enumerable:!0,get:function(){return qde.readSessionTranscript}});var TN=mg();Object.defineProperty(ke,"computeSessionFileStats",{enumerable:!0,get:function(){return TN.computeSessionFileStats}});Object.defineProperty(ke,"firstUserPrompt",{enumerable:!0,get:function(){return TN.firstUserPrompt}});Object.defineProperty(ke,"providerContextSizeFn",{enumerable:!0,get:function(){return TN.providerContextSizeFn}});Object.defineProperty(ke,"readSessionFileStats",{enumerable:!0,get:function(){return TN.readSessionFileStats}});var Ctt=E4();Object.defineProperty(ke,"readSessionReportInputs",{enumerable:!0,get:function(){return Ctt.readSessionReportInputs}});var Zde=tC();Object.defineProperty(ke,"fingerprintString",{enumerable:!0,get:function(){return Zde.fingerprintString}});Object.defineProperty(ke,"sessionFingerprintParts",{enumerable:!0,get:function(){return Zde.sessionFingerprintParts}});var vb=$M();Object.defineProperty(ke,"STATE_FILE_NAME",{enumerable:!0,get:function(){return vb.STATE_FILE_NAME}});Object.defineProperty(ke,"STATE_FILE_SCHEMA_VERSION",{enumerable:!0,get:function(){return vb.STATE_FILE_SCHEMA_VERSION}});Object.defineProperty(ke,"billingBlockToStateFile",{enumerable:!0,get:function(){return vb.billingBlockToStateFile}});Object.defineProperty(ke,"getStateFilePath",{enumerable:!0,get:function(){return vb.getStateFilePath}});Object.defineProperty(ke,"quotaToStateFile",{enumerable:!0,get:function(){return vb.quotaToStateFile}});Object.defineProperty(ke,"readStateFile",{enumerable:!0,get:function(){return vb.readStateFile}});Object.defineProperty(ke,"writeStateFile",{enumerable:!0,get:function(){return vb.writeStateFile}});var Wq=R4();Object.defineProperty(ke,"BILLING_BLOCK_DURATION_MS",{enumerable:!0,get:function(){return Wq.BILLING_BLOCK_DURATION_MS}});Object.defineProperty(ke,"computeBillingBlocks",{enumerable:!0,get:function(){return Wq.computeBillingBlocks}});Object.defineProperty(ke,"findActiveBillingBlock",{enumerable:!0,get:function(){return Wq.findActiveBillingBlock}});var lB=z4();Object.defineProperty(ke,"MAX_USAGE_CACHE_FILES",{enumerable:!0,get:function(){return lB.MAX_USAGE_CACHE_FILES}});Object.defineProperty(ke,"USAGE_CACHE_VERSION",{enumerable:!0,get:function(){return lB.USAGE_CACHE_VERSION}});Object.defineProperty(ke,"collectUsageEvents",{enumerable:!0,get:function(){return lB.collectUsageEvents}});Object.defineProperty(ke,"getUsageCacheDir",{enumerable:!0,get:function(){return lB.getUsageCacheDir}});Object.defineProperty(ke,"pruneUsageCache",{enumerable:!0,get:function(){return lB.pruneUsageCache}});var dB=FM();Object.defineProperty(ke,"applySessionSummary",{enumerable:!0,get:function(){return dB.applySessionSummary}});Object.defineProperty(ke,"isFileImported",{enumerable:!0,get:function(){return dB.isFileImported}});Object.defineProperty(ke,"markFileImported",{enumerable:!0,get:function(){return dB.markFileImported}});Object.defineProperty(ke,"removeSessionSummary",{enumerable:!0,get:function(){return dB.removeSessionSummary}});Object.defineProperty(ke,"sessionSummaryFromStats",{enumerable:!0,get:function(){return dB.sessionSummaryFromStats}});var Gde=H4();Object.defineProperty(ke,"ACTIVE_SESSION_MTIME_THRESHOLD_MS",{enumerable:!0,get:function(){return Gde.ACTIVE_SESSION_MTIME_THRESHOLD_MS}});Object.defineProperty(ke,"importSessionHistory",{enumerable:!0,get:function(){return Gde.importSessionHistory}});var xN=q4();Object.defineProperty(ke,"bucketUsage",{enumerable:!0,get:function(){return xN.bucketUsage}});Object.defineProperty(ke,"summarizeUsageRows",{enumerable:!0,get:function(){return xN.summarizeUsageRows}});Object.defineProperty(ke,"usageBucketKey",{enumerable:!0,get:function(){return xN.usageBucketKey}});Object.defineProperty(ke,"weekKey",{enumerable:!0,get:function(){return xN.weekKey}});var Itt=AC();Object.defineProperty(ke,"findCodexRolloutFile",{enumerable:!0,get:function(){return Itt.findCodexRolloutFile}});var Vde=wx();Object.defineProperty(ke,"walkRolloutFiles",{enumerable:!0,get:function(){return Vde.walkRolloutFiles}});Object.defineProperty(ke,"walkRolloutFilesAsync",{enumerable:!0,get:function(){return Vde.walkRolloutFilesAsync}});var wtt=x6();Object.defineProperty(ke,"readCodexHistory",{enumerable:!0,get:function(){return wtt.readCodexHistory}});var BN=ox();Object.defineProperty(ke,"listSessionPreviews",{enumerable:!0,get:function(){return BN.listSessionPreviews}});Object.defineProperty(ke,"listSessionPreviewsAsync",{enumerable:!0,get:function(){return BN.listSessionPreviewsAsync}});Object.defineProperty(ke,"readSessionPreview",{enumerable:!0,get:function(){return BN.readSessionPreview}});Object.defineProperty(ke,"readSessionPreviewAsync",{enumerable:!0,get:function(){return BN.readSessionPreviewAsync}});var ON=qM();Object.defineProperty(ke,"ObservedSessionCollector",{enumerable:!0,get:function(){return ON.ObservedSessionCollector}});Object.defineProperty(ke,"observedSessionSourceFromProvider",{enumerable:!0,get:function(){return ON.observedSessionSourceFromProvider}});Object.defineProperty(ke,"fileFingerprint",{enumerable:!0,get:function(){return ON.fileFingerprint}});Object.defineProperty(ke,"fileFingerprintParts",{enumerable:!0,get:function(){return ON.fileFingerprintParts}});var Dtt=lN();Object.defineProperty(ke,"fetchProviderServiceStatus",{enumerable:!0,get:function(){return Dtt.fetchProviderServiceStatus}})});function xtt(t){return t===void 0||t.startsWith("-")?!1:!Ttt.has(t)}function Btt(t=process.argv.slice(2),e=process.env){if(t.includes("--offline"))return!0;let n=e.SIDEKICK_OFFLINE;return n==="1"||n==="true"}function Jde(t){return kN||(kN=(async()=>{(0,PN.loadObservedContextWindows)().catch(()=>{}),xtt(t)&&await Promise.all([(0,PN.hydratePricingCatalog)({offline:Btt()}).catch(()=>{}),(0,Yde.ensureDefaultAccounts)().catch(()=>{})])})(),kN)}var Yde,PN,Ttt,kN,Wde=F(()=>{"use strict";Yde=me(on(),1),PN=me(Kde(),1),Ttt=new Set(["statusline","today","history"]);kN=null});function Xq(){return new QE("--provider <id>","Session provider (default: auto)").choices(["claude-code","opencode","codex","auto"])}function Xde(){return new QE("--provider <id>","Provider to inspect (default: auto)").choices(["claude-code","opencode","codex","zai","auto"])}function efe(){return new QE("--provider <id>","Limit to a single runtime provider: claude, codex, zai (default: all)").choices(["claude","claude-code","codex","zai","z.ai"])}function tfe(){return new QE("--theme <theme>","Color theme").default("dark").choices(["dark","light"])}function nfe(){return new QE("--status <status>","Filter by status (default: all)").choices(["pending","completed","all"])}var rfe=F(()=>{"use strict";mL()});function ofe(t){return`Error: ${t instanceof Error?t.message:String(t)}
|
|
749
749
|
`}var ife=F(()=>{"use strict"});function Ptt(){let t=new Map;for(let[e,n]of Object.entries(ni)){for(let[r,o]of Object.entries(n))ni[r]={open:`\x1B[${o[0]}m`,close:`\x1B[${o[1]}m`},n[r]=ni[r],t.set(o[0],o[1]);Object.defineProperty(ni,e,{value:n,enumerable:!1})}return Object.defineProperty(ni,"codes",{value:t,enumerable:!1}),ni.color.close="\x1B[39m",ni.bgColor.close="\x1B[49m",ni.color.ansi=sfe(),ni.color.ansi256=afe(),ni.color.ansi16m=ufe(),ni.bgColor.ansi=sfe(10),ni.bgColor.ansi256=afe(10),ni.bgColor.ansi16m=ufe(10),Object.defineProperties(ni,{rgbToAnsi256:{value(e,n,r){return e===n&&n===r?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(n/255*5)+Math.round(r/255*5)},enumerable:!1},hexToRgb:{value(e){let n=/[a-f\d]{6}|[a-f\d]{3}/i.exec(e.toString(16));if(!n)return[0,0,0];let[r]=n;r.length===3&&(r=[...r].map(i=>i+i).join(""));let o=Number.parseInt(r,16);return[o>>16&255,o>>8&255,o&255]},enumerable:!1},hexToAnsi256:{value:e=>ni.rgbToAnsi256(...ni.hexToRgb(e)),enumerable:!1},ansi256ToAnsi:{value(e){if(e<8)return 30+e;if(e<16)return 90+(e-8);let n,r,o;if(e>=232)n=((e-232)*10+8)/255,r=n,o=n;else{e-=16;let c=e%36;n=Math.floor(e/36)/5,r=Math.floor(c/6)/5,o=c%6/5}let i=Math.max(n,r,o)*2;if(i===0)return 30;let s=30+(Math.round(o)<<2|Math.round(r)<<1|Math.round(n));return i===2&&(s+=60),s},enumerable:!1},rgbToAnsi:{value:(e,n,r)=>ni.ansi256ToAnsi(ni.rgbToAnsi256(e,n,r)),enumerable:!1},hexToAnsi:{value:e=>ni.ansi256ToAnsi(ni.hexToAnsi256(e)),enumerable:!1}}),ni}var sfe,afe,ufe,ni,jOt,Ott,ktt,zOt,Rtt,Lf,cfe=F(()=>{sfe=(t=0)=>e=>`\x1B[${e+t}m`,afe=(t=0)=>e=>`\x1B[${38+t};5;${e}m`,ufe=(t=0)=>(e,n,r)=>`\x1B[${38+t};2;${e};${n};${r}m`,ni={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},jOt=Object.keys(ni.modifier),Ott=Object.keys(ni.color),ktt=Object.keys(ni.bgColor),zOt=[...Ott,...ktt];Rtt=Ptt(),Lf=Rtt});import e8 from"node:process";import Mtt from"node:os";import lfe from"node:tty";function Td(t,e=globalThis.Deno?globalThis.Deno.args:e8.argv){let n=t.startsWith("-")?"":t.length===1?"-":"--",r=e.indexOf(n+t),o=e.indexOf("--");return r!==-1&&(o===-1||r<o)}function Qtt(){if("FORCE_COLOR"in ri)return ri.FORCE_COLOR==="true"?1:ri.FORCE_COLOR==="false"?0:ri.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(ri.FORCE_COLOR,10),3)}function Ntt(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function $tt(t,{streamIsTTY:e,sniffFlags:n=!0}={}){let r=Qtt();r!==void 0&&(RN=r);let o=n?RN:r;if(o===0)return 0;if(n){if(Td("color=16m")||Td("color=full")||Td("color=truecolor"))return 3;if(Td("color=256"))return 2}if("TF_BUILD"in ri&&"AGENT_NAME"in ri)return 1;if(t&&!e&&o===void 0)return 0;let i=o||0;if(ri.TERM==="dumb")return i;if(e8.platform==="win32"){let s=Mtt.release().split(".");return Number(s[0])>=10&&Number(s[2])>=10586?Number(s[2])>=14931?3:2:1}if("CI"in ri)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(s=>s in ri)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(s=>s in ri)||ri.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in ri)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(ri.TEAMCITY_VERSION)?1:0;if(ri.COLORTERM==="truecolor"||ri.TERM==="xterm-kitty"||ri.TERM==="xterm-ghostty"||ri.TERM==="wezterm")return 3;if("TERM_PROGRAM"in ri){let s=Number.parseInt((ri.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(ri.TERM_PROGRAM){case"iTerm.app":return s>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(ri.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ri.TERM)||"COLORTERM"in ri?1:i}function dfe(t,e={}){let n=$tt(t,{streamIsTTY:t&&t.isTTY,...e});return Ntt(n)}var ri,RN,jtt,ffe,pfe=F(()=>{({env:ri}=e8);Td("no-color")||Td("no-colors")||Td("color=false")||Td("color=never")?RN=0:(Td("color")||Td("colors")||Td("color=true")||Td("color=always"))&&(RN=1);jtt={stdout:dfe({isTTY:lfe.isatty(1)}),stderr:dfe({isTTY:lfe.isatty(2)})},ffe=jtt});function mfe(t,e,n){let r=t.indexOf(e);if(r===-1)return t;let o=e.length,i=0,s="";do s+=t.slice(i,r)+e+n,i=r+o,r=t.indexOf(e,i);while(r!==-1);return s+=t.slice(i),s}function hfe(t,e,n,r){let o=0,i="";do{let s=t[r-1]==="\r";i+=t.slice(o,s?r-1:r)+e+(s?`\r
|
|
750
750
|
`:`
|
|
751
751
|
`)+n,o=r+1,r=t.indexOf(`
|
|
@@ -764,7 +764,7 @@ Your code should look like:
|
|
|
764
764
|
3. You might have more than one copy of React in the same app
|
|
765
765
|
See https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.`),N}function le(){Be.asyncTransitions--}function ze(N){if(Sa===null)try{var ne=("require"+Math.random()).slice(0,7);Sa=(NN&&NN[ne]).call(NN,"timers").setImmediate}catch{Sa=function(Ue){pr===!1&&(pr=!0,typeof MessageChannel>"u"&&console.error("This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning."));var lt=new MessageChannel;lt.port1.onmessage=Ue,lt.port2.postMessage(void 0)}}return Sa(N)}function Yt(N){return 1<N.length&&typeof AggregateError=="function"?new AggregateError(N):N[0]}function St(N,ne){ne!==ys-1&&console.error("You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. "),ys=ne}function Ne(N,ne,_e){var Ue=Be.actQueue;if(Ue!==null)if(Ue.length!==0)try{nt(Ue),ze(function(){return Ne(N,ne,_e)});return}catch(lt){Be.thrownErrors.push(lt)}else Be.actQueue=null;0<Be.thrownErrors.length?(Ue=Yt(Be.thrownErrors),Be.thrownErrors.length=0,_e(Ue)):ne(N)}function nt(N){if(!Re){Re=!0;var ne=0;try{for(;ne<N.length;ne++){var _e=N[ne];do{Be.didUsePromise=!1;var Ue=_e(!1);if(Ue!==null){if(Be.didUsePromise){N[ne]=_e,N.splice(0,ne);return}_e=Ue}else break}while(!0)}N.length=0}catch(lt){N.splice(0,ne+1),Be.thrownErrors.push(lt)}finally{Re=!1}}}typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());var _t=Symbol.for("react.transitional.element"),ut=Symbol.for("react.portal"),Dt=Symbol.for("react.fragment"),jr=Symbol.for("react.strict_mode"),Ie=Symbol.for("react.profiler"),ct=Symbol.for("react.consumer"),Ct=Symbol.for("react.context"),Lt=Symbol.for("react.forward_ref"),bn=Symbol.for("react.suspense"),_i=Symbol.for("react.suspense_list"),In=Symbol.for("react.memo"),Nn=Symbol.for("react.lazy"),Ht=Symbol.for("react.activity"),Wt=Symbol.iterator,et={},Gt={isMounted:function(){return!1},enqueueForceUpdate:function(N){n(N,"forceUpdate")},enqueueReplaceState:function(N){n(N,"replaceState")},enqueueSetState:function(N){n(N,"setState")}},pn=Object.assign,It={};Object.freeze(It),r.prototype.isReactComponent={},r.prototype.setState=function(N,ne){if(typeof N!="object"&&typeof N!="function"&&N!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,N,ne,"setState")},r.prototype.forceUpdate=function(N){this.updater.enqueueForceUpdate(this,N,"forceUpdate")};var gn={isMounted:["isMounted","Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks."],replaceState:["replaceState","Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236)."]};for(wn in gn)gn.hasOwnProperty(wn)&&t(wn,gn[wn]);o.prototype=r.prototype,gn=i.prototype=new o,gn.constructor=i,pn(gn,r.prototype),gn.isPureReactComponent=!0;var Zr=Array.isArray,oo=Symbol.for("react.client.reference"),Be={H:null,A:null,T:null,S:null,actQueue:null,asyncTransitions:0,isBatchingLegacy:!1,didScheduleLegacyUpdate:!1,didUsePromise:!1,thrownErrors:[],getCurrentStack:null,recentlyCreatedOwnerStacks:0},rt=Object.prototype.hasOwnProperty,jt=console.createTask?console.createTask:function(){return null};gn={react_stack_bottom_frame:function(N){return N()}};var Pt,On,$o={},Ws=gn.react_stack_bottom_frame.bind(gn,v)(),As=jt(h(v)),Ni=!1,ba=/\/+/g,$n=typeof reportError=="function"?reportError:function(N){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var ne=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof N=="object"&&N!==null&&typeof N.message=="string"?String(N.message):String(N),error:N});if(!window.dispatchEvent(ne))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",N);return}console.error(N)},pr=!1,Sa=null,ys=0,vs=!1,Re=!1,bt=typeof queueMicrotask=="function"?function(N){queueMicrotask(function(){return queueMicrotask(N)})}:ze;gn=Object.freeze({__proto__:null,c:function(N){return ve().useMemoCache(N)}});var wn={map:Ce,forEach:function(N,ne,_e){Ce(N,function(){ne.apply(this,arguments)},_e)},count:function(N){var ne=0;return Ce(N,function(){ne++}),ne},toArray:function(N){return Ce(N,function(ne){return ne})||[]},only:function(N){if(!R(N))throw Error("React.Children.only expected to receive a single React element child.");return N}};_n.Activity=Ht,_n.Children=wn,_n.Component=r,_n.Fragment=Dt,_n.Profiler=Ie,_n.PureComponent=i,_n.StrictMode=jr,_n.Suspense=bn,_n.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=Be,_n.__COMPILER_RUNTIME=gn,_n.act=function(N){var ne=Be.actQueue,_e=ys;ys++;var Ue=Be.actQueue=ne!==null?ne:[],lt=!1;try{var tn=N()}catch(vn){Be.thrownErrors.push(vn)}if(0<Be.thrownErrors.length)throw St(ne,_e),N=Yt(Be.thrownErrors),Be.thrownErrors.length=0,N;if(tn!==null&&typeof tn=="object"&&typeof tn.then=="function"){var zt=tn;return bt(function(){lt||vs||(vs=!0,console.error("You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);"))}),{then:function(vn,$i){lt=!0,zt.then(function(_o){if(St(ne,_e),_e===0){try{nt(Ue),ze(function(){return Ne(_o,vn,$i)})}catch(Vc){Be.thrownErrors.push(Vc)}if(0<Be.thrownErrors.length){var Jd=Yt(Be.thrownErrors);Be.thrownErrors.length=0,$i(Jd)}}else vn(_o)},function(_o){St(ne,_e),0<Be.thrownErrors.length&&(_o=Yt(Be.thrownErrors),Be.thrownErrors.length=0),$i(_o)})}}}var Kn=tn;if(St(ne,_e),_e===0&&(nt(Ue),Ue.length!==0&&bt(function(){lt||vs||(vs=!0,console.error("A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\n\nawait act(() => ...)"))}),Be.actQueue=null),0<Be.thrownErrors.length)throw N=Yt(Be.thrownErrors),Be.thrownErrors.length=0,N;return{then:function(vn,$i){lt=!0,_e===0?(Be.actQueue=Ue,ze(function(){return Ne(Kn,vn,$i)})):vn(Kn)}}},_n.cache=function(N){return function(){return N.apply(null,arguments)}},_n.cacheSignal=function(){return null},_n.captureOwnerStack=function(){var N=Be.getCurrentStack;return N===null?null:N()},_n.cloneElement=function(N,ne,_e){if(N==null)throw Error("The argument must be a React element, but you passed "+N+".");var Ue=pn({},N.props),lt=N.key,tn=N._owner;if(ne!=null){var zt;e:{if(rt.call(ne,"ref")&&(zt=Object.getOwnPropertyDescriptor(ne,"ref").get)&&zt.isReactWarning){zt=!1;break e}zt=ne.ref!==void 0}zt&&(tn=y()),_(ne)&&(d(ne.key),lt=""+ne.key);for(Kn in ne)!rt.call(ne,Kn)||Kn==="key"||Kn==="__self"||Kn==="__source"||Kn==="ref"&&ne.ref===void 0||(Ue[Kn]=ne[Kn])}var Kn=arguments.length-2;if(Kn===1)Ue.children=_e;else if(1<Kn){zt=Array(Kn);for(var vn=0;vn<Kn;vn++)zt[vn]=arguments[vn+2];Ue.children=zt}for(Ue=D(N.type,lt,Ue,tn,N._debugStack,N._debugTask),lt=2;lt<arguments.length;lt++)P(arguments[lt]);return Ue},_n.createContext=function(N){return N={$$typeof:Ct,_currentValue:N,_currentValue2:N,_threadCount:0,Provider:null,Consumer:null},N.Provider=N,N.Consumer={$$typeof:ct,_context:N},N._currentRenderer=null,N._currentRenderer2=null,N},_n.createElement=function(N,ne,_e){for(var Ue=2;Ue<arguments.length;Ue++)P(arguments[Ue]);Ue={};var lt=null;if(ne!=null)for(vn in On||!("__self"in ne)||"key"in ne||(On=!0,console.warn("Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform")),_(ne)&&(d(ne.key),lt=""+ne.key),ne)rt.call(ne,vn)&&vn!=="key"&&vn!=="__self"&&vn!=="__source"&&(Ue[vn]=ne[vn]);var tn=arguments.length-2;if(tn===1)Ue.children=_e;else if(1<tn){for(var zt=Array(tn),Kn=0;Kn<tn;Kn++)zt[Kn]=arguments[Kn+2];Object.freeze&&Object.freeze(zt),Ue.children=zt}if(N&&N.defaultProps)for(vn in tn=N.defaultProps,tn)Ue[vn]===void 0&&(Ue[vn]=tn[vn]);lt&&I(Ue,typeof N=="function"?N.displayName||N.name||"Unknown":N);var vn=1e4>Be.recentlyCreatedOwnerStacks++;return D(N,lt,Ue,y(),vn?Error("react-stack-top-frame"):Ws,vn?jt(h(N)):As)},_n.createRef=function(){var N={current:null};return Object.seal(N),N},_n.forwardRef=function(N){N!=null&&N.$$typeof===In?console.error("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."):typeof N!="function"?console.error("forwardRef requires a render function but was given %s.",N===null?"null":typeof N):N.length!==0&&N.length!==2&&console.error("forwardRef render functions accept exactly two parameters: props and ref. %s",N.length===1?"Did you forget to use the ref parameter?":"Any additional parameter will be undefined."),N!=null&&N.defaultProps!=null&&console.error("forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?");var ne={$$typeof:Lt,render:N},_e;return Object.defineProperty(ne,"displayName",{enumerable:!1,configurable:!0,get:function(){return _e},set:function(Ue){_e=Ue,N.name||N.displayName||(Object.defineProperty(N,"name",{value:Ue}),N.displayName=Ue)}}),ne},_n.isValidElement=R,_n.lazy=function(N){N={_status:-1,_result:N};var ne={$$typeof:Nn,_payload:N,_init:X},_e={name:"lazy",start:-1,end:-1,value:null,owner:null,debugStack:Error("react-stack-top-frame"),debugTask:console.createTask?console.createTask("lazy()"):null};return N._ioInfo=_e,ne._debugInfo=[{awaited:_e}],ne},_n.memo=function(N,ne){N==null&&console.error("memo: The first argument must be a component. Instead received: %s",N===null?"null":typeof N),ne={$$typeof:In,type:N,compare:ne===void 0?null:ne};var _e;return Object.defineProperty(ne,"displayName",{enumerable:!1,configurable:!0,get:function(){return _e},set:function(Ue){_e=Ue,N.name||N.displayName||(Object.defineProperty(N,"name",{value:Ue}),N.displayName=Ue)}}),ne},_n.startTransition=function(N){var ne=Be.T,_e={};_e._updatedFibers=new Set,Be.T=_e;try{var Ue=N(),lt=Be.S;lt!==null&<(_e,Ue),typeof Ue=="object"&&Ue!==null&&typeof Ue.then=="function"&&(Be.asyncTransitions++,Ue.then(le,le),Ue.then(s,$n))}catch(tn){$n(tn)}finally{ne===null&&_e._updatedFibers&&(N=_e._updatedFibers.size,_e._updatedFibers.clear(),10<N&&console.warn("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.")),ne!==null&&_e.types!==null&&(ne.types!==null&&ne.types!==_e.types&&console.error("We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React."),ne.types=_e.types),Be.T=ne}},_n.unstable_useCacheRefresh=function(){return ve().useCacheRefresh()},_n.use=function(N){return ve().use(N)},_n.useActionState=function(N,ne,_e){return ve().useActionState(N,ne,_e)},_n.useCallback=function(N,ne){return ve().useCallback(N,ne)},_n.useContext=function(N){var ne=ve();return N.$$typeof===ct&&console.error("Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?"),ne.useContext(N)},_n.useDebugValue=function(N,ne){return ve().useDebugValue(N,ne)},_n.useDeferredValue=function(N,ne){return ve().useDeferredValue(N,ne)},_n.useEffect=function(N,ne){return N==null&&console.warn("React Hook useEffect requires an effect callback. Did you forget to pass a callback to the hook?"),ve().useEffect(N,ne)},_n.useEffectEvent=function(N){return ve().useEffectEvent(N)},_n.useId=function(){return ve().useId()},_n.useImperativeHandle=function(N,ne,_e){return ve().useImperativeHandle(N,ne,_e)},_n.useInsertionEffect=function(N,ne){return N==null&&console.warn("React Hook useInsertionEffect requires an effect callback. Did you forget to pass a callback to the hook?"),ve().useInsertionEffect(N,ne)},_n.useLayoutEffect=function(N,ne){return N==null&&console.warn("React Hook useLayoutEffect requires an effect callback. Did you forget to pass a callback to the hook?"),ve().useLayoutEffect(N,ne)},_n.useMemo=function(N,ne){return ve().useMemo(N,ne)},_n.useOptimistic=function(N,ne){return ve().useOptimistic(N,ne)},_n.useReducer=function(N,ne,_e){return ve().useReducer(N,ne,_e)},_n.useRef=function(N){return ve().useRef(N)},_n.useState=function(N){return ve().useState(N)},_n.useSyncExternalStore=function(N,ne,_e){return ve().useSyncExternalStore(N,ne,_e)},_n.useTransition=function(){return ve().useTransition()},_n.version="19.2.4",typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())})()});var xn=Q((ekt,d8)=>{"use strict";process.env.NODE_ENV==="production"?d8.exports=kfe():d8.exports=Pfe()});var $N,Rfe=F(()=>{"use strict";$N=me(on(),1)});import*as Qfe from"fs";function f8(t){return t>=1e6?`${(t/1e6).toFixed(1)}M`:t>=1e3?`${(t/1e3).toFixed(1)}K`:String(t)}var Nfe,nh,$fe,lnt,Mfe,jN,jfe=F(()=>{"use strict";Nfe=me(on(),1),nh=me(on(),1),$fe=me(on(),1);Rfe();lnt={"claude-code":"Claude Code",opencode:"OpenCode",codex:"Codex CLI"},Mfe=200,jN=class t{_aggregator=new Nfe.EventAggregator({readPlanFile:e=>{try{return Qfe.readFileSync(e,"utf-8")}catch{return null}}});_timeline=[];_fileMap=new Map;_urlMap=new Map;_dirMap=new Map;_cmdMap=new Map;_todos=[];_todoSeen=new Set;_providerName;_quota=null;_billingBlock=null;_providerStatus=null;_openaiStatus=null;_updateInfo=null;_sessionId;_checkpointProviderId;_version=0;_metricsCache=null;_lastKnownCompactionCount=0;_timelineAppendCount=0;_taskToolCallCounts=new Map;static TASK_MGMT_TOOLS=["TaskCreate","TaskUpdate","TaskGet","TaskList"];get version(){return this._version}touch(){this._version++}reset(){this.touch(),this._aggregator.reset(),this._timeline=[],this._timelineAppendCount=0,this._fileMap.clear(),this._urlMap.clear(),this._dirMap.clear(),this._cmdMap.clear(),this._todos=[],this._todoSeen.clear(),this._providerName=void 0,this._quota=null,this._providerStatus=null,this._openaiStatus=null,this._updateInfo=null,this._sessionId=void 0,this._checkpointProviderId=void 0,this._lastKnownCompactionCount=0,this._taskToolCallCounts.clear()}setSessionId(e){this.touch(),e!==this._sessionId&&(this._checkpointProviderId=void 0),this._sessionId=e}markHistoryReplayed(e){this._checkpointProviderId=this._sessionId&&e!=="opencode"?e:void 0}tryRestoreFromSnapshot(e,n,r){if(this.touch(),this._checkpointProviderId=void 0,n==="opencode")return null;let o=(0,nh.loadSnapshot)(e);if(!o)return null;if(o.providerId!==n||o.consumer?.checkpointRevision!==3||o.consumer.consumerType!=="cli")return(0,nh.deleteSnapshot)(e),null;if(!(0,nh.isSnapshotValid)(o,r))return(0,nh.deleteSnapshot)(e),null;if(!this._aggregator.restore(o.aggregator))return(0,nh.deleteSnapshot)(e),null;let i=o.consumer;if(Array.isArray(i.timeline)){this._timeline=i.timeline,this._timelineAppendCount=this._timeline.length;for(let s of this._timeline){s.type==="tool_call"&&(s.type="tool_use"),s.type==="assistant_response"&&(s.type="assistant");let c=s;if(!s.summary&&typeof c.description=="string"&&(s.summary=c.description),!s.toolName&&c.metadata){let d=c.metadata;typeof d.toolName=="string"&&(s.toolName=d.toolName)}if(!s.summary)if(s.toolName)s.summary=s.toolInput?`${s.toolName} ${s.toolInput}`:s.toolName;else{let d={user:"(user message)",assistant:"(assistant)",tool_result:"(tool result)",summary:"Context compacted",system:"(system)"};s.summary=d[s.type]||s.type}}}return Array.isArray(i.fileMap)&&(this._fileMap=new Map(i.fileMap)),Array.isArray(i.urlMap)&&(this._urlMap=new Map(i.urlMap)),Array.isArray(i.dirMap)&&(this._dirMap=new Map(i.dirMap)),Array.isArray(i.cmdMap)&&(this._cmdMap=new Map(i.cmdMap)),Array.isArray(i.todos)&&(this._todos=i.todos,this._todoSeen=new Set(this._todos)),typeof i.providerName=="string"&&(this._providerName=i.providerName),typeof i.lastKnownCompactionCount=="number"&&(this._lastKnownCompactionCount=i.lastKnownCompactionCount),Array.isArray(i.taskToolCallCounts)&&(this._taskToolCallCounts=new Map(i.taskToolCallCounts)),this._sessionId=e,this._checkpointProviderId=n,o.readerPosition}persistSnapshot(e,n){if(!this._sessionId||!this._checkpointProviderId)return;let r=this._aggregator.serialize(),o={version:r.version,sessionId:this._sessionId,providerId:this._checkpointProviderId,readerPosition:e,sourceSize:n,createdAt:new Date().toISOString(),aggregator:r,consumer:{consumerType:"cli",checkpointRevision:3,timeline:this._timeline,fileMap:Array.from(this._fileMap.entries()),urlMap:Array.from(this._urlMap.entries()),dirMap:Array.from(this._dirMap.entries()),cmdMap:Array.from(this._cmdMap.entries()),todos:this._todos,providerName:this._providerName,lastKnownCompactionCount:this._lastKnownCompactionCount,taskToolCallCounts:Array.from(this._taskToolCallCounts.entries())}};(0,nh.saveSnapshot)(o)}processEvent(e){if(this.touch(),this._aggregator.processFollowEvent(e),!this._providerName&&e.providerId&&(this._providerName=lnt[e.providerId]||e.providerId),e.rateLimits&&this.extractCodexQuota(e),e.type==="tool_use"&&e.toolName&&!t.TASK_MGMT_TOOLS.includes(e.toolName)){let r=this._aggregator.getTaskState();for(let[o,i]of r.tasks)i.status==="in_progress"&&this._taskToolCallCounts.set(o,(this._taskToolCallCounts.get(o)||0)+1)}this.extractFileTouch(e),this.extractUrl(e),this.extractDirectory(e),this.extractCommand(e),this.extractTodo(e);let n=this._aggregator.getCompactionEvents().length;if(n>this._lastKnownCompactionCount){for(let r=this._lastKnownCompactionCount;r<n;r++){let o=this._aggregator.getCompactionEvents()[r],i=o.timestamp instanceof Date?o.timestamp.toISOString():String(o.timestamp);this._timeline.push({providerId:"claude-code",type:"summary",timestamp:i,summary:o.contextBefore>0&&o.contextAfter>0?`Context compacted: ${f8(o.contextBefore)} \u2192 ${f8(o.contextAfter)} (${f8(o.tokensReclaimed)} reclaimed)`:"Context compacted"}),this._timelineAppendCount++,this._timeline.length>Mfe&&this._timeline.shift()}this._lastKnownCompactionCount=n}this._timeline.push(e),this._timelineAppendCount++,this._timeline.length>Mfe&&this._timeline.shift()}setQuota(e){this.touch(),this._quota=e}setBillingBlock(e){this.touch(),this._billingBlock=e}setProviderStatus(e){this.touch(),this._providerStatus=e}setOpenAIStatus(e){this.touch(),this._openaiStatus=e}setUpdateInfo(e){this.touch(),this._updateInfo=e}getMetrics(){if(this._metricsCache&&this._metricsCache.version===this._version)return this._metricsCache.metrics;let e=this.buildMetrics();return this._metricsCache={version:this._version,metrics:e},e}buildMetrics(){let e=this._aggregator.getMetrics(),n=e.subagents.map(m=>({id:m.id,description:m.description,subagentType:m.subagentType,spawnTime:m.spawnTime,completionTime:m.completionTime,status:m.status,durationMs:m.durationMs,isParallel:!1}));this.detectParallelSubagents(n);let r=e.toolStats.map(m=>({name:m.name,calls:m.successCount+m.failureCount+m.pendingCount,pending:m.pendingCount,lastCallTime:void 0})),o=e.modelStats.map(m=>({model:m.model,calls:m.calls,tokens:m.tokens,cost:m.cost,priced:m.priced})),i=new Map;for(let m of e.taskState.tasks.values())i.set(m.taskId,{taskId:m.taskId,subject:m.subject,status:m.status,blockedBy:m.blockedBy,blocks:m.blocks,subagentType:m.subagentType,isGoalGate:m.isGoalGate,toolCallCount:this._taskToolCallCounts.get(m.taskId)||0,activeForm:m.activeForm});for(let m of e.subagents)i.has(m.id)||i.set(m.id,{taskId:m.id,subject:m.description||`${m.subagentType} agent`,status:m.status==="completed"?"completed":"in_progress",blockedBy:[],blocks:[],subagentType:m.subagentType,toolCallCount:0,activeForm:m.status==="running"?`Running ${m.subagentType}`:void 0});if(e.plan)for(let m of e.plan.steps){let h=`plan-${m.id}`;if(!i.has(h)){let y=m.status==="completed"?"completed":m.status==="in_progress"?"in_progress":"pending";i.set(h,{taskId:h,subject:m.description,status:y,blockedBy:[],blocks:[],toolCallCount:0,activeForm:m.status==="in_progress"?`Working on ${m.description}`:void 0})}}let s=Array.from(i.values()),c=e.compactionEvents.map(m=>({timestamp:m.timestamp instanceof Date?m.timestamp.toISOString():String(m.timestamp),contextBefore:m.contextBefore,contextAfter:m.contextAfter,tokensReclaimed:m.tokensReclaimed,source:m.source})),d=this.convertPlan(e.plan);return{tokens:{input:e.tokens.inputTokens,output:e.tokens.outputTokens,cacheRead:e.tokens.cacheReadTokens,cacheWrite:e.tokens.cacheWriteTokens,cost:e.tokens.reportedCost},context:this.computeContextGauge(e.currentContextSize,e.currentModel),burnRate:e.burnRate.points,toolStats:r,modelStats:o,timeline:[...this._timeline],timelineAppendCount:this._timelineAppendCount,tasks:s,fileTouches:Array.from(this._fileMap.values()).sort((m,h)=>h.reads+h.writes+h.edits-(m.reads+m.writes+m.edits)),subagents:n,compactionCount:e.compactionCount,compactionEvents:c,quota:this._quota,billingBlock:this._billingBlock,providerStatus:this._providerStatus,openaiStatus:this._openaiStatus,eventCount:e.eventCount,sessionStartTime:e.sessionStartTime??void 0,currentModel:e.currentModel??void 0,providerId:e.providerId??void 0,providerName:this._providerName,urls:Array.from(this._urlMap.values()).sort((m,h)=>h.count-m.count),directories:Array.from(this._dirMap.values()).sort((m,h)=>h.count-m.count),commands:Array.from(this._cmdMap.values()).sort((m,h)=>h.count-m.count),todos:[...this._todos],plan:d,contextAttribution:{...e.contextAttribution},updateInfo:this._updateInfo,sessionId:this._sessionId,permissionMode:e.permissionMode??null,contextTimeline:e.contextTimeline??[],toolFrequency:e.toolFrequency??[],wordFrequency:e.wordFrequency??[],patterns:e.patterns??[],heatmapBuckets:e.heatmapBuckets??[]}}detectParallelSubagents(e){for(let n=0;n<e.length;n++){let r=e[n],o=new Date(r.spawnTime).getTime(),i=r.completionTime?new Date(r.completionTime).getTime():Date.now();if(!isNaN(o))for(let s=n+1;s<e.length;s++){let c=e[s],d=new Date(c.spawnTime).getTime(),m=c.completionTime?new Date(c.completionTime).getTime():Date.now();isNaN(d)||o<m&&d<i&&(r.isParallel=!0,c.isParallel=!0)}}}computeContextGauge(e,n){let r=(0,$N.getModelContextWindowSize)(n??void 0),o=e,i=r>0?Math.min(100,Math.round(o/r*100)):0;return{used:o,limit:r,percent:i}}convertPlan(e){return e?{title:e.title??"Plan",steps:e.steps.map(n=>({id:n.id,description:n.description,status:n.status,phase:n.phase,complexity:n.complexity,startedAt:n.startedAt,completedAt:n.completedAt,durationMs:n.durationMs,tokensUsed:n.tokensUsed,toolCalls:n.toolCalls,errorMessage:n.errorMessage,costUsd:n.costUsd})),source:e.source,completionRate:e.completionRate,totalDurationMs:e.totalDurationMs,rawMarkdown:e.rawMarkdown,active:e.active,enteredAt:e.enteredAt?.toISOString(),exitedAt:e.exitedAt?.toISOString()}:null}extractFileTouch(e){if(e.type!=="tool_use"||!e.toolName)return;let n=e.raw;if(!n?.input)return;let r=n.input,o=r.file_path||r.path;if(!o)return;let i=e.toolName;if(!["Read","Write","Edit","Glob","Grep"].includes(i))return;let s=this._fileMap.get(o)||{path:o,reads:0,writes:0,edits:0};i==="Read"||i==="Glob"||i==="Grep"?s.reads++:i==="Write"?s.writes++:i==="Edit"&&s.edits++,this._fileMap.set(o,s)}static URL_TOOLS=["WebFetch","WebSearch"];static SEARCH_TOOLS=["Grep","Glob"];static COMMAND_PATTERN=/^(git|npm|npx|yarn|pnpm|node|python|pip|docker|make|cargo|go|rustc|tsc|eslint|prettier|vitest|jest|pytest)/i;static TODO_PATTERN=/TODO:?\s*(.+?)(?:\n|$)/gi;extractUrl(e){if(e.type!=="tool_use"||!e.toolName||!t.URL_TOOLS.includes(e.toolName))return;let n=e.raw;if(!n?.input)return;let r=n.input,o=r.url||r.query;if(!o)return;let i=this._urlMap.get(o)||{url:o,count:0};i.count++,this._urlMap.set(o,i)}extractDirectory(e){if(e.type!=="tool_use"||!e.toolName||!t.SEARCH_TOOLS.includes(e.toolName))return;let n=e.raw;if(!n?.input)return;let r=n.input,o=r.path;if(!o)return;let i=this._dirMap.get(o)||{path:o,count:0,patterns:[]};i.count++;let s=r.pattern;s&&!i.patterns.includes(s)&&i.patterns.push(s),this._dirMap.set(o,i)}extractCommand(e){if(e.type!=="tool_use"||e.toolName!=="Bash")return;let n=e.raw;if(!n?.input)return;let o=n.input.command;if(!o)return;let i=o.match(t.COMMAND_PATTERN);if(!i)return;let s=i[1].toLowerCase(),c=this._cmdMap.get(s)||{name:s,count:0,examples:[]};c.count++;let d=o.split(`
|
|
766
766
|
`)[0].substring(0,60);!c.examples.includes(d)&&c.examples.length<5&&c.examples.push(d),this._cmdMap.set(s,c)}extractTodo(e){let n=this.extractFullTextFromEvent(e)||e.summary;if(!n)return;let r=n.matchAll(t.TODO_PATTERN);for(let o of r){let i=o[1].trim();i&&!this._todoSeen.has(i.toLowerCase())&&(this._todos.push(i),this._todoSeen.add(i.toLowerCase()))}}extractFullTextFromEvent(e){let o=e.raw?.message?.content;if(Array.isArray(o)){let i=[];for(let s of o){let c=s;c.type==="text"&&typeof c.text=="string"&&i.push(c.text)}if(i.length>0)return i.join(`
|
|
767
|
-
`)}return null}extractCodexQuota(e){let n=e.rateLimits;!n?.primary&&!n?.secondary||(this._quota=(0,$fe.quotaFromCodexRateLimits)({primary:n.primary?{used_percent:n.primary.usedPercent,window_minutes:n.primary.windowMinutes,resets_at:n.primary.resetsAt}:void 0,secondary:n.secondary?{used_percent:n.secondary.usedPercent,window_minutes:n.secondary.windowMinutes,resets_at:n.secondary.resetsAt}:void 0})??this._quota)}}});async function zfe(t){let e=(0,ja.resolveProjectIdentity)(t),n=await(0,ja.readHistory)().catch(()=>null),[r,o,i]=await Promise.all([(0,ja.readTasks)(e,{status:"all"}).catch(()=>[]),(0,ja.readDecisions)(e).catch(()=>[]),(0,ja.readNotes)(e).catch(()=>[])]),s=[];for(let m of e.candidates)if(s=await(0,ja.readPlans)(m).catch(()=>[]),s.length>0)break;s.length===0&&(s=await(0,ja.readClaudeCodePlanFiles)(t).catch(()=>[]));let c=dnt(n),d=fnt(n);return{sessions:c,tasks:r,decisions:o,notes:i,plans:s,totalTokens:d.tokens,totalCost:d.cost,totalSessions:d.sessions}}function dnt(t){if(!t?.daily)return[];let e=[],n=Object.values(t.daily);n.sort((r,o)=>o.date.localeCompare(r.date));for(let r of n)e.push({date:r.date,sessionCount:r.sessionCount,inputTokens:r.tokens.inputTokens,outputTokens:r.tokens.outputTokens,cacheWriteTokens:r.tokens.cacheWriteTokens,cacheReadTokens:r.tokens.cacheReadTokens,totalTokens:(0,ja.summarizeTokens)(r.tokens).total,totalCost:r.totalCost,messageCount:r.messageCount,modelUsage:r.modelUsage.map(o=>({model:o.model,calls:o.calls})),toolUsage:r.toolUsage.map(o=>({tool:o.tool,calls:o.calls}))});return e}function fnt(t){if(!t?.allTime)return{tokens:0,cost:0,sessions:0};let e=t.allTime;return{tokens:(0,ja.summarizeTokens)(e.tokens).total,cost:e.totalCost,sessions:e.sessionCount}}var ja,Ffe=F(()=>{"use strict";ja=me(on(),1)});var YC,Ufe,pnt,zN,Lfe=F(()=>{"use strict";YC=me(on(),1),Ufe=3e5,pnt="No OAuth token available",zN=class{_poller;_callback=null;constructor(){this._poller=new YC.QuotaPoller({activeIntervalMs:Ufe,idleIntervalMs:Ufe,getAccessToken:async()=>{let e=await(0,YC.readClaudeMaxCredentials)();if(!e)throw new Error(pnt);return e.accessToken}}),this._poller.onUpdate(e=>{this._callback?.(e)})}onUpdate(e){this._callback=e}start(){this._poller.start()}stop(){this._poller.stop()}getCached(){return this._poller.getLatest()}async fetchOnce(){return(0,YC.resolveQuota)({providerId:"claude-code"})}}});var p8,mnt,FN,Hfe=F(()=>{"use strict";p8=me(on(),1),mnt=6e4,FN=class{constructor(e="claude-code"){this.providerId=e}providerId;_interval=null;_controller=null;_cached=null;_cachedOpenAI=null;_callback=null;_openAICallback=null;onUpdate(e){this._callback=e}onOpenAIUpdate(e){this._openAICallback=e}get pollsAnything(){return this.providerId!=="opencode"}start(){this._interval||!this.pollsAnything||(this._fetchAll(),this._interval=setInterval(()=>{this._fetchAll()},mnt))}stop(){this._interval&&clearInterval(this._interval),this._interval=null,this._controller?.abort(),this._controller=null}getCached(){return this._cached}getCachedOpenAI(){return this._cachedOpenAI}async fetchOnce(){return this.providerId==="opencode"?null:(0,p8.fetchProviderServiceStatus)(this.providerId)}async _fetchAll(){if(this._controller||this.providerId==="opencode")return;let e=new AbortController;this._controller=e;try{let n=await(0,p8.fetchProviderServiceStatus)(this.providerId,{signal:e.signal});if(e.signal.aborted||this._controller!==e)return;this.providerId==="claude-code"?(this._cached=n,this._callback?.(n)):(this._cachedOpenAI=n,this._openAICallback?.(n))}finally{this._controller===e&&(this._controller=null)}}}});function qfe(t,e,n){return t==="claude-code"?{providerStatus:e,openaiStatus:null}:t==="codex"?{providerStatus:null,openaiStatus:n}:{providerStatus:null,openaiStatus:null}}var Zfe=F(()=>{"use strict"});import*as zg from"fs";import*as m8 from"path";function Ant(t,e){let n=t.split(".").map(Number),r=e.split(".").map(Number);for(let o=0;o<3;o++){let i=n[o]||0,s=r[o]||0;if(i>s)return!0;if(i<s)return!1}return!1}var h8,hnt,Gfe,gnt,UN,Vfe=F(()=>{"use strict";h8=me(on(),1),hnt="https://registry.npmjs.org/sidekick-agent-hub/latest",Gfe="update-check.json",gnt=14400*1e3,UN=class{_callback=null;onResult(e){this._callback=e}async check(){try{let e="0.26.
|
|
767
|
+
`)}return null}extractCodexQuota(e){let n=e.rateLimits;!n?.primary&&!n?.secondary||(this._quota=(0,$fe.quotaFromCodexRateLimits)({primary:n.primary?{used_percent:n.primary.usedPercent,window_minutes:n.primary.windowMinutes,resets_at:n.primary.resetsAt}:void 0,secondary:n.secondary?{used_percent:n.secondary.usedPercent,window_minutes:n.secondary.windowMinutes,resets_at:n.secondary.resetsAt}:void 0})??this._quota)}}});async function zfe(t){let e=(0,ja.resolveProjectIdentity)(t),n=await(0,ja.readHistory)().catch(()=>null),[r,o,i]=await Promise.all([(0,ja.readTasks)(e,{status:"all"}).catch(()=>[]),(0,ja.readDecisions)(e).catch(()=>[]),(0,ja.readNotes)(e).catch(()=>[])]),s=[];for(let m of e.candidates)if(s=await(0,ja.readPlans)(m).catch(()=>[]),s.length>0)break;s.length===0&&(s=await(0,ja.readClaudeCodePlanFiles)(t).catch(()=>[]));let c=dnt(n),d=fnt(n);return{sessions:c,tasks:r,decisions:o,notes:i,plans:s,totalTokens:d.tokens,totalCost:d.cost,totalSessions:d.sessions}}function dnt(t){if(!t?.daily)return[];let e=[],n=Object.values(t.daily);n.sort((r,o)=>o.date.localeCompare(r.date));for(let r of n)e.push({date:r.date,sessionCount:r.sessionCount,inputTokens:r.tokens.inputTokens,outputTokens:r.tokens.outputTokens,cacheWriteTokens:r.tokens.cacheWriteTokens,cacheReadTokens:r.tokens.cacheReadTokens,totalTokens:(0,ja.summarizeTokens)(r.tokens).total,totalCost:r.totalCost,messageCount:r.messageCount,modelUsage:r.modelUsage.map(o=>({model:o.model,calls:o.calls})),toolUsage:r.toolUsage.map(o=>({tool:o.tool,calls:o.calls}))});return e}function fnt(t){if(!t?.allTime)return{tokens:0,cost:0,sessions:0};let e=t.allTime;return{tokens:(0,ja.summarizeTokens)(e.tokens).total,cost:e.totalCost,sessions:e.sessionCount}}var ja,Ffe=F(()=>{"use strict";ja=me(on(),1)});var YC,Ufe,pnt,zN,Lfe=F(()=>{"use strict";YC=me(on(),1),Ufe=3e5,pnt="No OAuth token available",zN=class{_poller;_callback=null;constructor(){this._poller=new YC.QuotaPoller({activeIntervalMs:Ufe,idleIntervalMs:Ufe,getAccessToken:async()=>{let e=await(0,YC.readClaudeMaxCredentials)();if(!e)throw new Error(pnt);return e.accessToken}}),this._poller.onUpdate(e=>{this._callback?.(e)})}onUpdate(e){this._callback=e}start(){this._poller.start()}stop(){this._poller.stop()}getCached(){return this._poller.getLatest()}async fetchOnce(){return(0,YC.resolveQuota)({providerId:"claude-code"})}}});var p8,mnt,FN,Hfe=F(()=>{"use strict";p8=me(on(),1),mnt=6e4,FN=class{constructor(e="claude-code"){this.providerId=e}providerId;_interval=null;_controller=null;_cached=null;_cachedOpenAI=null;_callback=null;_openAICallback=null;onUpdate(e){this._callback=e}onOpenAIUpdate(e){this._openAICallback=e}get pollsAnything(){return this.providerId!=="opencode"}start(){this._interval||!this.pollsAnything||(this._fetchAll(),this._interval=setInterval(()=>{this._fetchAll()},mnt))}stop(){this._interval&&clearInterval(this._interval),this._interval=null,this._controller?.abort(),this._controller=null}getCached(){return this._cached}getCachedOpenAI(){return this._cachedOpenAI}async fetchOnce(){return this.providerId==="opencode"?null:(0,p8.fetchProviderServiceStatus)(this.providerId)}async _fetchAll(){if(this._controller||this.providerId==="opencode")return;let e=new AbortController;this._controller=e;try{let n=await(0,p8.fetchProviderServiceStatus)(this.providerId,{signal:e.signal});if(e.signal.aborted||this._controller!==e)return;this.providerId==="claude-code"?(this._cached=n,this._callback?.(n)):(this._cachedOpenAI=n,this._openAICallback?.(n))}finally{this._controller===e&&(this._controller=null)}}}});function qfe(t,e,n){return t==="claude-code"?{providerStatus:e,openaiStatus:null}:t==="codex"?{providerStatus:null,openaiStatus:n}:{providerStatus:null,openaiStatus:null}}var Zfe=F(()=>{"use strict"});import*as zg from"fs";import*as m8 from"path";function Ant(t,e){let n=t.split(".").map(Number),r=e.split(".").map(Number);for(let o=0;o<3;o++){let i=n[o]||0,s=r[o]||0;if(i>s)return!0;if(i<s)return!1}return!1}var h8,hnt,Gfe,gnt,UN,Vfe=F(()=>{"use strict";h8=me(on(),1),hnt="https://registry.npmjs.org/sidekick-agent-hub/latest",Gfe="update-check.json",gnt=14400*1e3,UN=class{_callback=null;onResult(e){this._callback=e}async check(){try{let e="0.26.4",n=this.readCache(),r;n&&Date.now()-n.checkedAt<gnt?r=n.latest:(r=await this.fetchLatest(),this.writeCache({latest:r,checkedAt:Date.now()})),Ant(r,e)?this._callback?.({current:e,latest:r}):this._callback?.(null)}catch{this._callback?.(null)}}async fetchLatest(){let e=await fetch(hnt,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(5e3)});if(!e.ok)throw new Error(`Registry returned ${e.status}`);return(await e.json()).version}readCache(){try{let e=m8.join((0,h8.getConfigDir)(),Gfe);if(!zg.existsSync(e))return null;let n=zg.readFileSync(e,"utf8"),r=JSON.parse(n);if(r.latest&&typeof r.checkedAt=="number")return r}catch{}return null}writeCache(e){try{let n=(0,h8.getConfigDir)();zg.existsSync(n)||zg.mkdirSync(n,{recursive:!0}),zg.writeFileSync(m8.join(n,Gfe),JSON.stringify(e),"utf8")}catch{}}}});function Kfe(t){let e=t.provider==="codex"?"Codex":"Claude";switch(t.recovery){case"sign_in":return t.diagnosis==="missing_credentials"?`${e} is not signed in. Sign in with the provider CLI before retrying.`:`${e} OAuth sign-in has expired or was rejected. Sign in again before retrying.`;case"update_credentials":return t.diagnosis==="missing_credentials"?`${e} API key is not configured. Set the API key before retrying.`:`${e} API credentials were rejected. Update the API key before retrying.`;case"check_authentication":return`${e} authentication needs attention. Check the credentials used by this request.`;case"start_new_session":return`${e} conversation is invalid or expired. Start a new provider session.`;case"check_connection":return`${e} connection failed. Check the network, proxy, or firewall.`;case"review_execution_policy":return`${e} execution was denied by policy. Review the requested operation and permissions.`;case"repair_runtime":return`${e} runtime is unavailable. Check its installation and executable path.`;case"reduce_context":return`${e} context limit exceeded. Reduce the input or start a new session.`;case"retry_later":return t.diagnosis==="timeout"?`${e} request timed out. Retry when ready.`:t.diagnosis==="rate_limited"||t.diagnosis==="overloaded"?`${e} is rate limited or overloaded. Wait before retrying.`:`${e} service request was unavailable. Retry later.`;default:return`${e} request failed for an unknown reason. Inspect the error details.`}}var Yfe=F(()=>{"use strict"});function _b(t){let e=t.provider==="codex"?"OpenAI":"Claude",n=`${e} public service status`;if(t.availability==="unavailable")return{label:n,color:"gray",visible:!0,summary:`${e} status unavailable`,lines:["Status unavailable",`Checked: ${t.checkedAt}`,`Source: ${t.sourceUrl}`]};let r=t.incidents===null,o=new Map(t.components.map(s=>[s.id,s.name])),i=[t.description,`Checked: ${t.checkedAt}`,`Provider updated: ${t.providerUpdatedAt??"not reported"}`];for(let s of t.components.filter(c=>c.status!=="operational"))i.push(`${s.name}: ${s.status.replace(/_/g," ")}`);r&&i.push("Incident information unavailable.");for(let s of t.incidents??[])i.push(`${s.title} (${s.status}, ${s.impact})`),i.push(`Components: ${s.componentIds===null?"not reported":s.componentIds.length===0?"none reported":s.componentIds.map(c=>o.get(c)??`${c} (unmapped)`).join(", ")}`),i.push(`Incident updated: ${s.updatedAt??"not reported"}`),s.url&&i.push(s.url);return i.push("Public vendor information; incidents do not establish the cause of a request failure."),{label:n,lines:i,visible:t.severity!=="none"||r||!!t.incidents?.length,color:t.severity==="none"?r?"gray":"green":["minor","maintenance"].includes(t.severity)?"yellow":"red",summary:`${e} public status: ${r&&t.severity==="none"?"partial evidence":t.severity}`}}var LN=F(()=>{"use strict"});function xl(t){let e=t.replace(/\\/g,"/").split("/");return e.length<=3?t:".../"+e.slice(-3).join("/")}function co(t){return(0,HN.formatTokenCount)(t,{suffixCase:"upper"})}function xd(t){return(0,HN.formatDurationMs)(t,{style:"compact",includeMilliseconds:!0,secondsFractionDigits:1})}function ynt(t){return t.replace(/\{[^}]*\}/g,"")}function bb(t){return ynt(t).length}function ds(t,e){return t.length<=e?t:t.substring(0,e-3)+"..."}function ky(t){try{return new Date(t).toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{return"??:??:??"}}function Jfe(t){let e=new Date(t).getTime(),n=Date.now()-e;if(isNaN(n)||n<0)return"--:--:--";let r=Math.floor(n/1e3),o=Math.floor(r/3600),i=Math.floor(r%3600/60),s=r%60;return`${String(o).padStart(2,"0")}:${String(i).padStart(2,"0")}:${String(s).padStart(2,"0")}`}function Co(t,e=40){let o=Math.max(0,e-3-t.length-1),i="\u2500".repeat(o);return`{grey-fg}\u2500\u2500 {/grey-fg}{bold}${t}{/bold}{grey-fg} ${i}{/grey-fg}`}function Py(t,e,n="green"){let r=Math.max(0,Math.min(100,t)),o=Math.round(r/100*e),i=e-o;return`{${n}-fg}${"\u2588".repeat(o)}{/${n}-fg}{grey-fg}${"\u2591".repeat(i)}{/grey-fg}`}function mB(t,e=25){let n=t.slice(-e);if(n.length===0)return{spark:"",max:0,latest:0};let r=Math.max(...n,1),o=n[n.length-1],i=[" ","\u2581","\u2582","\u2583","\u2584","\u2585","\u2586","\u2587","\u2588"];return{spark:n.map(c=>i[Math.min(8,Math.round(c/r*8))]).join(""),max:r,latest:o}}function Wfe(t,e=60){if(t.length===0)return"{grey-fg}(no activity data){/grey-fg}";let n=Math.max(...t.map(c=>c.count),1),r=[" ","\u2591","\u2592","\u2593","\u2588"],o=t.slice(-e),i=o.map(c=>{let d=Math.min(4,Math.round(c.count/n*4));return r[d]}).join(""),s=[];for(let c=0;c<o.length;c+=5){let d=new Date(o[c].timestamp),m=d.getHours().toString().padStart(2,"0"),h=d.getMinutes().toString().padStart(2,"0");s.push(`${m}:${h}`)}return`{cyan-fg}${i}{/cyan-fg}
|
|
768
768
|
{grey-fg}${s.join(" ")}{/grey-fg}`}function Xfe(t,e){let n=Math.max(0,Math.min(100,t)),r=Math.round(n/100*e);return"\u2588".repeat(r)+"\u2591".repeat(e-r)}function lo(){return Math.max(40,(process.stdout.columns||80)-29)}function Ho(t,e,n=""){let r=bb(n);return t.split(`
|
|
769
769
|
`).map(o=>{if(bb(o)<=e)return o;let i=o.split(" "),s=[],c="",d=0,m=()=>s.length===0;for(let h of i){let y=bb(h);if(d===0)c=h,d=y;else{let v=m()?e:e-r;d+1+y<=v?(c+=" "+h,d+=1+y):(s.push(c),c=h,d=y)}}return c&&s.push(c),s.map((h,y)=>y===0?h:n+h).join(`
|
|
770
770
|
`)}).join(`
|
|
@@ -1113,7 +1113,7 @@ Read about how to prevent this error on https://github.com/vadimdemedes/ink/#isr
|
|
|
1113
1113
|
React keys must be passed directly to JSX without using spread:
|
|
1114
1114
|
let props = %s;
|
|
1115
1115
|
<%s key={someKey} {...props} />`,Lt,In,Nn,In),jr[In+Lt]=!0)}if(In=null,Ct!==void 0&&(n(Ct),In=""+Ct),s(ct)&&(n(ct.key),In=""+ct.key),"key"in ct){Ct={};for(var Ht in ct)Ht!=="key"&&(Ct[Ht]=ct[Ht])}else Ct=ct;return In&&c(Ct,typeof Ie=="function"?Ie.displayName||Ie.name||"Unknown":Ie),m(Ie,In,Ct,o(),bn,_i)}function y(Ie){v(Ie)?Ie._store&&(Ie._store.validated=1):typeof Ie=="object"&&Ie!==null&&Ie.$$typeof===X&&(Ie._payload.status==="fulfilled"?v(Ie._payload.value)&&Ie._payload.value._store&&(Ie._payload.value._store.validated=1):Ie._store&&(Ie._store.validated=1))}function v(Ie){return typeof Ie=="object"&&Ie!==null&&Ie.$$typeof===I}var _=xn(),I=Symbol.for("react.transitional.element"),w=Symbol.for("react.portal"),D=Symbol.for("react.fragment"),O=Symbol.for("react.strict_mode"),P=Symbol.for("react.profiler"),R=Symbol.for("react.consumer"),L=Symbol.for("react.context"),H=Symbol.for("react.forward_ref"),he=Symbol.for("react.suspense"),se=Symbol.for("react.suspense_list"),Ce=Symbol.for("react.memo"),X=Symbol.for("react.lazy"),ve=Symbol.for("react.activity"),le=Symbol.for("react.client.reference"),ze=_.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,Yt=Object.prototype.hasOwnProperty,St=Array.isArray,Ne=console.createTask?console.createTask:function(){return null};_={react_stack_bottom_frame:function(Ie){return Ie()}};var nt,_t={},ut=_.react_stack_bottom_frame.bind(_,i)(),Dt=Ne(r(i)),jr={};Oj.Fragment=D,Oj.jsx=function(Ie,ct,Ct){var Lt=1e4>ze.recentlyCreatedOwnerStacks++;return h(Ie,ct,Ct,!1,Lt?Error("react-stack-top-frame"):ut,Lt?Ne(r(Ie)):Dt)},Oj.jsxs=function(Ie,ct,Ct){var Lt=1e4>ze.recentlyCreatedOwnerStacks++;return h(Ie,ct,Ct,!0,Lt?Error("react-stack-top-frame"):ut,Lt?Ne(r(Ie)):Dt)}})()});var vr=Q((Z$t,e5)=>{"use strict";process.env.NODE_ENV==="production"?e5.exports=Vve():e5.exports=Kve()});function Yve(t){return t==="grey"?"gray":t}function Pc(t){if(!t)return null;if(!t.includes("{"))return t;let e=[],n=[{}],r=0,o=0;Jve.lastIndex=0;let i;for(;(i=Jve.exec(t))!==null;){let c=t.slice(r,i.index);c&&e.push(Wve(c,Qb(n),o++)),r=i.index+i[0].length;let d=i[1]==="/",m=i[2];if(d){let h=-1;for(let y=n.length-1;y>0;y--)if(n[y].tag===m){h=y;break}h>0&&n.splice(h)}else if(m==="bold")n.push({...Qb(n),tag:m,bold:!0});else if(m==="underline")n.push({...Qb(n),tag:m,underline:!0});else if(m.endsWith("-fg")){let h=m.slice(0,-3);n.push({...Qb(n),tag:m,color:Yve(h)})}else if(m.endsWith("-bg")){let h=m.slice(0,-3);n.push({...Qb(n),tag:m,backgroundColor:Yve(h)})}else n.push({...Qb(n),tag:m})}let s=t.slice(r);return s&&e.push(Wve(s,Qb(n),o++)),e.length===0?null:e.length===1?e[0]:(0,OI.jsx)(OI.Fragment,{children:e})}function Qb(t){return t[t.length-1]}function Wve(t,e,n){return e.bold||e.underline||e.color||e.backgroundColor?(0,OI.jsx)(W,{bold:e.bold,underline:e.underline,color:e.color,backgroundColor:e.backgroundColor,children:t},n):(0,OI.jsx)(W,{children:t},n)}var OI,Jve,Nb=F(async()=>{"use strict";await fs();OI=me(vr(),1);Jve=/\{(\/?)([^}]+)\}/g});function Yct(t){if(new Set(t.map(o=>o.providerId).filter(Boolean)).size<=1)return null;let n=[],r=new Map;for(let o=0;o<t.length;o++){let i=t[o].providerId||"unknown";r.has(i)||r.set(i,[]),r.get(i).push(o)}for(let[o,i]of r){n.push({type:"header",providerId:o});for(let s of i)n.push({type:"item",index:s})}return n.push({type:"item",index:t.length}),{rows:n,selectableCount:t.length+1}}function Jct(t,e,n){let r=e?e.rows.filter(o=>o.type==="item")[n]?.index:n;return r===void 0||r===t.length?null:t[r]?.sessionPath??null}function Wct({items:t,onSelect:e}){let[n,r]=(0,Xve.useState)(0),{exit:o}=Hy(),{isRawModeSupported:i}=kc(),s=Yct(t),c=t.length+1;ch((v,_)=>{if(v==="q"||_.escape||_.ctrl&&v==="c"){o();return}if(v==="j"||_.downArrow){r(I=>Math.min(I+1,c-1));return}if(v==="k"||_.upArrow){r(I=>Math.max(I-1,0));return}if(_.return){e(Jct(t,s,n));return}},{isActive:i});let d=process.stdout.rows||24,m=Math.max(5,d-15);function h(v,_){if(v===t.length)return(0,no.jsx)(Je,{children:(0,no.jsxs)(W,{inverse:_,children:[(0,no.jsx)(W,{color:"yellow",children:"+"})," Wait for a new session to start..."]})},"wait");let I=t[v],w=I.isActive?"\u25CF":"\u25CB",D=I.isActive?"green":"gray",O=I.providerId?WG[I.providerId]:null,P=I.label.length>40?I.label.substring(0,37)+"...":I.label;return(0,no.jsx)(Je,{children:(0,no.jsxs)(W,{inverse:_,children:[O&&(0,no.jsxs)(W,{color:O.color,children:["[",O.badge,"]"]})," ",(0,no.jsx)(W,{color:D,children:w})," ",P.padEnd(40)," ",(0,no.jsx)(W,{color:"gray",children:I.age.padEnd(9)})," ",(0,no.jsx)(W,{color:"gray",children:I.sessionId}),I.isActive?(0,no.jsx)(W,{color:"green",children:" LIVE"}):""]})},I.sessionPath)}function y(){if(s){let w=s.rows,D=0,O=[];for(let se=0;se<w.length;se++)w[se].type==="item"&&O.push(se);let P=O[n]??0,R=Math.max(0,Math.min(P-Math.floor(m/2),w.length-m)),L=Math.max(0,R),H=Math.min(w.length,L+m),he=[];D=0;for(let se=0;se<w.length;se++){if(se<L||se>=H){w[se].type==="item"&&D++;continue}let Ce=w[se];if(Ce.type==="header"){let X=Kct[Ce.providerId]||Ce.providerId,ve=WG[Ce.providerId];he.push((0,no.jsxs)(Je,{children:[(0,no.jsxs)(W,{dimColor:!0,children:["\u2500\u2500"," "]}),ve&&(0,no.jsx)(W,{color:ve.color,children:X}),!ve&&(0,no.jsx)(W,{children:X}),(0,no.jsxs)(W,{dimColor:!0,children:[" ","\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"]})]},`hdr-${Ce.providerId}`))}else{let X=D===n;he.push(h(Ce.index,X)),D++}}return he}let v=Math.max(0,Math.min(n-Math.floor(m/2),c-m)),_=Math.max(0,v),I=Math.min(c,_+m);return Array.from({length:I-_},(w,D)=>{let O=_+D;return h(O,O===n)})}return(0,no.jsxs)(Je,{flexDirection:"column",width:"100%",height:d,children:[(0,no.jsx)(Je,{justifyContent:"center",marginTop:1,children:(0,no.jsx)(Je,{flexDirection:"column",width:50,children:BI.map((v,_)=>(0,no.jsx)(W,{children:Pc(v)},`logo-${_}`))})}),(0,no.jsxs)(Je,{flexDirection:"column",borderStyle:"single",borderColor:"magenta",marginX:2,flexGrow:1,children:[(0,no.jsxs)(W,{color:"magenta",children:[" Sessions (",t.length,") "]}),y()]}),(0,no.jsx)(Je,{height:1,children:(0,no.jsxs)(W,{children:[" ",Pc(xj)," ",(0,no.jsx)(W,{color:"gray",children:"Session Picker"})," ",(0,no.jsxs)(W,{bold:!0,children:["\u2191","/","\u2193"]})," ","navigate ",(0,no.jsx)(W,{bold:!0,children:"Enter"})," select ",(0,no.jsx)(W,{bold:!0,children:"q"})," quit"]})})]})}async function e_e(t,e,n){let{render:r}=await fs().then(()=>Dj),o;if(n&&n.length>0)o=await Zve([t,...n],e);else{let i=t.findAllSessions(e);if(i.length===0)return{sessionPath:null};o=qve(i,t)}return o.length===0?{sessionPath:null}:new Promise((i,s)=>{let c=r((0,no.jsx)(Wct,{items:o,onSelect:d=>{c.unmount();let m=o.find(h=>h.sessionPath===d);i({sessionPath:d,providerId:m?.providerId})}}));c.waitUntilExit().then(()=>{s(new Error("quit"))}).catch(s)})}var Xve,no,Kct,t_e=F(async()=>{"use strict";Xve=me(xn(),1);await fs();XG();rO();await Nb();no=me(vr(),1),Kct={"claude-code":"Claude Code",opencode:"OpenCode",codex:"Codex"}});function r_e(){return`{grey-fg}${(0,n_e.getRandomPhrase)()}{/grey-fg}`}var n_e,o_e=F(()=>{"use strict";n_e=me(on(),1)});function Rc(){let[t,e]=(0,kj.useState)({columns:process.stdout.columns||80,rows:process.stdout.rows||24});return(0,kj.useEffect)(()=>{let n=()=>{e({columns:process.stdout.columns||80,rows:process.stdout.rows||24})};return process.stdout.on("resize",n),()=>{process.stdout.off("resize",n)}},[]),t}var kj,Gy=F(()=>{"use strict";kj=me(xn(),1)});function Xct(t,e,n){return Math.max(0,Math.min(t,Math.max(0,e-n)))}function i_e({totalItems:t,viewportHeight:e}){let[n,r]=(0,gu.useState)(0),[o,i]=(0,gu.useState)(0);(0,gu.useEffect)(()=>{if(t===0){r(0),i(0);return}r(D=>Math.min(D,t-1)),i(D=>Xct(D,t,e))},[t,e]);let s=(0,gu.useCallback)((D,O)=>{if(e<=0||t<=0)return 0;let P=O;D<P&&(P=D),D>=P+e&&(P=D-e+1);let R=Math.max(0,t-e);return Math.max(0,Math.min(P,R))},[t,e]),c=(0,gu.useCallback)(()=>{r(D=>{let O=Math.min(D+1,t-1);return i(P=>s(O,P)),O})},[t,s]),d=(0,gu.useCallback)(()=>{r(D=>{let O=Math.max(D-1,0);return i(P=>s(O,P)),O})},[s]),m=(0,gu.useCallback)(()=>{r(0),i(0)},[]),h=(0,gu.useCallback)(()=>{let D=Math.max(0,t-1);r(D),i(O=>s(D,O))},[t,s]),y=(0,gu.useCallback)(()=>{i(D=>{let O=Math.max(0,t-e);return Math.min(D+1,O)})},[t,e]),v=(0,gu.useCallback)(()=>{i(D=>Math.max(D-1,0))},[]),_=(0,gu.useCallback)(()=>{i(D=>{let O=Math.max(0,t-e);return Math.min(D+e,O)}),r(D=>Math.min(D+e,t-1))},[t,e]),I=(0,gu.useCallback)(()=>{i(D=>Math.max(D-e,0)),r(D=>Math.max(D-e,0))},[e]),w=(0,gu.useCallback)(D=>{let O=Math.max(0,Math.min(D,t-1));r(O),i(P=>s(O,P))},[t,s]);return{scrollOffset:o,selectedIndex:n,selectNext:c,selectPrev:d,selectFirst:m,selectLast:h,scrollDown:y,scrollUp:v,scrollPageDown:_,scrollPageUp:I,setSelected:w}}var gu,s_e=F(()=>{"use strict";gu=me(xn(),1)});function a_e(t,e){return Math.max(0,Math.min(t,Math.max(0,e-1)))}function kI(t,e){let n=Math.max(1,e-2);return Math.max(0,t-n)}function u_e(t,e,n,r){return t!==e||n>r}var oO=F(()=>{"use strict"});function c_e(t,e){let n=Math.max(1,t);return Math.max(1,n-(e>n?2:0))}function l_e(t,e){let n=0;for(let r=0;r<e.length;r++){let o=String(e[r].shortcutKey).length+e[r].title.length+2;if(t>=n&&t<n+o)return r;n+=o}return null}function d_e(t,e,n,r){let o=e+1;for(let i=0;i<n.length;i++){let s=n[i].length+(i===r?3:2);if(t>=o&&t<o+s)return i;o+=s}return null}function f_e(t,e,n){let r=t-3-(e>0?1:0);if(r<0)return null;let o=e+r;return o<n?o:null}var p_e=F(()=>{"use strict"});function m_e({panels:t,activeIndex:e,layoutMode:n}){let r=elt[n]||n;return(0,Ol.jsxs)(Je,{height:1,width:"100%",children:[(0,Ol.jsx)(Je,{flexGrow:1,children:t.map((o,i)=>(0,Ol.jsx)(Je,{marginRight:1,children:i===e?(0,Ol.jsxs)(W,{bold:!0,underline:!0,color:"magenta",children:[o.shortcutKey," ",o.title]}):(0,Ol.jsxs)(Ol.Fragment,{children:[(0,Ol.jsx)(W,{dimColor:!0,children:o.shortcutKey}),(0,Ol.jsxs)(W,{color:"gray",children:[" ",o.title]})]})},o.id))}),(0,Ol.jsx)(Je,{children:(0,Ol.jsxs)(W,{dimColor:!0,children:["z: ",r," ","\u25B8"]})})]})}var Ol,elt,h_e=F(async()=>{"use strict";await fs();Ol=me(vr(),1),elt={normal:"Normal",expanded:"Expanded","wide-side":"Wide Side"}});function nlt(t,e){if(t.replace(tlt,"").length<=e)return t;let r=0,o=t.length,i=0;for(;i<t.length;){if(t[i]==="{"){let s=t.indexOf("}",i);if(s!==-1){i=s+1;continue}}if(r++,r>=e-1){o=i+1;break}i++}return t.substring(0,o)+"\u2026"}function rlt(t,e){if(!e)return t;let n=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),r;try{r=new RegExp(`(${n})`,"gi")}catch{return t}return t.split(/(\{\/?\w[\w-]*\})/g).map(i=>i.startsWith("{")&&i.endsWith("}")?i:i.replace(r,"{blue-bg}{white-fg}$1{/white-fg}{/blue-bg}")).join("")}function g_e({items:t,selectedIndex:e,scrollOffset:n,focused:r,width:o,viewportHeight:i,panelTitle:s,sessionFilterActive:c,emptyStateHint:d,filterString:m}){let h=r?"magenta":"gray",y=r?"double":"single",v=Math.max(1,o-3),_=t.slice(n,n+i),I=n>0,w=n+i<t.length;return(0,mo.jsxs)(Je,{width:o,flexDirection:"column",borderStyle:y,borderColor:h,overflow:"hidden",children:[(0,mo.jsx)(Je,{children:(0,mo.jsxs)(W,{color:h,children:[" ",s," (",t.length,")"," "]})}),I&&(0,mo.jsx)(Je,{justifyContent:"center",width:v,children:(0,mo.jsx)(W,{color:"gray",children:"\u25B2"})}),_.map((D,O)=>{let R=n+O===e,L=R?"\u25B8":" ",H=nlt(D.label,v-2);return m&&(H=rlt(H,m)),(0,mo.jsx)(Je,{width:v,children:R?(0,mo.jsxs)(W,{inverse:!0,children:[(0,mo.jsx)(W,{bold:!0,children:L})," ",Pc(H)]}):(0,mo.jsxs)(W,{children:[L," ",Pc(H)]})},D.id)}),t.length===0&&i>=3&&(0,mo.jsxs)(mo.Fragment,{children:[(0,mo.jsx)(Je,{width:v,children:(0,mo.jsx)(W,{children:" "})},"empty-hint-pad"),(0,mo.jsx)(Je,{justifyContent:"center",width:v,children:(0,mo.jsx)(W,{color:"gray",children:c?"No items in this session":"No items yet"})},"empty-hint-1"),c&&(0,mo.jsxs)(Je,{justifyContent:"center",width:v,children:[(0,mo.jsx)(W,{color:"gray",children:"Press "}),(0,mo.jsx)(W,{color:"magenta",bold:!0,children:"f"}),(0,mo.jsx)(W,{color:"gray",children:" to see all"})]},"empty-hint-2"),!c&&d&&i>=5&&(0,mo.jsx)(Je,{justifyContent:"center",width:v,children:(0,mo.jsx)(W,{dimColor:!0,children:d})},"empty-hint-desc")]}),_.length<i&&Array.from({length:Math.max(0,i-_.length-(t.length===0&&i>=3?c||!c&&d&&i>=5?3:2:0))},(D,O)=>(0,mo.jsx)(Je,{width:v,children:(0,mo.jsx)(W,{children:" "})},`empty-${O}`)),w&&(0,mo.jsx)(Je,{justifyContent:"center",width:v,children:(0,mo.jsx)(W,{color:"gray",children:"\u25BC"})})]})}var mo,tlt,A_e=F(async()=>{"use strict";await fs();await Nb();mo=me(vr(),1),tlt=/\{\/?\w[\w-]*\}/g});function y_e({tabs:t,activeIndex:e}){return t.length===0?(0,Xg.jsx)(Je,{height:1}):(0,Xg.jsxs)(Je,{height:1,children:[(0,Xg.jsx)(W,{children:" "}),t.map((n,r)=>(0,Xg.jsx)(Je,{marginRight:1,children:r===e?(0,Xg.jsxs)(W,{bold:!0,color:"magenta",children:["\u25B8 ",n.label]}):(0,Xg.jsxs)(W,{color:"gray",children:[" ",n.label]})},n.label)),t.length>1&&(0,Xg.jsx)(W,{color:"gray",children:" \u2190 [ ] \u2192"})]})}var Xg,v_e=F(async()=>{"use strict";await fs();Xg=me(vr(),1)});function __e({content:t,scrollOffset:e,viewportHeight:n,focused:r}){let o=r?"magenta":"gray",i=r?"double":"single",s=t?t.split(`
|
|
1116
|
-
`):[],c=s.length,d=a_e(e,c),m=d>0,h=m?1:0,y=c>d+n-1?1:0,v=Math.max(1,n-h-y),_=s.slice(d,d+v),I=d+v<c;return(0,eA.jsxs)(Je,{flexDirection:"column",flexGrow:1,borderStyle:i,borderColor:o,paddingLeft:1,children:[m&&(0,eA.jsx)(Je,{justifyContent:"center",children:(0,eA.jsxs)(W,{color:"gray",children:["\u25B2 (",d," more)"]})}),_.map((w,D)=>(0,eA.jsx)(W,{wrap:"wrap",children:Pc(w)},d+D)),_.length<v&&Array.from({length:v-_.length},(w,D)=>(0,eA.jsx)(W,{children:" "},`pad-${D}`)),I&&(0,eA.jsx)(Je,{justifyContent:"center",children:(0,eA.jsxs)(W,{color:"gray",children:["\u25BC (",c-d-v," more)"]})})]})}var eA,b_e=F(async()=>{"use strict";await fs();await Nb();oO();eA=me(vr(),1)});function t5({eventCount:t,providerName:e,permissionMode:n,focusTarget:r,panelHints:o,sessionFilter:i,filterString:s,matchCount:c,totalCount:d,updateInfo:m,providerStatus:h,openaiStatus:y,mouseEnabled:v,dataBadge:_}){let I=t>0?`${t} events`:"waiting...",w=n==="bypassPermissions"?"red":n==="acceptEdits"?"magenta":n==="plan"?"green":void 0,D=n==="bypassPermissions"?"BYPASS":n==="acceptEdits"?"EDITS":n==="plan"?"PLAN":void 0,O=h?_b(h):null,P=y?_b(y):null;return(0,Tt.jsxs)(Je,{height:1,width:"100%",children:[(0,Tt.jsxs)(Je,{children:[(0,Tt.jsx)(W,{children:Pc(xj)}),(0,Tt.jsxs)(W,{dimColor:!0,children:[" v","0.26.3"]}),m&&(0,Tt.jsxs)(W,{color:"yellow",children:[" (v",m.latest,")"]})]}),(0,Tt.jsxs)(Je,{flexGrow:1,justifyContent:"center",children:[e&&(0,Tt.jsxs)(Tt.Fragment,{children:[(0,Tt.jsxs)(W,{dimColor:!0,children:[" ","\u2502"," "]}),(0,Tt.jsx)(W,{color:"cyan",children:e})]}),n&&n!=="default"&&(0,Tt.jsxs)(Tt.Fragment,{children:[(0,Tt.jsxs)(W,{dimColor:!0,children:[" ","\u2502"," "]}),(0,Tt.jsx)(W,{color:w,children:D})]}),(0,Tt.jsxs)(W,{dimColor:!0,children:[" ","\u2502"," "]}),(0,Tt.jsx)(W,{children:I}),O?.visible&&(0,Tt.jsxs)(Tt.Fragment,{children:[(0,Tt.jsxs)(W,{dimColor:!0,children:[" ","\u2502"," "]}),(0,Tt.jsx)(W,{color:O.color,children:O.summary})]}),P?.visible&&(0,Tt.jsxs)(Tt.Fragment,{children:[(0,Tt.jsxs)(W,{dimColor:!0,children:[" ","\u2502"," "]}),(0,Tt.jsx)(W,{color:P.color,children:P.summary})]}),v===!1&&(0,Tt.jsxs)(Tt.Fragment,{children:[(0,Tt.jsxs)(W,{dimColor:!0,children:[" ","\u2502"," "]}),(0,Tt.jsx)(W,{color:"yellow",children:"MOUSE OFF"})]}),_&&(0,Tt.jsxs)(Tt.Fragment,{children:[(0,Tt.jsxs)(W,{dimColor:!0,children:[" ","\u2502"," "]}),(0,Tt.jsx)(W,{color:_.color,children:_.text})]}),s&&(0,Tt.jsxs)(W,{color:"yellow",children:[" ",'filter: "',s,'" (',c??0,"/",d??0,")"]}),i&&(0,Tt.jsxs)(W,{color:"magenta",children:[" ",i]})]}),(0,Tt.jsxs)(Je,{children:[(0,Tt.jsxs)(W,{dimColor:!0,children:["\u2502"," "]}),r==="side"?(0,Tt.jsxs)(W,{children:[(0,Tt.jsx)(W,{bold:!0,children:"\u2191\u2193"}),(0,Tt.jsx)(W,{dimColor:!0,children:" nav "}),(0,Tt.jsx)(W,{bold:!0,children:"Tab"}),(0,Tt.jsx)(W,{dimColor:!0,children:" detail "}),o,(0,Tt.jsx)(W,{bold:!0,children:"/"}),(0,Tt.jsx)(W,{dimColor:!0,children:" filter "}),(0,Tt.jsx)(W,{bold:!0,children:"?"}),(0,Tt.jsx)(W,{dimColor:!0,children:" help "}),(0,Tt.jsx)(W,{bold:!0,children:"q"}),(0,Tt.jsx)(W,{dimColor:!0,children:" quit"})]}):(0,Tt.jsxs)(W,{children:[(0,Tt.jsx)(W,{bold:!0,children:"j/k"}),(0,Tt.jsx)(W,{dimColor:!0,children:" scroll "}),(0,Tt.jsx)(W,{bold:!0,children:"[]"}),(0,Tt.jsx)(W,{dimColor:!0,children:" tab "}),(0,Tt.jsx)(W,{bold:!0,children:"Tab"}),(0,Tt.jsx)(W,{dimColor:!0,children:" side "}),o,(0,Tt.jsx)(W,{bold:!0,children:"?"}),(0,Tt.jsx)(W,{dimColor:!0,children:" help "}),(0,Tt.jsx)(W,{bold:!0,children:"q"}),(0,Tt.jsx)(W,{dimColor:!0,children:" quit"})]})]})]})}var Tt,S_e=F(async()=>{"use strict";LN();await fs();rO();await Nb();Tt=me(vr(),1)});function C_e(t=olt){let[e,n]=(0,Pj.useState)(0);return(0,Pj.useEffect)(()=>{let r=setInterval(()=>{n(o=>(o+1)%E_e.length)},t);return()=>clearInterval(r)},[t]),E_e[e]}var Pj,E_e,olt,I_e=F(()=>{"use strict";Pj=me(xn(),1),E_e=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2807","\u280F"],olt=80});function T_e({panelCount:t}){let e=C_e(),n=(0,w_e.useMemo)(()=>(0,D_e.getRandomPhrase)(),[]),{columns:r}=Rc(),o=t&&t>1?`1-${Math.min(t,9)}`:"1-9";return(0,fi.jsxs)(Je,{flexDirection:"column",borderStyle:"single",borderColor:"magenta",paddingX:2,paddingY:1,width:Math.min(60,r-2),children:[BI.map((i,s)=>(0,fi.jsx)(W,{children:Pc(i)},s)),(0,fi.jsx)(W,{children:" "}),(0,fi.jsxs)(W,{color:"gray",children:[" ",n]}),(0,fi.jsx)(W,{children:" "}),(0,fi.jsxs)(W,{children:[" ",(0,fi.jsx)(W,{color:"magenta",children:e})," ",(0,fi.jsx)(W,{color:"gray",children:"Waiting for session events..."})]}),(0,fi.jsx)(W,{children:" "}),(0,fi.jsxs)(W,{children:[" ",(0,fi.jsx)(W,{color:"gray",children:"Navigate:"})," ",(0,fi.jsx)(W,{bold:!0,children:o})," jump ",(0,fi.jsx)(W,{bold:!0,children:"?"})," ","help ",(0,fi.jsx)(W,{bold:!0,children:"q"})," quit"]}),(0,fi.jsx)(W,{children:" "}),(0,fi.jsx)(W,{color:"gray",children:" Start a Claude Code, OpenCode, or Codex session"}),(0,fi.jsx)(W,{color:"gray",children:" in another terminal and events will appear here."}),(0,fi.jsx)(W,{children:" "}),(0,fi.jsxs)(W,{children:[" ",(0,fi.jsx)(W,{color:"gray",children:"Or use "}),(0,fi.jsx)(W,{bold:!0,children:"--replay"}),(0,fi.jsx)(W,{color:"gray",children:" to replay an existing session."})]})]})}var w_e,D_e,fi,x_e=F(async()=>{"use strict";w_e=me(xn(),1);await fs();I_e();D_e=me(on(),1);rO();await Nb();Gy();fi=me(vr(),1)});function Ri(t,e,n=14,r=54){let o=n-t.length,i=Math.max(1,r-n-e.length),s="\xB7".repeat(i);return(0,Mi.jsxs)(W,{children:[" ",(0,Mi.jsx)(W,{bold:!0,children:t})," ".repeat(Math.max(0,o))," ",(0,Mi.jsx)(W,{dimColor:!0,children:s})," ",e]})}function B_e({panels:t,activePanelIndex:e,scrollOffset:n,onClampScroll:r}){let{columns:o,rows:i}=Rc(),s=t[e],c=s.getActions(),d=s.getKeybindings?.()||[],m=[];m.push((0,Mi.jsx)(W,{bold:!0,children:" Panels"}));for(let D of t)m.push(Ri(String(D.shortcutKey),D.title));if(m.push((0,Mi.jsx)(W,{children:" "})),m.push((0,Mi.jsx)(W,{bold:!0,children:" Navigation"})),m.push(Ri("Tab","Toggle side / detail focus")),m.push(Ri("j / \u2193","Next item / scroll down")),m.push(Ri("k / \u2191","Prev item / scroll up")),m.push(Ri("g / G","First / last item")),m.push(Ri("Enter","Focus detail pane")),m.push(Ri("h / \u2190","Return to side")),m.push(Ri("[ / ]","Cycle detail tabs")),m.push(Ri("z","Cycle layout mode")),m.push((0,Mi.jsx)(W,{children:" "})),m.push((0,Mi.jsx)(W,{bold:!0,children:" Actions"})),m.push(Ri("x","Context menu")),m.push(Ri("/","Filter side list")),m.push(Ri("f","Toggle session filter")),c.length>0||d.length>0){m.push((0,Mi.jsx)(W,{children:" "})),m.push((0,Mi.jsxs)(W,{bold:!0,children:[" ",s.title," Actions"]}));for(let D of c)m.push(Ri(D.key,D.label));for(let D of d)m.push(Ri(D.keys.join("/"),D.label))}m.push((0,Mi.jsx)(W,{children:" "})),m.push((0,Mi.jsx)(W,{bold:!0,children:" General"})),m.push(Ri("R","Refresh project data")),m.push(Ri("r","Generate HTML report")),m.push(Ri("p","Pin session (stop auto-switch)")),m.push(Ri("s","Switch to pending session")),m.push(Ri("M","Toggle mouse capture (copy/select)")),m.push(Ri("V","Version & changelog")),m.push(Ri("?","Toggle this help")),m.push(Ri("Esc","Close overlay / clear filter")),m.push(Ri("q / Ctrl+C","Quit"));let h=Math.max(5,i-12),y=Math.max(0,m.length-h);n5.default.useEffect(()=>{n>y&&r?.(y)},[n,y,r]);let v=Math.min(n,y),_=m.slice(v,v+h),I=v>0,w=v+h<m.length;return(0,Mi.jsx)(Je,{flexGrow:1,alignItems:"center",justifyContent:"center",children:(0,Mi.jsxs)(Je,{flexDirection:"column",borderStyle:"single",borderColor:"magenta",paddingX:1,paddingY:1,width:Math.min(60,o-2),children:[BI.map((D,O)=>(0,Mi.jsx)(W,{children:Pc(D)},`logo-${O}`)),(0,Mi.jsx)(W,{children:" "}),I?(0,Mi.jsx)(W,{color:"gray",children:" \u25B2 scroll up (k)"}):(0,Mi.jsx)(W,{children:" "}),_.map((D,O)=>(0,Mi.jsx)(n5.default.Fragment,{children:D},`row-${v+O}`)),w?(0,Mi.jsx)(W,{color:"gray",children:" \u25BC scroll down (j)"}):(0,Mi.jsx)(W,{children:" "})]})})}var n5,Mi,O_e=F(async()=>{"use strict";n5=me(xn(),1);await fs();rO();await Nb();Gy();Mi=me(vr(),1)});function k_e({actions:t,selectedIndex:e}){let{columns:n,rows:r}=Rc();if(t.length===0)return(0,lh.jsx)(Je,{});let o=Math.max(...t.map(s=>s.key.length+s.label.length+4),20),i=Math.min(o+6,50,n-2);return(0,lh.jsxs)(Je,{flexDirection:"column",borderStyle:"single",borderColor:"magenta",width:i,position:"absolute",marginLeft:Math.max(0,Math.floor((n-i)/2)),marginTop:Math.max(0,Math.floor((r-t.length-2)/2)),children:[(0,lh.jsx)(W,{color:"magenta",children:" Actions "}),t.map((s,c)=>(0,lh.jsx)(Je,{children:c===e?(0,lh.jsxs)(W,{inverse:!0,children:[" ",(0,lh.jsx)(W,{bold:!0,children:s.key})," ",s.label]}):(0,lh.jsxs)(W,{children:[" ",(0,lh.jsx)(W,{bold:!0,children:s.key})," ",s.label]})},s.key))]})}var lh,P_e=F(async()=>{"use strict";await fs();Gy();lh=me(vr(),1)});function R_e({filterString:t,filterMode:e,filterError:n}){let{rows:r}=Rc();return(0,Pd.jsxs)(Je,{position:"absolute",marginTop:r-2,width:"100%",height:1,children:[slt.map(o=>{let{key:i,label:s}=ilt[o];return(0,Pd.jsx)(W,{children:o===e?(0,Pd.jsxs)(W,{bold:!0,color:"magenta",children:["[",i,"]",s," "]}):(0,Pd.jsxs)(W,{color:"gray",children:["[",i,"]",s," "]})},o)}),(0,Pd.jsxs)(W,{bold:!0,color:"magenta",children:[" ","/"," "]}),n?(0,Pd.jsx)(W,{color:"red",children:t}):(0,Pd.jsx)(W,{children:t}),(0,Pd.jsx)(W,{color:"gray",children:"\u2588"}),n&&(0,Pd.jsxs)(W,{color:"red",children:[" ",n]}),e==="date"&&!t&&(0,Pd.jsx)(W,{color:"gray",children:" today \xB7 yesterday \xB7 2d \xB7 1w \xB7 YYYY-MM-DD \xB7 >expr \xB7 <expr"})]})}var Pd,ilt,slt,M_e=F(async()=>{"use strict";await fs();Gy();Pd=me(vr(),1),ilt={substring:{key:"S",label:"Substr"},fuzzy:{key:"F",label:"Fuzzy"},regex:{key:"R",label:"Regex"},date:{key:"D",label:"Date"}},slt=["substring","fuzzy","regex","date"]});function N_e({entries:t,scrollOffset:e,onClampScroll:n}){let{columns:r,rows:o}=Rc(),i=Math.min(64,r-2),s=Math.max(o-12,10),c=[],d=t[0]?.date||"";c.push((0,ho.jsxs)(W,{children:[" ",(0,ho.jsxs)(W,{bold:!0,color:"cyan",children:["Terminal Dashboard v","0.26.3"]}),d?(0,ho.jsxs)(W,{color:"gray",children:[" \u2014 ",d]}):null]},"ver")),c.push((0,ho.jsx)(W,{children:" "},"sep"));for(let I=0;I<t.length;I++){let w=t[I];I>0&&c.push((0,ho.jsxs)(W,{children:[" ",(0,ho.jsxs)(W,{bold:!0,children:["v",w.version]}),(0,ho.jsxs)(W,{color:"gray",children:[" \u2014 ",w.date]})]},`v-${I}`));for(let D of w.sections){c.push((0,ho.jsxs)(W,{children:[" ",(0,ho.jsx)(W,{bold:!0,color:"yellow",children:D.heading})]},`h-${I}-${D.heading}`));for(let O=0;O<D.items.length;O++){let P=i-8,R=D.items[O];R.length>P&&(R=R.slice(0,P-1)+"\u2026"),c.push((0,ho.jsxs)(W,{children:[" ",(0,ho.jsx)(W,{color:"gray",children:"\u2022"})," ",R]},`item-${I}-${D.heading}-${O}`))}}I<t.length-1&&c.push((0,ho.jsx)(W,{children:" "},`gap-${I}`))}let m=Math.max(0,c.length-s);Q_e.default.useEffect(()=>{e>m&&n?.(m)},[e,m,n]);let h=Math.min(e,m),y=c.slice(h,h+s),v=h>0,_=h+s<c.length;return(0,ho.jsx)(Je,{flexGrow:1,alignItems:"center",justifyContent:"center",children:(0,ho.jsxs)(Je,{flexDirection:"column",borderStyle:"single",borderColor:"magenta",paddingX:1,paddingY:1,width:i,children:[(0,ho.jsxs)(W,{children:[" ",(0,ho.jsxs)(W,{bold:!0,color:"magenta",children:["\u26A1"," W H A T ' S N E W"]})]}),(0,ho.jsx)(W,{children:" "}),v&&(0,ho.jsx)(W,{color:"gray",children:" \u25B2 scroll up (k)"}),y,_&&(0,ho.jsx)(W,{color:"gray",children:" \u25BC scroll down (j)"}),(0,ho.jsx)(W,{children:" "}),(0,ho.jsxs)(W,{color:"gray",children:[" ","Full changelog:"," ",(0,ho.jsx)(W,{color:"cyan",children:"https://cesarandreslopez.github.io/sidekick-agent-hub/changelog/"})]}),(0,ho.jsx)(W,{children:" "}),(0,ho.jsxs)(W,{color:"gray",children:[" ","Press ",(0,ho.jsx)(W,{bold:!0,children:"Esc"})," or ",(0,ho.jsx)(W,{bold:!0,children:"V"})," to close"]})]})})}var Q_e,ho,$_e=F(async()=>{"use strict";Q_e=me(xn(),1);await fs();Gy();ho=me(vr(),1)});function j_e({columns:t,rows:e}){return(0,PI.jsx)(Je,{flexDirection:"column",width:t,height:e,justifyContent:"center",alignItems:"center",children:(0,PI.jsxs)(Je,{flexDirection:"column",borderStyle:"single",borderColor:"red",paddingX:2,paddingY:1,children:[(0,PI.jsx)(W,{color:"red",children:"Terminal too small"}),(0,PI.jsxs)(W,{color:"gray",children:["Need at least 60x15 (current: ",t,"x",e,")"]})]})})}var PI,z_e=F(async()=>{"use strict";await fs();PI=me(vr(),1)});function F_e({toast:t,row:e=0}){let{columns:n}=Rc(),r=alt[t.severity]||"cyan",o=ult[t.severity]||"\u25CF",i=Math.max(16,Math.min(56,n-10)),s=t.message.length>i?t.message.substring(0,i-3)+"...":t.message;return(0,Rj.jsx)(Je,{position:"absolute",marginLeft:Math.max(0,n-s.length-8),marginTop:e*3,borderStyle:"single",borderColor:r,paddingX:1,children:(0,Rj.jsxs)(W,{color:r,children:[o," ",s]})})}var Rj,alt,ult,U_e=F(async()=>{"use strict";await fs();Gy();Rj=me(vr(),1),alt={error:"red",warning:"yellow",info:"cyan"},ult={error:"\u2718",warning:"\u26A0",info:"\u25CF"}});function r5(t=process.stdout){t.isTTY&&(t.write("\x1B[?1000h"),t.write("\x1B[?1002h"),t.write("\x1B[?1006h"))}function RI(t=process.stdout){t.isTTY&&(t.write("\x1B[?1006l"),t.write("\x1B[?1002l"),t.write("\x1B[?1000l"))}var o5=F(()=>{"use strict"});function L_e(t){let e=typeof t=="string"?t:t.toString("utf-8");return Array.from(e.matchAll(clt),llt).filter(n=>n!==null)}function llt(t){let e=parseInt(t[1],10),n=parseInt(t[2],10),r=parseInt(t[3],10),o=t[4]==="m",i=n-1,s=r-1,c=(e&4)!==0,d=(e&8)!==0,m=(e&16)!==0,h=e&-29;return h===64||h===65?{type:"scroll",button:"none",x:i,y:s,shift:c,meta:d,ctrl:m,scrollDirection:h===64?"up":"down"}:h>=32&&h<=34?{type:"drag",button:["left","middle","right"][h-32],x:i,y:s,shift:c,meta:d,ctrl:m}:h>=0&&h<=2?{type:o?"release":"click",button:["left","middle","right"][h],x:i,y:s,shift:c,meta:d,ctrl:m}:null}var clt,i5=F(()=>{"use strict";clt=/\x1b\[<(\d+);(\d+);(\d+)([Mm])/g});function H_e(t){return e=>{for(let n of L_e(e))t.current(n)}}var q_e=F(()=>{"use strict";i5()});function dlt({active:t}){return ch(()=>{},{isActive:t}),null}function Qj({onMouse:t,enabled:e=!0,children:n}){let r=(0,Mj.useRef)(t);r.current=t;let{isRawModeSupported:o}=kc();return(0,Mj.useEffect)(()=>{if(!e||!o)return;r5();let i=H_e(r);process.stdin.on("data",i);let s=()=>RI();return process.on("exit",s),()=>{process.stdin.removeListener("data",i),process.removeListener("exit",s),RI()}},[e,o]),(0,MI.jsxs)(MI.Fragment,{children:[(0,MI.jsx)(dlt,{active:o}),n]})}var Mj,MI,Z_e=F(async()=>{"use strict";Mj=me(xn(),1);await fs();o5();q_e();MI=me(vr(),1)});var s5=F(async()=>{"use strict";o5();i5();await Z_e()});var V_e,G_e=F(()=>{V_e="# Changelog\n\nAll notable changes to the Sidekick Agent Hub CLI will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## [0.26.3] - 2026-09-09\n\n### Added\n\n- `sidekick status --json` includes `serviceStatus` evidence alongside existing Claude, OpenAI, and peak-hour fields. Human-readable output and dashboard details include multiple incidents, component associations, and separate check/provider-update timestamps.\n\n### Fixed\n\n- Status displays distinguish unavailable and partial evidence, including omitted incident data. Dashboard polling coalesces overlapping checks and cancels outstanding checks when stopped.\n- AI summary failures retain structured provider diagnoses and show appropriate authentication, session, service, connection, policy, runtime, and context guidance without automatic replay or provider switching.\n\n## [0.26.2] - 2026-09-06\n\n### Fixed\n\n- CLI live-only sessions no longer overwrite complete-history checkpoints. Older CLI checkpoints are invalidated and replayed once.\n- OpenCode dashboards replay history instead of restoring timestamp-only snapshots, preventing duplicate token totals on reopen.\n- Dashboard checkpoints save after complete event batches, use the current snapshot schema, and reject obsolete or incompatible consumer formats.\n- Project-scoped search passes the workspace path through shared provider discovery, including Codex and database-only OpenCode sessions.\n- Doctor honors `--provider`; unused integrations and missing saved accounts are informational when monitoring existing sessions.\n- Shared watchers preserve partial UTF-8 lines and use OpenCode's platform-specific data directory.\n\n## [0.26.1] - 2026-09-05\n\n### Changed\n\n- Direct OpenAI API dashboard summaries use GPT-5.6 Luna with reasoning disabled and a 1,024-token `max_completion_tokens` limit. Anthropic API summaries retain Haiku 4.5; native CLI summaries retain the user's model configuration.\n\n### Fixed\n\n- Shared model metadata verified on 2026-09-05 corrects fallback costs and context gauges for Fable 5.1, GPT-6 Astra, GPT-5.6, and GPT-5.4 mini/nano.\n- Codex `quota`, `quota --provider codex`, `quota --all`, and MCP quota queries fetch live utilization and reset credits on every call. Local samples no longer prevent API refreshes, including with `--refresh`.\n- Codex fallback output shows sample age and the failed API refresh reason; older logs no longer hide newer cached data.\n\n## [0.26.0] - 2026-09-05\n\n### Added\n\n- `sidekick statusline` reads the JSON Claude Code pipes to its status-line command (`SIDEKICK_STATUSLINE_STDIN=0` disables it), appends context %, session cost, and prompt-cache hit rate, and persists the official five-hour and seven-day limits to the quota snapshot and history stores, so every other command and dashboard sees them without a network call. Cached quota older than five minutes is labelled with its age\n- Global `--offline` (or `SIDEKICK_OFFLINE=1`) prices from the cached catalog only; global `--output-file <path>` writes a command's stdout to a file (not for `dashboard` or `mcp`)\n- `stats --csv` prints every recorded day; `dump --list --csv` and `quota history --csv` print their tables as CSV\n- `quota history --window 5h|7d|max` selects which limit the heatmap shows (default `5h`); the header names the window\n- The global `--json` flag applies to `tasks add`, `tasks done`, `note add`, `decision add` (returning the stored record) and to `report` (returning the output path)\n- The dashboard raises a toast when the five-hour window crosses 80% or 95%, or the seven-day window crosses 90%, once per reset window\n- `sidekick blocks [--active | --recent | --since <time>] [--csv] [--no-cache]` shows five-hour billing blocks computed from session logs (a block opens at the first usage event aligned to the UTC hour, lasts five hours, and a longer gap opens a new one) with cache-inclusive totals, cost provenance, burn rate, and \u2014 for the open block \u2014 projected end-of-block tokens and cost. Sessions are read once and cached by size and mtime; the table is labelled a local estimate and the official status-line sample is shown beneath it when present. `--since` accepts an ISO date, `YYYY-MM-DD`, or a relative window such as `7d`\n- The dashboard's Sessions summary shows the active five-hour billing block (local estimate from session logs), refreshed every minute\n- `sidekick daily`, `weekly`, `monthly`, and `sessions` report usage computed straight from session logs, so CLI-only users no longer see \"No historical data found\". Every provider with session data is read by default (the global `--provider` narrows to one); rows are bucketed by the time of each usage event on the local calendar (`--utc` for UTC), so a session crossing midnight is split across both days; weeks start on Monday. Options: `--since` / `--until` (ISO date, `YYYY-MM-DD`, or relative windows such as `30d`), `--breakdown` (per-model sub-rows), `--by-project`, `--csv`, `--no-cache`; the global `--json` prints the full report. Defaults: 30 days, 12 weeks, 12 calendar months, 30 days\n- `sidekick stats` points at `sidekick daily` when the history store is empty\n- `sidekick import [--since <time>]` folds finished sessions from every detected provider (or the global `--provider`) into `historical-data.json`, the store behind `stats`, `today`, and the VS Code History tab, using the same importer and store mutation as the extension. Files already imported, sessions already persisted by the live monitor, and files modified in the last minute are skipped; session logs are read without holding the store lock and the summaries are applied in one short locked write that re-checks the on-disk store\n- `sidekick statusline` writes `~/.config/sidekick/state.json` on every prompt (only when something changed) and the dashboard writes it on quota updates and billing-block ticks: a public, versioned (`schemaVersion: 1`) document with the active account, quota windows with freshness, context usage, session cost, and the active billing block, for tmux status bars, menu-bar apps, and scripts\n\n### Changed\n\n- Startup awaits bounded pricing-catalog hydration, so two runs of the same command price identically; a fresh cache is a local read and a refresh is capped by the catalog's 3 s timeout\n- Every token total (`stats`, `today`, the dashboard session panel, `dump`, `report`) includes cache reads and writes and is labelled \"Total (incl. cache)\"; cost figures carry their provenance\n- `sidekick today` looks up yesterday by local calendar day (the history store has always been keyed that way) and takes its peak-hours line from the shared schedule, so it agrees with `sidekick peak`\n- `sidekick quota` shows the age of a cached snapshot and only colours it as a warning when it is older than five minutes; `quota history` reads providers in parallel\n- The global `--json` flag applies to `dump` (same as `--format json`)\n- Commands set `process.exitCode` instead of calling `process.exit(1)` on errors, so piped output is never truncated\n- The status line no longer writes to the account registry on its hot path\n- `sidekick quota`, `quota --all`, and `mcp get_quota_status` resolve quota through the shared `resolveQuota()` precedence (fresh persisted sample, then session logs, then the provider API, then an older sample), so a fresh status-line sample is never outranked by an older session-derived value and `--all` no longer forces Codex API-first; `--refresh` asks the API first for every provider, not only Codex\n- Every quota table prints a `Source` row naming where the numbers came from (`cached status-line sample from \u2026 (3m ago)`, `local session logs`, `Anthropic usage API`, \u2026); JSON output adds `resolution`, `capturedSource`, `freshness`, and `ageMs`\n- `sidekick report` and the dashboard's report action read the session once through its provider reader and derive both the metrics and the transcript from those events, instead of replaying the session through a watcher and then parsing the file again; report metrics now come from the canonical event path (the same one `readSessionStats()` uses)\n- Codex session discovery, listings, and the local quota scan use the shared capped walker, so the dashboard's session poll and `sidekick quota` no longer enumerate and re-read the whole rollout history on every call\n- The dashboard detects new sessions by subscribing to the provider's session root (`fs.watch` with a 30 s catch-up poll) instead of walking the session corpus every 10 s; the followed session's own writes no longer trigger a lookup\n- `DashboardState.getMetrics()` returns the same object until the next mutation, and the dashboard memoises panel items and detail rendering on that identity (plus each panel's `viewVersion`), so key presses, scrolling, and toasts no longer rebuild every panel\n- Provider status polling is scoped to the active provider: status.claude.com for Claude Code, status.openai.com for Codex, nothing for OpenCode\n- `sidekick dump --list` and the multi-provider session picker read the bounded async preview index; `--list` prints enumeration diagnostics to stderr and shows the \"raise --limit\" footer only when more sessions exist beyond the limit\n- `sidekick stats` text mode: the Top Failing Tools block shows the last 7 and 30 days side by side with a trend arrow; `--json` output is unchanged\n\n### Fixed\n\n- `--offline` and `--output-file` given before the command are recognised by the command-token scan: `sidekick --offline stats` used to skip catalog hydration entirely and price from the static table, and `sidekick --offline statusline` fell off the fast path\n- `--output-file` writes plain text: chalk's colour level is reset when the redirect is installed, unless `FORCE_COLOR` is set\n- The dashboard's `state.json` keys quota by the sample's `providerId` when one is stamped\n\n## [0.25.0] - 2026-08-18\n\n### Changed\n\n- The CLI advances in lockstep with `sidekick-shared` 0.25.0 and retains its existing commands and synchronous compatibility surface\n\n## [0.24.5] - 2026-08-18\n\n### Added\n\n- `sidekick history` lists recent Codex user prompts across every workspace from `~/.codex/history.jsonl`, newest first, as an AGE / SESSION / PROMPT table sized to the terminal. `--limit <n>` bounds the count (default 20) and the underlying tail read scales with the limit, so large limits are not silently truncated. `--path <id-or-prefix>` resolves a full session id or unique prefix to its rollout transcript path \u2014 `less \"$(sidekick history --path 0198a3c2)\"` \u2014 and the global `--json` emits full ids and ISO timestamps. Codex-only for now; not to be confused with `sidekick quota history`\n- `sidekick dump --list` gains `--limit <n>` (default 50). The listing and the interactive session picker both read the shared session-preview index, which stats first and content-reads only the sessions actually shown \u2014 listing a project with a large session history no longer reads every file\n\n### Changed\n\n- `dump --list` prints provider-canonical session ids \u2014 for Codex, the bare session UUID rather than the `rollout-\u2026` file basename. The listed id now round-trips into `dump --session <id>` (the old basename never matched exact or prefix); scripts parsing `--list --json` should expect the new `id` form\n\n## [0.24.4] - 2026-07-25\n\n### Fixed\n\n- The dashboard loaded persisted project data exactly once at startup and never again, so tasks, notes, decisions, and plans written by the VS Code extension or a second terminal never appeared until the dashboard was restarted\n- Load and watcher failures were swallowed into empty catch blocks. A failed load was replaced with an all-zero object and both watcher error handlers were empty, producing a dashboard indistinguishable from a genuinely quiet project\n- `sidekick dashboard` without a TTY rendered Ink's \"Raw mode is not supported\" panel into the middle of a partial frame and exited 0, so callers read the failure as success. It now fails with a message naming which stream is not a TTY, suggests a command that works when piped, and exits 1\n- Mouse tracking escape sequences were written to stdout with no TTY check, polluting redirected output\n- A bare `sidekick` printed full help to stderr with exit 1, breaking `sidekick | less` and any script checking the exit code. It now writes to stdout and exits 0\n- `sidekick --help` and `sidekick --version` made a network request and created `~/.config/sidekick/accounts/` before printing anything, because the startup side effects ran at module scope\n- `sidekick --no-color` was rejected as an unknown option, even though chalk already honored it, `NO_COLOR`, and a non-TTY stdout\n- Printing help for a bare invocation ran before Commander parsed the argv, which skipped its validation too: `sidekick --provider bogus` and `sidekick --project` (missing its value) exited 0 with help instead of reporting the error. Help for a bare or flag-only invocation is now a root action handler, so `sidekick | less` still works without disarming the option checks, and `sidekick bogus` still reports an unknown command\n- Switching to a pending session was impossible from the Plans panel: it bound `s` with no condition, so the panel's handler fired whenever an item was selected, which on Plans is always. The Sessions panel shadowed the global session filter on its Mind Map tab the same way\n- When the item list shrank under the cursor \u2014 live event churn, or typing into the filter \u2014 the detail tab and scroll position jumped back to the top of the first tab\n- The detail tab bar could highlight a tab whose content was not being rendered\n- The detail pane could render empty beneath a \"\u25B2 (N more)\" indicator. The scroll offset survives a list shrinking under the cursor, so it can outlive the content it was measured against; it is now clamped to whatever content it lands on\n- On the splash screen, panel digits 1 and 2 did nothing while 3 through 8 entered the dashboard\n- Only the newest toast was rendered, so a quota alert landing next to a context compaction showed one message and silently dropped the other\n- `parseBlessedTags.test.tsx` had never run: the vitest include glob was `*.test.ts`, which does not match `.test.tsx`. That is 15 tests covering the tag parser every rendered string flows through\n- `vitest.config.ts` declared `define` nested under `test`, where Vitest ignores it, so the `__CLI_VERSION__` injection its comment describes was inert and the next test importing `cli.ts` or `StatusBar.tsx` would have failed on a `ReferenceError`\n- `sidekick extract -i --json` silently ignored `--json`; it is now rejected, and `extract -i` degrades to plain output when not attached to a terminal\n\n### Added\n\n- `R` refreshes persisted project data on demand, and data auto-refreshes every 15 seconds. The refresh is gated by a content fingerprint, so an unchanged project schedules no re-render at all. Plan progress is part of that fingerprint: a plan record is replaced in place and keeps its `createdAt` with no `completedAt` while it runs, so a timestamp-only signature could not see steps advancing and `R` would report \"Project data is up to date\" against a stale Plans panel\n- A status-bar badge for data health, covering load failures, watcher errors, in-flight refreshes, and staleness. A watcher error expires from the badge 60 seconds after the last failure, matching the watcher's own treatment of these errors as recoverable \u2014 it closes the handle and degrades to catch-up polling \u2014 so one transient hiccup cannot latch the badge for the life of the process and hide the staleness signal behind it\n- Toasts stack up to three\n- `R`, `p`, and `s` are listed in the help overlay; `p` and `s` were previously documented only in the README\n\n### Changed\n\n- The Plans panel's source filter moved from `s` to `S`, and the Sessions panel's mind-map node filter from `f` to `F`, so the reserved global session-switch and session-filter keys work from every panel\n- The pricing cache follows `SIDEKICK_CONFIG_DIR` rather than a hardcoded `~/.config/sidekick`\n\n### Removed\n\n- The dead ANSI mind-map renderer and its helpers, and the unused `getRandomPhraseColored()`\n\n## [0.24.3] - 2026-07-24\n\n### Fixed\n\n- Dashboard costs for Claude Sonnet 5 ran 50% high, billed at $3/$15 instead of its actual $2/$10. Sonnet 5 is the `balanced` tier for the Claude API and OpenCode providers, so this shifted most totals shown before the pricing catalog was fetched\n- Dashboard costs for GPT-5.6 Luna ran about 5\xD7 high until the pricing catalog was fetched, because Luna had no rate of its own and fell back to GPT-5.6 Sol's $5/$30 rather than its published $1/$6. GPT-5.5 Pro, GPT-5.4 Pro, and GPT-5.4 Nano shared the cause and are corrected too\n- Twelve more models drew their cost from a similar model's rate. Mini and nano tiers read far too expensive (GPT-5 Nano 25\xD7 high, GPT-4.1 Nano 20\xD7) and pro tiers far too cheap (GPT-5 Pro, GPT-5.2 Pro, o1-pro, o3-pro, and o3-deep-research all showed their base model's rate). GPT-5.3 Codex and o1-mini were on outdated rates\n- GPT-5.6 Luna sizes its context gauge from an explicit 1,050,000-token window, still superseded by the window Codex reports for your tier\n\n## [0.24.2] - 2026-07-24\n\n### Added\n\n- Context windows previously reported by a provider are loaded at startup and applied to historical views, so a Codex session shows the window its account tier actually gets rather than the model's published maximum. Local read, offline-safe, non-blocking\n- Context windows also hydrate from the LiteLLM catalog, so newly released models size correctly without a CLI update\n\n### Fixed\n\n- The context gauge read roughly eight times fuller than reality on Claude Sonnet 4.7, which resolved to a 128K window against its real 1M. Sonnet 4 was affected by the same cause\n\n## [0.24.1] - 2026-07-22\n\n### Changed\n\n- Session reads inherit the shared transcript provenance surface: entrypoint, meta/sidechain flags, original roles, cwd, and git branch flow through canonical transcripts\n\n## [0.24.0] - 2026-07-22\n\n### Changed\n\n- Session reads inherit the shared discriminated event contract, normalized usage pricing, canonical transcripts, and isolated observed-session collection surface\n- A provider-reported $0 session cost now displays as $0 rather than a catalog estimate\n\n## [0.23.1] - 2026-07-21\n\n### Security\n\n- Clipboard and URL-opening helpers spawn platform tools with argument arrays instead of interpolated shell strings\n\n### Fixed\n\n- **2026-07 review backlog (CLI portion)**: quota-failure text wraps instead of rendering one character per line, the `today` date filter includes today in UTC-negative timezones, mouse clicks land on the clicked row, and configured model IDs reach the inference clients instead of being squashed to `haiku`\n- Shared observed-session reads tolerate message-less summary/bookkeeping rows and retain unresolved top-level tool requests with stable fallback IDs\n\n### Changed\n\n- `sidekick quota` now exits non-zero when a requested provider's quota is unavailable (including `--all` and `--json` failure payloads), so scripts can detect failures\n- The deprecated `quota --tier` flag (part of the removed z.ai observed-traffic estimator) is no longer accepted\n\n## [0.23.0] - 2026-07-18\n\n### Added\n\n- **`sidekick statusline`** renders a warm, cache-only account/quota/burn footer without account bootstrap, pricing hydration, or quota network access\n- **Quick capture** with `tasks add`, `tasks done`, `note add`, and `decision add`, using the shared atomic merge writers\n- **`sidekick doctor` and `sidekick today`** provide cross-provider health diagnostics and a cache-only daily brief\n- **`sidekick mcp`** exposes seven read-only facts tools for quota, burn rate, context pressure, tasks, decisions, notes, and composed project context over stdio MCP\n- **Generic handoff deep links** through `handoff open --url-template`, with identifier-only placeholders and a no-open mode\n- Failure-history, quality trend, code-impact, per-model churn/cost, and compaction-ledger summaries in terminal views\n\n### Changed\n\n- The Plans pipeline is active again: live plans persist to the shared plan store and carry per-step time, token, tool, and cost analytics into the dashboard\n- Static readers use canonical symlink-aware project identity, including legacy-store fallback\n\n## [0.22.0] - 2026-07-02\n\n### Added\n\n- **Date filter mode now actually filters by date**: The dashboard's `[D]ate` filter previously fell through to plain substring matching. It now parses `today`, `yesterday`, relative windows (`12h`, `2d`, `1w`), ISO days (`YYYY-MM-DD`), and `>`/`<` prefixes (`<2d` = older than two days); unparseable expressions show the red filter error while leaving the list unfiltered, and the overlay shows a grammar hint while empty\n- **Mouse-capture toggle**: Press `M` in the dashboard (works on the splash screen too) or launch with `--no-mouse` to disable mouse tracking so terminal click-drag text selection and copy work again. The status bar shows `MOUSE OFF` while disabled; the interactive toggle persists to `cli-config.json`, the flag is per-run\n- **Scrollable help overlay**: `?` help now windows its content with `j`/`k` scrolling and \u25B2/\u25BC indicators, so nothing is clipped on short terminals\n- **Examples in `--help`**: The root command plus `quota`, `extract`, and `dump` append real invocation examples showcasing `quota --all`, `quota history`, `extract -i`, `dump --list`, and the global `--json` flag\n- **Strict option validation**: `--provider` (root, `quota`, `quota history`, `peak`), `report --theme`, `tasks --status`, and `quota --tier` now reject unknown values at parse time with the allowed choices, instead of silently coercing typos to a default. `quota history` keeps its legacy `claude-code`/`z.ai` aliases\n- **Confirmation before `account --remove`**: Both the Claude and Codex remove paths now print the resolved account and require an interactive y/N answer (default No). `-y`/`--yes` (or `--force`) skips the prompt; `--json` and non-TTY contexts require the flag and exit 1 otherwise \u2014 **unattended automation that removes accounts must add `--yes`**\n\n### Fixed\n\n- **`q` is typable in the filter box**: The quit key no longer swallows `q` while the filter overlay is open, so queries like `query` or `sqlite` work; `q` still closes the help/changelog/context-menu overlays and quits the dashboard otherwise\n- **Panel keybindings are reachable**: Panel-declared bindings now win over the shadowable global keys while their condition holds \u2014 the Sessions panel's Mind Map `f` (filter nodes) binding works when the Mind Map tab is active, falling back to the global session filter elsewhere. Reserved keys (`q ? / M j k g G h` and digits) can never be shadowed by a panel\n- **Overlays track terminal resize**: Filter, toast, context-menu, and changelog overlays reposition on resize and clamp their widths to narrow terminals; the splash `jump` hint reflects the real panel count instead of `1-5`; the Sessions summary tasks line no longer renders as `3/ completed`\n- **Detail pane wraps to the actual layout**: Word-wrap now derives from the live side-panel width (narrow/normal/wide-side/expanded) instead of assuming the default 26-column panel, fixing under-/over-wrapping in three of the four layout modes\n- **Overlay scroll clamps to content**: The `?` help and `V` changelog overlays no longer accumulate scroll past their last line \u2014 over-scrolling then reversing responds immediately, and the changelog overlay no longer shows a blank box when scrolled past the end\n\n### Changed\n\n- **Ctrl+C always quits the dashboard**, even while an overlay is open (previously it only closed the overlay)\n- **`V` (changelog) and `r` (report) are inactive on the splash screen**; `q`, `?`, `M`, and panel digits still work there\n\n## [0.21.6] - 2026-07-02\n\n### Added\n\n- **Codex reset credits in `sidekick quota`**: When Codex quota is fetched from the API (`--refresh`, or the API-first `--all` view), the Rate Limits output now includes a `Reset Credits: N available` line plus a per-credit `Expires` row (expiry timestamp and title) for each available reset grant\n\n### Changed\n\n- **Bundled `sidekick-shared` 0.21.6**: Picks up `fetchCodexResetCreditsFromApi()` and the reset-credits snapshot on Codex quota state\n\n## [0.21.5] - 2026-06-30\n\n### Fixed\n\n- **`sidekick quota --all` no longer shows Codex at 0%**: Codex emits multiple rate-limit families per session (the aggregate plan quota plus per-model families like `codex_bengalfox`). A per-model family at 0% with a later reset window could mask the real plan quota in the local-data path; the aggregate family is now always preferred, so `--all` matches `--provider codex --refresh`. `quota --all` also fetches Codex API-first (with automatic local fallback), matching the live Claude/z.ai legs; the single-provider `quota --provider codex` stays local-by-default (live via `--refresh`)\n\n### Changed\n\n- **Bundled `sidekick-shared` 0.21.5**: Picks up the aggregate Codex rate-limit selection\n\n## [0.21.4] - 2026-06-30\n\n### Fixed\n\n- **`sidekick quota` shows the logged-in account**: The account line now reflects the currently logged-in Claude/Codex account even after a native `claude /login` or `codex login`, instead of the stale saved registry pointer. The live Codex account is resolved once per invocation and reused across the fetch and the printed output\n\n### Changed\n\n- **Bundled `sidekick-shared` 0.21.4**: Picks up the live-first active-account resolvers\n\n## [0.21.3] - 2026-06-23\n\n### Changed\n\n- **`sidekick quota` projects every provider**: Quota output is now rendered as a unified table with aligned `now` / `projected` / `resets` columns, and projected end-of-window utilization is shown for **all** providers (Claude, Codex, z.ai) \u2014 previously only Claude displayed a projection. A `\u2014` placeholder appears when a projection is unavailable, and utilization bars are clamped to 0\u2013100% so over-limit projections render cleanly. `sidekick quota --all` uses the same table for each provider section\n- **Bundled `sidekick-shared` 0.21.3**: Picks up the quota projection helpers and the bounded synchronous CLI probes\n\n### Security\n\n- **npm audit**: Bumped `esbuild` to `^0.28.1` and `vitest` to `^4.1.9` to clear reported dev-dependency advisories\n\n## [0.21.2] - 2026-06-22\n\n### Changed\n\n- **`sidekick quota --provider zai`** now renders authoritative z.ai plan utilization from z.ai's quota API (5-Hour / Weekly windows with real reset times) instead of estimating from observed OpenCode traffic, falling back to a cached snapshot when the API is unavailable. `sidekick quota --all` and `sidekick quota history --provider zai` use the same authoritative source\n- **`--tier lite|pro|max|auto`** is deprecated and no longer affects the displayed utilization\n\n## [0.21.1] - 2026-06-21\n\n### Added\n\n- **z.ai Coding Plan quota**: `sidekick quota --provider zai` derives and renders z.ai plan utilization from OpenCode traffic already on disk (5-Hour / Weekly windows with per-tier prompt budgets). `--tier lite|pro|max|auto` overrides the assumed plan tier (default `auto`). `sidekick quota --provider opencode` now auto-routes to z.ai quota when z.ai traffic is detected. `sidekick quota --all` includes the z.ai section when active\n- **z.ai quota history heatmap**: `sidekick quota history --provider zai` renders a 13-week z.ai utilization heatmap for the current workspace, alongside the existing Claude and Codex heatmaps (now also in `--all`)\n\n### Changed\n\n- **Bundled `sidekick-shared` 0.21.1**: Picks up z.ai quota derivation and the OpenCode data directory resolution fix.\n\n### Limitations\n\n- z.ai quota is **estimated, not authoritative** \u2014 it reflects only the OpenCode traffic Sidekick observed on this machine/workspace (z.ai exposes no usage API) compared against provisional per-tier prompt budgets. z.ai is observed-only (no z.ai inference provider) and has no account management yet; with `--tier auto`, the tier is under-detected early in a cycle (use an explicit `--tier`); reset times are approximate unless a rate-limit error is trapped.\n\n## [0.21.0] - 2026-06-21\n\n### Added\n\n- **Account login**: `sidekick account --login` starts the provider-isolated login flow for Claude Max or Codex and saves the authenticated profile without disturbing the active account until finalization\n- **All-provider account view**: `sidekick account --provider all` lists Claude and Codex saved accounts together, including active state. JSON output returns provider-keyed account arrays and active ids\n- **Terminal account helpers**: `sidekick account --launcher <name>` creates opt-in launchers for the selected account, and `--auto-switch <pct|off>` persists the CLI auto-switch threshold preference\n- **Multi-provider quota output**: `sidekick quota --all` shows Claude and Codex quota state together \u2014 each provider degrades independently, so one provider's quota still prints even when the other is unavailable; `--all --json` emits a provider-keyed payload for automation\n\n### Changed\n\n- **Bundled `sidekick-shared` 0.21.0**: Picks up Account Management 2.0 acquisition, switching, terminal sync, quota auto-switch, and account schema exports.\n\n## [0.20.0] - 2026-06-17\n\n### Added\n\n- **`sidekick extract`**: New one-shot command for pulling actionable assets out of recent Claude Code and Codex chats for exactly the current cwd. It extracts URLs, filesystem-validated file paths, commands the agent suggested for the user to run, and plan-mode plans. Output is grouped and colored by default, labels each item with its source agent, validates invalid `--type` and `--limit` values, preserves `inChat` and per-item provenance in `--json`, and offers `-i/--interactive` for a picker that opens URLs or copies selected paths, commands, and plans. `--provider claude-code` and `--provider codex` scope extraction to one agent; OpenCode is reported as unsupported for now\n\nThanks to [@B33pBeeps](https://github.com/B33pBeeps) (Juan Fourie) for contributing this feature in [#17](https://github.com/cesarandreslopez/sidekick-agent-hub/pull/17), adapted from his MIT-licensed [`trawl`](https://github.com/B33pBeeps/trawl) project.\n\n## [0.19.3] - 2026-06-17\n\n### Changed\n\n- **Bundled `sidekick-shared` projection contract**: The shared assistant-turn projection now exposes a v2 `timeline` array for interleaved reasoning, narration, and tool groups. This is a shared-library contract update for downstream consumers and does not change CLI behavior by itself\n\n## [0.19.2] - 2026-06-15\n\n### Changed\n\n- **Bundled `sidekick-shared` 0.19.2**: The shared library gains a browser-safe assistant-turn projection module (`segmentAssistantTurn()`, `assistantTurnEventsFromSessionEvents()`, and mirrored Zod schemas) that segments an assistant turn into a compact Process + Answer shape, with Claude `Task` subagent refs surfaced without leaking prompt text \u2014 internal additions that don't change CLI behavior\n\n## [0.19.1] - 2026-06-09\n\n### Changed\n\n- **Bundled `sidekick-shared` 0.19.1**: Model-ID pricing and context-window lookups (behind the dashboard's cost and context gauges) now tolerate padded or mixed-case IDs. The shared library also gains Zod boundary schemas, an `extractSessionEvents()` progress-unwrapping helper, and a `/schemas` subpath export for downstream consumers \u2014 internal additions that don't change CLI behavior\n\n## [0.19.0] - 2026-06-09\n\n### Added\n\n- **Claude Opus 4.8 & Fable 5 support**: The dashboard's context-window gauge and cost estimates recognize `claude-opus-4-8` and `claude-fable-5` (both 1M-token context; Opus 4.8: $5/$25 per MTok, Fable 5: $10/$50 per MTok) via the shared model catalog\n\n### Changed\n\n- **Codex account switching now swaps `~/.codex/auth.json`**: `sidekick account --provider codex --switch-to <id>` (and `--add`) activates the account by atomically swapping its backed-up credentials into the system `~/.codex/` home, mirroring the Claude switch pattern \u2014 codex terminals outside Sidekick pick up the switch. Profile directories become pure credential backups, with a one-time startup migration for installs created under the old `CODEX_HOME`-redirection model. The command surfaces swap warnings on add, switch, and remove: a running codex process that needs restarting, stale credentials, or OS-keyring credential storage that Sidekick cannot swap\n\n### Fixed\n\n- **Opus 4.6/4.7 cost over-estimation**: Dashed model IDs fell back to the Opus 4.0 pricing tier ($15/$75 instead of $5/$25), inflating estimated costs 3\xD7\n- **Haiku 4.5 unpriced under dashed IDs**: Costs for `claude-haiku-4-5-*` sessions could render as \"\u2014\" because no dashed static pricing key existed\n\n## [0.18.5] - 2026-06-04\n\n### Changed\n\n- **Consistent Codex transcripts**: `sidekick dashboard` and `sidekick report` now parse Codex sessions via `parseTranscriptFromEvents()`, matching the canonical `SessionEvent` pipeline used by the other providers\n- **Bundled `sidekick-shared` 0.18.5**: Picks up the new session context evidence snapshot API (`buildSessionContextSnapshot`, `readSessionContextSnapshot`, `SessionContextSnapshot` and related types) and the Codex session evidence gap closures \u2014 `system` audit events, normalized `token_count` rate limits, per-file `apply_patch` expansion, tool-emission dedupe, MCP server attribution, and the new `ProviderReaderSessionWatcher`\n\n## [0.18.4] - 2026-05-27\n\n### Added\n\n- **`sidekick peak --provider <id>`**: New flag gates peak-hours output on the session provider. When the resolved provider is not `claude-code`, the command prints a \"not applicable\" message instead of calling the upstream endpoint\n\n### Changed\n\n- **Bundled `sidekick-shared` 0.18.4**: Picks up `scopePeakHoursToSessionProvider()`, `isClaudeCodeSessionProvider()`, `createPeakHoursNotApplicableState()` for peak-hours scoping, the improved Codex quota snapshot selection logic (`isPreferredQuotaHit`, `findAccountRolloutFiles`, `shouldKeepExistingSnapshot`), and the `notApplicable` field on `PeakHoursState`\n\n## [0.18.3] - 2026-05-19\n\n### Added\n\n- **`sidekick quota history`**: New subcommand that renders a 13-week GitHub-contributions-style heatmap of quota utilization for the current workspace. Flags: `--weeks <n>` (1-26, default 13), `--provider claude|codex` (default both), `--workspace <path>` (default cwd). Bucketed glyphs (`\xB7 \u2591 \u2592 \u2593 \u2588`) are color-coded by utilization band (\u22640 / <25 / <50 / <75 / \u226575), with per-provider rows and a peak / avg / unavailable-days / samples footer. Days that hit `available: false` render as a red `\xD7`. With `--json`, emits a `{ workspaceId, weeks, providers: { claude?, codex? }, generatedAt }` payload \u2014 the same shape consumed by the VS Code dashboard\n\n### Changed\n\n- **Bundled `sidekick-shared` 0.18.3**: Picks up the new per-workspace quota history surface (`appendQuotaHistorySample`, `readQuotaHistoryRange`, `readQuotaHistoryDailyBuckets`, `pruneQuotaHistory`, `getWorkspaceIdFromPath`) and the optional `workspaceId` / `appendHistorySample` hooks on `CodexQuotaWatcher`\n\n## [0.18.2] - 2026-05-19\n\n### Added\n\n- **`sidekick quota --refresh`**: New flag on the `quota` command that, for Codex, explicitly refreshes from the ChatGPT usage API before falling back to local rollout data and cached snapshots. Without the flag, the Codex quota path stays fully local and makes no upstream network call\n\n### Changed\n\n- **Codex quota is local-only by default**: `sidekick quota --provider codex` now delegates to the new `resolveCodexQuota` orchestrator in `sidekick-shared`. It checks the current workspace's most recent rollout, then recent account-level rollouts under `CODEX_HOME/sessions`, then the active account's cached snapshot \u2014 no upstream network call unless `--refresh` is passed. Failure output continues to include structured `failureKind` / `httpStatus` / `retryAfterMs` fields under `--json`\n- **Bundled `sidekick-shared` 0.18.2**: Picks up the new Codex quota orchestrator (`resolveCodexQuota`, `resolveCodexQuotaFromLocalSources`, `readLatestCodexQuotaFromRollouts`, `fetchCodexQuotaFromApi`), the relaxed `CodexRateLimits` shape (nullable `resets_at` / `window_minutes`), the rate-limit-only `token_count` event emission in `JsonlSessionWatcher`, and `state_N.sqlite` discovery in `CodexDatabase` + provider auto-detect\n\n## [0.18.1] - 2026-05-08\n\n### Changed\n\n- **Shared dashboard formatting**: terminal dashboard `fmtNum()` and `formatDuration()` now delegate to `formatTokenCount()` and `formatDurationMs()` from `sidekick-shared`, keeping the existing CLI surface (uppercase `K`/`M` suffix, compact `1m5s` style) while removing forked rounding logic\n\n## [0.18.0] - 2026-05-08\n\n### Changed\n\n- **Bundled `sidekick-shared` 0.18.0**: Picks up the new provider-aware quota orchestration surface \u2014 `MultiProviderQuotaService`, `CodexQuotaWatcher`, `getActiveAccountStatus()`, `extractToolCall()`, cost-provenance helpers (`calculateCostWithProvenance`, `mergeCostSources`), and model display helpers (`shortModelName`, `getModelDisplayInfo`, `compareModelIds`, `sortModelIds`). `parseModelId()` also now recognizes legacy Claude IDs such as `claude-3-opus-20240229` and `claude-3-5-sonnet-20241022`\n- **No CLI runtime changes**: This release ships the shared library upgrade for downstream tooling alignment; `sidekick quota`, `sidekick status`, and the live dashboard keep using the existing polling path. Wiring the new orchestrator into the CLI will land in a follow-up release\n\n## [0.17.7] - 2026-04-28\n\n### Fixed\n\n- **Quota snapshot write race**: Updated the bundled `sidekick-shared` snapshot writer so concurrent `sidekick quota` / Codex session updates no longer collide on `quota-snapshots.json.tmp` or throw `ENOENT`. Failed writes now also clean up their partial temp files instead of leaving orphans in `~/.config/sidekick/`\n\n## [0.17.6] - 2026-04-19\n\n### Added\n\n- **`sidekick peak` command**: One-shot check for Claude's current peak-hours state \u2014 weekdays 13:00\u201319:00 UTC, when session limits drain faster on Free/Pro/Max/Team subscriptions. Prints a color-coded status block with a countdown to the next transition. Data comes from the public `promoclock.co/api/status` endpoint (third-party, unaffiliated with Anthropic) with a graceful fallback when unreachable. `--json` emits the full raw state\n- **Peak-hours block in `sidekick status`**: When the active provider is `claude-code`, the Claude + OpenAI health blocks are now followed by a **Claude Peak Hours** block (off-peak or in-peak, with countdown). Gated on the provider so OpenCode / Codex users don't trigger an unnecessary third-party fetch. `--json` output includes the new `peak` field\n- **Peak-hours summary in `sidekick quota`**: Claude subscription quota output now shows a **Peak** line under the 5-hour / 7-day bars \u2014 green dot off-peak, orange dot during an active peak, with a countdown to the next transition. `--json` output includes the new `peak` field\n\n## [0.17.5] - 2026-04-18\n\n### Added\n\n- **Default account bootstrap at CLI startup**: The CLI now calls `ensureDefaultAccounts()` from `sidekick-shared` at module load and awaits the result inside a Commander `preAction` hook, so the first real subcommand blocks briefly on the bootstrap while `--version` and `--help` stay instant. When a system Claude Code or Codex credential exists and no saved account is active for that provider yet, the CLI registers it as \"Default\" \u2014 `sidekick quota`, `sidekick account`, and `sidekick stats` now reflect the active account on first run without requiring an explicit `sidekick account --add` first. Idempotent, never overwrites manually saved accounts, and all errors are swallowed so startup is never blocked\n\nThanks to [@B33pBeeps](https://github.com/B33pBeeps) (Juan Fourie) for contributing this feature in [#16](https://github.com/cesarandreslopez/sidekick-agent-hub/pull/16).\n\n## [0.17.4] - 2026-04-17\n\n### Changed\n\n- **Pricing hydration import migrated to `sidekick-shared/node`**: `cli.ts` now imports `hydratePricingCatalog` from the new Node-only subpath and keeps `detectProvider` on the package root. Runtime behavior is unchanged; the split makes the CLI's import surface self-documenting (hydration is explicitly a Node API) and aligns the CLI with the shared library's new versioned public API contract\n\n## [0.17.3] - 2026-04-17\n\n### Changed\n\n- **Version sync with the VS Code extension**: Republished to keep CLI, extension, and shared-library versions aligned after a cosmetic changelog fix in 0.17.3. No CLI code changes \u2014 functionally identical to 0.17.2\n\n## [0.17.2] - 2026-04-17\n\n### Added\n\n- **LiteLLM pricing hydration on startup**: The CLI now fetches the LiteLLM pricing catalog on startup and caches to `~/.config/sidekick/pricing-catalog.json` with a 24-hour TTL, 3s timeout, and stale-cache fallback \u2014 new model prices are picked up without a CLI upgrade\n- **Expanded pricing coverage**: GPT-4o, GPT-4.1, GPT-5.x, o1, o3, and o3-mini families are now priced alongside the existing Claude entries\n- **Real-dollar Codex / Claude Code costs**: `EventAggregator` computes cost from the pricing table when the session provider doesn't report one, so `sidekick` live dashboards now show actual dollars for Codex and Claude Code sessions\n- **`stats` footer lists unpriced models**: `sidekick stats` prints any models encountered with no pricing entry so missing coverage is visible\n\n### Fixed\n\n- **Context-gauge % wrong for Opus 4.7 (1M) and other new models**: The dashboard's context gauge was dividing by 200K for Claude Opus 4.7 (native 1M), inflating the displayed %. The shared model \u2192 context-window map now includes Opus/Sonnet 4.7 (1M), GPT-5.4 (1.05M), GPT-5.3-Codex (400K), and GPT-5.3-Codex-Spark (128K). Claude Code's `[1m]` suffix is now also honored as an explicit 1M marker\n- **Silent Sonnet-priced fallback for unknown models**: Codex, GPT-5.x, and o-series rows were being rendered at Sonnet rates. Unknown-model rows now render as `\u2014` in yellow instead of inventing a dollar figure\n\n### Changed\n\n- **`historical-data.json` schema v2**: reads `priced` flag and `unpricedModelIds` from records written by the latest VS Code extension; v1 records still read correctly\n\n## [0.17.1] - 2026-04-13\n\n### Fixed\n\n- **Codex multi-home session discovery**: Provider detection now scans all candidate Codex home directories, fixing missed sessions when the managed profile home is empty but the system `~/.codex/` has activity\n\n## [0.17.0] - 2026-04-13\n\n### Added\n\n- **Multi-provider account management**: `sidekick account` now supports `--provider codex` for Codex profile management alongside Claude Code accounts\n- **Codex account lifecycle**: `--add` prepares a profile and spawns `codex login`; `--switch-to` and `--remove` accept email, label, or profile ID\n- **Quota snapshot fallback**: `sidekick quota` for Codex shows cached rate-limit snapshots when no active session exists, with \"cached from\" timestamp\n\n### Fixed\n\n- **Email normalization**: Claude account lookup normalizes email case for reliable matching\n\n## [0.16.1] - 2026-03-27\n\n### Fixed\n\n- **Dashboard provider status scoping**: The TUI now shows degraded-service notices only for the monitored provider \u2014 Claude for Claude Code sessions, OpenAI for Codex sessions, and no status banner for OpenCode\n\n## [0.16.0] - 2026-03-23\n\n### Changed\n\n- **Consistent cost formatting**: All cost displays (`stats`, `context`, Sessions panel, narrative prompt) now use shared `formatCost()` with intelligent decimal precision (4 places for < $0.01, 2 otherwise)\n- **QuotaService**: Rewritten to wrap shared `QuotaPoller` with exponential backoff instead of manual polling loop\n- **modelContext**: Now re-exports `getModelInfo` from shared library alongside `getContextWindowSize`\n\n## [0.15.2] - 2026-03-18\n\n### Fixed\n\n- **CLI help descriptions**: Updated `quota` and `status` command descriptions to reflect provider-aware behavior\n- **`sidekick quota --provider`**: Added local `--provider` option so `sidekick quota --provider codex` works naturally\n\n## [0.15.0] - 2026-03-18\n\n### Added\n\n- **OpenAI status page monitoring**: CLI dashboard now shows OpenAI API status alongside Claude API status\n- **Codex rate limits in dashboard**: Sessions panel displays Codex rate-limit data with \"Rate Limits\" header instead of \"Quota\"\n- **Provider-aware `sidekick quota` command**: Detects active provider and shows Codex rate limits, Claude subscription quota, or an informational message for OpenCode\n\n### Fixed\n\n- **QuotaService polling for Codex**: Dashboard no longer starts Claude OAuth quota polling when the active provider is Codex\n\n## [0.14.2] - 2026-03-16\n\n### Fixed\n\n- **Quota polling interval**: Reduced quota refresh from every 30 seconds to every 5 minutes to avoid unnecessary API calls\n- **SessionsPanel `detailWidth()` call**: Removed unused parameter from `detailWidth()` in the Sessions panel quota rendering\n\n## [0.14.1] - 2026-03-14\n\n### Fixed\n\n- **Per-model context window sizes**: Dashboard context gauge now shows correct utilization for Claude Opus 4.6 (1M context) and other models with non-200K windows\n\n### Changed\n\n- **Shared model context lookup**: CLI dashboard now uses the centralized `getModelContextWindowSize()` from `sidekick-shared` instead of a local duplicate map\n\n## [0.14.0] - 2026-03-12\n\n### Added\n\n- **`sidekick account` Command**: Manage Claude Code accounts from the terminal \u2014 list saved accounts, add the current account with an optional label, switch to the next or a specific account, and remove accounts. Supports `--json` output for scripting\n- **Quota Account Label**: `sidekick quota` now shows the active account email and label above the quota bars when multi-account is enabled\n- **macOS Keychain Support**: `sidekick account` and `sidekick quota` now read and write credentials via the system Keychain on macOS, fixing account switching and quota checks on Mac\n\n## [0.13.8] - 2026-03-12\n\n### Changed\n\n- **Structured quota failure output**: `sidekick quota` now renders consistent auth, rate-limit, server, network, and unexpected-failure copy from shared quota failure descriptors while preserving `--json` machine-readable output\n- **Dashboard unavailable quota rendering**: The Sessions panel now shows Claude Code quota failures inline instead of hiding the quota section whenever subscription data is unavailable\n- **Quota transition toasts**: The Ink dashboard now fires low-noise toast notifications only when Claude Code quota failure state changes, avoiding repeated alerts every polling interval\n\n## [0.13.7] - 2026-03-11\n\n### Changed\n\n- **npm README sync**: Updated the published CLI package README to reflect current OpenCode monitoring behavior, platform-specific data directories, and the `sqlite3` runtime requirement\n- **README badge cleanup**: Removed the Ask DeepWiki badge from the published CLI package README; the repo root README still keeps it\n\n## [0.13.6] - 2026-03-11\n\n### Changed\n\n- **Refreshed CLI Dashboard Wordmark**: Updated the dashboard wordmark/header styling for a cleaner splash and dashboard identity\n\n### Fixed\n\n- **OpenCode dashboard startup**: OpenCode DB-backed session discovery now resolves projects by worktree, sandboxes, and session directory instead of quietly behaving like no session exists\n- **OpenCode runtime notices**: The CLI now prints an OpenCode-only actionable notice when `opencode.db` exists but `sqlite3` is missing, blocked, or otherwise unusable in the current shell environment\n\n## [0.13.5] - 2026-03-10\n\n### Added\n\n- **`sidekick status` Command**: One-shot Claude API status check with color-coded text output and `--json` mode\n- **Dashboard Status Banner**: Status bar shows a colored `\u25CF API minor/major/critical` indicator when Claude is degraded; Sessions panel Summary tab shows an \"API Status\" section with affected components and active incident details. Polls every 60s\n\n## [0.13.4] - 2026-03-08\n\n### Fixed\n\n- **Onboarding Phrase Spam**: Splash screen and detail pane motivational phrases memoized \u2014 no longer flicker every render tick (fixes [#13](https://github.com/cesarandreslopez/sidekick-agent-hub/issues/13))\n\n### Changed\n\n- **Simplified Logo**: Replaced 6-line ASCII robot art with compact text header in splash, help, and changelog overlays\n- **Removed Dead Code**: Removed unused `getSplashContent()` and `HELP_HEADER` exports from branding module\n\n## [0.13.3] - 2026-03-04\n\n_No CLI-specific changes in this release._\n\n## [0.13.2] - 2026-03-04\n\n_No CLI-specific changes in this release._\n\n## [0.13.1] - 2026-03-04\n\n### Added\n\n- **`sidekick quota` Command**: One-shot subscription quota check showing 5-hour and 7-day utilization with color-coded progress bars and reset countdowns \u2014 supports `--json` for machine-readable output\n- **Quota Projections**: Elapsed-time projections shown in `sidekick quota` output and TUI dashboard quota section \u2014 displays projected end-of-window utilization next to current value (e.g., `40% \u2192 100%`), included in `--json` output as `projectedFiveHour` / `projectedSevenDay`\n\n## [0.13.0] - 2026-03-03\n\n_No CLI-specific changes in this release._\n\n## [0.12.10] - 2026-03-01\n\n### Added\n\n- **Events Panel** (key 7): Scrollable live event stream with colored type badges (`[USR]`, `[AST]`, `[TOOL]`, `[RES]`), timestamps, and keyword-highlighted summaries; detail tabs for full event JSON and surrounding context\n- **Charts Panel** (key 8): Tool frequency horizontal bars, event type distribution, 60-minute activity heatmap using `\u2591\u2592\u2593\u2588` intensity characters, and pattern analysis with frequency bars and template text\n- **Multi-Mode Filter**: `/` filter overlay now supports four modes \u2014 substring, fuzzy, regex, and date range \u2014 Tab cycles modes, regex mode shows red validation errors\n- **Search Term Highlighting**: Active filter terms highlighted in blue within side list items\n- **Timeline Keyword Coloring**: Event summaries in the Sessions panel Timeline tab now use semantic keyword coloring \u2014 errors red, success green, tool names cyan, file paths magenta\n\n### Removed\n\n- **Search Panel**: Removed redundant Search panel (previously key 7) \u2014 the `/` filter with multi-mode support serves the same purpose\n\n## [0.12.9] - 2026-02-28\n\n### Added\n\n- **Standalone Data Commands**: `sidekick tasks`, `sidekick decisions`, `sidekick notes`, `sidekick stats`, `sidekick handoff` for accessing project data without launching the TUI\n- **`sidekick search <query>`**: Cross-session full-text search from the terminal\n- **`sidekick context`**: Composite output of tasks, decisions, notes, and handoff for piping into other tools\n- **`--list` flag on `sidekick dump`**: Discover available session IDs before requiring `--session <id>`\n- **Search Panel**: Search panel (panel 7) wired into the TUI dashboard\n\n### Changed\n\n- **`taskMerger` utility**: Duplicate `mergeTasks` logic extracted into shared `taskMerger` utility\n- **Model constants**: Hardcoded model IDs extracted to named constants\n\n### Fixed\n\n- **`convention` icon**: Notes panel icon replaced with valid `tip` type\n- **Linux clipboard**: Now supports Wayland (`wl-copy`) and `xsel` fallbacks, with error messages instead of silent failure\n- **`provider.dispose()`**: Added to `dump` and `report` commands (prevents SQLite connection leaks)\n\n## [0.12.8] - 2026-02-28\n\n### Changed\n\n- **Dashboard UI/UX Polish**: Visual overhaul for better hierarchy, consistency, and readability\n - Splash screen and help overlay now display the robot ASCII logo\n - Toast notifications show severity icons (\u2718 error, \u26A0 warning, \u25CF info) with inner padding\n - Focused pane uses double-border for clear focus indication\n - Section dividers (`\u2500\u2500 Title \u2500\u2500\u2500\u2500`) replace bare bold headers in summary, agents, and context attribution\n - Tab bar: active tab underlined in magenta, inactive tabs dimmed, bracket syntax removed\n - Status bar: segmented layout with `\u2502` separators; keys bold, labels dim\n - Summary metrics condensed: elapsed/events/compactions on one line, tokens on one line with cache rate and cost\n - Sparklines display peak metadata annotations\n - Progress bars use blessed color tags for consistent coloring\n - Help overlay uses dot-leader alignment for all keybinding rows\n - Empty state hints per panel (e.g. \"Tasks appear as your agent works.\")\n - Session picker groups sessions by provider with section headers when multiple providers are present\n\n## [0.12.7] - 2026-02-27\n\n### Added\n\n- **HTML Session Report**: `sidekick report` command generates a self-contained HTML report and opens it in the default browser\n - Options: `--session`, `--output`, `--theme` (dark/light), `--no-open`, `--no-thinking`\n - TUI Dashboard: press `r` to generate and open an HTML report for the current session\n\n## [0.12.6] - 2026-02-26\n\n### Added\n\n- **Session Dump Command**: `sidekick dump` exports session data in text, markdown, or JSON format with `--format`, `--width`, and `--expand` options\n- **Plans Panel Re-enabled**: Plans panel restored in CLI dashboard with plan file discovery from `~/.claude/plans/`\n- **Enhanced Status Bar**: Session info display improved with richer metadata\n\n### Fixed\n\n- **Old snapshot format migration**: Restoring pre-0.12.3 session snapshots no longer shows empty timeline entries\n\n### Changed\n\n- **Phrase library moved to shared**: CLI-specific phrase formatting kept local, all phrase content now from `sidekick-shared`\n\n## [0.12.5] - 2026-02-24\n\n### Fixed\n\n- **Update check too slow to notice new versions**: Reduced npm registry cache TTL from 24 hours to 4 hours so upgrade notices appear sooner after a new release\n\n## [0.12.4] - 2026-02-24\n\n### Fixed\n\n- **Session crash on upgrade**: Fixed `d.timestamp.getTime is not a function` error when restoring tool call data from session snapshots \u2014 `Date` objects were serialized to strings by JSON but not rehydrated on restore, causing the session monitor to crash on first run after upgrading from 0.12.2 to 0.12.3\n\n## [0.12.3] - 2026-02-24\n\n### Added\n\n- **Latest-node indicator**: The most recently added node in tree and boxed mind map views is now marked with a yellow indicator\n- **Plan analytics in mind map**: Tree and boxed views now display plan progress and per-step metrics\n - Tree view: plan header shows completion stats; steps show complexity, duration, tokens, tool calls, and errors in metadata brackets\n - Box view: progress bar with completion percentage; steps show right-aligned metrics; subtitle shows step count and total duration\n- **Cross-provider plan extraction**: Shared `PlanExtractor` now handles Claude Code (EnterPlanMode/ExitPlanMode) and OpenCode (`<proposed_plan>` XML) plans \u2014 previously only Codex plans were shown\n- **Enriched plan data model**: Plan steps include duration, token count, tool call count, and error messages\n- **Phase-grouped plan display**: When a plan has phase structure, tree and boxed views group steps under phase headers with context lines from the original plan markdown\n- **Node type filter**: Press `f` on the Mind Map tab to cycle through node type filters (file, tool, task, subagent, command, plan, knowledge-note) \u2014 non-matching sections render dimmed in grey\n\n### Fixed\n\n- **Kanban board regression**: Subagent and plan-step tasks now correctly appear in the kanban board\n\n### Changed\n\n- **Plans panel temporarily disabled**: The Plans panel in the CLI dashboard is disabled until plan-mode event capture is reliably working end-to-end. Plan nodes in the mind map remain active.\n- `DashboardState` now delegates to shared `EventAggregator` instead of maintaining its own aggregation logic\n\n## [0.12.2] - 2026-02-23\n\n### Added\n\n- **Update notifications**: The dashboard now checks the npm registry for newer versions on startup and shows a yellow banner in the status bar when an update is available (e.g., `v0.13.0 available \u2014 npm i -g sidekick-agent-hub`). Results are cached for 24 hours to avoid repeated network requests.\n\n## [0.12.1] - 2026-02-23\n\n### Fixed\n\n- **VS Code integration**: Fixed exit code 127 when the extension launches the CLI dashboard on systems using nvm or volta (node binary not found when shell init is bypassed)\n\n## [0.12.0] - 2026-02-22\n\n### Added\n\n- **\"Open CLI Dashboard\" VS Code Integration**: New VS Code command `Sidekick: Open CLI Dashboard` launches the TUI dashboard in an integrated terminal\n - Install the CLI with `npm install -g sidekick-agent-hub`\n\n## [0.11.0] - 2026-02-19\n\n### Added\n\n- **Initial Release**: Full-screen TUI dashboard for monitoring agent sessions from the terminal\n - Ink-based terminal UI with panels for sessions, tasks, kanban, mind map, notes, decisions, search, files, and git diff\n - Multi-provider support: auto-detects Claude Code, OpenCode, and Codex sessions\n - Reads from `~/.config/sidekick/` \u2014 the same data files the VS Code extension writes\n - Usage: `sidekick dashboard [--project <path>] [--provider <id>]`\n"});function K_e(t,e){if(!e)return null;if(t==="regex"){try{new RegExp(e)}catch(n){return n instanceof Error?n.message:"Invalid regex"}return null}if(t==="date"){let n=VN(e);return"error"in n?n.error:null}return null}function Y_e(t,e){switch(e.type){case"SWITCH_PANEL":return{...t,activePanelIndex:e.index,selectedItemIndex:0,detailTabIndex:0,filterString:"",filterMode:"substring",filterError:null,focusTarget:"side",overlay:null,detailScrollOffset:0};case"SELECT_ITEM":return{...t,selectedItemIndex:e.index,detailTabIndex:0,detailScrollOffset:0};case"CLAMP_SELECTION":return{...t,selectedItemIndex:e.index};case"SET_DETAIL_TAB":return{...t,detailTabIndex:e.index,detailScrollOffset:0};case"CYCLE_DETAIL_TAB":{if(e.tabCount<=1)return t;let n=(t.detailTabIndex+e.direction+e.tabCount)%e.tabCount;return{...t,detailTabIndex:n,detailScrollOffset:0}}case"CYCLE_LAYOUT":{let n=["normal","expanded","wide-side"],r=n.indexOf(t.layoutMode),o=n[(r+1)%n.length];return{...t,layoutMode:o,focusTarget:o==="expanded"?"detail":t.focusTarget}}case"TOGGLE_FOCUS":return{...t,focusTarget:t.focusTarget==="side"?"detail":"side"};case"SET_FOCUS":return{...t,focusTarget:e.target};case"SET_OVERLAY":return{...t,overlay:e.overlay,contextMenuIndex:0,overlayScrollOffset:0};case"SET_FILTER":return{...t,filterString:e.value,filterError:K_e(t.filterMode,e.value)};case"CYCLE_FILTER_MODE":{let n=["substring","fuzzy","regex","date"],r=n.indexOf(t.filterMode),o=n[(r+1)%n.length];return{...t,filterMode:o,filterError:K_e(o,t.filterString)}}case"SET_FILTER_ERROR":return{...t,filterError:e.error};case"SET_SESSION_FILTER":return{...t,sessionFilter:e.filter};case"SCROLL_DETAIL":return{...t,detailScrollOffset:e.offset};case"SCROLL_DETAIL_DELTA":{let n=kI(e.totalLines,e.viewportHeight),r=Math.max(0,Math.min(t.detailScrollOffset+e.delta,n));return{...t,detailScrollOffset:r}}case"ADD_TOAST":return{...t,toasts:[...t.toasts,e.toast]};case"REMOVE_TOAST":return{...t,toasts:t.toasts.filter(n=>n.id!==e.id)};case"FIRST_EVENT":return{...t,hasReceivedEvents:!0,sessionFilter:e.sessionPrefix?{sessionPrefix:e.sessionPrefix,label:"\u25CF active session"}:null};case"CONTEXT_MENU_NAV":{if(e.itemCount===0)return t;let n=(t.contextMenuIndex+e.delta+e.itemCount)%e.itemCount;return{...t,contextMenuIndex:n}}case"CONTEXT_MENU_SELECT":return{...t,overlay:null};case"SCROLL_SIDE":{if(e.itemCount===0)return t;let n=Math.max(0,Math.min(t.selectedItemIndex+e.delta,e.itemCount-1));return{...t,selectedItemIndex:n,detailTabIndex:0,detailScrollOffset:0}}case"OVERLAY_SCROLL":return{...t,overlayScrollOffset:Math.max(0,t.overlayScrollOffset+e.delta)};case"CLAMP_OVERLAY_SCROLL":return{...t,overlayScrollOffset:Math.min(t.overlayScrollOffset,Math.max(0,e.maxOffset))};case"TOGGLE_MOUSE":return{...t,mouseEnabled:!t.mouseEnabled};case"TICK":return{...t,renderTick:t.renderTick+1};default:return t}}var J_e,W_e=F(()=>{"use strict";KN();oO();J_e={activePanelIndex:0,selectedItemIndex:0,detailTabIndex:0,layoutMode:"normal",focusTarget:"side",overlay:null,filterString:"",filterMode:"substring",filterError:null,sessionFilter:null,detailScrollOffset:0,toasts:[],hasReceivedEvents:!1,contextMenuIndex:0,overlayScrollOffset:0,renderTick:0,mouseEnabled:!0}});function X_e(t,e,n){let{state:r,dispatch:o,exit:i,panels:s,panel:c,selectedItem:d,contextActions:m,currentItemCount:h,clampedSelection:y,sideScroll:v,detailTabCount:_,detailLineCount:I,detailViewportHeight:w,addToast:D,toggleSessionFilter:O,onMouseSettingChange:P,onRefresh:R,onGenerateReport:L,onTogglePin:H,isPinned:he,pendingSessionPath:se,onSessionSwitch:Ce}=n;if(e.ctrl&&t==="c"){i();return}if(r.overlay==="filter"){if(e.escape){o({type:"SET_FILTER",value:""}),o({type:"SET_OVERLAY",overlay:null});return}if(e.return){o({type:"SET_OVERLAY",overlay:null});return}if(e.tab){o({type:"CYCLE_FILTER_MODE"});return}if(e.backspace||e.delete){o({type:"SET_FILTER",value:r.filterString.slice(0,-1)});return}if(t&&!e.ctrl&&!e.meta){o({type:"SET_FILTER",value:r.filterString+t});return}return}if(r.overlay==="context-menu"){if(e.escape||t==="q"){o({type:"SET_OVERLAY",overlay:null});return}if(t==="j"||e.downArrow){o({type:"CONTEXT_MENU_NAV",delta:1,itemCount:m.length});return}if(t==="k"||e.upArrow){o({type:"CONTEXT_MENU_NAV",delta:-1,itemCount:m.length});return}if(e.return){let le=m[r.contextMenuIndex];if(le&&d){let ze=le.handler(d);typeof ze=="string"&&D(ze,ze.toLowerCase().includes("fail")||ze.toLowerCase().includes("unavailable")?"error":"info"),o({type:"CONTEXT_MENU_SELECT"})}return}let ve=m.find(le=>le.key===t);if(ve&&d){let le=ve.handler(d);typeof le=="string"&&D(le,le.toLowerCase().includes("fail")||le.toLowerCase().includes("unavailable")?"error":"info"),o({type:"CONTEXT_MENU_SELECT"})}return}if(r.overlay==="help"){e.escape||t==="?"||t==="q"?o({type:"SET_OVERLAY",overlay:null}):t==="j"||e.downArrow?o({type:"OVERLAY_SCROLL",delta:1}):(t==="k"||e.upArrow)&&o({type:"OVERLAY_SCROLL",delta:-1});return}if(r.overlay==="changelog"){e.escape||t==="V"||t==="q"?o({type:"SET_OVERLAY",overlay:null}):t==="j"||e.downArrow?o({type:"OVERLAY_SCROLL",delta:1}):(t==="k"||e.upArrow)&&o({type:"OVERLAY_SCROLL",delta:-1});return}if(t==="q"){i();return}if(e.escape){if(r.filterString){o({type:"SET_FILTER",value:""});return}if(r.focusTarget==="detail"){o({type:"SET_FOCUS",target:"side"});return}return}if(t==="?"){o({type:"SET_OVERLAY",overlay:"help"});return}if(t==="M"){let ve=!r.mouseEnabled;o({type:"TOGGLE_MOUSE"}),D(ve?"Mouse capture on":"Mouse capture off \u2014 terminal text selection enabled","info"),P?.(ve);return}if(t==="R"){if(!R)return;R(),D("Refreshing project data\u2026","info");return}if(t==="s"&&se&&Ce){Ce(se);return}let X=parseInt(t,10);if(X>=1&&X<=s.length){r.hasReceivedEvents||o({type:"FIRST_EVENT",sessionPrefix:""}),s[r.activePanelIndex]?.onDeactivate?.(),o({type:"SWITCH_PANEL",index:X-1}),s[X-1]?.onActivate?.();return}if(r.hasReceivedEvents){if(e.tab){o({type:"TOGGLE_FOCUS"});return}if(t==="/"){o({type:"SET_OVERLAY",overlay:"filter"});return}if(t&&!plt.has(t)){let le=(c.getKeybindings?.()||[]).find(ze=>ze.keys.includes(t)&&(!ze.condition||ze.condition(d)));if(le){le.handler(d),o({type:"TICK"});return}if(d){let Yt=c.getActions().find(St=>St.key===t&&(!St.condition||St.condition(d)));if(Yt){let St=Yt.handler(d);typeof St=="string"&&D(St,St.toLowerCase().includes("fail")||St.toLowerCase().includes("unavailable")?"error":"info");return}}}if(t==="z"){o({type:"CYCLE_LAYOUT"});let ve=["normal","expanded","wide-side"],le=ve.indexOf(r.layoutMode),ze=ve[(le+1)%ve.length];D(`Layout: ${{normal:"Normal",expanded:"Expanded","wide-side":"Wide Side"}[ze]}`,"info");return}if(t==="V"){o({type:"SET_OVERLAY",overlay:"changelog"});return}if(t==="r"){L?.();return}if(t==="p"&&H){H(),D(he?"Session unpinned":"Session pinned","info");return}if(t==="f"){O();return}if(t==="x"){d&&c.getActions().length>0&&o({type:"SET_OVERLAY",overlay:"context-menu"});return}if(t==="["){o({type:"CYCLE_DETAIL_TAB",direction:-1,tabCount:_});return}if(t==="]"){o({type:"CYCLE_DETAIL_TAB",direction:1,tabCount:_});return}if(r.focusTarget==="side"){if(t==="j"||e.downArrow){y<h-1&&(o({type:"SELECT_ITEM",index:y+1}),v.selectNext());return}if(t==="k"||e.upArrow){y>0&&(o({type:"SELECT_ITEM",index:y-1}),v.selectPrev());return}if(t==="g"){o({type:"SELECT_ITEM",index:0}),v.selectFirst();return}if(t==="G"){o({type:"SELECT_ITEM",index:Math.max(0,h-1)}),v.selectLast();return}if(e.return){o({type:"SET_FOCUS",target:"detail"});return}}if(r.focusTarget==="detail"){if(t==="j"||e.downArrow){o({type:"SCROLL_DETAIL_DELTA",delta:1,totalLines:I,viewportHeight:w});return}if(t==="k"||e.upArrow){o({type:"SCROLL_DETAIL_DELTA",delta:-1,totalLines:I,viewportHeight:w});return}if(t==="h"||e.leftArrow){o({type:"SET_FOCUS",target:"side"});return}if(t==="g"){o({type:"SCROLL_DETAIL",offset:0});return}if(t==="G"){o({type:"SCROLL_DETAIL",offset:kI(I,w)});return}}}}var plt,ebe=F(()=>{"use strict";oO();plt=new Set(["j","k","g","G","h","q","?","/","M","R","s","1","2","3","4","5","6","7","8","9"])});function tbe(t,e,n){let r=Math.max(0,e-n);return t.slice(Math.max(0,t.length-Math.min(r,t.length)))}var nbe=F(()=>{"use strict"});function rbe(t,e){let n=t();return{allItems:n,currentItems:e([...n])}}var obe=F(()=>{"use strict"});function ibe(t,e=3){return e<=0?[]:t.slice(Math.max(0,t.length-e))}var sbe=F(()=>{"use strict"});function abe(){return{loadedAt:null,error:null,refreshing:!1,watcherError:null,watcherErrorAt:null}}function a5(t,e){return t.error?{text:"\u26A0 data",color:"red"}:t.watcherError!==null&&(t.watcherErrorAt===null||e-t.watcherErrorAt<=6e4)?{text:"\u26A0 session",color:"yellow"}:t.refreshing?{text:"\u21BB",color:"gray"}:t.loadedAt!==null&&e-t.loadedAt>12e4?{text:`stale ${Math.floor((e-t.loadedAt)/6e4)}m`,color:"yellow"}:null}var u5=F(()=>{"use strict"});function c5({panels:t,metrics:e,staticData:n,isPinned:r,pendingSessionPath:o,onSessionSwitch:i,onTogglePin:s,onGenerateReport:c,mouseInitiallyEnabled:d,onMouseSettingChange:m,onRefresh:h,dataStatus:y,notice:v}){let[_,I]=(0,go.useReducer)(Y_e,J_e,Be=>({...Be,mouseEnabled:d!==!1})),{exit:w}=Hy(),{isRawModeSupported:D}=kc(),{columns:O,rows:P}=Rc(),R=(0,go.useRef)(0),L=(0,go.useRef)(0),H=(0,go.useRef)(null),he=(0,go.useRef)(!1),se=(0,go.useRef)(0),Ce=(0,go.useRef)(null);(0,go.useEffect)(()=>{if(!_.hasReceivedEvents&&e.eventCount>0){let Be=(e.sessionStartTime||"").substring(0,8);I({type:"FIRST_EVENT",sessionPrefix:Be})}},[e.eventCount,_.hasReceivedEvents,e.sessionStartTime]),(0,go.useEffect)(()=>{if(!he.current){L.current=e.timelineAppendCount,he.current=!0;return}if(e.timelineAppendCount!==L.current){for(let Be of tbe(e.timeline,e.timelineAppendCount,L.current))Be.type==="summary"?X(Be.summary||"Context compacted","warning"):Be.type==="system"&&Be.summary?.includes("ended")&&X(Be.summary,"info");L.current=e.timelineAppendCount}},[e.timelineAppendCount,e.timeline]);let X=(0,go.useCallback)((Be,rt)=>{let jt={error:4e3,warning:3e3,info:2e3},Pt=++R.current;I({type:"ADD_TOAST",toast:{id:Pt,message:Be,severity:rt,expiresAt:Date.now()+jt[rt]}}),setTimeout(()=>{I({type:"REMOVE_TOAST",id:Pt})},jt[rt])},[]),ve=(0,go.useRef)(0);(0,go.useEffect)(()=>{v&&v.id!==ve.current&&(ve.current=v.id,X(v.message,v.severity))},[v,X]),(0,go.useEffect)(()=>{if(e.providerId!=="claude-code"){H.current=null;return}let Be=(0,Nj.describeQuotaFailure)(e.quota);if(!Be){H.current=null;return}H.current!==Be.alertKey&&(H.current=Be.alertKey,X(`${Be.title}: ${Be.message}`,Be.severity))},[X,e.providerId,e.quota]);let le=t[_.activePanelIndex],ze=O<Alt||P<ylt,St=(()=>{switch(_.layoutMode){case"expanded":return 0;case"wide-side":return Math.min(vlt,O-30);default:return O<80?glt:hlt}})(),Ne=(0,go.useCallback)(Be=>{let rt=Be;if(_.sessionFilter&&["tasks","kanban","notes","decisions","plans"].includes(le.id)&&(le.id==="kanban"?rt=rt.map(jt=>_lt(jt,_.sessionFilter)):rt=rt.filter(jt=>ube(jt,_.sessionFilter))),_.filterString){let jt=_.filterString,Pt=_.filterMode;if(Pt==="date"){let On=VN(jt);if(!("error"in On)){let $o=On.since?Date.parse(On.since):-1/0,Ws=On.until?Date.parse(On.until):1/0;rt=rt.filter(As=>{let Ni=le.getItemTimestamp?le.getItemTimestamp(As):Tpe(As.data);return Ni!==null&&Ni>=$o&&Ni<Ws})}}else rt=rt.filter(On=>{let $o=le.getSearchableText?.(On)??On.label.replace(/\{[^}]*\}/g,"");switch(Pt){case"fuzzy":{let Ws=$o.toLowerCase();return jt.toLowerCase().split(/\s+/).filter(As=>As).every(As=>Ws.includes(As))}case"regex":try{return new RegExp(jt).test($o)}catch{return!1}default:return $o.toLowerCase().includes(jt.toLowerCase())}})}return rt.sort((jt,Pt)=>jt.sortKey-Pt.sortKey),rt},[le,_.sessionFilter,_.filterString,_.filterMode]),nt=le.viewVersion??0,{allItems:_t,currentItems:ut}=(0,go.useMemo)(()=>rbe(()=>le.getItems(e,n),Ne),[le,nt,e,n,Ne]),Dt=Math.min(_.selectedItemIndex,Math.max(0,ut.length-1));Dt!==_.selectedItemIndex&&ut.length>0&&I({type:"CLAMP_SELECTION",index:Dt});let jr=Math.max(1,P-5),Ie=c_e(jr,ut.length),ct=i_e({totalItems:ut.length,viewportHeight:Ie});(0,go.useEffect)(()=>{ct.selectedIndex!==_.selectedItemIndex&&ct.setSelected(_.selectedItemIndex)},[_.selectedItemIndex]);let Ct=ut[Dt],Lt=le.detailTabs,bn=Math.min(_.detailTabIndex,Lt.length-1),_i=(0,go.useMemo)(()=>r_e(),[Ct?.id,bn]),In=Math.max(40,O-St-3),Nn=!!_.sessionFilter,Ht=(0,go.useMemo)(()=>{if(Ct&&Lt.length>0&&bn>=0){let Be=Lt[bn],rt=Be.label;return(rt==="Timeline"||rt==="Mind Map"?"":_i+`
|
|
1116
|
+
`):[],c=s.length,d=a_e(e,c),m=d>0,h=m?1:0,y=c>d+n-1?1:0,v=Math.max(1,n-h-y),_=s.slice(d,d+v),I=d+v<c;return(0,eA.jsxs)(Je,{flexDirection:"column",flexGrow:1,borderStyle:i,borderColor:o,paddingLeft:1,children:[m&&(0,eA.jsx)(Je,{justifyContent:"center",children:(0,eA.jsxs)(W,{color:"gray",children:["\u25B2 (",d," more)"]})}),_.map((w,D)=>(0,eA.jsx)(W,{wrap:"wrap",children:Pc(w)},d+D)),_.length<v&&Array.from({length:v-_.length},(w,D)=>(0,eA.jsx)(W,{children:" "},`pad-${D}`)),I&&(0,eA.jsx)(Je,{justifyContent:"center",children:(0,eA.jsxs)(W,{color:"gray",children:["\u25BC (",c-d-v," more)"]})})]})}var eA,b_e=F(async()=>{"use strict";await fs();await Nb();oO();eA=me(vr(),1)});function t5({eventCount:t,providerName:e,permissionMode:n,focusTarget:r,panelHints:o,sessionFilter:i,filterString:s,matchCount:c,totalCount:d,updateInfo:m,providerStatus:h,openaiStatus:y,mouseEnabled:v,dataBadge:_}){let I=t>0?`${t} events`:"waiting...",w=n==="bypassPermissions"?"red":n==="acceptEdits"?"magenta":n==="plan"?"green":void 0,D=n==="bypassPermissions"?"BYPASS":n==="acceptEdits"?"EDITS":n==="plan"?"PLAN":void 0,O=h?_b(h):null,P=y?_b(y):null;return(0,Tt.jsxs)(Je,{height:1,width:"100%",children:[(0,Tt.jsxs)(Je,{children:[(0,Tt.jsx)(W,{children:Pc(xj)}),(0,Tt.jsxs)(W,{dimColor:!0,children:[" v","0.26.4"]}),m&&(0,Tt.jsxs)(W,{color:"yellow",children:[" (v",m.latest,")"]})]}),(0,Tt.jsxs)(Je,{flexGrow:1,justifyContent:"center",children:[e&&(0,Tt.jsxs)(Tt.Fragment,{children:[(0,Tt.jsxs)(W,{dimColor:!0,children:[" ","\u2502"," "]}),(0,Tt.jsx)(W,{color:"cyan",children:e})]}),n&&n!=="default"&&(0,Tt.jsxs)(Tt.Fragment,{children:[(0,Tt.jsxs)(W,{dimColor:!0,children:[" ","\u2502"," "]}),(0,Tt.jsx)(W,{color:w,children:D})]}),(0,Tt.jsxs)(W,{dimColor:!0,children:[" ","\u2502"," "]}),(0,Tt.jsx)(W,{children:I}),O?.visible&&(0,Tt.jsxs)(Tt.Fragment,{children:[(0,Tt.jsxs)(W,{dimColor:!0,children:[" ","\u2502"," "]}),(0,Tt.jsx)(W,{color:O.color,children:O.summary})]}),P?.visible&&(0,Tt.jsxs)(Tt.Fragment,{children:[(0,Tt.jsxs)(W,{dimColor:!0,children:[" ","\u2502"," "]}),(0,Tt.jsx)(W,{color:P.color,children:P.summary})]}),v===!1&&(0,Tt.jsxs)(Tt.Fragment,{children:[(0,Tt.jsxs)(W,{dimColor:!0,children:[" ","\u2502"," "]}),(0,Tt.jsx)(W,{color:"yellow",children:"MOUSE OFF"})]}),_&&(0,Tt.jsxs)(Tt.Fragment,{children:[(0,Tt.jsxs)(W,{dimColor:!0,children:[" ","\u2502"," "]}),(0,Tt.jsx)(W,{color:_.color,children:_.text})]}),s&&(0,Tt.jsxs)(W,{color:"yellow",children:[" ",'filter: "',s,'" (',c??0,"/",d??0,")"]}),i&&(0,Tt.jsxs)(W,{color:"magenta",children:[" ",i]})]}),(0,Tt.jsxs)(Je,{children:[(0,Tt.jsxs)(W,{dimColor:!0,children:["\u2502"," "]}),r==="side"?(0,Tt.jsxs)(W,{children:[(0,Tt.jsx)(W,{bold:!0,children:"\u2191\u2193"}),(0,Tt.jsx)(W,{dimColor:!0,children:" nav "}),(0,Tt.jsx)(W,{bold:!0,children:"Tab"}),(0,Tt.jsx)(W,{dimColor:!0,children:" detail "}),o,(0,Tt.jsx)(W,{bold:!0,children:"/"}),(0,Tt.jsx)(W,{dimColor:!0,children:" filter "}),(0,Tt.jsx)(W,{bold:!0,children:"?"}),(0,Tt.jsx)(W,{dimColor:!0,children:" help "}),(0,Tt.jsx)(W,{bold:!0,children:"q"}),(0,Tt.jsx)(W,{dimColor:!0,children:" quit"})]}):(0,Tt.jsxs)(W,{children:[(0,Tt.jsx)(W,{bold:!0,children:"j/k"}),(0,Tt.jsx)(W,{dimColor:!0,children:" scroll "}),(0,Tt.jsx)(W,{bold:!0,children:"[]"}),(0,Tt.jsx)(W,{dimColor:!0,children:" tab "}),(0,Tt.jsx)(W,{bold:!0,children:"Tab"}),(0,Tt.jsx)(W,{dimColor:!0,children:" side "}),o,(0,Tt.jsx)(W,{bold:!0,children:"?"}),(0,Tt.jsx)(W,{dimColor:!0,children:" help "}),(0,Tt.jsx)(W,{bold:!0,children:"q"}),(0,Tt.jsx)(W,{dimColor:!0,children:" quit"})]})]})]})}var Tt,S_e=F(async()=>{"use strict";LN();await fs();rO();await Nb();Tt=me(vr(),1)});function C_e(t=olt){let[e,n]=(0,Pj.useState)(0);return(0,Pj.useEffect)(()=>{let r=setInterval(()=>{n(o=>(o+1)%E_e.length)},t);return()=>clearInterval(r)},[t]),E_e[e]}var Pj,E_e,olt,I_e=F(()=>{"use strict";Pj=me(xn(),1),E_e=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2807","\u280F"],olt=80});function T_e({panelCount:t}){let e=C_e(),n=(0,w_e.useMemo)(()=>(0,D_e.getRandomPhrase)(),[]),{columns:r}=Rc(),o=t&&t>1?`1-${Math.min(t,9)}`:"1-9";return(0,fi.jsxs)(Je,{flexDirection:"column",borderStyle:"single",borderColor:"magenta",paddingX:2,paddingY:1,width:Math.min(60,r-2),children:[BI.map((i,s)=>(0,fi.jsx)(W,{children:Pc(i)},s)),(0,fi.jsx)(W,{children:" "}),(0,fi.jsxs)(W,{color:"gray",children:[" ",n]}),(0,fi.jsx)(W,{children:" "}),(0,fi.jsxs)(W,{children:[" ",(0,fi.jsx)(W,{color:"magenta",children:e})," ",(0,fi.jsx)(W,{color:"gray",children:"Waiting for session events..."})]}),(0,fi.jsx)(W,{children:" "}),(0,fi.jsxs)(W,{children:[" ",(0,fi.jsx)(W,{color:"gray",children:"Navigate:"})," ",(0,fi.jsx)(W,{bold:!0,children:o})," jump ",(0,fi.jsx)(W,{bold:!0,children:"?"})," ","help ",(0,fi.jsx)(W,{bold:!0,children:"q"})," quit"]}),(0,fi.jsx)(W,{children:" "}),(0,fi.jsx)(W,{color:"gray",children:" Start a Claude Code, OpenCode, or Codex session"}),(0,fi.jsx)(W,{color:"gray",children:" in another terminal and events will appear here."}),(0,fi.jsx)(W,{children:" "}),(0,fi.jsxs)(W,{children:[" ",(0,fi.jsx)(W,{color:"gray",children:"Or use "}),(0,fi.jsx)(W,{bold:!0,children:"--replay"}),(0,fi.jsx)(W,{color:"gray",children:" to replay an existing session."})]})]})}var w_e,D_e,fi,x_e=F(async()=>{"use strict";w_e=me(xn(),1);await fs();I_e();D_e=me(on(),1);rO();await Nb();Gy();fi=me(vr(),1)});function Ri(t,e,n=14,r=54){let o=n-t.length,i=Math.max(1,r-n-e.length),s="\xB7".repeat(i);return(0,Mi.jsxs)(W,{children:[" ",(0,Mi.jsx)(W,{bold:!0,children:t})," ".repeat(Math.max(0,o))," ",(0,Mi.jsx)(W,{dimColor:!0,children:s})," ",e]})}function B_e({panels:t,activePanelIndex:e,scrollOffset:n,onClampScroll:r}){let{columns:o,rows:i}=Rc(),s=t[e],c=s.getActions(),d=s.getKeybindings?.()||[],m=[];m.push((0,Mi.jsx)(W,{bold:!0,children:" Panels"}));for(let D of t)m.push(Ri(String(D.shortcutKey),D.title));if(m.push((0,Mi.jsx)(W,{children:" "})),m.push((0,Mi.jsx)(W,{bold:!0,children:" Navigation"})),m.push(Ri("Tab","Toggle side / detail focus")),m.push(Ri("j / \u2193","Next item / scroll down")),m.push(Ri("k / \u2191","Prev item / scroll up")),m.push(Ri("g / G","First / last item")),m.push(Ri("Enter","Focus detail pane")),m.push(Ri("h / \u2190","Return to side")),m.push(Ri("[ / ]","Cycle detail tabs")),m.push(Ri("z","Cycle layout mode")),m.push((0,Mi.jsx)(W,{children:" "})),m.push((0,Mi.jsx)(W,{bold:!0,children:" Actions"})),m.push(Ri("x","Context menu")),m.push(Ri("/","Filter side list")),m.push(Ri("f","Toggle session filter")),c.length>0||d.length>0){m.push((0,Mi.jsx)(W,{children:" "})),m.push((0,Mi.jsxs)(W,{bold:!0,children:[" ",s.title," Actions"]}));for(let D of c)m.push(Ri(D.key,D.label));for(let D of d)m.push(Ri(D.keys.join("/"),D.label))}m.push((0,Mi.jsx)(W,{children:" "})),m.push((0,Mi.jsx)(W,{bold:!0,children:" General"})),m.push(Ri("R","Refresh project data")),m.push(Ri("r","Generate HTML report")),m.push(Ri("p","Pin session (stop auto-switch)")),m.push(Ri("s","Switch to pending session")),m.push(Ri("M","Toggle mouse capture (copy/select)")),m.push(Ri("V","Version & changelog")),m.push(Ri("?","Toggle this help")),m.push(Ri("Esc","Close overlay / clear filter")),m.push(Ri("q / Ctrl+C","Quit"));let h=Math.max(5,i-12),y=Math.max(0,m.length-h);n5.default.useEffect(()=>{n>y&&r?.(y)},[n,y,r]);let v=Math.min(n,y),_=m.slice(v,v+h),I=v>0,w=v+h<m.length;return(0,Mi.jsx)(Je,{flexGrow:1,alignItems:"center",justifyContent:"center",children:(0,Mi.jsxs)(Je,{flexDirection:"column",borderStyle:"single",borderColor:"magenta",paddingX:1,paddingY:1,width:Math.min(60,o-2),children:[BI.map((D,O)=>(0,Mi.jsx)(W,{children:Pc(D)},`logo-${O}`)),(0,Mi.jsx)(W,{children:" "}),I?(0,Mi.jsx)(W,{color:"gray",children:" \u25B2 scroll up (k)"}):(0,Mi.jsx)(W,{children:" "}),_.map((D,O)=>(0,Mi.jsx)(n5.default.Fragment,{children:D},`row-${v+O}`)),w?(0,Mi.jsx)(W,{color:"gray",children:" \u25BC scroll down (j)"}):(0,Mi.jsx)(W,{children:" "})]})})}var n5,Mi,O_e=F(async()=>{"use strict";n5=me(xn(),1);await fs();rO();await Nb();Gy();Mi=me(vr(),1)});function k_e({actions:t,selectedIndex:e}){let{columns:n,rows:r}=Rc();if(t.length===0)return(0,lh.jsx)(Je,{});let o=Math.max(...t.map(s=>s.key.length+s.label.length+4),20),i=Math.min(o+6,50,n-2);return(0,lh.jsxs)(Je,{flexDirection:"column",borderStyle:"single",borderColor:"magenta",width:i,position:"absolute",marginLeft:Math.max(0,Math.floor((n-i)/2)),marginTop:Math.max(0,Math.floor((r-t.length-2)/2)),children:[(0,lh.jsx)(W,{color:"magenta",children:" Actions "}),t.map((s,c)=>(0,lh.jsx)(Je,{children:c===e?(0,lh.jsxs)(W,{inverse:!0,children:[" ",(0,lh.jsx)(W,{bold:!0,children:s.key})," ",s.label]}):(0,lh.jsxs)(W,{children:[" ",(0,lh.jsx)(W,{bold:!0,children:s.key})," ",s.label]})},s.key))]})}var lh,P_e=F(async()=>{"use strict";await fs();Gy();lh=me(vr(),1)});function R_e({filterString:t,filterMode:e,filterError:n}){let{rows:r}=Rc();return(0,Pd.jsxs)(Je,{position:"absolute",marginTop:r-2,width:"100%",height:1,children:[slt.map(o=>{let{key:i,label:s}=ilt[o];return(0,Pd.jsx)(W,{children:o===e?(0,Pd.jsxs)(W,{bold:!0,color:"magenta",children:["[",i,"]",s," "]}):(0,Pd.jsxs)(W,{color:"gray",children:["[",i,"]",s," "]})},o)}),(0,Pd.jsxs)(W,{bold:!0,color:"magenta",children:[" ","/"," "]}),n?(0,Pd.jsx)(W,{color:"red",children:t}):(0,Pd.jsx)(W,{children:t}),(0,Pd.jsx)(W,{color:"gray",children:"\u2588"}),n&&(0,Pd.jsxs)(W,{color:"red",children:[" ",n]}),e==="date"&&!t&&(0,Pd.jsx)(W,{color:"gray",children:" today \xB7 yesterday \xB7 2d \xB7 1w \xB7 YYYY-MM-DD \xB7 >expr \xB7 <expr"})]})}var Pd,ilt,slt,M_e=F(async()=>{"use strict";await fs();Gy();Pd=me(vr(),1),ilt={substring:{key:"S",label:"Substr"},fuzzy:{key:"F",label:"Fuzzy"},regex:{key:"R",label:"Regex"},date:{key:"D",label:"Date"}},slt=["substring","fuzzy","regex","date"]});function N_e({entries:t,scrollOffset:e,onClampScroll:n}){let{columns:r,rows:o}=Rc(),i=Math.min(64,r-2),s=Math.max(o-12,10),c=[],d=t[0]?.date||"";c.push((0,ho.jsxs)(W,{children:[" ",(0,ho.jsxs)(W,{bold:!0,color:"cyan",children:["Terminal Dashboard v","0.26.4"]}),d?(0,ho.jsxs)(W,{color:"gray",children:[" \u2014 ",d]}):null]},"ver")),c.push((0,ho.jsx)(W,{children:" "},"sep"));for(let I=0;I<t.length;I++){let w=t[I];I>0&&c.push((0,ho.jsxs)(W,{children:[" ",(0,ho.jsxs)(W,{bold:!0,children:["v",w.version]}),(0,ho.jsxs)(W,{color:"gray",children:[" \u2014 ",w.date]})]},`v-${I}`));for(let D of w.sections){c.push((0,ho.jsxs)(W,{children:[" ",(0,ho.jsx)(W,{bold:!0,color:"yellow",children:D.heading})]},`h-${I}-${D.heading}`));for(let O=0;O<D.items.length;O++){let P=i-8,R=D.items[O];R.length>P&&(R=R.slice(0,P-1)+"\u2026"),c.push((0,ho.jsxs)(W,{children:[" ",(0,ho.jsx)(W,{color:"gray",children:"\u2022"})," ",R]},`item-${I}-${D.heading}-${O}`))}}I<t.length-1&&c.push((0,ho.jsx)(W,{children:" "},`gap-${I}`))}let m=Math.max(0,c.length-s);Q_e.default.useEffect(()=>{e>m&&n?.(m)},[e,m,n]);let h=Math.min(e,m),y=c.slice(h,h+s),v=h>0,_=h+s<c.length;return(0,ho.jsx)(Je,{flexGrow:1,alignItems:"center",justifyContent:"center",children:(0,ho.jsxs)(Je,{flexDirection:"column",borderStyle:"single",borderColor:"magenta",paddingX:1,paddingY:1,width:i,children:[(0,ho.jsxs)(W,{children:[" ",(0,ho.jsxs)(W,{bold:!0,color:"magenta",children:["\u26A1"," W H A T ' S N E W"]})]}),(0,ho.jsx)(W,{children:" "}),v&&(0,ho.jsx)(W,{color:"gray",children:" \u25B2 scroll up (k)"}),y,_&&(0,ho.jsx)(W,{color:"gray",children:" \u25BC scroll down (j)"}),(0,ho.jsx)(W,{children:" "}),(0,ho.jsxs)(W,{color:"gray",children:[" ","Full changelog:"," ",(0,ho.jsx)(W,{color:"cyan",children:"https://cesarandreslopez.github.io/sidekick-agent-hub/changelog/"})]}),(0,ho.jsx)(W,{children:" "}),(0,ho.jsxs)(W,{color:"gray",children:[" ","Press ",(0,ho.jsx)(W,{bold:!0,children:"Esc"})," or ",(0,ho.jsx)(W,{bold:!0,children:"V"})," to close"]})]})})}var Q_e,ho,$_e=F(async()=>{"use strict";Q_e=me(xn(),1);await fs();Gy();ho=me(vr(),1)});function j_e({columns:t,rows:e}){return(0,PI.jsx)(Je,{flexDirection:"column",width:t,height:e,justifyContent:"center",alignItems:"center",children:(0,PI.jsxs)(Je,{flexDirection:"column",borderStyle:"single",borderColor:"red",paddingX:2,paddingY:1,children:[(0,PI.jsx)(W,{color:"red",children:"Terminal too small"}),(0,PI.jsxs)(W,{color:"gray",children:["Need at least 60x15 (current: ",t,"x",e,")"]})]})})}var PI,z_e=F(async()=>{"use strict";await fs();PI=me(vr(),1)});function F_e({toast:t,row:e=0}){let{columns:n}=Rc(),r=alt[t.severity]||"cyan",o=ult[t.severity]||"\u25CF",i=Math.max(16,Math.min(56,n-10)),s=t.message.length>i?t.message.substring(0,i-3)+"...":t.message;return(0,Rj.jsx)(Je,{position:"absolute",marginLeft:Math.max(0,n-s.length-8),marginTop:e*3,borderStyle:"single",borderColor:r,paddingX:1,children:(0,Rj.jsxs)(W,{color:r,children:[o," ",s]})})}var Rj,alt,ult,U_e=F(async()=>{"use strict";await fs();Gy();Rj=me(vr(),1),alt={error:"red",warning:"yellow",info:"cyan"},ult={error:"\u2718",warning:"\u26A0",info:"\u25CF"}});function r5(t=process.stdout){t.isTTY&&(t.write("\x1B[?1000h"),t.write("\x1B[?1002h"),t.write("\x1B[?1006h"))}function RI(t=process.stdout){t.isTTY&&(t.write("\x1B[?1006l"),t.write("\x1B[?1002l"),t.write("\x1B[?1000l"))}var o5=F(()=>{"use strict"});function L_e(t){let e=typeof t=="string"?t:t.toString("utf-8");return Array.from(e.matchAll(clt),llt).filter(n=>n!==null)}function llt(t){let e=parseInt(t[1],10),n=parseInt(t[2],10),r=parseInt(t[3],10),o=t[4]==="m",i=n-1,s=r-1,c=(e&4)!==0,d=(e&8)!==0,m=(e&16)!==0,h=e&-29;return h===64||h===65?{type:"scroll",button:"none",x:i,y:s,shift:c,meta:d,ctrl:m,scrollDirection:h===64?"up":"down"}:h>=32&&h<=34?{type:"drag",button:["left","middle","right"][h-32],x:i,y:s,shift:c,meta:d,ctrl:m}:h>=0&&h<=2?{type:o?"release":"click",button:["left","middle","right"][h],x:i,y:s,shift:c,meta:d,ctrl:m}:null}var clt,i5=F(()=>{"use strict";clt=/\x1b\[<(\d+);(\d+);(\d+)([Mm])/g});function H_e(t){return e=>{for(let n of L_e(e))t.current(n)}}var q_e=F(()=>{"use strict";i5()});function dlt({active:t}){return ch(()=>{},{isActive:t}),null}function Qj({onMouse:t,enabled:e=!0,children:n}){let r=(0,Mj.useRef)(t);r.current=t;let{isRawModeSupported:o}=kc();return(0,Mj.useEffect)(()=>{if(!e||!o)return;r5();let i=H_e(r);process.stdin.on("data",i);let s=()=>RI();return process.on("exit",s),()=>{process.stdin.removeListener("data",i),process.removeListener("exit",s),RI()}},[e,o]),(0,MI.jsxs)(MI.Fragment,{children:[(0,MI.jsx)(dlt,{active:o}),n]})}var Mj,MI,Z_e=F(async()=>{"use strict";Mj=me(xn(),1);await fs();o5();q_e();MI=me(vr(),1)});var s5=F(async()=>{"use strict";o5();i5();await Z_e()});var V_e,G_e=F(()=>{V_e="# Changelog\n\nAll notable changes to the Sidekick Agent Hub CLI will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## [0.26.4] - 2026-09-09\n\n### Fixed\n\n- AI summary failures distinguish refresh-token rejection from expired conversations and recognize expired-login and reauthentication messages with guidance appropriate to the known credential kind.\n- Policy-denial messages, including HTTP 403 responses, direct users to review execution permissions.\n\n## [0.26.3] - 2026-09-09\n\n### Added\n\n- `sidekick status --json` includes `serviceStatus` evidence alongside existing Claude, OpenAI, and peak-hour fields. Human-readable output and dashboard details include multiple incidents, component associations, and separate check/provider-update timestamps.\n\n### Fixed\n\n- Status displays distinguish unavailable and partial evidence, including omitted incident data. Dashboard polling coalesces overlapping checks and cancels outstanding checks when stopped.\n- AI summary failures retain structured provider diagnoses and show appropriate authentication, session, service, connection, policy, runtime, and context guidance without automatic replay or provider switching.\n\n## [0.26.2] - 2026-09-06\n\n### Fixed\n\n- CLI live-only sessions no longer overwrite complete-history checkpoints. Older CLI checkpoints are invalidated and replayed once.\n- OpenCode dashboards replay history instead of restoring timestamp-only snapshots, preventing duplicate token totals on reopen.\n- Dashboard checkpoints save after complete event batches, use the current snapshot schema, and reject obsolete or incompatible consumer formats.\n- Project-scoped search passes the workspace path through shared provider discovery, including Codex and database-only OpenCode sessions.\n- Doctor honors `--provider`; unused integrations and missing saved accounts are informational when monitoring existing sessions.\n- Shared watchers preserve partial UTF-8 lines and use OpenCode's platform-specific data directory.\n\n## [0.26.1] - 2026-09-05\n\n### Changed\n\n- Direct OpenAI API dashboard summaries use GPT-5.6 Luna with reasoning disabled and a 1,024-token `max_completion_tokens` limit. Anthropic API summaries retain Haiku 4.5; native CLI summaries retain the user's model configuration.\n\n### Fixed\n\n- Shared model metadata verified on 2026-09-05 corrects fallback costs and context gauges for Fable 5.1, GPT-6 Astra, GPT-5.6, and GPT-5.4 mini/nano.\n- Codex `quota`, `quota --provider codex`, `quota --all`, and MCP quota queries fetch live utilization and reset credits on every call. Local samples no longer prevent API refreshes, including with `--refresh`.\n- Codex fallback output shows sample age and the failed API refresh reason; older logs no longer hide newer cached data.\n\n## [0.26.0] - 2026-09-05\n\n### Added\n\n- `sidekick statusline` reads the JSON Claude Code pipes to its status-line command (`SIDEKICK_STATUSLINE_STDIN=0` disables it), appends context %, session cost, and prompt-cache hit rate, and persists the official five-hour and seven-day limits to the quota snapshot and history stores, so every other command and dashboard sees them without a network call. Cached quota older than five minutes is labelled with its age\n- Global `--offline` (or `SIDEKICK_OFFLINE=1`) prices from the cached catalog only; global `--output-file <path>` writes a command's stdout to a file (not for `dashboard` or `mcp`)\n- `stats --csv` prints every recorded day; `dump --list --csv` and `quota history --csv` print their tables as CSV\n- `quota history --window 5h|7d|max` selects which limit the heatmap shows (default `5h`); the header names the window\n- The global `--json` flag applies to `tasks add`, `tasks done`, `note add`, `decision add` (returning the stored record) and to `report` (returning the output path)\n- The dashboard raises a toast when the five-hour window crosses 80% or 95%, or the seven-day window crosses 90%, once per reset window\n- `sidekick blocks [--active | --recent | --since <time>] [--csv] [--no-cache]` shows five-hour billing blocks computed from session logs (a block opens at the first usage event aligned to the UTC hour, lasts five hours, and a longer gap opens a new one) with cache-inclusive totals, cost provenance, burn rate, and \u2014 for the open block \u2014 projected end-of-block tokens and cost. Sessions are read once and cached by size and mtime; the table is labelled a local estimate and the official status-line sample is shown beneath it when present. `--since` accepts an ISO date, `YYYY-MM-DD`, or a relative window such as `7d`\n- The dashboard's Sessions summary shows the active five-hour billing block (local estimate from session logs), refreshed every minute\n- `sidekick daily`, `weekly`, `monthly`, and `sessions` report usage computed straight from session logs, so CLI-only users no longer see \"No historical data found\". Every provider with session data is read by default (the global `--provider` narrows to one); rows are bucketed by the time of each usage event on the local calendar (`--utc` for UTC), so a session crossing midnight is split across both days; weeks start on Monday. Options: `--since` / `--until` (ISO date, `YYYY-MM-DD`, or relative windows such as `30d`), `--breakdown` (per-model sub-rows), `--by-project`, `--csv`, `--no-cache`; the global `--json` prints the full report. Defaults: 30 days, 12 weeks, 12 calendar months, 30 days\n- `sidekick stats` points at `sidekick daily` when the history store is empty\n- `sidekick import [--since <time>]` folds finished sessions from every detected provider (or the global `--provider`) into `historical-data.json`, the store behind `stats`, `today`, and the VS Code History tab, using the same importer and store mutation as the extension. Files already imported, sessions already persisted by the live monitor, and files modified in the last minute are skipped; session logs are read without holding the store lock and the summaries are applied in one short locked write that re-checks the on-disk store\n- `sidekick statusline` writes `~/.config/sidekick/state.json` on every prompt (only when something changed) and the dashboard writes it on quota updates and billing-block ticks: a public, versioned (`schemaVersion: 1`) document with the active account, quota windows with freshness, context usage, session cost, and the active billing block, for tmux status bars, menu-bar apps, and scripts\n\n### Changed\n\n- Startup awaits bounded pricing-catalog hydration, so two runs of the same command price identically; a fresh cache is a local read and a refresh is capped by the catalog's 3 s timeout\n- Every token total (`stats`, `today`, the dashboard session panel, `dump`, `report`) includes cache reads and writes and is labelled \"Total (incl. cache)\"; cost figures carry their provenance\n- `sidekick today` looks up yesterday by local calendar day (the history store has always been keyed that way) and takes its peak-hours line from the shared schedule, so it agrees with `sidekick peak`\n- `sidekick quota` shows the age of a cached snapshot and only colours it as a warning when it is older than five minutes; `quota history` reads providers in parallel\n- The global `--json` flag applies to `dump` (same as `--format json`)\n- Commands set `process.exitCode` instead of calling `process.exit(1)` on errors, so piped output is never truncated\n- The status line no longer writes to the account registry on its hot path\n- `sidekick quota`, `quota --all`, and `mcp get_quota_status` resolve quota through the shared `resolveQuota()` precedence (fresh persisted sample, then session logs, then the provider API, then an older sample), so a fresh status-line sample is never outranked by an older session-derived value and `--all` no longer forces Codex API-first; `--refresh` asks the API first for every provider, not only Codex\n- Every quota table prints a `Source` row naming where the numbers came from (`cached status-line sample from \u2026 (3m ago)`, `local session logs`, `Anthropic usage API`, \u2026); JSON output adds `resolution`, `capturedSource`, `freshness`, and `ageMs`\n- `sidekick report` and the dashboard's report action read the session once through its provider reader and derive both the metrics and the transcript from those events, instead of replaying the session through a watcher and then parsing the file again; report metrics now come from the canonical event path (the same one `readSessionStats()` uses)\n- Codex session discovery, listings, and the local quota scan use the shared capped walker, so the dashboard's session poll and `sidekick quota` no longer enumerate and re-read the whole rollout history on every call\n- The dashboard detects new sessions by subscribing to the provider's session root (`fs.watch` with a 30 s catch-up poll) instead of walking the session corpus every 10 s; the followed session's own writes no longer trigger a lookup\n- `DashboardState.getMetrics()` returns the same object until the next mutation, and the dashboard memoises panel items and detail rendering on that identity (plus each panel's `viewVersion`), so key presses, scrolling, and toasts no longer rebuild every panel\n- Provider status polling is scoped to the active provider: status.claude.com for Claude Code, status.openai.com for Codex, nothing for OpenCode\n- `sidekick dump --list` and the multi-provider session picker read the bounded async preview index; `--list` prints enumeration diagnostics to stderr and shows the \"raise --limit\" footer only when more sessions exist beyond the limit\n- `sidekick stats` text mode: the Top Failing Tools block shows the last 7 and 30 days side by side with a trend arrow; `--json` output is unchanged\n\n### Fixed\n\n- `--offline` and `--output-file` given before the command are recognised by the command-token scan: `sidekick --offline stats` used to skip catalog hydration entirely and price from the static table, and `sidekick --offline statusline` fell off the fast path\n- `--output-file` writes plain text: chalk's colour level is reset when the redirect is installed, unless `FORCE_COLOR` is set\n- The dashboard's `state.json` keys quota by the sample's `providerId` when one is stamped\n\n## [0.25.0] - 2026-08-18\n\n### Changed\n\n- The CLI advances in lockstep with `sidekick-shared` 0.25.0 and retains its existing commands and synchronous compatibility surface\n\n## [0.24.5] - 2026-08-18\n\n### Added\n\n- `sidekick history` lists recent Codex user prompts across every workspace from `~/.codex/history.jsonl`, newest first, as an AGE / SESSION / PROMPT table sized to the terminal. `--limit <n>` bounds the count (default 20) and the underlying tail read scales with the limit, so large limits are not silently truncated. `--path <id-or-prefix>` resolves a full session id or unique prefix to its rollout transcript path \u2014 `less \"$(sidekick history --path 0198a3c2)\"` \u2014 and the global `--json` emits full ids and ISO timestamps. Codex-only for now; not to be confused with `sidekick quota history`\n- `sidekick dump --list` gains `--limit <n>` (default 50). The listing and the interactive session picker both read the shared session-preview index, which stats first and content-reads only the sessions actually shown \u2014 listing a project with a large session history no longer reads every file\n\n### Changed\n\n- `dump --list` prints provider-canonical session ids \u2014 for Codex, the bare session UUID rather than the `rollout-\u2026` file basename. The listed id now round-trips into `dump --session <id>` (the old basename never matched exact or prefix); scripts parsing `--list --json` should expect the new `id` form\n\n## [0.24.4] - 2026-07-25\n\n### Fixed\n\n- The dashboard loaded persisted project data exactly once at startup and never again, so tasks, notes, decisions, and plans written by the VS Code extension or a second terminal never appeared until the dashboard was restarted\n- Load and watcher failures were swallowed into empty catch blocks. A failed load was replaced with an all-zero object and both watcher error handlers were empty, producing a dashboard indistinguishable from a genuinely quiet project\n- `sidekick dashboard` without a TTY rendered Ink's \"Raw mode is not supported\" panel into the middle of a partial frame and exited 0, so callers read the failure as success. It now fails with a message naming which stream is not a TTY, suggests a command that works when piped, and exits 1\n- Mouse tracking escape sequences were written to stdout with no TTY check, polluting redirected output\n- A bare `sidekick` printed full help to stderr with exit 1, breaking `sidekick | less` and any script checking the exit code. It now writes to stdout and exits 0\n- `sidekick --help` and `sidekick --version` made a network request and created `~/.config/sidekick/accounts/` before printing anything, because the startup side effects ran at module scope\n- `sidekick --no-color` was rejected as an unknown option, even though chalk already honored it, `NO_COLOR`, and a non-TTY stdout\n- Printing help for a bare invocation ran before Commander parsed the argv, which skipped its validation too: `sidekick --provider bogus` and `sidekick --project` (missing its value) exited 0 with help instead of reporting the error. Help for a bare or flag-only invocation is now a root action handler, so `sidekick | less` still works without disarming the option checks, and `sidekick bogus` still reports an unknown command\n- Switching to a pending session was impossible from the Plans panel: it bound `s` with no condition, so the panel's handler fired whenever an item was selected, which on Plans is always. The Sessions panel shadowed the global session filter on its Mind Map tab the same way\n- When the item list shrank under the cursor \u2014 live event churn, or typing into the filter \u2014 the detail tab and scroll position jumped back to the top of the first tab\n- The detail tab bar could highlight a tab whose content was not being rendered\n- The detail pane could render empty beneath a \"\u25B2 (N more)\" indicator. The scroll offset survives a list shrinking under the cursor, so it can outlive the content it was measured against; it is now clamped to whatever content it lands on\n- On the splash screen, panel digits 1 and 2 did nothing while 3 through 8 entered the dashboard\n- Only the newest toast was rendered, so a quota alert landing next to a context compaction showed one message and silently dropped the other\n- `parseBlessedTags.test.tsx` had never run: the vitest include glob was `*.test.ts`, which does not match `.test.tsx`. That is 15 tests covering the tag parser every rendered string flows through\n- `vitest.config.ts` declared `define` nested under `test`, where Vitest ignores it, so the `__CLI_VERSION__` injection its comment describes was inert and the next test importing `cli.ts` or `StatusBar.tsx` would have failed on a `ReferenceError`\n- `sidekick extract -i --json` silently ignored `--json`; it is now rejected, and `extract -i` degrades to plain output when not attached to a terminal\n\n### Added\n\n- `R` refreshes persisted project data on demand, and data auto-refreshes every 15 seconds. The refresh is gated by a content fingerprint, so an unchanged project schedules no re-render at all. Plan progress is part of that fingerprint: a plan record is replaced in place and keeps its `createdAt` with no `completedAt` while it runs, so a timestamp-only signature could not see steps advancing and `R` would report \"Project data is up to date\" against a stale Plans panel\n- A status-bar badge for data health, covering load failures, watcher errors, in-flight refreshes, and staleness. A watcher error expires from the badge 60 seconds after the last failure, matching the watcher's own treatment of these errors as recoverable \u2014 it closes the handle and degrades to catch-up polling \u2014 so one transient hiccup cannot latch the badge for the life of the process and hide the staleness signal behind it\n- Toasts stack up to three\n- `R`, `p`, and `s` are listed in the help overlay; `p` and `s` were previously documented only in the README\n\n### Changed\n\n- The Plans panel's source filter moved from `s` to `S`, and the Sessions panel's mind-map node filter from `f` to `F`, so the reserved global session-switch and session-filter keys work from every panel\n- The pricing cache follows `SIDEKICK_CONFIG_DIR` rather than a hardcoded `~/.config/sidekick`\n\n### Removed\n\n- The dead ANSI mind-map renderer and its helpers, and the unused `getRandomPhraseColored()`\n\n## [0.24.3] - 2026-07-24\n\n### Fixed\n\n- Dashboard costs for Claude Sonnet 5 ran 50% high, billed at $3/$15 instead of its actual $2/$10. Sonnet 5 is the `balanced` tier for the Claude API and OpenCode providers, so this shifted most totals shown before the pricing catalog was fetched\n- Dashboard costs for GPT-5.6 Luna ran about 5\xD7 high until the pricing catalog was fetched, because Luna had no rate of its own and fell back to GPT-5.6 Sol's $5/$30 rather than its published $1/$6. GPT-5.5 Pro, GPT-5.4 Pro, and GPT-5.4 Nano shared the cause and are corrected too\n- Twelve more models drew their cost from a similar model's rate. Mini and nano tiers read far too expensive (GPT-5 Nano 25\xD7 high, GPT-4.1 Nano 20\xD7) and pro tiers far too cheap (GPT-5 Pro, GPT-5.2 Pro, o1-pro, o3-pro, and o3-deep-research all showed their base model's rate). GPT-5.3 Codex and o1-mini were on outdated rates\n- GPT-5.6 Luna sizes its context gauge from an explicit 1,050,000-token window, still superseded by the window Codex reports for your tier\n\n## [0.24.2] - 2026-07-24\n\n### Added\n\n- Context windows previously reported by a provider are loaded at startup and applied to historical views, so a Codex session shows the window its account tier actually gets rather than the model's published maximum. Local read, offline-safe, non-blocking\n- Context windows also hydrate from the LiteLLM catalog, so newly released models size correctly without a CLI update\n\n### Fixed\n\n- The context gauge read roughly eight times fuller than reality on Claude Sonnet 4.7, which resolved to a 128K window against its real 1M. Sonnet 4 was affected by the same cause\n\n## [0.24.1] - 2026-07-22\n\n### Changed\n\n- Session reads inherit the shared transcript provenance surface: entrypoint, meta/sidechain flags, original roles, cwd, and git branch flow through canonical transcripts\n\n## [0.24.0] - 2026-07-22\n\n### Changed\n\n- Session reads inherit the shared discriminated event contract, normalized usage pricing, canonical transcripts, and isolated observed-session collection surface\n- A provider-reported $0 session cost now displays as $0 rather than a catalog estimate\n\n## [0.23.1] - 2026-07-21\n\n### Security\n\n- Clipboard and URL-opening helpers spawn platform tools with argument arrays instead of interpolated shell strings\n\n### Fixed\n\n- **2026-07 review backlog (CLI portion)**: quota-failure text wraps instead of rendering one character per line, the `today` date filter includes today in UTC-negative timezones, mouse clicks land on the clicked row, and configured model IDs reach the inference clients instead of being squashed to `haiku`\n- Shared observed-session reads tolerate message-less summary/bookkeeping rows and retain unresolved top-level tool requests with stable fallback IDs\n\n### Changed\n\n- `sidekick quota` now exits non-zero when a requested provider's quota is unavailable (including `--all` and `--json` failure payloads), so scripts can detect failures\n- The deprecated `quota --tier` flag (part of the removed z.ai observed-traffic estimator) is no longer accepted\n\n## [0.23.0] - 2026-07-18\n\n### Added\n\n- **`sidekick statusline`** renders a warm, cache-only account/quota/burn footer without account bootstrap, pricing hydration, or quota network access\n- **Quick capture** with `tasks add`, `tasks done`, `note add`, and `decision add`, using the shared atomic merge writers\n- **`sidekick doctor` and `sidekick today`** provide cross-provider health diagnostics and a cache-only daily brief\n- **`sidekick mcp`** exposes seven read-only facts tools for quota, burn rate, context pressure, tasks, decisions, notes, and composed project context over stdio MCP\n- **Generic handoff deep links** through `handoff open --url-template`, with identifier-only placeholders and a no-open mode\n- Failure-history, quality trend, code-impact, per-model churn/cost, and compaction-ledger summaries in terminal views\n\n### Changed\n\n- The Plans pipeline is active again: live plans persist to the shared plan store and carry per-step time, token, tool, and cost analytics into the dashboard\n- Static readers use canonical symlink-aware project identity, including legacy-store fallback\n\n## [0.22.0] - 2026-07-02\n\n### Added\n\n- **Date filter mode now actually filters by date**: The dashboard's `[D]ate` filter previously fell through to plain substring matching. It now parses `today`, `yesterday`, relative windows (`12h`, `2d`, `1w`), ISO days (`YYYY-MM-DD`), and `>`/`<` prefixes (`<2d` = older than two days); unparseable expressions show the red filter error while leaving the list unfiltered, and the overlay shows a grammar hint while empty\n- **Mouse-capture toggle**: Press `M` in the dashboard (works on the splash screen too) or launch with `--no-mouse` to disable mouse tracking so terminal click-drag text selection and copy work again. The status bar shows `MOUSE OFF` while disabled; the interactive toggle persists to `cli-config.json`, the flag is per-run\n- **Scrollable help overlay**: `?` help now windows its content with `j`/`k` scrolling and \u25B2/\u25BC indicators, so nothing is clipped on short terminals\n- **Examples in `--help`**: The root command plus `quota`, `extract`, and `dump` append real invocation examples showcasing `quota --all`, `quota history`, `extract -i`, `dump --list`, and the global `--json` flag\n- **Strict option validation**: `--provider` (root, `quota`, `quota history`, `peak`), `report --theme`, `tasks --status`, and `quota --tier` now reject unknown values at parse time with the allowed choices, instead of silently coercing typos to a default. `quota history` keeps its legacy `claude-code`/`z.ai` aliases\n- **Confirmation before `account --remove`**: Both the Claude and Codex remove paths now print the resolved account and require an interactive y/N answer (default No). `-y`/`--yes` (or `--force`) skips the prompt; `--json` and non-TTY contexts require the flag and exit 1 otherwise \u2014 **unattended automation that removes accounts must add `--yes`**\n\n### Fixed\n\n- **`q` is typable in the filter box**: The quit key no longer swallows `q` while the filter overlay is open, so queries like `query` or `sqlite` work; `q` still closes the help/changelog/context-menu overlays and quits the dashboard otherwise\n- **Panel keybindings are reachable**: Panel-declared bindings now win over the shadowable global keys while their condition holds \u2014 the Sessions panel's Mind Map `f` (filter nodes) binding works when the Mind Map tab is active, falling back to the global session filter elsewhere. Reserved keys (`q ? / M j k g G h` and digits) can never be shadowed by a panel\n- **Overlays track terminal resize**: Filter, toast, context-menu, and changelog overlays reposition on resize and clamp their widths to narrow terminals; the splash `jump` hint reflects the real panel count instead of `1-5`; the Sessions summary tasks line no longer renders as `3/ completed`\n- **Detail pane wraps to the actual layout**: Word-wrap now derives from the live side-panel width (narrow/normal/wide-side/expanded) instead of assuming the default 26-column panel, fixing under-/over-wrapping in three of the four layout modes\n- **Overlay scroll clamps to content**: The `?` help and `V` changelog overlays no longer accumulate scroll past their last line \u2014 over-scrolling then reversing responds immediately, and the changelog overlay no longer shows a blank box when scrolled past the end\n\n### Changed\n\n- **Ctrl+C always quits the dashboard**, even while an overlay is open (previously it only closed the overlay)\n- **`V` (changelog) and `r` (report) are inactive on the splash screen**; `q`, `?`, `M`, and panel digits still work there\n\n## [0.21.6] - 2026-07-02\n\n### Added\n\n- **Codex reset credits in `sidekick quota`**: When Codex quota is fetched from the API (`--refresh`, or the API-first `--all` view), the Rate Limits output now includes a `Reset Credits: N available` line plus a per-credit `Expires` row (expiry timestamp and title) for each available reset grant\n\n### Changed\n\n- **Bundled `sidekick-shared` 0.21.6**: Picks up `fetchCodexResetCreditsFromApi()` and the reset-credits snapshot on Codex quota state\n\n## [0.21.5] - 2026-06-30\n\n### Fixed\n\n- **`sidekick quota --all` no longer shows Codex at 0%**: Codex emits multiple rate-limit families per session (the aggregate plan quota plus per-model families like `codex_bengalfox`). A per-model family at 0% with a later reset window could mask the real plan quota in the local-data path; the aggregate family is now always preferred, so `--all` matches `--provider codex --refresh`. `quota --all` also fetches Codex API-first (with automatic local fallback), matching the live Claude/z.ai legs; the single-provider `quota --provider codex` stays local-by-default (live via `--refresh`)\n\n### Changed\n\n- **Bundled `sidekick-shared` 0.21.5**: Picks up the aggregate Codex rate-limit selection\n\n## [0.21.4] - 2026-06-30\n\n### Fixed\n\n- **`sidekick quota` shows the logged-in account**: The account line now reflects the currently logged-in Claude/Codex account even after a native `claude /login` or `codex login`, instead of the stale saved registry pointer. The live Codex account is resolved once per invocation and reused across the fetch and the printed output\n\n### Changed\n\n- **Bundled `sidekick-shared` 0.21.4**: Picks up the live-first active-account resolvers\n\n## [0.21.3] - 2026-06-23\n\n### Changed\n\n- **`sidekick quota` projects every provider**: Quota output is now rendered as a unified table with aligned `now` / `projected` / `resets` columns, and projected end-of-window utilization is shown for **all** providers (Claude, Codex, z.ai) \u2014 previously only Claude displayed a projection. A `\u2014` placeholder appears when a projection is unavailable, and utilization bars are clamped to 0\u2013100% so over-limit projections render cleanly. `sidekick quota --all` uses the same table for each provider section\n- **Bundled `sidekick-shared` 0.21.3**: Picks up the quota projection helpers and the bounded synchronous CLI probes\n\n### Security\n\n- **npm audit**: Bumped `esbuild` to `^0.28.1` and `vitest` to `^4.1.9` to clear reported dev-dependency advisories\n\n## [0.21.2] - 2026-06-22\n\n### Changed\n\n- **`sidekick quota --provider zai`** now renders authoritative z.ai plan utilization from z.ai's quota API (5-Hour / Weekly windows with real reset times) instead of estimating from observed OpenCode traffic, falling back to a cached snapshot when the API is unavailable. `sidekick quota --all` and `sidekick quota history --provider zai` use the same authoritative source\n- **`--tier lite|pro|max|auto`** is deprecated and no longer affects the displayed utilization\n\n## [0.21.1] - 2026-06-21\n\n### Added\n\n- **z.ai Coding Plan quota**: `sidekick quota --provider zai` derives and renders z.ai plan utilization from OpenCode traffic already on disk (5-Hour / Weekly windows with per-tier prompt budgets). `--tier lite|pro|max|auto` overrides the assumed plan tier (default `auto`). `sidekick quota --provider opencode` now auto-routes to z.ai quota when z.ai traffic is detected. `sidekick quota --all` includes the z.ai section when active\n- **z.ai quota history heatmap**: `sidekick quota history --provider zai` renders a 13-week z.ai utilization heatmap for the current workspace, alongside the existing Claude and Codex heatmaps (now also in `--all`)\n\n### Changed\n\n- **Bundled `sidekick-shared` 0.21.1**: Picks up z.ai quota derivation and the OpenCode data directory resolution fix.\n\n### Limitations\n\n- z.ai quota is **estimated, not authoritative** \u2014 it reflects only the OpenCode traffic Sidekick observed on this machine/workspace (z.ai exposes no usage API) compared against provisional per-tier prompt budgets. z.ai is observed-only (no z.ai inference provider) and has no account management yet; with `--tier auto`, the tier is under-detected early in a cycle (use an explicit `--tier`); reset times are approximate unless a rate-limit error is trapped.\n\n## [0.21.0] - 2026-06-21\n\n### Added\n\n- **Account login**: `sidekick account --login` starts the provider-isolated login flow for Claude Max or Codex and saves the authenticated profile without disturbing the active account until finalization\n- **All-provider account view**: `sidekick account --provider all` lists Claude and Codex saved accounts together, including active state. JSON output returns provider-keyed account arrays and active ids\n- **Terminal account helpers**: `sidekick account --launcher <name>` creates opt-in launchers for the selected account, and `--auto-switch <pct|off>` persists the CLI auto-switch threshold preference\n- **Multi-provider quota output**: `sidekick quota --all` shows Claude and Codex quota state together \u2014 each provider degrades independently, so one provider's quota still prints even when the other is unavailable; `--all --json` emits a provider-keyed payload for automation\n\n### Changed\n\n- **Bundled `sidekick-shared` 0.21.0**: Picks up Account Management 2.0 acquisition, switching, terminal sync, quota auto-switch, and account schema exports.\n\n## [0.20.0] - 2026-06-17\n\n### Added\n\n- **`sidekick extract`**: New one-shot command for pulling actionable assets out of recent Claude Code and Codex chats for exactly the current cwd. It extracts URLs, filesystem-validated file paths, commands the agent suggested for the user to run, and plan-mode plans. Output is grouped and colored by default, labels each item with its source agent, validates invalid `--type` and `--limit` values, preserves `inChat` and per-item provenance in `--json`, and offers `-i/--interactive` for a picker that opens URLs or copies selected paths, commands, and plans. `--provider claude-code` and `--provider codex` scope extraction to one agent; OpenCode is reported as unsupported for now\n\nThanks to [@B33pBeeps](https://github.com/B33pBeeps) (Juan Fourie) for contributing this feature in [#17](https://github.com/cesarandreslopez/sidekick-agent-hub/pull/17), adapted from his MIT-licensed [`trawl`](https://github.com/B33pBeeps/trawl) project.\n\n## [0.19.3] - 2026-06-17\n\n### Changed\n\n- **Bundled `sidekick-shared` projection contract**: The shared assistant-turn projection now exposes a v2 `timeline` array for interleaved reasoning, narration, and tool groups. This is a shared-library contract update for downstream consumers and does not change CLI behavior by itself\n\n## [0.19.2] - 2026-06-15\n\n### Changed\n\n- **Bundled `sidekick-shared` 0.19.2**: The shared library gains a browser-safe assistant-turn projection module (`segmentAssistantTurn()`, `assistantTurnEventsFromSessionEvents()`, and mirrored Zod schemas) that segments an assistant turn into a compact Process + Answer shape, with Claude `Task` subagent refs surfaced without leaking prompt text \u2014 internal additions that don't change CLI behavior\n\n## [0.19.1] - 2026-06-09\n\n### Changed\n\n- **Bundled `sidekick-shared` 0.19.1**: Model-ID pricing and context-window lookups (behind the dashboard's cost and context gauges) now tolerate padded or mixed-case IDs. The shared library also gains Zod boundary schemas, an `extractSessionEvents()` progress-unwrapping helper, and a `/schemas` subpath export for downstream consumers \u2014 internal additions that don't change CLI behavior\n\n## [0.19.0] - 2026-06-09\n\n### Added\n\n- **Claude Opus 4.8 & Fable 5 support**: The dashboard's context-window gauge and cost estimates recognize `claude-opus-4-8` and `claude-fable-5` (both 1M-token context; Opus 4.8: $5/$25 per MTok, Fable 5: $10/$50 per MTok) via the shared model catalog\n\n### Changed\n\n- **Codex account switching now swaps `~/.codex/auth.json`**: `sidekick account --provider codex --switch-to <id>` (and `--add`) activates the account by atomically swapping its backed-up credentials into the system `~/.codex/` home, mirroring the Claude switch pattern \u2014 codex terminals outside Sidekick pick up the switch. Profile directories become pure credential backups, with a one-time startup migration for installs created under the old `CODEX_HOME`-redirection model. The command surfaces swap warnings on add, switch, and remove: a running codex process that needs restarting, stale credentials, or OS-keyring credential storage that Sidekick cannot swap\n\n### Fixed\n\n- **Opus 4.6/4.7 cost over-estimation**: Dashed model IDs fell back to the Opus 4.0 pricing tier ($15/$75 instead of $5/$25), inflating estimated costs 3\xD7\n- **Haiku 4.5 unpriced under dashed IDs**: Costs for `claude-haiku-4-5-*` sessions could render as \"\u2014\" because no dashed static pricing key existed\n\n## [0.18.5] - 2026-06-04\n\n### Changed\n\n- **Consistent Codex transcripts**: `sidekick dashboard` and `sidekick report` now parse Codex sessions via `parseTranscriptFromEvents()`, matching the canonical `SessionEvent` pipeline used by the other providers\n- **Bundled `sidekick-shared` 0.18.5**: Picks up the new session context evidence snapshot API (`buildSessionContextSnapshot`, `readSessionContextSnapshot`, `SessionContextSnapshot` and related types) and the Codex session evidence gap closures \u2014 `system` audit events, normalized `token_count` rate limits, per-file `apply_patch` expansion, tool-emission dedupe, MCP server attribution, and the new `ProviderReaderSessionWatcher`\n\n## [0.18.4] - 2026-05-27\n\n### Added\n\n- **`sidekick peak --provider <id>`**: New flag gates peak-hours output on the session provider. When the resolved provider is not `claude-code`, the command prints a \"not applicable\" message instead of calling the upstream endpoint\n\n### Changed\n\n- **Bundled `sidekick-shared` 0.18.4**: Picks up `scopePeakHoursToSessionProvider()`, `isClaudeCodeSessionProvider()`, `createPeakHoursNotApplicableState()` for peak-hours scoping, the improved Codex quota snapshot selection logic (`isPreferredQuotaHit`, `findAccountRolloutFiles`, `shouldKeepExistingSnapshot`), and the `notApplicable` field on `PeakHoursState`\n\n## [0.18.3] - 2026-05-19\n\n### Added\n\n- **`sidekick quota history`**: New subcommand that renders a 13-week GitHub-contributions-style heatmap of quota utilization for the current workspace. Flags: `--weeks <n>` (1-26, default 13), `--provider claude|codex` (default both), `--workspace <path>` (default cwd). Bucketed glyphs (`\xB7 \u2591 \u2592 \u2593 \u2588`) are color-coded by utilization band (\u22640 / <25 / <50 / <75 / \u226575), with per-provider rows and a peak / avg / unavailable-days / samples footer. Days that hit `available: false` render as a red `\xD7`. With `--json`, emits a `{ workspaceId, weeks, providers: { claude?, codex? }, generatedAt }` payload \u2014 the same shape consumed by the VS Code dashboard\n\n### Changed\n\n- **Bundled `sidekick-shared` 0.18.3**: Picks up the new per-workspace quota history surface (`appendQuotaHistorySample`, `readQuotaHistoryRange`, `readQuotaHistoryDailyBuckets`, `pruneQuotaHistory`, `getWorkspaceIdFromPath`) and the optional `workspaceId` / `appendHistorySample` hooks on `CodexQuotaWatcher`\n\n## [0.18.2] - 2026-05-19\n\n### Added\n\n- **`sidekick quota --refresh`**: New flag on the `quota` command that, for Codex, explicitly refreshes from the ChatGPT usage API before falling back to local rollout data and cached snapshots. Without the flag, the Codex quota path stays fully local and makes no upstream network call\n\n### Changed\n\n- **Codex quota is local-only by default**: `sidekick quota --provider codex` now delegates to the new `resolveCodexQuota` orchestrator in `sidekick-shared`. It checks the current workspace's most recent rollout, then recent account-level rollouts under `CODEX_HOME/sessions`, then the active account's cached snapshot \u2014 no upstream network call unless `--refresh` is passed. Failure output continues to include structured `failureKind` / `httpStatus` / `retryAfterMs` fields under `--json`\n- **Bundled `sidekick-shared` 0.18.2**: Picks up the new Codex quota orchestrator (`resolveCodexQuota`, `resolveCodexQuotaFromLocalSources`, `readLatestCodexQuotaFromRollouts`, `fetchCodexQuotaFromApi`), the relaxed `CodexRateLimits` shape (nullable `resets_at` / `window_minutes`), the rate-limit-only `token_count` event emission in `JsonlSessionWatcher`, and `state_N.sqlite` discovery in `CodexDatabase` + provider auto-detect\n\n## [0.18.1] - 2026-05-08\n\n### Changed\n\n- **Shared dashboard formatting**: terminal dashboard `fmtNum()` and `formatDuration()` now delegate to `formatTokenCount()` and `formatDurationMs()` from `sidekick-shared`, keeping the existing CLI surface (uppercase `K`/`M` suffix, compact `1m5s` style) while removing forked rounding logic\n\n## [0.18.0] - 2026-05-08\n\n### Changed\n\n- **Bundled `sidekick-shared` 0.18.0**: Picks up the new provider-aware quota orchestration surface \u2014 `MultiProviderQuotaService`, `CodexQuotaWatcher`, `getActiveAccountStatus()`, `extractToolCall()`, cost-provenance helpers (`calculateCostWithProvenance`, `mergeCostSources`), and model display helpers (`shortModelName`, `getModelDisplayInfo`, `compareModelIds`, `sortModelIds`). `parseModelId()` also now recognizes legacy Claude IDs such as `claude-3-opus-20240229` and `claude-3-5-sonnet-20241022`\n- **No CLI runtime changes**: This release ships the shared library upgrade for downstream tooling alignment; `sidekick quota`, `sidekick status`, and the live dashboard keep using the existing polling path. Wiring the new orchestrator into the CLI will land in a follow-up release\n\n## [0.17.7] - 2026-04-28\n\n### Fixed\n\n- **Quota snapshot write race**: Updated the bundled `sidekick-shared` snapshot writer so concurrent `sidekick quota` / Codex session updates no longer collide on `quota-snapshots.json.tmp` or throw `ENOENT`. Failed writes now also clean up their partial temp files instead of leaving orphans in `~/.config/sidekick/`\n\n## [0.17.6] - 2026-04-19\n\n### Added\n\n- **`sidekick peak` command**: One-shot check for Claude's current peak-hours state \u2014 weekdays 13:00\u201319:00 UTC, when session limits drain faster on Free/Pro/Max/Team subscriptions. Prints a color-coded status block with a countdown to the next transition. Data comes from the public `promoclock.co/api/status` endpoint (third-party, unaffiliated with Anthropic) with a graceful fallback when unreachable. `--json` emits the full raw state\n- **Peak-hours block in `sidekick status`**: When the active provider is `claude-code`, the Claude + OpenAI health blocks are now followed by a **Claude Peak Hours** block (off-peak or in-peak, with countdown). Gated on the provider so OpenCode / Codex users don't trigger an unnecessary third-party fetch. `--json` output includes the new `peak` field\n- **Peak-hours summary in `sidekick quota`**: Claude subscription quota output now shows a **Peak** line under the 5-hour / 7-day bars \u2014 green dot off-peak, orange dot during an active peak, with a countdown to the next transition. `--json` output includes the new `peak` field\n\n## [0.17.5] - 2026-04-18\n\n### Added\n\n- **Default account bootstrap at CLI startup**: The CLI now calls `ensureDefaultAccounts()` from `sidekick-shared` at module load and awaits the result inside a Commander `preAction` hook, so the first real subcommand blocks briefly on the bootstrap while `--version` and `--help` stay instant. When a system Claude Code or Codex credential exists and no saved account is active for that provider yet, the CLI registers it as \"Default\" \u2014 `sidekick quota`, `sidekick account`, and `sidekick stats` now reflect the active account on first run without requiring an explicit `sidekick account --add` first. Idempotent, never overwrites manually saved accounts, and all errors are swallowed so startup is never blocked\n\nThanks to [@B33pBeeps](https://github.com/B33pBeeps) (Juan Fourie) for contributing this feature in [#16](https://github.com/cesarandreslopez/sidekick-agent-hub/pull/16).\n\n## [0.17.4] - 2026-04-17\n\n### Changed\n\n- **Pricing hydration import migrated to `sidekick-shared/node`**: `cli.ts` now imports `hydratePricingCatalog` from the new Node-only subpath and keeps `detectProvider` on the package root. Runtime behavior is unchanged; the split makes the CLI's import surface self-documenting (hydration is explicitly a Node API) and aligns the CLI with the shared library's new versioned public API contract\n\n## [0.17.3] - 2026-04-17\n\n### Changed\n\n- **Version sync with the VS Code extension**: Republished to keep CLI, extension, and shared-library versions aligned after a cosmetic changelog fix in 0.17.3. No CLI code changes \u2014 functionally identical to 0.17.2\n\n## [0.17.2] - 2026-04-17\n\n### Added\n\n- **LiteLLM pricing hydration on startup**: The CLI now fetches the LiteLLM pricing catalog on startup and caches to `~/.config/sidekick/pricing-catalog.json` with a 24-hour TTL, 3s timeout, and stale-cache fallback \u2014 new model prices are picked up without a CLI upgrade\n- **Expanded pricing coverage**: GPT-4o, GPT-4.1, GPT-5.x, o1, o3, and o3-mini families are now priced alongside the existing Claude entries\n- **Real-dollar Codex / Claude Code costs**: `EventAggregator` computes cost from the pricing table when the session provider doesn't report one, so `sidekick` live dashboards now show actual dollars for Codex and Claude Code sessions\n- **`stats` footer lists unpriced models**: `sidekick stats` prints any models encountered with no pricing entry so missing coverage is visible\n\n### Fixed\n\n- **Context-gauge % wrong for Opus 4.7 (1M) and other new models**: The dashboard's context gauge was dividing by 200K for Claude Opus 4.7 (native 1M), inflating the displayed %. The shared model \u2192 context-window map now includes Opus/Sonnet 4.7 (1M), GPT-5.4 (1.05M), GPT-5.3-Codex (400K), and GPT-5.3-Codex-Spark (128K). Claude Code's `[1m]` suffix is now also honored as an explicit 1M marker\n- **Silent Sonnet-priced fallback for unknown models**: Codex, GPT-5.x, and o-series rows were being rendered at Sonnet rates. Unknown-model rows now render as `\u2014` in yellow instead of inventing a dollar figure\n\n### Changed\n\n- **`historical-data.json` schema v2**: reads `priced` flag and `unpricedModelIds` from records written by the latest VS Code extension; v1 records still read correctly\n\n## [0.17.1] - 2026-04-13\n\n### Fixed\n\n- **Codex multi-home session discovery**: Provider detection now scans all candidate Codex home directories, fixing missed sessions when the managed profile home is empty but the system `~/.codex/` has activity\n\n## [0.17.0] - 2026-04-13\n\n### Added\n\n- **Multi-provider account management**: `sidekick account` now supports `--provider codex` for Codex profile management alongside Claude Code accounts\n- **Codex account lifecycle**: `--add` prepares a profile and spawns `codex login`; `--switch-to` and `--remove` accept email, label, or profile ID\n- **Quota snapshot fallback**: `sidekick quota` for Codex shows cached rate-limit snapshots when no active session exists, with \"cached from\" timestamp\n\n### Fixed\n\n- **Email normalization**: Claude account lookup normalizes email case for reliable matching\n\n## [0.16.1] - 2026-03-27\n\n### Fixed\n\n- **Dashboard provider status scoping**: The TUI now shows degraded-service notices only for the monitored provider \u2014 Claude for Claude Code sessions, OpenAI for Codex sessions, and no status banner for OpenCode\n\n## [0.16.0] - 2026-03-23\n\n### Changed\n\n- **Consistent cost formatting**: All cost displays (`stats`, `context`, Sessions panel, narrative prompt) now use shared `formatCost()` with intelligent decimal precision (4 places for < $0.01, 2 otherwise)\n- **QuotaService**: Rewritten to wrap shared `QuotaPoller` with exponential backoff instead of manual polling loop\n- **modelContext**: Now re-exports `getModelInfo` from shared library alongside `getContextWindowSize`\n\n## [0.15.2] - 2026-03-18\n\n### Fixed\n\n- **CLI help descriptions**: Updated `quota` and `status` command descriptions to reflect provider-aware behavior\n- **`sidekick quota --provider`**: Added local `--provider` option so `sidekick quota --provider codex` works naturally\n\n## [0.15.0] - 2026-03-18\n\n### Added\n\n- **OpenAI status page monitoring**: CLI dashboard now shows OpenAI API status alongside Claude API status\n- **Codex rate limits in dashboard**: Sessions panel displays Codex rate-limit data with \"Rate Limits\" header instead of \"Quota\"\n- **Provider-aware `sidekick quota` command**: Detects active provider and shows Codex rate limits, Claude subscription quota, or an informational message for OpenCode\n\n### Fixed\n\n- **QuotaService polling for Codex**: Dashboard no longer starts Claude OAuth quota polling when the active provider is Codex\n\n## [0.14.2] - 2026-03-16\n\n### Fixed\n\n- **Quota polling interval**: Reduced quota refresh from every 30 seconds to every 5 minutes to avoid unnecessary API calls\n- **SessionsPanel `detailWidth()` call**: Removed unused parameter from `detailWidth()` in the Sessions panel quota rendering\n\n## [0.14.1] - 2026-03-14\n\n### Fixed\n\n- **Per-model context window sizes**: Dashboard context gauge now shows correct utilization for Claude Opus 4.6 (1M context) and other models with non-200K windows\n\n### Changed\n\n- **Shared model context lookup**: CLI dashboard now uses the centralized `getModelContextWindowSize()` from `sidekick-shared` instead of a local duplicate map\n\n## [0.14.0] - 2026-03-12\n\n### Added\n\n- **`sidekick account` Command**: Manage Claude Code accounts from the terminal \u2014 list saved accounts, add the current account with an optional label, switch to the next or a specific account, and remove accounts. Supports `--json` output for scripting\n- **Quota Account Label**: `sidekick quota` now shows the active account email and label above the quota bars when multi-account is enabled\n- **macOS Keychain Support**: `sidekick account` and `sidekick quota` now read and write credentials via the system Keychain on macOS, fixing account switching and quota checks on Mac\n\n## [0.13.8] - 2026-03-12\n\n### Changed\n\n- **Structured quota failure output**: `sidekick quota` now renders consistent auth, rate-limit, server, network, and unexpected-failure copy from shared quota failure descriptors while preserving `--json` machine-readable output\n- **Dashboard unavailable quota rendering**: The Sessions panel now shows Claude Code quota failures inline instead of hiding the quota section whenever subscription data is unavailable\n- **Quota transition toasts**: The Ink dashboard now fires low-noise toast notifications only when Claude Code quota failure state changes, avoiding repeated alerts every polling interval\n\n## [0.13.7] - 2026-03-11\n\n### Changed\n\n- **npm README sync**: Updated the published CLI package README to reflect current OpenCode monitoring behavior, platform-specific data directories, and the `sqlite3` runtime requirement\n- **README badge cleanup**: Removed the Ask DeepWiki badge from the published CLI package README; the repo root README still keeps it\n\n## [0.13.6] - 2026-03-11\n\n### Changed\n\n- **Refreshed CLI Dashboard Wordmark**: Updated the dashboard wordmark/header styling for a cleaner splash and dashboard identity\n\n### Fixed\n\n- **OpenCode dashboard startup**: OpenCode DB-backed session discovery now resolves projects by worktree, sandboxes, and session directory instead of quietly behaving like no session exists\n- **OpenCode runtime notices**: The CLI now prints an OpenCode-only actionable notice when `opencode.db` exists but `sqlite3` is missing, blocked, or otherwise unusable in the current shell environment\n\n## [0.13.5] - 2026-03-10\n\n### Added\n\n- **`sidekick status` Command**: One-shot Claude API status check with color-coded text output and `--json` mode\n- **Dashboard Status Banner**: Status bar shows a colored `\u25CF API minor/major/critical` indicator when Claude is degraded; Sessions panel Summary tab shows an \"API Status\" section with affected components and active incident details. Polls every 60s\n\n## [0.13.4] - 2026-03-08\n\n### Fixed\n\n- **Onboarding Phrase Spam**: Splash screen and detail pane motivational phrases memoized \u2014 no longer flicker every render tick (fixes [#13](https://github.com/cesarandreslopez/sidekick-agent-hub/issues/13))\n\n### Changed\n\n- **Simplified Logo**: Replaced 6-line ASCII robot art with compact text header in splash, help, and changelog overlays\n- **Removed Dead Code**: Removed unused `getSplashContent()` and `HELP_HEADER` exports from branding module\n\n## [0.13.3] - 2026-03-04\n\n_No CLI-specific changes in this release._\n\n## [0.13.2] - 2026-03-04\n\n_No CLI-specific changes in this release._\n\n## [0.13.1] - 2026-03-04\n\n### Added\n\n- **`sidekick quota` Command**: One-shot subscription quota check showing 5-hour and 7-day utilization with color-coded progress bars and reset countdowns \u2014 supports `--json` for machine-readable output\n- **Quota Projections**: Elapsed-time projections shown in `sidekick quota` output and TUI dashboard quota section \u2014 displays projected end-of-window utilization next to current value (e.g., `40% \u2192 100%`), included in `--json` output as `projectedFiveHour` / `projectedSevenDay`\n\n## [0.13.0] - 2026-03-03\n\n_No CLI-specific changes in this release._\n\n## [0.12.10] - 2026-03-01\n\n### Added\n\n- **Events Panel** (key 7): Scrollable live event stream with colored type badges (`[USR]`, `[AST]`, `[TOOL]`, `[RES]`), timestamps, and keyword-highlighted summaries; detail tabs for full event JSON and surrounding context\n- **Charts Panel** (key 8): Tool frequency horizontal bars, event type distribution, 60-minute activity heatmap using `\u2591\u2592\u2593\u2588` intensity characters, and pattern analysis with frequency bars and template text\n- **Multi-Mode Filter**: `/` filter overlay now supports four modes \u2014 substring, fuzzy, regex, and date range \u2014 Tab cycles modes, regex mode shows red validation errors\n- **Search Term Highlighting**: Active filter terms highlighted in blue within side list items\n- **Timeline Keyword Coloring**: Event summaries in the Sessions panel Timeline tab now use semantic keyword coloring \u2014 errors red, success green, tool names cyan, file paths magenta\n\n### Removed\n\n- **Search Panel**: Removed redundant Search panel (previously key 7) \u2014 the `/` filter with multi-mode support serves the same purpose\n\n## [0.12.9] - 2026-02-28\n\n### Added\n\n- **Standalone Data Commands**: `sidekick tasks`, `sidekick decisions`, `sidekick notes`, `sidekick stats`, `sidekick handoff` for accessing project data without launching the TUI\n- **`sidekick search <query>`**: Cross-session full-text search from the terminal\n- **`sidekick context`**: Composite output of tasks, decisions, notes, and handoff for piping into other tools\n- **`--list` flag on `sidekick dump`**: Discover available session IDs before requiring `--session <id>`\n- **Search Panel**: Search panel (panel 7) wired into the TUI dashboard\n\n### Changed\n\n- **`taskMerger` utility**: Duplicate `mergeTasks` logic extracted into shared `taskMerger` utility\n- **Model constants**: Hardcoded model IDs extracted to named constants\n\n### Fixed\n\n- **`convention` icon**: Notes panel icon replaced with valid `tip` type\n- **Linux clipboard**: Now supports Wayland (`wl-copy`) and `xsel` fallbacks, with error messages instead of silent failure\n- **`provider.dispose()`**: Added to `dump` and `report` commands (prevents SQLite connection leaks)\n\n## [0.12.8] - 2026-02-28\n\n### Changed\n\n- **Dashboard UI/UX Polish**: Visual overhaul for better hierarchy, consistency, and readability\n - Splash screen and help overlay now display the robot ASCII logo\n - Toast notifications show severity icons (\u2718 error, \u26A0 warning, \u25CF info) with inner padding\n - Focused pane uses double-border for clear focus indication\n - Section dividers (`\u2500\u2500 Title \u2500\u2500\u2500\u2500`) replace bare bold headers in summary, agents, and context attribution\n - Tab bar: active tab underlined in magenta, inactive tabs dimmed, bracket syntax removed\n - Status bar: segmented layout with `\u2502` separators; keys bold, labels dim\n - Summary metrics condensed: elapsed/events/compactions on one line, tokens on one line with cache rate and cost\n - Sparklines display peak metadata annotations\n - Progress bars use blessed color tags for consistent coloring\n - Help overlay uses dot-leader alignment for all keybinding rows\n - Empty state hints per panel (e.g. \"Tasks appear as your agent works.\")\n - Session picker groups sessions by provider with section headers when multiple providers are present\n\n## [0.12.7] - 2026-02-27\n\n### Added\n\n- **HTML Session Report**: `sidekick report` command generates a self-contained HTML report and opens it in the default browser\n - Options: `--session`, `--output`, `--theme` (dark/light), `--no-open`, `--no-thinking`\n - TUI Dashboard: press `r` to generate and open an HTML report for the current session\n\n## [0.12.6] - 2026-02-26\n\n### Added\n\n- **Session Dump Command**: `sidekick dump` exports session data in text, markdown, or JSON format with `--format`, `--width`, and `--expand` options\n- **Plans Panel Re-enabled**: Plans panel restored in CLI dashboard with plan file discovery from `~/.claude/plans/`\n- **Enhanced Status Bar**: Session info display improved with richer metadata\n\n### Fixed\n\n- **Old snapshot format migration**: Restoring pre-0.12.3 session snapshots no longer shows empty timeline entries\n\n### Changed\n\n- **Phrase library moved to shared**: CLI-specific phrase formatting kept local, all phrase content now from `sidekick-shared`\n\n## [0.12.5] - 2026-02-24\n\n### Fixed\n\n- **Update check too slow to notice new versions**: Reduced npm registry cache TTL from 24 hours to 4 hours so upgrade notices appear sooner after a new release\n\n## [0.12.4] - 2026-02-24\n\n### Fixed\n\n- **Session crash on upgrade**: Fixed `d.timestamp.getTime is not a function` error when restoring tool call data from session snapshots \u2014 `Date` objects were serialized to strings by JSON but not rehydrated on restore, causing the session monitor to crash on first run after upgrading from 0.12.2 to 0.12.3\n\n## [0.12.3] - 2026-02-24\n\n### Added\n\n- **Latest-node indicator**: The most recently added node in tree and boxed mind map views is now marked with a yellow indicator\n- **Plan analytics in mind map**: Tree and boxed views now display plan progress and per-step metrics\n - Tree view: plan header shows completion stats; steps show complexity, duration, tokens, tool calls, and errors in metadata brackets\n - Box view: progress bar with completion percentage; steps show right-aligned metrics; subtitle shows step count and total duration\n- **Cross-provider plan extraction**: Shared `PlanExtractor` now handles Claude Code (EnterPlanMode/ExitPlanMode) and OpenCode (`<proposed_plan>` XML) plans \u2014 previously only Codex plans were shown\n- **Enriched plan data model**: Plan steps include duration, token count, tool call count, and error messages\n- **Phase-grouped plan display**: When a plan has phase structure, tree and boxed views group steps under phase headers with context lines from the original plan markdown\n- **Node type filter**: Press `f` on the Mind Map tab to cycle through node type filters (file, tool, task, subagent, command, plan, knowledge-note) \u2014 non-matching sections render dimmed in grey\n\n### Fixed\n\n- **Kanban board regression**: Subagent and plan-step tasks now correctly appear in the kanban board\n\n### Changed\n\n- **Plans panel temporarily disabled**: The Plans panel in the CLI dashboard is disabled until plan-mode event capture is reliably working end-to-end. Plan nodes in the mind map remain active.\n- `DashboardState` now delegates to shared `EventAggregator` instead of maintaining its own aggregation logic\n\n## [0.12.2] - 2026-02-23\n\n### Added\n\n- **Update notifications**: The dashboard now checks the npm registry for newer versions on startup and shows a yellow banner in the status bar when an update is available (e.g., `v0.13.0 available \u2014 npm i -g sidekick-agent-hub`). Results are cached for 24 hours to avoid repeated network requests.\n\n## [0.12.1] - 2026-02-23\n\n### Fixed\n\n- **VS Code integration**: Fixed exit code 127 when the extension launches the CLI dashboard on systems using nvm or volta (node binary not found when shell init is bypassed)\n\n## [0.12.0] - 2026-02-22\n\n### Added\n\n- **\"Open CLI Dashboard\" VS Code Integration**: New VS Code command `Sidekick: Open CLI Dashboard` launches the TUI dashboard in an integrated terminal\n - Install the CLI with `npm install -g sidekick-agent-hub`\n\n## [0.11.0] - 2026-02-19\n\n### Added\n\n- **Initial Release**: Full-screen TUI dashboard for monitoring agent sessions from the terminal\n - Ink-based terminal UI with panels for sessions, tasks, kanban, mind map, notes, decisions, search, files, and git diff\n - Multi-provider support: auto-detects Claude Code, OpenCode, and Codex sessions\n - Reads from `~/.config/sidekick/` \u2014 the same data files the VS Code extension writes\n - Usage: `sidekick dashboard [--project <path>] [--provider <id>]`\n"});function K_e(t,e){if(!e)return null;if(t==="regex"){try{new RegExp(e)}catch(n){return n instanceof Error?n.message:"Invalid regex"}return null}if(t==="date"){let n=VN(e);return"error"in n?n.error:null}return null}function Y_e(t,e){switch(e.type){case"SWITCH_PANEL":return{...t,activePanelIndex:e.index,selectedItemIndex:0,detailTabIndex:0,filterString:"",filterMode:"substring",filterError:null,focusTarget:"side",overlay:null,detailScrollOffset:0};case"SELECT_ITEM":return{...t,selectedItemIndex:e.index,detailTabIndex:0,detailScrollOffset:0};case"CLAMP_SELECTION":return{...t,selectedItemIndex:e.index};case"SET_DETAIL_TAB":return{...t,detailTabIndex:e.index,detailScrollOffset:0};case"CYCLE_DETAIL_TAB":{if(e.tabCount<=1)return t;let n=(t.detailTabIndex+e.direction+e.tabCount)%e.tabCount;return{...t,detailTabIndex:n,detailScrollOffset:0}}case"CYCLE_LAYOUT":{let n=["normal","expanded","wide-side"],r=n.indexOf(t.layoutMode),o=n[(r+1)%n.length];return{...t,layoutMode:o,focusTarget:o==="expanded"?"detail":t.focusTarget}}case"TOGGLE_FOCUS":return{...t,focusTarget:t.focusTarget==="side"?"detail":"side"};case"SET_FOCUS":return{...t,focusTarget:e.target};case"SET_OVERLAY":return{...t,overlay:e.overlay,contextMenuIndex:0,overlayScrollOffset:0};case"SET_FILTER":return{...t,filterString:e.value,filterError:K_e(t.filterMode,e.value)};case"CYCLE_FILTER_MODE":{let n=["substring","fuzzy","regex","date"],r=n.indexOf(t.filterMode),o=n[(r+1)%n.length];return{...t,filterMode:o,filterError:K_e(o,t.filterString)}}case"SET_FILTER_ERROR":return{...t,filterError:e.error};case"SET_SESSION_FILTER":return{...t,sessionFilter:e.filter};case"SCROLL_DETAIL":return{...t,detailScrollOffset:e.offset};case"SCROLL_DETAIL_DELTA":{let n=kI(e.totalLines,e.viewportHeight),r=Math.max(0,Math.min(t.detailScrollOffset+e.delta,n));return{...t,detailScrollOffset:r}}case"ADD_TOAST":return{...t,toasts:[...t.toasts,e.toast]};case"REMOVE_TOAST":return{...t,toasts:t.toasts.filter(n=>n.id!==e.id)};case"FIRST_EVENT":return{...t,hasReceivedEvents:!0,sessionFilter:e.sessionPrefix?{sessionPrefix:e.sessionPrefix,label:"\u25CF active session"}:null};case"CONTEXT_MENU_NAV":{if(e.itemCount===0)return t;let n=(t.contextMenuIndex+e.delta+e.itemCount)%e.itemCount;return{...t,contextMenuIndex:n}}case"CONTEXT_MENU_SELECT":return{...t,overlay:null};case"SCROLL_SIDE":{if(e.itemCount===0)return t;let n=Math.max(0,Math.min(t.selectedItemIndex+e.delta,e.itemCount-1));return{...t,selectedItemIndex:n,detailTabIndex:0,detailScrollOffset:0}}case"OVERLAY_SCROLL":return{...t,overlayScrollOffset:Math.max(0,t.overlayScrollOffset+e.delta)};case"CLAMP_OVERLAY_SCROLL":return{...t,overlayScrollOffset:Math.min(t.overlayScrollOffset,Math.max(0,e.maxOffset))};case"TOGGLE_MOUSE":return{...t,mouseEnabled:!t.mouseEnabled};case"TICK":return{...t,renderTick:t.renderTick+1};default:return t}}var J_e,W_e=F(()=>{"use strict";KN();oO();J_e={activePanelIndex:0,selectedItemIndex:0,detailTabIndex:0,layoutMode:"normal",focusTarget:"side",overlay:null,filterString:"",filterMode:"substring",filterError:null,sessionFilter:null,detailScrollOffset:0,toasts:[],hasReceivedEvents:!1,contextMenuIndex:0,overlayScrollOffset:0,renderTick:0,mouseEnabled:!0}});function X_e(t,e,n){let{state:r,dispatch:o,exit:i,panels:s,panel:c,selectedItem:d,contextActions:m,currentItemCount:h,clampedSelection:y,sideScroll:v,detailTabCount:_,detailLineCount:I,detailViewportHeight:w,addToast:D,toggleSessionFilter:O,onMouseSettingChange:P,onRefresh:R,onGenerateReport:L,onTogglePin:H,isPinned:he,pendingSessionPath:se,onSessionSwitch:Ce}=n;if(e.ctrl&&t==="c"){i();return}if(r.overlay==="filter"){if(e.escape){o({type:"SET_FILTER",value:""}),o({type:"SET_OVERLAY",overlay:null});return}if(e.return){o({type:"SET_OVERLAY",overlay:null});return}if(e.tab){o({type:"CYCLE_FILTER_MODE"});return}if(e.backspace||e.delete){o({type:"SET_FILTER",value:r.filterString.slice(0,-1)});return}if(t&&!e.ctrl&&!e.meta){o({type:"SET_FILTER",value:r.filterString+t});return}return}if(r.overlay==="context-menu"){if(e.escape||t==="q"){o({type:"SET_OVERLAY",overlay:null});return}if(t==="j"||e.downArrow){o({type:"CONTEXT_MENU_NAV",delta:1,itemCount:m.length});return}if(t==="k"||e.upArrow){o({type:"CONTEXT_MENU_NAV",delta:-1,itemCount:m.length});return}if(e.return){let le=m[r.contextMenuIndex];if(le&&d){let ze=le.handler(d);typeof ze=="string"&&D(ze,ze.toLowerCase().includes("fail")||ze.toLowerCase().includes("unavailable")?"error":"info"),o({type:"CONTEXT_MENU_SELECT"})}return}let ve=m.find(le=>le.key===t);if(ve&&d){let le=ve.handler(d);typeof le=="string"&&D(le,le.toLowerCase().includes("fail")||le.toLowerCase().includes("unavailable")?"error":"info"),o({type:"CONTEXT_MENU_SELECT"})}return}if(r.overlay==="help"){e.escape||t==="?"||t==="q"?o({type:"SET_OVERLAY",overlay:null}):t==="j"||e.downArrow?o({type:"OVERLAY_SCROLL",delta:1}):(t==="k"||e.upArrow)&&o({type:"OVERLAY_SCROLL",delta:-1});return}if(r.overlay==="changelog"){e.escape||t==="V"||t==="q"?o({type:"SET_OVERLAY",overlay:null}):t==="j"||e.downArrow?o({type:"OVERLAY_SCROLL",delta:1}):(t==="k"||e.upArrow)&&o({type:"OVERLAY_SCROLL",delta:-1});return}if(t==="q"){i();return}if(e.escape){if(r.filterString){o({type:"SET_FILTER",value:""});return}if(r.focusTarget==="detail"){o({type:"SET_FOCUS",target:"side"});return}return}if(t==="?"){o({type:"SET_OVERLAY",overlay:"help"});return}if(t==="M"){let ve=!r.mouseEnabled;o({type:"TOGGLE_MOUSE"}),D(ve?"Mouse capture on":"Mouse capture off \u2014 terminal text selection enabled","info"),P?.(ve);return}if(t==="R"){if(!R)return;R(),D("Refreshing project data\u2026","info");return}if(t==="s"&&se&&Ce){Ce(se);return}let X=parseInt(t,10);if(X>=1&&X<=s.length){r.hasReceivedEvents||o({type:"FIRST_EVENT",sessionPrefix:""}),s[r.activePanelIndex]?.onDeactivate?.(),o({type:"SWITCH_PANEL",index:X-1}),s[X-1]?.onActivate?.();return}if(r.hasReceivedEvents){if(e.tab){o({type:"TOGGLE_FOCUS"});return}if(t==="/"){o({type:"SET_OVERLAY",overlay:"filter"});return}if(t&&!plt.has(t)){let le=(c.getKeybindings?.()||[]).find(ze=>ze.keys.includes(t)&&(!ze.condition||ze.condition(d)));if(le){le.handler(d),o({type:"TICK"});return}if(d){let Yt=c.getActions().find(St=>St.key===t&&(!St.condition||St.condition(d)));if(Yt){let St=Yt.handler(d);typeof St=="string"&&D(St,St.toLowerCase().includes("fail")||St.toLowerCase().includes("unavailable")?"error":"info");return}}}if(t==="z"){o({type:"CYCLE_LAYOUT"});let ve=["normal","expanded","wide-side"],le=ve.indexOf(r.layoutMode),ze=ve[(le+1)%ve.length];D(`Layout: ${{normal:"Normal",expanded:"Expanded","wide-side":"Wide Side"}[ze]}`,"info");return}if(t==="V"){o({type:"SET_OVERLAY",overlay:"changelog"});return}if(t==="r"){L?.();return}if(t==="p"&&H){H(),D(he?"Session unpinned":"Session pinned","info");return}if(t==="f"){O();return}if(t==="x"){d&&c.getActions().length>0&&o({type:"SET_OVERLAY",overlay:"context-menu"});return}if(t==="["){o({type:"CYCLE_DETAIL_TAB",direction:-1,tabCount:_});return}if(t==="]"){o({type:"CYCLE_DETAIL_TAB",direction:1,tabCount:_});return}if(r.focusTarget==="side"){if(t==="j"||e.downArrow){y<h-1&&(o({type:"SELECT_ITEM",index:y+1}),v.selectNext());return}if(t==="k"||e.upArrow){y>0&&(o({type:"SELECT_ITEM",index:y-1}),v.selectPrev());return}if(t==="g"){o({type:"SELECT_ITEM",index:0}),v.selectFirst();return}if(t==="G"){o({type:"SELECT_ITEM",index:Math.max(0,h-1)}),v.selectLast();return}if(e.return){o({type:"SET_FOCUS",target:"detail"});return}}if(r.focusTarget==="detail"){if(t==="j"||e.downArrow){o({type:"SCROLL_DETAIL_DELTA",delta:1,totalLines:I,viewportHeight:w});return}if(t==="k"||e.upArrow){o({type:"SCROLL_DETAIL_DELTA",delta:-1,totalLines:I,viewportHeight:w});return}if(t==="h"||e.leftArrow){o({type:"SET_FOCUS",target:"side"});return}if(t==="g"){o({type:"SCROLL_DETAIL",offset:0});return}if(t==="G"){o({type:"SCROLL_DETAIL",offset:kI(I,w)});return}}}}var plt,ebe=F(()=>{"use strict";oO();plt=new Set(["j","k","g","G","h","q","?","/","M","R","s","1","2","3","4","5","6","7","8","9"])});function tbe(t,e,n){let r=Math.max(0,e-n);return t.slice(Math.max(0,t.length-Math.min(r,t.length)))}var nbe=F(()=>{"use strict"});function rbe(t,e){let n=t();return{allItems:n,currentItems:e([...n])}}var obe=F(()=>{"use strict"});function ibe(t,e=3){return e<=0?[]:t.slice(Math.max(0,t.length-e))}var sbe=F(()=>{"use strict"});function abe(){return{loadedAt:null,error:null,refreshing:!1,watcherError:null,watcherErrorAt:null}}function a5(t,e){return t.error?{text:"\u26A0 data",color:"red"}:t.watcherError!==null&&(t.watcherErrorAt===null||e-t.watcherErrorAt<=6e4)?{text:"\u26A0 session",color:"yellow"}:t.refreshing?{text:"\u21BB",color:"gray"}:t.loadedAt!==null&&e-t.loadedAt>12e4?{text:`stale ${Math.floor((e-t.loadedAt)/6e4)}m`,color:"yellow"}:null}var u5=F(()=>{"use strict"});function c5({panels:t,metrics:e,staticData:n,isPinned:r,pendingSessionPath:o,onSessionSwitch:i,onTogglePin:s,onGenerateReport:c,mouseInitiallyEnabled:d,onMouseSettingChange:m,onRefresh:h,dataStatus:y,notice:v}){let[_,I]=(0,go.useReducer)(Y_e,J_e,Be=>({...Be,mouseEnabled:d!==!1})),{exit:w}=Hy(),{isRawModeSupported:D}=kc(),{columns:O,rows:P}=Rc(),R=(0,go.useRef)(0),L=(0,go.useRef)(0),H=(0,go.useRef)(null),he=(0,go.useRef)(!1),se=(0,go.useRef)(0),Ce=(0,go.useRef)(null);(0,go.useEffect)(()=>{if(!_.hasReceivedEvents&&e.eventCount>0){let Be=(e.sessionStartTime||"").substring(0,8);I({type:"FIRST_EVENT",sessionPrefix:Be})}},[e.eventCount,_.hasReceivedEvents,e.sessionStartTime]),(0,go.useEffect)(()=>{if(!he.current){L.current=e.timelineAppendCount,he.current=!0;return}if(e.timelineAppendCount!==L.current){for(let Be of tbe(e.timeline,e.timelineAppendCount,L.current))Be.type==="summary"?X(Be.summary||"Context compacted","warning"):Be.type==="system"&&Be.summary?.includes("ended")&&X(Be.summary,"info");L.current=e.timelineAppendCount}},[e.timelineAppendCount,e.timeline]);let X=(0,go.useCallback)((Be,rt)=>{let jt={error:4e3,warning:3e3,info:2e3},Pt=++R.current;I({type:"ADD_TOAST",toast:{id:Pt,message:Be,severity:rt,expiresAt:Date.now()+jt[rt]}}),setTimeout(()=>{I({type:"REMOVE_TOAST",id:Pt})},jt[rt])},[]),ve=(0,go.useRef)(0);(0,go.useEffect)(()=>{v&&v.id!==ve.current&&(ve.current=v.id,X(v.message,v.severity))},[v,X]),(0,go.useEffect)(()=>{if(e.providerId!=="claude-code"){H.current=null;return}let Be=(0,Nj.describeQuotaFailure)(e.quota);if(!Be){H.current=null;return}H.current!==Be.alertKey&&(H.current=Be.alertKey,X(`${Be.title}: ${Be.message}`,Be.severity))},[X,e.providerId,e.quota]);let le=t[_.activePanelIndex],ze=O<Alt||P<ylt,St=(()=>{switch(_.layoutMode){case"expanded":return 0;case"wide-side":return Math.min(vlt,O-30);default:return O<80?glt:hlt}})(),Ne=(0,go.useCallback)(Be=>{let rt=Be;if(_.sessionFilter&&["tasks","kanban","notes","decisions","plans"].includes(le.id)&&(le.id==="kanban"?rt=rt.map(jt=>_lt(jt,_.sessionFilter)):rt=rt.filter(jt=>ube(jt,_.sessionFilter))),_.filterString){let jt=_.filterString,Pt=_.filterMode;if(Pt==="date"){let On=VN(jt);if(!("error"in On)){let $o=On.since?Date.parse(On.since):-1/0,Ws=On.until?Date.parse(On.until):1/0;rt=rt.filter(As=>{let Ni=le.getItemTimestamp?le.getItemTimestamp(As):Tpe(As.data);return Ni!==null&&Ni>=$o&&Ni<Ws})}}else rt=rt.filter(On=>{let $o=le.getSearchableText?.(On)??On.label.replace(/\{[^}]*\}/g,"");switch(Pt){case"fuzzy":{let Ws=$o.toLowerCase();return jt.toLowerCase().split(/\s+/).filter(As=>As).every(As=>Ws.includes(As))}case"regex":try{return new RegExp(jt).test($o)}catch{return!1}default:return $o.toLowerCase().includes(jt.toLowerCase())}})}return rt.sort((jt,Pt)=>jt.sortKey-Pt.sortKey),rt},[le,_.sessionFilter,_.filterString,_.filterMode]),nt=le.viewVersion??0,{allItems:_t,currentItems:ut}=(0,go.useMemo)(()=>rbe(()=>le.getItems(e,n),Ne),[le,nt,e,n,Ne]),Dt=Math.min(_.selectedItemIndex,Math.max(0,ut.length-1));Dt!==_.selectedItemIndex&&ut.length>0&&I({type:"CLAMP_SELECTION",index:Dt});let jr=Math.max(1,P-5),Ie=c_e(jr,ut.length),ct=i_e({totalItems:ut.length,viewportHeight:Ie});(0,go.useEffect)(()=>{ct.selectedIndex!==_.selectedItemIndex&&ct.setSelected(_.selectedItemIndex)},[_.selectedItemIndex]);let Ct=ut[Dt],Lt=le.detailTabs,bn=Math.min(_.detailTabIndex,Lt.length-1),_i=(0,go.useMemo)(()=>r_e(),[Ct?.id,bn]),In=Math.max(40,O-St-3),Nn=!!_.sessionFilter,Ht=(0,go.useMemo)(()=>{if(Ct&&Lt.length>0&&bn>=0){let Be=Lt[bn],rt=Be.label;return(rt==="Timeline"||rt==="Mind Map"?"":_i+`
|
|
1117
1117
|
`)+Be.render(Ct,e,n,{width:In})}if(!Ct){let Be=["tasks","kanban","notes","decisions","plans"].includes(le.id);return Nn&&Be?"{grey-fg}No items in this session \u2014 press {/grey-fg}{magenta-fg}f{/magenta-fg}{grey-fg} to see all{/grey-fg}":"{grey-fg}(no item selected){/grey-fg}"}return""},[Ct,Lt,bn,_i,e,n,In,le,nt,Nn]),Wt=Ht.split(`
|
|
1118
1118
|
`),et=Math.max(1,P-5),Gt=Lt[bn];(0,go.useEffect)(()=>{if(!Gt?.autoScrollBottom)return;let Be=`${le.id}:${Ct?.id??"none"}:${bn}`;if(!(Wt.length<=et)){if(u_e(Be,Ce.current,Wt.length,se.current)){let rt=kI(Wt.length,et);I({type:"SCROLL_DETAIL",offset:rt})}Ce.current=Be,se.current=Wt.length}},[Wt.length,Gt?.autoScrollBottom,et,le.id,Ct?.id,bn]),"activeDetailTabIndex"in le&&(le.activeDetailTabIndex=_.detailTabIndex);let pn=(0,go.useCallback)(()=>Ct?le.getActions().filter(Be=>!Be.condition||Be.condition(Ct)):[],[le,Ct]),It=_.overlay==="context-menu"?pn():[],gn=(0,go.useCallback)(()=>{let Be=[],rt=le.getKeybindings?.()||[];for(let jt of rt)(!jt.condition||jt.condition(Ct))&&Be.push(`${jt.keys[0]} ${jt.label.toLowerCase().substring(0,12)}`);return le.getActions().length>0&&_.focusTarget==="side"&&Be.push("x actions"),["tasks","kanban","notes","decisions","plans"].includes(le.id)&&_.focusTarget==="side"&&Be.push("f session"),Be.length>0?Be.join(" ")+" ":""},[le,Ct,_.focusTarget]),Zr=(0,go.useCallback)(()=>{if(_.sessionFilter){I({type:"SET_SESSION_FILTER",filter:null}),X("Session filter cleared","info");return}let Be;if(t[_.activePanelIndex].id==="sessions")Be=Ct?.data;else{let jt=t.find(Pt=>Pt.id==="sessions");jt&&(Be=jt.getItems(e,n).find(On=>On.id==="active")?.data)}if(!Be){X("No session selected","info");return}let rt=Be;if(rt.type==="active"){let jt=(rt.metrics?.sessionStartTime||"").substring(0,8);if(!jt){X("No session start time available","info");return}let Pt={sessionPrefix:jt,label:"\u25CF active session"};I({type:"SET_SESSION_FILTER",filter:Pt}),X(`Session filter: ${Pt.label}`,"info")}else if(rt.type==="historical"&&rt.session){let jt={date:rt.session.date,label:`\u229B ${rt.session.date}`};I({type:"SET_SESSION_FILTER",filter:jt}),X(`Session filter: ${jt.label}`,"info")}else X("Cannot filter by this item","info")},[_.sessionFilter,_.activePanelIndex,Ct,t,e,n,X]),oo=(0,go.useCallback)(Be=>{if(_.overlay){Be.type==="click"&&I({type:"SET_OVERLAY",overlay:null});return}if(!_.hasReceivedEvents)return;let{x:rt,y:jt}=Be;if(Be.type==="scroll"){if(rt<St&&St>0){let Pt=Be.scrollDirection==="down"?3:-3;I({type:"SCROLL_SIDE",delta:Pt,itemCount:ut.length});let On=Math.max(0,Math.min(Dt+Pt,ut.length-1));ct.setSelected(On)}else{let Pt=Be.scrollDirection==="down"?3:-3;I({type:"SCROLL_DETAIL_DELTA",delta:Pt,totalLines:Wt.length,viewportHeight:et})}return}if(!(Be.type!=="click"||Be.button!=="left")){if(jt===0){let Pt=l_e(rt,t);Pt!==null&&(t[_.activePanelIndex]?.onDeactivate?.(),I({type:"SWITCH_PANEL",index:Pt}),t[Pt]?.onActivate?.());return}if(!(jt>=P-1)){if(rt<St&&St>0){I({type:"SET_FOCUS",target:"side"});let Pt=f_e(jt,ct.scrollOffset,ut.length);Pt!==null&&(I({type:"SELECT_ITEM",index:Pt}),ct.setSelected(Pt))}else if(I({type:"SET_FOCUS",target:"detail"}),jt===1&&Lt.length>1){let Pt=d_e(rt,St,Lt.map(On=>On.label),bn);if(Pt!==null){I({type:"SET_DETAIL_TAB",index:Pt});return}}}}},[_.overlay,_.hasReceivedEvents,_.activePanelIndex,St,ut.length,Dt,ct,Wt.length,et,t,Lt,P]);return ch((Be,rt)=>X_e(Be,rt,{state:_,dispatch:I,exit:w,panels:t,panel:le,selectedItem:Ct,contextActions:It,currentItemCount:ut.length,clampedSelection:Dt,sideScroll:ct,detailTabCount:Lt.length,detailLineCount:Wt.length,detailViewportHeight:et,addToast:X,toggleSessionFilter:Zr,onMouseSettingChange:m,onRefresh:h,onGenerateReport:c,onTogglePin:s,isPinned:r,pendingSessionPath:o,onSessionSwitch:i}),{isActive:D}),ze?(0,Ki.jsx)(j_e,{columns:O,rows:P}):_.hasReceivedEvents?(0,Ki.jsx)(Qj,{onMouse:oo,enabled:_.mouseEnabled,children:(0,Ki.jsxs)(Je,{flexDirection:"column",height:P,width:O,children:[_.overlay!=="help"&&_.overlay!=="changelog"&&(0,Ki.jsx)(m_e,{panels:t,activeIndex:_.activePanelIndex,layoutMode:_.layoutMode}),_.overlay!=="help"&&_.overlay!=="changelog"&&(0,Ki.jsxs)(Je,{flexGrow:1,flexDirection:"row",children:[St>0&&(0,Ki.jsx)(g_e,{items:ut,selectedIndex:Dt,scrollOffset:ct.scrollOffset,focused:_.focusTarget==="side",width:St,viewportHeight:Ie,panelTitle:le.title,sessionFilterActive:!!_.sessionFilter&&["tasks","kanban","notes","decisions","plans"].includes(le.id),emptyStateHint:le.emptyStateHint,filterString:_.filterString}),(0,Ki.jsxs)(Je,{flexDirection:"column",flexGrow:1,children:[(0,Ki.jsx)(y_e,{tabs:Lt,activeIndex:bn}),(0,Ki.jsx)(__e,{content:Ht,scrollOffset:_.detailScrollOffset,viewportHeight:et,focused:_.focusTarget==="detail"})]})]}),_.overlay==="help"&&(0,Ki.jsx)(B_e,{panels:t,activePanelIndex:_.activePanelIndex,scrollOffset:_.overlayScrollOffset,onClampScroll:Be=>I({type:"CLAMP_OVERLAY_SCROLL",maxOffset:Be})}),_.overlay==="changelog"&&(0,Ki.jsx)(N_e,{entries:mlt,scrollOffset:_.overlayScrollOffset,onClampScroll:Be=>I({type:"CLAMP_OVERLAY_SCROLL",maxOffset:Be})}),(0,Ki.jsx)(t5,{eventCount:e.eventCount,providerName:e.providerName,permissionMode:e.permissionMode,focusTarget:_.focusTarget,panelHints:gn(),sessionFilter:_.sessionFilter?.label??null,filterString:_.filterString,matchCount:ut.length,totalCount:_t.length,updateInfo:e.updateInfo,providerStatus:e.providerStatus,openaiStatus:e.openaiStatus,dataBadge:y?a5(y,Date.now()):null,mouseEnabled:_.mouseEnabled}),_.overlay==="context-menu"&&(0,Ki.jsx)(k_e,{actions:It,selectedIndex:_.contextMenuIndex}),_.overlay==="filter"&&(0,Ki.jsx)(R_e,{filterString:_.filterString,filterMode:_.filterMode,filterError:_.filterError}),_.toasts.length>0&&ibe(_.toasts).map((Be,rt)=>(0,Ki.jsx)(F_e,{toast:Be,row:rt},Be.id))]})}):(0,Ki.jsx)(Qj,{onMouse:oo,enabled:_.mouseEnabled,children:(0,Ki.jsxs)(Je,{flexDirection:"column",height:P,width:O,children:[(0,Ki.jsx)(Je,{flexGrow:1,justifyContent:"center",alignItems:"center",children:(0,Ki.jsx)(T_e,{panelCount:t.length})}),(0,Ki.jsx)(t5,{eventCount:0,focusTarget:"side",panelHints:"",sessionFilter:null,filterString:"",mouseEnabled:_.mouseEnabled,dataBadge:y?a5(y,Date.now()):null})]})})}function ube(t,e){let n=t.data;if(!n)return!1;if(e.sessionPrefix){let r=n.sessionOrigin,o=n.sessionId;return r?.substring(0,8)===e.sessionPrefix||o?.substring(0,8)===e.sessionPrefix||!r&&!o}if(e.date){let r=n.createdAt,o=n.timestamp,i=n.sessionOrigin,s=n.sessionId;return!!(r?.startsWith(e.date)||o?.startsWith(e.date)||i?.startsWith(e.date)||s?.startsWith(e.date))}return!0}function _lt(t,e){let n=t.data,r=n.tasks.filter(d=>ube({id:"",label:"",sortKey:0,data:d},e)),o={pending:"{yellow-fg}\u25CB{/yellow-fg}",in_progress:"{green-fg}\u2192{/green-fg}",completed:"{cyan-fg}\u2713{/cyan-fg}"},i={pending:"Pending",in_progress:"Active",completed:"Completed"},s=o[n.status]||"",c=i[n.status]||n.status;return{...t,label:`${s} ${c} (${r.length})`,data:{status:n.status,tasks:r}}}var go,Nj,Ki,mlt,hlt,glt,Alt,ylt,vlt,cbe=F(async()=>{"use strict";go=me(xn(),1);await fs();o_e();Gy();s_e();oO();p_e();await h_e();await A_e();await v_e();await b_e();await S_e();await x_e();await O_e();await P_e();await M_e();await $_e();await z_e();await U_e();await s5();G_e();Nj=me(on(),1);W_e();ebe();KN();nbe();obe();sbe();u5();Ki=me(vr(),1),mlt=(0,Nj.parseChangelog)(V_e,5),hlt=26,glt=22,Alt=60,ylt=15,vlt=40});function $j(){return{stdinIsTTY:!!process.stdin.isTTY,stdoutIsTTY:!!process.stdout.isTTY}}function jj(t,e,n){if(t.stdinIsTTY&&t.stdoutIsTTY)return null;let r=t.stdinIsTTY?"stdout is not a TTY (output is piped or redirected)":"stdin is not a TTY (input is piped or redirected)";return{message:`sidekick ${e} needs an interactive terminal.
|
|
1119
1119
|
${r}
|
|
@@ -1244,7 +1244,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
1244
1244
|
depsCount: ${e},
|
|
1245
1245
|
deps: ${n}}`};var FCt={keyword:"dependencies",type:"object",schemaType:"object",error:Ch.error,code(t){let[e,n]=UCt(t);LTe(t,e),HTe(t,n)}};function UCt({schema:t}){let e={},n={};for(let r in t){if(r==="__proto__")continue;let o=Array.isArray(t[r])?e:n;o[r]=t[r]}return[e,n]}function LTe(t,e=t.schema){let{gen:n,data:r,it:o}=t;if(Object.keys(e).length===0)return;let i=n.let("missing");for(let s in e){let c=e[s];if(c.length===0)continue;let d=(0,Lk.propertyInData)(n,r,s,o.opts.ownProperties);t.setParams({property:s,depsCount:c.length,deps:c.join(", ")}),o.allErrors?n.if(d,()=>{for(let m of c)(0,Lk.checkReportMissingProp)(t,m)}):(n.if((0,FJ._)`${d} && (${(0,Lk.checkMissingProp)(t,c,i)})`),(0,Lk.reportMissingProp)(t,i),n.else())}}Ch.validatePropertyDeps=LTe;function HTe(t,e=t.schema){let{gen:n,data:r,keyword:o,it:i}=t,s=n.name("valid");for(let c in e)(0,zCt.alwaysValidSchema)(i,e[c])||(n.if((0,Lk.propertyInData)(n,r,c,i.opts.ownProperties),()=>{let d=t.subschema({keyword:o,schemaProp:c},s);t.mergeValidEvaluated(d,s)},()=>n.var(s,!0)),t.ok(s))}Ch.validateSchemaDeps=HTe;Ch.default=FCt});var GTe=Q(UJ=>{"use strict";Object.defineProperty(UJ,"__esModule",{value:!0});var ZTe=Vn(),LCt=kr(),HCt={message:"property name must be valid",params:({params:t})=>(0,ZTe._)`{propertyName: ${t.propertyName}}`},qCt={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:HCt,code(t){let{gen:e,schema:n,data:r,it:o}=t;if((0,LCt.alwaysValidSchema)(o,n))return;let i=e.name("valid");e.forIn("key",r,s=>{t.setParams({propertyName:s}),t.subschema({keyword:"propertyNames",data:s,dataTypes:["string"],propertyName:s,compositeRule:!0},i),e.if((0,ZTe.not)(i),()=>{t.error(!0),o.allErrors||e.break()})}),t.ok(i)}};UJ.default=qCt});var HJ=Q(LJ=>{"use strict";Object.defineProperty(LJ,"__esModule",{value:!0});var pF=Vd(),cp=Vn(),ZCt=fA(),mF=kr(),GCt={message:"must NOT have additional properties",params:({params:t})=>(0,cp._)`{additionalProperty: ${t.additionalProperty}}`},VCt={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:GCt,code(t){let{gen:e,schema:n,parentSchema:r,data:o,errsCount:i,it:s}=t;if(!i)throw new Error("ajv implementation error");let{allErrors:c,opts:d}=s;if(s.props=!0,d.removeAdditional!=="all"&&(0,mF.alwaysValidSchema)(s,n))return;let m=(0,pF.allSchemaProperties)(r.properties),h=(0,pF.allSchemaProperties)(r.patternProperties);y(),t.ok((0,cp._)`${i} === ${ZCt.default.errors}`);function y(){e.forIn("key",o,D=>{!m.length&&!h.length?I(D):e.if(v(D),()=>I(D))})}function v(D){let O;if(m.length>8){let P=(0,mF.schemaRefOrVal)(s,r.properties,"properties");O=(0,pF.isOwnProperty)(e,P,D)}else m.length?O=(0,cp.or)(...m.map(P=>(0,cp._)`${D} === ${P}`)):O=cp.nil;return h.length&&(O=(0,cp.or)(O,...h.map(P=>(0,cp._)`${(0,pF.usePattern)(t,P)}.test(${D})`))),(0,cp.not)(O)}function _(D){e.code((0,cp._)`delete ${o}[${D}]`)}function I(D){if(d.removeAdditional==="all"||d.removeAdditional&&n===!1){_(D);return}if(n===!1){t.setParams({additionalProperty:D}),t.error(),c||e.break();return}if(typeof n=="object"&&!(0,mF.alwaysValidSchema)(s,n)){let O=e.name("valid");d.removeAdditional==="failing"?(w(D,O,!1),e.if((0,cp.not)(O),()=>{t.reset(),_(D)})):(w(D,O),c||e.if((0,cp.not)(O),()=>e.break()))}}function w(D,O,P){let R={keyword:"additionalProperties",dataProp:D,dataPropType:mF.Type.Str};P===!1&&Object.assign(R,{compositeRule:!0,createErrors:!1,allErrors:!1}),t.subschema(R,O)}}};LJ.default=VCt});var YTe=Q(ZJ=>{"use strict";Object.defineProperty(ZJ,"__esModule",{value:!0});var KCt=Bk(),VTe=Vd(),qJ=kr(),KTe=HJ(),YCt={keyword:"properties",type:"object",schemaType:"object",code(t){let{gen:e,schema:n,parentSchema:r,data:o,it:i}=t;i.opts.removeAdditional==="all"&&r.additionalProperties===void 0&&KTe.default.code(new KCt.KeywordCxt(i,KTe.default,"additionalProperties"));let s=(0,VTe.allSchemaProperties)(n);for(let y of s)i.definedProperties.add(y);i.opts.unevaluated&&s.length&&i.props!==!0&&(i.props=qJ.mergeEvaluated.props(e,(0,qJ.toHash)(s),i.props));let c=s.filter(y=>!(0,qJ.alwaysValidSchema)(i,n[y]));if(c.length===0)return;let d=e.name("valid");for(let y of c)m(y)?h(y):(e.if((0,VTe.propertyInData)(e,o,y,i.opts.ownProperties)),h(y),i.allErrors||e.else().var(d,!0),e.endIf()),t.it.definedProperties.add(y),t.ok(d);function m(y){return i.opts.useDefaults&&!i.compositeRule&&n[y].default!==void 0}function h(y){t.subschema({keyword:"properties",schemaProp:y,dataProp:y},d)}}};ZJ.default=YCt});var exe=Q(GJ=>{"use strict";Object.defineProperty(GJ,"__esModule",{value:!0});var JTe=Vd(),hF=Vn(),WTe=kr(),XTe=kr(),JCt={keyword:"patternProperties",type:"object",schemaType:"object",code(t){let{gen:e,schema:n,data:r,parentSchema:o,it:i}=t,{opts:s}=i,c=(0,JTe.allSchemaProperties)(n),d=c.filter(w=>(0,WTe.alwaysValidSchema)(i,n[w]));if(c.length===0||d.length===c.length&&(!i.opts.unevaluated||i.props===!0))return;let m=s.strictSchema&&!s.allowMatchingProperties&&o.properties,h=e.name("valid");i.props!==!0&&!(i.props instanceof hF.Name)&&(i.props=(0,XTe.evaluatedPropsToName)(e,i.props));let{props:y}=i;v();function v(){for(let w of c)m&&_(w),i.allErrors?I(w):(e.var(h,!0),I(w),e.if(h))}function _(w){for(let D in m)new RegExp(w).test(D)&&(0,WTe.checkStrictMode)(i,`property ${D} matches pattern ${w} (use allowMatchingProperties)`)}function I(w){e.forIn("key",r,D=>{e.if((0,hF._)`${(0,JTe.usePattern)(t,w)}.test(${D})`,()=>{let O=d.includes(w);O||t.subschema({keyword:"patternProperties",schemaProp:w,dataProp:D,dataPropType:XTe.Type.Str},h),i.opts.unevaluated&&y!==!0?e.assign((0,hF._)`${y}[${D}]`,!0):!O&&!i.allErrors&&e.if((0,hF.not)(h),()=>e.break())})})}}};GJ.default=JCt});var txe=Q(VJ=>{"use strict";Object.defineProperty(VJ,"__esModule",{value:!0});var WCt=kr(),XCt={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(t){let{gen:e,schema:n,it:r}=t;if((0,WCt.alwaysValidSchema)(r,n)){t.fail();return}let o=e.name("valid");t.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},o),t.failResult(o,()=>t.reset(),()=>t.error())},error:{message:"must NOT be valid"}};VJ.default=XCt});var nxe=Q(KJ=>{"use strict";Object.defineProperty(KJ,"__esModule",{value:!0});var eIt=Vd(),tIt={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:eIt.validateUnion,error:{message:"must match a schema in anyOf"}};KJ.default=tIt});var rxe=Q(YJ=>{"use strict";Object.defineProperty(YJ,"__esModule",{value:!0});var gF=Vn(),nIt=kr(),rIt={message:"must match exactly one schema in oneOf",params:({params:t})=>(0,gF._)`{passingSchemas: ${t.passing}}`},oIt={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:rIt,code(t){let{gen:e,schema:n,parentSchema:r,it:o}=t;if(!Array.isArray(n))throw new Error("ajv implementation error");if(o.opts.discriminator&&r.discriminator)return;let i=n,s=e.let("valid",!1),c=e.let("passing",null),d=e.name("_valid");t.setParams({passing:c}),e.block(m),t.result(s,()=>t.reset(),()=>t.error(!0));function m(){i.forEach((h,y)=>{let v;(0,nIt.alwaysValidSchema)(o,h)?e.var(d,!0):v=t.subschema({keyword:"oneOf",schemaProp:y,compositeRule:!0},d),y>0&&e.if((0,gF._)`${d} && ${s}`).assign(s,!1).assign(c,(0,gF._)`[${c}, ${y}]`).else(),e.if(d,()=>{e.assign(s,!0),e.assign(c,y),v&&t.mergeEvaluated(v,gF.Name)})})}}};YJ.default=oIt});var oxe=Q(JJ=>{"use strict";Object.defineProperty(JJ,"__esModule",{value:!0});var iIt=kr(),sIt={keyword:"allOf",schemaType:"array",code(t){let{gen:e,schema:n,it:r}=t;if(!Array.isArray(n))throw new Error("ajv implementation error");let o=e.name("valid");n.forEach((i,s)=>{if((0,iIt.alwaysValidSchema)(r,i))return;let c=t.subschema({keyword:"allOf",schemaProp:s},o);t.ok(o),t.mergeEvaluated(c)})}};JJ.default=sIt});var axe=Q(WJ=>{"use strict";Object.defineProperty(WJ,"__esModule",{value:!0});var AF=Vn(),sxe=kr(),aIt={message:({params:t})=>(0,AF.str)`must match "${t.ifClause}" schema`,params:({params:t})=>(0,AF._)`{failingKeyword: ${t.ifClause}}`},uIt={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:aIt,code(t){let{gen:e,parentSchema:n,it:r}=t;n.then===void 0&&n.else===void 0&&(0,sxe.checkStrictMode)(r,'"if" without "then" and "else" is ignored');let o=ixe(r,"then"),i=ixe(r,"else");if(!o&&!i)return;let s=e.let("valid",!0),c=e.name("_valid");if(d(),t.reset(),o&&i){let h=e.let("ifClause");t.setParams({ifClause:h}),e.if(c,m("then",h),m("else",h))}else o?e.if(c,m("then")):e.if((0,AF.not)(c),m("else"));t.pass(s,()=>t.error(!0));function d(){let h=t.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},c);t.mergeEvaluated(h)}function m(h,y){return()=>{let v=t.subschema({keyword:h},c);e.assign(s,c),t.mergeValidEvaluated(v,s),y?e.assign(y,(0,AF._)`${h}`):t.setParams({ifClause:h})}}}};function ixe(t,e){let n=t.schema[e];return n!==void 0&&!(0,sxe.alwaysValidSchema)(t,n)}WJ.default=uIt});var uxe=Q(XJ=>{"use strict";Object.defineProperty(XJ,"__esModule",{value:!0});var cIt=kr(),lIt={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:t,parentSchema:e,it:n}){e.if===void 0&&(0,cIt.checkStrictMode)(n,`"${t}" without "if" is ignored`)}};XJ.default=lIt});var cxe=Q(eW=>{"use strict";Object.defineProperty(eW,"__esModule",{value:!0});var dIt=QJ(),fIt=jTe(),pIt=NJ(),mIt=FTe(),hIt=UTe(),gIt=qTe(),AIt=GTe(),yIt=HJ(),vIt=YTe(),_It=exe(),bIt=txe(),SIt=nxe(),EIt=rxe(),CIt=oxe(),IIt=axe(),wIt=uxe();function DIt(t=!1){let e=[bIt.default,SIt.default,EIt.default,CIt.default,IIt.default,wIt.default,AIt.default,yIt.default,gIt.default,vIt.default,_It.default];return t?e.push(fIt.default,mIt.default):e.push(dIt.default,pIt.default),e.push(hIt.default),e}eW.default=DIt});var lxe=Q(tW=>{"use strict";Object.defineProperty(tW,"__esModule",{value:!0});var gs=Vn(),TIt={message:({schemaCode:t})=>(0,gs.str)`must match format "${t}"`,params:({schemaCode:t})=>(0,gs._)`{format: ${t}}`},xIt={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:TIt,code(t,e){let{gen:n,data:r,$data:o,schema:i,schemaCode:s,it:c}=t,{opts:d,errSchemaPath:m,schemaEnv:h,self:y}=c;if(!d.validateFormats)return;o?v():_();function v(){let I=n.scopeValue("formats",{ref:y.formats,code:d.code.formats}),w=n.const("fDef",(0,gs._)`${I}[${s}]`),D=n.let("fType"),O=n.let("format");n.if((0,gs._)`typeof ${w} == "object" && !(${w} instanceof RegExp)`,()=>n.assign(D,(0,gs._)`${w}.type || "string"`).assign(O,(0,gs._)`${w}.validate`),()=>n.assign(D,(0,gs._)`"string"`).assign(O,w)),t.fail$data((0,gs.or)(P(),R()));function P(){return d.strictSchema===!1?gs.nil:(0,gs._)`${s} && !${O}`}function R(){let L=h.$async?(0,gs._)`(${w}.async ? await ${O}(${r}) : ${O}(${r}))`:(0,gs._)`${O}(${r})`,H=(0,gs._)`(typeof ${O} == "function" ? ${L} : ${O}.test(${r}))`;return(0,gs._)`${O} && ${O} !== true && ${D} === ${e} && !${H}`}}function _(){let I=y.formats[i];if(!I){P();return}if(I===!0)return;let[w,D,O]=R(I);w===e&&t.pass(L());function P(){if(d.strictSchema===!1){y.logger.warn(H());return}throw new Error(H());function H(){return`unknown format "${i}" ignored in schema at path "${m}"`}}function R(H){let he=H instanceof RegExp?(0,gs.regexpCode)(H):d.code.formats?(0,gs._)`${d.code.formats}${(0,gs.getProperty)(i)}`:void 0,se=n.scopeValue("formats",{key:i,ref:H,code:he});return typeof H=="object"&&!(H instanceof RegExp)?[H.type||"string",H.validate,(0,gs._)`${se}.validate`]:["string",H,se]}function L(){if(typeof I=="object"&&!(I instanceof RegExp)&&I.async){if(!h.$async)throw new Error("async format in sync schema");return(0,gs._)`await ${O}(${r})`}return typeof D=="function"?(0,gs._)`${O}(${r})`:(0,gs._)`${O}.test(${r})`}}}};tW.default=xIt});var dxe=Q(nW=>{"use strict";Object.defineProperty(nW,"__esModule",{value:!0});var BIt=lxe(),OIt=[BIt.default];nW.default=OIt});var fxe=Q(Ow=>{"use strict";Object.defineProperty(Ow,"__esModule",{value:!0});Ow.contentVocabulary=Ow.metadataVocabulary=void 0;Ow.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];Ow.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]});var mxe=Q(rW=>{"use strict";Object.defineProperty(rW,"__esModule",{value:!0});var kIt=bTe(),PIt=MTe(),RIt=cxe(),MIt=dxe(),pxe=fxe(),QIt=[kIt.default,PIt.default,(0,RIt.default)(),MIt.default,pxe.metadataVocabulary,pxe.contentVocabulary];rW.default=QIt});var gxe=Q(yF=>{"use strict";Object.defineProperty(yF,"__esModule",{value:!0});yF.DiscrError=void 0;var hxe;(function(t){t.Tag="tag",t.Mapping="mapping"})(hxe||(yF.DiscrError=hxe={}))});var yxe=Q(iW=>{"use strict";Object.defineProperty(iW,"__esModule",{value:!0});var kw=Vn(),oW=gxe(),Axe=oF(),NIt=Ok(),$It=kr(),jIt={message:({params:{discrError:t,tagName:e}})=>t===oW.DiscrError.Tag?`tag "${e}" must be string`:`value of tag "${e}" must be in oneOf`,params:({params:{discrError:t,tag:e,tagName:n}})=>(0,kw._)`{error: ${t}, tag: ${n}, tagValue: ${e}}`},zIt={keyword:"discriminator",type:"object",schemaType:"object",error:jIt,code(t){let{gen:e,data:n,schema:r,parentSchema:o,it:i}=t,{oneOf:s}=o;if(!i.opts.discriminator)throw new Error("discriminator: requires discriminator option");let c=r.propertyName;if(typeof c!="string")throw new Error("discriminator: requires propertyName");if(r.mapping)throw new Error("discriminator: mapping is not supported");if(!s)throw new Error("discriminator: requires oneOf keyword");let d=e.let("valid",!1),m=e.const("tag",(0,kw._)`${n}${(0,kw.getProperty)(c)}`);e.if((0,kw._)`typeof ${m} == "string"`,()=>h(),()=>t.error(!1,{discrError:oW.DiscrError.Tag,tag:m,tagName:c})),t.ok(d);function h(){let _=v();e.if(!1);for(let I in _)e.elseIf((0,kw._)`${m} === ${I}`),e.assign(d,y(_[I]));e.else(),t.error(!1,{discrError:oW.DiscrError.Mapping,tag:m,tagName:c}),e.endIf()}function y(_){let I=e.name("valid"),w=t.subschema({keyword:"oneOf",schemaProp:_},I);return t.mergeEvaluated(w,kw.Name),I}function v(){var _;let I={},w=O(o),D=!0;for(let L=0;L<s.length;L++){let H=s[L];if(H?.$ref&&!(0,$It.schemaHasRulesButRef)(H,i.self.RULES)){let se=H.$ref;if(H=Axe.resolveRef.call(i.self,i.schemaEnv.root,i.baseId,se),H instanceof Axe.SchemaEnv&&(H=H.schema),H===void 0)throw new NIt.default(i.opts.uriResolver,i.baseId,se)}let he=(_=H?.properties)===null||_===void 0?void 0:_[c];if(typeof he!="object")throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${c}"`);D=D&&(w||O(H)),P(he,L)}if(!D)throw new Error(`discriminator: "${c}" must be required`);return I;function O({required:L}){return Array.isArray(L)&&L.includes(c)}function P(L,H){if(L.const)R(L.const,H);else if(L.enum)for(let he of L.enum)R(he,H);else throw new Error(`discriminator: "properties/${c}" must have "const" or "enum"`)}function R(L,H){if(typeof L!="string"||L in I)throw new Error(`discriminator: "${c}" values must be unique strings`);I[L]=H}}}};iW.default=zIt});var vxe=Q((mqt,FIt)=>{FIt.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}});var bxe=Q((Ko,sW)=>{"use strict";Object.defineProperty(Ko,"__esModule",{value:!0});Ko.MissingRefError=Ko.ValidationError=Ko.CodeGen=Ko.Name=Ko.nil=Ko.stringify=Ko.str=Ko._=Ko.KeywordCxt=Ko.Ajv=void 0;var UIt=hTe(),LIt=mxe(),HIt=yxe(),_xe=vxe(),qIt=["/properties"],vF="http://json-schema.org/draft-07/schema",Pw=class extends UIt.default{_addVocabularies(){super._addVocabularies(),LIt.default.forEach(e=>this.addVocabulary(e)),this.opts.discriminator&&this.addKeyword(HIt.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let e=this.opts.$data?this.$dataMetaSchema(_xe,qIt):_xe;this.addMetaSchema(e,vF,!1),this.refs["http://json-schema.org/schema"]=vF}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(vF)?vF:void 0)}};Ko.Ajv=Pw;sW.exports=Ko=Pw;sW.exports.Ajv=Pw;Object.defineProperty(Ko,"__esModule",{value:!0});Ko.default=Pw;var ZIt=Bk();Object.defineProperty(Ko,"KeywordCxt",{enumerable:!0,get:function(){return ZIt.KeywordCxt}});var Rw=Vn();Object.defineProperty(Ko,"_",{enumerable:!0,get:function(){return Rw._}});Object.defineProperty(Ko,"str",{enumerable:!0,get:function(){return Rw.str}});Object.defineProperty(Ko,"stringify",{enumerable:!0,get:function(){return Rw.stringify}});Object.defineProperty(Ko,"nil",{enumerable:!0,get:function(){return Rw.nil}});Object.defineProperty(Ko,"Name",{enumerable:!0,get:function(){return Rw.Name}});Object.defineProperty(Ko,"CodeGen",{enumerable:!0,get:function(){return Rw.CodeGen}});var GIt=nF();Object.defineProperty(Ko,"ValidationError",{enumerable:!0,get:function(){return GIt.default}});var VIt=Ok();Object.defineProperty(Ko,"MissingRefError",{enumerable:!0,get:function(){return VIt.default}})});var Sxe=Q(Mw=>{"use strict";Object.defineProperty(Mw,"__esModule",{value:!0});Mw.formatLimitDefinition=void 0;var KIt=bxe(),lp=Vn(),Sv=lp.operators,_F={formatMaximum:{okStr:"<=",ok:Sv.LTE,fail:Sv.GT},formatMinimum:{okStr:">=",ok:Sv.GTE,fail:Sv.LT},formatExclusiveMaximum:{okStr:"<",ok:Sv.LT,fail:Sv.GTE},formatExclusiveMinimum:{okStr:">",ok:Sv.GT,fail:Sv.LTE}},YIt={message:({keyword:t,schemaCode:e})=>(0,lp.str)`should be ${_F[t].okStr} ${e}`,params:({keyword:t,schemaCode:e})=>(0,lp._)`{comparison: ${_F[t].okStr}, limit: ${e}}`};Mw.formatLimitDefinition={keyword:Object.keys(_F),type:"string",schemaType:"string",$data:!0,error:YIt,code(t){let{gen:e,data:n,schemaCode:r,keyword:o,it:i}=t,{opts:s,self:c}=i;if(!s.validateFormats)return;let d=new KIt.KeywordCxt(i,c.RULES.all.format.definition,"format");d.$data?m():h();function m(){let v=e.scopeValue("formats",{ref:c.formats,code:s.code.formats}),_=e.const("fmt",(0,lp._)`${v}[${d.schemaCode}]`);t.fail$data((0,lp.or)((0,lp._)`typeof ${_} != "object"`,(0,lp._)`${_} instanceof RegExp`,(0,lp._)`typeof ${_}.compare != "function"`,y(_)))}function h(){let v=d.schema,_=c.formats[v];if(!_||_===!0)return;if(typeof _!="object"||_ instanceof RegExp||typeof _.compare!="function")throw new Error(`"${o}": format "${v}" does not define "compare" function`);let I=e.scopeValue("formats",{key:v,ref:_,code:s.code.formats?(0,lp._)`${s.code.formats}${(0,lp.getProperty)(v)}`:void 0});t.fail$data(y(I))}function y(v){return(0,lp._)`${v}.compare(${n}, ${r}) ${_F[o].fail} 0`}},dependencies:["format"]};var JIt=t=>(t.addKeyword(Mw.formatLimitDefinition),t);Mw.default=JIt});var wxe=Q((Hk,Ixe)=>{"use strict";Object.defineProperty(Hk,"__esModule",{value:!0});var Qw=aDe(),WIt=Sxe(),aW=Vn(),Exe=new aW.Name("fullFormats"),XIt=new aW.Name("fastFormats"),uW=(t,e={keywords:!0})=>{if(Array.isArray(e))return Cxe(t,e,Qw.fullFormats,Exe),t;let[n,r]=e.mode==="fast"?[Qw.fastFormats,XIt]:[Qw.fullFormats,Exe],o=e.formats||Qw.formatNames;return Cxe(t,o,n,r),e.keywords&&(0,WIt.default)(t),t};uW.get=(t,e="full")=>{let r=(e==="fast"?Qw.fastFormats:Qw.fullFormats)[t];if(!r)throw new Error(`Unknown format "${t}"`);return r};function Cxe(t,e,n,r){var o,i;(o=(i=t.opts.code).formats)!==null&&o!==void 0||(i.formats=(0,aW._)`require("ajv-formats/dist/formats").${r}`);for(let s of e)t.addFormat(s,n[s])}Ixe.exports=Hk=uW;Object.defineProperty(Hk,"__esModule",{value:!0});Hk.default=uW});function ewt(){let t=new Dxe.default({strict:!1,validateFormats:!0,validateSchema:!1,allErrors:!0});return(0,Txe.default)(t),t}var Dxe,Txe,bF,xxe=F(()=>{Dxe=me(Xwe(),1),Txe=me(wxe(),1);bF=class{constructor(e){this._ajv=e??ewt()}getValidator(e){let n="$id"in e&&typeof e.$id=="string"?this._ajv.getSchema(e.$id)??this._ajv.compile(e):this._ajv.compile(e);return r=>n(r)?{valid:!0,data:r,errorMessage:void 0}:{valid:!1,data:void 0,errorMessage:this._ajv.errorsText(n.errors)}}}});var SF,Bxe=F(()=>{rw();SF=class{constructor(e){this._server=e}requestStream(e,n,r){return this._server.requestStream(e,n,r)}createMessageStream(e,n){let r=this._server.getClientCapabilities();if((e.tools||e.toolChoice)&&!r?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(e.messages.length>0){let o=e.messages[e.messages.length-1],i=Array.isArray(o.content)?o.content:[o.content],s=i.some(h=>h.type==="tool_result"),c=e.messages.length>1?e.messages[e.messages.length-2]:void 0,d=c?Array.isArray(c.content)?c.content:[c.content]:[],m=d.some(h=>h.type==="tool_use");if(s){if(i.some(h=>h.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!m)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(m){let h=new Set(d.filter(v=>v.type==="tool_use").map(v=>v.id)),y=new Set(i.filter(v=>v.type==="tool_result").map(v=>v.toolUseId));if(h.size!==y.size||![...h].every(v=>y.has(v)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return this.requestStream({method:"sampling/createMessage",params:e},zO,n)}elicitInputStream(e,n){let r=this._server.getClientCapabilities(),o=e.mode??"form";switch(o){case"url":{if(!r?.elicitation?.url)throw new Error("Client does not support url elicitation.");break}case"form":{if(!r?.elicitation?.form)throw new Error("Client does not support form elicitation.");break}}let i=o==="form"&&e.mode===void 0?{...e,mode:"form"}:e;return this.requestStream({method:"elicitation/create",params:i},nw,n)}async getTask(e,n){return this._server.getTask({taskId:e},n)}async getTaskResult(e,n,r){return this._server.getTaskResult({taskId:e},n,r)}async listTasks(e,n){return this._server.listTasks(e?{cursor:e}:void 0,n)}async cancelTask(e,n){return this._server.cancelTask({taskId:e},n)}}});function Oxe(t,e,n){if(!t)throw new Error(`${n} does not support task creation (required for ${e})`);switch(e){case"tools/call":if(!t.tools?.call)throw new Error(`${n} does not support task creation for tools/call (required for ${e})`);break;default:break}}function kxe(t,e,n){if(!t)throw new Error(`${n} does not support task creation (required for ${e})`);switch(e){case"sampling/createMessage":if(!t.sampling?.createMessage)throw new Error(`${n} does not support task creation for sampling/createMessage (required for ${e})`);break;case"elicitation/create":if(!t.elicitation?.create)throw new Error(`${n} does not support task creation for elicitation/create (required for ${e})`);break;default:break}}var Pxe=F(()=>{});var EF,Rxe=F(()=>{SCe();rw();xxe();TO();Bxe();Pxe();EF=class extends l2{constructor(e,n){super(n),this._serverInfo=e,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(jO.options.map((r,o)=>[r,o])),this.isMessageIgnored=(r,o)=>{let i=this._loggingLevels.get(o);return i?this.LOG_LEVEL_SEVERITY.get(r)<this.LOG_LEVEL_SEVERITY.get(i):!1},this._capabilities=n?.capabilities??{},this._instructions=n?.instructions,this._jsonSchemaValidator=n?.jsonSchemaValidator??new bF,this.setRequestHandler(qV,r=>this._oninitialize(r)),this.setNotificationHandler(ZV,()=>this.oninitialized?.()),this._capabilities.logging&&this.setRequestHandler(XV,async(r,o)=>{let i=o.sessionId||o.requestInfo?.headers["mcp-session-id"]||void 0,{level:s}=r.params,c=jO.safeParse(s);return c.success&&this._loggingLevels.set(i,c.data),{}})}get experimental(){return this._experimental||(this._experimental={tasks:new SF(this)}),this._experimental}registerCapabilities(e){if(this.transport)throw new Error("Cannot register capabilities after connecting to transport");this._capabilities=bCe(this._capabilities,e)}setRequestHandler(e,n){let o=ov(e)?.method;if(!o)throw new Error("Schema is missing a method literal");let i;if(jd(o)){let c=o;i=c._zod?.def?.value??c.value}else{let c=o;i=c._def?.value??c.value}if(typeof i!="string")throw new Error("Schema method literal must be a string");if(i==="tools/call"){let c=async(d,m)=>{let h=rv(tw,d);if(!h.success){let I=h.error instanceof Error?h.error.message:String(h.error);throw new Ot(Zt.InvalidParams,`Invalid tools/call request: ${I}`)}let{params:y}=h.data,v=await Promise.resolve(n(d,m));if(y.task){let I=rv(XI,v);if(!I.success){let w=I.error instanceof Error?I.error.message:String(I.error);throw new Ot(Zt.InvalidParams,`Invalid task creation result: ${w}`)}return I.data}let _=rv(Wz,v);if(!_.success){let I=_.error instanceof Error?_.error.message:String(_.error);throw new Ot(Zt.InvalidParams,`Invalid tools/call result: ${I}`)}return _.data};return super.setRequestHandler(e,c)}return super.setRequestHandler(e,n)}assertCapabilityForMethod(e){switch(e){case"sampling/createMessage":if(!this._clientCapabilities?.sampling)throw new Error(`Client does not support sampling (required for ${e})`);break;case"elicitation/create":if(!this._clientCapabilities?.elicitation)throw new Error(`Client does not support elicitation (required for ${e})`);break;case"roots/list":if(!this._clientCapabilities?.roots)throw new Error(`Client does not support listing roots (required for ${e})`);break;case"ping":break}}assertNotificationCapability(e){switch(e){case"notifications/message":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${e})`);break;case"notifications/resources/updated":case"notifications/resources/list_changed":if(!this._capabilities.resources)throw new Error(`Server does not support notifying about resources (required for ${e})`);break;case"notifications/tools/list_changed":if(!this._capabilities.tools)throw new Error(`Server does not support notifying of tool list changes (required for ${e})`);break;case"notifications/prompts/list_changed":if(!this._capabilities.prompts)throw new Error(`Server does not support notifying of prompt list changes (required for ${e})`);break;case"notifications/elicitation/complete":if(!this._clientCapabilities?.elicitation?.url)throw new Error(`Client does not support URL elicitation (required for ${e})`);break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(e){if(this._capabilities)switch(e){case"completion/complete":if(!this._capabilities.completions)throw new Error(`Server does not support completions (required for ${e})`);break;case"logging/setLevel":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${e})`);break;case"prompts/get":case"prompts/list":if(!this._capabilities.prompts)throw new Error(`Server does not support prompts (required for ${e})`);break;case"resources/list":case"resources/templates/list":case"resources/read":if(!this._capabilities.resources)throw new Error(`Server does not support resources (required for ${e})`);break;case"tools/call":case"tools/list":if(!this._capabilities.tools)throw new Error(`Server does not support tools (required for ${e})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw new Error(`Server does not support tasks capability (required for ${e})`);break;case"ping":case"initialize":break}}assertTaskCapability(e){kxe(this._clientCapabilities?.tasks?.requests,e,"Client")}assertTaskHandlerCapability(e){this._capabilities&&Oxe(this._capabilities.tasks?.requests,e,"Server")}async _oninitialize(e){let n=e.params.protocolVersion;return this._clientCapabilities=e.params.capabilities,this._clientVersion=e.params.clientInfo,{protocolVersion:bEe.includes(n)?n:zV,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:"ping"},Qz)}async createMessage(e,n){if((e.tools||e.toolChoice)&&!this._clientCapabilities?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(e.messages.length>0){let r=e.messages[e.messages.length-1],o=Array.isArray(r.content)?r.content:[r.content],i=o.some(m=>m.type==="tool_result"),s=e.messages.length>1?e.messages[e.messages.length-2]:void 0,c=s?Array.isArray(s.content)?s.content:[s.content]:[],d=c.some(m=>m.type==="tool_use");if(i){if(o.some(m=>m.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!d)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(d){let m=new Set(c.filter(y=>y.type==="tool_use").map(y=>y.id)),h=new Set(o.filter(y=>y.type==="tool_result").map(y=>y.toolUseId));if(m.size!==h.size||![...m].every(y=>h.has(y)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return e.tools?this.request({method:"sampling/createMessage",params:e},eK,n):this.request({method:"sampling/createMessage",params:e},zO,n)}async elicitInput(e,n){switch(e.mode??"form"){case"url":{if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support url elicitation.");let o=e;return this.request({method:"elicitation/create",params:o},nw,n)}case"form":{if(!this._clientCapabilities?.elicitation?.form)throw new Error("Client does not support form elicitation.");let o=e.mode==="form"?e:{...e,mode:"form"},i=await this.request({method:"elicitation/create",params:o},nw,n);if(i.action==="accept"&&i.content&&o.requestedSchema)try{let c=this._jsonSchemaValidator.getValidator(o.requestedSchema)(i.content);if(!c.valid)throw new Ot(Zt.InvalidParams,`Elicitation response content does not match requested schema: ${c.errorMessage}`)}catch(s){throw s instanceof Ot?s:new Ot(Zt.InternalError,`Error validating elicitation response: ${s instanceof Error?s.message:String(s)}`)}return i}}}createElicitationCompletionNotifier(e,n){if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support URL elicitation (required for notifications/elicitation/complete)");return()=>this.notification({method:"notifications/elicitation/complete",params:{elicitationId:e}},n)}async listRoots(e,n){return this.request({method:"roots/list",params:e},tK,n)}async sendLoggingMessage(e,n){if(this._capabilities.logging&&!this.isMessageIgnored(e.level,n))return this.notification({method:"notifications/message",params:e})}async sendResourceUpdated(e){return this.notification({method:"notifications/resources/updated",params:e})}async sendResourceListChanged(){return this.notification({method:"notifications/resources/list_changed"})}async sendToolListChanged(){return this.notification({method:"notifications/tools/list_changed"})}async sendPromptListChanged(){return this.notification({method:"notifications/prompts/list_changed"})}}});function cW(t){return!!t&&typeof t=="object"&&Qxe in t}function Nxe(t){return t[Qxe]?.complete}var Qxe,Mxe,$xe=F(()=>{Qxe=Symbol.for("mcp.completable");(function(t){t.Completable="McpCompletable"})(Mxe||(Mxe={}))});var jxe=F(()=>{});function nwt(t){let e=[];if(t.length===0)return{isValid:!1,warnings:["Tool name cannot be empty"]};if(t.length>128)return{isValid:!1,warnings:[`Tool name exceeds maximum length of 128 characters (current: ${t.length})`]};if(t.includes(" ")&&e.push("Tool name contains spaces, which may cause parsing issues"),t.includes(",")&&e.push("Tool name contains commas, which may cause parsing issues"),(t.startsWith("-")||t.endsWith("-"))&&e.push("Tool name starts or ends with a dash, which may cause parsing issues in some contexts"),(t.startsWith(".")||t.endsWith("."))&&e.push("Tool name starts or ends with a dot, which may cause parsing issues in some contexts"),!twt.test(t)){let n=t.split("").filter(r=>!/[A-Za-z0-9._-]/.test(r)).filter((r,o,i)=>i.indexOf(r)===o);return e.push(`Tool name contains invalid characters: ${n.map(r=>`"${r}"`).join(", ")}`,"Allowed characters are: A-Z, a-z, 0-9, underscore (_), dash (-), and dot (.)"),{isValid:!1,warnings:e}}return{isValid:!0,warnings:e}}function rwt(t,e){if(e.length>0){console.warn(`Tool name validation warning for "${t}":`);for(let n of e)console.warn(` - ${n}`);console.warn("Tool registration will proceed, but this may cause compatibility issues."),console.warn("Consider updating the tool name to conform to the MCP tool naming standard."),console.warn("See SEP: Specify Format for Tool Names (https://github.com/modelcontextprotocol/modelcontextprotocol/issues/986) for more details.")}}function lW(t){let e=nwt(t);return rwt(t,e.warnings),e.isValid}var twt,zxe=F(()=>{twt=/^[A-Za-z0-9._-]{1,128}$/});var CF,Fxe=F(()=>{CF=class{constructor(e){this._mcpServer=e}registerToolTask(e,n,r){let o={taskSupport:"required",...n.execution};if(o.taskSupport==="forbidden")throw new Error(`Cannot register task-based tool '${e}' with taskSupport 'forbidden'. Use registerTool() instead.`);return this._mcpServer._createRegisteredTool(e,n.title,n.description,n.inputSchema,n.outputSchema,n.annotations,o,n._meta,r)}}});var dW=F(()=>{sz();sz()});function Hxe(t){return t!==null&&typeof t=="object"&&"parse"in t&&typeof t.parse=="function"&&"safeParse"in t&&typeof t.safeParse=="function"}function qxe(t){return"_def"in t||"_zod"in t||Hxe(t)}function fW(t){return typeof t!="object"||t===null||qxe(t)?!1:Object.keys(t).length===0?!0:Object.values(t).some(Hxe)}function Uxe(t){if(t){if(fW(t))return a0(t);if(!qxe(t))throw new Error("inputSchema must be a Zod schema or raw shape, received an unrecognized object");return t}}function iwt(t){let e=ov(t);return e?Object.entries(e).map(([n,r])=>{let o=ZSe(r),i=GSe(r);return{name:n,description:o,required:!i}}):[]}function Ev(t){let n=ov(t)?.method;if(!n)throw new Error("Schema is missing a method literal");let r=Bz(n);if(typeof r=="string")return r;throw new Error("Schema method literal must be a string")}function Lxe(t){return{completion:{values:t.slice(0,100),total:t.length,hasMore:t.length>100}}}var IF,owt,qk,Zxe=F(()=>{Rxe();TO();$K();rw();$xe();jxe();zxe();Fxe();dW();IF=class{constructor(e,n){this._registeredResources={},this._registeredResourceTemplates={},this._registeredTools={},this._registeredPrompts={},this._toolHandlersInitialized=!1,this._completionHandlerInitialized=!1,this._resourceHandlersInitialized=!1,this._promptHandlersInitialized=!1,this.server=new EF(e,n)}get experimental(){return this._experimental||(this._experimental={tasks:new CF(this)}),this._experimental}async connect(e){return await this.server.connect(e)}async close(){await this.server.close()}setToolRequestHandlers(){this._toolHandlersInitialized||(this.server.assertCanSetRequestHandler(Ev(Jz)),this.server.assertCanSetRequestHandler(Ev(tw)),this.server.registerCapabilities({tools:{listChanged:!0}}),this.server.setRequestHandler(Jz,()=>({tools:Object.entries(this._registeredTools).filter(([,e])=>e.enabled).map(([e,n])=>{let r={name:e,title:n.title,description:n.description,inputSchema:(()=>{let o=JI(n.inputSchema);return o?MK(o,{strictUnions:!0,pipeStrategy:"input"}):owt})(),annotations:n.annotations,execution:n.execution,_meta:n._meta};if(n.outputSchema){let o=JI(n.outputSchema);o&&(r.outputSchema=MK(o,{strictUnions:!0,pipeStrategy:"output"}))}return r})})),this.server.setRequestHandler(tw,async(e,n)=>{try{let r=this._registeredTools[e.params.name];if(!r)throw new Ot(Zt.InvalidParams,`Tool ${e.params.name} not found`);if(!r.enabled)throw new Ot(Zt.InvalidParams,`Tool ${e.params.name} disabled`);let o=!!e.params.task,i=r.execution?.taskSupport,s="createTask"in r.handler;if((i==="required"||i==="optional")&&!s)throw new Ot(Zt.InternalError,`Tool ${e.params.name} has taskSupport '${i}' but was not registered with registerToolTask`);if(i==="required"&&!o)throw new Ot(Zt.MethodNotFound,`Tool ${e.params.name} requires task augmentation (taskSupport: 'required')`);if(i==="optional"&&!o&&s)return await this.handleAutomaticTaskPolling(r,e,n);let c=await this.validateToolInput(r,e.params.arguments,e.params.name),d=await this.executeToolHandler(r,c,n);return o||await this.validateToolOutput(r,d,e.params.name),d}catch(r){if(r instanceof Ot&&r.code===Zt.UrlElicitationRequired)throw r;return this.createToolError(r instanceof Error?r.message:String(r))}}),this._toolHandlersInitialized=!0)}createToolError(e){return{content:[{type:"text",text:e}],isError:!0}}async validateToolInput(e,n,r){if(!e.inputSchema)return;let i=JI(e.inputSchema)??e.inputSchema,s=await Tz(i,n);if(!s.success){let c="error"in s?s.error:"Unknown error",d=xz(c);throw new Ot(Zt.InvalidParams,`Input validation error: Invalid arguments for tool ${r}: ${d}`)}return s.data}async validateToolOutput(e,n,r){if(!e.outputSchema||!("content"in n)||n.isError)return;if(!n.structuredContent)throw new Ot(Zt.InvalidParams,`Output validation error: Tool ${r} has an output schema but no structured content was provided`);let o=JI(e.outputSchema),i=await Tz(o,n.structuredContent);if(!i.success){let s="error"in i?i.error:"Unknown error",c=xz(s);throw new Ot(Zt.InvalidParams,`Output validation error: Invalid structured content for tool ${r}: ${c}`)}}async executeToolHandler(e,n,r){let o=e.handler;if("createTask"in o){if(!r.taskStore)throw new Error("No task store provided.");let s={...r,taskStore:r.taskStore};if(e.inputSchema){let c=o;return await Promise.resolve(c.createTask(n,s))}else{let c=o;return await Promise.resolve(c.createTask(s))}}if(e.inputSchema){let s=o;return await Promise.resolve(s(n,r))}else{let s=o;return await Promise.resolve(s(r))}}async handleAutomaticTaskPolling(e,n,r){if(!r.taskStore)throw new Error("No task store provided for task-capable tool.");let o=await this.validateToolInput(e,n.params.arguments,n.params.name),i=e.handler,s={...r,taskStore:r.taskStore},c=o?await Promise.resolve(i.createTask(o,s)):await Promise.resolve(i.createTask(s)),d=c.task.taskId,m=c.task,h=m.pollInterval??5e3;for(;m.status!=="completed"&&m.status!=="failed"&&m.status!=="cancelled";){await new Promise(v=>setTimeout(v,h));let y=await r.taskStore.getTask(d);if(!y)throw new Ot(Zt.InternalError,`Task ${d} not found during polling`);m=y}return await r.taskStore.getTaskResult(d)}setCompletionRequestHandler(){this._completionHandlerInitialized||(this.server.assertCanSetRequestHandler(Ev(Xz)),this.server.registerCapabilities({completions:{}}),this.server.setRequestHandler(Xz,async e=>{switch(e.params.ref.type){case"ref/prompt":return NEe(e),this.handlePromptCompletion(e,e.params.ref);case"ref/resource":return $Ee(e),this.handleResourceCompletion(e,e.params.ref);default:throw new Ot(Zt.InvalidParams,`Invalid completion reference: ${e.params.ref}`)}}),this._completionHandlerInitialized=!0)}async handlePromptCompletion(e,n){let r=this._registeredPrompts[n.name];if(!r)throw new Ot(Zt.InvalidParams,`Prompt ${n.name} not found`);if(!r.enabled)throw new Ot(Zt.InvalidParams,`Prompt ${n.name} disabled`);if(!r.argsSchema)return qk;let i=ov(r.argsSchema)?.[e.params.argument.name];if(!cW(i))return qk;let s=Nxe(i);if(!s)return qk;let c=await s(e.params.argument.value,e.params.context);return Lxe(c)}async handleResourceCompletion(e,n){let r=Object.values(this._registeredResourceTemplates).find(s=>s.resourceTemplate.uriTemplate.toString()===n.uri);if(!r){if(this._registeredResources[n.uri])return qk;throw new Ot(Zt.InvalidParams,`Resource template ${e.params.ref.uri} not found`)}let o=r.resourceTemplate.completeCallback(e.params.argument.name);if(!o)return qk;let i=await o(e.params.argument.value,e.params.context);return Lxe(i)}setResourceRequestHandlers(){this._resourceHandlersInitialized||(this.server.assertCanSetRequestHandler(Ev(Zz)),this.server.assertCanSetRequestHandler(Ev(Gz)),this.server.assertCanSetRequestHandler(Ev(Vz)),this.server.registerCapabilities({resources:{listChanged:!0}}),this.server.setRequestHandler(Zz,async(e,n)=>{let r=Object.entries(this._registeredResources).filter(([i,s])=>s.enabled).map(([i,s])=>({uri:i,name:s.name,...s.metadata})),o=[];for(let i of Object.values(this._registeredResourceTemplates)){if(!i.resourceTemplate.listCallback)continue;let s=await i.resourceTemplate.listCallback(n);for(let c of s.resources)o.push({...i.metadata,...c})}return{resources:[...r,...o]}}),this.server.setRequestHandler(Gz,async()=>({resourceTemplates:Object.entries(this._registeredResourceTemplates).map(([n,r])=>({name:n,uriTemplate:r.resourceTemplate.uriTemplate.toString(),...r.metadata}))})),this.server.setRequestHandler(Vz,async(e,n)=>{let r=new URL(e.params.uri),o=this._registeredResources[r.toString()];if(o){if(!o.enabled)throw new Ot(Zt.InvalidParams,`Resource ${r} disabled`);return o.readCallback(r,n)}for(let i of Object.values(this._registeredResourceTemplates)){let s=i.resourceTemplate.uriTemplate.match(r.toString());if(s)return i.readCallback(r,s,n)}throw new Ot(Zt.InvalidParams,`Resource ${r} not found`)}),this._resourceHandlersInitialized=!0)}setPromptRequestHandlers(){this._promptHandlersInitialized||(this.server.assertCanSetRequestHandler(Ev(Kz)),this.server.assertCanSetRequestHandler(Ev(Yz)),this.server.registerCapabilities({prompts:{listChanged:!0}}),this.server.setRequestHandler(Kz,()=>({prompts:Object.entries(this._registeredPrompts).filter(([,e])=>e.enabled).map(([e,n])=>({name:e,title:n.title,description:n.description,arguments:n.argsSchema?iwt(n.argsSchema):void 0}))})),this.server.setRequestHandler(Yz,async(e,n)=>{let r=this._registeredPrompts[e.params.name];if(!r)throw new Ot(Zt.InvalidParams,`Prompt ${e.params.name} not found`);if(!r.enabled)throw new Ot(Zt.InvalidParams,`Prompt ${e.params.name} disabled`);if(r.argsSchema){let o=JI(r.argsSchema),i=await Tz(o,e.params.arguments);if(!i.success){let d="error"in i?i.error:"Unknown error",m=xz(d);throw new Ot(Zt.InvalidParams,`Invalid arguments for prompt ${e.params.name}: ${m}`)}let s=i.data,c=r.callback;return await Promise.resolve(c(s,n))}else{let o=r.callback;return await Promise.resolve(o(n))}}),this._promptHandlersInitialized=!0)}resource(e,n,...r){let o;typeof r[0]=="object"&&(o=r.shift());let i=r[0];if(typeof n=="string"){if(this._registeredResources[n])throw new Error(`Resource ${n} is already registered`);let s=this._createRegisteredResource(e,void 0,n,o,i);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),s}else{if(this._registeredResourceTemplates[e])throw new Error(`Resource template ${e} is already registered`);let s=this._createRegisteredResourceTemplate(e,void 0,n,o,i);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),s}}registerResource(e,n,r,o){if(typeof n=="string"){if(this._registeredResources[n])throw new Error(`Resource ${n} is already registered`);let i=this._createRegisteredResource(e,r.title,n,r,o);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),i}else{if(this._registeredResourceTemplates[e])throw new Error(`Resource template ${e} is already registered`);let i=this._createRegisteredResourceTemplate(e,r.title,n,r,o);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),i}}_createRegisteredResource(e,n,r,o,i){let s={name:e,title:n,metadata:o,readCallback:i,enabled:!0,disable:()=>s.update({enabled:!1}),enable:()=>s.update({enabled:!0}),remove:()=>s.update({uri:null}),update:c=>{typeof c.uri<"u"&&c.uri!==r&&(delete this._registeredResources[r],c.uri&&(this._registeredResources[c.uri]=s)),typeof c.name<"u"&&(s.name=c.name),typeof c.title<"u"&&(s.title=c.title),typeof c.metadata<"u"&&(s.metadata=c.metadata),typeof c.callback<"u"&&(s.readCallback=c.callback),typeof c.enabled<"u"&&(s.enabled=c.enabled),this.sendResourceListChanged()}};return this._registeredResources[r]=s,s}_createRegisteredResourceTemplate(e,n,r,o,i){let s={resourceTemplate:r,title:n,metadata:o,readCallback:i,enabled:!0,disable:()=>s.update({enabled:!1}),enable:()=>s.update({enabled:!0}),remove:()=>s.update({name:null}),update:m=>{typeof m.name<"u"&&m.name!==e&&(delete this._registeredResourceTemplates[e],m.name&&(this._registeredResourceTemplates[m.name]=s)),typeof m.title<"u"&&(s.title=m.title),typeof m.template<"u"&&(s.resourceTemplate=m.template),typeof m.metadata<"u"&&(s.metadata=m.metadata),typeof m.callback<"u"&&(s.readCallback=m.callback),typeof m.enabled<"u"&&(s.enabled=m.enabled),this.sendResourceListChanged()}};this._registeredResourceTemplates[e]=s;let c=r.uriTemplate.variableNames;return Array.isArray(c)&&c.some(m=>!!r.completeCallback(m))&&this.setCompletionRequestHandler(),s}_createRegisteredPrompt(e,n,r,o,i){let s={title:n,description:r,argsSchema:o===void 0?void 0:a0(o),callback:i,enabled:!0,disable:()=>s.update({enabled:!1}),enable:()=>s.update({enabled:!0}),remove:()=>s.update({name:null}),update:c=>{typeof c.name<"u"&&c.name!==e&&(delete this._registeredPrompts[e],c.name&&(this._registeredPrompts[c.name]=s)),typeof c.title<"u"&&(s.title=c.title),typeof c.description<"u"&&(s.description=c.description),typeof c.argsSchema<"u"&&(s.argsSchema=a0(c.argsSchema)),typeof c.callback<"u"&&(s.callback=c.callback),typeof c.enabled<"u"&&(s.enabled=c.enabled),this.sendPromptListChanged()}};return this._registeredPrompts[e]=s,o&&Object.values(o).some(d=>{let m=d instanceof Nc?d._def?.innerType:d;return cW(m)})&&this.setCompletionRequestHandler(),s}_createRegisteredTool(e,n,r,o,i,s,c,d,m){lW(e);let h={title:n,description:r,inputSchema:Uxe(o),outputSchema:Uxe(i),annotations:s,execution:c,_meta:d,handler:m,enabled:!0,disable:()=>h.update({enabled:!1}),enable:()=>h.update({enabled:!0}),remove:()=>h.update({name:null}),update:y=>{typeof y.name<"u"&&y.name!==e&&(typeof y.name=="string"&&lW(y.name),delete this._registeredTools[e],y.name&&(this._registeredTools[y.name]=h)),typeof y.title<"u"&&(h.title=y.title),typeof y.description<"u"&&(h.description=y.description),typeof y.paramsSchema<"u"&&(h.inputSchema=a0(y.paramsSchema)),typeof y.outputSchema<"u"&&(h.outputSchema=a0(y.outputSchema)),typeof y.callback<"u"&&(h.handler=y.callback),typeof y.annotations<"u"&&(h.annotations=y.annotations),typeof y._meta<"u"&&(h._meta=y._meta),typeof y.enabled<"u"&&(h.enabled=y.enabled),this.sendToolListChanged()}};return this._registeredTools[e]=h,this.setToolRequestHandlers(),this.sendToolListChanged(),h}tool(e,...n){if(this._registeredTools[e])throw new Error(`Tool ${e} is already registered`);let r,o,i,s;if(typeof n[0]=="string"&&(r=n.shift()),n.length>1){let d=n[0];if(fW(d))o=n.shift(),n.length>1&&typeof n[0]=="object"&&n[0]!==null&&!fW(n[0])&&(s=n.shift());else if(typeof d=="object"&&d!==null){if(Object.values(d).some(m=>typeof m=="object"&&m!==null))throw new Error(`Tool ${e} expected a Zod schema or ToolAnnotations, but received an unrecognized object`);s=n.shift()}}let c=n[0];return this._createRegisteredTool(e,void 0,r,o,i,s,{taskSupport:"forbidden"},void 0,c)}registerTool(e,n,r){if(this._registeredTools[e])throw new Error(`Tool ${e} is already registered`);let{title:o,description:i,inputSchema:s,outputSchema:c,annotations:d,_meta:m}=n;return this._createRegisteredTool(e,o,i,s,c,d,{taskSupport:"forbidden"},m,r)}prompt(e,...n){if(this._registeredPrompts[e])throw new Error(`Prompt ${e} is already registered`);let r;typeof n[0]=="string"&&(r=n.shift());let o;n.length>1&&(o=n.shift());let i=n[0],s=this._createRegisteredPrompt(e,void 0,r,o,i);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),s}registerPrompt(e,n,r){if(this._registeredPrompts[e])throw new Error(`Prompt ${e} is already registered`);let{title:o,description:i,argsSchema:s}=n,c=this._createRegisteredPrompt(e,o,i,s,r);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),c}isConnected(){return this.server.transport!==void 0}async sendLoggingMessage(e,n){return this.server.sendLoggingMessage(e,n)}sendResourceListChanged(){this.isConnected()&&this.server.sendResourceListChanged()}sendToolListChanged(){this.isConnected()&&this.server.sendToolListChanged()}sendPromptListChanged(){this.isConnected()&&this.server.sendPromptListChanged()}},owt={type:"object",properties:{}};qk={completion:{values:[],hasMore:!1}}});function swt(t){return xEe.parse(JSON.parse(t))}function Gxe(t){return JSON.stringify(t)+`
|
|
1246
1246
|
`}var wF,Vxe=F(()=>{rw();wF=class{append(e){this._buffer=this._buffer?Buffer.concat([this._buffer,e]):e}readMessage(){if(!this._buffer)return null;let e=this._buffer.indexOf(`
|
|
1247
|
-
`);if(e===-1)return null;let n=this._buffer.toString("utf8",0,e).replace(/\r$/,"");return this._buffer=this._buffer.subarray(e+1),swt(n)}clear(){this._buffer=void 0}}});import Kxe from"node:process";var DF,Yxe=F(()=>{Vxe();DF=class{constructor(e=Kxe.stdin,n=Kxe.stdout){this._stdin=e,this._stdout=n,this._readBuffer=new wF,this._started=!1,this._ondata=r=>{this._readBuffer.append(r),this.processReadBuffer()},this._onerror=r=>{this.onerror?.(r)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){for(;;)try{let e=this._readBuffer.readMessage();if(e===null)break;this.onmessage?.(e)}catch(e){this.onerror?.(e)}}async close(){this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(e){return new Promise(n=>{let r=Gxe(e);this._stdout.write(r)?n():this._stdout.once("drain",n)})}}});var eBe={};Fr(eBe,{createMcpFactsServer:()=>Xxe,mcpAction:()=>uwt});function Wxe(t){return t==="codex"?new Ai.CodexProvider:t==="opencode"?new Ai.OpenCodeProvider:new Ai.ClaudeCodeProvider}function x0(t){return{content:[{type:"text",text:JSON.stringify(t,null,2)}],structuredContent:{data:t??null}}}async function Jxe(t,e){let n=Wxe(e);try{let r=n.findActiveSession(t);if(!r)return null;let o=n.createReader(r).readAll(),i=n.computeContextSize?d=>n.computeContextSize({...d,model:"",timestamp:new Date}):void 0,s=new Ai.EventAggregator({providerId:e,computeContextSize:i});for(let d of o)s.processEvent(d);let c=n.readSessionContextSnapshot?.(r)??(0,Ai.buildSessionContextSnapshot)(o,{providerId:e,sessionId:n.getSessionId(r),sessionPath:r,contextWindowForModel:n.getContextWindowLimit?.bind(n),computeContextSize:i});return{sessionPath:r,metrics:s.getMetrics(),snapshot:c}}finally{n.dispose()}}function awt(t,e){return(0,Ai.resolveQuota)({providerId:e==="opencode"?"zai":e,workspacePath:t,...e==="codex"?{preferFresh:!1}:{}})}function Xxe(t){let e=t.providerId??(0,Ai.detectProvider)(),n=t.cwd,r=(0,Ai.resolveProjectIdentity)(n),o=new IF({name:"sidekick-agent-hub",version:"0.26.
|
|
1247
|
+
`);if(e===-1)return null;let n=this._buffer.toString("utf8",0,e).replace(/\r$/,"");return this._buffer=this._buffer.subarray(e+1),swt(n)}clear(){this._buffer=void 0}}});import Kxe from"node:process";var DF,Yxe=F(()=>{Vxe();DF=class{constructor(e=Kxe.stdin,n=Kxe.stdout){this._stdin=e,this._stdout=n,this._readBuffer=new wF,this._started=!1,this._ondata=r=>{this._readBuffer.append(r),this.processReadBuffer()},this._onerror=r=>{this.onerror?.(r)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){for(;;)try{let e=this._readBuffer.readMessage();if(e===null)break;this.onmessage?.(e)}catch(e){this.onerror?.(e)}}async close(){this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(e){return new Promise(n=>{let r=Gxe(e);this._stdout.write(r)?n():this._stdout.once("drain",n)})}}});var eBe={};Fr(eBe,{createMcpFactsServer:()=>Xxe,mcpAction:()=>uwt});function Wxe(t){return t==="codex"?new Ai.CodexProvider:t==="opencode"?new Ai.OpenCodeProvider:new Ai.ClaudeCodeProvider}function x0(t){return{content:[{type:"text",text:JSON.stringify(t,null,2)}],structuredContent:{data:t??null}}}async function Jxe(t,e){let n=Wxe(e);try{let r=n.findActiveSession(t);if(!r)return null;let o=n.createReader(r).readAll(),i=n.computeContextSize?d=>n.computeContextSize({...d,model:"",timestamp:new Date}):void 0,s=new Ai.EventAggregator({providerId:e,computeContextSize:i});for(let d of o)s.processEvent(d);let c=n.readSessionContextSnapshot?.(r)??(0,Ai.buildSessionContextSnapshot)(o,{providerId:e,sessionId:n.getSessionId(r),sessionPath:r,contextWindowForModel:n.getContextWindowLimit?.bind(n),computeContextSize:i});return{sessionPath:r,metrics:s.getMetrics(),snapshot:c}}finally{n.dispose()}}function awt(t,e){return(0,Ai.resolveQuota)({providerId:e==="opencode"?"zai":e,workspacePath:t,...e==="codex"?{preferFresh:!1}:{}})}function Xxe(t){let e=t.providerId??(0,Ai.detectProvider)(),n=t.cwd,r=(0,Ai.resolveProjectIdentity)(n),o=new IF({name:"sidekick-agent-hub",version:"0.26.4"},{instructions:"Read-only facts about the current coding-agent session, quota, and Sidekick project stores."}),i={title:"",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0};return o.registerTool("get_quota_status",{description:"Get current quota utilization and reset windows using the same resolver as sidekick quota.",inputSchema:Wf.object({}),annotations:{...i,title:"Get quota status"}},async()=>x0(await awt(n,e))),o.registerTool("get_burn_rate",{description:"Get current token burn rate for the active observed session.",inputSchema:Wf.object({}),annotations:{...i,title:"Get burn rate"}},async()=>{let s=await Jxe(n,e);return x0(s?s.metrics.burnRate:null)}),o.registerTool("get_context_pressure",{description:"Get provider-neutral context pressure and compaction facts for the active session.",inputSchema:Wf.object({}),annotations:{...i,title:"Get context pressure"}},async()=>{let s=await Jxe(n,e);return x0(s?.snapshot??null)}),o.registerTool("get_tasks",{description:"List persisted tasks for the current project.",inputSchema:Wf.object({}),annotations:{...i,title:"Get tasks"}},async()=>x0(await(0,Ai.readTasks)(r,{status:"all"}))),o.registerTool("get_decisions",{description:"List persisted architectural decisions for the current project.",inputSchema:Wf.object({}),annotations:{...i,title:"Get decisions"}},async()=>x0(await(0,Ai.readDecisions)(r))),o.registerTool("get_notes",{description:"List persisted knowledge notes for the current project.",inputSchema:Wf.object({}),annotations:{...i,title:"Get notes"}},async()=>x0(await(0,Ai.readNotes)(r))),o.registerTool("get_project_context",{description:"Compose tasks, decisions, notes, handoff, and stats for the current project.",inputSchema:Wf.object({fidelity:Wf.enum(["full","compact","brief"]).default("compact")}),annotations:{...i,title:"Get project context"}},async({fidelity:s})=>{let c=Wxe(e);try{return x0(await(0,Ai.composeContext)(r,s,c))}finally{c.dispose()}}),o}async function uwt(t,e){let n=e.parent.opts(),r=n.provider&&n.provider!=="auto"?n.provider:void 0;await Xxe({cwd:n.project||process.cwd(),providerId:r}).connect(new DF)}var Ai,tBe=F(()=>{"use strict";Zxe();Yxe();dW();Ai=me(on(),1)});var iBe={};Fr(iBe,{formatDailyCsv:()=>rBe,formatFailingToolsBlock:()=>oBe,statsAction:()=>lwt});function dp(t){return t>=1e6?(t/1e6).toFixed(1)+"M":t>=1e3?(t/1e3).toFixed(1)+"K":t.toLocaleString()}function cwt(t,e,n=[]){let r=t.allTime;process.stdout.write(U.bold(`All-Time Stats
|
|
1248
1248
|
`)),process.stdout.write(U.dim("\u2500".repeat(50)+`
|
|
1249
1249
|
`));let o=(0,Rs.summarizeTokens)(r.tokens).total;process.stdout.write(` ${U.dim("Sessions:")} ${U.bold(dp(r.sessionCount))}
|
|
1250
1250
|
`),process.stdout.write(` ${U.dim("Messages:")} ${U.bold(dp(r.messageCount))}
|
|
@@ -1444,7 +1444,7 @@ ${L.join(`
|
|
|
1444
1444
|
`))}catch(i){let s=i instanceof Error?i.message:String(i);process.stderr.write(`Error: ${s}
|
|
1445
1445
|
`),process.exit(1)}}async function PDt(t,e){let n=e.parent.parent.opts(),r=e.opts(),o=n.project||process.cwd(),i=r.urlTemplate||process.env.SIDEKICK_HANDOFF_URL_TEMPLATE||"",s=ps(n);try{let c=s.findActiveSession(o),d=r.session||(c?s.getSessionId(c):"unknown"),m=(0,Fw.renderHandoffUrlTemplate)(i,{sessionId:d,provider:s.id,projectPath:o}),y=r.open!==!1&&!n.json?jF(m):!1;n.json?process.stdout.write(`${JSON.stringify({url:m,opened:y})}
|
|
1446
1446
|
`):process.stdout.write(`${y?"Opened":"Handoff URL"}: ${m}
|
|
1447
|
-
`)}finally{s.dispose()}}var Fw,IW=F(()=>{"use strict";Os();Fw=me(on(),1);Mc();SW()});function O0(t,e="auto"){return t.provider&&t.provider!=="auto"?t.provider:e!=="auto"?e:(0,$Oe.detectProvider)()}function ps(t){switch(O0(t)){case"opencode":return new Uw.OpenCodeProvider;case"codex":return new Uw.CodexProvider;default:return new Uw.ClaudeCodeProvider}}function zF(t,e){return new So(t).description(e).option("--since <time>","Start of the window: ISO date, YYYY-MM-DD, or a relative window such as 30d").option("--until <time>","End of the window (default: now)").option("--breakdown","Add per-model sub-rows under every row").option("--by-project","Group rows by project as well as provider").option("--utc","Bucket by UTC calendar days instead of local days").option("--csv","Print rows as CSV").option("--no-cache","Re-read every session instead of using the usage cache").addHelpText("after",wee)}var $Oe,Uw,Kk,Rr,RDt,MDt,QDt,NDt,$Dt,jDt,wW,zDt,FDt,jOe,zOe,UDt,LDt,HDt,qDt,ZDt,GDt,FOe,VDt,KDt,YDt,JDt,WDt,UOe,Mc=F(()=>{mL();Oee();Ree();Wde();rfe();$Oe=me(on(),1),Uw=me(on(),1);ife();Kk=Pee(process.argv.slice(2)),Rr=new So;Rr.name("sidekick").description("Query Sidekick project intelligence from the command line").version("0.26.
|
|
1447
|
+
`)}finally{s.dispose()}}var Fw,IW=F(()=>{"use strict";Os();Fw=me(on(),1);Mc();SW()});function O0(t,e="auto"){return t.provider&&t.provider!=="auto"?t.provider:e!=="auto"?e:(0,$Oe.detectProvider)()}function ps(t){switch(O0(t)){case"opencode":return new Uw.OpenCodeProvider;case"codex":return new Uw.CodexProvider;default:return new Uw.ClaudeCodeProvider}}function zF(t,e){return new So(t).description(e).option("--since <time>","Start of the window: ISO date, YYYY-MM-DD, or a relative window such as 30d").option("--until <time>","End of the window (default: now)").option("--breakdown","Add per-model sub-rows under every row").option("--by-project","Group rows by project as well as provider").option("--utc","Bucket by UTC calendar days instead of local days").option("--csv","Print rows as CSV").option("--no-cache","Re-read every session instead of using the usage cache").addHelpText("after",wee)}var $Oe,Uw,Kk,Rr,RDt,MDt,QDt,NDt,$Dt,jDt,wW,zDt,FDt,jOe,zOe,UDt,LDt,HDt,qDt,ZDt,GDt,FOe,VDt,KDt,YDt,JDt,WDt,UOe,Mc=F(()=>{mL();Oee();Ree();Wde();rfe();$Oe=me(on(),1),Uw=me(on(),1);ife();Kk=Pee(process.argv.slice(2)),Rr=new So;Rr.name("sidekick").description("Query Sidekick project intelligence from the command line").version("0.26.4").option("--json","Output as JSON").option("--project <path>","Override project path (default: cwd)").option("--no-color","Disable colored output (also honors NO_COLOR)").option("--offline","Price from the cached catalog only; never refresh it over the network (also SIDEKICK_OFFLINE=1)").option("--output-file <path>","Write everything the command prints to stdout into this file").addOption(Xq()).addHelpText("after",Eee);Rr.hook("preAction",async()=>{let t=Rr.opts().outputFile;if(t){let{installOutputRedirect:e,REDIRECT_UNSUPPORTED_COMMANDS:n}=await Promise.resolve().then(()=>(bfe(),_fe));Kk&&n.has(Kk)?process.stderr.write(`--output-file is ignored for '${Kk}'.
|
|
1448
1448
|
`):e(t)}return Jde(Kk)});RDt=new So("dashboard").description("Full-screen TUI dashboard with live session metrics").option("--session <id>","Follow a specific session (default: most recent)").option("--replay","Replay existing events before streaming new ones").option("--no-mouse","Disable mouse capture so terminal text selection works (toggle with M)").action(async(t,e)=>{let{dashboardAction:n}=await Ebe().then(()=>Sbe);return n(t,e)});Rr.addCommand(RDt);MDt=new So("dump").description("Dump session data as text timeline, JSON metrics, or markdown report").option("--list","List available session IDs for the current project").option("--csv","With --list, print the session table as CSV").option("--limit <n>","Maximum sessions listed with --list (default: 50)").option("--session <id>","Target a specific session (default: most recent)").option("--width <cols>","Terminal width for text output (default: auto-detect)").option("--expand","Show all events including noise").option("--format <fmt>","Output format: text, json, markdown (default: text)").addHelpText("after",xee).action(async(t,e)=>{let{dumpAction:n}=await Promise.resolve().then(()=>(xbe(),Tbe));return n(t,e)});Rr.addCommand(MDt);QDt=new So("history").description("Show recent prompts across Codex sessions (prompt history \u2014 for the quota heatmap use `sidekick quota history`)").option("--limit <n>","Maximum prompts to show (default: 20)").option("--path <sessionId>","Print the rollout transcript path for a session ID or prefix").addHelpText("after",Bee).action(async(t,e)=>{let{historyAction:n}=await Promise.resolve().then(()=>(Rbe(),Pbe));return n(t,e)});Rr.addCommand(QDt);NDt=new So("context").description("Output composite project context: tasks, decisions, notes, and handoff").option("--fidelity <level>","Detail level: full, compact, brief (default: full)").action(async(t,e)=>{let{contextAction:n}=await Promise.resolve().then(()=>(Qbe(),Mbe));return n(t,e)});Rr.addCommand(NDt);$Dt=new So("report").description("Generate a self-contained HTML session report and open in browser").option("--session <id>","Target a specific session (default: most recent)").option("--output <path>","Write report to a specific file path (default: temp file)").option("--no-open","Do not auto-open the report in the browser").addOption(tfe()).option("--no-thinking","Exclude thinking blocks from the transcript").addHelpText("after",`
|
|
1449
1449
|
With the global --json flag the report path is printed to stdout as {"path": ...}.
|
|
1450
1450
|
`).action(async(t,e)=>{let{reportAction:n}=await Promise.resolve().then(()=>(Fbe(),zbe));return n(t,e)});Rr.addCommand($Dt);jDt=new So("search").description("Full-text search across all sessions").argument("<query>","Search query string").option("--limit <n>","Maximum number of results (default: 50)").action(async(t,e,n)=>{n.opts().query=t;let{searchAction:r}=await Promise.resolve().then(()=>(Hbe(),Lbe));return r(e,n)});Rr.addCommand(jDt);wW=new So("tasks").description("List persisted tasks for the current project").addOption(nfe()).action(async(t,e)=>{let{tasksAction:n}=await Promise.resolve().then(()=>(Zbe(),qbe));return n(t,e)});wW.command("add").description("Add a task to the current project").argument("<subject>","Task subject").option("--description <text>","Longer task description").option("--tags <tags>","Comma-separated tags").action(async(t,e,n)=>{let{taskAddAction:r}=await Promise.resolve().then(()=>(lO(),cO));return r(t,n)});wW.command("done").description("Mark a task completed by ID or unique prefix").argument("<id>","Task ID or unique prefix").action(async(t,e,n)=>{let{taskDoneAction:r}=await Promise.resolve().then(()=>(lO(),cO));return r(t,n)});Rr.addCommand(wW);zDt=new So("decisions").description("List architectural decisions for the current project").option("--search <query>","Filter decisions by keyword").option("--limit <n>","Maximum number of decisions to show").action(async(t,e)=>{let{decisionsAction:n}=await Promise.resolve().then(()=>(Kbe(),Vbe));return n(t,e)});Rr.addCommand(zDt);FDt=new So("notes").description("List knowledge notes (gotchas, patterns, tips) for the current project").option("--file <path>","Filter notes by file path").option("--type <type>","Filter by type: gotcha, pattern, guideline, tip").option("--status <status>","Filter by status: active, needs_review, stale, obsolete").action(async(t,e)=>{let{notesAction:n}=await Promise.resolve().then(()=>(Jbe(),Ybe));return n(t,e)});Rr.addCommand(FDt);jOe=new So("note").description("Capture project knowledge");jOe.command("add").description("Add a knowledge note").argument("<content>","Note content").option("--file <path>","Related project file",".").option("--title <title>","Short note title").option("--type <type>","gotcha, pattern, guideline, or tip","tip").option("--importance <level>","critical, high, medium, or low","medium").option("--tags <tags>","Comma-separated tags").action(async(t,e,n)=>{let{noteAddAction:r}=await Promise.resolve().then(()=>(lO(),cO));return r(t,n)});Rr.addCommand(jOe);zOe=new So("decision").description("Capture architectural decisions");zOe.command("add").description("Add a decision").argument("<description>","What was decided").option("--rationale <text>","Why this choice was made").option("--chosen <text>","Chosen option").option("--alternatives <items>","Comma-separated alternatives").option("--tags <tags>","Comma-separated tags").action(async(t,e,n)=>{let{decisionAddAction:r}=await Promise.resolve().then(()=>(lO(),cO));return r(t,n)});Rr.addCommand(zOe);UDt=new So("doctor").description("Diagnose project identity, sessions, accounts, providers, and dependencies").action(async(t,e)=>{let{doctorAction:n}=await Promise.resolve().then(()=>(Xbe(),Wbe));return n(t,e)});Rr.addCommand(UDt);LDt=new So("today").description("Show a cache-only daily brief for this project").action(async(t,e)=>{let{todayAction:n}=await Promise.resolve().then(()=>(r0e(),n0e));return n(t,e)});Rr.addCommand(LDt);HDt=new So("mcp").description("Serve read-only Sidekick facts over MCP stdio").action(async(t,e)=>{let{mcpAction:n}=await Promise.resolve().then(()=>(tBe(),eBe));return n(t,e)});Rr.addCommand(HDt);qDt=new So("stats").description("Show historical usage stats (tokens, costs, models, tools)").option("--csv","Print every recorded day as CSV (date, sessions, tokens, cost)").action(async(t,e)=>{let{statsAction:n}=await Promise.resolve().then(()=>(sBe(),iBe));return n(t,e)});Rr.addCommand(qDt);ZDt=new So("blocks").description("Show five-hour billing blocks computed from session logs").option("--active","Only the block that is open right now").option("--recent","Blocks from the last three days (default)").option("--since <time>","Blocks since an ISO date, YYYY-MM-DD, or a relative window such as 7d or 24h").option("--csv","Print blocks as CSV").option("--no-cache","Re-read every session instead of using the usage cache").addHelpText("after",Iee).action(async(t,e)=>{let{blocksAction:n}=await Promise.resolve().then(()=>(fBe(),dBe));return n(t,e)});Rr.addCommand(ZDt);Rr.addCommand(zF("daily","Daily usage from session logs (default: last 30 days)").action(async(t,e)=>{let{dailyAction:n}=await Promise.resolve().then(()=>(Nw(),Gk));return n(t,e)}));Rr.addCommand(zF("weekly","Weekly usage from session logs (default: last 12 weeks)").action(async(t,e)=>{let{weeklyAction:n}=await Promise.resolve().then(()=>(Nw(),Gk));return n(t,e)}));Rr.addCommand(zF("monthly","Monthly usage from session logs (default: last 12 months)").action(async(t,e)=>{let{monthlyAction:n}=await Promise.resolve().then(()=>(Nw(),Gk));return n(t,e)}));GDt=new So("import").description("Import finished sessions from every provider into the history store").option("--since <time>","Only sessions modified after an ISO date, YYYY-MM-DD, or a relative window such as 30d").addHelpText("after",Dee).action(async(t,e)=>{let{importAction:n}=await Promise.resolve().then(()=>(SBe(),bBe));return n(t,e)});Rr.addCommand(GDt);Rr.addCommand(zF("sessions","One row per session from session logs (default: last 30 days)").action(async(t,e)=>{let{sessionsAction:n}=await Promise.resolve().then(()=>(Nw(),Gk));return n(t,e)}));FOe=new So("quota").description("Show quota or rate-limit utilization (auto-detects provider)").addOption(Xde()).option("--all","Show all providers (Claude, Codex, z.ai if active)").option("--refresh","Ask the provider API first instead of reusing a local sample (Codex always queries the API)").addHelpText("after",Cee).action(async(t,e)=>{let{quotaAction:n}=await Promise.resolve().then(()=>(UBe(),FBe));return n(t,e)});FOe.command("history").description("Render a 13-week heatmap of quota utilization for the current workspace").option("--weeks <n>","Weeks of history to render (default: 13, clamped 1-26)","13").addOption(efe()).option("--workspace <path>","Workspace path used to derive the history scope (default: cwd)").option("--window <window>","Which limit the heatmap shows: 5h (default), 7d, or max (the higher of the two)","5h").option("--csv","Print the daily buckets as CSV instead of a heatmap").action(async(t,e)=>{let{quotaHistoryAction:n}=await Promise.resolve().then(()=>(VBe(),GBe));return n(t,e)});Rr.addCommand(FOe);VDt=new So("status").description("Show API status (Claude and OpenAI)").action(async(t,e)=>{let{statusAction:n}=await Promise.resolve().then(()=>(JBe(),YBe));return n(t,e)});Rr.addCommand(VDt);KDt=new So("statusline").description("Render the cache-only one-line agent status footer").action(async()=>{let{statuslineAction:t}=await Promise.resolve().then(()=>(uOe(),aOe));return t()});Rr.addCommand(KDt);YDt=new So("peak").description("Show whether Claude is currently in peak hours (faster session-limit drain)").addOption(Xq()).action(async(t,e)=>{let{peakAction:n}=await Promise.resolve().then(()=>(lOe(),cOe));return n(t,e)});Rr.addCommand(YDt);JDt=new So("account").description("Manage saved accounts (list, add, switch, remove)").option("--provider <id>","Provider: claude-code, codex, all, auto (default: claude-code)").option("--add","Save the currently signed-in account").option("--login","Sign in and save a new account").option("--label <name>","Label for the account (required for Codex, optional for Claude)").option("--switch","Switch to the next saved account").option("--switch-to <identifier>","Switch to a specific account by email, label, or id").option("--remove <identifier>","Remove a saved account by email, label, or id").option("-y, --yes","Skip confirmation prompts for destructive actions").option("--force","Alias for --yes").option("--launcher <name>","Create a per-account launcher for the active account").option("--auto-switch <pct|off>","Persist auto-switch quota threshold, or off").action(async(t,e)=>{let{accountAction:n}=await Promise.resolve().then(()=>(bOe(),_Oe));return n(t,e)});Rr.addCommand(JDt);WDt=new So("extract").description("Extract URLs, file paths, commands, and plans from recent sessions").option("--type <types>","Comma list: url, path, command, plan (default: all)").option("--limit <n>","Maximum items per type").option("-i, --interactive","Interactive picker with copy/open actions").addHelpText("after",Tee).action(async(t,e)=>{let{extractAction:n}=await Promise.resolve().then(()=>(NOe(),QOe));return n(t,e)});Rr.addCommand(WDt);UOe=new So("handoff").description("Show the latest session handoff document for the current project").action(async(t,e)=>{let{handoffAction:n}=await Promise.resolve().then(()=>(IW(),CW));return n(t,e)});UOe.command("open").description("Open a configured external session-handoff target").option("--url-template <template>","URL with {sessionId}, {provider}, and {projectPath}").option("--session <id>","Override the active session ID").option("--no-open","Render without opening the URL").action(async(t,e)=>{let{externalHandoffAction:n}=await Promise.resolve().then(()=>(IW(),CW));return n(t,e)});Rr.addCommand(UOe);Kk===void 0&&Rr.action(()=>{Rr.outputHelp()});Rr.parseAsync().catch(t=>{process.stderr.write(ofe(t)),process.exitCode=1})});Mc();export{ps as resolveProvider,O0 as resolveProviderId};
|