fleetlens 0.7.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/apps/web/.next/BUILD_ID +1 -1
- package/app/apps/web/.next/build-manifest.json +3 -3
- package/app/apps/web/.next/prerender-manifest.json +3 -3
- package/app/apps/web/.next/server/app/_global-error.html +1 -1
- package/app/apps/web/.next/server/app/_global-error.rsc +1 -1
- package/app/apps/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/app/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/apps/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/apps/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/changelog/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/day/[date]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/day/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/digest/[date]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/digest/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/insights/[key]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/insights/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/parallelism/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/runs/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/usage/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/chunks/[root-of-the-server]__0.z48ue._.js +1 -1
- package/app/apps/web/.next/server/chunks/[root-of-the-server]__0dctov1._.js +2 -2
- package/app/apps/web/.next/server/chunks/packages_09hmrqx._.js +1 -1
- package/app/apps/web/.next/server/chunks/packages_118y1lp._.js +1 -1
- package/app/apps/web/.next/server/chunks/packages_parser_dist_fs_122oe0-.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0ytdqxt._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/_0xu2pvc._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/apps_web_lib_0m67-xi._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/packages_parser_dist_10_oegc._.js +1 -1
- package/app/apps/web/.next/server/middleware-build-manifest.js +3 -3
- package/app/apps/web/.next/server/pages/500.html +1 -1
- package/app/apps/web/.next/server/server-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/server-reference-manifest.json +1 -1
- package/app/apps/web/.next/static/chunks/0cxyt4-24..b7.js +14 -0
- package/app/apps/web/lib/changelog-data.generated.ts +1 -1
- package/app/apps/web/package.json +1 -1
- package/app/apps/web/tsconfig.tsbuildinfo +1 -1
- package/dist/daemon-worker.js +562 -37
- package/dist/index.js +589 -64
- package/package.json +1 -1
- package/app/apps/web/.next/static/chunks/179_t_igg8ghh.js +0 -14
- /package/app/apps/web/.next/static/{tiK9aMHXkgnKLNmxj9J1P → u6-8f8u1tspYCacGAz53R}/_buildManifest.js +0 -0
- /package/app/apps/web/.next/static/{tiK9aMHXkgnKLNmxj9J1P → u6-8f8u1tspYCacGAz53R}/_clientMiddlewareManifest.js +0 -0
- /package/app/apps/web/.next/static/{tiK9aMHXkgnKLNmxj9J1P → u6-8f8u1tspYCacGAz53R}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[30375,a=>{"use strict";let b={kind:"claude-code",displayName:"Claude Code",shortLabel:"Claude",accentColor:"var(--af-accent)",iconChar:"✦"},c={kind:"codex",displayName:"Codex (OpenAI)",shortLabel:"Codex",accentColor:"rgb(16, 163, 127)",iconChar:"◆"},d=[b,c],e=new Set(d.map(a=>a.kind));a.s(["CLAUDE_CODE_METADATA",0,b,"CODEX_METADATA",0,c,"agentMetadata",0,d,"getAgentMetadata",0,function(a){return d.find(b=>b.kind===a)},"isAgentKind",0,function(a){return"string"==typeof a&&e.has(a)}])},10687,98049,a=>{"use strict";let b={sonnet:{input:3,output:15,cacheRead:.3,cache_1h:3.75,cache_5m:3.75},opus:{input:5,output:25,cacheRead:.5,cache_1h:6.25,cache_5m:6.25},haiku:{input:1,output:5,cacheRead:.1,cache_1h:1.25,cache_5m:1.25}};function c(a,b,c){let d=0;for(;d<c;){let e=d+c>>>1;a[e]<b?d=e+1:c=e}return d}function d(a,b,d){if(d<=b)return 0;let e=a.ts.length,f=c(a.ts,b,e),g=c(a.ts,d,e);return a.cum[g]-a.cum[f]}a.s(["RATE_PER_PCT_5H",0,{pro:.2,"pro-max":.4,"pro-max-20x":2,custom:2},"RATE_PER_PCT_7D",0,{pro:1.2,"pro-max":2.4,"pro-max-20x":12,custom:12},"buildSpendIndex",0,function(a){let c=a.map(a=>({e:a,t:Date.parse(a.ts)})).filter(a=>!Number.isNaN(a.t)).sort((a,b)=>a.t-b.t),d=new Float64Array(c.length),e=new Float64Array(c.length+1),f=0;for(let a=0;a<c.length;a++)d[a]=c[a].t,e[a]=f,f+=function(a){let c=b[a.family];return(a.input*c.input+a.output*c.output+a.cacheRead*c.cacheRead+a.cache_1h*c.cache_1h+a.cache_5m*c.cache_5m)/1e6}(c[a].e);return e[c.length]=f,{ts:d,cum:e}},"collectSnapPairRates",0,function(a,b,c){let e=c?.minTravelPct??1,f=c?.minDollars??1,g=c?.maxGapMs??864e5,h=[];for(let[c,i]of a)for(let a=1;a<i.length;a++){let j=i[a-1],k=i[a],l=k.ts-j.ts,m=k.pct-j.pct;if(l<=0||l>g||m<e)continue;let n=d(b,j.ts,k.ts);n<f||h.push({cycleEndMs:c,rate:n/m,travel:m,dollars:n,gapMs:l})}return h},"groupSnapsByCycle",0,function(a,b){let c=new Map;for(let d of a){if(!d.captured_at)continue;let a=b(d);if(!a?.resets_at||"number"!=typeof a.utilization)continue;let e=Date.parse(d.captured_at),f=Date.parse(a.resets_at);if(Number.isNaN(e)||Number.isNaN(f))continue;let g=36e5*Math.round(f/36e5),h=c.get(g)??[];h.push({ts:e,pct:a.utilization}),c.set(g,h)}for(let a of c.values())a.sort((a,b)=>a.ts-b.ts);return c},"modelFamily",0,function(a){let b=(a??"").toLowerCase();return b&&"<synthetic>"!==b?b.includes("haiku")?"haiku":b.includes("opus")?"opus":b.includes("sonnet")?"sonnet":null:null},"predictAnchored",0,function(a,b,c,e,f,g){let h=e-36e5*f;if(c<=0&&(c=1),0===b.length)return Math.max(0,d(a,h,g)/c);let i=-1;for(let a=0;a<b.length;a++)if(b[a].ts<=g)i=a;else break;if(i>=0&&i+1<b.length){let c=b[i],e=b[i+1];if(e.pct===c.pct)return c.pct;let f=d(a,c.ts,e.ts);if(f<=0){let a=(g-c.ts)/(e.ts-c.ts);return c.pct+(e.pct-c.pct)*a}let h=d(a,c.ts,g);return c.pct+(e.pct-c.pct)*(h/f)}if(i>=0){let e=b[i];return e.pct+d(a,e.ts,g)/c}let j=b[0];if(g<=h)return 0;let k=d(a,h,j.ts);if(k<=0){let a=(g-h)/(j.ts-h);return j.pct*a}let l=d(a,h,g);return j.pct*(l/k)},"userSoloRate",0,function(a,b=.9){if(a.length<3)return null;let c=a.map(a=>a.rate).sort((a,b)=>a-b),d=Math.min(Math.floor(c.length*b),c.length-1);return c[d]}],10687);let e={input:0,output:0,cacheRead:0,cacheWrite:0};function f(a,b=200){let c=a.replace(/<[^>]+>/g,"").replace(/\s+/g," ").trim();return c.length>b?c.slice(0,b-1)+"…":c}let g=/^\s*<teammate-message\s+teammate_id="([^"]+)"[^>]*>([\s\S]*?)<\/teammate-message>/;function h(a){let b=a.match(g);if(!b)return;let c=b[1],d=b[2].trim(),e="message";if(d.startsWith("{"))try{let a=JSON.parse(d);"idle_notification"===a.type?e="idle-notification":"shutdown_request"===a.type?e="shutdown-request":"shutdown_approved"===a.type?e="shutdown-approved":"task_assignment"===a.type?e="task-assignment":"teammate_terminated"===a.type&&(e="teammate-terminated")}catch{}return{teammateId:c,body:d,kind:e}}function i(a){if(!a||"object"!=typeof a)return;let b=a=>"number"==typeof a?a:0;return{input:b(a.input_tokens),output:b(a.output_tokens),cacheRead:b(a.cache_read_input_tokens),cacheWrite:b(a.cache_creation_input_tokens)}}a.s(["parseTranscript",0,function(a){let b,c,d,g,j,k,l,m,n=[];for(let b=0;b<a.length;b++){let c=function(a,b){if(!a||"object"!=typeof a)return null;let c=String(a.type??""),d=a.uuid,e=a.parentUuid??null,g=a.timestamp;if("assistant"===c){let h,j,k,l=a.message??{},m=l.content??[],n=i(l.usage),o=l.model,p=a.requestId,q=l.id,r=l.stop_reason,s=m[0],t="agent";return s?.type==="thinking"?(t="agent-thinking",h="[thinking] "+f(s.thinking,140)):s?.type==="tool_use"?(t="tool-call",j=s.name,k=s.id,h=`${s.name} `+f(JSON.stringify(s.input??{}),100)):h=s?.type==="text"?f(s.text,200):`<assistant:${s?.type??"empty"}>`,{index:b,uuid:d,parentUuid:e,timestamp:g,role:t,rawType:c,preview:h,blocks:m,usage:n,model:o,requestId:p,messageId:q,stopReason:r,toolName:j,toolUseId:k,raw:a}}if("user"===c){let i=(a.message??{}).content;if("string"==typeof i){let j=h(i);return{index:b,uuid:d,parentUuid:e,timestamp:g,role:"user",rawType:c,preview:f(i,200),blocks:[{type:"text",text:i}],raw:a,teammateMessage:j}}if(Array.isArray(i)){let j=i[0];if(j?.type==="tool_result")return{index:b,uuid:d,parentUuid:e,timestamp:g,role:"tool-result",rawType:c,preview:f("string"==typeof j.content?j.content:JSON.stringify(j.content),200),blocks:i,toolUseId:j.tool_use_id,toolResult:a.toolUseResult,raw:a};let k=i.find(a=>a?.type==="text"),l=k?h(k.text):void 0;return{index:b,uuid:d,parentUuid:e,timestamp:g,role:"user",rawType:c,preview:k?f(k.text,200):f(JSON.stringify(i),200),blocks:i,raw:a,teammateMessage:l}}}if("attachment"===c){let h=a.attachment??{},i=String(h.type??"attachment"),j=`<attachment: ${i}>`;return"string"==typeof h.content&&h.content.length>0?j=`[${i}] `+f(h.content,140):Array.isArray(h.addedNames)&&(j=`[${i}] +${h.addedNames.length} names`),{index:b,uuid:d,parentUuid:e,timestamp:g,role:"system",rawType:c,preview:j,blocks:[{type:"text",text:JSON.stringify(h,null,2)}],attachmentType:i,raw:a}}return{index:b,uuid:d,parentUuid:e,timestamp:g,role:"meta",rawType:c||"unknown",preview:`${c}: ${f(JSON.stringify(a),140)}`,blocks:[{type:"text",text:JSON.stringify(a,null,2)}],raw:a}}(a[b],b);c&&n.push(c)}let o=n.map(a=>a.timestamp?Date.parse(a.timestamp):void 0).filter(a=>"number"==typeof a&&!Number.isNaN(a)),p=o.length?Math.min(...o):void 0,q=o.length?Math.max(...o):void 0,r=void 0!==p?new Date(p).toISOString():void 0,s=void 0!==q?new Date(q).toISOString():void 0;for(let a of n){if(!a.timestamp)continue;let b=Date.parse(a.timestamp);Number.isNaN(b)||void 0!==p&&(a.tOffsetMs=Math.max(0,b-p))}let t=n.filter(a=>{let b;return a.timestamp&&("user"===(b=a.role)||"agent"===b||"agent-thinking"===b||"tool-call"===b||"tool-result"===b)}).map(a=>({e:a,ms:Date.parse(a.timestamp)})).filter(a=>!Number.isNaN(a.ms)).sort((a,b)=>a.ms-b.ms);for(let a=1;a<t.length;a++)t[a].e.gapMs=Math.max(0,t[a].ms-t[a-1].ms);let u=n.filter(a=>a.timestamp).map(a=>Date.parse(a.timestamp)).filter(a=>!Number.isNaN(a)).sort((a,b)=>a-b),v=[],w=0;if(u.length>0){let a=u[0],b=u[0];for(let c=1;c<u.length;c++){let d=u[c],e=d-b;e>18e4?(v.push({startMs:a,endMs:b}),a=d):e>0&&(w+=e),b=d}v.push({startMs:a,endMs:b})}let x=new Map,y=[];for(let a of n){if(!a.timestamp)continue;let b=Date.parse(a.timestamp);if(!Number.isNaN(b)){if("assistant"===a.rawType&&a.usage&&a.messageId){let c=x.get(a.messageId);c?(c.siblings.push(a),b<c.ms&&(c.rep=a,c.ms=b)):x.set(a.messageId,{rep:a,ms:b,siblings:[a]})}else if("system"===a.rawType){let c=a.raw;if(c?.subtype!=="compact_boundary")continue;let d=c.compactMetadata??{};y.push({ms:b,trigger:"manual"===d.trigger?"manual":"auto",preTokens:"number"==typeof d.preTokens?d.preTokens:0})}}}let z=[...x.values()].sort((a,b)=>a.ms-b.ms);y.sort((a,b)=>a.ms-b.ms);let A=0,B=0,C=(a,b)=>{for(let c of a.siblings)c.coldResume=b;A++,B+=b.writeTokens},D=new Set;for(let a of y){let b,c=z.find(b=>b.ms>a.ms&&(b.rep.usage?.cacheWrite??0)>=1e3);if(!c)continue;for(let c=z.length-1;c>=0;c--)if(z[c].ms<=a.ms){b=z[c].ms;break}let d=c.rep.usage,e=d.cacheWrite+d.cacheRead;C(c,{trigger:"compact",gapMs:void 0!==b?c.ms-b:0,writeTokens:d.cacheWrite,writeRatio:e>0?d.cacheWrite/e:0,compact:{trigger:a.trigger,preTokens:a.preTokens}}),D.add(c.rep.messageId)}for(let a=1;a<z.length;a++){let b=z[a-1],c=z[a];if(D.has(c.rep.messageId))continue;let d=c.rep.usage,e=d.cacheWrite+d.cacheRead,f=e>0?d.cacheWrite/e:0,g=c.ms-b.ms;g>3e5&&d.cacheWrite>=1e3&&f>=.3&&C(c,{trigger:"idle",gapMs:g,writeTokens:d.cacheWrite,writeRatio:f})}let E={...e},F=new Set,G="",H=!1,I=!1,J=0,K=0,L=0,M=0,N=new Set;for(let a of n){if("tool-call"===a.role){J++;let b=a.blocks.find(a=>a&&"tool_use"===a.type);if(b){let a=b.input??{};if("TeamCreate"===b.name&&(H=!0),"SendMessage"===b.name){let b="string"==typeof a.to?a.to:"";b&&"team-lead"!==b&&(I=!0)}let c="string"==typeof a.file_path?a.file_path:void 0;if("Edit"===b.name&&c){N.add(c);let b="string"==typeof a.old_string?a.old_string:"",d="string"==typeof a.new_string?a.new_string:"",e=b?b.split("\n").length:0,f=d?d.split("\n").length:0;L+=Math.max(0,f-e),M+=Math.max(0,e-f)}else if("Write"===b.name&&c){N.add(c);let b="string"==typeof a.content?a.content:"";L+=b?b.split("\n").length:0}}}if("user"===a.role){let b=a.raw?.message,c="string"==typeof b?.content?b.content:"",d=c.startsWith("<command-name>")||c.startsWith("<local-command-caveat>")||c.startsWith("Base directory for this skill:")||c.startsWith("<task-notification>"),e=void 0!==a.teammateMessage&&!j;d||e||(k||(k=a.teammateMessage?a.teammateMessage.body:a.preview),K++,m=a.preview)}"agent"===a.role&&(l=a.preview)}for(let e of a)if(e&&"object"==typeof e&&("string"!=typeof e.sessionId||G||(G=e.sessionId),"string"!=typeof e.cwd||c||(c=e.cwd),"string"!=typeof e.gitBranch||d||(d=e.gitBranch),"string"!=typeof e.teamName||g||(g=e.teamName),"string"!=typeof e.agentName||j||(j=e.agentName),"assistant"===e.type)){let a=e.message;if(a){"string"!=typeof a.model||b||(b=a.model);let c="string"==typeof a.id?a.id:void 0,d="string"==typeof e.requestId?e.requestId:void 0,f=null!=c?`${c}:${d??""}`:void 0;if(f&&F.has(f))continue;f&&F.add(f);let g=i(a.usage);g&&(E.input+=g.input,E.output+=g.output,E.cacheRead+=g.cacheRead,E.cacheWrite+=g.cacheWrite)}}return{events:n,meta:{sessionId:G,firstTimestamp:r,lastTimestamp:s,durationMs:void 0!==p&&void 0!==q?q-p:void 0,eventCount:n.length,model:b,cwd:c,gitBranch:d,totalUsage:E,status:"idle",firstUserPreview:k,lastUserPreview:m,lastAgentPreview:l,toolCallCount:J,turnCount:K,airTimeMs:w,activeSegments:v,linesAdded:L,linesRemoved:M,filesEdited:N.size,coldResumeCount:A,cacheRebuildTokens:B,teamName:g,agentName:j,isTeamLead:void 0!==g&&void 0===j&&(H||I)}}}],98049)},48024,a=>{"use strict";let b={input:0,output:0,cacheRead:0,cacheWrite:0};function c(a){let b=new Date(a),c=b.getFullYear(),d=String(b.getMonth()+1).padStart(2,"0"),e=String(b.getDate()).padStart(2,"0");return`${c}-${d}-${e}`}let d=["/.claude/worktrees/","/.worktrees/","/claude/worktrees/"];function e(a){for(let b of d){let c=a.lastIndexOf(b);if(c>=0)return{idx:c,marker:b}}return null}function f(a){let b=a.replace(/\/{2,}/g,"/"),c=e(b);return c?b.slice(0,c.idx):b}function g(a){let b=a.replace(/\/{2,}/g,"/"),c=e(b);if(!c)return null;let d=b.slice(c.idx+c.marker.length),f=d.indexOf("/");return f>=0?d.slice(0,f):d}function h(a){return{date:a,sessions:0,toolCalls:0,turns:0,tokens:{...b},durationMs:0,airTimeMs:0,peakParallelism:0}}let i=/gh\s+pr\s+create\b/i,j=/#(\d+)/,k=/--title\s+["']([^"']+)["']/;function l(a){let c={sessionCount:a.length,totalDurationMs:0,totalAirTimeMs:0,totalTokens:{...b},totalToolCalls:0,totalTurns:0,avgTurnsPerSession:0,avgDurationMs:0,totalLinesAdded:0,totalLinesRemoved:0,totalFilesEdited:0};for(let b of a)c.totalDurationMs+=b.durationMs??0,c.totalAirTimeMs+=b.airTimeMs??b.durationMs??0,c.totalTokens.input+=b.totalUsage.input,c.totalTokens.output+=b.totalUsage.output,c.totalTokens.cacheRead+=b.totalUsage.cacheRead,c.totalTokens.cacheWrite+=b.totalUsage.cacheWrite,c.totalToolCalls+=b.toolCallCount??0,c.totalTurns+=b.turnCount??0,c.totalLinesAdded+=b.linesAdded??0,c.totalLinesRemoved+=b.linesRemoved??0,c.totalFilesEdited+=b.filesEdited??0;return a.length>0&&(c.avgTurnsPerSession=c.totalTurns/a.length,c.avgDurationMs=c.totalDurationMs/a.length),c}function m(a,b){let c=b.minDurationMs??6e4,d=b.mergeGapMs??6e5,e=b.minActive??2,f=[];for(let b of a)for(let a of b.segments)a.endMs<=a.startMs||(f.push({ms:a.startMs,delta:1,sessionId:b.id}),f.push({ms:a.endMs,delta:-1,sessionId:b.id}));f.sort((a,b)=>a.ms-b.ms||b.delta-a.delta);let g=new Map,h=[],i=null;for(let a of f){if(1===a.delta)g.set(a.sessionId,(g.get(a.sessionId)??0)+1);else{let b=(g.get(a.sessionId)??0)-1;b<=0?g.delete(a.sessionId):g.set(a.sessionId,b)}let b=g.size;if(b>=e)if(i)for(let c of(i.endMs=a.ms,b>i.peak&&(i.peak=b),g.keys()))i.sessionIds.add(c);else i={startMs:a.ms,endMs:a.ms,peak:b,sessionIds:new Set(g.keys())};else i&&(i.endMs=a.ms,h.push(i),i=null)}i&&h.push(i);let j=h.filter(a=>a.endMs-a.startMs>=c),k=[];for(let a of j){let b=k[k.length-1];if(b&&a.startMs-b.endMs<=d)for(let c of(b.endMs=a.endMs,a.peak>b.peak&&(b.peak=a.peak),a.sessionIds))b.sessionIds.add(c);else k.push({startMs:a.startMs,endMs:a.endMs,peak:a.peak,sessionIds:new Set(a.sessionIds)})}let l=new Map;for(let b of a)l.set(b.id,b.projectDir);return k.map(a=>{let b=Array.from(new Set(Array.from(a.sessionIds).map(a=>l.get(a)).filter(a=>!!a)));return{startMs:a.startMs,endMs:a.endMs,peak:a.peak,sessionIds:Array.from(a.sessionIds),projectDirs:b,crossProject:b.length>1}})}a.s(["buildGanttDay",0,function(a,b){let[c,d,e]=b.split("-").map(Number),f=new Date(c,d-1,e).getTime(),g=new Date(c,d-1,e+1).getTime(),h=[];for(let b of a){let a=(function(a,b=18e4){let c=a.filter(a=>a.timestamp).map(a=>Date.parse(a.timestamp)).filter(a=>!Number.isNaN(a)).sort((a,b)=>a-b);if(0===c.length)return[];let d=[],e=c[0],f=c[0];for(let a=1;a<c.length;a++){let g=c[a];g-f>b&&(d.push({startMs:e,endMs:f}),e=g),f=g}return d.push({startMs:e,endMs:f}),d})(b.events).filter(a=>a.endMs>f&&a.startMs<g).map(a=>({startMs:Math.max(a.startMs,f),endMs:Math.min(a.endMs,g)}));if(0===a.length)continue;let c=Math.min(...a.map(a=>a.startMs)),d=Math.max(...a.map(a=>a.endMs)),e=a.reduce((a,b)=>a+(b.endMs-b.startMs),0);h.push({id:b.id,agent:b.agent,projectName:b.projectName,projectDir:b.projectDir,firstUserPreview:b.firstUserPreview,lastAgentPreview:b.lastAgentPreview,model:b.model,segments:a,startMs:c,endMs:d,activeMs:e,totalUsage:b.totalUsage})}h.sort((a,b)=>a.startMs-b.startMs);let i=[];for(let a of h)for(let b of a.segments)i.push({ms:b.startMs,delta:1}),i.push({ms:b.endMs,delta:-1});i.sort((a,b)=>a.ms-b.ms||b.delta-a.delta);let j=0,k=0;for(let a of i)(j+=a.delta)>k&&(k=j);return{date:b,sessions:h,dayStartMs:f,dayEndMs:g,peakActiveParallelism:k}},"canonicalProjectName",0,f,"computeBurstsFromSessions",0,function(a,b={}){let c=[];for(let b of a)b.activeSegments&&0!==b.activeSegments.length&&c.push({id:b.id,projectDir:b.projectDir,segments:b.activeSegments});return m(c,b)},"computeParallelismBursts",0,function(a,b={}){return m(a.sessions,b)},"dailyActivity",0,function(a){let b,d;if(0===a.length)return[];let e=new Map,f=a=>{(!b||a<b)&&(b=a),(!d||a>d)&&(d=a);let c=e.get(a)??h(a);return e.set(a,c),c};for(let b of a){let a=function(a){if(!a.firstTimestamp)return;let b=Date.parse(a.firstTimestamp);if(!Number.isNaN(b))return c(b)}(b);if(a){let c=f(a);c.toolCalls+=b.toolCallCount??0,c.turns+=b.turnCount??0,c.tokens.input+=b.totalUsage.input,c.tokens.output+=b.totalUsage.output,c.tokens.cacheRead+=b.totalUsage.cacheRead,c.tokens.cacheWrite+=b.totalUsage.cacheWrite,c.durationMs+=b.durationMs??0}let d=b.activeSegments;if(d&&d.length>0){let a=new Set;for(let b of d){let d=b.startMs;for(;d<b.endMs;){let e=c(d);a.add(e);let g=new Date(d);g.setHours(24,0,0,0);let h=Math.min(g.getTime(),b.endMs),i=f(e);i.airTimeMs+=h-d,d=h}}for(let b of a){let a=f(b);a.sessions++}}else if(a){let c=f(a);c.sessions++,c.airTimeMs+=b.airTimeMs??0}}let g=b&&d?function(a,b){let[d,e,f]=a.split("-").map(Number),[g,h,i]=b.split("-").map(Number),j=new Date(d,e-1,f),k=new Date(g,h-1,i),l=[];for(let a=new Date(j);a<=k;a.setDate(a.getDate()+1))l.push(c(a.getTime()));return l}(b,d):[],i=[];for(let a of g)i.push(e.get(a)??h(a));let j=function(a){let b=[];for(let c of a)for(let a of c.activeSegments&&c.activeSegments.length>0?c.activeSegments:c.firstTimestamp&&c.lastTimestamp?(()=>{let a=Date.parse(c.firstTimestamp),b=Date.parse(c.lastTimestamp);return Number.isNaN(a)||Number.isNaN(b)||b<a?[]:[{startMs:a,endMs:b}]})():[])b.push({ms:a.startMs,delta:1,sessionId:c.id}),b.push({ms:a.endMs,delta:-1,sessionId:c.id});b.sort((a,b)=>a.ms-b.ms||b.delta-a.delta);let c=new Map,d=[];for(let a of b){if(1===a.delta)c.set(a.sessionId,(c.get(a.sessionId)??0)+1);else{let b=(c.get(a.sessionId)??0)-1;b<=0?c.delete(a.sessionId):c.set(a.sessionId,b)}d.push({atMs:a.ms,active:c.size,sessions:Array.from(c.keys()).slice(0,10)})}return d}(a),k=new Map;for(let a of j){let b=c(a.atMs),d=k.get(b)??0;a.active>d&&k.set(b,a.active)}for(let a of i)a.peakParallelism=k.get(a.date)??0;return i},"detectPrMarkers",0,function(a){let b=[],c=a.durationMs??0;for(let d of a.events){if("tool-call"!==d.role||"Bash"!==d.toolName)continue;let e=d.blocks.find(a=>a&&"type"in a&&"tool_use"===a.type);if(!e||"tool_use"!==e.type)continue;let f=e.input,g="string"==typeof f?.command?f.command:"";if(!i.test(g))continue;let h=g.match(k),l=g.match(j);b.push({sessionId:a.id,timestamp:d.timestamp??a.firstTimestamp??"",tOffsetMs:d.tOffsetMs,positionInSession:c>0&&void 0!==d.tOffsetMs?Math.min(1,Math.max(0,d.tOffsetMs/c)):void 0,command:g.slice(0,300),prNumber:l?Number(l[1]):void 0,title:h?.[1]})}return b},"groupByProject",0,function(a){let b=new Map;for(let c of a){let a=f(c.projectName),d=b.get(a);d||(d={projectDir:a,projectName:a,sessions:[],rawProjectDirs:[],worktreeCount:0,metrics:l([]),perAgent:[],lastActiveMs:void 0},b.set(a,d)),d.sessions.push(c),d.rawProjectDirs.includes(c.projectDir)||d.rawProjectDirs.push(c.projectDir);let e=c.lastTimestamp?Date.parse(c.lastTimestamp):void 0;e&&(!d.lastActiveMs||e>d.lastActiveMs)&&(d.lastActiveMs=e)}for(let a of b.values()){a.metrics=l(a.sessions);let b=new Set;for(let c of a.sessions){let a=g(c.projectName);a&&b.add(a)}a.worktreeCount=b.size;let c=new Map;for(let b of a.sessions){let a=b.agent??"claude-code",d=c.get(a);d||(d={agent:a,sessions:0},c.set(a,d)),d.sessions+=1}a.perAgent=Array.from(c.values()).sort((a,b)=>b.sessions-a.sessions)}return Array.from(b.values()).sort((a,b)=>(b.lastActiveMs??0)-(a.lastActiveMs??0))},"highLevelMetrics",0,l,"sessionAirTimeMs",0,function(a,b=18e4){let c=0;for(let d of a)void 0!==d.gapMs&&d.gapMs<=b&&(c+=d.gapMs);return c},"summarizeBursts",0,function(a){let b=0,d=0,e=0,f=new Set;for(let g of a)g.peak>b&&(b=g.peak),d+=g.endMs-g.startMs,g.crossProject&&e++,f.add(c(g.startMs));return{peakConcurrent:b,totalParallelMs:d,burstCount:a.length,crossProjectBurstCount:e,activeDayCount:f.size}},"toLocalDay",0,c,"worktreeName",0,g])},23895,88522,a=>{"use strict";var b=a.i(2157),c=a.i(60526),d=a.i(50227),e=a.i(30375),f=a.i(10687),g=a.i(98049),h=a.i(48024);let i=d.default.join(c.default.homedir(),".claude","projects");function j(a){return a.startsWith("-")?"/"+a.slice(1).replace(/-/g,"/"):a}async function k(a){let c=await b.promises.readFile(a,"utf8"),d=[];for(let a of c.split("\n")){let b=a.trim();if(b)try{d.push(JSON.parse(b))}catch{}}return d}function l(a){return a.replace(/\.jsonl$/i,"")}let m=new Map,n=new Map,o=new Map,p=null;async function q(a=i){let c;if(p&&p.root===a&&Date.now()-p.capturedAtMs<1e3)return p.files;try{c=await b.promises.readdir(a,{withFileTypes:!0})}catch{return[]}let e=c.filter(a=>a.isDirectory()).map(a=>a.name),f=(await Promise.all(e.map(async c=>{let e,f=d.default.join(a,c);try{e=await b.promises.readdir(f)}catch{return[]}let g=e.filter(a=>a.endsWith(".jsonl"));return(await Promise.all(g.map(async a=>{let e=d.default.join(f,a);try{let d=await b.promises.stat(e);return{projectDir:c,fileName:a,fullPath:e,mtimeMs:d.mtimeMs,sizeBytes:d.size}}catch{return null}}))).filter(a=>null!==a)}))).flat();return p={files:f,capturedAtMs:Date.now(),root:a},f}async function r(a=i){let b=await q(a),c=(await Promise.all(b.map(async a=>{let b,c=o.get(a.fullPath);if(c&&c.mtimeMs===a.mtimeMs&&c.sizeBytes===a.sizeBytes)return c.events;try{b=await k(a.fullPath)}catch{return[]}let d=new Map;for(let c of b){if(!c||"object"!=typeof c||"assistant"!==c.type)continue;let b="string"==typeof c.timestamp?c.timestamp:void 0;if(!b)continue;let e=c.message;if(!e)continue;let g=e.usage;if(!g)continue;let h=(0,f.modelFamily)("string"==typeof e.model?e.model:void 0);if(null===h)continue;let i="string"==typeof e.id?e.id:`__noid_${a.fullPath}_${b}`,j=g.cache_creation??{},k=a=>"number"==typeof a?a:0;d.set(i,{ts:b,family:h,input:k(g.input_tokens),output:k(g.output_tokens),cacheRead:k(g.cache_read_input_tokens),cache_1h:k(j.ephemeral_1h_input_tokens),cache_5m:k(j.ephemeral_5m_input_tokens)})}let e=Array.from(d.values());return o.set(a.fullPath,{events:e,mtimeMs:a.mtimeMs,sizeBytes:a.sizeBytes}),e}))).flat();return c.sort((a,b)=>a.ts.localeCompare(b.ts)),c}let s={input:0,output:0,cacheRead:0,cacheWrite:0};function t(a,b,c){for(let d of a){if(!d||"object"!=typeof d||"assistant"!==d.type)continue;let a=d.message;if(!a)continue;let e="string"==typeof a.id?a.id:void 0,f="string"==typeof d.requestId?d.requestId:void 0,g=null!=e&&null!=f?`${e}:${f}`:void 0;if(g&&b.has(g))continue;g&&b.add(g);let h=a.usage;if(h){let a=a=>"number"==typeof a?a:0;c.input+=a(h.input_tokens),c.output+=a(h.output_tokens),c.cacheRead+=a(h.cache_read_input_tokens),c.cacheWrite+=a(h.cache_creation_input_tokens)}}}async function u(a,c,e){let f,g={...s},h=new Set;t(a,h,g);let i=d.default.join(c,e,"subagents");try{f=await b.promises.readdir(i)}catch{return g}let j=f.filter(a=>a.endsWith(".jsonl"));return 0===j.length||await Promise.all(j.map(async a=>{try{let b=await k(d.default.join(i,a));t(b,h,g)}catch{}})),g}async function v(a){let b=m.get(a.fullPath);if(b&&b.mtimeMs===a.mtimeMs&&b.sizeBytes===a.sizeBytes)return b.meta;try{let b=await k(a.fullPath),{meta:c}=(0,g.parseTranscript)(b),e=l(a.fileName),f=d.default.dirname(a.fullPath);c.totalUsage=await u(b,f,e);let h={...c,id:e,filePath:a.fullPath,projectDir:a.projectDir,projectName:c.cwd??j(a.projectDir)};return m.set(a.fullPath,{meta:h,mtimeMs:a.mtimeMs,sizeBytes:a.sizeBytes}),h}catch{return null}}async function w(a){let b=n.get(a.fullPath);if(b&&b.mtimeMs===a.mtimeMs&&b.sizeBytes===a.sizeBytes)return b.detail;try{let b=await k(a.fullPath),{meta:c,events:d}=(0,g.parseTranscript)(b),e={...c,id:l(a.fileName),filePath:a.fullPath,projectDir:a.projectDir,projectName:c.cwd??j(a.projectDir),events:d};n.set(a.fullPath,{detail:e,mtimeMs:a.mtimeMs,sizeBytes:a.sizeBytes});let f={...e};return delete f.events,m.set(a.fullPath,{meta:f,mtimeMs:a.mtimeMs,sizeBytes:a.sizeBytes}),e}catch{return null}}async function x(a={}){let{root:b=i,limit:c=500,projectDir:d}=a,e=await q(b);d&&(e=e.filter(a=>a.projectDir===d)),e.sort((a,b)=>b.mtimeMs-a.mtimeMs);let f=e.slice(0,c);return(await Promise.all(f.map(a=>v(a)))).filter(a=>null!==a)}async function y(a,b={}){let{root:c=i}=b,e=(await q(c)).find(b=>l(b.fileName)===a);if(!e)return null;let f=await w(e);if(!f)return f;let g=f.firstTimestamp?Date.parse(f.firstTimestamp):void 0,h=d.default.join(d.default.dirname(e.fullPath),l(e.fileName),"subagents"),j=await z(h,g,f.events);return{...f,subagents:j}}async function z(a,c,e){let f;try{f=await b.promises.readdir(a)}catch{return[]}let g=new Map,h=[];for(let a of e)if("tool-call"===a.role&&"Agent"===a.toolName)for(let b of a.blocks){if(b?.type!=="tool_use"||"Agent"!==b.name)continue;let c=b.input??{},d="string"==typeof c.description?c.description:void 0,e=a.timestamp?Date.parse(a.timestamp):void 0,f={toolUseId:b.id,parentUuid:a.uuid??"",runInBackground:!0===c.run_in_background,prompt:"string"==typeof c.prompt?c.prompt:void 0,tsMs:e};d&&g.set(d,f),void 0!==e&&h.push(f)}h.sort((a,b)=>(a.tsMs??0)-(b.tsMs??0));let i=f.filter(a=>a.startsWith("agent-")&&a.endsWith(".jsonl"));return(await Promise.all(i.map(async e=>{let f,i=e.replace(/^agent-/,"").replace(/\.jsonl$/,""),j=d.default.join(a,e),l=d.default.join(a,`agent-${i}.meta.json`),m={};try{let a=await b.promises.readFile(l,"utf8");m=JSON.parse(a)}catch{}try{f=await k(j)}catch{return null}let n=function(a){let b,c,d,e,f,g={...s},h=new Set,i=0,j=0,k=0,l=new Map;for(let m of a){if(!m||"object"!=typeof m)continue;i++;let a="string"==typeof m.timestamp?Date.parse(m.timestamp):NaN;if(!Number.isNaN(a)&&((void 0===b||a<b)&&(b=a),(void 0===c||a>c)&&(c=a)),void 0===f&&"user"===m.type&&(null===m.parentUuid||void 0===m.parentUuid)){let a=m.message,b=a?.content;if("string"==typeof b)f=b;else if(Array.isArray(b)){let a=b.find(a=>a&&"object"==typeof a&&"text"===a.type);a?.text&&(f=a.text)}}if("assistant"===m.type){let a=m.message;if(!a)continue;e||"string"!=typeof a.model||(e=a.model);let b="string"==typeof a.id?a.id:void 0,c="string"==typeof m.requestId?m.requestId:void 0,f=null!=b&&null!=c?`${b}:${c}`:void 0,i=!f||!h.has(f);if(f&&i&&h.add(f),i){j++;let b=a.usage;if(b){let a=a=>"number"==typeof a?a:0;g.input+=a(b.input_tokens),g.output+=a(b.output_tokens),g.cacheRead+=a(b.cache_read_input_tokens),g.cacheWrite+=a(b.cache_creation_input_tokens)}}let n=a.content;if(Array.isArray(n))for(let a of n)a&&"object"==typeof a&&("text"===a.type&&"string"==typeof a.text?d=a.text:"tool_use"===a.type&&"string"==typeof a.name&&(k++,l.set(a.name,(l.get(a.name)??0)+1)))}}let m=Array.from(l.entries()).map(([a,b])=>({name:a,count:b})).sort((a,b)=>b.count-a.count);return{startMs:b,endMs:c,totalUsage:g,eventCount:i,finalPreview:void 0!==d?d.replace(/\s+/g," ").trim().slice(0,240):void 0,finalText:d,model:e,toolCalls:m,toolCallCount:k,assistantMessageCount:j,initialPrompt:f}}(f),o=m.description&&m.description.trim().length>0?m.description:void 0,p=o?g.get(o):function(a){let b;if(void 0===a)return;let c=1/0;for(let d of h){if(void 0===d.tsMs)continue;let e=Math.abs(a-d.tsMs);e<c&&e<=2e3&&(b=d,c=e)}return b}(n.startMs),q=o??(n.initialPrompt?n.initialPrompt.replace(/\s+/g," ").trim().slice(0,80):"(no description)"),r=p?.prompt??n.initialPrompt,t=void 0!==c&&void 0!==n.startMs?Math.max(0,n.startMs-c):void 0,u=void 0!==c&&void 0!==n.endMs?Math.max(0,n.endMs-c):void 0,v=void 0!==n.startMs&&void 0!==n.endMs?n.endMs-n.startMs:void 0;return{agentId:i,agentType:m.agentType??"unknown",description:q,startMs:n.startMs,endMs:n.endMs,durationMs:v,startTOffsetMs:t,endTOffsetMs:u,eventCount:n.eventCount,totalUsage:n.totalUsage,parentUuid:p?.parentUuid,parentToolUseId:p?.toolUseId,runInBackground:p?.runInBackground,prompt:r,finalPreview:n.finalPreview,finalText:n.finalText,model:n.model,toolCalls:n.toolCalls,toolCallCount:n.toolCallCount,assistantMessageCount:n.assistantMessageCount}}))).filter(a=>null!==a).sort((a,b)=>(a.startMs??0)-(b.startMs??0))}async function A(a=i){let b=await q(a),c=new Map;for(let a of b){let b=c.get(a.projectDir)??{count:0,lastActiveMs:0};b.count++,a.mtimeMs>b.lastActiveMs&&(b.lastActiveMs=a.mtimeMs),c.set(a.projectDir,b)}let d=a=>{for(let[,b]of m.entries())if(b.meta.projectDir===a&&b.meta.cwd)return b.meta.cwd},e=new Map;for(let[a,{count:b,lastActiveMs:f}]of c){let c=d(a)??j(a),g=(0,h.canonicalProjectName)(c),i=(0,h.worktreeName)(c),k=e.get(g)??{canonicalName:g,count:0,lastActiveMs:0,worktreeBranches:new Set};k.count+=b,f>k.lastActiveMs&&(k.lastActiveMs=f),i&&k.worktreeBranches.add(i),e.set(g,k)}return Array.from(e.values()).map(a=>({projectDir:a.canonicalName,projectName:a.canonicalName,sessionCount:a.count,lastActiveMs:a.lastActiveMs,worktreeCount:a.worktreeBranches.size})).sort((a,b)=>b.lastActiveMs-a.lastActiveMs)}async function B(a,b={}){let{root:c=i}=b,d=await x({root:c}),e=d.find(b=>b.sessionId===a);if(!e||!e.teamName)return null;let f=e.teamName,g=d.filter(a=>a.teamName===f&&!a.filePath.includes("/subagents/")),h=await Promise.all(g.map(a=>y(a.sessionId,{root:c}))),j=new Map;g.forEach((a,b)=>{let c=h[b];c&&j.set(a.sessionId,c)});let k=(function(a,b){let c=new Map;for(let b of a){if(!b.teamName)continue;let a=c.get(b.teamName)??[];a.push(b),c.set(b.teamName,a)}let d=[];for(let[a,e]of c){let c=function(a,b,c){let d,e=b.filter(a=>a.isTeamLead);if(0===e.length)return null;for(let a of e){let b=c.get(a.sessionId);if(b&&function(a){for(let b of a)if("tool-call"===b.role&&"TeamCreate"===b.toolName)return!0;return!1}(b.events)){d=a;break}}d||(d=[...e].sort((a,b)=>Date.parse(a.firstTimestamp??"")-Date.parse(b.firstTimestamp??""))[0]);let f=new Map;for(let a of b)f.set(a.sessionId,a.agentName);let g=b.filter(a=>a.sessionId!==d.sessionId).sort((a,b)=>Date.parse(a.firstTimestamp??"")-Date.parse(b.firstTimestamp??"")),h=new Map;for(let a of g)a.agentName&&h.set(a.agentName,a.sessionId);let i=[];for(let a of b){let b=c.get(a.sessionId);if(!b)continue;let e=a.sessionId,f=a.agentName??"team-lead";for(let a of b.events){let b=function(a){if("tool-call"!==a.role||"SendMessage"!==a.toolName)return null;for(let b of a.blocks){if(!b||"object"!=typeof b||"tool_use"!==b.type)continue;let a=b.input??{},c="string"==typeof a.to?a.to:"",d="string"==typeof a.message?a.message:"";if(!c)break;return{to:c,body:d}}return null}(a);if(!b)continue;let c=b.to,g="team-lead"===c?d.sessionId:h.get(c)??"";i.push({tsMs:a.timestamp?Date.parse(a.timestamp):0,fromSessionId:e,fromTeammateId:f,toSessionId:g,toTeammateId:c,body:b.body,kind:"message"})}}i.sort((a,b)=>a.tsMs-b.tsMs);let j=[];for(let a of b)a.firstTimestamp&&j.push(Date.parse(a.firstTimestamp)),a.lastTimestamp&&j.push(Date.parse(a.lastTimestamp));let k=j.length?Math.min(...j):0,l=j.length?Math.max(...j):0;return{teamName:a,leadSessionId:d.sessionId,memberSessionIds:g.map(a=>a.sessionId),agentNameBySessionId:f,messages:i,firstEventMs:k,lastEventMs:l}}(a,e,b);c&&d.push(c)}return d})(g,j).find(a=>a.teamName===f);return k?{view:k,details:j}:null}async function C(a,b={}){let{root:c=i}=b,d=await x({root:c}),e=d.find(b=>b.sessionId===a);if(!e||!e.teamName||!e.agentName||e.isTeamLead)return null;let f=d.filter(a=>a.teamName===e.teamName&&a.isTeamLead&&!a.filePath.includes("/subagents/"));return 0===f.length?null:{leadSessionId:f[0].sessionId,teamName:e.teamName,agentName:e.agentName}}let D={...e.CLAUDE_CODE_METADATA,defaultRoot:i,async listSessions(a){let b=await x(a);for(let a of b)a.agent||(a.agent="claude-code");return b},async getSession(a,b){let c=await y(a,b);return c&&!c.agent&&(c.agent="claude-code"),c}};a.s(["DEFAULT_ROOT",0,i,"claudeCodeSource",0,D,"findTeamLead",0,C,"listProjects",0,A,"loadCalibrationEvents",0,r,"loadTeamForSession",0,B,"walkJsonlFiles",0,q],88522);let E=d.default.join(c.default.homedir(),".codex","sessions"),F=/^rollout-(\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2})-([0-9a-f-]+)\.jsonl$/;async function G(a){return b.promises.readdir(a).catch(()=>[])}async function H(a){let c=[];for(let e of(await G(a))){if(!/^\d{4}$/.test(e))continue;let f=d.default.join(a,e);for(let a of(await G(f))){if(!/^\d{2}$/.test(a))continue;let e=d.default.join(f,a);for(let a of(await G(e))){if(!/^\d{2}$/.test(a))continue;let f=d.default.join(e,a);for(let a of(await G(f))){let e=F.exec(a);if(!e)continue;let g=d.default.join(f,a),h=await b.promises.stat(g).catch(()=>null);h&&c.push({filePath:g,sessionId:e[2],mtimeMs:h.mtimeMs,sizeBytes:h.size})}}}}return c}async function I(a){let c=await b.promises.readFile(a,"utf8"),d=[];for(let a of c.split("\n")){let b=a.trim();if(b)try{d.push(JSON.parse(b))}catch{}}return d}function J(a){return a.replace(/\s+/g," ").trim().slice(0,200)}function K(a,b){let c,d,e,f,g,i,j,k=[],l={input:0,output:0,cacheRead:0,cacheWrite:0},m=0,n=0,o=[],p=0;for(let a of b){if("object"!=typeof a||null===a)continue;let b="string"==typeof a.timestamp?a.timestamp:void 0;if(b){c||(c=b),d=b;let a=Date.parse(b);Number.isFinite(a)&&o.push(a)}let h="string"==typeof a.type?a.type:"",r=a.payload??{},s="string"==typeof r.type?r.type:"";if("session_meta"===h){"string"==typeof r.cwd&&(e=r.cwd);continue}if("turn_context"===h){"string"==typeof r.cwd&&(e=r.cwd),"string"==typeof r.model&&(f=r.model);continue}if("event_msg"===h&&"token_count"===s){let a=r.info??null,b=a?.total_token_usage??null;b&&(l.input=L(b.input_tokens)??l.input,l.output=L(b.output_tokens)??l.output,l.cacheRead=L(b.cached_input_tokens)??l.cacheRead);continue}if("event_msg"===h&&"user_message"===s){let c="string"==typeof r.message?r.message:"",d=J(c);c&&(g||(g=d),i=d,n+=1),k.push({index:p++,timestamp:b,role:"user",rawType:"event_msg/user_message",preview:d,blocks:c?[{type:"text",text:c}]:[],raw:a});continue}if("event_msg"===h&&"agent_message"===s){let c="string"==typeof r.message?r.message:"",d=J(c);c&&(j=d),k.push({index:p++,timestamp:b,role:"agent",rawType:"event_msg/agent_message",preview:d,blocks:c?[{type:"text",text:c}]:[],model:f,raw:a});continue}if("response_item"===h&&"reasoning"===s){let c=(r.summary??[]).map(a=>"string"==typeof a.text?a.text:"").join("\n").trim();k.push({index:p++,timestamp:b,role:"agent-thinking",rawType:"response_item/reasoning",preview:J(c),blocks:c?[{type:"thinking",thinking:c}]:[],model:f,raw:a});continue}if("response_item"===h&&"message"===s&&"assistant"===r.role){let c=(r.content??[]).map(a=>"string"==typeof a.text?a.text:"").join("\n").trim(),d=J(c);c&&(j=d),k.push({index:p++,timestamp:b,role:"agent",rawType:"response_item/message",preview:d,blocks:c?[{type:"text",text:c}]:[],model:f,raw:a});continue}if("response_item"===h&&"function_call"===s){var q;let c="string"==typeof r.name?r.name:"(unknown)",d="string"==typeof r.call_id?r.call_id:void 0,e="string"==typeof r.arguments?r.arguments:"",g=function(a){if(!a)return null;try{return JSON.parse(a)}catch{return a}}(e);m+=1,k.push({index:p++,timestamp:b,role:"tool-call",rawType:"response_item/function_call",preview:`${c}(${(q=e).length<=80?q:q.slice(0,79)+"…"})`,blocks:[{type:"tool_use",id:d??`codex-${p}`,name:c,input:g}],toolName:c,toolUseId:d,model:f,raw:a});continue}if("response_item"===h&&"function_call_output"===s){let c="string"==typeof r.call_id?r.call_id:void 0,d="string"==typeof r.output?r.output:"",e=/process exited with code [1-9]/i.test(d);k.push({index:p++,timestamp:b,role:"tool-result",rawType:"response_item/function_call_output",preview:J(d),blocks:[{type:"tool_result",tool_use_id:c??"",content:d,is_error:e}],toolUseId:c,toolResult:d,raw:a});continue}k.push({index:p++,timestamp:b,role:"meta",rawType:s?`${h}/${s}`:h,preview:"",blocks:[],raw:a})}if(l.input>0||l.output>0){let b=-1;for(let a=k.length-1;a>=0;a--){let c=k[a].role;if("agent"===c||"agent-thinking"===c||"tool-call"===c){b=a;break}}if(b>=0){let c=k[b];c.messageId=`codex-${a.sessionId}-total`,c.usage={input:l.input,output:l.output,cacheRead:l.cacheRead,cacheWrite:0}}}let r=c?Date.parse(c):void 0;if(void 0!==r&&Number.isFinite(r)){let a;for(let b of k){if(!b.timestamp)continue;let c=Date.parse(b.timestamp);Number.isFinite(c)&&(b.tOffsetMs=Math.max(0,c-r),void 0!==a&&(b.gapMs=Math.max(0,c-a)),a=c)}}let s=function(a){if(0===a.length)return[];let b=[...a].sort((a,b)=>a-b),c=[],d=b[0],e=b[0];for(let a=1;a<b.length;a++)b[a]-e>18e4&&(c.push({startMs:d,endMs:e}),d=b[a]),e=b[a];return c.push({startMs:d,endMs:e}),c}(o),t=s.reduce((a,b)=>a+(b.endMs-b.startMs),0),u=c&&d?Date.parse(d)-Date.parse(c):void 0,v=e?(0,h.canonicalProjectName)(e):"(unknown)",w=e?e.replace(/^\//,"-").replace(/\//g,"-"):"(unknown)";return{meta:{agent:"codex",id:a.sessionId,filePath:a.filePath,projectName:v,projectDir:w,sessionId:a.sessionId,firstTimestamp:c,lastTimestamp:d,durationMs:u&&Number.isFinite(u)?u:void 0,eventCount:k.length,model:f,cwd:e,totalUsage:l,status:"idle",firstUserPreview:g,lastUserPreview:i,lastAgentPreview:j,toolCallCount:m,turnCount:n,airTimeMs:t,activeSegments:s},events:k}}function L(a){return"number"==typeof a&&Number.isFinite(a)?a:void 0}let M=new Map,N=new Map;async function O(a={}){let b=a.root??E,c=await H(b),d=[];for(let a of c){let b=M.get(a.filePath);if(b&&b.mtimeMs===a.mtimeMs&&b.sizeBytes===a.sizeBytes){d.push(b.meta);continue}try{let b=await I(a.filePath),{meta:c}=K(a,b);M.set(a.filePath,{meta:c,mtimeMs:a.mtimeMs,sizeBytes:a.sizeBytes}),d.push(c)}catch{}}return(d.sort((a,b)=>(b.firstTimestamp??"").localeCompare(a.firstTimestamp??"")),void 0!==a.limit)?d.slice(0,a.limit):d}async function P(a,b={}){let c=b.root??E,d=(await H(c)).find(b=>b.sessionId===a);if(!d)return null;let e=N.get(d.filePath);if(e&&e.mtimeMs===d.mtimeMs&&e.sizeBytes===d.sizeBytes)return e.detail;let f=await I(d.filePath),{meta:g,events:h}=K(d,f),i={...g,events:h};return N.set(d.filePath,{detail:i,mtimeMs:d.mtimeMs,sizeBytes:d.sizeBytes}),i}async function Q(a={}){let b=a.root??E,c=await H(b);if(0===c.length)return null;for(let a of(c.sort((a,b)=>b.mtimeMs-a.mtimeMs),c)){let b=await I(a.filePath);for(let c=b.length-1;c>=0;c--){let d=b[c];if("object"!=typeof d||null===d||"event_msg"!==d.type)continue;let e=d.payload??{};if("token_count"!==e.type)continue;let f=e.rate_limits??null;if(!f)continue;let g=f.primary??null,h=f.secondary??null,i=L(g?.used_percent),j=L(h?.used_percent),k=L(g?.resets_at),l=L(h?.resets_at),m="string"==typeof f.plan_type?f.plan_type:null;return{five_hour:{utilization:i??null,resets_at:void 0!==k?new Date(1e3*k).toISOString():null},seven_day:{utilization:j??null,resets_at:void 0!==l?new Date(1e3*l).toISOString():null},plan_type:m,source_path:a.filePath}}}return null}let R=[D,{...e.CODEX_METADATA,defaultRoot:E,listSessions:async a=>O(a),getSession:async a=>P(a),async usagePoller(){let a=await Q();return a?{captured_at:new Date().toISOString(),agent:"codex",five_hour:a.five_hour,seven_day:a.seven_day}:null}}];async function S(a={}){let b=await Promise.all(R.map(b=>b.listSessions(a))),c=[];for(let a of b)c.push(...a);return(c.sort((a,b)=>(b.firstTimestamp??"").localeCompare(a.firstTimestamp??"")),void 0!==a.limit)?c.slice(0,a.limit):c}async function T(a){for(let b of R){let c=await b.getSession(a);if(c)return c}return null}let U=d.default.join(c.default.homedir(),".cclens","usage.jsonl");async function V(){let a;try{a=await b.promises.readFile(U,"utf8")}catch{return[]}let c=[];for(let b of a.split("\n")){let a=b.trim();if(a)try{let b=JSON.parse(a);if(!b.captured_at||(b.agent??"claude-code")!=="claude-code")continue;c.push(b)}catch{}}return c.sort((a,b)=>(a.captured_at??"").localeCompare(b.captured_at??"")),c}function W(a,b,c){if(0===b.length)return null;for(let[d,e]of b)if(d>=a&&e>a){let b=e,d=36e5*c;for(;b-d>a;)b-=d;return b}let d=b[b.length-1][1],e=36e5*c;for(;d<a;)d+=e;return d}async function X(a="pro-max-20x",b=i,c=30){let[d,e]=await Promise.all([r(b),V()]);return function(a,b,c="pro-max-20x",d=30){if(0===b.length||0===a.length)return null;let e=(0,f.buildSpendIndex)(a),g=f.RATE_PER_PCT_7D[c],h=f.RATE_PER_PCT_5H[c],i=(0,f.groupSnapsByCycle)(b,a=>a.five_hour),j=(0,f.groupSnapsByCycle)(b,a=>a.seven_day),k=(0,f.collectSnapPairRates)(j,e,{minTravelPct:1,minDollars:10,maxGapMs:864e5}),l=(0,f.collectSnapPairRates)(i,e,{minTravelPct:1,minDollars:1,maxGapMs:72e5}),m=(0,f.userSoloRate)(k,.9)??g,n=(0,f.userSoloRate)(l,.9)??h,o=new Set(k.map(a=>a.cycleEndMs)).size,p=new Set(l.map(a=>a.cycleEndMs)).size,q=[],r=[];for(let a of b){let b=Date.parse(a.captured_at);if(!Number.isNaN(b)){if(a.five_hour?.resets_at){let c=Date.parse(a.five_hour.resets_at);Number.isNaN(c)||q.push([b,c])}if(a.seven_day?.resets_at){let c=Date.parse(a.seven_day.resets_at);Number.isNaN(c)||r.push([b,c])}}}let s=new Map;for(let a of b){let b=Date.parse(a.captured_at);if(Number.isNaN(b))continue;let c=Math.floor(b/6e4);s.set(c,[a.five_hour?.utilization??null,a.seven_day?.utilization??null])}let t=Date.parse(b[0].captured_at),u=Date.parse(b[b.length-1].captured_at),v=Math.max(Date.parse(a[0].ts),t-12096e5),w=6e4*d,x=[],y=v;for(;y<=u;){let a=null,b=null;for(let c=0;c<d;c++){let d=Math.floor((y+6e4*c)/6e4),e=s.get(d);if(e){a=e[0],b=e[1];break}}let c=W(y,q,5),g=W(y,r,168),h=null!=c?36e5*Math.round(c/36e5):null,k=null!=g?36e5*Math.round(g/36e5):null,l=null!=h?i.get(h)??[]:[],o=null!=k?j.get(k)??[]:[],p=h??y+18e6,t=k??y+6048e5,u=(0,f.predictAnchored)(e,l,n,p,5,y),v=(0,f.predictAnchored)(e,o,m,t,168,y);x.push({ts:new Date(y).toISOString(),real_5h:a,pred_5h:Math.max(0,Math.min(200,u)),real_7d:b,pred_7d:Math.max(0,Math.min(200,v)),cycle_end_5h:null!=h?new Date(h).toISOString():null,cycle_end_7d:null!=k?new Date(k).toISOString():null}),y+=w}let z=k.length>=3?"user_calibrated":"tier_default";return{model:`anchored-${c}`,tier:c,rate_per_pct:m,rate_per_pct_5h:n,rate_per_pct_7d:m,rate_source_5h:l.length>=3?"user_calibrated":"tier_default",rate_source_7d:z,cycles_used_5h:p,cycles_used_7d:o,granularity_min:d,curve:x,first_snapshot_ts:b[0].captured_at??null,real_count:x.filter(a=>null!==a.real_7d).length,total_count:x.length}}(d,e,a,c)}a.s(["agentSources",0,R,"getAnySession",0,T,"listAllSessions",0,S,"loadCalibrationCurve",0,X],23895)},9117,a=>{"use strict";a.i(30375),a.s([])}];
|
|
1
|
+
module.exports=[30375,a=>{"use strict";let b={kind:"claude-code",displayName:"Claude Code",shortLabel:"Claude",accentColor:"var(--af-accent)",iconChar:"✦"},c={kind:"codex",displayName:"Codex (OpenAI)",shortLabel:"Codex",accentColor:"rgb(16, 163, 127)",iconChar:"◆"},d={kind:"gemini",displayName:"Gemini CLI",shortLabel:"Gemini",accentColor:"rgb(124, 92, 246)",iconChar:"✺"},e=[b,c,d],f=new Set(e.map(a=>a.kind));a.s(["CLAUDE_CODE_METADATA",0,b,"CODEX_METADATA",0,c,"GEMINI_METADATA",0,d,"agentMetadata",0,e,"getAgentMetadata",0,function(a){return e.find(b=>b.kind===a)},"isAgentKind",0,function(a){return"string"==typeof a&&f.has(a)}])},10687,98049,a=>{"use strict";let b={sonnet:{input:3,output:15,cacheRead:.3,cache_1h:3.75,cache_5m:3.75},opus:{input:5,output:25,cacheRead:.5,cache_1h:6.25,cache_5m:6.25},haiku:{input:1,output:5,cacheRead:.1,cache_1h:1.25,cache_5m:1.25}};function c(a,b,c){let d=0;for(;d<c;){let e=d+c>>>1;a[e]<b?d=e+1:c=e}return d}function d(a,b,d){if(d<=b)return 0;let e=a.ts.length,f=c(a.ts,b,e),g=c(a.ts,d,e);return a.cum[g]-a.cum[f]}a.s(["RATE_PER_PCT_5H",0,{pro:.2,"pro-max":.4,"pro-max-20x":2,custom:2},"RATE_PER_PCT_7D",0,{pro:1.2,"pro-max":2.4,"pro-max-20x":12,custom:12},"buildSpendIndex",0,function(a){let c=a.map(a=>({e:a,t:Date.parse(a.ts)})).filter(a=>!Number.isNaN(a.t)).sort((a,b)=>a.t-b.t),d=new Float64Array(c.length),e=new Float64Array(c.length+1),f=0;for(let a=0;a<c.length;a++)d[a]=c[a].t,e[a]=f,f+=function(a){let c=b[a.family];return(a.input*c.input+a.output*c.output+a.cacheRead*c.cacheRead+a.cache_1h*c.cache_1h+a.cache_5m*c.cache_5m)/1e6}(c[a].e);return e[c.length]=f,{ts:d,cum:e}},"collectSnapPairRates",0,function(a,b,c){let e=c?.minTravelPct??1,f=c?.minDollars??1,g=c?.maxGapMs??864e5,h=[];for(let[c,i]of a)for(let a=1;a<i.length;a++){let j=i[a-1],k=i[a],l=k.ts-j.ts,m=k.pct-j.pct;if(l<=0||l>g||m<e)continue;let n=d(b,j.ts,k.ts);n<f||h.push({cycleEndMs:c,rate:n/m,travel:m,dollars:n,gapMs:l})}return h},"groupSnapsByCycle",0,function(a,b){let c=new Map;for(let d of a){if(!d.captured_at)continue;let a=b(d);if(!a?.resets_at||"number"!=typeof a.utilization)continue;let e=Date.parse(d.captured_at),f=Date.parse(a.resets_at);if(Number.isNaN(e)||Number.isNaN(f))continue;let g=36e5*Math.round(f/36e5),h=c.get(g)??[];h.push({ts:e,pct:a.utilization}),c.set(g,h)}for(let a of c.values())a.sort((a,b)=>a.ts-b.ts);return c},"modelFamily",0,function(a){let b=(a??"").toLowerCase();return b&&"<synthetic>"!==b?b.includes("haiku")?"haiku":b.includes("opus")?"opus":b.includes("sonnet")?"sonnet":null:null},"predictAnchored",0,function(a,b,c,e,f,g){let h=e-36e5*f;if(c<=0&&(c=1),0===b.length)return Math.max(0,d(a,h,g)/c);let i=-1;for(let a=0;a<b.length;a++)if(b[a].ts<=g)i=a;else break;if(i>=0&&i+1<b.length){let c=b[i],e=b[i+1];if(e.pct===c.pct)return c.pct;let f=d(a,c.ts,e.ts);if(f<=0){let a=(g-c.ts)/(e.ts-c.ts);return c.pct+(e.pct-c.pct)*a}let h=d(a,c.ts,g);return c.pct+(e.pct-c.pct)*(h/f)}if(i>=0){let e=b[i];return e.pct+d(a,e.ts,g)/c}let j=b[0];if(g<=h)return 0;let k=d(a,h,j.ts);if(k<=0){let a=(g-h)/(j.ts-h);return j.pct*a}let l=d(a,h,g);return j.pct*(l/k)},"userSoloRate",0,function(a,b=.9){if(a.length<3)return null;let c=a.map(a=>a.rate).sort((a,b)=>a-b),d=Math.min(Math.floor(c.length*b),c.length-1);return c[d]}],10687);let e={input:0,output:0,cacheRead:0,cacheWrite:0};function f(a,b=200){let c=a.replace(/<[^>]+>/g,"").replace(/\s+/g," ").trim();return c.length>b?c.slice(0,b-1)+"…":c}let g=/^\s*<teammate-message\s+teammate_id="([^"]+)"[^>]*>([\s\S]*?)<\/teammate-message>/;function h(a){let b=a.match(g);if(!b)return;let c=b[1],d=b[2].trim(),e="message";if(d.startsWith("{"))try{let a=JSON.parse(d);"idle_notification"===a.type?e="idle-notification":"shutdown_request"===a.type?e="shutdown-request":"shutdown_approved"===a.type?e="shutdown-approved":"task_assignment"===a.type?e="task-assignment":"teammate_terminated"===a.type&&(e="teammate-terminated")}catch{}return{teammateId:c,body:d,kind:e}}function i(a){if(!a||"object"!=typeof a)return;let b=a=>"number"==typeof a?a:0;return{input:b(a.input_tokens),output:b(a.output_tokens),cacheRead:b(a.cache_read_input_tokens),cacheWrite:b(a.cache_creation_input_tokens)}}a.s(["parseTranscript",0,function(a){let b,c,d,g,j,k,l,m,n=[];for(let b=0;b<a.length;b++){let c=function(a,b){if(!a||"object"!=typeof a)return null;let c=String(a.type??""),d=a.uuid,e=a.parentUuid??null,g=a.timestamp;if("assistant"===c){let h,j,k,l=a.message??{},m=l.content??[],n=i(l.usage),o=l.model,p=a.requestId,q=l.id,r=l.stop_reason,s=m[0],t="agent";return s?.type==="thinking"?(t="agent-thinking",h="[thinking] "+f(s.thinking,140)):s?.type==="tool_use"?(t="tool-call",j=s.name,k=s.id,h=`${s.name} `+f(JSON.stringify(s.input??{}),100)):h=s?.type==="text"?f(s.text,200):`<assistant:${s?.type??"empty"}>`,{index:b,uuid:d,parentUuid:e,timestamp:g,role:t,rawType:c,preview:h,blocks:m,usage:n,model:o,requestId:p,messageId:q,stopReason:r,toolName:j,toolUseId:k,raw:a}}if("user"===c){let i=(a.message??{}).content;if("string"==typeof i){let j=h(i);return{index:b,uuid:d,parentUuid:e,timestamp:g,role:"user",rawType:c,preview:f(i,200),blocks:[{type:"text",text:i}],raw:a,teammateMessage:j}}if(Array.isArray(i)){let j=i[0];if(j?.type==="tool_result")return{index:b,uuid:d,parentUuid:e,timestamp:g,role:"tool-result",rawType:c,preview:f("string"==typeof j.content?j.content:JSON.stringify(j.content),200),blocks:i,toolUseId:j.tool_use_id,toolResult:a.toolUseResult,raw:a};let k=i.find(a=>a?.type==="text"),l=k?h(k.text):void 0;return{index:b,uuid:d,parentUuid:e,timestamp:g,role:"user",rawType:c,preview:k?f(k.text,200):f(JSON.stringify(i),200),blocks:i,raw:a,teammateMessage:l}}}if("attachment"===c){let h=a.attachment??{},i=String(h.type??"attachment"),j=`<attachment: ${i}>`;return"string"==typeof h.content&&h.content.length>0?j=`[${i}] `+f(h.content,140):Array.isArray(h.addedNames)&&(j=`[${i}] +${h.addedNames.length} names`),{index:b,uuid:d,parentUuid:e,timestamp:g,role:"system",rawType:c,preview:j,blocks:[{type:"text",text:JSON.stringify(h,null,2)}],attachmentType:i,raw:a}}return{index:b,uuid:d,parentUuid:e,timestamp:g,role:"meta",rawType:c||"unknown",preview:`${c}: ${f(JSON.stringify(a),140)}`,blocks:[{type:"text",text:JSON.stringify(a,null,2)}],raw:a}}(a[b],b);c&&n.push(c)}let o=n.map(a=>a.timestamp?Date.parse(a.timestamp):void 0).filter(a=>"number"==typeof a&&!Number.isNaN(a)),p=o.length?Math.min(...o):void 0,q=o.length?Math.max(...o):void 0,r=void 0!==p?new Date(p).toISOString():void 0,s=void 0!==q?new Date(q).toISOString():void 0;for(let a of n){if(!a.timestamp)continue;let b=Date.parse(a.timestamp);Number.isNaN(b)||void 0!==p&&(a.tOffsetMs=Math.max(0,b-p))}let t=n.filter(a=>{let b;return a.timestamp&&("user"===(b=a.role)||"agent"===b||"agent-thinking"===b||"tool-call"===b||"tool-result"===b)}).map(a=>({e:a,ms:Date.parse(a.timestamp)})).filter(a=>!Number.isNaN(a.ms)).sort((a,b)=>a.ms-b.ms);for(let a=1;a<t.length;a++)t[a].e.gapMs=Math.max(0,t[a].ms-t[a-1].ms);let u=n.filter(a=>a.timestamp).map(a=>Date.parse(a.timestamp)).filter(a=>!Number.isNaN(a)).sort((a,b)=>a-b),v=[],w=0;if(u.length>0){let a=u[0],b=u[0];for(let c=1;c<u.length;c++){let d=u[c],e=d-b;e>18e4?(v.push({startMs:a,endMs:b}),a=d):e>0&&(w+=e),b=d}v.push({startMs:a,endMs:b})}let x=new Map,y=[];for(let a of n){if(!a.timestamp)continue;let b=Date.parse(a.timestamp);if(!Number.isNaN(b)){if("assistant"===a.rawType&&a.usage&&a.messageId){let c=x.get(a.messageId);c?(c.siblings.push(a),b<c.ms&&(c.rep=a,c.ms=b)):x.set(a.messageId,{rep:a,ms:b,siblings:[a]})}else if("system"===a.rawType){let c=a.raw;if(c?.subtype!=="compact_boundary")continue;let d=c.compactMetadata??{};y.push({ms:b,trigger:"manual"===d.trigger?"manual":"auto",preTokens:"number"==typeof d.preTokens?d.preTokens:0})}}}let z=[...x.values()].sort((a,b)=>a.ms-b.ms);y.sort((a,b)=>a.ms-b.ms);let A=0,B=0,C=(a,b)=>{for(let c of a.siblings)c.coldResume=b;A++,B+=b.writeTokens},D=new Set;for(let a of y){let b,c=z.find(b=>b.ms>a.ms&&(b.rep.usage?.cacheWrite??0)>=1e3);if(!c)continue;for(let c=z.length-1;c>=0;c--)if(z[c].ms<=a.ms){b=z[c].ms;break}let d=c.rep.usage,e=d.cacheWrite+d.cacheRead;C(c,{trigger:"compact",gapMs:void 0!==b?c.ms-b:0,writeTokens:d.cacheWrite,writeRatio:e>0?d.cacheWrite/e:0,compact:{trigger:a.trigger,preTokens:a.preTokens}}),D.add(c.rep.messageId)}for(let a=1;a<z.length;a++){let b=z[a-1],c=z[a];if(D.has(c.rep.messageId))continue;let d=c.rep.usage,e=d.cacheWrite+d.cacheRead,f=e>0?d.cacheWrite/e:0,g=c.ms-b.ms;g>3e5&&d.cacheWrite>=1e3&&f>=.3&&C(c,{trigger:"idle",gapMs:g,writeTokens:d.cacheWrite,writeRatio:f})}let E={...e},F=new Set,G="",H=!1,I=!1,J=0,K=0,L=0,M=0,N=new Set;for(let a of n){if("tool-call"===a.role){J++;let b=a.blocks.find(a=>a&&"tool_use"===a.type);if(b){let a=b.input??{};if("TeamCreate"===b.name&&(H=!0),"SendMessage"===b.name){let b="string"==typeof a.to?a.to:"";b&&"team-lead"!==b&&(I=!0)}let c="string"==typeof a.file_path?a.file_path:void 0;if("Edit"===b.name&&c){N.add(c);let b="string"==typeof a.old_string?a.old_string:"",d="string"==typeof a.new_string?a.new_string:"",e=b?b.split("\n").length:0,f=d?d.split("\n").length:0;L+=Math.max(0,f-e),M+=Math.max(0,e-f)}else if("Write"===b.name&&c){N.add(c);let b="string"==typeof a.content?a.content:"";L+=b?b.split("\n").length:0}}}if("user"===a.role){let b=a.raw?.message,c="string"==typeof b?.content?b.content:"",d=c.startsWith("<command-name>")||c.startsWith("<local-command-caveat>")||c.startsWith("Base directory for this skill:")||c.startsWith("<task-notification>"),e=void 0!==a.teammateMessage&&!j;d||e||(k||(k=a.teammateMessage?a.teammateMessage.body:a.preview),K++,m=a.preview)}"agent"===a.role&&(l=a.preview)}for(let e of a)if(e&&"object"==typeof e&&("string"!=typeof e.sessionId||G||(G=e.sessionId),"string"!=typeof e.cwd||c||(c=e.cwd),"string"!=typeof e.gitBranch||d||(d=e.gitBranch),"string"!=typeof e.teamName||g||(g=e.teamName),"string"!=typeof e.agentName||j||(j=e.agentName),"assistant"===e.type)){let a=e.message;if(a){"string"!=typeof a.model||b||(b=a.model);let c="string"==typeof a.id?a.id:void 0,d="string"==typeof e.requestId?e.requestId:void 0,f=null!=c?`${c}:${d??""}`:void 0;if(f&&F.has(f))continue;f&&F.add(f);let g=i(a.usage);g&&(E.input+=g.input,E.output+=g.output,E.cacheRead+=g.cacheRead,E.cacheWrite+=g.cacheWrite)}}return{events:n,meta:{sessionId:G,firstTimestamp:r,lastTimestamp:s,durationMs:void 0!==p&&void 0!==q?q-p:void 0,eventCount:n.length,model:b,cwd:c,gitBranch:d,totalUsage:E,status:"idle",firstUserPreview:k,lastUserPreview:m,lastAgentPreview:l,toolCallCount:J,turnCount:K,airTimeMs:w,activeSegments:v,linesAdded:L,linesRemoved:M,filesEdited:N.size,coldResumeCount:A,cacheRebuildTokens:B,teamName:g,agentName:j,isTeamLead:void 0!==g&&void 0===j&&(H||I)}}}],98049)},48024,a=>{"use strict";let b={input:0,output:0,cacheRead:0,cacheWrite:0};function c(a){let b=new Date(a),c=b.getFullYear(),d=String(b.getMonth()+1).padStart(2,"0"),e=String(b.getDate()).padStart(2,"0");return`${c}-${d}-${e}`}let d=["/.claude/worktrees/","/.worktrees/","/claude/worktrees/"];function e(a){for(let b of d){let c=a.lastIndexOf(b);if(c>=0)return{idx:c,marker:b}}return null}function f(a){let b=a.replace(/\/{2,}/g,"/"),c=e(b);return c?b.slice(0,c.idx):b}function g(a){let b=a.replace(/\/{2,}/g,"/"),c=e(b);if(!c)return null;let d=b.slice(c.idx+c.marker.length),f=d.indexOf("/");return f>=0?d.slice(0,f):d}function h(a){return{date:a,sessions:0,toolCalls:0,turns:0,tokens:{...b},durationMs:0,airTimeMs:0,peakParallelism:0}}let i=/gh\s+pr\s+create\b/i,j=/#(\d+)/,k=/--title\s+["']([^"']+)["']/;function l(a){let c={sessionCount:a.length,totalDurationMs:0,totalAirTimeMs:0,totalTokens:{...b},totalToolCalls:0,totalTurns:0,avgTurnsPerSession:0,avgDurationMs:0,totalLinesAdded:0,totalLinesRemoved:0,totalFilesEdited:0};for(let b of a)c.totalDurationMs+=b.durationMs??0,c.totalAirTimeMs+=b.airTimeMs??b.durationMs??0,c.totalTokens.input+=b.totalUsage.input,c.totalTokens.output+=b.totalUsage.output,c.totalTokens.cacheRead+=b.totalUsage.cacheRead,c.totalTokens.cacheWrite+=b.totalUsage.cacheWrite,c.totalToolCalls+=b.toolCallCount??0,c.totalTurns+=b.turnCount??0,c.totalLinesAdded+=b.linesAdded??0,c.totalLinesRemoved+=b.linesRemoved??0,c.totalFilesEdited+=b.filesEdited??0;return a.length>0&&(c.avgTurnsPerSession=c.totalTurns/a.length,c.avgDurationMs=c.totalDurationMs/a.length),c}function m(a,b){let c=b.minDurationMs??6e4,d=b.mergeGapMs??6e5,e=b.minActive??2,f=[];for(let b of a)for(let a of b.segments)a.endMs<=a.startMs||(f.push({ms:a.startMs,delta:1,sessionId:b.id}),f.push({ms:a.endMs,delta:-1,sessionId:b.id}));f.sort((a,b)=>a.ms-b.ms||b.delta-a.delta);let g=new Map,h=[],i=null;for(let a of f){if(1===a.delta)g.set(a.sessionId,(g.get(a.sessionId)??0)+1);else{let b=(g.get(a.sessionId)??0)-1;b<=0?g.delete(a.sessionId):g.set(a.sessionId,b)}let b=g.size;if(b>=e)if(i)for(let c of(i.endMs=a.ms,b>i.peak&&(i.peak=b),g.keys()))i.sessionIds.add(c);else i={startMs:a.ms,endMs:a.ms,peak:b,sessionIds:new Set(g.keys())};else i&&(i.endMs=a.ms,h.push(i),i=null)}i&&h.push(i);let j=h.filter(a=>a.endMs-a.startMs>=c),k=[];for(let a of j){let b=k[k.length-1];if(b&&a.startMs-b.endMs<=d)for(let c of(b.endMs=a.endMs,a.peak>b.peak&&(b.peak=a.peak),a.sessionIds))b.sessionIds.add(c);else k.push({startMs:a.startMs,endMs:a.endMs,peak:a.peak,sessionIds:new Set(a.sessionIds)})}let l=new Map;for(let b of a)l.set(b.id,b.projectDir);return k.map(a=>{let b=Array.from(new Set(Array.from(a.sessionIds).map(a=>l.get(a)).filter(a=>!!a)));return{startMs:a.startMs,endMs:a.endMs,peak:a.peak,sessionIds:Array.from(a.sessionIds),projectDirs:b,crossProject:b.length>1}})}a.s(["buildGanttDay",0,function(a,b){let[c,d,e]=b.split("-").map(Number),f=new Date(c,d-1,e).getTime(),g=new Date(c,d-1,e+1).getTime(),h=[];for(let b of a){let a=(function(a,b=18e4){let c=a.filter(a=>a.timestamp).map(a=>Date.parse(a.timestamp)).filter(a=>!Number.isNaN(a)).sort((a,b)=>a-b);if(0===c.length)return[];let d=[],e=c[0],f=c[0];for(let a=1;a<c.length;a++){let g=c[a];g-f>b&&(d.push({startMs:e,endMs:f}),e=g),f=g}return d.push({startMs:e,endMs:f}),d})(b.events).filter(a=>a.endMs>f&&a.startMs<g).map(a=>({startMs:Math.max(a.startMs,f),endMs:Math.min(a.endMs,g)}));if(0===a.length)continue;let c=Math.min(...a.map(a=>a.startMs)),d=Math.max(...a.map(a=>a.endMs)),e=a.reduce((a,b)=>a+(b.endMs-b.startMs),0);h.push({id:b.id,agent:b.agent,projectName:b.projectName,projectDir:b.projectDir,firstUserPreview:b.firstUserPreview,lastAgentPreview:b.lastAgentPreview,model:b.model,segments:a,startMs:c,endMs:d,activeMs:e,totalUsage:b.totalUsage})}h.sort((a,b)=>a.startMs-b.startMs);let i=[];for(let a of h)for(let b of a.segments)i.push({ms:b.startMs,delta:1}),i.push({ms:b.endMs,delta:-1});i.sort((a,b)=>a.ms-b.ms||b.delta-a.delta);let j=0,k=0;for(let a of i)(j+=a.delta)>k&&(k=j);return{date:b,sessions:h,dayStartMs:f,dayEndMs:g,peakActiveParallelism:k}},"canonicalProjectName",0,f,"computeBurstsFromSessions",0,function(a,b={}){let c=[];for(let b of a)b.activeSegments&&0!==b.activeSegments.length&&c.push({id:b.id,projectDir:b.projectDir,segments:b.activeSegments});return m(c,b)},"computeParallelismBursts",0,function(a,b={}){return m(a.sessions,b)},"dailyActivity",0,function(a){let b,d;if(0===a.length)return[];let e=new Map,f=a=>{(!b||a<b)&&(b=a),(!d||a>d)&&(d=a);let c=e.get(a)??h(a);return e.set(a,c),c};for(let b of a){let a=function(a){if(!a.firstTimestamp)return;let b=Date.parse(a.firstTimestamp);if(!Number.isNaN(b))return c(b)}(b);if(a){let c=f(a);c.toolCalls+=b.toolCallCount??0,c.turns+=b.turnCount??0,c.tokens.input+=b.totalUsage.input,c.tokens.output+=b.totalUsage.output,c.tokens.cacheRead+=b.totalUsage.cacheRead,c.tokens.cacheWrite+=b.totalUsage.cacheWrite,c.durationMs+=b.durationMs??0}let d=b.activeSegments;if(d&&d.length>0){let a=new Set;for(let b of d){let d=b.startMs;for(;d<b.endMs;){let e=c(d);a.add(e);let g=new Date(d);g.setHours(24,0,0,0);let h=Math.min(g.getTime(),b.endMs),i=f(e);i.airTimeMs+=h-d,d=h}}for(let b of a){let a=f(b);a.sessions++}}else if(a){let c=f(a);c.sessions++,c.airTimeMs+=b.airTimeMs??0}}let g=b&&d?function(a,b){let[d,e,f]=a.split("-").map(Number),[g,h,i]=b.split("-").map(Number),j=new Date(d,e-1,f),k=new Date(g,h-1,i),l=[];for(let a=new Date(j);a<=k;a.setDate(a.getDate()+1))l.push(c(a.getTime()));return l}(b,d):[],i=[];for(let a of g)i.push(e.get(a)??h(a));let j=function(a){let b=[];for(let c of a)for(let a of c.activeSegments&&c.activeSegments.length>0?c.activeSegments:c.firstTimestamp&&c.lastTimestamp?(()=>{let a=Date.parse(c.firstTimestamp),b=Date.parse(c.lastTimestamp);return Number.isNaN(a)||Number.isNaN(b)||b<a?[]:[{startMs:a,endMs:b}]})():[])b.push({ms:a.startMs,delta:1,sessionId:c.id}),b.push({ms:a.endMs,delta:-1,sessionId:c.id});b.sort((a,b)=>a.ms-b.ms||b.delta-a.delta);let c=new Map,d=[];for(let a of b){if(1===a.delta)c.set(a.sessionId,(c.get(a.sessionId)??0)+1);else{let b=(c.get(a.sessionId)??0)-1;b<=0?c.delete(a.sessionId):c.set(a.sessionId,b)}d.push({atMs:a.ms,active:c.size,sessions:Array.from(c.keys()).slice(0,10)})}return d}(a),k=new Map;for(let a of j){let b=c(a.atMs),d=k.get(b)??0;a.active>d&&k.set(b,a.active)}for(let a of i)a.peakParallelism=k.get(a.date)??0;return i},"detectPrMarkers",0,function(a){let b=[],c=a.durationMs??0;for(let d of a.events){if("tool-call"!==d.role||"Bash"!==d.toolName)continue;let e=d.blocks.find(a=>a&&"type"in a&&"tool_use"===a.type);if(!e||"tool_use"!==e.type)continue;let f=e.input,g="string"==typeof f?.command?f.command:"";if(!i.test(g))continue;let h=g.match(k),l=g.match(j);b.push({sessionId:a.id,timestamp:d.timestamp??a.firstTimestamp??"",tOffsetMs:d.tOffsetMs,positionInSession:c>0&&void 0!==d.tOffsetMs?Math.min(1,Math.max(0,d.tOffsetMs/c)):void 0,command:g.slice(0,300),prNumber:l?Number(l[1]):void 0,title:h?.[1]})}return b},"groupByProject",0,function(a){let b=new Map;for(let c of a){let a=f(c.projectName),d=b.get(a);d||(d={projectDir:a,projectName:a,sessions:[],rawProjectDirs:[],worktreeCount:0,metrics:l([]),perAgent:[],lastActiveMs:void 0},b.set(a,d)),d.sessions.push(c),d.rawProjectDirs.includes(c.projectDir)||d.rawProjectDirs.push(c.projectDir);let e=c.lastTimestamp?Date.parse(c.lastTimestamp):void 0;e&&(!d.lastActiveMs||e>d.lastActiveMs)&&(d.lastActiveMs=e)}for(let a of b.values()){a.metrics=l(a.sessions);let b=new Set;for(let c of a.sessions){let a=g(c.projectName);a&&b.add(a)}a.worktreeCount=b.size;let c=new Map;for(let b of a.sessions){let a=b.agent??"claude-code",d=c.get(a);d||(d={agent:a,sessions:0},c.set(a,d)),d.sessions+=1}a.perAgent=Array.from(c.values()).sort((a,b)=>b.sessions-a.sessions)}return Array.from(b.values()).sort((a,b)=>(b.lastActiveMs??0)-(a.lastActiveMs??0))},"highLevelMetrics",0,l,"sessionAirTimeMs",0,function(a,b=18e4){let c=0;for(let d of a)void 0!==d.gapMs&&d.gapMs<=b&&(c+=d.gapMs);return c},"summarizeBursts",0,function(a){let b=0,d=0,e=0,f=new Set;for(let g of a)g.peak>b&&(b=g.peak),d+=g.endMs-g.startMs,g.crossProject&&e++,f.add(c(g.startMs));return{peakConcurrent:b,totalParallelMs:d,burstCount:a.length,crossProjectBurstCount:e,activeDayCount:f.size}},"toLocalDay",0,c,"worktreeName",0,g])},23895,88522,a=>{"use strict";var b=a.i(2157),c=a.i(60526),d=a.i(50227),e=a.i(30375),f=a.i(10687),g=a.i(98049),h=a.i(48024);let i=d.default.join(c.default.homedir(),".claude","projects");function j(a){return a.startsWith("-")?"/"+a.slice(1).replace(/-/g,"/"):a}async function k(a){let c=await b.promises.readFile(a,"utf8"),d=[];for(let a of c.split("\n")){let b=a.trim();if(b)try{d.push(JSON.parse(b))}catch{}}return d}function l(a){return a.replace(/\.jsonl$/i,"")}let m=new Map,n=new Map,o=new Map,p=null;async function q(a=i){let c;if(p&&p.root===a&&Date.now()-p.capturedAtMs<1e3)return p.files;try{c=await b.promises.readdir(a,{withFileTypes:!0})}catch{return[]}let e=c.filter(a=>a.isDirectory()).map(a=>a.name),f=(await Promise.all(e.map(async c=>{let e,f=d.default.join(a,c);try{e=await b.promises.readdir(f)}catch{return[]}let g=e.filter(a=>a.endsWith(".jsonl"));return(await Promise.all(g.map(async a=>{let e=d.default.join(f,a);try{let d=await b.promises.stat(e);return{projectDir:c,fileName:a,fullPath:e,mtimeMs:d.mtimeMs,sizeBytes:d.size}}catch{return null}}))).filter(a=>null!==a)}))).flat();return p={files:f,capturedAtMs:Date.now(),root:a},f}async function r(a=i){let b=await q(a),c=(await Promise.all(b.map(async a=>{let b,c=o.get(a.fullPath);if(c&&c.mtimeMs===a.mtimeMs&&c.sizeBytes===a.sizeBytes)return c.events;try{b=await k(a.fullPath)}catch{return[]}let d=new Map;for(let c of b){if(!c||"object"!=typeof c||"assistant"!==c.type)continue;let b="string"==typeof c.timestamp?c.timestamp:void 0;if(!b)continue;let e=c.message;if(!e)continue;let g=e.usage;if(!g)continue;let h=(0,f.modelFamily)("string"==typeof e.model?e.model:void 0);if(null===h)continue;let i="string"==typeof e.id?e.id:`__noid_${a.fullPath}_${b}`,j=g.cache_creation??{},k=a=>"number"==typeof a?a:0;d.set(i,{ts:b,family:h,input:k(g.input_tokens),output:k(g.output_tokens),cacheRead:k(g.cache_read_input_tokens),cache_1h:k(j.ephemeral_1h_input_tokens),cache_5m:k(j.ephemeral_5m_input_tokens)})}let e=Array.from(d.values());return o.set(a.fullPath,{events:e,mtimeMs:a.mtimeMs,sizeBytes:a.sizeBytes}),e}))).flat();return c.sort((a,b)=>a.ts.localeCompare(b.ts)),c}let s={input:0,output:0,cacheRead:0,cacheWrite:0};function t(a,b,c){for(let d of a){if(!d||"object"!=typeof d||"assistant"!==d.type)continue;let a=d.message;if(!a)continue;let e="string"==typeof a.id?a.id:void 0,f="string"==typeof d.requestId?d.requestId:void 0,g=null!=e&&null!=f?`${e}:${f}`:void 0;if(g&&b.has(g))continue;g&&b.add(g);let h=a.usage;if(h){let a=a=>"number"==typeof a?a:0;c.input+=a(h.input_tokens),c.output+=a(h.output_tokens),c.cacheRead+=a(h.cache_read_input_tokens),c.cacheWrite+=a(h.cache_creation_input_tokens)}}}async function u(a,c,e){let f,g={...s},h=new Set;t(a,h,g);let i=d.default.join(c,e,"subagents");try{f=await b.promises.readdir(i)}catch{return g}let j=f.filter(a=>a.endsWith(".jsonl"));return 0===j.length||await Promise.all(j.map(async a=>{try{let b=await k(d.default.join(i,a));t(b,h,g)}catch{}})),g}async function v(a){let b=m.get(a.fullPath);if(b&&b.mtimeMs===a.mtimeMs&&b.sizeBytes===a.sizeBytes)return b.meta;try{let b=await k(a.fullPath),{meta:c}=(0,g.parseTranscript)(b),e=l(a.fileName),f=d.default.dirname(a.fullPath);c.totalUsage=await u(b,f,e);let h={...c,id:e,filePath:a.fullPath,projectDir:a.projectDir,projectName:c.cwd??j(a.projectDir)};return m.set(a.fullPath,{meta:h,mtimeMs:a.mtimeMs,sizeBytes:a.sizeBytes}),h}catch{return null}}async function w(a){let b=n.get(a.fullPath);if(b&&b.mtimeMs===a.mtimeMs&&b.sizeBytes===a.sizeBytes)return b.detail;try{let b=await k(a.fullPath),{meta:c,events:d}=(0,g.parseTranscript)(b),e={...c,id:l(a.fileName),filePath:a.fullPath,projectDir:a.projectDir,projectName:c.cwd??j(a.projectDir),events:d};n.set(a.fullPath,{detail:e,mtimeMs:a.mtimeMs,sizeBytes:a.sizeBytes});let f={...e};return delete f.events,m.set(a.fullPath,{meta:f,mtimeMs:a.mtimeMs,sizeBytes:a.sizeBytes}),e}catch{return null}}async function x(a={}){let{root:b=i,limit:c=500,projectDir:d}=a,e=await q(b);d&&(e=e.filter(a=>a.projectDir===d)),e.sort((a,b)=>b.mtimeMs-a.mtimeMs);let f=e.slice(0,c);return(await Promise.all(f.map(a=>v(a)))).filter(a=>null!==a)}async function y(a,b={}){let{root:c=i}=b,e=(await q(c)).find(b=>l(b.fileName)===a);if(!e)return null;let f=await w(e);if(!f)return f;let g=f.firstTimestamp?Date.parse(f.firstTimestamp):void 0,h=d.default.join(d.default.dirname(e.fullPath),l(e.fileName),"subagents"),j=await z(h,g,f.events);return{...f,subagents:j}}async function z(a,c,e){let f;try{f=await b.promises.readdir(a)}catch{return[]}let g=new Map,h=[];for(let a of e)if("tool-call"===a.role&&"Agent"===a.toolName)for(let b of a.blocks){if(b?.type!=="tool_use"||"Agent"!==b.name)continue;let c=b.input??{},d="string"==typeof c.description?c.description:void 0,e=a.timestamp?Date.parse(a.timestamp):void 0,f={toolUseId:b.id,parentUuid:a.uuid??"",runInBackground:!0===c.run_in_background,prompt:"string"==typeof c.prompt?c.prompt:void 0,tsMs:e};d&&g.set(d,f),void 0!==e&&h.push(f)}h.sort((a,b)=>(a.tsMs??0)-(b.tsMs??0));let i=f.filter(a=>a.startsWith("agent-")&&a.endsWith(".jsonl"));return(await Promise.all(i.map(async e=>{let f,i=e.replace(/^agent-/,"").replace(/\.jsonl$/,""),j=d.default.join(a,e),l=d.default.join(a,`agent-${i}.meta.json`),m={};try{let a=await b.promises.readFile(l,"utf8");m=JSON.parse(a)}catch{}try{f=await k(j)}catch{return null}let n=function(a){let b,c,d,e,f,g={...s},h=new Set,i=0,j=0,k=0,l=new Map;for(let m of a){if(!m||"object"!=typeof m)continue;i++;let a="string"==typeof m.timestamp?Date.parse(m.timestamp):NaN;if(!Number.isNaN(a)&&((void 0===b||a<b)&&(b=a),(void 0===c||a>c)&&(c=a)),void 0===f&&"user"===m.type&&(null===m.parentUuid||void 0===m.parentUuid)){let a=m.message,b=a?.content;if("string"==typeof b)f=b;else if(Array.isArray(b)){let a=b.find(a=>a&&"object"==typeof a&&"text"===a.type);a?.text&&(f=a.text)}}if("assistant"===m.type){let a=m.message;if(!a)continue;e||"string"!=typeof a.model||(e=a.model);let b="string"==typeof a.id?a.id:void 0,c="string"==typeof m.requestId?m.requestId:void 0,f=null!=b&&null!=c?`${b}:${c}`:void 0,i=!f||!h.has(f);if(f&&i&&h.add(f),i){j++;let b=a.usage;if(b){let a=a=>"number"==typeof a?a:0;g.input+=a(b.input_tokens),g.output+=a(b.output_tokens),g.cacheRead+=a(b.cache_read_input_tokens),g.cacheWrite+=a(b.cache_creation_input_tokens)}}let n=a.content;if(Array.isArray(n))for(let a of n)a&&"object"==typeof a&&("text"===a.type&&"string"==typeof a.text?d=a.text:"tool_use"===a.type&&"string"==typeof a.name&&(k++,l.set(a.name,(l.get(a.name)??0)+1)))}}let m=Array.from(l.entries()).map(([a,b])=>({name:a,count:b})).sort((a,b)=>b.count-a.count);return{startMs:b,endMs:c,totalUsage:g,eventCount:i,finalPreview:void 0!==d?d.replace(/\s+/g," ").trim().slice(0,240):void 0,finalText:d,model:e,toolCalls:m,toolCallCount:k,assistantMessageCount:j,initialPrompt:f}}(f),o=m.description&&m.description.trim().length>0?m.description:void 0,p=o?g.get(o):function(a){let b;if(void 0===a)return;let c=1/0;for(let d of h){if(void 0===d.tsMs)continue;let e=Math.abs(a-d.tsMs);e<c&&e<=2e3&&(b=d,c=e)}return b}(n.startMs),q=o??(n.initialPrompt?n.initialPrompt.replace(/\s+/g," ").trim().slice(0,80):"(no description)"),r=p?.prompt??n.initialPrompt,t=void 0!==c&&void 0!==n.startMs?Math.max(0,n.startMs-c):void 0,u=void 0!==c&&void 0!==n.endMs?Math.max(0,n.endMs-c):void 0,v=void 0!==n.startMs&&void 0!==n.endMs?n.endMs-n.startMs:void 0;return{agentId:i,agentType:m.agentType??"unknown",description:q,startMs:n.startMs,endMs:n.endMs,durationMs:v,startTOffsetMs:t,endTOffsetMs:u,eventCount:n.eventCount,totalUsage:n.totalUsage,parentUuid:p?.parentUuid,parentToolUseId:p?.toolUseId,runInBackground:p?.runInBackground,prompt:r,finalPreview:n.finalPreview,finalText:n.finalText,model:n.model,toolCalls:n.toolCalls,toolCallCount:n.toolCallCount,assistantMessageCount:n.assistantMessageCount}}))).filter(a=>null!==a).sort((a,b)=>(a.startMs??0)-(b.startMs??0))}async function A(a=i){let b=await q(a),c=new Map;for(let a of b){let b=c.get(a.projectDir)??{count:0,lastActiveMs:0};b.count++,a.mtimeMs>b.lastActiveMs&&(b.lastActiveMs=a.mtimeMs),c.set(a.projectDir,b)}let d=a=>{for(let[,b]of m.entries())if(b.meta.projectDir===a&&b.meta.cwd)return b.meta.cwd},e=new Map;for(let[a,{count:b,lastActiveMs:f}]of c){let c=d(a)??j(a),g=(0,h.canonicalProjectName)(c),i=(0,h.worktreeName)(c),k=e.get(g)??{canonicalName:g,count:0,lastActiveMs:0,worktreeBranches:new Set};k.count+=b,f>k.lastActiveMs&&(k.lastActiveMs=f),i&&k.worktreeBranches.add(i),e.set(g,k)}return Array.from(e.values()).map(a=>({projectDir:a.canonicalName,projectName:a.canonicalName,sessionCount:a.count,lastActiveMs:a.lastActiveMs,worktreeCount:a.worktreeBranches.size})).sort((a,b)=>b.lastActiveMs-a.lastActiveMs)}async function B(a,b={}){let{root:c=i}=b,d=await x({root:c}),e=d.find(b=>b.sessionId===a);if(!e||!e.teamName)return null;let f=e.teamName,g=d.filter(a=>a.teamName===f&&!a.filePath.includes("/subagents/")),h=await Promise.all(g.map(a=>y(a.sessionId,{root:c}))),j=new Map;g.forEach((a,b)=>{let c=h[b];c&&j.set(a.sessionId,c)});let k=(function(a,b){let c=new Map;for(let b of a){if(!b.teamName)continue;let a=c.get(b.teamName)??[];a.push(b),c.set(b.teamName,a)}let d=[];for(let[a,e]of c){let c=function(a,b,c){let d,e=b.filter(a=>a.isTeamLead);if(0===e.length)return null;for(let a of e){let b=c.get(a.sessionId);if(b&&function(a){for(let b of a)if("tool-call"===b.role&&"TeamCreate"===b.toolName)return!0;return!1}(b.events)){d=a;break}}d||(d=[...e].sort((a,b)=>Date.parse(a.firstTimestamp??"")-Date.parse(b.firstTimestamp??""))[0]);let f=new Map;for(let a of b)f.set(a.sessionId,a.agentName);let g=b.filter(a=>a.sessionId!==d.sessionId).sort((a,b)=>Date.parse(a.firstTimestamp??"")-Date.parse(b.firstTimestamp??"")),h=new Map;for(let a of g)a.agentName&&h.set(a.agentName,a.sessionId);let i=[];for(let a of b){let b=c.get(a.sessionId);if(!b)continue;let e=a.sessionId,f=a.agentName??"team-lead";for(let a of b.events){let b=function(a){if("tool-call"!==a.role||"SendMessage"!==a.toolName)return null;for(let b of a.blocks){if(!b||"object"!=typeof b||"tool_use"!==b.type)continue;let a=b.input??{},c="string"==typeof a.to?a.to:"",d="string"==typeof a.message?a.message:"";if(!c)break;return{to:c,body:d}}return null}(a);if(!b)continue;let c=b.to,g="team-lead"===c?d.sessionId:h.get(c)??"";i.push({tsMs:a.timestamp?Date.parse(a.timestamp):0,fromSessionId:e,fromTeammateId:f,toSessionId:g,toTeammateId:c,body:b.body,kind:"message"})}}i.sort((a,b)=>a.tsMs-b.tsMs);let j=[];for(let a of b)a.firstTimestamp&&j.push(Date.parse(a.firstTimestamp)),a.lastTimestamp&&j.push(Date.parse(a.lastTimestamp));let k=j.length?Math.min(...j):0,l=j.length?Math.max(...j):0;return{teamName:a,leadSessionId:d.sessionId,memberSessionIds:g.map(a=>a.sessionId),agentNameBySessionId:f,messages:i,firstEventMs:k,lastEventMs:l}}(a,e,b);c&&d.push(c)}return d})(g,j).find(a=>a.teamName===f);return k?{view:k,details:j}:null}async function C(a,b={}){let{root:c=i}=b,d=await x({root:c}),e=d.find(b=>b.sessionId===a);if(!e||!e.teamName||!e.agentName||e.isTeamLead)return null;let f=d.filter(a=>a.teamName===e.teamName&&a.isTeamLead&&!a.filePath.includes("/subagents/"));return 0===f.length?null:{leadSessionId:f[0].sessionId,teamName:e.teamName,agentName:e.agentName}}let D={...e.CLAUDE_CODE_METADATA,defaultRoot:i,async listSessions(a){let b=await x(a);for(let a of b)a.agent||(a.agent="claude-code");return b},async getSession(a,b){let c=await y(a,b);return c&&!c.agent&&(c.agent="claude-code"),c}};a.s(["DEFAULT_ROOT",0,i,"claudeCodeSource",0,D,"findTeamLead",0,C,"listProjects",0,A,"loadCalibrationEvents",0,r,"loadTeamForSession",0,B,"walkJsonlFiles",0,q],88522);let E=d.default.join(c.default.homedir(),".codex","sessions"),F=/^rollout-(\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2})-([0-9a-f-]+)\.jsonl$/;async function G(a){return b.promises.readdir(a).catch(()=>[])}async function H(a){let c=[];for(let e of(await G(a))){if(!/^\d{4}$/.test(e))continue;let f=d.default.join(a,e);for(let a of(await G(f))){if(!/^\d{2}$/.test(a))continue;let e=d.default.join(f,a);for(let a of(await G(e))){if(!/^\d{2}$/.test(a))continue;let f=d.default.join(e,a);for(let a of(await G(f))){let e=F.exec(a);if(!e)continue;let g=d.default.join(f,a),h=await b.promises.stat(g).catch(()=>null);h&&c.push({filePath:g,sessionId:e[2],mtimeMs:h.mtimeMs,sizeBytes:h.size})}}}}return c}async function I(a){let c=await b.promises.readFile(a,"utf8"),d=[];for(let a of c.split("\n")){let b=a.trim();if(b)try{d.push(JSON.parse(b))}catch{}}return d}function J(a){return a.replace(/\s+/g," ").trim().slice(0,200)}function K(a,b){let c,d,e,f,g,i,j,k=[],l={input:0,output:0,cacheRead:0,cacheWrite:0},m=0,n=0,o=[],p=0;for(let a of b){if("object"!=typeof a||null===a)continue;let b="string"==typeof a.timestamp?a.timestamp:void 0;if(b){c||(c=b),d=b;let a=Date.parse(b);Number.isFinite(a)&&o.push(a)}let h="string"==typeof a.type?a.type:"",r=a.payload??{},s="string"==typeof r.type?r.type:"";if("session_meta"===h){"string"==typeof r.cwd&&(e=r.cwd);continue}if("turn_context"===h){"string"==typeof r.cwd&&(e=r.cwd),"string"==typeof r.model&&(f=r.model);continue}if("event_msg"===h&&"token_count"===s){let a=r.info??null,b=a?.total_token_usage??null;b&&(l.input=L(b.input_tokens)??l.input,l.output=L(b.output_tokens)??l.output,l.cacheRead=L(b.cached_input_tokens)??l.cacheRead);continue}if("event_msg"===h&&"user_message"===s){let c="string"==typeof r.message?r.message:"",d=J(c);c&&(g||(g=d),i=d,n+=1),k.push({index:p++,timestamp:b,role:"user",rawType:"event_msg/user_message",preview:d,blocks:c?[{type:"text",text:c}]:[],raw:a});continue}if("event_msg"===h&&"agent_message"===s){let c="string"==typeof r.message?r.message:"",d=J(c);c&&(j=d),k.push({index:p++,timestamp:b,role:"agent",rawType:"event_msg/agent_message",preview:d,blocks:c?[{type:"text",text:c}]:[],model:f,raw:a});continue}if("response_item"===h&&"reasoning"===s){let c=(r.summary??[]).map(a=>"string"==typeof a.text?a.text:"").join("\n").trim();k.push({index:p++,timestamp:b,role:"agent-thinking",rawType:"response_item/reasoning",preview:J(c),blocks:c?[{type:"thinking",thinking:c}]:[],model:f,raw:a});continue}if("response_item"===h&&"message"===s&&"assistant"===r.role){let c=(r.content??[]).map(a=>"string"==typeof a.text?a.text:"").join("\n").trim(),d=J(c);c&&(j=d),k.push({index:p++,timestamp:b,role:"agent",rawType:"response_item/message",preview:d,blocks:c?[{type:"text",text:c}]:[],model:f,raw:a});continue}if("response_item"===h&&"function_call"===s){var q;let c="string"==typeof r.name?r.name:"(unknown)",d="string"==typeof r.call_id?r.call_id:void 0,e="string"==typeof r.arguments?r.arguments:"",g=function(a){if(!a)return null;try{return JSON.parse(a)}catch{return a}}(e);m+=1,k.push({index:p++,timestamp:b,role:"tool-call",rawType:"response_item/function_call",preview:`${c}(${(q=e).length<=80?q:q.slice(0,79)+"…"})`,blocks:[{type:"tool_use",id:d??`codex-${p}`,name:c,input:g}],toolName:c,toolUseId:d,model:f,raw:a});continue}if("response_item"===h&&"function_call_output"===s){let c="string"==typeof r.call_id?r.call_id:void 0,d="string"==typeof r.output?r.output:"",e=/process exited with code [1-9]/i.test(d);k.push({index:p++,timestamp:b,role:"tool-result",rawType:"response_item/function_call_output",preview:J(d),blocks:[{type:"tool_result",tool_use_id:c??"",content:d,is_error:e}],toolUseId:c,toolResult:d,raw:a});continue}k.push({index:p++,timestamp:b,role:"meta",rawType:s?`${h}/${s}`:h,preview:"",blocks:[],raw:a})}if(l.input>0||l.output>0){let b=-1;for(let a=k.length-1;a>=0;a--){let c=k[a].role;if("agent"===c||"agent-thinking"===c||"tool-call"===c){b=a;break}}if(b>=0){let c=k[b];c.messageId=`codex-${a.sessionId}-total`,c.usage={input:l.input,output:l.output,cacheRead:l.cacheRead,cacheWrite:0}}}let r=c?Date.parse(c):void 0;if(void 0!==r&&Number.isFinite(r)){let a;for(let b of k){if(!b.timestamp)continue;let c=Date.parse(b.timestamp);Number.isFinite(c)&&(b.tOffsetMs=Math.max(0,c-r),void 0!==a&&(b.gapMs=Math.max(0,c-a)),a=c)}}let s=function(a){if(0===a.length)return[];let b=[...a].sort((a,b)=>a-b),c=[],d=b[0],e=b[0];for(let a=1;a<b.length;a++)b[a]-e>18e4&&(c.push({startMs:d,endMs:e}),d=b[a]),e=b[a];return c.push({startMs:d,endMs:e}),c}(o),t=s.reduce((a,b)=>a+(b.endMs-b.startMs),0),u=c&&d?Date.parse(d)-Date.parse(c):void 0,v=e?(0,h.canonicalProjectName)(e):"(unknown)",w=e?e.replace(/^\//,"-").replace(/\//g,"-"):"(unknown)";return{meta:{agent:"codex",id:a.sessionId,filePath:a.filePath,projectName:v,projectDir:w,sessionId:a.sessionId,firstTimestamp:c,lastTimestamp:d,durationMs:u&&Number.isFinite(u)?u:void 0,eventCount:k.length,model:f,cwd:e,totalUsage:l,status:"idle",firstUserPreview:g,lastUserPreview:i,lastAgentPreview:j,toolCallCount:m,turnCount:n,airTimeMs:t,activeSegments:s},events:k}}function L(a){return"number"==typeof a&&Number.isFinite(a)?a:void 0}let M=new Map,N=new Map;async function O(a={}){let b=a.root??E,c=await H(b),d=[];for(let a of c){let b=M.get(a.filePath);if(b&&b.mtimeMs===a.mtimeMs&&b.sizeBytes===a.sizeBytes){d.push(b.meta);continue}try{let b=await I(a.filePath),{meta:c}=K(a,b);M.set(a.filePath,{meta:c,mtimeMs:a.mtimeMs,sizeBytes:a.sizeBytes}),d.push(c)}catch{}}return(d.sort((a,b)=>(b.firstTimestamp??"").localeCompare(a.firstTimestamp??"")),void 0!==a.limit)?d.slice(0,a.limit):d}async function P(a,b={}){let c=b.root??E,d=(await H(c)).find(b=>b.sessionId===a);if(!d)return null;let e=N.get(d.filePath);if(e&&e.mtimeMs===d.mtimeMs&&e.sizeBytes===d.sizeBytes)return e.detail;let f=await I(d.filePath),{meta:g,events:h}=K(d,f),i={...g,events:h};return N.set(d.filePath,{detail:i,mtimeMs:d.mtimeMs,sizeBytes:d.sizeBytes}),i}async function Q(a={}){let b=a.root??E,c=await H(b);if(0===c.length)return null;for(let a of(c.sort((a,b)=>b.mtimeMs-a.mtimeMs),c)){let b=await I(a.filePath);for(let c=b.length-1;c>=0;c--){let d=b[c];if("object"!=typeof d||null===d||"event_msg"!==d.type)continue;let e=d.payload??{};if("token_count"!==e.type)continue;let f=e.rate_limits??null;if(!f)continue;let g=f.primary??null,h=f.secondary??null,i=L(g?.used_percent),j=L(h?.used_percent),k=L(g?.resets_at),l=L(h?.resets_at),m="string"==typeof f.plan_type?f.plan_type:null;return{five_hour:{utilization:i??null,resets_at:void 0!==k?new Date(1e3*k).toISOString():null},seven_day:{utilization:j??null,resets_at:void 0!==l?new Date(1e3*l).toISOString():null},plan_type:m,source_path:a.filePath}}}return null}let R=d.default.join(c.default.homedir(),".gemini","tmp"),S=d.default.join(c.default.homedir(),".gemini","projects.json"),T=/^session-.+\.(jsonl|json)$/;async function U(a){return b.promises.readdir(a).catch(()=>[])}async function V(a){let c=[];for(let e of(await U(a))){let f=d.default.join(a,e,"chats");for(let a of(await U(f))){if(!T.test(a))continue;let g=d.default.join(f,a),h=await b.promises.stat(g).catch(()=>null);if(!h||!h.isFile())continue;let i=a.replace(/\.(jsonl|json)$/,"").split("-").pop()??a;c.push({filePath:g,slug:e,filenameId:i,format:a.endsWith(".jsonl")?"jsonl":"legacy-json",mtimeMs:h.mtimeMs,sizeBytes:h.size})}}return c}let W=null;async function X(){let a,c=await b.promises.stat(S).catch(()=>null);if(!c)return new Map;if(W&&W.mtimeMs===c.mtimeMs)return W.slugToCwd;let d=await b.promises.readFile(S,"utf8").catch(()=>"");try{a=JSON.parse(d)}catch{a={}}let e=new Map;for(let[b,c]of Object.entries(a.projects??{}))"string"==typeof c&&e.set(c,b);return W={mtimeMs:c.mtimeMs,slugToCwd:e},e}function Y(a){return!!a&&"object"==typeof a&&"string"==typeof a.id&&"string"==typeof a.type}async function Z(a){let c=await b.promises.readFile(a.filePath,"utf8");if("legacy-json"===a.format){let a;try{a=JSON.parse(c)}catch{return{meta:{},messages:[]}}return{meta:{sessionId:"string"==typeof a.sessionId?a.sessionId:void 0,projectHash:"string"==typeof a.projectHash?a.projectHash:void 0,startTime:"string"==typeof a.startTime?a.startTime:void 0,lastUpdated:"string"==typeof a.lastUpdated?a.lastUpdated:void 0,summary:"string"==typeof a.summary?a.summary:void 0},messages:(Array.isArray(a.messages)?a.messages:[]).filter(Y)}}let d={},e=new Map,f=[];for(let a of c.split("\n")){let b,c=a.trim();if(c){var g,h;try{b=JSON.parse(c)}catch{continue}if((g=b)&&"object"==typeof g&&"$rewindTo"in g){let a=b.$rewindTo,c=f.indexOf(a);if(c>=0){for(let a of f.slice(c))e.delete(a);f.length=c}continue}if((h=b)&&"object"==typeof h&&"$set"in h){Object.assign(d,b.$set);continue}if(Y(b)){e.has(b.id)||f.push(b.id),e.set(b.id,b);continue}if("object"==typeof b&&null!==b){let a=b;"string"!=typeof a.sessionId||d.sessionId||(d.sessionId=a.sessionId,"string"==typeof a.projectHash&&(d.projectHash=a.projectHash),"string"==typeof a.startTime&&(d.startTime=a.startTime),"string"==typeof a.lastUpdated&&(d.lastUpdated=a.lastUpdated),"string"==typeof a.summary&&(d.summary=a.summary))}}}let i=[];for(let a of f){let b=e.get(a);b&&i.push(b)}return{meta:d,messages:i}}function $(a){return a.replace(/\s+/g," ").trim().slice(0,200)}function _(a){if(!a)return"";if("string"==typeof a)return a;let b=Array.isArray(a)?a:[a],c=[];for(let a of b){if(!a||"object"!=typeof a)continue;if("string"==typeof a.text){c.push(a.text);continue}let b=a.functionResponse;if(b){let a=b.response;"string"==typeof a?c.push(a):a&&"object"==typeof a&&("string"==typeof a.output?c.push(a.output):"string"==typeof a.error?c.push(`error: ${a.error}`):c.push(JSON.stringify(a)))}}return c.join("\n")}async function aa(a){let b,c,d,e,f,g,{meta:i,messages:j}=await Z(a),k=(await X()).get(a.slug),l=[],m={input:0,output:0,cacheRead:0,cacheWrite:0},n=0,o=0,p=[],q=0;function r(a){if(l.push(a),a.timestamp&&"meta"!==a.role){b||(b=a.timestamp),c=a.timestamp;let d=Date.parse(a.timestamp);Number.isFinite(d)&&p.push(d)}}for(let a of j){let b=a.timestamp;if("user"===a.type){let c=_(a.displayContent??a.content),d=$(c);c&&(e||(e=d),f=d,o+=1),r({index:q++,timestamp:b,role:"user",rawType:"gemini/user",preview:d,blocks:c?[{type:"text",text:c}]:[],messageId:a.id,raw:a});continue}if("gemini"===a.type){let c;"string"==typeof a.model&&(d=a.model);let e=_(a.content),f=$(e);if(e&&(g=f),a.tokens){let b=a.tokens,d={input:b.input??0,output:b.output??0,cacheRead:b.cached??0,cacheWrite:0};c=d,m.input+=d.input,m.output+=d.output,m.cacheRead+=d.cacheRead}for(let c of a.thoughts??[]){let a=[c.subject,c.description].filter(Boolean).join(": ");a&&r({index:q++,timestamp:c.timestamp??b,role:"agent-thinking",rawType:"gemini/thought",preview:$(a),blocks:[{type:"thinking",thinking:a}],model:d,raw:c})}for(let g of(e?r({index:q++,timestamp:b,role:"agent",rawType:"gemini/agent",preview:f,blocks:[{type:"text",text:e}],messageId:a.id,model:d,usage:c,raw:a}):c&&r({index:q++,timestamp:b,role:"agent",rawType:"gemini/agent",preview:"",blocks:[],messageId:a.id,model:d,usage:c,raw:a}),a.toolCalls??[])){n+=1;let a=g.args?JSON.stringify(g.args):"";r({index:q++,timestamp:g.timestamp??b,role:"tool-call",rawType:"gemini/tool_call",preview:`${g.name}(${a.length<=80?a:a.slice(0,79)+"…"})`,blocks:[{type:"tool_use",id:g.id,name:g.name,input:g.args??{}}],toolName:g.name,toolUseId:g.id,model:d,raw:g});let c=(g.status??"").toLowerCase();if("success"===c||"error"===c||"cancelled"===c){let a=_(g.result);r({index:q++,timestamp:g.timestamp??b,role:"tool-result",rawType:"gemini/tool_result",preview:$(a),blocks:[{type:"tool_result",tool_use_id:g.id,content:a,is_error:"error"===c||"cancelled"===c}],toolUseId:g.id,toolResult:a,raw:g})}}continue}if("info"===a.type||"warning"===a.type||"error"===a.type){let c=_(a.content);r({index:q++,timestamp:b,role:"meta",rawType:`gemini/${a.type}`,preview:$(c),blocks:c?[{type:"text",text:c}]:[],raw:a});continue}}let s=b?Date.parse(b):void 0;if(void 0!==s&&Number.isFinite(s)){let a;for(let b of l){if(!b.timestamp)continue;let c=Date.parse(b.timestamp);Number.isFinite(c)&&(b.tOffsetMs=Math.max(0,c-s),void 0!==a&&(b.gapMs=Math.max(0,c-a)),a=c)}}let t=function(a){if(0===a.length)return[];let b=[...a].sort((a,b)=>a-b),c=[],d=b[0],e=b[0];for(let a=1;a<b.length;a++)b[a]-e>18e4&&(c.push({startMs:d,endMs:e}),d=b[a]),e=b[a];return c.push({startMs:d,endMs:e}),c}(p),u=t.reduce((a,b)=>a+(b.endMs-b.startMs),0),v=b&&c?Date.parse(c)-Date.parse(b):void 0,w=i.sessionId??a.filenameId,x=k?(0,h.canonicalProjectName)(k):a.slug,y=k?k.replace(/^\//,"-").replace(/\//g,"-"):a.slug;return{meta:{agent:"gemini",id:w,filePath:a.filePath,projectName:x,projectDir:y,sessionId:w,firstTimestamp:b,lastTimestamp:c,durationMs:v&&Number.isFinite(v)?v:void 0,eventCount:l.length,model:d,cwd:k,totalUsage:m,status:"idle",firstUserPreview:e,lastUserPreview:f,lastAgentPreview:g,toolCallCount:n,turnCount:o,airTimeMs:u,activeSegments:t},events:l}}let ab=new Map,ac=new Map;async function ad(a={}){let b=a.root??R,c=await V(b),d=[];for(let a of c){let b=ab.get(a.filePath);if(b&&b.mtimeMs===a.mtimeMs&&b.sizeBytes===a.sizeBytes){d.push(b.meta);continue}try{let{meta:b}=await aa(a);ab.set(a.filePath,{meta:b,mtimeMs:a.mtimeMs,sizeBytes:a.sizeBytes}),d.push(b)}catch{}}return(d.sort((a,b)=>(b.firstTimestamp??"").localeCompare(a.firstTimestamp??"")),void 0!==a.limit)?d.slice(0,a.limit):d}async function ae(a,b={}){let c,d=b.root??R,e=await V(d);for(let b of e)if(b.filenameId===a||a.startsWith(b.filenameId)){c=b;break}if(!c)for(let b of e){let{meta:d}=await aa(b).catch(()=>({meta:{id:""}}));if(d.id===a){c=b;break}}if(!c)return null;let f=ac.get(c.filePath);if(f&&f.mtimeMs===c.mtimeMs&&f.sizeBytes===c.sizeBytes)return f.detail;let{meta:g,events:h}=await aa(c),i={...g,events:h};return ac.set(c.filePath,{detail:i,mtimeMs:c.mtimeMs,sizeBytes:c.sizeBytes}),i}let af=[D,{...e.CODEX_METADATA,defaultRoot:E,listSessions:async a=>O(a),getSession:async a=>P(a),async usagePoller(){let a=await Q();return a?{captured_at:new Date().toISOString(),agent:"codex",five_hour:a.five_hour,seven_day:a.seven_day}:null}},{...e.GEMINI_METADATA,defaultRoot:R,listSessions:async a=>ad(a),getSession:async a=>ae(a)}];async function ag(a={}){let b=await Promise.all(af.map(b=>b.listSessions(a))),c=[];for(let a of b)c.push(...a);return(c.sort((a,b)=>(b.firstTimestamp??"").localeCompare(a.firstTimestamp??"")),void 0!==a.limit)?c.slice(0,a.limit):c}async function ah(a){for(let b of af){let c=await b.getSession(a);if(c)return c}return null}let ai=d.default.join(c.default.homedir(),".cclens","usage.jsonl");async function aj(){let a;try{a=await b.promises.readFile(ai,"utf8")}catch{return[]}let c=[];for(let b of a.split("\n")){let a=b.trim();if(a)try{let b=JSON.parse(a);if(!b.captured_at||(b.agent??"claude-code")!=="claude-code")continue;c.push(b)}catch{}}return c.sort((a,b)=>(a.captured_at??"").localeCompare(b.captured_at??"")),c}function ak(a,b,c){if(0===b.length)return null;for(let[d,e]of b)if(d>=a&&e>a){let b=e,d=36e5*c;for(;b-d>a;)b-=d;return b}let d=b[b.length-1][1],e=36e5*c;for(;d<a;)d+=e;return d}async function al(a="pro-max-20x",b=i,c=30){let[d,e]=await Promise.all([r(b),aj()]);return function(a,b,c="pro-max-20x",d=30){if(0===b.length||0===a.length)return null;let e=(0,f.buildSpendIndex)(a),g=f.RATE_PER_PCT_7D[c],h=f.RATE_PER_PCT_5H[c],i=(0,f.groupSnapsByCycle)(b,a=>a.five_hour),j=(0,f.groupSnapsByCycle)(b,a=>a.seven_day),k=(0,f.collectSnapPairRates)(j,e,{minTravelPct:1,minDollars:10,maxGapMs:864e5}),l=(0,f.collectSnapPairRates)(i,e,{minTravelPct:1,minDollars:1,maxGapMs:72e5}),m=(0,f.userSoloRate)(k,.9)??g,n=(0,f.userSoloRate)(l,.9)??h,o=new Set(k.map(a=>a.cycleEndMs)).size,p=new Set(l.map(a=>a.cycleEndMs)).size,q=[],r=[];for(let a of b){let b=Date.parse(a.captured_at);if(!Number.isNaN(b)){if(a.five_hour?.resets_at){let c=Date.parse(a.five_hour.resets_at);Number.isNaN(c)||q.push([b,c])}if(a.seven_day?.resets_at){let c=Date.parse(a.seven_day.resets_at);Number.isNaN(c)||r.push([b,c])}}}let s=new Map;for(let a of b){let b=Date.parse(a.captured_at);if(Number.isNaN(b))continue;let c=Math.floor(b/6e4);s.set(c,[a.five_hour?.utilization??null,a.seven_day?.utilization??null])}let t=Date.parse(b[0].captured_at),u=Date.parse(b[b.length-1].captured_at),v=Math.max(Date.parse(a[0].ts),t-12096e5),w=6e4*d,x=[],y=v;for(;y<=u;){let a=null,b=null;for(let c=0;c<d;c++){let d=Math.floor((y+6e4*c)/6e4),e=s.get(d);if(e){a=e[0],b=e[1];break}}let c=ak(y,q,5),g=ak(y,r,168),h=null!=c?36e5*Math.round(c/36e5):null,k=null!=g?36e5*Math.round(g/36e5):null,l=null!=h?i.get(h)??[]:[],o=null!=k?j.get(k)??[]:[],p=h??y+18e6,t=k??y+6048e5,u=(0,f.predictAnchored)(e,l,n,p,5,y),v=(0,f.predictAnchored)(e,o,m,t,168,y);x.push({ts:new Date(y).toISOString(),real_5h:a,pred_5h:Math.max(0,Math.min(200,u)),real_7d:b,pred_7d:Math.max(0,Math.min(200,v)),cycle_end_5h:null!=h?new Date(h).toISOString():null,cycle_end_7d:null!=k?new Date(k).toISOString():null}),y+=w}let z=k.length>=3?"user_calibrated":"tier_default";return{model:`anchored-${c}`,tier:c,rate_per_pct:m,rate_per_pct_5h:n,rate_per_pct_7d:m,rate_source_5h:l.length>=3?"user_calibrated":"tier_default",rate_source_7d:z,cycles_used_5h:p,cycles_used_7d:o,granularity_min:d,curve:x,first_snapshot_ts:b[0].captured_at??null,real_count:x.filter(a=>null!==a.real_7d).length,total_count:x.length}}(d,e,a,c)}a.s(["agentSources",0,af,"getAnySession",0,ah,"listAllSessions",0,ag,"loadCalibrationCurve",0,al],23895)},9117,a=>{"use strict";a.i(30375),a.s([])}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=packages_parser_dist_10_oegc._.js.map
|
|
@@ -7,9 +7,9 @@ globalThis.__BUILD_MANIFEST = {
|
|
|
7
7
|
"static/chunks/03~yq9q893hmn.js"
|
|
8
8
|
],
|
|
9
9
|
"lowPriorityFiles": [
|
|
10
|
-
"static/
|
|
11
|
-
"static/
|
|
12
|
-
"static/
|
|
10
|
+
"static/u6-8f8u1tspYCacGAz53R/_buildManifest.js",
|
|
11
|
+
"static/u6-8f8u1tspYCacGAz53R/_ssgManifest.js",
|
|
12
|
+
"static/u6-8f8u1tspYCacGAz53R/_clientMiddlewareManifest.js"
|
|
13
13
|
],
|
|
14
14
|
"rootMainFiles": [
|
|
15
15
|
"static/chunks/0kjot8367asxe.js",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0kjot8367asxe.js"/><script src="/_next/static/chunks/073081qv4uyn8.js" async=""></script><script src="/_next/static/chunks/0l4e3as18eexy.js" async=""></script><script src="/_next/static/chunks/0257pdz1-imal.js" async=""></script><script src="/_next/static/chunks/turbopack-00w.w1u3c~d-6.js" async=""></script><script src="/_next/static/chunks/01xlw8hd842-c.js" async=""></script><script src="/_next/static/chunks/07lbm-sdh9c2j.js" async=""></script><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/0kjot8367asxe.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/_next/static/chunks/01xlw8hd842-c.js\",\"/_next/static/chunks/07lbm-sdh9c2j.js\"],\"default\"]\n3:I[37457,[\"/_next/static/chunks/01xlw8hd842-c.js\",\"/_next/static/chunks/07lbm-sdh9c2j.js\"],\"default\"]\n4:I[97367,[\"/_next/static/chunks/01xlw8hd842-c.js\",\"/_next/static/chunks/07lbm-sdh9c2j.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[97367,[\"/_next/static/chunks/01xlw8hd842-c.js\",\"/_next/static/chunks/07lbm-sdh9c2j.js\"],\"ViewportBoundary\"]\na:I[97367,[\"/_next/static/chunks/01xlw8hd842-c.js\",\"/_next/static/chunks/07lbm-sdh9c2j.js\"],\"MetadataBoundary\"]\nc:I[68027,[\"/_next/static/chunks/01xlw8hd842-c.js\",\"/_next/static/chunks/07lbm-sdh9c2j.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"
|
|
1
|
+
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0kjot8367asxe.js"/><script src="/_next/static/chunks/073081qv4uyn8.js" async=""></script><script src="/_next/static/chunks/0l4e3as18eexy.js" async=""></script><script src="/_next/static/chunks/0257pdz1-imal.js" async=""></script><script src="/_next/static/chunks/turbopack-00w.w1u3c~d-6.js" async=""></script><script src="/_next/static/chunks/01xlw8hd842-c.js" async=""></script><script src="/_next/static/chunks/07lbm-sdh9c2j.js" async=""></script><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/0kjot8367asxe.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/_next/static/chunks/01xlw8hd842-c.js\",\"/_next/static/chunks/07lbm-sdh9c2j.js\"],\"default\"]\n3:I[37457,[\"/_next/static/chunks/01xlw8hd842-c.js\",\"/_next/static/chunks/07lbm-sdh9c2j.js\"],\"default\"]\n4:I[97367,[\"/_next/static/chunks/01xlw8hd842-c.js\",\"/_next/static/chunks/07lbm-sdh9c2j.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[97367,[\"/_next/static/chunks/01xlw8hd842-c.js\",\"/_next/static/chunks/07lbm-sdh9c2j.js\"],\"ViewportBoundary\"]\na:I[97367,[\"/_next/static/chunks/01xlw8hd842-c.js\",\"/_next/static/chunks/07lbm-sdh9c2j.js\"],\"MetadataBoundary\"]\nc:I[68027,[\"/_next/static/chunks/01xlw8hd842-c.js\",\"/_next/static/chunks/07lbm-sdh9c2j.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"u6-8f8u1tspYCacGAz53R\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[]\n"])</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"
|
|
1
|
+
self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"GwuUBX3DXeyKkkJAignXaovk0hB09jJ8zPrH6ryYJH8=\"\n}"
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,98183,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={assign:function(){return l},searchParamsToUrlQuery:function(){return i},urlQueryToSearchParams:function(){return s}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});function i(e){let t={};for(let[r,n]of e.entries()){let e=t[r];void 0===e?t[r]=n:Array.isArray(e)?e.push(n):t[r]=[e,n]}return t}function o(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function s(e){let t=new URLSearchParams;for(let[r,n]of Object.entries(e))if(Array.isArray(n))for(let e of n)t.append(r,o(e));else t.set(r,o(n));return t}function l(e,...t){for(let r of t){for(let t of r.keys())e.delete(t);for(let[t,n]of r.entries())e.append(t,n)}return e}},18967,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={DecodeError:function(){return y},MiddlewareNotFoundError:function(){return w},MissingStaticPage:function(){return v},NormalizeError:function(){return x},PageNotFoundError:function(){return b},SP:function(){return g},ST:function(){return m},WEB_VITALS:function(){return i},execOnce:function(){return o},getDisplayName:function(){return u},getLocationOrigin:function(){return c},getURL:function(){return d},isAbsoluteUrl:function(){return l},isResSent:function(){return p},loadGetInitialProps:function(){return h},normalizeRepeatedSlashes:function(){return f},stringifyError:function(){return j}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let i=["CLS","FCP","FID","INP","LCP","TTFB"];function o(e){let t,r=!1;return(...n)=>(r||(r=!0,t=e(...n)),t)}let s=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,l=e=>s.test(e);function c(){let{protocol:e,hostname:t,port:r}=window.location;return`${e}//${t}${r?":"+r:""}`}function d(){let{href:e}=window.location,t=c();return e.substring(t.length)}function u(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function p(e){return e.finished||e.headersSent}function f(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?`?${t.slice(1).join("?")}`:"")}async function h(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await h(t.Component,t.ctx)}:{};let n=await e.getInitialProps(t);if(r&&p(r))return n;if(!n)throw Object.defineProperty(Error(`"${u(e)}.getInitialProps()" should resolve to an object. But found "${n}" instead.`),"__NEXT_ERROR_CODE",{value:"E1025",enumerable:!1,configurable:!0});return n}let g="u">typeof performance,m=g&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class y extends Error{}class x extends Error{}class b extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message=`Cannot find module for page: ${e}`}}class v extends Error{constructor(e,t){super(),this.message=`Failed to load static file for page: ${e} ${t}`}}class w extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function j(e){return JSON.stringify({message:e.message,stack:e.stack})}},33525,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"warnOnce",{enumerable:!0,get:function(){return n}});let n=e=>{}},69198,e=>{"use strict";var t=e.i(18050);e.i(74472);var r=e.i(33815);e.s(["AgentBadge",0,function({agent:e}){if(!e||"claude-code"===e)return null;let n=(0,r.getAgentMetadata)(e);return n?(0,t.jsx)("span",{style:{display:"inline-flex",alignItems:"center",borderRadius:4,padding:"2px 6px",fontSize:10,letterSpacing:"0.04em",textTransform:"uppercase",whiteSpace:"nowrap",fontWeight:600,color:n.accentColor,background:`color-mix(in srgb, ${n.accentColor} 12%, transparent)`,border:`1px solid color-mix(in srgb, ${n.accentColor} 30%, transparent)`},title:`Source: ${n.displayName}`,children:n.shortLabel}):null}])},43531,e=>{"use strict";let t=(0,e.i(75254).default)("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);e.s(["Check",0,t],43531)},3116,e=>{"use strict";let t=(0,e.i(75254).default)("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);e.s(["Clock",0,t],3116)},41240,63639,e=>{"use strict";var t=e.i(75254);let r=(0,t.default)("Lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]]);e.s(["Lightbulb",0,r],41240);let n=(0,t.default)("Radio",[["path",{d:"M4.9 19.1C1 15.2 1 8.8 4.9 4.9",key:"1vaf9d"}],["path",{d:"M7.8 16.2c-2.3-2.3-2.3-6.1 0-8.5",key:"u1ii0m"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"M16.2 7.8c2.3 2.3 2.3 6.1 0 8.5",key:"1j5fej"}],["path",{d:"M19.1 4.9C23 8.8 23 15.1 19.1 19",key:"10b0cb"}]]);e.s(["Radio",0,n],63639)},31278,e=>{"use strict";let t=(0,e.i(75254).default)("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);e.s(["Loader2",0,t],31278)},54611,e=>{"use strict";let t=/^##\s+\[([^\]]+)\](?:\s+[—\-–]\s+(\S+))?\s*$/,r=/^###\s+(.+?)\s*$/,n=/^[-*]\s+(.+?)\s*$/,a=function(e){let a=e.split(/\r?\n/),i=[],o=null,s=null,l=[];function c(){s&&l.length>0&&(s.bullets.push(l.join(" ").trim()),l=[])}for(let e of a){let a=t.exec(e);if(a){c(),s=null,o={version:a[1].trim(),date:a[2]?.trim()??null,sections:[]},i.push(o);continue}if(!o)continue;let d=r.exec(e);if(d){c(),s={kind:d[1].trim(),bullets:[]},o.sections.push(s);continue}let u=n.exec(e);if(u){c(),l=[u[1]];continue}l.length>0&&e.trim().length>0&&l.push(e.trim())}return c(),i}("# Changelog\n\nAll notable user-facing changes to the Fleetlens CLI (`fleetlens` on npm) are\nrecorded here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).\nThe team-server has its own log at `packages/team-server/CHANGELOG.md`.\n\n## [0.9.0] — 2026-05-07\n\n### Added\n- **Gemini CLI** as the third agent source. Sessions written to `~/.gemini/tmp/<slug>/chats/session-*.jsonl` are now read, parsed, and rendered alongside Claude Code and Codex. Tool calls (`read_file`, `list_directory`, `glob`, `run_shell_command`, `update_topic`, …) and their results show in the session timeline; thinking blocks, multi-write status replay, `$set` / `$rewindTo` semantics, and the legacy single-JSON file shape all handled. Slug → cwd inversion via `~/.gemini/projects.json`. `✺` glyph + purple accent in the UI.\n\n### Changed\n- Session detail timeline drops in-turn idle hatching. Within a turn, every wait — model loading, tool execution, network — is the agent's active time. Only between-turn idle (user reading + composing the next message) renders as hatched.\n- Gemini parser anchors `firstTimestamp`, `lastTimestamp`, and `activeSegments` on conversational events only. Login/OAuth `info` records and `metadata.startTime` (file-creation moment) no longer stretch the session bar back to before the first user message.\n\n## [0.7.1] — 2026-05-07\n\n### Fixed\n- Cycle-peaks trend no longer renders two bars labeled the same day. When Anthropic's rolling 7-day window slid its anchor between consecutive polls, the daemon's bucketer (hour-rounded) recorded both reset boundaries as distinct cycles. They're now merged within a 12 h tolerance — same fix in `apps/web/lib/cycle-peaks.ts` (used by `/usage`) and in `packages/cli/src/team/sync.ts` (the daemon's team-server push), so both the personal `/usage` chart and the team-server's plan-utilization view stay consistent. 5-hour cycles keep no merge tolerance (their anchor is stable; merging would collapse legitimate distinct cycles).\n\n## [0.6.4] — 2026-05-04\n\n### Fixed\n- Cached calibration events per-file so `/usage` warm renders complete in well under a second on large session histories.\n\n## [0.6.3] — 2026-05-04\n\n### Fixed\n- Dropped poisoned auto-week locks left behind by interrupted runs; backfill now gates on the live pipeline lock instead.\n\n## [0.6.2] — 2026-05-04\n\n### Added\n- Last week's digest auto-generates on launch when AI features are on. Disable in Settings → AI features.\n\n## [0.6.1] — 2026-05-04\n\n### Changed\n- Smaller install size — published bundle no longer drags in unused workspace metadata.\n\n## [0.6.0] — 2026-04-30\n\n### Added\n- V2 perception layer. Daily, weekly, and monthly digests synthesized from per-session entries via a strict hierarchical pipeline (entry → day → week → month). Past-period digests are immutable on disk; current-period digests use a 10-min in-memory TTL.\n- `/insights` route with on-demand week and month digest generation, picker history, and force-regen.\n- `fleetlens digest day | week | month [--json]` — CLI surface that reproduces the same digests served at `/insights`.\n- `fleetlens entries [--day | --session | --all] [--json]` — inspect the per-session entry primitive.\n\n### Changed\n- Renamed \"active time\" to \"agent time\" across the dashboard and CLI for clarity.\n\n## [0.4.1] — 2026-04-23\n\n### Added\n- Concurrency view on `/parallelism` page. Bursts colored teal for same-project and purple for cross-project (the genuinely interesting fleet-work signal).\n- Plan utilization sparkline on the sidebar, fed by the usage daemon's 5-min snapshots.\n\n### Fixed\n- Auto-update no longer leaves a zombie web server on the old binary; both server and daemon are torn down before re-exec.\n\n## [0.4.0] — 2026-04-18\n\n### Added\n- Usage daemon (`fleetlens daemon …`) polls `/api/oauth/usage` every 5 min and appends snapshots to `~/.cclens/usage.jsonl`. `fleetlens start` and `fleetlens stop` manage server + daemon together.\n- `fleetlens usage --history` for inspecting past plan utilization.\n\n## [0.3.0] — 2026-04-10\n\n### Added\n- Project rollups with worktree aggregation. Sessions inside `<project>/.worktrees/<name>` roll up under their parent canonical project with a `+N wt` badge.\n- Pinned projects in the sidebar (per-browser via localStorage).\n\n## [0.2.0] — 2026-04-01\n\n### Changed\n- Active-segment computation now uses all timestamped events (system + summary + sidechain + conversational) instead of conversational-only. Earlier filter undercounted by up to 100x on tool-heavy sessions.\n\n## [0.1.0] — 2026-03-15\n\n### Added\n- Initial release. Local-only dashboard for Claude Code sessions: timeline, projects, daily activity bucketing, parallelism detection, per-model cost estimation. Reads JSONL transcripts from `~/.claude/projects/`.\n");a[0]?.version,e.s(["STORAGE_KEY",0,"cclens:changelog-last-seen"],54611)},86619,e=>{"use strict";var t=e.i(71645);e.s(["usePersistentBoolean",0,function(e,r){let[n,a]=(0,t.useState)(r),[i,o]=(0,t.useState)(!1);return(0,t.useEffect)(()=>{try{let t=window.localStorage.getItem(e);"1"===t?a(!0):"0"===t&&a(!1)}catch{}o(!0)},[e]),(0,t.useEffect)(()=>{let t=t=>{let r=t.detail;r?.key===e&&"boolean"==typeof r.value&&a(r.value)},r=t=>{t.key===e&&("1"===t.newValue?a(!0):"0"===t.newValue&&a(!1))};return window.addEventListener("cclens:persistent-boolean",t),window.addEventListener("storage",r),()=>{window.removeEventListener("cclens:persistent-boolean",t),window.removeEventListener("storage",r)}},[e]),[n,(0,t.useCallback)(t=>{a(t);try{window.localStorage.setItem(e,t?"1":"0")}catch{}window.dispatchEvent(new CustomEvent("cclens:persistent-boolean",{detail:{key:e,value:t}}))},[e]),i]}])},95057,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={formatUrl:function(){return s},formatWithValidation:function(){return c},urlObjectKeys:function(){return l}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let i=e.r(90809)._(e.r(98183)),o=/https?|ftp|gopher|file/;function s(e){let{auth:t,hostname:r}=e,n=e.protocol||"",a=e.pathname||"",s=e.hash||"",l=e.query||"",c=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?c=t+e.host:r&&(c=t+(~r.indexOf(":")?`[${r}]`:r),e.port&&(c+=":"+e.port)),l&&"object"==typeof l&&(l=String(i.urlQueryToSearchParams(l)));let d=e.search||l&&`?${l}`||"";return n&&!n.endsWith(":")&&(n+=":"),e.slashes||(!n||o.test(n))&&!1!==c?(c="//"+(c||""),a&&"/"!==a[0]&&(a="/"+a)):c||(c=""),s&&"#"!==s[0]&&(s="#"+s),d&&"?"!==d[0]&&(d="?"+d),a=a.replace(/[?#]/g,encodeURIComponent),d=d.replace("#","%23"),`${n}${c}${a}${d}${s}`}let l=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"];function c(e){return s(e)}},18581,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"useMergedRef",{enumerable:!0,get:function(){return a}});let n=e.r(71645);function a(e,t){let r=(0,n.useRef)(null),a=(0,n.useRef)(null);return(0,n.useCallback)(n=>{if(null===n){let e=r.current;e&&(r.current=null,e());let t=a.current;t&&(a.current=null,t())}else e&&(r.current=i(e,n)),t&&(a.current=i(t,n))},[e,t])}function i(e,t){if("function"!=typeof e)return e.current=t,()=>{e.current=null};{let r=e(t);return"function"==typeof r?r:()=>e(null)}}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},73668,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"isLocalURL",{enumerable:!0,get:function(){return i}});let n=e.r(18967),a=e.r(52817);function i(e){if(!(0,n.isAbsoluteUrl)(e))return!0;try{let t=(0,n.getLocationOrigin)(),r=new URL(e,t);return r.origin===t&&(0,a.hasBasePath)(r.pathname)}catch(e){return!1}}},84508,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"errorOnce",{enumerable:!0,get:function(){return n}});let n=e=>{}},22016,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={default:function(){return y},useLinkStatus:function(){return b}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let i=e.r(90809),o=e.r(18050),s=i._(e.r(71645)),l=e.r(95057),c=e.r(8372),d=e.r(18581),u=e.r(18967),p=e.r(5550);e.r(33525);let f=e.r(88540),h=e.r(91949),g=e.r(73668),m=e.r(9396);function y(t){var r,n;let a,i,y,[b,v]=(0,s.useOptimistic)(h.IDLE_LINK_STATUS),w=(0,s.useRef)(null),{href:j,as:k,children:S,prefetch:C=null,passHref:$,replace:M,shallow:T,scroll:z,onClick:P,onMouseEnter:R,onTouchStart:I,legacyBehavior:E=!1,onNavigate:O,transitionTypes:L,ref:A,unstable_dynamicOnHover:N,...D}=t;a=S,E&&("string"==typeof a||"number"==typeof a)&&(a=(0,o.jsx)("a",{children:a}));let W=s.default.useContext(c.AppRouterContext),_=!1!==C,F=!1!==C?null===(n=C)||"auto"===n?m.FetchStrategy.PPR:m.FetchStrategy.Full:m.FetchStrategy.PPR,U="string"==typeof(r=k||j)?r:(0,l.formatUrl)(r);if(E){if(a?.$$typeof===Symbol.for("react.lazy"))throw Object.defineProperty(Error("`<Link legacyBehavior>` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's `<a>` tag."),"__NEXT_ERROR_CODE",{value:"E863",enumerable:!1,configurable:!0});i=s.default.Children.only(a)}let B=E?i&&"object"==typeof i&&i.ref:A,G=s.default.useCallback(e=>(null!==W&&(w.current=(0,h.mountLinkInstance)(e,U,W,F,_,v)),()=>{w.current&&((0,h.unmountLinkForCurrentNavigation)(w.current),w.current=null),(0,h.unmountPrefetchableInstance)(e)}),[_,U,W,F,v]),H={ref:(0,d.useMergedRef)(G,B),onClick(t){E||"function"!=typeof P||P(t),E&&i.props&&"function"==typeof i.props.onClick&&i.props.onClick(t),!W||t.defaultPrevented||function(t,r,n,a,i,o,l){if("u">typeof window){let c,{nodeName:d}=t.currentTarget;if("A"===d.toUpperCase()&&((c=t.currentTarget.getAttribute("target"))&&"_self"!==c||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.nativeEvent&&2===t.nativeEvent.which)||t.currentTarget.hasAttribute("download"))return;if(!(0,g.isLocalURL)(r)){a&&(t.preventDefault(),location.replace(r));return}if(t.preventDefault(),o){let e=!1;if(o({preventDefault:()=>{e=!0}}),e)return}let{dispatchNavigateAction:u}=e.r(99781);s.default.startTransition(()=>{u(r,a?"replace":"push",!1===i?f.ScrollBehavior.NoScroll:f.ScrollBehavior.Default,n.current,l)})}}(t,U,w,M,z,O,L)},onMouseEnter(e){E||"function"!=typeof R||R(e),E&&i.props&&"function"==typeof i.props.onMouseEnter&&i.props.onMouseEnter(e),W&&_&&(0,h.onNavigationIntent)(e.currentTarget,!0===N)},onTouchStart:function(e){E||"function"!=typeof I||I(e),E&&i.props&&"function"==typeof i.props.onTouchStart&&i.props.onTouchStart(e),W&&_&&(0,h.onNavigationIntent)(e.currentTarget,!0===N)}};return(0,u.isAbsoluteUrl)(U)?H.href=U:E&&!$&&("a"!==i.type||"href"in i.props)||(H.href=(0,p.addBasePath)(U)),y=E?s.default.cloneElement(i,H):(0,o.jsx)("a",{...D,...H,children:a}),(0,o.jsx)(x.Provider,{value:b,children:y})}e.r(84508);let x=(0,s.createContext)(h.IDLE_LINK_STATUS),b=()=>(0,s.useContext)(x);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},75254,e=>{"use strict";var t=e.i(71645);let r=(...e)=>e.filter((e,t,r)=>!!e&&""!==e.trim()&&r.indexOf(e)===t).join(" ").trim();var n={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let a=(0,t.forwardRef)(({color:e="currentColor",size:a=24,strokeWidth:i=2,absoluteStrokeWidth:o,className:s="",children:l,iconNode:c,...d},u)=>(0,t.createElement)("svg",{ref:u,...n,width:a,height:a,stroke:e,strokeWidth:o?24*Number(i)/Number(a):i,className:r("lucide",s),...d},[...c.map(([e,r])=>(0,t.createElement)(e,r)),...Array.isArray(l)?l:[l]]));e.s(["default",0,(e,n)=>{let i=(0,t.forwardRef)(({className:i,...o},s)=>(0,t.createElement)(a,{ref:s,iconNode:n,className:r(`lucide-${e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,i),...o}));return i.displayName=`${e}`,i}],75254)},74472,33815,e=>{"use strict";let t=[{kind:"claude-code",displayName:"Claude Code",shortLabel:"Claude",accentColor:"var(--af-accent)",iconChar:"✦"},{kind:"codex",displayName:"Codex (OpenAI)",shortLabel:"Codex",accentColor:"rgb(16, 163, 127)",iconChar:"◆"},{kind:"gemini",displayName:"Gemini CLI",shortLabel:"Gemini",accentColor:"rgb(124, 92, 246)",iconChar:"✺"}],r=new Set(t.map(e=>e.kind));e.s(["getAgentMetadata",0,function(e){return t.find(t=>t.kind===e)},"isAgentKind",0,function(e){return"string"==typeof e&&r.has(e)}],33815),e.s([],74472)},23614,41783,e=>{"use strict";var t=e.i(18050),r=e.i(22016);e.i(74472);var n=e.i(33815);function a({agent:e,size:r=11,title:i}){if(!e)return null;let o=(0,n.getAgentMetadata)(e);return o?(0,t.jsx)("span",{"aria-hidden":!0,title:i??o.displayName,style:{display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0,width:r+2,height:r+2,fontSize:r,lineHeight:1,color:o.accentColor},children:o.iconChar}):null}e.s(["AgentIcon",0,a],41783);let i={shipped:{bg:"rgba(72, 187, 120, 0.12)",fg:"#48bb78",label:"Shipped",icon:"🚀"},partial:{bg:"rgba(66, 153, 225, 0.12)",fg:"#4299e1",label:"Partial",icon:"🔨"},blocked:{bg:"rgba(245, 101, 101, 0.12)",fg:"#f56565",label:"Blocked",icon:"🚧"},exploratory:{bg:"rgba(160, 174, 192, 0.12)",fg:"#a0aec0",label:"Exploratory",icon:"🧭"},trivial:{bg:"rgba(203, 213, 224, 0.12)",fg:"#a0aec0",label:"Warmup",icon:"💤"},idle:{bg:"rgba(203, 213, 224, 0.12)",fg:"#a0aec0",label:"Idle",icon:"—"}},o={sm:{fontSize:9,padding:"1px 6px",iconGap:3,borderRadius:99},md:{fontSize:10,padding:"2px 8px",iconGap:4,borderRadius:99},lg:{fontSize:11,padding:"3px 10px",iconGap:5,borderRadius:99}},s={shipped:6,partial:5,blocked:4,exploratory:3,trivial:2,idle:1};e.s(["OUTCOME_STYLES",0,i,"OutcomePill",0,function(e){let n=o[e.size??"md"],s=n.fontSize+1;if("pending"in e&&e.pending){let i={display:"inline-flex",alignItems:"center",gap:n.iconGap,padding:n.padding,borderRadius:n.borderRadius,fontSize:n.fontSize,fontWeight:600,background:"rgba(160, 174, 192, 0.08)",color:"var(--af-text-tertiary)",border:"1px dashed var(--af-border-subtle)",textDecoration:"none",whiteSpace:"nowrap"};return(0,t.jsxs)(r.default,{href:`/digest/${e.localDay}`,style:i,title:`Generate ${e.localDay} digest →`,children:[e.agent&&(0,t.jsx)(a,{agent:e.agent,size:s}),(0,t.jsx)("span",{"aria-hidden":!0,style:{lineHeight:1},children:"⋯"}),(0,t.jsx)("span",{children:"pending"})]})}let l=i[e.outcome],c=e.label??"both",d={display:"inline-flex",alignItems:"center",gap:n.iconGap,padding:n.padding,borderRadius:n.borderRadius,fontSize:n.fontSize,fontWeight:600,background:l.bg,color:l.fg,whiteSpace:"nowrap"};return(0,t.jsxs)("span",{style:d,title:l.label,children:[e.agent&&(0,t.jsx)(a,{agent:e.agent,size:s}),("icon"===c||"both"===c)&&(0,t.jsx)("span",{"aria-hidden":!0,style:{lineHeight:1},children:l.icon}),("text"===c||"both"===c)&&(0,t.jsx)("span",{children:l.label})]})},"outcomePriority",0,function(e){return e?s[e]:0}],23614)},18566,(e,t,r)=>{t.exports=e.r(76562)},56324,e=>{"use strict";let t={input:1,output:5,cacheRead:.1,cacheWrite:1.25},r={input:3,output:15,cacheRead:.3,cacheWrite:3.75},n={input:5,output:25,cacheRead:.5,cacheWrite:6.25};e.s(["estimateCost",0,function(e,a){let i=function(e){if(!e)return n;let a=e.toLowerCase();return a.includes("haiku")?t:a.includes("sonnet")?r:n}(a);return e.input/1e6*i.input+e.output/1e6*i.output+e.cacheRead/1e6*i.cacheRead+e.cacheWrite/1e6*i.cacheWrite},"formatCost",0,function(e){return e<.01?"<$0.01":e<1||e<100?`$${e.toFixed(2)}`:e<1e3?`$${e.toFixed(1)}`:`$${e.toLocaleString(void 0,{maximumFractionDigits:0})}`},"formatDuration",0,function(e){if(void 0===e)return"—";if(e<1e3)return`${e}ms`;let t=Math.round(e/1e3);if(t<60)return`${t}s`;let r=Math.floor(t/60),n=t%60;if(r<60)return n?`${r}m ${n}s`:`${r}m`;let a=Math.floor(r/60),i=r%60;return i?`${a}h ${i}m`:`${a}h`},"formatGap",0,function(e){if(e<1e3)return`${e}ms`;let t=e/1e3;if(t<60)return`${t.toFixed(1)}s`;let r=Math.floor(t/60);if(r<60){let e=Math.round(t%60);return`${r}m ${e}s`}let n=Math.floor(r/60),a=r%60;if(n<24)return a?`${n}h ${a}m`:`${n}h`;let i=Math.floor(n/24),o=n%24;return o?`${i}d ${o}h`:`${i}d`},"formatOffset",0,function(e){if(void 0===e||e<0)return"—";let t=Math.floor(e/1e3),r=Math.floor(t/3600),n=String(Math.floor(t%3600/60)).padStart(2,"0"),a=String(t%60).padStart(2,"0");return`${r}:${n}:${a}`},"formatRelative",0,function(e){let t=Date.parse(e);if(Number.isNaN(t))return e;let r=Math.round((Date.now()-t)/1e3);if(r<60)return`${r}s ago`;let n=Math.round(r/60);if(n<60)return`${n}m ago`;let a=Math.round(n/60);if(a<24)return`${a}h ago`;let i=Math.round(a/24);return`${i}d ago`},"formatTokens",0,function(e){return e<1e3?String(e):e<1e4?(e/1e3).toFixed(1)+"k":e<1e6?Math.round(e/1e3)+"k":e<1e7?(e/1e6).toFixed(2)+"M":(e/1e6).toFixed(1)+"M"},"prettyProjectName",0,function(e,t=35){let r=e.split("/").filter(Boolean),n=r.lastIndexOf(".worktrees");if(n>0&&n<r.length-1){let e=r[n-1],a=r[n+1],i=`${e}/${a}`;return i.length<=t?i:"…"+i.slice(i.length-t+1)}let a=r.length>=2?`${r[r.length-2]}/${r[r.length-1]}`:r[r.length-1]??e;return a.length<=t?a:"…"+a.slice(a.length-t+1)},"shortId",0,function(e){return e.length<=10?e:e.slice(0,6)+"…"+e.slice(-4)}])},55436,e=>{"use strict";let t=(0,e.i(75254).default)("Search",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);e.s(["Search",0,t],55436)},56004,e=>{"use strict";var t=e.i(18050),r=e.i(22016);let n={display:"inline-flex",alignItems:"center",borderRadius:4,padding:"2px 6px",fontSize:10,letterSpacing:"0.04em",textTransform:"uppercase",whiteSpace:"nowrap"};e.s(["TeamBadge",0,function({session:e,linkable:a=!0}){if(!e.teamName)return null;let i=!0===e.isTeamLead,o=void 0!==e.agentName;return i||o?i&&a?(0,t.jsx)(r.default,{href:`/sessions/${e.id}`,style:{...n,fontWeight:600,background:"var(--af-warning-subtle)",color:"var(--af-warning)",border:"1px solid var(--af-warning-subtle)",textDecoration:"none"},title:`Team lead — ${e.teamName}`,children:"Team Lead"}):i?(0,t.jsx)("span",{style:{...n,fontWeight:600,background:"var(--af-warning-subtle)",color:"var(--af-warning)",border:"1px solid var(--af-warning-subtle)"},title:`Team lead — ${e.teamName}`,children:"Team Lead"}):(0,t.jsx)("span",{style:{...n,fontWeight:500,background:"var(--af-surface-hover)",color:"var(--af-text-tertiary)",border:"1px solid var(--af-border-subtle)"},title:`Team member — ${e.teamName} \xb7 ${e.agentName}`,children:"Team Member"}):null}])},86566,e=>{"use strict";var t=e.i(18050),r=e.i(22016),n=e.i(18566),a=e.i(71645),i=e.i(75254);let o=(0,i.default)("LayoutDashboard",[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]]),s=(0,i.default)("ListTree",[["path",{d:"M21 12h-8",key:"1bmf0i"}],["path",{d:"M21 6H8",key:"1pqkrb"}],["path",{d:"M21 18h-8",key:"1tm79t"}],["path",{d:"M3 6v4c0 1.1.9 2 2 2h3",key:"1ywdgy"}],["path",{d:"M3 10v6c0 1.1.9 2 2 2h3",key:"2wc746"}]]),l=(0,i.default)("FolderOpen",[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]]),c=(0,i.default)("Pin",[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z",key:"1nkz8b"}]]),d=(0,i.default)("PinOff",[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89",key:"znwnzq"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h11",key:"c9qhm2"}]]);var u=e.i(55436);let p=(0,i.default)("Activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]),f=(0,i.default)("Gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]);var h=e.i(41240),g=e.i(63639);let m=(0,i.default)("Settings",[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z",key:"1qme2f"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]),y=(0,i.default)("CalendarDays",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M16 14h.01",key:"1gbofw"}],["path",{d:"M8 18h.01",key:"lrp35t"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M16 18h.01",key:"kzsmim"}]]);var x=e.i(56324);let b=(0,i.default)("Moon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]),v=(0,i.default)("Sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]),w="claude-lens:theme";function j(e){if("u">typeof document){document.documentElement.setAttribute("data-theme",e);try{document.cookie=`claude-lens-theme=${e};path=/;max-age=31536000;samesite=lax`}catch{}}}function k(){let[e,r]=(0,a.useState)("dark"),[n,i]=(0,a.useState)(!1);return(0,a.useEffect)(()=>{let e=document.documentElement.getAttribute("data-theme");if("light"===e||"dark"===e)r(e);else{let e=function(){try{let e=window.localStorage.getItem(w);if("light"===e||"dark"===e)return e}catch{}return null}()??(window.matchMedia("(prefers-color-scheme: light)").matches?"light":"dark");r(e),j(e)}i(!0)},[]),(0,t.jsx)("button",{type:"button",onClick:()=>{let t="dark"===e?"light":"dark";r(t),j(t);try{window.localStorage.setItem(w,t)}catch{}},"aria-label":"dark"===e?"Switch to light mode":"Switch to dark mode",title:"dark"===e?"Switch to light mode":"Switch to dark mode",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:6,background:"transparent",border:"1px solid var(--af-border-subtle)",color:"var(--af-text-secondary)",cursor:"pointer",transition:"all 0.12s"},onMouseEnter:e=>{e.currentTarget.style.background="var(--af-surface-hover)",e.currentTarget.style.color="var(--af-text)"},onMouseLeave:e=>{e.currentTarget.style.background="transparent",e.currentTarget.style.color="var(--af-text-secondary)"},children:n?"dark"===e?(0,t.jsx)(v,{size:14}):(0,t.jsx)(b,{size:14}):null})}var S=e.i(86619);function C({snapshot:e}){let n,a,[i,,o]=(0,S.usePersistentBoolean)("cclens:usage:show-sonnet",!1);if(!e)return(0,t.jsxs)("div",{style:{padding:"10px 16px 12px",borderTop:"1px solid var(--af-border-subtle)",fontSize:10,color:"var(--af-text-tertiary)",lineHeight:1.4},children:[(0,t.jsx)("div",{style:{textTransform:"uppercase",letterSpacing:"0.06em",fontWeight:600,marginBottom:4},children:"Usage"}),(0,t.jsxs)("div",{children:["Run ",(0,t.jsx)("code",{style:{fontFamily:"var(--font-mono)"},children:"cclens daemon start"})," to collect metrics."]})]});let s=[{label:"5h",window:e.five_hour},{label:"7d",window:e.seven_day}];return o&&i&&s.push({label:"Sonnet 7d",window:e.seven_day_sonnet}),(0,t.jsxs)(r.default,{href:"/usage",style:{display:"block",padding:"10px 16px 12px",borderTop:"1px solid var(--af-border-subtle)",textDecoration:"none",color:"inherit"},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",fontSize:10,fontWeight:600,color:"var(--af-text-tertiary)",textTransform:"uppercase",letterSpacing:"0.06em",marginBottom:8},children:[(0,t.jsx)("span",{children:"Current usage"}),(0,t.jsx)("span",{suppressHydrationWarning:!0,style:{fontWeight:500,textTransform:"none",letterSpacing:0},children:(n=new Date(e.captured_at).getTime(),(a=Math.round((Date.now()-n)/1e3))<60?`${a}s ago`:a<3600?`${Math.floor(a/60)}m ago`:a<86400?`${Math.floor(a/3600)}h ago`:`${Math.floor(a/86400)}d ago`)})]}),(0,t.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:6},children:s.map(e=>(0,t.jsx)($,{...e},e.label))})]})}function $({label:e,window:r}){let n=r?.utilization??null,a=null!==n,i=a?Math.max(0,Math.min(100,n)):0,o=i>=90?"var(--af-danger)":i>=70?"var(--af-warning)":"var(--af-success)";return(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"baseline",gap:6,fontSize:10,color:"var(--af-text-secondary)",marginBottom:2,fontVariantNumeric:"tabular-nums"},children:[(0,t.jsx)("span",{children:e}),r?.resets_at&&(0,t.jsxs)("span",{suppressHydrationWarning:!0,style:{fontSize:9,color:"var(--af-text-tertiary)",flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:["resets ",function(e){let t,r=Math.round((new Date(e).getTime()-Date.now())/1e3),n=Math.abs(r);if(n<60)t=`${n}s`;else if(n<3600)t=`${Math.floor(n/60)}m`;else if(n<86400){let e=Math.floor(n/3600),r=Math.floor(n%3600/60);t=r>0?`${e}h${r}m`:`${e}h`}else{let e=Math.floor(n/86400),r=Math.floor(n%86400/3600);t=r>0?`${e}d${r}h`:`${e}d`}return r<0?`${t} ago`:`in ${t}`}(r.resets_at)]}),(0,t.jsx)("span",{style:{fontWeight:600,color:"var(--af-text)",marginLeft:"auto"},children:a?`${i.toFixed(0)}%`:"—"})]}),(0,t.jsx)("div",{style:{height:4,background:"var(--af-border-subtle)",borderRadius:999,overflow:"hidden"},children:(0,t.jsx)("div",{style:{height:"100%",width:a?`${i}%`:"0%",background:o,borderRadius:999,transition:"width 0.24s ease"}})})]})}let M=(0,i.default)("Megaphone",[["path",{d:"m3 11 18-5v12L3 14v-3z",key:"n962bs"}],["path",{d:"M11.6 16.8a3 3 0 1 1-5.8-1.6",key:"1yl0tm"}]]);var T=e.i(54611);function z({latestVersion:e,active:n}){let[i,o]=(0,a.useState)(!1);return(0,a.useEffect)(()=>{if(!e)return void o(!1);try{let t=window.localStorage.getItem(T.STORAGE_KEY);o(t!==e)}catch{o(!1)}},[e]),(0,t.jsxs)(r.default,{href:"/changelog","aria-label":i?"Changelog (new entries)":"Changelog",title:i?`What's new in v${e}`:"Changelog",style:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",width:24,height:24,borderRadius:6,color:n?"var(--af-text)":"var(--af-text-tertiary)",background:n?"var(--af-surface-hover)":"transparent",textDecoration:"none"},children:[(0,t.jsx)(M,{size:14}),i&&(0,t.jsx)("span",{"aria-hidden":!0,style:{position:"absolute",top:3,right:3,width:7,height:7,borderRadius:"50%",background:"#ef4444",border:"1.5px solid var(--af-surface)"}})]})}let P="claude-lens:pinned-projects:v1";function R({href:e,active:n,icon:a,trailing:i,children:o}){return(0,t.jsxs)(r.default,{href:e,style:{display:"flex",alignItems:"center",gap:10,padding:"8px 12px",borderRadius:7,fontSize:13,fontWeight:500,color:n?"var(--af-accent)":"var(--af-text-secondary)",background:n?"var(--af-accent-subtle)":"transparent",transition:"all 0.12s"},children:[a,(0,t.jsx)("span",{style:{flex:1},children:o}),i&&(0,t.jsx)("span",{style:{fontSize:10,color:n?"var(--af-accent)":"var(--af-text-tertiary)",fontFamily:"var(--font-mono)"},children:i})]})}function I({label:e,items:n,pathname:a,isPinned:i,onTogglePin:o}){return 0===n.length?null:(0,t.jsxs)("div",{style:{marginTop:10},children:[(0,t.jsx)("div",{style:{fontSize:10,color:"var(--af-text-tertiary)",textTransform:"uppercase",letterSpacing:"0.06em",padding:"0 10px 6px",fontWeight:600},children:e}),(0,t.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:n.map(e=>{let n=`/projects/${encodeURIComponent(e.projectDir)}`,s=a===n,l=(0,x.prettyProjectName)(e.projectName);return(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:4,padding:"5px 6px 5px 10px",borderRadius:6,background:s?"var(--af-accent-subtle)":"transparent",color:s?"var(--af-accent)":"var(--af-text-secondary)"},children:[(0,t.jsxs)(r.default,{href:n,style:{flex:1,minWidth:0,fontSize:12,color:"inherit",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",display:"flex",alignItems:"center",gap:5},title:(e.worktreeCount??0)>0?`${e.projectName} — ${e.worktreeCount} worktree${1===e.worktreeCount?"":"s"}`:e.projectName,children:[(0,t.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0},children:l}),(e.worktreeCount??0)>0&&(0,t.jsxs)("span",{style:{fontSize:9,fontWeight:600,padding:"1px 5px",borderRadius:100,background:"rgba(167, 139, 250, 0.15)",color:"rgba(167, 139, 250, 1)",flexShrink:0},children:["+",e.worktreeCount," wt"]})]}),(0,t.jsx)("span",{style:{fontSize:10,color:"var(--af-text-tertiary)",fontFamily:"var(--font-mono)",marginLeft:4},children:e.sessionCount}),(0,t.jsx)("button",{type:"button",onClick:t=>{t.preventDefault(),t.stopPropagation(),o(e.projectDir)},"aria-label":i(e.projectDir)?"Unpin project":"Pin project",title:i(e.projectDir)?"Unpin":"Pin",style:{background:"transparent",border:"none",padding:3,borderRadius:4,color:i(e.projectDir)?"var(--af-accent)":"var(--af-text-tertiary)",display:"flex",alignItems:"center"},children:i(e.projectDir)?(0,t.jsx)(d,{size:12}):(0,t.jsx)(c,{size:12})}),e.lastActiveMs&&(0,t.jsx)("span",{style:{fontSize:9,color:"var(--af-text-tertiary)",marginLeft:2,minWidth:32,textAlign:"right"},title:new Date(e.lastActiveMs).toISOString(),suppressHydrationWarning:!0,children:(0,x.formatRelative)(new Date(e.lastActiveMs).toISOString())})]},e.projectDir)})})]})}e.s(["Sidebar",0,function({projects:e,totalSessions:i,currentUsage:c,version:d,latestChangelogVersion:x}){let b=(0,n.usePathname)(),[v,w]=(0,a.useState)(new Set),[j,S]=(0,a.useState)(!1),[$,M]=(0,a.useState)("");(0,a.useEffect)(()=>{w(function(){try{let e=window.localStorage.getItem(P);if(!e)return new Set;let t=JSON.parse(e);return new Set(Array.isArray(t)?t:[])}catch{return new Set}}()),S(!0)},[]);let T=e=>{w(t=>{let r=new Set(t);r.has(e)?r.delete(e):r.add(e);try{window.localStorage.setItem(P,JSON.stringify(Array.from(r)))}catch{}return r})},E=(0,a.useMemo)(()=>{if(!$.trim())return e;let t=$.toLowerCase();return e.filter(e=>e.projectName.toLowerCase().includes(t))},[e,$]),O=E.filter(e=>v.has(e.projectDir)),L=E.filter(e=>!v.has(e.projectDir));return(0,t.jsxs)("aside",{style:{width:260,flexShrink:0,borderRight:"1px solid var(--af-border-subtle)",background:"var(--af-surface)",display:"flex",flexDirection:"column",position:"sticky",top:0,height:"100vh"},children:[(0,t.jsx)("div",{style:{padding:"18px 20px 12px",borderBottom:"1px solid var(--af-border-subtle)"},children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10},children:[(0,t.jsx)("div",{style:{width:28,height:28,borderRadius:7,background:"var(--af-accent-subtle)",display:"flex",alignItems:"center",justifyContent:"center",color:"var(--af-accent)"},children:(0,t.jsx)(p,{size:16,strokeWidth:2.25})}),(0,t.jsxs)("div",{style:{minWidth:0,flex:1},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"baseline",gap:6},children:[(0,t.jsx)("span",{style:{fontSize:14,fontWeight:700,letterSpacing:"-0.01em"},children:"Fleetlens"}),(0,t.jsxs)("span",{style:{fontSize:10,color:"var(--af-text-tertiary)",fontFamily:"var(--font-mono)",fontWeight:500},title:`fleetlens ${d}`,children:["v",d]})]}),(0,t.jsx)("div",{style:{fontSize:11,color:"var(--af-text-tertiary)"},children:"Multi-agent fleet analytics"})]})]})}),(0,t.jsxs)("nav",{style:{padding:"10px 10px 6px",display:"flex",flexDirection:"column",gap:2},children:[(0,t.jsx)(R,{href:"/",active:"/"===b,icon:(0,t.jsx)(o,{size:15}),children:"Overview"}),(0,t.jsx)(R,{href:"/sessions",active:"/sessions"===b||b.startsWith("/sessions/"),icon:(0,t.jsx)(s,{size:15}),trailing:i>0?String(i):void 0,children:"All sessions"}),(0,t.jsx)(R,{href:"/projects",active:"/projects"===b,icon:(0,t.jsx)(l,{size:15}),trailing:e.length>0?String(e.length):void 0,children:"Projects"}),(0,t.jsx)(R,{href:"/day",active:"/day"===b||b.startsWith("/day/")||"/digest"===b||b.startsWith("/digest/")||"/parallelism"===b,icon:(0,t.jsx)(y,{size:15}),children:"Day"}),(0,t.jsx)(R,{href:"/usage",active:"/usage"===b,icon:(0,t.jsx)(f,{size:15}),children:"Usage"}),(0,t.jsx)(R,{href:"/insights",active:"/insights"===b,icon:(0,t.jsx)(h.Lightbulb,{size:15}),children:"Insights"}),(0,t.jsx)(R,{href:"/runs",active:"/runs"===b||b.startsWith("/runs/"),icon:(0,t.jsx)(g.Radio,{size:15}),children:"Runs"})]}),(0,t.jsxs)("div",{style:{margin:"0 14px",padding:"8px 0",borderTop:"1px solid var(--af-border-subtle)",borderBottom:"1px solid var(--af-border-subtle)",display:"flex",alignItems:"center",gap:6},children:[(0,t.jsx)(u.Search,{size:13,color:"var(--af-text-tertiary)"}),(0,t.jsx)("input",{type:"text",placeholder:"Search projects",value:$,onChange:e=>M(e.target.value),style:{flex:1,background:"transparent",border:"none",padding:"4px 0",fontSize:12,color:"var(--af-text)"}})]}),(0,t.jsxs)("div",{style:{flex:1,overflow:"auto",padding:"4px 8px 20px"},children:[j&&O.length>0&&(0,t.jsx)(I,{label:"Pinned",items:O,pathname:b,isPinned:e=>v.has(e),onTogglePin:T}),(0,t.jsx)(I,{label:"Projects",items:L,pathname:b,isPinned:e=>v.has(e),onTogglePin:T})]}),(0,t.jsx)(C,{snapshot:c}),(0,t.jsxs)("div",{style:{padding:"10px 16px 10px 20px",fontSize:10,color:"var(--af-text-tertiary)",borderTop:"1px solid var(--af-border-subtle)",display:"flex",alignItems:"center",gap:8},children:[(0,t.jsxs)("span",{style:{flex:1,minWidth:0},children:[i," sessions · ",e.length," projects"]}),(0,t.jsx)(z,{latestVersion:x,active:"/changelog"===b}),(0,t.jsx)(r.default,{href:"/settings","aria-label":"Settings",title:"Settings",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:24,height:24,borderRadius:6,color:"/settings"===b?"var(--af-text)":"var(--af-text-tertiary)",background:"/settings"===b?"var(--af-surface-hover)":"transparent",textDecoration:"none"},children:(0,t.jsx)(m,{size:14})}),(0,t.jsx)(k,{})]})]})}],86566)},51878,e=>{"use strict";var t=e.i(18566),r=e.i(71645);e.s(["LiveRefresher",0,function(){let e,n=(0,t.useRouter)(),a=(e=(0,t.usePathname)(),e?.includes("/insights/print/")??!1),i=(0,r.useRef)(null),o=(0,r.useRef)({session:0,usage:0});return!function(e,t={}){let{enabled:n=!0}=t,a=(0,r.useRef)(e);(0,r.useEffect)(()=>{a.current=e},[e]),(0,r.useEffect)(()=>{if(!n)return;let e=new EventSource("/api/events");return e.onmessage=e=>{try{let t=JSON.parse(e.data);("session-updated"===t.type||"usage-updated"===t.type)&&a.current(t)}catch{}},e.onerror=()=>{},()=>{e.close()}},[n])}((0,r.useCallback)(e=>{let t="usage-updated"===e.type?"usage":"session";e.mtimeMs<=(o.current[t]??0)||(o.current[t]=e.mtimeMs,i.current&&clearTimeout(i.current),i.current=setTimeout(()=>{n.refresh()},400))},[n]),{enabled:!a}),(0,r.useEffect)(()=>()=>{i.current&&clearTimeout(i.current)},[]),null}],51878)},23884,e=>{"use strict";var t=e.i(18050),r=e.i(71645),n=e.i(18566),a=e.i(22016),i=e.i(56324),o=e.i(56004),s=e.i(69198),l=e.i(23614);let c="cclens-live-widget-expanded";e.s(["LiveSessionsWidget",0,function({sessions:e,entrySummaries:d={}}){let u=(0,n.usePathname)(),[p,f]=(0,r.useState)(()=>Date.now()),[h,g]=(0,r.useState)(!1);if((0,r.useEffect)(()=>{try{let e=localStorage.getItem(c);null!==e&&g("true"===e)}catch{}},[]),(0,r.useEffect)(()=>{let e=setInterval(()=>f(Date.now()),1e4);return()=>clearInterval(e)},[]),u&&/^\/sessions\/[^/]+$/.test(u))return null;let m=e.filter(e=>{if(!e.lastTimestamp)return!1;let t=Date.parse(e.lastTimestamp);return!Number.isNaN(t)&&p-t<=45e3}).slice().sort((e,t)=>{let r=e.firstTimestamp?Date.parse(e.firstTimestamp):0;return(t.firstTimestamp?Date.parse(t.firstTimestamp):0)-r});if(0===m.length)return null;let y=h?m.slice(0,5):[],x=h?m.length-y.length:0;return(0,t.jsxs)("div",{style:{position:"fixed",right:20,bottom:20,zIndex:100,display:"flex",flexDirection:"column-reverse",gap:6,maxWidth:320,pointerEvents:"auto"},children:[(0,t.jsxs)("button",{type:"button",onClick:()=>{var e;return e=e=>!e,void g(t=>{let r=e(t);try{localStorage.setItem(c,String(r))}catch{}return r})},style:{display:"inline-flex",alignItems:"center",gap:6,padding:"5px 11px 5px 9px",background:"rgba(239, 68, 68, 0.14)",border:"1px solid rgba(239, 68, 68, 0.4)",borderRadius:100,fontSize:10,fontWeight:700,color:"#ef4444",letterSpacing:"0.06em",textTransform:"uppercase",alignSelf:"flex-end",cursor:"pointer",userSelect:"none",backdropFilter:"blur(8px)",WebkitBackdropFilter:"blur(8px)",boxShadow:"0 2px 10px rgba(239, 68, 68, 0.15)"},title:h?"Collapse":`Show ${m.length} live session${1===m.length?"":"s"}`,children:[(0,t.jsx)("span",{style:{display:"inline-block",width:6,height:6,borderRadius:"50%",background:"#ef4444",animation:"cs-live-pulse 1.6s ease-in-out infinite"}}),"Live · ",m.length]}),h&&x>0&&(0,t.jsxs)("div",{style:{fontSize:10,color:"var(--af-text-tertiary)",padding:"0 4px",textAlign:"right"},children:["+",x," more live"]}),y.map(e=>{let r=d[e.id];return(0,t.jsxs)(a.default,{href:`/sessions/${e.id}`,style:{display:"block",padding:"10px 12px",background:"var(--af-surface-elevated)",border:"1px solid var(--af-border-subtle)",borderLeft:"2px solid #ef4444",borderRadius:8,boxShadow:"0 4px 16px rgba(0, 0, 0, 0.12)",textDecoration:"none",color:"var(--af-text)",fontSize:11,lineHeight:1.35,backdropFilter:"blur(8px)",WebkitBackdropFilter:"blur(8px)"},title:(e.lastUserPreview||e.firstUserPreview||e.lastAgentPreview)??(0,i.prettyProjectName)(e.projectName),children:[r&&(0,t.jsx)("div",{onClick:e=>e.stopPropagation(),style:{marginBottom:4},children:r.outcome?(0,t.jsx)(l.OutcomePill,{outcome:r.outcome,size:"sm",label:"text",agent:e.agent}):"skipped_trivial"!==r.enrichmentStatus?(0,t.jsx)(l.OutcomePill,{outcome:null,pending:!0,sessionId:e.id,localDay:r.localDay,size:"sm",agent:e.agent}):null}),(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,fontWeight:500,color:"var(--af-text)",minWidth:0},children:[(0,t.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0},children:e.lastUserPreview||e.firstUserPreview||(0,t.jsx)("em",{style:{color:"var(--af-text-tertiary)"},children:"(no user message)"})}),(0,t.jsx)(o.TeamBadge,{session:e,linkable:!1}),(0,t.jsx)(s.AgentBadge,{agent:e.agent})]}),(0,t.jsx)("div",{style:{fontSize:10,color:"var(--af-text-secondary)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",marginTop:3,fontStyle:"italic"},children:e.lastAgentPreview?(0,t.jsxs)(t.Fragment,{children:["↳ ",e.lastAgentPreview]}):(0,t.jsx)("em",{style:{color:"var(--af-text-tertiary)"},children:"waiting…"})}),(0,t.jsx)("div",{style:{fontSize:9,color:"var(--af-text-tertiary)",fontFamily:"var(--font-mono)",marginTop:4,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:(0,i.prettyProjectName)(e.projectName)})]},e.id)}),(0,t.jsx)("style",{children:`
|
|
2
|
+
@keyframes cs-live-pulse {
|
|
3
|
+
0%, 100% { opacity: 1; transform: scale(1); }
|
|
4
|
+
50% { opacity: 0.4; transform: scale(0.85); }
|
|
5
|
+
}
|
|
6
|
+
`})]})}])},62887,e=>{"use strict";var t=e.i(18050),r=e.i(71645),n=e.i(43531);let a=(0,e.i(75254).default)("CircleAlert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);var i=e.i(31278),o=e.i(3116),s=e.i(22016);let l="cclens-jobs-widget-expanded";function c({children:e}){return(0,t.jsx)("div",{style:{padding:"6px 14px",fontSize:9,color:"var(--af-text-tertiary)",textTransform:"uppercase",letterSpacing:"0.08em",fontWeight:700,background:"var(--af-surface)"},children:e})}function d({job:e}){let r="running"===e.status?i.Loader2:"queued"===e.status?o.Clock:"error"===e.status?a:n.Check,l="running"===e.status?"#4299e1":"queued"===e.status?"var(--af-text-tertiary)":"error"===e.status?"#f56565":"#48bb78",c=e.resultUrl&&("done"===e.status||"running"===e.status),u=c?s.default:"div",p=c?{href:e.resultUrl}:{};return(0,t.jsxs)(u,{...p,style:{display:"flex",alignItems:"flex-start",gap:10,padding:"10px 14px",borderBottom:"1px solid var(--af-border-subtle)",textDecoration:"none",color:"var(--af-text)",fontSize:11.5,cursor:c?"pointer":"default"},children:[(0,t.jsx)(r,{size:13,className:"running"===e.status?"cs-job-spin":"",style:{color:l,marginTop:2,flexShrink:0}}),(0,t.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,t.jsx)("div",{style:{fontWeight:500,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.label}),e.progress&&(0,t.jsx)("div",{style:{fontSize:10,color:"var(--af-text-tertiary)",marginTop:2,fontFamily:"var(--font-mono)"},children:function(e){if(void 0!==e.index&&void 0!==e.total)return`${e.phase} ${e.index}/${e.total}`;if(void 0!==e.bytes){let t=(e.bytes/1024).toFixed(1);return`${e.phase} \xb7 ${t}k`}return e.text?`${e.phase} \xb7 ${e.text}`:e.phase}(e.progress)}),"error"===e.status&&e.error&&(0,t.jsx)("div",{style:{fontSize:10,color:"#f56565",marginTop:2},children:e.error.length>60?e.error.slice(0,60)+"…":e.error}),"done"===e.status&&e.resultUrl&&(0,t.jsx)("div",{style:{fontSize:10,color:"var(--af-accent)",marginTop:2},children:"View →"})]})]})}e.s(["JobQueueWidget",0,function(){let[e,n]=(0,r.useState)([]),[a,o]=(0,r.useState)(!1);(0,r.useEffect)(()=>{try{let e=localStorage.getItem(l);null!==e&&o("true"===e)}catch{}},[]),(0,r.useEffect)(()=>{let t=!0,r=null,a=async()=>{try{let e=await fetch("/api/jobs",{cache:"no-store"});if(!e.ok)return;let r=await e.json();t&&n(r.jobs)}catch{}},i=()=>{t&&(r=setTimeout(async()=>{await a(),i()},e.some(e=>"running"===e.status||"queued"===e.status)?1500:6e3))};return a(),i(),()=>{t=!1,r&&clearTimeout(r)}},[e]);let s=e.filter(e=>"running"===e.status||"queued"===e.status),u=e.filter(e=>"done"===e.status||"error"===e.status||"cancelled"===e.status).slice(0,8);return 0===s.length?null:(0,t.jsxs)("div",{style:{position:"fixed",right:140,bottom:20,zIndex:99,display:"flex",flexDirection:"column-reverse",gap:6,maxWidth:320,alignItems:"flex-end"},children:[(0,t.jsxs)("button",{type:"button",onClick:()=>{var e;return e=e=>!e,void o(t=>{let r=e(t);try{localStorage.setItem(l,String(r))}catch{}return r})},title:`${s.length} job${1===s.length?"":"s"} running — click to ${a?"collapse":"expand"}`,style:{display:"inline-flex",alignItems:"center",gap:6,padding:"5px 11px 5px 9px",background:"rgba(66, 153, 225, 0.14)",border:"1px solid rgba(66, 153, 225, 0.4)",borderRadius:100,fontSize:10,fontWeight:700,color:"#4299e1",letterSpacing:"0.06em",textTransform:"uppercase",cursor:"pointer",userSelect:"none",backdropFilter:"blur(8px)",WebkitBackdropFilter:"blur(8px)",boxShadow:"0 2px 10px rgba(66, 153, 225, 0.15)",alignSelf:"flex-end"},children:[(0,t.jsx)(i.Loader2,{size:11,className:"cs-job-spin",style:{flexShrink:0}}),"Jobs · ",s.length]}),a&&(0,t.jsxs)("div",{style:{width:320,maxHeight:360,overflowY:"auto",background:"var(--af-surface-elevated)",border:"1px solid var(--af-border-subtle)",borderRadius:10,boxShadow:"0 8px 24px rgba(0,0,0,0.18)",backdropFilter:"blur(8px)",WebkitBackdropFilter:"blur(8px)"},children:[s.length>0&&(0,t.jsxs)("div",{children:[(0,t.jsx)(c,{children:"Running"}),s.map(e=>(0,t.jsx)(d,{job:e},e.id))]}),u.length>0&&(0,t.jsxs)("div",{children:[(0,t.jsx)(c,{children:"Recent"}),u.map(e=>(0,t.jsx)(d,{job:e},e.id))]})]}),(0,t.jsx)("style",{children:`
|
|
7
|
+
@keyframes cs-job-spin {
|
|
8
|
+
from { transform: rotate(0deg); }
|
|
9
|
+
to { transform: rotate(360deg); }
|
|
10
|
+
}
|
|
11
|
+
.cs-job-spin {
|
|
12
|
+
animation: cs-job-spin 1s linear infinite;
|
|
13
|
+
}
|
|
14
|
+
`})]})}],62887)}]);
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// AUTOGENERATED by scripts/build-changelog.mjs from CHANGELOG.md.
|
|
2
2
|
// Do not edit by hand — run `pnpm changelog:sync`.
|
|
3
|
-
export const RAW_CHANGELOG = "# Changelog\n\nAll notable user-facing changes to the Fleetlens CLI (`fleetlens` on npm) are\nrecorded here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).\nThe team-server has its own log at `packages/team-server/CHANGELOG.md`.\n\n## [0.7.1] — 2026-05-07\n\n### Fixed\n- Cycle-peaks trend no longer renders two bars labeled the same day. When Anthropic's rolling 7-day window slid its anchor between consecutive polls, the daemon's bucketer (hour-rounded) recorded both reset boundaries as distinct cycles. They're now merged within a 12 h tolerance — same fix in `apps/web/lib/cycle-peaks.ts` (used by `/usage`) and in `packages/cli/src/team/sync.ts` (the daemon's team-server push), so both the personal `/usage` chart and the team-server's plan-utilization view stay consistent. 5-hour cycles keep no merge tolerance (their anchor is stable; merging would collapse legitimate distinct cycles).\n\n## [0.6.4] — 2026-05-04\n\n### Fixed\n- Cached calibration events per-file so `/usage` warm renders complete in well under a second on large session histories.\n\n## [0.6.3] — 2026-05-04\n\n### Fixed\n- Dropped poisoned auto-week locks left behind by interrupted runs; backfill now gates on the live pipeline lock instead.\n\n## [0.6.2] — 2026-05-04\n\n### Added\n- Last week's digest auto-generates on launch when AI features are on. Disable in Settings → AI features.\n\n## [0.6.1] — 2026-05-04\n\n### Changed\n- Smaller install size — published bundle no longer drags in unused workspace metadata.\n\n## [0.6.0] — 2026-04-30\n\n### Added\n- V2 perception layer. Daily, weekly, and monthly digests synthesized from per-session entries via a strict hierarchical pipeline (entry → day → week → month). Past-period digests are immutable on disk; current-period digests use a 10-min in-memory TTL.\n- `/insights` route with on-demand week and month digest generation, picker history, and force-regen.\n- `fleetlens digest day | week | month [--json]` — CLI surface that reproduces the same digests served at `/insights`.\n- `fleetlens entries [--day | --session | --all] [--json]` — inspect the per-session entry primitive.\n\n### Changed\n- Renamed \"active time\" to \"agent time\" across the dashboard and CLI for clarity.\n\n## [0.4.1] — 2026-04-23\n\n### Added\n- Concurrency view on `/parallelism` page. Bursts colored teal for same-project and purple for cross-project (the genuinely interesting fleet-work signal).\n- Plan utilization sparkline on the sidebar, fed by the usage daemon's 5-min snapshots.\n\n### Fixed\n- Auto-update no longer leaves a zombie web server on the old binary; both server and daemon are torn down before re-exec.\n\n## [0.4.0] — 2026-04-18\n\n### Added\n- Usage daemon (`fleetlens daemon …`) polls `/api/oauth/usage` every 5 min and appends snapshots to `~/.cclens/usage.jsonl`. `fleetlens start` and `fleetlens stop` manage server + daemon together.\n- `fleetlens usage --history` for inspecting past plan utilization.\n\n## [0.3.0] — 2026-04-10\n\n### Added\n- Project rollups with worktree aggregation. Sessions inside `<project>/.worktrees/<name>` roll up under their parent canonical project with a `+N wt` badge.\n- Pinned projects in the sidebar (per-browser via localStorage).\n\n## [0.2.0] — 2026-04-01\n\n### Changed\n- Active-segment computation now uses all timestamped events (system + summary + sidechain + conversational) instead of conversational-only. Earlier filter undercounted by up to 100x on tool-heavy sessions.\n\n## [0.1.0] — 2026-03-15\n\n### Added\n- Initial release. Local-only dashboard for Claude Code sessions: timeline, projects, daily activity bucketing, parallelism detection, per-model cost estimation. Reads JSONL transcripts from `~/.claude/projects/`.\n";
|
|
3
|
+
export const RAW_CHANGELOG = "# Changelog\n\nAll notable user-facing changes to the Fleetlens CLI (`fleetlens` on npm) are\nrecorded here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).\nThe team-server has its own log at `packages/team-server/CHANGELOG.md`.\n\n## [0.9.0] — 2026-05-07\n\n### Added\n- **Gemini CLI** as the third agent source. Sessions written to `~/.gemini/tmp/<slug>/chats/session-*.jsonl` are now read, parsed, and rendered alongside Claude Code and Codex. Tool calls (`read_file`, `list_directory`, `glob`, `run_shell_command`, `update_topic`, …) and their results show in the session timeline; thinking blocks, multi-write status replay, `$set` / `$rewindTo` semantics, and the legacy single-JSON file shape all handled. Slug → cwd inversion via `~/.gemini/projects.json`. `✺` glyph + purple accent in the UI.\n\n### Changed\n- Session detail timeline drops in-turn idle hatching. Within a turn, every wait — model loading, tool execution, network — is the agent's active time. Only between-turn idle (user reading + composing the next message) renders as hatched.\n- Gemini parser anchors `firstTimestamp`, `lastTimestamp`, and `activeSegments` on conversational events only. Login/OAuth `info` records and `metadata.startTime` (file-creation moment) no longer stretch the session bar back to before the first user message.\n\n## [0.7.1] — 2026-05-07\n\n### Fixed\n- Cycle-peaks trend no longer renders two bars labeled the same day. When Anthropic's rolling 7-day window slid its anchor between consecutive polls, the daemon's bucketer (hour-rounded) recorded both reset boundaries as distinct cycles. They're now merged within a 12 h tolerance — same fix in `apps/web/lib/cycle-peaks.ts` (used by `/usage`) and in `packages/cli/src/team/sync.ts` (the daemon's team-server push), so both the personal `/usage` chart and the team-server's plan-utilization view stay consistent. 5-hour cycles keep no merge tolerance (their anchor is stable; merging would collapse legitimate distinct cycles).\n\n## [0.6.4] — 2026-05-04\n\n### Fixed\n- Cached calibration events per-file so `/usage` warm renders complete in well under a second on large session histories.\n\n## [0.6.3] — 2026-05-04\n\n### Fixed\n- Dropped poisoned auto-week locks left behind by interrupted runs; backfill now gates on the live pipeline lock instead.\n\n## [0.6.2] — 2026-05-04\n\n### Added\n- Last week's digest auto-generates on launch when AI features are on. Disable in Settings → AI features.\n\n## [0.6.1] — 2026-05-04\n\n### Changed\n- Smaller install size — published bundle no longer drags in unused workspace metadata.\n\n## [0.6.0] — 2026-04-30\n\n### Added\n- V2 perception layer. Daily, weekly, and monthly digests synthesized from per-session entries via a strict hierarchical pipeline (entry → day → week → month). Past-period digests are immutable on disk; current-period digests use a 10-min in-memory TTL.\n- `/insights` route with on-demand week and month digest generation, picker history, and force-regen.\n- `fleetlens digest day | week | month [--json]` — CLI surface that reproduces the same digests served at `/insights`.\n- `fleetlens entries [--day | --session | --all] [--json]` — inspect the per-session entry primitive.\n\n### Changed\n- Renamed \"active time\" to \"agent time\" across the dashboard and CLI for clarity.\n\n## [0.4.1] — 2026-04-23\n\n### Added\n- Concurrency view on `/parallelism` page. Bursts colored teal for same-project and purple for cross-project (the genuinely interesting fleet-work signal).\n- Plan utilization sparkline on the sidebar, fed by the usage daemon's 5-min snapshots.\n\n### Fixed\n- Auto-update no longer leaves a zombie web server on the old binary; both server and daemon are torn down before re-exec.\n\n## [0.4.0] — 2026-04-18\n\n### Added\n- Usage daemon (`fleetlens daemon …`) polls `/api/oauth/usage` every 5 min and appends snapshots to `~/.cclens/usage.jsonl`. `fleetlens start` and `fleetlens stop` manage server + daemon together.\n- `fleetlens usage --history` for inspecting past plan utilization.\n\n## [0.3.0] — 2026-04-10\n\n### Added\n- Project rollups with worktree aggregation. Sessions inside `<project>/.worktrees/<name>` roll up under their parent canonical project with a `+N wt` badge.\n- Pinned projects in the sidebar (per-browser via localStorage).\n\n## [0.2.0] — 2026-04-01\n\n### Changed\n- Active-segment computation now uses all timestamped events (system + summary + sidechain + conversational) instead of conversational-only. Earlier filter undercounted by up to 100x on tool-heavy sessions.\n\n## [0.1.0] — 2026-03-15\n\n### Added\n- Initial release. Local-only dashboard for Claude Code sessions: timeline, projects, daily activity bucketing, parallelism detection, per-model cost estimation. Reads JSONL transcripts from `~/.claude/projects/`.\n";
|