cctally 1.116.1 → 1.117.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/README.md +4 -6
  3. package/bin/_cctally_account.py +57 -3
  4. package/bin/_cctally_cache.py +5720 -885
  5. package/bin/_cctally_claude_attribution.py +997 -0
  6. package/bin/_cctally_completion.py +101 -28
  7. package/bin/_cctally_core.py +235 -12
  8. package/bin/_cctally_dashboard.py +263 -17
  9. package/bin/_cctally_dashboard_conversation.py +107 -21
  10. package/bin/_cctally_dashboard_envelope.py +44 -0
  11. package/bin/_cctally_db.py +928 -80
  12. package/bin/_cctally_diagnosis_sources.py +78 -13
  13. package/bin/_cctally_doctor.py +211 -86
  14. package/bin/_cctally_five_hour.py +446 -22
  15. package/bin/_cctally_forecast.py +302 -6
  16. package/bin/_cctally_journal.py +2418 -158
  17. package/bin/_cctally_milestone_history.py +379 -91
  18. package/bin/_cctally_oauth_samples.py +185 -7
  19. package/bin/_cctally_parser.py +38 -0
  20. package/bin/_cctally_project.py +34 -8
  21. package/bin/_cctally_quarantine.py +821 -343
  22. package/bin/_cctally_quota.py +69 -4
  23. package/bin/_cctally_quota_calibration.py +677 -3
  24. package/bin/_cctally_quota_model.py +927 -127
  25. package/bin/_cctally_record.py +922 -445
  26. package/bin/_cctally_rederive.py +119 -15
  27. package/bin/_cctally_statusline.py +1048 -176
  28. package/bin/_cctally_store.py +544 -110
  29. package/bin/_cctally_tui.py +455 -42
  30. package/bin/_cctally_update.py +77 -14
  31. package/bin/_lib_account_protocol.py +227 -19
  32. package/bin/_lib_claude_attribution.py +421 -0
  33. package/bin/_lib_clone_copy.py +30 -0
  34. package/bin/_lib_codex_conversation_query.py +45 -9
  35. package/bin/_lib_codex_conversation_watch.py +72 -13
  36. package/bin/_lib_codex_rollout_container.py +234 -19
  37. package/bin/_lib_codex_worker_lifecycle.py +374 -0
  38. package/bin/_lib_credit.py +22 -13
  39. package/bin/_lib_dashboard_sources.py +257 -18
  40. package/bin/_lib_detector_access_registry.py +1335 -166
  41. package/bin/_lib_doctor.py +276 -92
  42. package/bin/_lib_ingest_frontier.py +269 -36
  43. package/bin/_lib_journal.py +273 -22
  44. package/bin/_lib_jsonl.py +12 -0
  45. package/bin/_lib_meter_rate_change.py +72 -0
  46. package/bin/_lib_outcome_quarantine.py +917 -554
  47. package/bin/_lib_provider_activity.py +24 -6
  48. package/bin/_lib_quota_calibration.py +57 -3
  49. package/bin/_lib_quota_copy.py +7 -2
  50. package/bin/_lib_quota_lineage.py +613 -0
  51. package/bin/_lib_quota_model.py +464 -33
  52. package/bin/_lib_rate_change_delivery.py +16 -0
  53. package/bin/_lib_reclaim_planner.py +6 -4
  54. package/bin/_lib_rederive.py +2046 -21
  55. package/bin/_lib_selector_state.py +131 -3
  56. package/bin/_lib_snapshot_cache.py +8 -0
  57. package/bin/_lib_stale_proof.py +113 -4
  58. package/bin/_lib_statusline.py +72 -3
  59. package/bin/_lib_statusline_candidates.py +246 -42
  60. package/bin/_lib_tick_stats.py +10 -5
  61. package/bin/_lib_write_io.py +419 -6
  62. package/bin/cctally +28 -11
  63. package/dashboard/static/assets/{ConversationsView-Dflb_myA.js → ConversationsView-oqNsWzWV.js} +1 -1
  64. package/dashboard/static/assets/{DoctorModal-DFX5CfIs.js → DoctorModal-B0DnU9d9.js} +1 -1
  65. package/dashboard/static/assets/ModalRoot-CYua2wP_.js +1 -0
  66. package/dashboard/static/assets/{ProjectsDrillPanel-C3PJy1xx.js → ProjectsDrillPanel-DSxXQSa-.js} +1 -1
  67. package/dashboard/static/assets/{SourceDetailModal-BczsWKhD.js → SourceDetailModal-BleDpQqG.js} +1 -1
  68. package/dashboard/static/assets/{UpdateModal-Os-Lo5cs.js → UpdateModal-CMqaAkSK.js} +1 -1
  69. package/dashboard/static/assets/{index-CYZ3NLqF.js → index-BjQV-0-D.js} +3 -3
  70. package/dashboard/static/assets/index-D34eYhAc.css +1 -0
  71. package/dashboard/static/assets/{outlineNavigation-k-zIif6W.js → outlineNavigation-CO-VWBm7.js} +1 -1
  72. package/dashboard/static/assets/{useKeymap-CW7Up0Ay.js → useKeymap-CUgEnnua.js} +1 -1
  73. package/dashboard/static/dashboard.html +3 -3
  74. package/package.json +5 -1
  75. package/dashboard/static/assets/ModalRoot-HlxoagIa.js +0 -1
  76. package/dashboard/static/assets/index-BKITk1CT.css +0 -1
@@ -1,4 +1,4 @@
1
- import{Ft as e,Rt as t,_t as n,ft as r,ht as i}from"./useKeymap-CW7Up0Ay.js";import{Ft as a}from"./index-CYZ3NLqF.js";var o=t(e(),1),s=class extends Error{status;constructor(e){super(`HTTP ${e}`),this.status=e,this.name=`HttpError`}};function c(e){return e?.name===`AbortError`}async function l(e,t){let n=await fetch(e,t?{signal:t}:void 0);if(!n.ok)throw new s(n.status);return await n.json()}function u(e){let t=e?.data_version;return typeof t==`string`&&t!==``?t:e?.generated_at??``}var d={legacy_bridge_pending:{reason:`legacy_bridge_pending`,message:`Transcripts have not finished moving into the conversation store. Run cctally cache-sync to finish the import.`,retryable:!1},maintenance:{reason:`maintenance`,message:`The conversation store is busy with maintenance. Conversations return once it finishes.`,retryable:!0},schema_behind:{reason:`schema_behind`,message:`The conversation store is behind this version of cctally. Run cctally cache-sync to bring it up to date.`,retryable:!1},schema_ahead:{reason:`schema_ahead`,message:`The conversation store was written by a newer version of cctally. Update cctally to read it.`,retryable:!1}},f={reason:`unavailable`,message:`The conversation store is not available right now.`,retryable:!0};function p(e){if(typeof e!=`object`||!e)return null;let t=e;return t.status===`degraded`?typeof t.degraded_reason==`string`&&t.degraded_reason?t.degraded_reason:f.reason:null}function m(e){return d[e]??{...f,reason:e||f.reason}}function h(e,t,n){n!==void 0&&e.append(t,String(n))}function g(e,t={}){let n=new URLSearchParams;return n.append(`source`,e),h(n,`account`,t.accountKey),h(n,`project_key`,t.projectKey),h(n,`model`,t.model),h(n,`limit`,t.limit),h(n,`cursor`,t.cursor),h(n,`selected`,t.selected),`/api/conversations?${n.toString()}`}function _(e,t){let n=new URLSearchParams({source:e});return h(n,`account`,t),`/api/conversations/facets?${n.toString()}`}function v(e,t){let n=new URLSearchParams;return n.append(`source`,e),h(n,`account`,t.accountKey),n.append(`q`,t.query),h(n,`kind`,t.kind),h(n,`limit`,t.limit),h(n,`cursor`,t.cursor),`/api/conversation/search?${n.toString().replace(/\+/g,`%20`)}`}var y={detail:``,outline:`/outline`,find:`/find`,prompts:`/prompts`,payload:`/payload`,export:`/export`,"anon-map":`/anon-map`,events:`/events`,media:`/media`};function b(e,t,r){let i=n(e);if(i.source===`codex`&&!i.key.startsWith(`v1.`))throw Error(`Codex conversation keys must be qualified`);let a=new URLSearchParams;h(a,`account`,i.account_key);for(let[e,t]of Object.entries(r??{}))t!==void 0&&a.append(e,typeof t==`boolean`?t?`1`:`0`:String(t));let o=a.size?`?${a.toString().replace(/\+/g,`%20`)}`:``;return`/api/conversation/${encodeURIComponent(i.key)}${y[t]}${o}`}function x(e){let t=e.native_card;return t?.type===`session_ref`?t.scope===`shell`&&t.ref!=null?[t.ref]:[]:t?.type===`program`?t.invocations.flatMap(e=>e.kind===`session`&&e.scope===`shell`&&e.ref!=null?[e.ref]:[]):[]}function S(e,t){return t==null?``:e===`shell`?`session ${t}`:`cell ${t}`}function C(e,t){return t==null?``:e===`shell`?`s${t}`:`c${t}`}function w(e){return e===`write`?`wrote to`:`polled`}function T(e){return e===`write`?`wrote`:`poll`}var E=60;function D(e){let t=e.replace(/\s+/g,` `).trim();return t.length>E?`${t.slice(0,E)}…`:t}function O(e){let t=new Set(e.flatMap(e=>x(e)));return t.size===1?[...t][0]:null}function k(e,t,n,r){if(!e||t!==`shell`||n==null)return`silent`;let i=e.sessions[n];return i?.opener_block_key==null?e.truncated?`index_truncated`:`not_retained`:r!=null&&r===i.opener_block_key?`opener`:`silent`}function A(e){return new Set(e.map(e=>e.parent_uuid))}function j(e){let t=new Map;for(let n of e){let e=t.get(n.parent_uuid);e?e.push(n):t.set(n.parent_uuid,[n])}return t}function M(e){return e.kind===`reasoning`?e.landmark_key:e.block_key}var N={tool_error:`error`,plan:`plan`,reasoning:`heading`};function P(e,t){if(!t?.length)return[];let n=j(t),r=[];return e.forEach((e,t)=>{for(let i of n.get(e.uuid)??[])r.push({landmark:i,ownerTurnIndex:t})}),r}var F=class extends Error{constructor(){super(`Conversation indexing is still finishing.`)}},I=class extends Error{reason;constructor(e){let t=m(e);super(t.message),this.name=`ConversationDegraded`,this.reason=t.reason}};function L(e){return typeof e==`number`&&Number.isFinite(e)?e:0}function ee(e){return typeof e==`number`&&Number.isFinite(e)?e:null}function R(e){if(e)return e.source===`codex`||`cached_input`in e||`reasoning_output`in e?{source:`codex`,input:L(e.input),output:L(e.output),cache_creation:0,cache_read:0,cached_input:L(e.cached_input),reasoning_output:L(e.reasoning_output)}:{source:`claude`,input:L(e.input),output:L(e.output),cache_creation:L(e.cache_creation??e.cache_create),cache_read:L(e.cache_read)}}function te(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return t>>>0||1}function z(e){if(typeof e!=`string`||e.trim()===``)return null;try{let t=JSON.parse(e);return t&&typeof t==`object`&&!Array.isArray(t)?t:{value:t}}catch{return{raw:e}}}var ne=new Set([`create_branch`,`stage`,`commit`,`push`,`create_pr`]);function B(e){return typeof e==`string`&&e.trim()!==``?e.trim():void 0}function re(e){if(!Array.isArray(e)||e.length===0)return;let t=[];for(let n of e){let e=V(n);if(!e||typeof e.key!=`string`||typeof e.text!=`string`)return;t.push({key:e.key,text:e.text})}return t}function ie(e){let t=V(e.detail?.reasoning);if(t?.schema_version===1){let n=B(t.title),r=B(t.summary),i=B(t.body);if(!n&&!r&&!i)return null;let a=re(t.headings);return{kind:`codex_reasoning`,source:B(t.source)??`codex`,title:n,summary:r,body:i,...a?{headings:a}:{},...e.block_key?{block_key:e.block_key}:{}}}let n=B(e.text);return n?{kind:`codex_reasoning`,source:`codex`,body:n,...e.block_key?{block_key:e.block_key}:{}}:null}function ae(e){if(!Array.isArray(e)||e.length===0)return null;let t=[];for(let n of e){let e=V(n);if(!e||e.schema_version!==1)return null;if(e.type===`git`&&typeof e.action==`string`&&ne.has(e.action)){t.push({type:`git`,action:e.action,...e.action===`create_pr`&&typeof e.draft==`boolean`?{draft:e.draft}:{}});continue}if(e.type===`memory_citation`&&Number.isSafeInteger(e.citation_count)&&Number(e.citation_count)>=0&&Number.isSafeInteger(e.rollout_count)&&Number(e.rollout_count)>=0){t.push({type:`memory_citation`,citation_count:Number(e.citation_count),rollout_count:Number(e.rollout_count)});continue}return null}return t}function oe(e){let t=V(e.detail?.lifecycle);return t?.schema_version!==1||t.event!==`task_started`&&t.event!==`task_complete`?null:{kind:`codex_lifecycle`,event:t.event,...B(t.message)?{message:B(t.message)}:{},...B(t.error)?{error:B(t.error)}:{},...typeof t.duration_ms==`number`&&Number.isFinite(t.duration_ms)?{duration_ms:t.duration_ms}:{},...e.block_key?{payload_key:e.block_key}:{}}}function V(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function se(e){if(!Array.isArray(e))return null;let t=[];for(let n of e){let e=V(n);if(!e)return null;let r={};for(let t of[`path`,`move_path`,`status`])typeof e[t]==`string`&&(r[t]=e[t]);t.push(r)}return t}function ce(e){if(!Array.isArray(e))return null;let t=[];for(let n of e){let e=V(n);if(!e)return null;let r={};for(let t of[`path`,`move_path`,`status`,`unified_diff`,`raw`,`raw_extra`])typeof e[t]==`string`&&(r[t]=e[t]);typeof e.truncated==`boolean`&&(r.truncated=e.truncated),(e.diff_source===`retained`||e.diff_source===`derived`)&&(r.diff_source=e.diff_source),t.push(r)}return t}function H(e){let t=V(e);if(t?.schema_version!==1||t.type!==`terminal_output`||!Array.isArray(t.parts))return;let n=t.parts.map(e=>{let t=V(e);if(!t||t.type!==`text`&&t.type!==`raw`||typeof t.text!=`string`)return null;let n=t.stream===`stdout`||t.stream===`stderr`?t.stream:`output`;return{type:t.type,stream:n,text:t.text}});if(!n.some(e=>e==null))return{schema_version:1,type:`terminal_output`,status:typeof t.status==`string`?t.status:`unknown`,is_error:t.is_error===!0,parts:n,truncated:t.truncated===!0,...typeof t.exit_code==`number`||t.exit_code===null?{exit_code:t.exit_code}:{},...typeof t.wall_time_seconds==`number`||t.wall_time_seconds===null?{wall_time_seconds:t.wall_time_seconds}:{}}}var le=new Set([`completed`,`failed`,`error`,`running`,`unknown`]),U=new Set([`failed`,`error`]);function ue(e){if(e)return{status:le.has(e.status)?e.status:`unknown`,exit_code:typeof e.exit_code==`number`?e.exit_code:null,wall_time_seconds:typeof e.wall_time_seconds==`number`?e.wall_time_seconds:null}}function de(e){if(!Array.isArray(e)||e.length===0)return;let t=[];for(let n of e){let e=V(n);if(!e)return;if(e.kind===`command`){if(typeof e.command!=`string`)return;t.push({kind:`command`,command:e.command,workdir:typeof e.workdir==`string`?e.workdir:null,metadata:V(e.metadata)??{}});continue}if(e.kind===`session`){if(e.scope!==`shell`&&e.scope!==`cell`||e.operation!==`write`&&e.operation!==`poll`)return;t.push({kind:`session`,scope:e.scope,operation:e.operation,ref:typeof e.ref==`string`?e.ref:null,chars:typeof e.chars==`string`?e.chars:null});continue}if(e.kind===`other`&&typeof e.name==`string`&&e.name!==``){t.push({kind:`other`,name:e.name});continue}return}return t}function fe(e){let t=de(e.invocations);if(!(!t||typeof e.complete!=`boolean`||typeof e.truncated!=`boolean`))return{schema_version:1,type:`program`,title:typeof e.title==`string`?e.title:null,complete:e.complete,invocations:t,truncated:e.truncated}}function pe(e){if(!(e.scope!==`shell`&&e.scope!==`cell`||e.operation!==`write`&&e.operation!==`poll`||typeof e.truncated!=`boolean`))return{schema_version:1,type:`session_ref`,scope:e.scope,operation:e.operation,ref:typeof e.ref==`string`?e.ref:null,chars:typeof e.chars==`string`?e.chars:null,truncated:e.truncated}}function me(e){if(typeof e.query==`string`)return{schema_version:1,type:`tool_search`,query:e.query,limit:typeof e.limit==`number`&&Number.isFinite(e.limit)?e.limit:null,...e.truncated===!0?{truncated:!0}:{}}}function he(e){let t=V(e),n=V(t?.sessions);if(!t||!n||typeof t.truncated!=`boolean`)return;let r=Object.create(null);for(let[e,t]of Object.entries(n)){let n=V(t);if(!n||!Number.isSafeInteger(n.ordinal)||n.opener_block_key!==null&&typeof n.opener_block_key!=`string`)return;r[e]={ordinal:n.ordinal,opener_block_key:n.opener_block_key}}return{sessions:r,truncated:t.truncated}}function ge(e){let t=V(e);if(t?.schema_version!==1||typeof t.name!=`string`||t.name===``||!(`input`in t)||typeof t.truncated!=`boolean`)return null;let n=t.span,r=Array.isArray(n)&&n.length===2&&Number.isSafeInteger(n[0])&&Number.isSafeInteger(n[1])&&n[0]>=0&&n[1]>=n[0]?[n[0],n[1]]:null;return{block:{kind:`external_call`,name:t.name,input:t.input,truncated:t.truncated},span:r}}function _e(e){let t=V(e);return!t||typeof t.status!=`string`||typeof t.truncated!=`boolean`||!(`value`in t)?null:{status:t.status,value:t.value,truncated:t.truncated}}function ve(e){if(e.source!==`update_plan`||typeof e.call_status!=`string`||!Array.isArray(e.items))return;let t=e.items.map(e=>{let t=V(e);return t&&typeof t.step==`string`&&typeof t.status==`string`?{step:t.step,status:t.status}:null}),n=e.result===void 0?void 0:_e(e.result);if(!(t.some(e=>e==null)||e.result!==void 0&&!n))return{schema_version:1,type:`plan`,source:`update_plan`,call_status:e.call_status,explanation:typeof e.explanation==`string`?e.explanation:null,items:t,...n?{result:n}:{}}}function ye(e){let t=V(e.completion);if(e.source!==`web_search_call`||typeof e.call_status!=`string`||typeof e.query!=`string`||!V(e.action)||!t||typeof t.status!=`string`||typeof t.query!=`string`||!V(t.action)||!Array.isArray(t.results))return;let n=t.results.map(e=>{let t=V(e);return!t||typeof t.title!=`string`||typeof t.url!=`string`?null:{title:t.title,url:t.url,...typeof t.domain==`string`?{domain:t.domain}:{},...typeof t.snippet==`string`?{snippet:t.snippet}:{},...typeof t.ref_id==`string`?{ref_id:t.ref_id}:{},...typeof t.type==`string`?{type:t.type}:{}}});if(!n.some(e=>e==null))return{schema_version:1,type:`web_search`,source:`web_search_call`,call_status:e.call_status,query:e.query,action:V(e.action),completion:{status:t.status,query:t.query,action:V(t.action),results:n,...typeof t.error==`string`?{error:t.error}:{},...typeof t.event_block_key==`string`?{event_block_key:t.event_block_key}:{}}}}function be(e){let t=V(e.completion),n=V(t?.duration);if(!(e.source!==`function_call`||typeof e.name!=`string`||typeof e.call_status!=`string`||!t||typeof t.status!=`string`||typeof t.server!=`string`||typeof t.tool!=`string`||!V(t.arguments)||!V(t.result)||!n||typeof n.secs!=`number`||!Number.isFinite(n.secs)||typeof n.nanos!=`number`||!Number.isFinite(n.nanos)))return{schema_version:1,type:`mcp`,source:`function_call`,name:e.name,call_status:e.call_status,completion:{status:t.status,server:t.server,tool:t.tool,arguments:V(t.arguments),result:V(t.result),duration:{secs:n.secs,nanos:n.nanos},...typeof t.event_block_key==`string`?{event_block_key:t.event_block_key}:{}}}}var xe=new Set([`spawn_agent`,`wait_agent`,`send_message`,`list_agents`,`followup_task`,`interrupt_agent`]);function Se(e){let t=typeof e.operation==`string`&&xe.has(e.operation)?e.operation:null,n=V(e.arguments),r=e.result===void 0?void 0:_e(e.result),i=e.child_conversation==null?null:V(e.child_conversation);if(!(!t||typeof e.call_status!=`string`||!n||e.result!==void 0&&!r||e.child_conversation!=null&&!i)&&!(i&&typeof i.conversation_key!=`string`))return{schema_version:1,type:`agent`,operation:t,call_status:e.call_status,arguments:n,...r?{result:r}:{},...i?{child_conversation:{conversation_key:i.conversation_key,...typeof i.role==`string`?{role:i.role}:{},...typeof i.nickname==`string`?{nickname:i.nickname}:{}}}:{}}}function W(e){let t=V(e.detail?.card);if(t?.schema_version!==1)return;if(t.type===`terminal`){if(!Array.isArray(t.commands)||t.commands.length===0)return;let n=t.commands.map(e=>{let t=V(e);return!t||typeof t.command!=`string`?null:{command:t.command,workdir:typeof t.workdir==`string`?t.workdir:null,metadata:V(t.metadata)??{}}});return n.some(e=>e==null)?void 0:{schema_version:1,type:`terminal`,status:typeof t.status==`string`?t.status:`unknown`,commands:n,output:H(e.output?.detail?.card),truncated:t.truncated===!0||e.output?.detail?.card!=null&&V(e.output.detail.card)?.truncated===!0}}if(t.type===`plan`)return ve(t);if(t.type===`web_search`)return ye(t);if(t.type===`mcp`)return be(t);if(t.type===`agent`)return Se(t);if(t.type===`program`)return fe(t);if(t.type===`session_ref`)return pe(t);if(t.type===`tool_search`)return me(t);if(t.type!==`patch`)return;let n=se(t.files);if(n==null)return;let r=V(t.completion),i=r?.schema_version===1&&r.type===`patch`?r:t,a=ce(i.files);if(a!=null)return{schema_version:1,type:`patch`,source:typeof t.source==`string`?t.source:`patch_apply_end`,status:typeof i.status==`string`?i.status:`unknown`,files:a,request_files:r?n:void 0,patch:typeof t.patch==`string`?t.patch:void 0,success:typeof i.success==`boolean`?i.success:null,stdout:typeof i.stdout==`string`?i.stdout:null,stderr:typeof i.stderr==`string`?i.stderr:null,has_diff:typeof i.has_diff==`boolean`?i.has_diff:a.some(e=>typeof e.unified_diff==`string`),truncated:t.truncated===!0||i.truncated===!0,event_payload_key:typeof i.event_block_key==`string`?i.event_block_key:void 0}}function Ce(e){let t=e[0],n=t.kind===`command`?t.command:t.kind===`session`?[w(t.operation),S(t.scope,t.ref)].filter(Boolean).join(` `):t.name;return e.length>1?`${n} +${e.length-1} more`:n}function we(e){return[S(e.scope,e.ref),e.chars==null?``:D(e.chars)].filter(Boolean).join(` · `)||e.operation}function G(e){if(e)return e.replace(/^\[((?:\$)[^\]\r\n]+)\]\([^\)\r\n]*\/SKILL\.md\)[ \t]*/,(e,t,n,r)=>n+e.length<r.length?`${t} `:t)}function Te(e,t){let n=[];for(let r of e){if(r.kind===`assistant`||r.kind===`user`||r.kind===`text`){let e=r.kind===`assistant`?ge(r.detail?.external_call):null,t=e?.span!=null&&r.text!=null&&e.span[1]<=r.text.length?e.span:null,i=t?`${r.text.slice(0,t[0])}${r.text.slice(t[1])}`.replace(/[ \t]*\n+$/,``):r.text;i&&n.push({kind:`text`,text:i,...r.block_key?{block_key:r.block_key}:{}}),e&&t&&n.push({...e.block,...r.block_key?{block_key:r.block_key}:{}});let a=ae(r.detail?.markers);a&&n.push({kind:`system_actions`,actions:a,...r.block_key?{payload_key:r.block_key}:{}});continue}if(r.kind===`thinking`){r.text?.trim()&&n.push({kind:`thinking`,text:r.text});continue}if(r.kind===`reasoning`){if(t===`codex`){let e=ie(r);e&&n.push(e)}else r.text?.trim()&&n.push({kind:`thinking`,text:r.text});continue}if(r.kind===`tool_call`){let e=r;if(t===`claude`&&r.detail==null&&typeof e.input_summary==`string`&&typeof e.preview==`string`&&`result`in e){n.push(e);continue}let i=typeof r.detail?.name==`string`?r.detail.name:null,a=typeof r.detail?.args==`string`?r.detail.args:``,o=W(r),s=o?.type===`terminal`?o:null,c=o?.type===`patch`?o:null,l=o?.type===`plan`?o:null,u=o?.type===`web_search`?o:null,d=o?.type===`mcp`?o:null,f=o?.type===`agent`?o:null,p=o?.type===`program`?o:null,m=o?.type===`session_ref`?o:null,h=o?.type===`tool_search`?o:null,g=s?{command:s.commands[0].command,workdir:s.commands[0].workdir}:u?{query:u.query,action:u.action}:d?d.completion.arguments:f?f.arguments:z(a),_=t===`codex`?ue(H(r.output?.detail?.card)):void 0,v=s?.output?.is_error===!0||c?.success===!1||U.has(u?.completion.status??``)||U.has(d?.completion.status??``)||U.has(_?.status??``),y=B(l?.explanation)??B(u?.query)??(d?B(`${d.completion.tool} · ${d.completion.server}`):void 0)??(f?B(f.operation):void 0)??B(h?.query)??B(p?.title)??(p?B(Ce(p.invocations)):void 0)??(m?B(we(m)):void 0),b=l?.result?.value??u?.completion.error??d?.completion.result??f?.result?.value??null,x=typeof b==`string`?b:b==null?null:JSON.stringify(b,null,2);n.push({kind:`tool_call`,name:i,input_summary:s?JSON.stringify({commands:s.commands}):a||r.text||``,input:g,preview:s?.commands[0].command??c?.files.map(e=>e.move_path??e.path).filter(Boolean).join(`, `)??y??(r.text??a).split(`
1
+ import{Ft as e,Rt as t,_t as n,ft as r,ht as i}from"./useKeymap-CUgEnnua.js";import{Ft as a}from"./index-BjQV-0-D.js";var o=t(e(),1),s=class extends Error{status;constructor(e){super(`HTTP ${e}`),this.status=e,this.name=`HttpError`}};function c(e){return e?.name===`AbortError`}async function l(e,t){let n=await fetch(e,t?{signal:t}:void 0);if(!n.ok)throw new s(n.status);return await n.json()}function u(e){let t=e?.data_version;return typeof t==`string`&&t!==``?t:e?.generated_at??``}var d={legacy_bridge_pending:{reason:`legacy_bridge_pending`,message:`Transcripts have not finished moving into the conversation store. Run cctally cache-sync to finish the import.`,retryable:!1},maintenance:{reason:`maintenance`,message:`The conversation store is busy with maintenance. Conversations return once it finishes.`,retryable:!0},schema_behind:{reason:`schema_behind`,message:`The conversation store is behind this version of cctally. Run cctally cache-sync to bring it up to date.`,retryable:!1},schema_ahead:{reason:`schema_ahead`,message:`The conversation store was written by a newer version of cctally. Update cctally to read it.`,retryable:!1}},f={reason:`unavailable`,message:`The conversation store is not available right now.`,retryable:!0};function p(e){if(typeof e!=`object`||!e)return null;let t=e;return t.status===`degraded`?typeof t.degraded_reason==`string`&&t.degraded_reason?t.degraded_reason:f.reason:null}function m(e){return d[e]??{...f,reason:e||f.reason}}function h(e,t,n){n!==void 0&&e.append(t,String(n))}function g(e,t={}){let n=new URLSearchParams;return n.append(`source`,e),h(n,`account`,t.accountKey),h(n,`project_key`,t.projectKey),h(n,`model`,t.model),h(n,`limit`,t.limit),h(n,`cursor`,t.cursor),h(n,`selected`,t.selected),`/api/conversations?${n.toString()}`}function _(e,t){let n=new URLSearchParams({source:e});return h(n,`account`,t),`/api/conversations/facets?${n.toString()}`}function v(e,t){let n=new URLSearchParams;return n.append(`source`,e),h(n,`account`,t.accountKey),n.append(`q`,t.query),h(n,`kind`,t.kind),h(n,`limit`,t.limit),h(n,`cursor`,t.cursor),`/api/conversation/search?${n.toString().replace(/\+/g,`%20`)}`}var y={detail:``,outline:`/outline`,find:`/find`,prompts:`/prompts`,payload:`/payload`,export:`/export`,"anon-map":`/anon-map`,events:`/events`,media:`/media`};function b(e,t,r){let i=n(e);if(i.source===`codex`&&!i.key.startsWith(`v1.`))throw Error(`Codex conversation keys must be qualified`);let a=new URLSearchParams;h(a,`account`,i.account_key);for(let[e,t]of Object.entries(r??{}))t!==void 0&&a.append(e,typeof t==`boolean`?t?`1`:`0`:String(t));let o=a.size?`?${a.toString().replace(/\+/g,`%20`)}`:``;return`/api/conversation/${encodeURIComponent(i.key)}${y[t]}${o}`}function x(e){let t=e.native_card;return t?.type===`session_ref`?t.scope===`shell`&&t.ref!=null?[t.ref]:[]:t?.type===`program`?t.invocations.flatMap(e=>e.kind===`session`&&e.scope===`shell`&&e.ref!=null?[e.ref]:[]):[]}function S(e,t){return t==null?``:e===`shell`?`session ${t}`:`cell ${t}`}function C(e,t){return t==null?``:e===`shell`?`s${t}`:`c${t}`}function w(e){return e===`write`?`wrote to`:`polled`}function T(e){return e===`write`?`wrote`:`poll`}var E=60;function D(e){let t=e.replace(/\s+/g,` `).trim();return t.length>E?`${t.slice(0,E)}…`:t}function O(e){let t=new Set(e.flatMap(e=>x(e)));return t.size===1?[...t][0]:null}function k(e,t,n,r){if(!e||t!==`shell`||n==null)return`silent`;let i=e.sessions[n];return i?.opener_block_key==null?e.truncated?`index_truncated`:`not_retained`:r!=null&&r===i.opener_block_key?`opener`:`silent`}function A(e){return new Set(e.map(e=>e.parent_uuid))}function j(e){let t=new Map;for(let n of e){let e=t.get(n.parent_uuid);e?e.push(n):t.set(n.parent_uuid,[n])}return t}function M(e){return e.kind===`reasoning`?e.landmark_key:e.block_key}var N={tool_error:`error`,plan:`plan`,reasoning:`heading`};function P(e,t){if(!t?.length)return[];let n=j(t),r=[];return e.forEach((e,t)=>{for(let i of n.get(e.uuid)??[])r.push({landmark:i,ownerTurnIndex:t})}),r}var F=class extends Error{constructor(){super(`Conversation indexing is still finishing.`)}},I=class extends Error{reason;constructor(e){let t=m(e);super(t.message),this.name=`ConversationDegraded`,this.reason=t.reason}};function L(e){return typeof e==`number`&&Number.isFinite(e)?e:0}function ee(e){return typeof e==`number`&&Number.isFinite(e)?e:null}function R(e){if(e)return e.source===`codex`||`cached_input`in e||`reasoning_output`in e?{source:`codex`,input:L(e.input),output:L(e.output),cache_creation:0,cache_read:0,cached_input:L(e.cached_input),reasoning_output:L(e.reasoning_output)}:{source:`claude`,input:L(e.input),output:L(e.output),cache_creation:L(e.cache_creation??e.cache_create),cache_read:L(e.cache_read)}}function te(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return t>>>0||1}function z(e){if(typeof e!=`string`||e.trim()===``)return null;try{let t=JSON.parse(e);return t&&typeof t==`object`&&!Array.isArray(t)?t:{value:t}}catch{return{raw:e}}}var ne=new Set([`create_branch`,`stage`,`commit`,`push`,`create_pr`]);function B(e){return typeof e==`string`&&e.trim()!==``?e.trim():void 0}function re(e){if(!Array.isArray(e)||e.length===0)return;let t=[];for(let n of e){let e=V(n);if(!e||typeof e.key!=`string`||typeof e.text!=`string`)return;t.push({key:e.key,text:e.text})}return t}function ie(e){let t=V(e.detail?.reasoning);if(t?.schema_version===1){let n=B(t.title),r=B(t.summary),i=B(t.body);if(!n&&!r&&!i)return null;let a=re(t.headings);return{kind:`codex_reasoning`,source:B(t.source)??`codex`,title:n,summary:r,body:i,...a?{headings:a}:{},...e.block_key?{block_key:e.block_key}:{}}}let n=B(e.text);return n?{kind:`codex_reasoning`,source:`codex`,body:n,...e.block_key?{block_key:e.block_key}:{}}:null}function ae(e){if(!Array.isArray(e)||e.length===0)return null;let t=[];for(let n of e){let e=V(n);if(!e||e.schema_version!==1)return null;if(e.type===`git`&&typeof e.action==`string`&&ne.has(e.action)){t.push({type:`git`,action:e.action,...e.action===`create_pr`&&typeof e.draft==`boolean`?{draft:e.draft}:{}});continue}if(e.type===`memory_citation`&&Number.isSafeInteger(e.citation_count)&&Number(e.citation_count)>=0&&Number.isSafeInteger(e.rollout_count)&&Number(e.rollout_count)>=0){t.push({type:`memory_citation`,citation_count:Number(e.citation_count),rollout_count:Number(e.rollout_count)});continue}return null}return t}function oe(e){let t=V(e.detail?.lifecycle);return t?.schema_version!==1||t.event!==`task_started`&&t.event!==`task_complete`?null:{kind:`codex_lifecycle`,event:t.event,...B(t.message)?{message:B(t.message)}:{},...B(t.error)?{error:B(t.error)}:{},...typeof t.duration_ms==`number`&&Number.isFinite(t.duration_ms)?{duration_ms:t.duration_ms}:{},...e.block_key?{payload_key:e.block_key}:{}}}function V(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function se(e){if(!Array.isArray(e))return null;let t=[];for(let n of e){let e=V(n);if(!e)return null;let r={};for(let t of[`path`,`move_path`,`status`])typeof e[t]==`string`&&(r[t]=e[t]);t.push(r)}return t}function ce(e){if(!Array.isArray(e))return null;let t=[];for(let n of e){let e=V(n);if(!e)return null;let r={};for(let t of[`path`,`move_path`,`status`,`unified_diff`,`raw`,`raw_extra`])typeof e[t]==`string`&&(r[t]=e[t]);typeof e.truncated==`boolean`&&(r.truncated=e.truncated),(e.diff_source===`retained`||e.diff_source===`derived`)&&(r.diff_source=e.diff_source),t.push(r)}return t}function H(e){let t=V(e);if(t?.schema_version!==1||t.type!==`terminal_output`||!Array.isArray(t.parts))return;let n=t.parts.map(e=>{let t=V(e);if(!t||t.type!==`text`&&t.type!==`raw`||typeof t.text!=`string`)return null;let n=t.stream===`stdout`||t.stream===`stderr`?t.stream:`output`;return{type:t.type,stream:n,text:t.text}});if(!n.some(e=>e==null))return{schema_version:1,type:`terminal_output`,status:typeof t.status==`string`?t.status:`unknown`,is_error:t.is_error===!0,parts:n,truncated:t.truncated===!0,...typeof t.exit_code==`number`||t.exit_code===null?{exit_code:t.exit_code}:{},...typeof t.wall_time_seconds==`number`||t.wall_time_seconds===null?{wall_time_seconds:t.wall_time_seconds}:{}}}var le=new Set([`completed`,`failed`,`error`,`running`,`unknown`]),U=new Set([`failed`,`error`]);function ue(e){if(e)return{status:le.has(e.status)?e.status:`unknown`,exit_code:typeof e.exit_code==`number`?e.exit_code:null,wall_time_seconds:typeof e.wall_time_seconds==`number`?e.wall_time_seconds:null}}function de(e){if(!Array.isArray(e)||e.length===0)return;let t=[];for(let n of e){let e=V(n);if(!e)return;if(e.kind===`command`){if(typeof e.command!=`string`)return;t.push({kind:`command`,command:e.command,workdir:typeof e.workdir==`string`?e.workdir:null,metadata:V(e.metadata)??{}});continue}if(e.kind===`session`){if(e.scope!==`shell`&&e.scope!==`cell`||e.operation!==`write`&&e.operation!==`poll`)return;t.push({kind:`session`,scope:e.scope,operation:e.operation,ref:typeof e.ref==`string`?e.ref:null,chars:typeof e.chars==`string`?e.chars:null});continue}if(e.kind===`other`&&typeof e.name==`string`&&e.name!==``){t.push({kind:`other`,name:e.name});continue}return}return t}function fe(e){let t=de(e.invocations);if(!(!t||typeof e.complete!=`boolean`||typeof e.truncated!=`boolean`))return{schema_version:1,type:`program`,title:typeof e.title==`string`?e.title:null,complete:e.complete,invocations:t,truncated:e.truncated}}function pe(e){if(!(e.scope!==`shell`&&e.scope!==`cell`||e.operation!==`write`&&e.operation!==`poll`||typeof e.truncated!=`boolean`))return{schema_version:1,type:`session_ref`,scope:e.scope,operation:e.operation,ref:typeof e.ref==`string`?e.ref:null,chars:typeof e.chars==`string`?e.chars:null,truncated:e.truncated}}function me(e){if(typeof e.query==`string`)return{schema_version:1,type:`tool_search`,query:e.query,limit:typeof e.limit==`number`&&Number.isFinite(e.limit)?e.limit:null,...e.truncated===!0?{truncated:!0}:{}}}function he(e){let t=V(e),n=V(t?.sessions);if(!t||!n||typeof t.truncated!=`boolean`)return;let r=Object.create(null);for(let[e,t]of Object.entries(n)){let n=V(t);if(!n||!Number.isSafeInteger(n.ordinal)||n.opener_block_key!==null&&typeof n.opener_block_key!=`string`)return;r[e]={ordinal:n.ordinal,opener_block_key:n.opener_block_key}}return{sessions:r,truncated:t.truncated}}function ge(e){let t=V(e);if(t?.schema_version!==1||typeof t.name!=`string`||t.name===``||!(`input`in t)||typeof t.truncated!=`boolean`)return null;let n=t.span,r=Array.isArray(n)&&n.length===2&&Number.isSafeInteger(n[0])&&Number.isSafeInteger(n[1])&&n[0]>=0&&n[1]>=n[0]?[n[0],n[1]]:null;return{block:{kind:`external_call`,name:t.name,input:t.input,truncated:t.truncated},span:r}}function _e(e){let t=V(e);return!t||typeof t.status!=`string`||typeof t.truncated!=`boolean`||!(`value`in t)?null:{status:t.status,value:t.value,truncated:t.truncated}}function ve(e){if(e.source!==`update_plan`||typeof e.call_status!=`string`||!Array.isArray(e.items))return;let t=e.items.map(e=>{let t=V(e);return t&&typeof t.step==`string`&&typeof t.status==`string`?{step:t.step,status:t.status}:null}),n=e.result===void 0?void 0:_e(e.result);if(!(t.some(e=>e==null)||e.result!==void 0&&!n))return{schema_version:1,type:`plan`,source:`update_plan`,call_status:e.call_status,explanation:typeof e.explanation==`string`?e.explanation:null,items:t,...n?{result:n}:{}}}function ye(e){let t=V(e.completion);if(e.source!==`web_search_call`||typeof e.call_status!=`string`||typeof e.query!=`string`||!V(e.action)||!t||typeof t.status!=`string`||typeof t.query!=`string`||!V(t.action)||!Array.isArray(t.results))return;let n=t.results.map(e=>{let t=V(e);return!t||typeof t.title!=`string`||typeof t.url!=`string`?null:{title:t.title,url:t.url,...typeof t.domain==`string`?{domain:t.domain}:{},...typeof t.snippet==`string`?{snippet:t.snippet}:{},...typeof t.ref_id==`string`?{ref_id:t.ref_id}:{},...typeof t.type==`string`?{type:t.type}:{}}});if(!n.some(e=>e==null))return{schema_version:1,type:`web_search`,source:`web_search_call`,call_status:e.call_status,query:e.query,action:V(e.action),completion:{status:t.status,query:t.query,action:V(t.action),results:n,...typeof t.error==`string`?{error:t.error}:{},...typeof t.event_block_key==`string`?{event_block_key:t.event_block_key}:{}}}}function be(e){let t=V(e.completion),n=V(t?.duration);if(!(e.source!==`function_call`||typeof e.name!=`string`||typeof e.call_status!=`string`||!t||typeof t.status!=`string`||typeof t.server!=`string`||typeof t.tool!=`string`||!V(t.arguments)||!V(t.result)||!n||typeof n.secs!=`number`||!Number.isFinite(n.secs)||typeof n.nanos!=`number`||!Number.isFinite(n.nanos)))return{schema_version:1,type:`mcp`,source:`function_call`,name:e.name,call_status:e.call_status,completion:{status:t.status,server:t.server,tool:t.tool,arguments:V(t.arguments),result:V(t.result),duration:{secs:n.secs,nanos:n.nanos},...typeof t.event_block_key==`string`?{event_block_key:t.event_block_key}:{}}}}var xe=new Set([`spawn_agent`,`wait_agent`,`send_message`,`list_agents`,`followup_task`,`interrupt_agent`]);function Se(e){let t=typeof e.operation==`string`&&xe.has(e.operation)?e.operation:null,n=V(e.arguments),r=e.result===void 0?void 0:_e(e.result),i=e.child_conversation==null?null:V(e.child_conversation);if(!(!t||typeof e.call_status!=`string`||!n||e.result!==void 0&&!r||e.child_conversation!=null&&!i)&&!(i&&typeof i.conversation_key!=`string`))return{schema_version:1,type:`agent`,operation:t,call_status:e.call_status,arguments:n,...r?{result:r}:{},...i?{child_conversation:{conversation_key:i.conversation_key,...typeof i.role==`string`?{role:i.role}:{},...typeof i.nickname==`string`?{nickname:i.nickname}:{}}}:{}}}function W(e){let t=V(e.detail?.card);if(t?.schema_version!==1)return;if(t.type===`terminal`){if(!Array.isArray(t.commands)||t.commands.length===0)return;let n=t.commands.map(e=>{let t=V(e);return!t||typeof t.command!=`string`?null:{command:t.command,workdir:typeof t.workdir==`string`?t.workdir:null,metadata:V(t.metadata)??{}}});return n.some(e=>e==null)?void 0:{schema_version:1,type:`terminal`,status:typeof t.status==`string`?t.status:`unknown`,commands:n,output:H(e.output?.detail?.card),truncated:t.truncated===!0||e.output?.detail?.card!=null&&V(e.output.detail.card)?.truncated===!0}}if(t.type===`plan`)return ve(t);if(t.type===`web_search`)return ye(t);if(t.type===`mcp`)return be(t);if(t.type===`agent`)return Se(t);if(t.type===`program`)return fe(t);if(t.type===`session_ref`)return pe(t);if(t.type===`tool_search`)return me(t);if(t.type!==`patch`)return;let n=se(t.files);if(n==null)return;let r=V(t.completion),i=r?.schema_version===1&&r.type===`patch`?r:t,a=ce(i.files);if(a!=null)return{schema_version:1,type:`patch`,source:typeof t.source==`string`?t.source:`patch_apply_end`,status:typeof i.status==`string`?i.status:`unknown`,files:a,request_files:r?n:void 0,patch:typeof t.patch==`string`?t.patch:void 0,success:typeof i.success==`boolean`?i.success:null,stdout:typeof i.stdout==`string`?i.stdout:null,stderr:typeof i.stderr==`string`?i.stderr:null,has_diff:typeof i.has_diff==`boolean`?i.has_diff:a.some(e=>typeof e.unified_diff==`string`),truncated:t.truncated===!0||i.truncated===!0,event_payload_key:typeof i.event_block_key==`string`?i.event_block_key:void 0}}function Ce(e){let t=e[0],n=t.kind===`command`?t.command:t.kind===`session`?[w(t.operation),S(t.scope,t.ref)].filter(Boolean).join(` `):t.name;return e.length>1?`${n} +${e.length-1} more`:n}function we(e){return[S(e.scope,e.ref),e.chars==null?``:D(e.chars)].filter(Boolean).join(` · `)||e.operation}function G(e){if(e)return e.replace(/^\[((?:\$)[^\]\r\n]+)\]\([^\)\r\n]*\/SKILL\.md\)[ \t]*/,(e,t,n,r)=>n+e.length<r.length?`${t} `:t)}function Te(e,t){let n=[];for(let r of e){if(r.kind===`assistant`||r.kind===`user`||r.kind===`text`){let e=r.kind===`assistant`?ge(r.detail?.external_call):null,t=e?.span!=null&&r.text!=null&&e.span[1]<=r.text.length?e.span:null,i=t?`${r.text.slice(0,t[0])}${r.text.slice(t[1])}`.replace(/[ \t]*\n+$/,``):r.text;i&&n.push({kind:`text`,text:i,...r.block_key?{block_key:r.block_key}:{}}),e&&t&&n.push({...e.block,...r.block_key?{block_key:r.block_key}:{}});let a=ae(r.detail?.markers);a&&n.push({kind:`system_actions`,actions:a,...r.block_key?{payload_key:r.block_key}:{}});continue}if(r.kind===`thinking`){r.text?.trim()&&n.push({kind:`thinking`,text:r.text});continue}if(r.kind===`reasoning`){if(t===`codex`){let e=ie(r);e&&n.push(e)}else r.text?.trim()&&n.push({kind:`thinking`,text:r.text});continue}if(r.kind===`tool_call`){let e=r;if(t===`claude`&&r.detail==null&&typeof e.input_summary==`string`&&typeof e.preview==`string`&&`result`in e){n.push(e);continue}let i=typeof r.detail?.name==`string`?r.detail.name:null,a=typeof r.detail?.args==`string`?r.detail.args:``,o=W(r),s=o?.type===`terminal`?o:null,c=o?.type===`patch`?o:null,l=o?.type===`plan`?o:null,u=o?.type===`web_search`?o:null,d=o?.type===`mcp`?o:null,f=o?.type===`agent`?o:null,p=o?.type===`program`?o:null,m=o?.type===`session_ref`?o:null,h=o?.type===`tool_search`?o:null,g=s?{command:s.commands[0].command,workdir:s.commands[0].workdir}:u?{query:u.query,action:u.action}:d?d.completion.arguments:f?f.arguments:z(a),_=t===`codex`?ue(H(r.output?.detail?.card)):void 0,v=s?.output?.is_error===!0||c?.success===!1||U.has(u?.completion.status??``)||U.has(d?.completion.status??``)||U.has(_?.status??``),y=B(l?.explanation)??B(u?.query)??(d?B(`${d.completion.tool} · ${d.completion.server}`):void 0)??(f?B(f.operation):void 0)??B(h?.query)??B(p?.title)??(p?B(Ce(p.invocations)):void 0)??(m?B(we(m)):void 0),b=l?.result?.value??u?.completion.error??d?.completion.result??f?.result?.value??null,x=typeof b==`string`?b:b==null?null:JSON.stringify(b,null,2);n.push({kind:`tool_call`,name:i,input_summary:s?JSON.stringify({commands:s.commands}):a||r.text||``,input:g,preview:s?.commands[0].command??c?.files.map(e=>e.move_path??e.path).filter(Boolean).join(`, `)??y??(r.text??a).split(`
2
2
  `)[0]??``,tool_use_id:r.block_key??null,...r.block_key?{block_key:r.block_key}:{},payload_capable:r.block_key!=null,payload_kind:`call`,native_card:o,..._?{outcome:_}:{},web_search:u?{query:u.query,links:u.completion.results}:void 0,result:r.output||x!=null?{text:x??r.output?.text??``,truncated:s?.output?.truncated===!0||c?.truncated===!0||l?.result?.truncated===!0||f?.result?.truncated===!0,is_error:v}:null});continue}if(r.kind===`event`){let e=W(r);if(e?.type===`patch`){let t=[e.stdout,e.stderr].filter(e=>typeof e==`string`).join(``);n.push({kind:`tool_call`,name:`patch_apply_end`,input_summary:r.text??``,input:null,preview:e.files.map(e=>e.move_path??e.path).filter(Boolean).join(`, `)||`patch summary`,tool_use_id:r.block_key??null,...r.block_key?{block_key:r.block_key}:{},payload_capable:r.block_key!=null,payload_kind:`event`,native_card:e,result:{text:t,truncated:e.truncated===!0,is_error:e.success===!1||U.has(e.status)}});continue}let t=oe(r);if(t){n.push(t);continue}}if(r.kind===`tool_output`||r.kind===`tool_result`){let e=H(r.detail?.card);n.push({kind:`tool_result`,text:r.text??``,truncated:e?.truncated===!0,is_error:r.detail?.is_error===!0||e?.is_error===!0||U.has(e?.status??``),tool_use_id:r.call_id??r.block_key??null,...r.block_key?{block_key:r.block_key}:{}});continue}r.text?n.push({kind:`text`,text:r.text,...r.block_key?{block_key:r.block_key}:{}}):r.block_key&&n.push({kind:`text`,text:``,block_key:r.block_key})}return n}function Ee(e){let t=e.blocks.find(e=>e.kind===`event`),n=V(t?.detail?.lifecycle);return n?.event===`task_started`||n?.event===`task_complete`?`codex_${n.event}`:typeof t?.detail?.event==`string`?t.detail.event:t?.text?.split(`
3
3
  `)[0]?.trim()||null}function De(e){let t=V(e);if(t?.schema_version!==1||typeof t.state!=`string`||!Array.isArray(t.events))return;let n=t.events.map(e=>{let t=V(e);return t&&typeof t.event==`string`&&t.payload_which===`event`&&typeof t.block_key==`string`?{event:t.event,payload_which:`event`,block_key:t.block_key}:null});if(!n.some(e=>e==null))return{schema_version:1,state:t.state,...V(t.started)?{started:V(t.started)}:{},...V(t.completed)?{completed:V(t.completed)}:{},events:n}}function Oe(e){let t=e.blocks.find(e=>e.kind===`meta`)?.detail,n=e.meta_kind??t?.meta_kind,r=e.meta_label??t?.meta_label,i=typeof r==`string`?r:Ee(e);return{meta_kind:n===`skill`||n===`command`||n===`context`||n===`compaction`||n===`notification`?n:i===`context_compacted`?`compaction`:e.kind===`event`?`notification`:`context`,meta_label:i,meta_sections:Array.isArray(e.meta_sections)?e.meta_sections.filter(e=>typeof e==`string`):void 0,skill_name:typeof e.skill_name==`string`?e.skill_name:null}}function ke(e,t){let n={session_id:e.key,uuid:t.item_key,id:te(t.item_key)},r=Te(t.blocks,e.source),i=t.blocks.filter(e=>e.kind===`user`||e.kind===`assistant`||e.kind===`text`).map(e=>e.text??``).filter(Boolean).join(`
4
4
 
@@ -1 +1 @@
1
- var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n)),u=o((e=>{var t=Symbol.for(`react.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.provider`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),ee=Symbol.iterator;function te(e){return typeof e!=`object`||!e?null:(e=ee&&e[ee]||e[`@@iterator`],typeof e==`function`?e:null)}var f={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},ne=Object.assign,re={};function p(e,t,n){this.props=e,this.context=t,this.refs=re,this.updater=n||f}p.prototype.isReactComponent={},p.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`setState(...): takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},p.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function m(){}m.prototype=p.prototype;function h(e,t,n){this.props=e,this.context=t,this.refs=re,this.updater=n||f}var g=h.prototype=new m;g.constructor=h,ne(g,p.prototype),g.isPureReactComponent=!0;var _=Array.isArray,ie=Object.prototype.hasOwnProperty,v={current:null},y={key:!0,ref:!0,__self:!0,__source:!0};function b(e,n,r){var i,a={},o=null,s=null;if(n!=null)for(i in n.ref!==void 0&&(s=n.ref),n.key!==void 0&&(o=``+n.key),n)ie.call(n,i)&&!y.hasOwnProperty(i)&&(a[i]=n[i]);var c=arguments.length-2;if(c===1)a.children=r;else if(1<c){for(var l=Array(c),u=0;u<c;u++)l[u]=arguments[u+2];a.children=l}if(e&&e.defaultProps)for(i in c=e.defaultProps,c)a[i]===void 0&&(a[i]=c[i]);return{$$typeof:t,type:e,key:o,ref:s,props:a,_owner:v.current}}function ae(e,n){return{$$typeof:t,type:e.type,key:n,ref:e.ref,props:e.props,_owner:e._owner}}function x(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function oe(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var se=/\/+/g;function S(e,t){return typeof e==`object`&&e&&e.key!=null?oe(``+e.key):t.toString(36)}function C(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0}}if(c)return c=e,o=o(c),e=a===``?`.`+S(c,0):a,_(o)?(i=``,e!=null&&(i=e.replace(se,`$&/`)+`/`),C(o,r,i,``,function(e){return e})):o!=null&&(x(o)&&(o=ae(o,i+(!o.key||c&&c.key===o.key?``:(``+o.key).replace(se,`$&/`)+`/`)+e)),r.push(o)),1;if(c=0,a=a===``?`.`:a+`:`,_(e))for(var l=0;l<e.length;l++){s=e[l];var u=a+S(s,l);c+=C(s,r,i,u,o)}else if(u=te(e),typeof u==`function`)for(e=u.call(e),l=0;!(s=e.next()).done;)s=s.value,u=a+S(s,l++),c+=C(s,r,i,u,o);else if(s===`object`)throw r=String(e),Error(`Objects are not valid as a React child (found: `+(r===`[object Object]`?`object with keys {`+Object.keys(e).join(`, `)+`}`:r)+`). If you meant to render a collection of children, use an array instead.`);return c}function w(e,t,n){if(e==null)return e;var r=[],i=0;return C(e,r,``,``,function(e){return t.call(n,e,i++)}),r}function T(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(t){(e._status===0||e._status===-1)&&(e._status=1,e._result=t)},function(t){(e._status===0||e._status===-1)&&(e._status=2,e._result=t)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var E={current:null},D={transition:null},ce={ReactCurrentDispatcher:E,ReactCurrentBatchConfig:D,ReactCurrentOwner:v};function le(){throw Error(`act(...) is not supported in production builds of React.`)}e.Children={map:w,forEach:function(e,t,n){w(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return w(e,function(){t++}),t},toArray:function(e){return w(e,function(e){return e})||[]},only:function(e){if(!x(e))throw Error(`React.Children.only expected to receive a single React element child.`);return e}},e.Component=p,e.Fragment=r,e.Profiler=a,e.PureComponent=h,e.StrictMode=i,e.Suspense=l,e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=ce,e.act=le,e.cloneElement=function(e,n,r){if(e==null)throw Error(`React.cloneElement(...): The argument must be a React element, but you passed `+e+`.`);var i=ne({},e.props),a=e.key,o=e.ref,s=e._owner;if(n!=null){if(n.ref!==void 0&&(o=n.ref,s=v.current),n.key!==void 0&&(a=``+n.key),e.type&&e.type.defaultProps)var c=e.type.defaultProps;for(l in n)ie.call(n,l)&&!y.hasOwnProperty(l)&&(i[l]=n[l]===void 0&&c!==void 0?c[l]:n[l])}var l=arguments.length-2;if(l===1)i.children=r;else if(1<l){c=Array(l);for(var u=0;u<l;u++)c[u]=arguments[u+2];i.children=c}return{$$typeof:t,type:e.type,key:a,ref:o,props:i,_owner:s}},e.createContext=function(e){return e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},e.Provider={$$typeof:o,_context:e},e.Consumer=e},e.createElement=b,e.createFactory=function(e){var t=b.bind(null,e);return t.type=e,t},e.createRef=function(){return{current:null}},e.forwardRef=function(e){return{$$typeof:c,render:e}},e.isValidElement=x,e.lazy=function(e){return{$$typeof:d,_payload:{_status:-1,_result:e},_init:T}},e.memo=function(e,t){return{$$typeof:u,type:e,compare:t===void 0?null:t}},e.startTransition=function(e){var t=D.transition;D.transition={};try{e()}finally{D.transition=t}},e.unstable_act=le,e.useCallback=function(e,t){return E.current.useCallback(e,t)},e.useContext=function(e){return E.current.useContext(e)},e.useDebugValue=function(){},e.useDeferredValue=function(e){return E.current.useDeferredValue(e)},e.useEffect=function(e,t){return E.current.useEffect(e,t)},e.useId=function(){return E.current.useId()},e.useImperativeHandle=function(e,t,n){return E.current.useImperativeHandle(e,t,n)},e.useInsertionEffect=function(e,t){return E.current.useInsertionEffect(e,t)},e.useLayoutEffect=function(e,t){return E.current.useLayoutEffect(e,t)},e.useMemo=function(e,t){return E.current.useMemo(e,t)},e.useReducer=function(e,t,n){return E.current.useReducer(e,t,n)},e.useRef=function(e){return E.current.useRef(e)},e.useState=function(e){return E.current.useState(e)},e.useSyncExternalStore=function(e,t,n){return E.current.useSyncExternalStore(e,t,n)},e.useTransition=function(){return E.current.useTransition()},e.version=`18.3.1`})),d=o(((e,t)=>{t.exports=u()})),ee=l(d(),1),te=[`info`,`warn`,`critical`],f=Object.freeze({state:`unknown`,incomplete_rows:null,retryable:!1}),ne=new Set([`healthy`,`malformed_row_partial`,`transient_read_failure`]);function re(e){if(typeof e!=`object`||!e||Array.isArray(e))return f;let t=e,n=t.state;if(typeof n!=`string`||!ne.has(n))return f;let r=t.incomplete_rows;return{state:n,incomplete_rows:typeof r==`number`&&Number.isFinite(r)?r:null,retryable:t.retryable===!0}}function p(e){let t=e.sources;if(typeof t!=`object`||!t)return e;for(let e of Object.values(t))typeof e!=`object`||!e||(e.metadata_health=re(e.metadata_health));return e}var m={weekly:`WEEKLY`,five_hour:`5H-BLOCK`,budget:`BUDGET`,projected:`PROJECTED`,project_budget:`PROJECT`,codex_budget:`BUDGET`},h={weekly:`Weekly`,five_hour:`5h-block`,budget:`Budget`,projected:`Projected`,project_budget:`Project budget`,codex_budget:`Codex budget`};function g(e){return e===`calendar-month`?`Month`:e===`calendar-week`?`Calendar week`:`Week`}function _(e){let t=e.severity;return t!=null&&te.includes(t)?t:t===`amber`?`warn`:t===`red`||e.threshold>=100?`critical`:e.threshold>=90?`warn`:`info`}function ie(e){if(e.axis!==`projected`)return null;let t=e.metric??e.context.metric,n=e.context.projected_value;if(t==null||n==null)return null;if(t===`weekly_pct`)return`projected ${Math.round(n)}% of cap`;if(t===`codex_budget_usd`){let t=e.context.denominator;return t==null?null:`projected $${Math.round(n)} of $${Math.round(t)} · Codex`}let r=e.context.denominator;return r==null?null:`projected $${Math.round(n)} of $${Math.round(r)}`}function v(e){let t=e,n=t.accountKey??t.account_key;return n==null?null:{key:n,label:t.accountLabel??(n===`*`?`All accounts`:n)}}function y(e){let t=e.source===`claude`?`claude:${e.id}`:`codex:${e.key}`,n=v(e);return n==null?t:`${e.source}:${n.key}:${e.source===`claude`?e.id:e.key}`}function b(e){let t=e.source===`claude`?`claude:${e.id}`:`codex:${e.key}`,n=e.source===`claude`?e.id:e.key,r=y(e);return r===t?[t,n]:[r,t,n]}function ae(e,t){if(t.claude==null&&t.codex==null)return e;let n={claude:!1,codex:!1};for(let t of e)v(t)!=null&&(n[t.source]=!0);return e.filter(e=>{let r=t[e.source];if(r==null||!n[e.source])return!0;let i=v(e)?.key;return i===r||i===`*`})}function x(e){let t=e?.sources;if(t==null)return[];let n=t.claude?.data?.alerts?.rows??[],r=t.codex?.data?.alerts?.rows??[];return[...n,...r]}function oe(e){let t=(e.entry?.data)?.alerts?.rows;return Array.isArray(t)?t:[]}function se(e,t,n){return n?oe(e):t}function S(e){let t=e;return t.alerted_at??t.created_at??null}function C(e){let t=e??0;return t>=100?`critical`:t>=90?`warn`:`info`}function w(e,t){return e===`info`||e===`warn`||e===`critical`?e:e===`amber`?`warn`:e===`red`?`critical`:C(t)}var T={claude:`Claude`,codex:`Codex`};function E(e){if(e.source===`claude`)return{source:`claude`,sourceLabel:T.claude,threshold:e.threshold,severity:_(e),chipClass:`chip--${e.axis}`,chipLabel:m[e.axis],whenIso:S(e)};if(e.axis===`quota`)return{source:`codex`,sourceLabel:T.codex,threshold:e.threshold,severity:w(e.severity,e.threshold),chipClass:`chip--quota`,chipLabel:`QUOTA`,whenIso:S(e)};let t=e.axis===`projected`?`chip--projected`:`chip--codex_budget`,n=m[e.axis];return{source:`codex`,sourceLabel:T.codex,threshold:e.threshold,severity:C(e.threshold),chipClass:t,chipLabel:n,whenIso:S(e)}}var D=null;function ce(e,t){t instanceof HTMLElement&&e.contains(t)||(D=t instanceof HTMLElement?t:null)}function le(){D=null}function ue(){let e=D;D=null,e!=null&&e.isConnected&&e.focus()}var O={dateFrom:null,dateTo:null,datePreset:null,projects:[],costMin:null,costMax:null,rebuildMin:null,models:[]};function de(e){return e.conversation_ref??k(e.session_id)}function fe(e,t,n,r={}){let{innerAnchorKey:i,expandDetails:a,findOccurrence:o}=r;return{...n?{conversation_ref:e}:{},session_id:e.key,uuid:t,...i?{inner_anchor_key:i}:{},...a===void 0?{}:{expand_details:a},...o?{find_occurrence:o}:{}}}function pe(e){if(!e||typeof e!=`object`)return!1;let t=e;return(t.source===`claude`||t.source===`codex`)&&typeof t.key==`string`&&t.key.length>0&&(t.account_key===void 0||typeof t.account_key==`string`&&t.account_key.length>0)}function k(e){return{source:`claude`,key:e}}function A(e){return typeof e==`string`?k(e):e}function me(e){return A(e).key.startsWith(`v1.`)}function j(e){let t=A(e);return t.account_key===void 0?JSON.stringify([t.source,t.key]):JSON.stringify([t.source,t.key,t.account_key])}function M(e,t){return e===null||t===null?e===t:j(e)===j(t)}function he(e){return e.conversation_ref??k(e.session_id)}function ge(e){return e.conversation_ref??k(e.session_id)}var _e=`cctally.conv.readingPos`,ve=new Map;function ye(){try{let e=localStorage.getItem(_e);if(!e)return{};let t=JSON.parse(e);if(t&&typeof t==`object`&&!Array.isArray(t))return t}catch{}return{}}function be(e){try{localStorage.setItem(_e,JSON.stringify(e))}catch{}}function xe(e,t){let n=Object.keys(e);if(n.length<=t)return e;n.sort((t,n)=>(e[t]?.ts??0)-(e[n]?.ts??0));let r=n.slice(0,n.length-t);for(let t of r)delete e[t];return e}function Se(e,t,n=Date.now()){let r=A(e);if(!r.key||!t)return;let i=j(r),a=ve.get(i);if(a!==void 0&&n-a<1e3)return;ve.set(i,n);let o=ye();o[i]={uuid:t,ts:n},r.source===`claude`&&delete o[r.key],be(xe(o,50))}function Ce(e){let t=A(e);if(!t.key)return null;let n=ye();return n[j(t)]??(t.source===`claude`?n[t.key]:void 0)??null}var we=`cctally.conv.bookmarks`;function Te(e){let t={};if(!e||typeof e!=`object`)return t;for(let[n,r]of Object.entries(e))if(r&&typeof r==`object`){let e=r.note,i=r.ts;typeof e==`string`&&typeof i==`number`&&Number.isFinite(i)&&(t[n]={note:e,ts:i})}return t}function Ee(){try{let e=localStorage.getItem(we);if(!e)return{};let t=JSON.parse(e);if(t&&typeof t==`object`&&!Array.isArray(t)){let e={};for(let[n,r]of Object.entries(t)){let t=Te(r);Object.keys(t).length&&(e[n]=t)}return e}}catch{}return{}}function De(e){try{localStorage.setItem(we,JSON.stringify(e))}catch{}}function Oe(e){let t=0;for(let n of Object.values(e))t=Math.max(t,n.ts);return t}function ke(e,t){let n=Object.keys(e);if(n.length<=t)return e;n.sort((t,n)=>Oe(e[t])-Oe(e[n]));for(let r of n.slice(0,n.length-t))delete e[r];return e}function N(e){let t=A(e);if(!t.key)return{};let n=Ee();return n[j(t)]??(t.source===`claude`?n[t.key]:void 0)??{}}function Ae(e,t,n=Date.now()){let r=A(e);if(!r.key||!t)return;let i=Ee(),a=j(r),o=i[a]??(r.source===`claude`?i[r.key]:void 0)??{};o[t]?delete o[t]:o[t]={note:``,ts:n},Object.keys(o).length?i[a]=o:delete i[a],r.source===`claude`&&delete i[r.key],De(ke(i,50))}function je(e,t,n,r=Date.now()){let i=A(e);if(!i.key||!t)return;let a=Ee(),o=j(i),s=a[o]??(i.source===`claude`?a[i.key]:void 0)??{};s[t]={note:n,ts:r},a[o]=s,i.source===`claude`&&delete a[i.key],De(ke(a,50))}var Me=`cctally.conv.railPrefs`,Ne=new Set([`recent`,`oldest`,`cost`,`messages`,`project`]);function Pe(){return{filters:O,sort:`recent`}}function Fe(e){return typeof e==`string`&&Ne.has(e)}function Ie(e){if(!e||typeof e!=`object`||Array.isArray(e))return O;let t=e,n=e=>typeof e==`string`?e:null,r=e=>typeof e==`number`&&Number.isFinite(e)?e:null,i=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[];return{dateFrom:n(t.dateFrom),dateTo:n(t.dateTo),datePreset:n(t.datePreset),projects:i(t.projects),costMin:r(t.costMin),costMax:r(t.costMax),rebuildMin:r(t.rebuildMin),models:i(t.models)}}function Le(){try{let e=localStorage.getItem(Me);if(!e)return Pe();let t=JSON.parse(e);if(!t||typeof t!=`object`||Array.isArray(t))return Pe();let n=t;return{filters:Ie(n.filters),sort:Fe(n.sort)?n.sort:`recent`}}catch{return Pe()}}function Re(e){try{localStorage.setItem(Me,JSON.stringify({filters:e.filters,sort:e.sort}))}catch{}}var ze=`cctally.conv.outlineWidth`;function P(e){return Number.isFinite(e)?Math.round(Math.min(480,Math.max(230,e))):290}function Be(){try{let e=localStorage.getItem(ze);if(e==null)return 290;let t=Number(e);if(Number.isFinite(t))return P(t)}catch{}return 290}function Ve(e){try{localStorage.setItem(ze,String(P(e)))}catch{}}var F=e=>String(e).padStart(2,`0`);function I(e){if(!e)return null;let t=new Date(e);return isNaN(t.getTime())?null:t}function L(e,t,n){let r=new Intl.DateTimeFormat(`en-US`,{...n,timeZone:t}),i={};for(let t of r.formatToParts(e))i[t.type]=t.value;return i}function He(e,t){let n=L(e,t,{timeZoneName:`short`}).timeZoneName??``;if(n===`GMT`)return`UTC`;let r=n.replace(/^GMT/,``);return r===``?n:r.replace(/^([+-])(\d)$/,`$10$2`)}function Ue(e,t){let n=I(e);if(!n)return`—`;let r=L(n,t.tz,{month:`short`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,hour12:!1});return`${r.month} ${r.day} ${r.hour}:${r.minute} ${He(n,t.tz)}`}function We(e,t){let n=I(e);if(!n)return`—`;let r=L(n,t.tz,{month:`short`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,hour12:!1,timeZoneName:`shortOffset`}),i=(r.timeZoneName??``).replace(/^GMT/,``).replace(/^([+-])(\d)$/,`$10$2`);return`${r.month} ${r.day} ${r.hour}:${r.minute}${i||``}`}function Ge(e,t){let n=I(e);if(!n)return null;let r=L(n,t.tz,{month:`short`,day:`2-digit`});return`${r.month} ${r.day}`}function Ke(e,t){let n=I(e);if(!n)return null;let r=L(n,t.tz,{month:`short`,day:`2-digit`,year:`numeric`});return`${r.month} ${r.day} ${r.year}`}function qe(e){if(!e)return null;let t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e);if(!t)return null;let n=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],r=t[2]-1;return r<0||r>11?null:`${n[r]} ${t[3]}`}function Je(e,t){let n=I(e);if(!n)return null;let r=L(n,t.tz,{year:`numeric`,month:`2-digit`,day:`2-digit`});return`${r.year}-${r.month}-${r.day}`}function Ye(e,t,n={}){let r=I(e);if(!r)return`—`;let i=L(r,t.tz,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,hour12:!1}),a=`${i.year}-${i.month}-${i.day} ${i.hour}:${i.minute}`;return n.noSuffix?a:`${a} ${He(r,t.tz)}`}function Xe(e,t,n={}){return I(e)?Ye(e,t,n):null}function Ze(e,t,n=Date.now()){let r=I(e);if(!r)return`—`;let i=n-r.getTime();if(i<6e4)return`just now`;if(i<36e5)return`${Math.floor(i/6e4)}m ago`;if(i<864e5)return`${Math.floor(i/36e5)}h ago`;let a=L(new Date(n),t.tz,{year:`numeric`,month:`2-digit`,day:`2-digit`}),o=L(r,t.tz,{year:`numeric`,month:`2-digit`,day:`2-digit`}),s=`${a.year}-${a.month}-${a.day}`,c=`${o.year}-${o.month}-${o.day}`;if(s!==c&&i<1728e5){let e=new Date(0);if(e.setUTCFullYear(Number(a.year),Number(a.month)-1,Number(a.day)-1),c===[e.getUTCFullYear(),F(e.getUTCMonth()+1),F(e.getUTCDate())].join(`-`))return`Yesterday`}return Ue(e,t)}function Qe(e,t,n={}){let r=I(e);if(!r)return`—`;let i=L(r,t.tz,{hour:`2-digit`,minute:`2-digit`,hour12:!1}),a=`${i.hour}:${i.minute}`;return n.noSuffix?a:`${a} ${He(r,t.tz)}`}function $e(e,t,n=`${t}s`){return`${e} ${e===1?t:n}`}function et(e){let t=Date.parse(e);if(Number.isNaN(t))return e;let n=6e5;return new Date(Math.round(t/n)*n).toISOString()}function tt(e){if(e.kind===`subscription-week`)return`subscription week`;let t=Date.parse(e.startAt),n=Date.parse(e.endAt);if(Number.isNaN(t)||Number.isNaN(n))return`last 7 days`;let r=Math.max(1,Math.round((n-t)/864e5));return r===7?`last 7 days`:`last ${$e(r,`day`)}`}var nt={pct0(e){return e==null?`—`:`${Math.round(e)}%`},pct1(e){return e==null?`—`:`${(+e).toFixed(1)}%`},usd2(e){return e==null?`—`:`$${(+e).toFixed(2)}`},usd2Accounting(e){if(e==null)return`—`;let t=+e;return`${t<0?`−`:``}$${Math.abs(t).toFixed(2)}`},usd0(e){if(e==null)return`—`;let t=+e;if(t===0)return`$0`;let n=t<0?`−`:``,r=Math.abs(t);return r<.005?`${n}<$0.01`:Number.isInteger(r)?`${n}$${r.toFixed(0)}`:`${n}$${r.toFixed(2)}`},usdSigned(e){return e==null?`—`:`${e>=0?`+`:`−`}$${Math.abs(+e).toFixed(2)}`},pctFloor(e){return Math.floor(e+1e-9)},usd3(e){return e==null?`—`:`$${(+e).toFixed(3)}`},usd2PerDay(e){return e==null?`—`:`$${(+e).toFixed(2)} / day`},hours1(e){return e==null?`—`:`${(+e).toFixed(1)} h`},ratePctPerHour(e){return e==null?`—`:`from ${(+e).toFixed(4)} %/h`},agoSec(e){return e==null?`—`:`${Math.max(0,e|0)}s ago`},hhmm(e){return e==null?`—`:`${e/3600|0}h ${F(e%3600/60|0)}m`},durationCompact(e){if(e==null)return`—`;let t=e/3600|0,n=e%3600/60|0;return t===0?`${n}m`:`${t}h ${F(n)}m`},durationMs(e){if(e==null||!isFinite(e))return`—`;let t=Math.round(e/1e3);if(t<60)return`${(e/1e3).toFixed(1)}s`;let n=Math.floor(t/60),r=t-n*60;return r?`${n}m ${r}s`:`${n}m`},gapDuration(e){if(e==null||!isFinite(e)||e<0)return`—`;let t=Math.round(e/60);return t<60?`${t} min`:`${(e/3600).toFixed(1).replace(/\.0$/,``)} h`},tokens(e){if(e==null||!isFinite(e))return`—`;if(e<1e3)return String(Math.round(e));let t=e=>e.toFixed(1).replace(/\.0$/,``);return e<1e6&&Math.round(e/100)/10<1e3?`${t(e/1e3)}k`:`${t(e/1e6)}M`},ddhh(e){return e==null?`—`:`${e/86400|0}d ${e%86400/3600|0}h`},elapsedHm(e){return e==null?`—`:e<=0?`just now`:`${e/3600|0}h ${e%3600/60|0}m`},datetimeShort:Ue,datetimeShortZ:We,dateShort:Ge,dateShortWithYear:Ke,startedShort:Ye,startedShortOrNull:Xe,timeHHmm:Qe,weekStart:(e,t)=>qe(e),calDate:e=>qe(e),calendarDateKey:Je,timeOnly:Qe,relativeOrAbsolute:Ze,delta(e){if(e==null)return`—`;let t=e>0?`↑`:e<0?`↓`:`·`;return`${e>0?`+`:``}${e.toFixed(2)} ${t}`},pp(e){return e==null?`—`:Math.abs(e)<.05?`±0.0pp`:`${e>0?`+`:`−`}${Math.abs(e).toFixed(1)}pp`},deltaPct(e){if(e==null)return`—`;let t=Math.round(e*100);return t===0?`0%`:t>0?`+${t}%`:`−${Math.abs(t)}%`},compact(e,t={}){if(e==null)return`—`;let n=Math.abs(e),r;if(n>=1e9)r=(e/1e9).toFixed(1)+`B`;else if(n>=1e6){let t=e/1e6;r=(t>=100?t.toFixed(0):t.toFixed(1))+`M`}else if(n>=1e3){let t=e/1e3;r=(t>=100?t.toFixed(0):t.toFixed(1))+`k`}else return String(e|0);return r=r.replace(/\.0(?=[kMB]$)/,``),t.upper&&(r=r.replace(/k$/,`K`)),r},deltaCls(e,t){return e==null||t?``:e>0?`delta-pos`:e<0?`delta-neg`:``}},rt={tz:`Etc/UTC`,offsetLabel:`UTC`};function it(e){return e?.display?{tz:e.display.resolved_tz,offsetLabel:e.display.offset_label}:rt}function at(e){let t=e=>(t,n)=>(e(n)??0)-(e(t)??0),n=e=>(t,n)=>{let r=(e(t)||``).toString(),i=(e(n)||``).toString();return r<i?-1:+(r>i)};switch(e){case`cost desc`:return t(e=>e.cost_usd??0);case`duration desc`:return t(e=>e.duration_min);case`model asc`:return n(e=>e.model);case`project asc`:return n(e=>e.project);default:return t(e=>e.started_utc?Date.parse(e.started_utc):0)}}function ot(e,t){let n=(t||``).toLowerCase();return n?e.filter(e=>(e.project||``).toLowerCase().includes(n)||(e.project_key||``).toLowerCase().includes(n)||(e.model||``).toLowerCase().includes(n)):e}function st(e,t=rt){let n=e.started_utc?nt.startedShort(e.started_utc,t,{noSuffix:!0}):``,r=e.duration_min==null?``:`${e.duration_min}m`,i=e.cost_usd==null?``:`$${e.cost_usd.toFixed(2)}`;return[n===`—`?``:n,r,e.model||``,e.title||``,e.project||``,e.project_key||``,i].join(` `).toLowerCase()}function ct(e,t,n=rt){let r=(t||``).toLowerCase();if(!r)return[];let i=[];for(let t=0;t<e.length;t++)st(e[t],n).includes(r)&&i.push(t);return i}function lt(e){let t=e?.trend;return t?t.history.map(e=>({label:e.label,used_pct:e.used_pct,dollar_per_pct:e.dollar_per_pct,delta:e.delta,is_current:e.is_current,week_start_at:e.week_start_at??null,cost_usd:e.cost_usd??null,...e.account_labels?{account_labels:e.account_labels}:{}})):[]}var R=[`sessions`,`trend`,`projects`,`daily`,`cache-report`,`weekly`,`monthly`,`blocks`,`forecast`,`alerts`],ut={sessions:{row:`tall`,span:6},trend:{row:`tall`,span:3},projects:{row:`tall`,span:3},daily:{row:`medium`,span:6},"cache-report":{row:`medium`,span:6},weekly:{row:`medium`,span:6},monthly:{row:`medium`,span:6},blocks:{row:`medium`,span:6},forecast:{row:`medium`,span:6},alerts:{row:`short`,span:12}},dt=new Set([`current-week`,`forecast`,`trend`,`sessions`,`projects`,`weekly`,`monthly`,`blocks`,`daily`]),ft=3e3,pt=1200,mt=3e3,ht=new Set([`rate_limited`,`refresh_skipped_no_sync`]),gt=new Set([`sync_busy`]);function _t(e){return!ht.has(e)&&!gt.has(e)}function vt(e){return Array.isArray(e)?e.map(e=>e?.code).filter(e=>typeof e==`string`&&e!==``):[]}var yt=Object.freeze({server_epoch:``,rebuilding:!1,requested_id:0,started_id:0,settled_id:0,settled_status:null,settled_warnings:[]});function bt(e){return e?.sync_activity??yt}var xt=4,St=5,Ct=new Set([`weekly`,`monthly`,`daily`]);function wt(e,t){if(t>=6)return{panels:e??[],newVersion:t};let n=e?[...e]:[];if(t<2&&n.length>0&&!n.includes(`projects`)&&n.splice(Math.min(xt,n.length),0,`projects`),t<3&&(n=n.filter(e=>e!==`current-week`)),t<4&&(n=n.filter(e=>!Ct.has(e)),n.length>0&&!n.includes(`history`)&&n.splice(Math.min(St,n.length),0,`history`)),t<5&&(n=n.map(e=>e===`history`?`daily`:e),n.length>0)){let e=n.includes(`cache-report`)?n.indexOf(`cache-report`):n.indexOf(`daily`),t=e>=0?e+1:n.length;for(let e of[`weekly`,`monthly`])n.includes(e)||(n.splice(t,0,e),t+=1)}return t<6&&n.includes(`blocks`)&&n.includes(`forecast`)&&(n.splice(n.indexOf(`blocks`),1),n.splice(n.indexOf(`forecast`),0,`blocks`)),{panels:n,newVersion:6}}function Tt(e,t){if(!e||!Array.isArray(e)||e.length===0)return[...t];let n=new Set(t),r=new Set,i=[];for(let t of e)n.has(t)&&(r.has(t)||(r.add(t),i.push(t)));for(let e of t)r.has(e)||i.push(e);return i}function Et(e,t,n){if(!n)return e;let r=t.find(e=>e.id===n.column);if(!r)return e;let i=n.direction===`desc`?-1:1,a=r.nullKey;return e.slice().sort((e,t)=>{if(a){let n=a(e)==null,r=a(t)==null;if(n&&r)return 0;if(n)return 1;if(r)return-1}return i*r.compare(e,t)})}function Dt(e,t){return!e||e.column!==t.id?{column:t.id,direction:t.defaultDirection}:e.direction===t.defaultDirection?{column:t.id,direction:e.direction===`asc`?`desc`:`asc`}:null}function z(e){if(typeof e!=`object`||!e||Array.isArray(e))return null;let t=e;return typeof t.column!=`string`||t.direction!==`asc`&&t.direction!==`desc`?null:{column:t.column,direction:t.direction}}var Ot=[{id:`started`,label:`Started`,defaultDirection:`desc`,compare:(e,t)=>(Date.parse(e.started_utc??``)||0)-(Date.parse(t.started_utc??``)||0)},{id:`duration`,label:`Dur`,defaultDirection:`desc`,compare:(e,t)=>(e.duration_min??0)-(t.duration_min??0)},{id:`model`,label:`Model`,defaultDirection:`asc`,compare:(e,t)=>(e.model||``).localeCompare(t.model||``)},{id:`session`,label:`Session`,defaultDirection:`asc`,compare:(e,t)=>(e.title||``).localeCompare(t.title||``)},{id:`project`,label:`Project`,defaultDirection:`asc`,compare:(e,t)=>(e.project||``).localeCompare(t.project||``)},{id:`cache`,label:`Cache`,defaultDirection:`desc`,numeric:!0,nullKey:e=>e.cache_hit_pct??null,compare:(e,t)=>(e.cache_hit_pct??0)-(t.cache_hit_pct??0)},{id:`cost`,label:`Cost`,defaultDirection:`desc`,numeric:!0,compare:(e,t)=>(e.cost_usd??0)-(t.cost_usd??0)}],kt={shareModal:null,composerModal:null};function At(e,t){switch(t.type){case`OPEN_SHARE`:{let n=t.source??`claude`,r=t.account??null,i=t.params===void 0?{panel:t.panel,triggerId:t.triggerId,source:n,account:r}:{panel:t.panel,triggerId:t.triggerId,source:n,account:r,params:t.params};return{...e,shareModal:i}}case`CLOSE_SHARE`:return{...e,shareModal:null};case`OPEN_COMPOSER`:return{...e,composerModal:{open:!0}};case`CLOSE_COMPOSER`:return{...e,composerModal:null};default:return e}}function jt(e,t,n){return n===void 0?{type:`OPEN_SHARE`,panel:e,triggerId:t}:{type:`OPEN_SHARE`,panel:e,triggerId:t,params:n}}function Mt(){return{type:`CLOSE_SHARE`}}function Nt(){return{type:`OPEN_COMPOSER`}}function Pt(){return{type:`CLOSE_COMPOSER`}}var Ft=`cctally:share:basket`;function It(e,t){switch(t.type){case`BASKET_ADD`:return e.items.length>=20?{...e,rejectedReason:`capacity`}:{items:[...e.items,t.item],rejectedReason:null};case`BASKET_REMOVE`:return{...e,items:e.items.filter(e=>e.id!==t.id)};case`BASKET_REORDER`:{if(t.fromIdx===t.toIdx||t.fromIdx<0||t.toIdx<0||t.fromIdx>=e.items.length||t.toIdx>=e.items.length)return e;let n=e.items.slice(),[r]=n.splice(t.fromIdx,1);return n.splice(t.toIdx,0,r),{...e,items:n}}case`BASKET_CLEAR`:return{items:[],rejectedReason:null};case`BASKET_CLEAR_REJECTED`:return e.rejectedReason==null?e:{...e,rejectedReason:null};case`BASKET_HYDRATE`:return{items:t.items,rejectedReason:null};default:return e}}function Lt(e){return{id:e.id??Vt(),panel:e.panel,template_id:e.template_id,options:e.options,added_at:e.added_at,data_digest_at_add:e.data_digest_at_add,...e.data_digest_version_at_add==null?{}:{data_digest_version_at_add:e.data_digest_version_at_add},kernel_version:e.kernel_version,label_hint:e.label_hint,source:e.source??`claude`,...e.account==null?{}:{account:e.account}}}function Rt(){try{let e=localStorage.getItem(Ft);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)?t.filter(Bt).map(e=>({...e,source:e.source??`claude`})):[]}catch{return[]}}function zt(e){try{localStorage.setItem(Ft,JSON.stringify(e))}catch{}}function Bt(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.id==`string`&&typeof t.panel==`string`&&typeof t.template_id==`string`&&typeof t.added_at==`string`&&typeof t.data_digest_at_add==`string`&&typeof t.kernel_version==`number`&&typeof t.label_hint==`string`&&typeof t.options==`object`&&t.options!==null}function Vt(){let e=new Uint8Array(16);return crypto.getRandomValues(e),Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``).slice(0,26)}var Ht=`cctally:dashboard:source`,Ut=new Set([`claude`,`codex`,`all`]);function Wt(){try{let e=localStorage.getItem(Ht);if(e!=null&&Ut.has(e))return e}catch{}return`claude`}function Gt(e){try{localStorage.setItem(Ht,e)}catch{}}var Kt=`cctally:dashboard:account:`;function qt(e){return e===`all`?`all`:`provider`}function Jt(e){return e.length<=24?e:`${e.slice(0,12)}…${e.slice(-8)}`}function Yt(e,t){return t===`all`?`${Kt}all:${e}`:`${Kt}${e}`}function B(e,t=`provider`){try{let n=localStorage.getItem(Yt(e,t));if(n!=null&&n!==``)return n}catch{}return`all`}function Xt(e,t,n=`provider`){try{localStorage.setItem(Yt(e,n),t)}catch{}}function Zt(){return{provider:{claude:B(`claude`,`provider`),codex:B(`codex`,`provider`)},all:{claude:B(`claude`,`all`),codex:B(`codex`,`all`)}}}function Qt(e,t,n){return t!==`all`&&t!==n?`all`:e[qt(t)][n]??`all`}function V(e){let t=e?.data?.accounts;return!Array.isArray(t)||t.length===0?null:t}function H(e,t,n){if(t===`all`||n===`all`||n===``)return null;let r=V(e?.sources?.[t]??null);return r==null?null:r.some(e=>e.accountKey===n)?n:null}function $t(e,t){return V(e?.sources?.[t]??null)!=null}function en(e,t){return(t===`all`?[`claude`,`codex`]:[t]).filter(t=>$t(e,t))}function tn(e,t,n,r){return H(e,n,Qt(r,t,n))}function nn(e,t){if(e==null||e.length===0)return`all`;let n=[`all`,...e.map(e=>e.accountKey)];return n[((t==null?0:Math.max(0,n.indexOf(t)))+1)%n.length]}var U=`codex`;function rn(e){let t=e?.data?.account_scopes;return typeof t!=`object`||!t||Array.isArray(t)?null:t}function an(){let e={rows:[],total_cost_usd:0,total_tokens:0,display_tz:`UTC`};return{is_empty:!0,periods:{daily:e,monthly:e,weekly:e},sessions:{rows:[],total_sessions:0,total_cost_usd:0,total_tokens:0},projects:{rows:[],total_cost_usd:0,total_tokens:0},cache_report:null,budget:{status:null,milestones:[],projected:[]},quota:{summary:{window_count:0,active_window_count:0,latest_percent:null,freshness:`unavailable`,active:[]},histories:[],milestones:[],blocks:[],cycle_index:[]},alerts:{rows:[]}}}function on(e,t,n,r){let i=(e.cycles??[]).find(e=>e.accountKey===r)??null,a=n.quota.summary.freshness===`stale`;return{cost_usd:t?.spendUsd??null,input_tokens:t?.inputTokens??null,cached_input_tokens:t?.cachedInputTokens??null,output_tokens:t?.outputTokens??null,reasoning_output_tokens:t?.reasoningOutputTokens??null,total_tokens:t?.totalTokens??null,cycle:i==null?null:{window_minutes:i.window_minutes,start_at:i.start_at,resets_at:i.resets_at},...i!=null&&a?{cycle_freshness:`stale`}:{},quota:n.quota.summary,budget:n.budget.status,alerts:{count:n.alerts.rows.length},...e.update_state==null?{}:{update_state:e.update_state},...e.cycles==null?{}:{cycles:e.cycles}}}function sn(e,t,n,r){return{...e,hero:on(e.hero,n,t,r),periods:t.periods,sessions:t.sessions,projects:t.projects,quota:t.quota,budget:t.budget,alerts:t.alerts,cache_report:t.cache_report??null}}function cn(e,t,n,r=t===`all`?null:t){let i=r==null?null:e?.sources?.[r]??null,a=i?.data??null,o=r===U?rn(i):null,s=o!=null,c=r==null?null:H(e,r,n);if(c==null||!s)return{source:t,provider:r,accountKey:null,requestedKey:c,card:null,scope:null,data:a,isEmpty:!1,scopesSupported:s};let l=(V(i)??[]).find(e=>e.accountKey===c)??null,u=o[c]??an();return{source:t,provider:r,accountKey:c,requestedKey:c,card:l,scope:u,data:a==null?null:sn(a,u,l,c),isEmpty:u.is_empty===!0,scopesSupported:!0}}var ln=new WeakMap;function un(e,t,n){if(e==null)return null;if(t!==U&&t!==`all`)return e;let r=e.sources?.[U]??null;if(r?.data==null||rn(r)==null)return e;let i=H(e,U,n);if(i==null)return e;let a=`${t}\u0000${i}`,o=ln.get(e);o??(o=new Map,ln.set(e,o));let s=o.get(a);if(s!=null)return s;let c=cn(e,t,n,U);if(c.accountKey==null||c.data==null)return e;let l={...e.sources,[U]:{...r,data:c.data}},u={...e,sources:l};return o.set(a,u),u}function dn(e){return e==null?!1:e.data==null&&e.last_success_at==null&&Array.isArray(e.warnings)&&e.warnings.length===0&&e.capabilities!=null&&Object.keys(e.capabilities).length===0}function W(e,t){if(e==null)return{selection:t,entry:null,hydrating:!0,env:null};let n=e.sources;if(n==null)return{selection:t,entry:null,hydrating:t!==`claude`,env:e};let r=n[t]??null;return{selection:t,entry:r,hydrating:dn(r),env:e}}function fn(e,t){return[...e]}function pn(e,t,n){let r=new Set(t),i=0;return e.map(e=>r.has(e)&&i<n.length?n[i++]:e)}function mn(e,t){return e?.trim()||(t===300?`5-hour limit`:t===10080?`7-day limit`:t==null||t<=0?`Codex quota`:t%1440==0?`${t/1440}-day limit`:t%60==0?`${t/60}-hour limit`:`${t}-minute limit`)}function hn(e,t){let n=new Map,r=new Map;for(let e of t?.histories??[]){if(e.account_key==null){r.set(e.key,e);continue}let t=n.get(e.account_key)??new Map;t.set(e.key,e),n.set(e.account_key,t)}return(e?.quota?.active??[]).map(e=>{let t=e.account_key==null?r.get(e.key):n.get(e.account_key)?.get(e.key);return{key:e.key,label:mn(t?.label,t?.window_minutes),windowMinutes:t?.window_minutes??null,current:e}})}function gn(e){return(e??[]).map(e=>({source:`claude`,key:e.key,title:e.title?.trim()??``,recencyUtc:e.started_utc,models:e.model?[e.model]:[],costUsd:e.cost_usd,durationMin:e.duration_min??null,project:e.project,projectKey:e.project_key??null,cacheHitPct:e.cache_hit_pct??null,tokens:{kind:`claude`},legacy:e}))}function _n(e){return(e??[]).map(e=>({source:`codex`,key:e.key,title:e.label?.trim()??``,recencyUtc:e.last_activity,models:[...e.models??[]],costUsd:e.cost_usd,durationMin:e.duration_min??null,project:e.project??`Project resolving`,projectKey:e.project_key??null,cacheHitPct:e.input_tokens>0?e.cached_input_tokens/e.input_tokens*100:null,tokens:{kind:`codex`,input:e.input_tokens,cachedInput:e.cached_input_tokens,output:e.output_tokens,reasoning:e.reasoning_output_tokens,total:e.total_tokens}}))}function vn(e){if(e.selection===`claude`)return gn((e.env?.sessions?.rows??[]).map(e=>({key:e.session_id,source:`claude`,started_utc:e.started_utc,duration_min:e.duration_min,model:e.model,project:e.project,project_key:e.project_key,cost_usd:e.cost_usd,cache_hit_pct:e.cache_hit_pct,title:e.title})));if(e.selection===`codex`){let t=e.entry?.data;return _n(t?.sessions?.rows??[])}if(e.selection===`all`){let t=e.entry?.data?.providers,n=t?.claude??e.env?.sources?.claude?.data??null,r=t?.codex??e.env?.sources?.codex?.data??null,i=n?gn(n.sessions?.rows??[]):[],a=r?_n(r.sessions?.rows??[]):[];return[...i,...a]}return[]}function yn(e){return[e.title||``,e.project,e.durationMin==null?``:`${e.durationMin}m`,e.costUsd==null?``:`$${e.costUsd.toFixed(2)}`,...e.models].join(` `).toLowerCase()}function bn(e,t){let n=(t||``).toLowerCase();return n?e.filter(e=>yn(e).includes(n)):e}function xn(e,t){let n=(t||``).toLowerCase();if(!n)return[];let r=[];for(let t=0;t<e.length;t++)yn(e[t]).includes(n)&&r.push(t);return r}function G(e){return e.recencyUtc&&Date.parse(e.recencyUtc)||0}function Sn({includeSource:e,oneModel:t}){let n=[];return n.push({id:`started`,label:`Started`,defaultDirection:`desc`,nullKey:e=>e.recencyUtc??null,compare:(e,t)=>G(e)-G(t)},{id:`duration`,label:`Dur`,defaultDirection:`desc`,numeric:!0,nullKey:e=>e.durationMin,compare:(e,t)=>(e.durationMin??0)-(t.durationMin??0)},...t?[]:[{id:`model`,label:`Model`,defaultDirection:`asc`,compare:(e,t)=>e.models.join(`,`).localeCompare(t.models.join(`,`))}],{id:`session`,label:`Session`,defaultDirection:`asc`,compare:(e,t)=>(e.title||``).localeCompare(t.title||``)},{id:`project`,label:`Project`,defaultDirection:`asc`,compare:(e,t)=>e.project.localeCompare(t.project)},{id:`cache`,label:`Cache`,defaultDirection:`desc`,numeric:!0,nullKey:e=>e.cacheHitPct,compare:(e,t)=>(e.cacheHitPct??0)-(t.cacheHitPct??0)},{id:`cost`,label:`Cost`,defaultDirection:`desc`,numeric:!0,compare:(e,t)=>(e.costUsd??0)-(t.costUsd??0)}),n}function Cn(e,t){let n=e.recencyUtc==null,r=t.recencyUtc==null;return n&&r?0:n?1:r?-1:G(t)-G(e)}var K=`ccusage.dashboard.prefs`,q=`ccusage.dashboard.filter`,wn=`ccusage.dashboard.sort`,Tn=`cctally.conv.outlineOpen`;function En(){return{state:null,suppress:{skipped_versions:[],remind_after:null},modalOpen:!1,runId:null,status:`idle`,stream:[],errorMessage:null,startedAt:null}}var Dn=[{key:`started desc`,label:`Started (newest first)`},{key:`cost desc`,label:`Cost (highest first)`},{key:`duration desc`,label:`Duration (longest first)`},{key:`model asc`,label:`Model (A→Z)`},{key:`project asc`,label:`Project (A→Z)`}];function On(e){return`family`in e&&e.family===`meter_rate_change`}function J(){return{sortDefault:`started desc`,sessionsPerPage:100,sessionsCollapsed:!0,blocksCollapsed:!0,dailyCollapsed:!0,alertsCollapsed:!1,panelOrder:[...R],onboardingToastSeen:!1,mobileOnboardingToastSeen:!1,trendSortOverride:null,sessionsSortOverride:null,projectsWindowWeeks:4,projectsTrendYMode:`absolute`,projectsSortOverride:null,panelOrderSchemaVersion:1,historySortOverride:null,historySortOverrides:{week:null,month:null}}}function Y(e){return{...e,weekly_usd:e.weekly_usd??null}}function kn(){return{enabled:!1,weekly_thresholds:[90,95],five_hour_thresholds:[90,95],budget_thresholds:[90,100],budget_enabled:!1,weekly_usd:null,projected_weekly_enabled:!1,projected_budget_enabled:!1,rate_change_enabled:!1,project_alerts_enabled:!1,codex_budget_configured:!1,codex_budget_alerts_enabled:!1,codex_projected_enabled:!1}}function An(){let e=J(),t=localStorage.getItem(K),n=localStorage.getItem(wn);if(t){try{let n=JSON.parse(t);e={...J(),...n};let r=typeof n.panelOrderSchemaVersion==`number`?n.panelOrderSchemaVersion:1,i=wt(n.panelOrder??null,r);e.panelOrderSchemaVersion=i.newVersion,e.panelOrder=Tt(i.panels,R),e.trendSortOverride=z(e.trendSortOverride??null),e.sessionsSortOverride=z(e.sessionsSortOverride??null),e.projectsSortOverride=z(e.projectsSortOverride??null),e.historySortOverride=null;let a=e.historySortOverrides;e.historySortOverrides={week:z(a?.week??null),month:z(a?.month??null)},r!==i.newVersion&&localStorage.setItem(K,JSON.stringify(e))}catch{e=J(),e.panelOrderSchemaVersion=6}n!=null&&localStorage.removeItem(wn)}else n?(e={...J(),sortDefault:n,panelOrderSchemaVersion:6},localStorage.setItem(K,JSON.stringify(e)),localStorage.removeItem(wn)):e.panelOrderSchemaVersion=6;let r=!0;try{let e=localStorage.getItem(Tn);e===`false`?r=!1:e===`true`&&(r=!0)}catch{r=!0}let i=Le();return{snapshot:null,snapshotObservedAtMs:null,activeSource:Wt(),accountFocus:Zt(),view:`dashboard`,selectedConversationId:null,selectedConversationRef:null,conversationSearch:``,conversationSearchKind:`all`,conversationJump:null,convOutlineOpen:r,convOutlineMobileOpen:!1,convOutlineWidth:Be(),convFocusMode:`all`,convOutlineTab:`outline`,convCurrentTurnUuid:null,convPinnedUuid:null,convPinnedAnchorKey:null,convBookmarks:{},convAnonRefusals:{},convFindOpen:!1,conversationFilters:i.filters,convFiltersOpen:!1,conversationRailSort:i.sort,compare:null,comparePick:null,compareCloseFocusPending:!1,conversationTitles:{},openModal:null,openModalSource:null,openSessionId:null,openBlockStartAt:null,openDailyDate:null,openProjectKey:null,openExplainAccountKey:null,openExplainWindowStartAt:null,openExplainWindowEndAt:null,openExplainAlertFiredAt:null,sessionsSort:e.sortDefault,filterText:localStorage.getItem(q)??``,searchText:``,searchMatches:[],searchIndex:-1,inputMode:null,prefs:e,syncErrorFloorUntil:0,syncBusy:!1,syncSuccessFlashUntil:0,syncBusyNoticeUntil:0,outstandingSyncId:null,syncEpoch:null,toast:null,alerts:[],seenAlertIds:new Set,alertsConfig:kn(),dashboardPrefs:{},alertToastQueue:[],dragPreviewOrder:null,update:En(),...kt,basket:{items:Rt(),rejectedReason:null},doctor:null,doctorModalOpen:!1,heroScrolled:!1,chromeOverlayOpen:0,openSourceDetail:null,openSourceDetailSelection:null,sourceSessionsSort:null}}var X=An(),jn=new Set,Z=``;function Mn(){jn.forEach(e=>{try{e()}catch(e){console.error(`subscriber error:`,e)}})}function Nn(){return X}function Pn(e=X){let t=e.selectedConversationRef;return t?e.convAnonRefusals[j(t)]??null:null}function Fn(e=X){return e.dashboardPrefs.cache_failure_markers!==!1}function In(e=X){return e.dashboardPrefs.live_tail!==!1}function Ln(e=X){return e.dashboardPrefs.lan_auth!==!1}function Rn(e=X){return e.update.state?.configured_channel===`beta`?`beta`:`stable`}function zn(e){return e.composerModal?`composer`:e.shareModal?`share`:e.update.modalOpen?`update`:e.doctorModalOpen?`doctor`:e.openSourceDetail==null?e.openModal==null?null:`panel`:`source-detail`}function Bn(e){return jn.add(e),()=>{jn.delete(e)}}function Vn(e=X){let t=ot(e.snapshot?.sessions?.rows??[],e.filterText),n=e.prefs.sessionsSortOverride;return(n?Et(t,Ot,n):t.slice().sort(at(e.sessionsSort))).slice(0,e.prefs.sessionsPerPage)}function Hn(e=X,t=e.activeSource){return un(e.snapshot,t,Qt(e.accountFocus,t,`codex`))}function Un(e=X){if(e.activeSource===`claude`)return gn(Vn(e).map(e=>({key:e.session_id,source:`claude`,started_utc:e.started_utc,duration_min:e.duration_min,model:e.model,project:e.project,project_key:e.project_key,cost_usd:e.cost_usd,cache_hit_pct:e.cache_hit_pct,title:e.title})));let t=bn(vn(W(Hn(e),e.activeSource)),e.filterText),n=e.sourceSessionsSort;return(n?Et(t,Sn({includeSource:e.activeSource===`all`,oneModel:!1}),n):t.slice().sort(Cn)).slice(0,e.prefs.sessionsPerPage)}function Q(e){if(!e.searchText)return{searchMatches:[],searchIndex:-1};let t=e.activeSource===`claude`?ct(Vn(e),e.searchText,it(e.snapshot)):xn(Un(e),e.searchText);return t.length===0?{searchMatches:[],searchIndex:-1}:{searchMatches:t,searchIndex:e.searchIndex<0||e.searchIndex>=t.length?0:e.searchIndex}}function Wn(e){let t=e.outstandingSyncId,n=e.syncEpoch;if(t==null||n==null)return{};let r=e.snapshot?.sync_activity;if(!r||!r.server_epoch)return{};if(r.server_epoch!==n)return{outstandingSyncId:null,syncEpoch:null};if(r.settled_id<t)return{};let i={outstandingSyncId:null,syncEpoch:null},a=vt(r.settled_warnings);return r.settled_status===`failed`||a.some(_t)?{...i,syncErrorFloorUntil:Date.now()+ft}:a.some(e=>gt.has(e))?{...i,syncBusyNoticeUntil:Date.now()+mt}:{...i,syncSuccessFlashUntil:Date.now()+pt}}function Gn(e){let t=e?.sync_activity?.server_epoch,n=X.snapshot?.sync_activity?.server_epoch;return!t||!n?!1:t!==n}function Kn(e){let t=e?.generated_at??``,n=Gn(e);if(!n&&t&&Z&&t<Z)return!1;n&&(Z=``),t&&(Z=t);let r={...X,snapshot:e,snapshotObservedAtMs:e==null?null:Date.now()},i={...r,...Wn(r)};return X={...i,...Q(i)},Mn(),!0}function qn(){Z=``}function Jn(e,t,n){return e==null?null:t==null?e:e+Math.max(0,Math.floor((n-t)/1e3))}var Yn={openModal:null,openModalSource:null,openSessionId:null,openBlockStartAt:null,openDailyDate:null,openProjectKey:null,openExplainAccountKey:null,openExplainWindowStartAt:null,openExplainWindowEndAt:null,openExplainAlertFiredAt:null,shareModal:null,composerModal:null,openSourceDetail:null,openSourceDetailSelection:null};function $(e,t){return e===void 0?typeof t==`string`&&t?k(t):null:e}function Xn(e){switch(e.type){case`OPEN_MODAL`:X={...X,openModal:e.kind,openModalSource:X.activeSource,openSessionId:e.sessionId??null,openBlockStartAt:e.blockStartAt??null,openDailyDate:e.dailyDate??null,openProjectKey:e.projectKey??null,openExplainAccountKey:e.accountKey??null,openExplainWindowStartAt:e.windowStartAt??null,openExplainWindowEndAt:e.windowEndAt??null,openExplainAlertFiredAt:e.alertFiredAt??null};break;case`CLOSE_MODAL`:X={...X,openModal:null,openModalSource:null,openSessionId:null,openBlockStartAt:null,openDailyDate:null,openProjectKey:null,openExplainAccountKey:null,openExplainWindowStartAt:null,openExplainWindowEndAt:null,openExplainAlertFiredAt:null};break;case`SET_ACTIVE_SOURCE`:if(X.activeSource===e.source)break;Gt(e.source);{let t={...X,activeSource:e.source};X={...t,...Q(t)}}break;case`SET_ACCOUNT_FOCUS`:if(X.accountFocus[e.slot][e.source]===e.account)break;Xt(e.source,e.account,e.slot),X={...X,accountFocus:{...X.accountFocus,[e.slot]:{...X.accountFocus[e.slot],[e.source]:e.account}},selectedConversationId:null,selectedConversationRef:null,conversationJump:null,convFindOpen:!1,compare:null,comparePick:null};break;case`OPEN_SOURCE_DETAIL`:X={...X,openSourceDetail:{source:e.source,resource:e.resource,key:e.key,accountKey:e.accountKey??null},openSourceDetailSelection:X.activeSource};break;case`CLOSE_SOURCE_DETAIL`:if(X.openSourceDetail==null)break;X={...X,openSourceDetail:null,openSourceDetailSelection:null};break;case`SET_SOURCE_SESSIONS_SORT`:{let t={...X,sourceSessionsSort:e.override};X={...t,...Q(t)};break}case`SET_VIEW`:X={...X,view:e.view,...Yn,compare:null,comparePick:null,compareCloseFocusPending:!1,...e.view===`dashboard`?{selectedConversationId:null,selectedConversationRef:null,conversationJump:null,conversationSearch:``,conversationSearchKind:`all`}:{}};break;case`OPEN_CONVERSATION`:{let t=$(e.conversationRef,e.sessionId);if(!t)break;let n=!M(t,X.selectedConversationRef);X={...X,view:`conversations`,...Yn,compare:null,comparePick:null,compareCloseFocusPending:!1,selectedConversationId:t.source===`claude`?t.key:null,selectedConversationRef:t,conversationJump:e.jump??null,...n?{convFocusMode:`all`,convOutlineTab:`outline`,convCurrentTurnUuid:null,convPinnedUuid:null,convPinnedAnchorKey:null,convFindOpen:!1,convOutlineMobileOpen:!1,convBookmarks:N(t)}:{}};break}case`SELECT_CONVERSATION`:{let t=$(e.conversationRef,e.sessionId),n=!M(t,X.selectedConversationRef);X={...X,...n?{convOutlineMobileOpen:!1,convFindOpen:!1,convBookmarks:t?N(t):{}}:{},compare:null,comparePick:null,compareCloseFocusPending:!1,selectedConversationId:t?.source===`claude`?t.key:null,selectedConversationRef:t,conversationJump:null,convFocusMode:`all`,convOutlineTab:`outline`,convCurrentTurnUuid:null,convPinnedUuid:null,convPinnedAnchorKey:null};break}case`SET_CONVERSATION_SEARCH`:X={...X,conversationSearch:e.text,...e.text===``?{conversationSearchKind:`all`}:{}};break;case`SET_CONVERSATION_SEARCH_KIND`:X={...X,conversationSearchKind:e.kind};break;case`CLEAR_CONVERSATION_JUMP`:X={...X,conversationJump:null};break;case`TOGGLE_CONV_OUTLINE`:{let e=!X.convOutlineOpen;try{localStorage.setItem(Tn,e?`true`:`false`)}catch{}X={...X,convOutlineOpen:e};break}case`SET_CONV_OUTLINE_WIDTH`:{let t=P(e.px);if(t===X.convOutlineWidth)break;Ve(t),X={...X,convOutlineWidth:t};break}case`TOGGLE_CONV_OUTLINE_MOBILE`:X={...X,convOutlineMobileOpen:!X.convOutlineMobileOpen};break;case`CLOSE_CONV_OUTLINE_MOBILE`:X={...X,convOutlineMobileOpen:!1};break;case`SET_CONV_FOCUS_MODE`:X={...X,convFocusMode:e.mode};break;case`SET_CONV_OUTLINE_TAB`:X={...X,convOutlineTab:e.tab};break;case`OPEN_CONV_FIND`:X={...X,convFindOpen:!0};break;case`CLOSE_CONV_FIND`:X={...X,convFindOpen:!1};break;case`SET_CONVERSATION_FILTERS`:{let t={...X.conversationFilters,...e.patch};Re({filters:t,sort:X.conversationRailSort}),X={...X,conversationFilters:t};break}case`CLEAR_CONVERSATION_FILTERS`:Re({filters:O,sort:X.conversationRailSort}),X={...X,conversationFilters:O};break;case`TOGGLE_CONV_FILTERS`:X={...X,convFiltersOpen:!X.convFiltersOpen};break;case`SET_CONV_FILTERS_OPEN`:X={...X,convFiltersOpen:e.open};break;case`SET_CONVERSATION_RAIL_SORT`:Re({filters:X.conversationFilters,sort:e.sort}),X={...X,conversationRailSort:e.sort};break;case`START_COMPARE_PICK`:{let t=$(e.anchorRef,e.anchor);if(!t||!M(t,X.selectedConversationRef))break;X={...X,comparePick:{anchor:t},convOutlineMobileOpen:!1}}break;case`CANCEL_COMPARE_PICK`:X={...X,comparePick:null,convFiltersOpen:!1,compareCloseFocusPending:!0};break;case`OPEN_COMPARE`:{let t=$(e.aRef,e.a),n=$(e.bRef,e.b);if(!t||!n||M(t,n))break;X={...X,...Yn,view:`conversations`,selectedConversationId:t.source===`claude`?t.key:null,selectedConversationRef:t,conversationJump:null,comparePick:null,convFiltersOpen:!1,compare:{a:t,b:n}};break}case`SWAP_COMPARE`:X={...X,compare:X.compare?{a:X.compare.b,b:X.compare.a}:null};break;case`CLOSE_COMPARE`:X={...X,compare:null,compareCloseFocusPending:!0};break;case`CLEAR_COMPARE_CLOSE_FOCUS`:X={...X,compareCloseFocusPending:!1};break;case`CACHE_CONVERSATION_TITLES`:{let t=!1,n={...X.conversationTitles};for(let[r,i]of e.titles){if(!r||!i)continue;let e=pe(r)?j(r):r;n[e]!==i&&(n[e]=i,t=!0)}t&&(X={...X,conversationTitles:n});break}case`SET_CONV_CURRENT_TURN`:if(X.convCurrentTurnUuid===e.uuid)break;e.uuid!=null&&X.selectedConversationRef!=null&&Se(X.selectedConversationRef,e.uuid),X={...X,convCurrentTurnUuid:e.uuid};break;case`SET_CONV_PINNED_TURN`:{let t=e.anchorKey??null;if(X.convPinnedUuid===e.uuid&&X.convPinnedAnchorKey===t)break;X={...X,convPinnedUuid:e.uuid,convPinnedAnchorKey:t};break}case`SET_CONV_ANON_REFUSAL`:{let t=j(e.conversationRef),n=X.convAnonRefusals[t];if(e.refused){let r=e.message??``;if(n===r)break;X={...X,convAnonRefusals:{...X.convAnonRefusals,[t]:r}};break}if(n===void 0)break;let r={...X.convAnonRefusals};delete r[t],X={...X,convAnonRefusals:r};break}case`CLEAR_CONV_PIN`:if(X.convPinnedUuid===null&&X.convPinnedAnchorKey===null)break;X={...X,convPinnedUuid:null,convPinnedAnchorKey:null};break;case`TOGGLE_BOOKMARK`:{let t=$(e.conversationRef,e.sessionId)??X.selectedConversationRef;if(!t)break;Ae(t,e.uuid),M(t,X.selectedConversationRef)&&(X={...X,convBookmarks:N(t)});break}case`SET_BOOKMARK_NOTE`:{let t=$(e.conversationRef,e.sessionId)??X.selectedConversationRef;if(!t)break;je(t,e.uuid,e.note),M(t,X.selectedConversationRef)&&(X={...X,convBookmarks:N(t)});break}case`SET_FILTER`:{e.text?localStorage.setItem(q,e.text):localStorage.removeItem(q);let t={...X,filterText:e.text};X={...t,...Q(t)};break}case`SET_SEARCH`:{let t={...X,searchText:e.text,searchIndex:0};X={...t,...Q(t)};break}case`SET_SEARCH_MATCHES`:X={...X,searchMatches:e.matches,searchIndex:e.index};break;case`SET_SORT`:{let t={...X,sessionsSort:e.key};X={...t,...Q(t)};break}case`SET_INPUT_MODE`:X={...X,inputMode:e.mode};break;case`SAVE_PREFS`:{let t={...X.prefs,...e.patch};localStorage.setItem(K,JSON.stringify(t));let n={...X,prefs:t};X={...n,...Q(n)};break}case`RESET_PREFS`:{let e=X.prefs.onboardingToastSeen,t=X.prefs.mobileOnboardingToastSeen;localStorage.removeItem(K),localStorage.removeItem(q);let n=J();n.onboardingToastSeen=e,n.mobileOnboardingToastSeen=t,n.panelOrderSchemaVersion=6,localStorage.setItem(K,JSON.stringify(n)),X={...X,prefs:n,filterText:``,searchText:``,searchMatches:[],searchIndex:-1,sessionsSort:n.sortDefault};break}case`RESET_PANEL_ORDER`:{let e={...X.prefs,panelOrder:[...R],panelOrderSchemaVersion:6};localStorage.setItem(K,JSON.stringify(e)),X={...X,prefs:e};break}case`REORDER_PANELS`:{let{from:t,to:n}=e,r=X.prefs.panelOrder,i=fn(r,W(X.snapshot,X.activeSource));if(t===n||t<0||t>=i.length||n<0||n>=i.length)break;let a=i.slice(),[o]=a.splice(t,1);a.splice(n,0,o);let s=pn(r,i,a),c={...X.prefs,panelOrder:s};localStorage.setItem(K,JSON.stringify(c)),X={...X,prefs:c};break}case`SET_DRAG_PREVIEW`:X={...X,dragPreviewOrder:e.order};break;case`COMMIT_DRAG_PREVIEW`:{let e=X.dragPreviewOrder;if(!e)break;let t={...X.prefs,panelOrder:e};localStorage.setItem(K,JSON.stringify(t)),X={...X,prefs:t,dragPreviewOrder:null};break}case`CLEAR_DRAG_PREVIEW`:if(X.dragPreviewOrder==null)break;X={...X,dragPreviewOrder:null};break;case`SWAP_PANELS`:{let{index:t,direction:n}=e,r=X.prefs.panelOrder,i=fn(r,W(X.snapshot,X.activeSource));if(t<0||t>=i.length)break;let a=ut[i[t]].row,o=t+n;for(;o>=0&&o<i.length&&ut[i[o]].row!==a;)o+=n;if(o<0||o>=i.length)break;let s=i.slice();[s[t],s[o]]=[s[o],s[t]];let c=pn(r,i,s),l={...X.prefs,panelOrder:c};localStorage.setItem(K,JSON.stringify(l)),X={...X,prefs:l};break}case`MARK_ONBOARDING_TOAST_SEEN`:{if(X.prefs.onboardingToastSeen)break;let e={...X.prefs,onboardingToastSeen:!0};localStorage.setItem(K,JSON.stringify(e)),X={...X,prefs:e};break}case`MARK_MOBILE_ONBOARDING_TOAST_SEEN`:{if(X.prefs.mobileOnboardingToastSeen)break;let e={...X.prefs,mobileOnboardingToastSeen:!0};localStorage.setItem(K,JSON.stringify(e)),X={...X,prefs:e};break}case`SET_SYNC_ERROR_FLOOR`:X={...X,syncErrorFloorUntil:e.untilMs};break;case`SET_SYNC_BUSY`:X={...X,syncBusy:e.busy};break;case`SET_SYNC_SUCCESS_FLASH`:X={...X,syncSuccessFlashUntil:e.untilMs};break;case`SET_SYNC_BUSY_NOTICE`:X={...X,syncBusyNoticeUntil:e.untilMs};break;case`REGISTER_SYNC_REQUEST`:{let t={...X,outstandingSyncId:e.id,syncEpoch:e.epoch};X={...t,...Wn(t)};break}case`SHOW_STATUS_TOAST`:X={...X,toast:{kind:`status`,text:e.text}};break;case`SHOW_ALERT_TOAST`:X={...X,toast:{kind:`alert`,payload:e.alert}};break;case`HIDE_TOAST`:if(X.toast?.kind===`alert`&&X.alertToastQueue.length>0){let[e,...t]=X.alertToastQueue;X={...X,toast:{kind:`alert`,payload:e},alertToastQueue:t}}else X={...X,toast:null};break;case`INGEST_SNAPSHOT_ALERTS`:{let t=new Set(X.seenAlertIds);if(e.isFirstTick){for(let n of e.alerts)t.add(n.id);X={...X,alerts:e.alerts,seenAlertIds:t,alertsConfig:Y(e.alertsSettings),alertToastQueue:[]};break}let n=e.alerts.filter(e=>!t.has(e.id));for(let e of n)t.add(e.id);let r=X.toast,i=X.alertToastQueue;n.length>0&&(!r||r.kind!==`alert`?(r={kind:`alert`,payload:n[0]},i=[...i,...n.slice(1)]):i=[...i,...n]),X={...X,alerts:e.alerts,seenAlertIds:t,alertsConfig:Y(e.alertsSettings),alertToastQueue:i,toast:r};break}case`INGEST_SOURCE_ALERTS`:{let t=new Set(X.seenAlertIds),n=e.rateChanges??[];if(e.isFirstTick){for(let n of e.rows)for(let e of b(n))t.add(e);for(let e of n)t.add(e.id);X={...X,seenAlertIds:t,alertsConfig:Y(e.alertsSettings),alertToastQueue:[]};break}let r=e.rows.filter(e=>!t.has(y(e)));for(let e of r)for(let n of b(e))t.add(n);let i=n.filter(e=>!t.has(e.id));for(let e of i)t.add(e.id);let a=[...r,...i],o=X.toast,s=X.alertToastQueue;a.length>0&&(!o||o.kind!==`alert`?(o={kind:`alert`,payload:a[0]},s=[...s,...a.slice(1)]):s=[...s,...a]),X={...X,seenAlertIds:t,alertsConfig:Y(e.alertsSettings),alertToastQueue:s,toast:o};break}case`INGEST_DASHBOARD_PREFS`:X={...X,dashboardPrefs:e.prefs};break;case`SET_TABLE_SORT`:{let t=e.table===`history`?{...X.prefs,historySortOverrides:{...X.prefs.historySortOverrides,[e.periodKind]:e.override}}:{...X.prefs,[e.table===`trend`?`trendSortOverride`:e.table===`projects`?`projectsSortOverride`:`sessionsSortOverride`]:e.override};localStorage.setItem(K,JSON.stringify(t));let n={...X,prefs:t};X={...n,...Q(n)};break}case`CLEAR_TABLE_SORTS`:{let e={...X.prefs,trendSortOverride:null,sessionsSortOverride:null,projectsSortOverride:null,historySortOverride:null,historySortOverrides:{week:null,month:null}};localStorage.setItem(K,JSON.stringify(e));let t={...X,prefs:e};X={...t,...Q(t)};break}case`OPEN_UPDATE_MODAL`:X={...X,update:{...X.update,modalOpen:!0}};break;case`CLOSE_UPDATE_MODAL`:X={...X,update:{...X.update,modalOpen:!1}};break;case`SET_UPDATE_STATE`:X={...X,update:{...X.update,state:e.state,suppress:e.suppress}};break;case`SET_UPDATE_STATUS`:X={...X,update:{...X.update,status:e.status,errorMessage:e.errorMessage===void 0?X.update.errorMessage:e.errorMessage}};break;case`SET_UPDATE_RUN_ID`:X={...X,update:{...X.update,runId:e.runId,startedAt:e.startedAt===void 0?X.update.startedAt:e.startedAt}};break;case`APPEND_UPDATE_STREAM`:X={...X,update:{...X.update,stream:[...X.update.stream,e.event]}};break;case`RESET_UPDATE_RUN`:X={...X,update:{...X.update,status:`idle`,runId:null,stream:[],errorMessage:null,startedAt:null}};break;case`OPEN_SHARE`:case`CLOSE_SHARE`:case`OPEN_COMPOSER`:case`CLOSE_COMPOSER`:{let t=e.type===`OPEN_SHARE`?e.source??(X.openModal==null?null:X.openModalSource)??X.activeSource:X.activeSource,n=e.type===`OPEN_SHARE`?tn(X.snapshot,t,t===`all`?`codex`:t,X.accountFocus):null,r=e.type===`OPEN_SHARE`?{...e,source:t,account:e.account??n}:e,i=At({shareModal:X.shareModal,composerModal:X.composerModal},r);X={...X,...i};break}case`BASKET_ADD`:case`BASKET_REMOVE`:case`BASKET_REORDER`:case`BASKET_CLEAR`:case`BASKET_CLEAR_REJECTED`:case`BASKET_HYDRATE`:{let t=It(X.basket,e);if(t===X.basket)break;let n=t.items!==X.basket.items;X={...X,basket:t},n&&zt(t.items),e.type===`BASKET_ADD`&&t.rejectedReason===`capacity`&&(X={...X,toast:{kind:`status`,text:`Basket is full (20 sections). Remove one to add another.`}});break}case`SET_DOCTOR_AGGREGATE`:X={...X,doctor:e.doctor};break;case`OPEN_DOCTOR_MODAL`:X={...X,doctorModalOpen:!0};break;case`CLOSE_DOCTOR_MODAL`:X={...X,doctorModalOpen:!1};break;case`SET_HERO_SCROLLED`:X.heroScrolled!==e.scrolled&&(X={...X,heroScrolled:e.scrolled});break;case`INCREMENT_CHROME_OVERLAY`:X={...X,chromeOverlayOpen:X.chromeOverlayOpen+1};break;case`DECREMENT_CHROME_OVERLAY`:X={...X,chromeOverlayOpen:Math.max(0,X.chromeOverlayOpen-1)};break}Mn()}var Zn=o((e=>{var t=d(),n=Symbol.for(`react.element`),r=Symbol.for(`react.fragment`),i=Object.prototype.hasOwnProperty,a=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,o={key:!0,ref:!0,__self:!0,__source:!0};function s(e,t,r){var s,c={},l=null,u=null;for(s in r!==void 0&&(l=``+r),t.key!==void 0&&(l=``+t.key),t.ref!==void 0&&(u=t.ref),t)i.call(t,s)&&!o.hasOwnProperty(s)&&(c[s]=t[s]);if(e&&e.defaultProps)for(s in t=e.defaultProps,t)c[s]===void 0&&(c[s]=t[s]);return{$$typeof:n,type:e,key:l,ref:u,props:c,_owner:a.current}}e.Fragment=r,e.jsx=s,e.jsxs=s})),Qn=o(((e,t)=>{t.exports=Zn()})),$n=new Set,er=null,tr={overlay:0,modal:1,sessions:2,global:3};function nr(e){return e===`modal`||e===`overlay`?`any`:`dashboard`}function rr(e){if(!e||!(e instanceof Element))return!1;let t=e.tagName;if(t===`INPUT`||t===`TEXTAREA`)return!0;if(e instanceof HTMLElement){if(e.isContentEditable)return!0;let t=e.getAttribute(`contenteditable`);if(t===``||t===`true`||t===`plaintext-only`)return!0}return!1}function ir(e){return e.forEach(e=>$n.add(e)),()=>e.forEach(e=>$n.delete(e))}function ar(e){if(e.ctrlKey||e.metaKey||e.altKey||rr(e.target)&&e.key.length===1)return;let t=Nn().view,n=[...$n].sort((e,t)=>{let n=tr[e.scope]-tr[t.scope];return n===0?(t.layer??0)-(e.layer??0):n});for(let r of n){if(r.key!==e.key)continue;let n=r.view??nr(r.scope);if(!(n!==`any`&&n!==t)&&!(r.when&&!r.when())){r.action(),e.preventDefault();return}}}function or(){er||(er=ar,document.addEventListener(`keydown`,er))}function sr(e){(0,ee.useEffect)(()=>ir(e),[e])}export{ut as $,en as A,h as At,Pt as B,Sn as C,v as Ct,dn as D,se as Dt,fn as E,ae as Et,tn as F,d as Ft,Dt as G,Nt as H,Jt as I,o as It,ft as J,gt as K,V as L,s as Lt,nn as M,g as Mt,$t as N,ie as Nt,W as O,y as Ot,H as P,p as Pt,vt as Q,Qt as R,l as Rt,Kn as S,ue as St,hn as T,x as Tt,jt as U,Mt as V,Et as W,_t as X,pt as Y,bt as Z,Ln as _,A as _t,Qn as a,$e as at,Bn as b,le as bt,Xn as c,P as ct,Hn as d,de as dt,R as et,Nn as f,j as ft,Pn as g,k as gt,Rn as h,me as ht,ir as i,nt as it,qt as j,_ as jt,cn as k,m as kt,Jn as l,Ce as lt,qn as m,pe as mt,ar as n,lt as nt,Dn as o,et as ot,On as p,he as pt,mt as q,or as r,it as rt,J as s,tt as st,sr as t,dt as tt,Un as u,fe as ut,In as v,M as vt,vn as w,E as wt,zn as x,ce as xt,Fn as y,ge as yt,Lt as z};
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n)),u=o((e=>{var t=Symbol.for(`react.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.provider`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),ee=Symbol.iterator;function te(e){return typeof e!=`object`||!e?null:(e=ee&&e[ee]||e[`@@iterator`],typeof e==`function`?e:null)}var f={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},ne=Object.assign,re={};function p(e,t,n){this.props=e,this.context=t,this.refs=re,this.updater=n||f}p.prototype.isReactComponent={},p.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`setState(...): takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},p.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function m(){}m.prototype=p.prototype;function h(e,t,n){this.props=e,this.context=t,this.refs=re,this.updater=n||f}var g=h.prototype=new m;g.constructor=h,ne(g,p.prototype),g.isPureReactComponent=!0;var _=Array.isArray,ie=Object.prototype.hasOwnProperty,v={current:null},y={key:!0,ref:!0,__self:!0,__source:!0};function b(e,n,r){var i,a={},o=null,s=null;if(n!=null)for(i in n.ref!==void 0&&(s=n.ref),n.key!==void 0&&(o=``+n.key),n)ie.call(n,i)&&!y.hasOwnProperty(i)&&(a[i]=n[i]);var c=arguments.length-2;if(c===1)a.children=r;else if(1<c){for(var l=Array(c),u=0;u<c;u++)l[u]=arguments[u+2];a.children=l}if(e&&e.defaultProps)for(i in c=e.defaultProps,c)a[i]===void 0&&(a[i]=c[i]);return{$$typeof:t,type:e,key:o,ref:s,props:a,_owner:v.current}}function ae(e,n){return{$$typeof:t,type:e.type,key:n,ref:e.ref,props:e.props,_owner:e._owner}}function x(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function oe(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var se=/\/+/g;function S(e,t){return typeof e==`object`&&e&&e.key!=null?oe(``+e.key):t.toString(36)}function C(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0}}if(c)return c=e,o=o(c),e=a===``?`.`+S(c,0):a,_(o)?(i=``,e!=null&&(i=e.replace(se,`$&/`)+`/`),C(o,r,i,``,function(e){return e})):o!=null&&(x(o)&&(o=ae(o,i+(!o.key||c&&c.key===o.key?``:(``+o.key).replace(se,`$&/`)+`/`)+e)),r.push(o)),1;if(c=0,a=a===``?`.`:a+`:`,_(e))for(var l=0;l<e.length;l++){s=e[l];var u=a+S(s,l);c+=C(s,r,i,u,o)}else if(u=te(e),typeof u==`function`)for(e=u.call(e),l=0;!(s=e.next()).done;)s=s.value,u=a+S(s,l++),c+=C(s,r,i,u,o);else if(s===`object`)throw r=String(e),Error(`Objects are not valid as a React child (found: `+(r===`[object Object]`?`object with keys {`+Object.keys(e).join(`, `)+`}`:r)+`). If you meant to render a collection of children, use an array instead.`);return c}function w(e,t,n){if(e==null)return e;var r=[],i=0;return C(e,r,``,``,function(e){return t.call(n,e,i++)}),r}function T(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(t){(e._status===0||e._status===-1)&&(e._status=1,e._result=t)},function(t){(e._status===0||e._status===-1)&&(e._status=2,e._result=t)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var E={current:null},D={transition:null},ce={ReactCurrentDispatcher:E,ReactCurrentBatchConfig:D,ReactCurrentOwner:v};function le(){throw Error(`act(...) is not supported in production builds of React.`)}e.Children={map:w,forEach:function(e,t,n){w(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return w(e,function(){t++}),t},toArray:function(e){return w(e,function(e){return e})||[]},only:function(e){if(!x(e))throw Error(`React.Children.only expected to receive a single React element child.`);return e}},e.Component=p,e.Fragment=r,e.Profiler=a,e.PureComponent=h,e.StrictMode=i,e.Suspense=l,e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=ce,e.act=le,e.cloneElement=function(e,n,r){if(e==null)throw Error(`React.cloneElement(...): The argument must be a React element, but you passed `+e+`.`);var i=ne({},e.props),a=e.key,o=e.ref,s=e._owner;if(n!=null){if(n.ref!==void 0&&(o=n.ref,s=v.current),n.key!==void 0&&(a=``+n.key),e.type&&e.type.defaultProps)var c=e.type.defaultProps;for(l in n)ie.call(n,l)&&!y.hasOwnProperty(l)&&(i[l]=n[l]===void 0&&c!==void 0?c[l]:n[l])}var l=arguments.length-2;if(l===1)i.children=r;else if(1<l){c=Array(l);for(var u=0;u<l;u++)c[u]=arguments[u+2];i.children=c}return{$$typeof:t,type:e.type,key:a,ref:o,props:i,_owner:s}},e.createContext=function(e){return e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},e.Provider={$$typeof:o,_context:e},e.Consumer=e},e.createElement=b,e.createFactory=function(e){var t=b.bind(null,e);return t.type=e,t},e.createRef=function(){return{current:null}},e.forwardRef=function(e){return{$$typeof:c,render:e}},e.isValidElement=x,e.lazy=function(e){return{$$typeof:d,_payload:{_status:-1,_result:e},_init:T}},e.memo=function(e,t){return{$$typeof:u,type:e,compare:t===void 0?null:t}},e.startTransition=function(e){var t=D.transition;D.transition={};try{e()}finally{D.transition=t}},e.unstable_act=le,e.useCallback=function(e,t){return E.current.useCallback(e,t)},e.useContext=function(e){return E.current.useContext(e)},e.useDebugValue=function(){},e.useDeferredValue=function(e){return E.current.useDeferredValue(e)},e.useEffect=function(e,t){return E.current.useEffect(e,t)},e.useId=function(){return E.current.useId()},e.useImperativeHandle=function(e,t,n){return E.current.useImperativeHandle(e,t,n)},e.useInsertionEffect=function(e,t){return E.current.useInsertionEffect(e,t)},e.useLayoutEffect=function(e,t){return E.current.useLayoutEffect(e,t)},e.useMemo=function(e,t){return E.current.useMemo(e,t)},e.useReducer=function(e,t,n){return E.current.useReducer(e,t,n)},e.useRef=function(e){return E.current.useRef(e)},e.useState=function(e){return E.current.useState(e)},e.useSyncExternalStore=function(e,t,n){return E.current.useSyncExternalStore(e,t,n)},e.useTransition=function(){return E.current.useTransition()},e.version=`18.3.1`})),d=o(((e,t)=>{t.exports=u()})),ee=l(d(),1),te=[`info`,`warn`,`critical`],f=Object.freeze({state:`unknown`,incomplete_rows:null,retryable:!1}),ne=new Set([`healthy`,`malformed_row_partial`,`transient_read_failure`]);function re(e){if(typeof e!=`object`||!e||Array.isArray(e))return f;let t=e,n=t.state;if(typeof n!=`string`||!ne.has(n))return f;let r=t.incomplete_rows;return{state:n,incomplete_rows:typeof r==`number`&&Number.isFinite(r)?r:null,retryable:t.retryable===!0}}function p(e){let t=e.sources;if(typeof t!=`object`||!t)return e;for(let e of Object.values(t))typeof e!=`object`||!e||(e.metadata_health=re(e.metadata_health));return e}var m={weekly:`WEEKLY`,five_hour:`5H-BLOCK`,budget:`BUDGET`,projected:`PROJECTED`,project_budget:`PROJECT`,codex_budget:`BUDGET`},h={weekly:`Weekly`,five_hour:`5h-block`,budget:`Budget`,projected:`Projected`,project_budget:`Project budget`,codex_budget:`Codex budget`};function g(e){return e===`calendar-month`?`Month`:e===`calendar-week`?`Calendar week`:`Week`}function _(e){let t=e.severity;return t!=null&&te.includes(t)?t:t===`amber`?`warn`:t===`red`||e.threshold>=100?`critical`:e.threshold>=90?`warn`:`info`}function ie(e){if(e.axis!==`projected`)return null;let t=e.metric??e.context.metric,n=e.context.projected_value;if(t==null||n==null)return null;if(t===`weekly_pct`)return`projected ${Math.round(n)}% of cap`;if(t===`codex_budget_usd`){let t=e.context.denominator;return t==null?null:`projected $${Math.round(n)} of $${Math.round(t)} · Codex`}let r=e.context.denominator;return r==null?null:`projected $${Math.round(n)} of $${Math.round(r)}`}function v(e){let t=e,n=t.accountKey??t.account_key;return n==null?null:{key:n,label:t.accountLabel??(n===`*`?`All accounts`:n)}}function y(e){let t=e.source===`claude`?`claude:${e.id}`:`codex:${e.key}`,n=v(e);return n==null?t:`${e.source}:${n.key}:${e.source===`claude`?e.id:e.key}`}function b(e){let t=e.source===`claude`?`claude:${e.id}`:`codex:${e.key}`,n=e.source===`claude`?e.id:e.key,r=y(e);return r===t?[t,n]:[r,t,n]}function ae(e,t){if(t.claude==null&&t.codex==null)return e;let n={claude:!1,codex:!1};for(let t of e)v(t)!=null&&(n[t.source]=!0);return e.filter(e=>{let r=t[e.source];if(r==null||!n[e.source])return!0;let i=v(e)?.key;return i===r||i===`*`})}function x(e){let t=e?.sources;if(t==null)return[];let n=t.claude?.data?.alerts?.rows??[],r=t.codex?.data?.alerts?.rows??[];return[...n,...r]}function oe(e){let t=(e.entry?.data)?.alerts?.rows;return Array.isArray(t)?t:[]}function se(e,t,n){return n?oe(e):t}function S(e){let t=e;return t.alerted_at??t.created_at??null}function C(e){let t=e??0;return t>=100?`critical`:t>=90?`warn`:`info`}function w(e,t){return e===`info`||e===`warn`||e===`critical`?e:e===`amber`?`warn`:e===`red`?`critical`:C(t)}var T={claude:`Claude`,codex:`Codex`};function E(e){if(e.source===`claude`)return{source:`claude`,sourceLabel:T.claude,threshold:e.threshold,severity:_(e),chipClass:`chip--${e.axis}`,chipLabel:m[e.axis],whenIso:S(e)};if(e.axis===`quota`)return{source:`codex`,sourceLabel:T.codex,threshold:e.threshold,severity:w(e.severity,e.threshold),chipClass:`chip--quota`,chipLabel:`QUOTA`,whenIso:S(e)};let t=e.axis===`projected`?`chip--projected`:`chip--codex_budget`,n=m[e.axis];return{source:`codex`,sourceLabel:T.codex,threshold:e.threshold,severity:C(e.threshold),chipClass:t,chipLabel:n,whenIso:S(e)}}var D=null;function ce(e,t){t instanceof HTMLElement&&e.contains(t)||(D=t instanceof HTMLElement?t:null)}function le(){D=null}function ue(){let e=D;D=null,e!=null&&e.isConnected&&e.focus()}var O={dateFrom:null,dateTo:null,datePreset:null,projects:[],costMin:null,costMax:null,rebuildMin:null,models:[]};function de(e){return e.conversation_ref??k(e.session_id)}function fe(e,t,n,r={}){let{innerAnchorKey:i,expandDetails:a,findOccurrence:o}=r;return{...n?{conversation_ref:e}:{},session_id:e.key,uuid:t,...i?{inner_anchor_key:i}:{},...a===void 0?{}:{expand_details:a},...o?{find_occurrence:o}:{}}}function pe(e){if(!e||typeof e!=`object`)return!1;let t=e;return(t.source===`claude`||t.source===`codex`)&&typeof t.key==`string`&&t.key.length>0&&(t.account_key===void 0||typeof t.account_key==`string`&&t.account_key.length>0)}function k(e){return{source:`claude`,key:e}}function A(e){return typeof e==`string`?k(e):e}function me(e){return A(e).key.startsWith(`v1.`)}function j(e){let t=A(e);return t.account_key===void 0?JSON.stringify([t.source,t.key]):JSON.stringify([t.source,t.key,t.account_key])}function M(e,t){return e===null||t===null?e===t:j(e)===j(t)}function he(e){return e.conversation_ref??k(e.session_id)}function ge(e){return e.conversation_ref??k(e.session_id)}var _e=`cctally.conv.readingPos`,ve=new Map;function ye(){try{let e=localStorage.getItem(_e);if(!e)return{};let t=JSON.parse(e);if(t&&typeof t==`object`&&!Array.isArray(t))return t}catch{}return{}}function be(e){try{localStorage.setItem(_e,JSON.stringify(e))}catch{}}function xe(e,t){let n=Object.keys(e);if(n.length<=t)return e;n.sort((t,n)=>(e[t]?.ts??0)-(e[n]?.ts??0));let r=n.slice(0,n.length-t);for(let t of r)delete e[t];return e}function Se(e,t,n=Date.now()){let r=A(e);if(!r.key||!t)return;let i=j(r),a=ve.get(i);if(a!==void 0&&n-a<1e3)return;ve.set(i,n);let o=ye();o[i]={uuid:t,ts:n},r.source===`claude`&&delete o[r.key],be(xe(o,50))}function Ce(e){let t=A(e);if(!t.key)return null;let n=ye();return n[j(t)]??(t.source===`claude`?n[t.key]:void 0)??null}var we=`cctally.conv.bookmarks`;function Te(e){let t={};if(!e||typeof e!=`object`)return t;for(let[n,r]of Object.entries(e))if(r&&typeof r==`object`){let e=r.note,i=r.ts;typeof e==`string`&&typeof i==`number`&&Number.isFinite(i)&&(t[n]={note:e,ts:i})}return t}function Ee(){try{let e=localStorage.getItem(we);if(!e)return{};let t=JSON.parse(e);if(t&&typeof t==`object`&&!Array.isArray(t)){let e={};for(let[n,r]of Object.entries(t)){let t=Te(r);Object.keys(t).length&&(e[n]=t)}return e}}catch{}return{}}function De(e){try{localStorage.setItem(we,JSON.stringify(e))}catch{}}function Oe(e){let t=0;for(let n of Object.values(e))t=Math.max(t,n.ts);return t}function ke(e,t){let n=Object.keys(e);if(n.length<=t)return e;n.sort((t,n)=>Oe(e[t])-Oe(e[n]));for(let r of n.slice(0,n.length-t))delete e[r];return e}function N(e){let t=A(e);if(!t.key)return{};let n=Ee();return n[j(t)]??(t.source===`claude`?n[t.key]:void 0)??{}}function Ae(e,t,n=Date.now()){let r=A(e);if(!r.key||!t)return;let i=Ee(),a=j(r),o=i[a]??(r.source===`claude`?i[r.key]:void 0)??{};o[t]?delete o[t]:o[t]={note:``,ts:n},Object.keys(o).length?i[a]=o:delete i[a],r.source===`claude`&&delete i[r.key],De(ke(i,50))}function je(e,t,n,r=Date.now()){let i=A(e);if(!i.key||!t)return;let a=Ee(),o=j(i),s=a[o]??(i.source===`claude`?a[i.key]:void 0)??{};s[t]={note:n,ts:r},a[o]=s,i.source===`claude`&&delete a[i.key],De(ke(a,50))}var Me=`cctally.conv.railPrefs`,Ne=new Set([`recent`,`oldest`,`cost`,`messages`,`project`]);function Pe(){return{filters:O,sort:`recent`}}function Fe(e){return typeof e==`string`&&Ne.has(e)}function Ie(e){if(!e||typeof e!=`object`||Array.isArray(e))return O;let t=e,n=e=>typeof e==`string`?e:null,r=e=>typeof e==`number`&&Number.isFinite(e)?e:null,i=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[];return{dateFrom:n(t.dateFrom),dateTo:n(t.dateTo),datePreset:n(t.datePreset),projects:i(t.projects),costMin:r(t.costMin),costMax:r(t.costMax),rebuildMin:r(t.rebuildMin),models:i(t.models)}}function Le(){try{let e=localStorage.getItem(Me);if(!e)return Pe();let t=JSON.parse(e);if(!t||typeof t!=`object`||Array.isArray(t))return Pe();let n=t;return{filters:Ie(n.filters),sort:Fe(n.sort)?n.sort:`recent`}}catch{return Pe()}}function Re(e){try{localStorage.setItem(Me,JSON.stringify({filters:e.filters,sort:e.sort}))}catch{}}var ze=`cctally.conv.outlineWidth`;function P(e){return Number.isFinite(e)?Math.round(Math.min(480,Math.max(230,e))):290}function Be(){try{let e=localStorage.getItem(ze);if(e==null)return 290;let t=Number(e);if(Number.isFinite(t))return P(t)}catch{}return 290}function Ve(e){try{localStorage.setItem(ze,String(P(e)))}catch{}}var F=e=>String(e).padStart(2,`0`);function I(e){if(!e)return null;let t=new Date(e);return isNaN(t.getTime())?null:t}function L(e,t,n){let r=new Intl.DateTimeFormat(`en-US`,{...n,timeZone:t}),i={};for(let t of r.formatToParts(e))i[t.type]=t.value;return i}function He(e,t){let n=L(e,t,{timeZoneName:`short`}).timeZoneName??``;if(n===`GMT`)return`UTC`;let r=n.replace(/^GMT/,``);return r===``?n:r.replace(/^([+-])(\d)$/,`$10$2`)}function Ue(e,t){let n=I(e);if(!n)return`—`;let r=L(n,t.tz,{month:`short`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,hour12:!1});return`${r.month} ${r.day} ${r.hour}:${r.minute} ${He(n,t.tz)}`}function We(e,t){let n=I(e);if(!n)return`—`;let r=L(n,t.tz,{month:`short`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,hour12:!1,timeZoneName:`shortOffset`}),i=(r.timeZoneName??``).replace(/^GMT/,``).replace(/^([+-])(\d)$/,`$10$2`);return`${r.month} ${r.day} ${r.hour}:${r.minute}${i||``}`}function Ge(e,t){let n=I(e);if(!n)return null;let r=L(n,t.tz,{month:`short`,day:`2-digit`});return`${r.month} ${r.day}`}function Ke(e,t){let n=I(e);if(!n)return null;let r=L(n,t.tz,{month:`short`,day:`2-digit`,year:`numeric`});return`${r.month} ${r.day} ${r.year}`}function qe(e){if(!e)return null;let t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e);if(!t)return null;let n=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],r=t[2]-1;return r<0||r>11?null:`${n[r]} ${t[3]}`}function Je(e,t){let n=I(e);if(!n)return null;let r=L(n,t.tz,{year:`numeric`,month:`2-digit`,day:`2-digit`});return`${r.year}-${r.month}-${r.day}`}function Ye(e,t,n={}){let r=I(e);if(!r)return`—`;let i=L(r,t.tz,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,hour12:!1}),a=`${i.year}-${i.month}-${i.day} ${i.hour}:${i.minute}`;return n.noSuffix?a:`${a} ${He(r,t.tz)}`}function Xe(e,t,n={}){return I(e)?Ye(e,t,n):null}function Ze(e,t,n=Date.now()){let r=I(e);if(!r)return`—`;let i=n-r.getTime();if(i<6e4)return`just now`;if(i<36e5)return`${Math.floor(i/6e4)}m ago`;if(i<864e5)return`${Math.floor(i/36e5)}h ago`;let a=L(new Date(n),t.tz,{year:`numeric`,month:`2-digit`,day:`2-digit`}),o=L(r,t.tz,{year:`numeric`,month:`2-digit`,day:`2-digit`}),s=`${a.year}-${a.month}-${a.day}`,c=`${o.year}-${o.month}-${o.day}`;if(s!==c&&i<1728e5){let e=new Date(0);if(e.setUTCFullYear(Number(a.year),Number(a.month)-1,Number(a.day)-1),c===[e.getUTCFullYear(),F(e.getUTCMonth()+1),F(e.getUTCDate())].join(`-`))return`Yesterday`}return Ue(e,t)}function Qe(e,t,n={}){let r=I(e);if(!r)return`—`;let i=L(r,t.tz,{hour:`2-digit`,minute:`2-digit`,hour12:!1}),a=`${i.hour}:${i.minute}`;return n.noSuffix?a:`${a} ${He(r,t.tz)}`}function $e(e,t,n=`${t}s`){return`${e} ${e===1?t:n}`}function et(e){let t=Date.parse(e);if(Number.isNaN(t))return e;let n=6e5;return new Date(Math.round(t/n)*n).toISOString()}function tt(e){if(e.kind===`subscription-week`)return`subscription week`;let t=Date.parse(e.startAt),n=Date.parse(e.endAt);if(Number.isNaN(t)||Number.isNaN(n))return`last 7 days`;let r=Math.max(1,Math.round((n-t)/864e5));return r===7?`last 7 days`:`last ${$e(r,`day`)}`}var nt={pct0(e){return e==null?`—`:`${Math.round(e)}%`},pct1(e){return e==null?`—`:`${(+e).toFixed(1)}%`},usd2(e){return e==null?`—`:`$${(+e).toFixed(2)}`},usd2Accounting(e){if(e==null)return`—`;let t=+e;return`${t<0?`−`:``}$${Math.abs(t).toFixed(2)}`},usd0(e){if(e==null)return`—`;let t=+e;if(t===0)return`$0`;let n=t<0?`−`:``,r=Math.abs(t);return r<.005?`${n}<$0.01`:Number.isInteger(r)?`${n}$${r.toFixed(0)}`:`${n}$${r.toFixed(2)}`},usdSigned(e){return e==null?`—`:`${e>=0?`+`:`−`}$${Math.abs(+e).toFixed(2)}`},pctFloor(e){return Math.floor(e+1e-9)},usd3(e){return e==null?`—`:`$${(+e).toFixed(3)}`},usd2PerDay(e){return e==null?`—`:`$${(+e).toFixed(2)} / day`},hours1(e){return e==null?`—`:`${(+e).toFixed(1)} h`},ratePctPerHour(e){return e==null?`—`:`from ${(+e).toFixed(4)} %/h`},agoSec(e){return e==null?`—`:`${Math.max(0,e|0)}s ago`},hhmm(e){return e==null?`—`:`${e/3600|0}h ${F(e%3600/60|0)}m`},durationCompact(e){if(e==null)return`—`;let t=e/3600|0,n=e%3600/60|0;return t===0?`${n}m`:`${t}h ${F(n)}m`},durationMs(e){if(e==null||!isFinite(e))return`—`;let t=Math.round(e/1e3);if(t<60)return`${(e/1e3).toFixed(1)}s`;let n=Math.floor(t/60),r=t-n*60;return r?`${n}m ${r}s`:`${n}m`},gapDuration(e){if(e==null||!isFinite(e)||e<0)return`—`;let t=Math.round(e/60);return t<60?`${t} min`:`${(e/3600).toFixed(1).replace(/\.0$/,``)} h`},tokens(e){if(e==null||!isFinite(e))return`—`;if(e<1e3)return String(Math.round(e));let t=e=>e.toFixed(1).replace(/\.0$/,``);return e<1e6&&Math.round(e/100)/10<1e3?`${t(e/1e3)}k`:`${t(e/1e6)}M`},ddhh(e){return e==null?`—`:`${e/86400|0}d ${e%86400/3600|0}h`},elapsedHm(e){return e==null?`—`:e<=0?`just now`:`${e/3600|0}h ${e%3600/60|0}m`},datetimeShort:Ue,datetimeShortZ:We,dateShort:Ge,dateShortWithYear:Ke,startedShort:Ye,startedShortOrNull:Xe,timeHHmm:Qe,weekStart:(e,t)=>qe(e),calDate:e=>qe(e),calendarDateKey:Je,timeOnly:Qe,relativeOrAbsolute:Ze,delta(e){if(e==null)return`—`;let t=e>0?`↑`:e<0?`↓`:`·`;return`${e>0?`+`:``}${e.toFixed(2)} ${t}`},pp(e){return e==null?`—`:Math.abs(e)<.05?`±0.0pp`:`${e>0?`+`:`−`}${Math.abs(e).toFixed(1)}pp`},deltaPct(e){if(e==null)return`—`;let t=Math.round(e*100);return t===0?`0%`:t>0?`+${t}%`:`−${Math.abs(t)}%`},compact(e,t={}){if(e==null)return`—`;let n=Math.abs(e),r;if(n>=1e9)r=(e/1e9).toFixed(1)+`B`;else if(n>=1e6){let t=e/1e6;r=(t>=100?t.toFixed(0):t.toFixed(1))+`M`}else if(n>=1e3){let t=e/1e3;r=(t>=100?t.toFixed(0):t.toFixed(1))+`k`}else return String(e|0);return r=r.replace(/\.0(?=[kMB]$)/,``),t.upper&&(r=r.replace(/k$/,`K`)),r},deltaCls(e,t){return e==null||t?``:e>0?`delta-pos`:e<0?`delta-neg`:``}},rt={tz:`Etc/UTC`,offsetLabel:`UTC`};function it(e){return e?.display?{tz:e.display.resolved_tz,offsetLabel:e.display.offset_label}:rt}function at(e){let t=e=>(t,n)=>(e(n)??0)-(e(t)??0),n=e=>(t,n)=>{let r=(e(t)||``).toString(),i=(e(n)||``).toString();return r<i?-1:+(r>i)};switch(e){case`cost desc`:return t(e=>e.cost_usd??0);case`duration desc`:return t(e=>e.duration_min);case`model asc`:return n(e=>e.model);case`project asc`:return n(e=>e.project);default:return t(e=>e.started_utc?Date.parse(e.started_utc):0)}}function ot(e,t){let n=(t||``).toLowerCase();return n?e.filter(e=>(e.project||``).toLowerCase().includes(n)||(e.project_key||``).toLowerCase().includes(n)||(e.model||``).toLowerCase().includes(n)):e}function st(e,t=rt){let n=e.started_utc?nt.startedShort(e.started_utc,t,{noSuffix:!0}):``,r=e.duration_min==null?``:`${e.duration_min}m`,i=e.cost_usd==null?``:`$${e.cost_usd.toFixed(2)}`;return[n===`—`?``:n,r,e.model||``,e.title||``,e.project||``,e.project_key||``,i].join(` `).toLowerCase()}function ct(e,t,n=rt){let r=(t||``).toLowerCase();if(!r)return[];let i=[];for(let t=0;t<e.length;t++)st(e[t],n).includes(r)&&i.push(t);return i}function lt(e){let t=e?.trend;return t?t.history.map(e=>({label:e.label,used_pct:e.used_pct,dollar_per_pct:e.dollar_per_pct,delta:e.delta,is_current:e.is_current,week_start_at:e.week_start_at??null,cost_usd:e.cost_usd??null,...e.account_labels?{account_labels:e.account_labels}:{}})):[]}var R=[`sessions`,`trend`,`projects`,`daily`,`cache-report`,`weekly`,`monthly`,`blocks`,`forecast`,`alerts`],ut={sessions:{row:`tall`,span:6},trend:{row:`tall`,span:3},projects:{row:`tall`,span:3},daily:{row:`medium`,span:6},"cache-report":{row:`medium`,span:6},weekly:{row:`medium`,span:6},monthly:{row:`medium`,span:6},blocks:{row:`medium`,span:6},forecast:{row:`medium`,span:6},alerts:{row:`short`,span:12}},dt=new Set([`current-week`,`forecast`,`trend`,`sessions`,`projects`,`weekly`,`monthly`,`blocks`,`daily`]),ft=3e3,pt=1200,mt=3e3,ht=new Set([`rate_limited`,`refresh_skipped_no_sync`]),gt=new Set([`sync_busy`]);function _t(e){return!ht.has(e)&&!gt.has(e)}function vt(e){return Array.isArray(e)?e.map(e=>e?.code).filter(e=>typeof e==`string`&&e!==``):[]}var yt=Object.freeze({server_epoch:``,rebuilding:!1,requested_id:0,started_id:0,settled_id:0,settled_status:null,settled_warnings:[]});function bt(e){return e?.sync_activity??yt}var xt=4,St=5,Ct=new Set([`weekly`,`monthly`,`daily`]);function wt(e,t){if(t>=6)return{panels:e??[],newVersion:t};let n=e?[...e]:[];if(t<2&&n.length>0&&!n.includes(`projects`)&&n.splice(Math.min(xt,n.length),0,`projects`),t<3&&(n=n.filter(e=>e!==`current-week`)),t<4&&(n=n.filter(e=>!Ct.has(e)),n.length>0&&!n.includes(`history`)&&n.splice(Math.min(St,n.length),0,`history`)),t<5&&(n=n.map(e=>e===`history`?`daily`:e),n.length>0)){let e=n.includes(`cache-report`)?n.indexOf(`cache-report`):n.indexOf(`daily`),t=e>=0?e+1:n.length;for(let e of[`weekly`,`monthly`])n.includes(e)||(n.splice(t,0,e),t+=1)}return t<6&&n.includes(`blocks`)&&n.includes(`forecast`)&&(n.splice(n.indexOf(`blocks`),1),n.splice(n.indexOf(`forecast`),0,`blocks`)),{panels:n,newVersion:6}}function Tt(e,t){if(!e||!Array.isArray(e)||e.length===0)return[...t];let n=new Set(t),r=new Set,i=[];for(let t of e)n.has(t)&&(r.has(t)||(r.add(t),i.push(t)));for(let e of t)r.has(e)||i.push(e);return i}function Et(e,t,n){if(!n)return e;let r=t.find(e=>e.id===n.column);if(!r)return e;let i=n.direction===`desc`?-1:1,a=r.nullKey;return e.slice().sort((e,t)=>{if(a){let n=a(e)==null,r=a(t)==null;if(n&&r)return 0;if(n)return 1;if(r)return-1}return i*r.compare(e,t)})}function Dt(e,t){return!e||e.column!==t.id?{column:t.id,direction:t.defaultDirection}:e.direction===t.defaultDirection?{column:t.id,direction:e.direction===`asc`?`desc`:`asc`}:null}function z(e){if(typeof e!=`object`||!e||Array.isArray(e))return null;let t=e;return typeof t.column!=`string`||t.direction!==`asc`&&t.direction!==`desc`?null:{column:t.column,direction:t.direction}}var Ot=[{id:`started`,label:`Started`,defaultDirection:`desc`,compare:(e,t)=>(Date.parse(e.started_utc??``)||0)-(Date.parse(t.started_utc??``)||0)},{id:`duration`,label:`Dur`,defaultDirection:`desc`,compare:(e,t)=>(e.duration_min??0)-(t.duration_min??0)},{id:`model`,label:`Model`,defaultDirection:`asc`,compare:(e,t)=>(e.model||``).localeCompare(t.model||``)},{id:`session`,label:`Session`,defaultDirection:`asc`,compare:(e,t)=>(e.title||``).localeCompare(t.title||``)},{id:`project`,label:`Project`,defaultDirection:`asc`,compare:(e,t)=>(e.project||``).localeCompare(t.project||``)},{id:`cache`,label:`Cache`,defaultDirection:`desc`,numeric:!0,nullKey:e=>e.cache_hit_pct??null,compare:(e,t)=>(e.cache_hit_pct??0)-(t.cache_hit_pct??0)},{id:`cost`,label:`Cost`,defaultDirection:`desc`,numeric:!0,compare:(e,t)=>(e.cost_usd??0)-(t.cost_usd??0)}],kt={shareModal:null,composerModal:null};function At(e,t){switch(t.type){case`OPEN_SHARE`:{let n=t.source??`claude`,r=t.account??null,i=t.params===void 0?{panel:t.panel,triggerId:t.triggerId,source:n,account:r}:{panel:t.panel,triggerId:t.triggerId,source:n,account:r,params:t.params};return{...e,shareModal:i}}case`CLOSE_SHARE`:return{...e,shareModal:null};case`OPEN_COMPOSER`:return{...e,composerModal:{open:!0}};case`CLOSE_COMPOSER`:return{...e,composerModal:null};default:return e}}function jt(e,t,n){return n===void 0?{type:`OPEN_SHARE`,panel:e,triggerId:t}:{type:`OPEN_SHARE`,panel:e,triggerId:t,params:n}}function Mt(){return{type:`CLOSE_SHARE`}}function Nt(){return{type:`OPEN_COMPOSER`}}function Pt(){return{type:`CLOSE_COMPOSER`}}var Ft=`cctally:share:basket`;function It(e,t){switch(t.type){case`BASKET_ADD`:return e.items.length>=20?{...e,rejectedReason:`capacity`}:{items:[...e.items,t.item],rejectedReason:null};case`BASKET_REMOVE`:return{...e,items:e.items.filter(e=>e.id!==t.id)};case`BASKET_REORDER`:{if(t.fromIdx===t.toIdx||t.fromIdx<0||t.toIdx<0||t.fromIdx>=e.items.length||t.toIdx>=e.items.length)return e;let n=e.items.slice(),[r]=n.splice(t.fromIdx,1);return n.splice(t.toIdx,0,r),{...e,items:n}}case`BASKET_CLEAR`:return{items:[],rejectedReason:null};case`BASKET_CLEAR_REJECTED`:return e.rejectedReason==null?e:{...e,rejectedReason:null};case`BASKET_HYDRATE`:return{items:t.items,rejectedReason:null};default:return e}}function Lt(e){return{id:e.id??Vt(),panel:e.panel,template_id:e.template_id,options:e.options,added_at:e.added_at,data_digest_at_add:e.data_digest_at_add,...e.data_digest_version_at_add==null?{}:{data_digest_version_at_add:e.data_digest_version_at_add},kernel_version:e.kernel_version,label_hint:e.label_hint,source:e.source??`claude`,...e.account==null?{}:{account:e.account}}}function Rt(){try{let e=localStorage.getItem(Ft);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)?t.filter(Bt).map(e=>({...e,source:e.source??`claude`})):[]}catch{return[]}}function zt(e){try{localStorage.setItem(Ft,JSON.stringify(e))}catch{}}function Bt(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.id==`string`&&typeof t.panel==`string`&&typeof t.template_id==`string`&&typeof t.added_at==`string`&&typeof t.data_digest_at_add==`string`&&typeof t.kernel_version==`number`&&typeof t.label_hint==`string`&&typeof t.options==`object`&&t.options!==null}function Vt(){let e=new Uint8Array(16);return crypto.getRandomValues(e),Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``).slice(0,26)}var Ht=`cctally:dashboard:source`,Ut=new Set([`claude`,`codex`,`all`]);function Wt(){try{let e=localStorage.getItem(Ht);if(e!=null&&Ut.has(e))return e}catch{}return`claude`}function Gt(e){try{localStorage.setItem(Ht,e)}catch{}}var Kt=`cctally:dashboard:account:`;function qt(e){return e===`all`?`all`:`provider`}function Jt(e){return e.length<=24?e:`${e.slice(0,12)}…${e.slice(-8)}`}function Yt(e,t){return t===`all`?`${Kt}all:${e}`:`${Kt}${e}`}function B(e,t=`provider`){try{let n=localStorage.getItem(Yt(e,t));if(n!=null&&n!==``)return n}catch{}return`all`}function Xt(e,t,n=`provider`){try{localStorage.setItem(Yt(e,n),t)}catch{}}function Zt(){return{provider:{claude:B(`claude`,`provider`),codex:B(`codex`,`provider`)},all:{claude:B(`claude`,`all`),codex:B(`codex`,`all`)}}}function Qt(e,t,n){return t!==`all`&&t!==n?`all`:e[qt(t)][n]??`all`}function V(e){let t=e?.data?.accounts;return!Array.isArray(t)||t.length===0?null:t}function H(e,t,n){if(t===`all`||n===`all`||n===``)return null;let r=V(e?.sources?.[t]??null);return r==null?null:r.some(e=>e.accountKey===n)?n:null}function $t(e,t){return V(e?.sources?.[t]??null)!=null}function en(e,t){return(t===`all`?[`claude`,`codex`]:[t]).filter(t=>$t(e,t))}function tn(e,t,n,r){return H(e,n,Qt(r,t,n))}function nn(e,t){if(e==null||e.length===0)return`all`;let n=[`all`,...e.map(e=>e.accountKey)];return n[((t==null?0:Math.max(0,n.indexOf(t)))+1)%n.length]}var U=`codex`;function rn(e){let t=e?.data?.account_scopes;return typeof t!=`object`||!t||Array.isArray(t)?null:t}function an(){let e={rows:[],total_cost_usd:0,total_tokens:0,display_tz:`UTC`};return{is_empty:!0,periods:{daily:e,monthly:e,weekly:e},sessions:{rows:[],total_sessions:0,total_cost_usd:0,total_tokens:0},projects:{rows:[],total_cost_usd:0,total_tokens:0},cache_report:null,budget:{status:null,milestones:[],projected:[]},quota:{summary:{window_count:0,active_window_count:0,latest_percent:null,freshness:`unavailable`,active:[]},histories:[],milestones:[],blocks:[],cycle_index:[]},alerts:{rows:[]}}}function on(e,t,n,r){let i=(e.cycles??[]).find(e=>e.accountKey===r)??null,a=n.quota.summary.freshness===`stale`;return{cost_usd:t?.spendUsd??null,input_tokens:t?.inputTokens??null,cached_input_tokens:t?.cachedInputTokens??null,output_tokens:t?.outputTokens??null,reasoning_output_tokens:t?.reasoningOutputTokens??null,total_tokens:t?.totalTokens??null,cycle:i==null?null:{window_minutes:i.window_minutes,start_at:i.start_at,resets_at:i.resets_at},...i!=null&&a?{cycle_freshness:`stale`}:{},quota:n.quota.summary,budget:n.budget.status,alerts:{count:n.alerts.rows.length},...e.update_state==null?{}:{update_state:e.update_state},...e.cycles==null?{}:{cycles:e.cycles}}}function sn(e,t,n,r){return{...e,hero:on(e.hero,n,t,r),periods:t.periods,sessions:t.sessions,projects:t.projects,quota:t.quota,budget:t.budget,alerts:t.alerts,cache_report:t.cache_report??null}}function cn(e,t,n,r=t===`all`?null:t){let i=r==null?null:e?.sources?.[r]??null,a=i?.data??null,o=r===U?rn(i):null,s=o!=null,c=r==null?null:H(e,r,n);if(c==null||!s)return{source:t,provider:r,accountKey:null,requestedKey:c,card:null,scope:null,data:a,isEmpty:!1,scopesSupported:s};let l=(V(i)??[]).find(e=>e.accountKey===c)??null,u=o[c]??an();return{source:t,provider:r,accountKey:c,requestedKey:c,card:l,scope:u,data:a==null?null:sn(a,u,l,c),isEmpty:u.is_empty===!0,scopesSupported:!0}}var ln=new WeakMap;function un(e,t,n){if(e==null)return null;if(t!==U&&t!==`all`)return e;let r=e.sources?.[U]??null;if(r?.data==null||rn(r)==null)return e;let i=H(e,U,n);if(i==null)return e;let a=`${t}\u0000${i}`,o=ln.get(e);o??(o=new Map,ln.set(e,o));let s=o.get(a);if(s!=null)return s;let c=cn(e,t,n,U);if(c.accountKey==null||c.data==null)return e;let l={...e.sources,[U]:{...r,data:c.data}},u={...e,sources:l};return o.set(a,u),u}function dn(e){return e==null?!1:e.data==null&&e.last_success_at==null&&Array.isArray(e.warnings)&&e.warnings.length===0&&e.capabilities!=null&&Object.keys(e.capabilities).length===0}function W(e,t){if(e==null)return{selection:t,entry:null,hydrating:!0,env:null};let n=e.sources;if(n==null)return{selection:t,entry:null,hydrating:t!==`claude`,env:e};let r=n[t]??null;return{selection:t,entry:r,hydrating:dn(r),env:e}}function fn(e,t){return[...e]}function pn(e,t,n){let r=new Set(t),i=0;return e.map(e=>r.has(e)&&i<n.length?n[i++]:e)}function mn(e,t){return e?.trim()||(t===300?`5-hour limit`:t===10080?`7-day limit`:t==null||t<=0?`Codex quota`:t%1440==0?`${t/1440}-day limit`:t%60==0?`${t/60}-hour limit`:`${t}-minute limit`)}function hn(e,t){let n=new Map,r=new Map;for(let e of t?.histories??[]){if(e.account_key==null){r.set(e.key,e);continue}let t=n.get(e.account_key)??new Map;t.set(e.key,e),n.set(e.account_key,t)}return(e?.quota?.active??[]).map(e=>{let t=e.account_key==null?r.get(e.key):n.get(e.account_key)?.get(e.key);return{key:e.key,label:mn(t?.label,t?.window_minutes),windowMinutes:t?.window_minutes??null,current:e}})}function gn(e){return(e??[]).map(e=>({source:`claude`,key:e.key,title:e.title?.trim()??``,recencyUtc:e.started_utc,models:e.model?[e.model]:[],costUsd:e.cost_usd,durationMin:e.duration_min??null,project:e.project,projectKey:e.project_key??null,cacheHitPct:e.cache_hit_pct??null,tokens:{kind:`claude`},legacy:e}))}function _n(e){return(e??[]).map(e=>({source:`codex`,key:e.key,title:e.label?.trim()??``,recencyUtc:e.last_activity,models:[...e.models??[]],costUsd:e.cost_usd,durationMin:e.duration_min??null,project:e.project??`Project resolving`,projectKey:e.project_key??null,cacheHitPct:e.input_tokens>0?e.cached_input_tokens/e.input_tokens*100:null,tokens:{kind:`codex`,input:e.input_tokens,cachedInput:e.cached_input_tokens,output:e.output_tokens,reasoning:e.reasoning_output_tokens,total:e.total_tokens}}))}function vn(e){if(e.selection===`claude`)return gn((e.env?.sessions?.rows??[]).map(e=>({key:e.session_id,source:`claude`,started_utc:e.started_utc,duration_min:e.duration_min,model:e.model,project:e.project,project_key:e.project_key,cost_usd:e.cost_usd,cache_hit_pct:e.cache_hit_pct,title:e.title})));if(e.selection===`codex`){let t=e.entry?.data;return _n(t?.sessions?.rows??[])}if(e.selection===`all`){let t=e.entry?.data?.providers,n=t?.claude??e.env?.sources?.claude?.data??null,r=t?.codex??e.env?.sources?.codex?.data??null,i=n?gn(n.sessions?.rows??[]):[],a=r?_n(r.sessions?.rows??[]):[];return[...i,...a]}return[]}function yn(e){return[e.title||``,e.project,e.durationMin==null?``:`${e.durationMin}m`,e.costUsd==null?``:`$${e.costUsd.toFixed(2)}`,...e.models].join(` `).toLowerCase()}function bn(e,t){let n=(t||``).toLowerCase();return n?e.filter(e=>yn(e).includes(n)):e}function xn(e,t){let n=(t||``).toLowerCase();if(!n)return[];let r=[];for(let t=0;t<e.length;t++)yn(e[t]).includes(n)&&r.push(t);return r}function G(e){return e.recencyUtc&&Date.parse(e.recencyUtc)||0}function Sn({includeSource:e,oneModel:t}){let n=[];return n.push({id:`started`,label:`Started`,defaultDirection:`desc`,nullKey:e=>e.recencyUtc??null,compare:(e,t)=>G(e)-G(t)},{id:`duration`,label:`Dur`,defaultDirection:`desc`,numeric:!0,nullKey:e=>e.durationMin,compare:(e,t)=>(e.durationMin??0)-(t.durationMin??0)},...t?[]:[{id:`model`,label:`Model`,defaultDirection:`asc`,compare:(e,t)=>e.models.join(`,`).localeCompare(t.models.join(`,`))}],{id:`session`,label:`Session`,defaultDirection:`asc`,compare:(e,t)=>(e.title||``).localeCompare(t.title||``)},{id:`project`,label:`Project`,defaultDirection:`asc`,compare:(e,t)=>e.project.localeCompare(t.project)},{id:`cache`,label:`Cache`,defaultDirection:`desc`,numeric:!0,nullKey:e=>e.cacheHitPct,compare:(e,t)=>(e.cacheHitPct??0)-(t.cacheHitPct??0)},{id:`cost`,label:`Cost`,defaultDirection:`desc`,numeric:!0,compare:(e,t)=>(e.costUsd??0)-(t.costUsd??0)}),n}function Cn(e,t){let n=e.recencyUtc==null,r=t.recencyUtc==null;return n&&r?0:n?1:r?-1:G(t)-G(e)}var K=`ccusage.dashboard.prefs`,q=`ccusage.dashboard.filter`,wn=`ccusage.dashboard.sort`,Tn=`cctally.conv.outlineOpen`;function En(){return{state:null,suppress:{skipped_versions:[],remind_after:null},modalOpen:!1,runId:null,status:`idle`,stream:[],errorMessage:null,startedAt:null}}var Dn=[{key:`started desc`,label:`Started (newest first)`},{key:`cost desc`,label:`Cost (highest first)`},{key:`duration desc`,label:`Duration (longest first)`},{key:`model asc`,label:`Model (A→Z)`},{key:`project asc`,label:`Project (A→Z)`}];function On(e){return`family`in e&&e.family===`meter_rate_change`}function J(){return{sortDefault:`started desc`,sessionsPerPage:100,sessionsCollapsed:!0,blocksCollapsed:!0,dailyCollapsed:!0,alertsCollapsed:!1,panelOrder:[...R],onboardingToastSeen:!1,mobileOnboardingToastSeen:!1,trendSortOverride:null,sessionsSortOverride:null,projectsWindowWeeks:4,projectsTrendYMode:`absolute`,projectsSortOverride:null,panelOrderSchemaVersion:1,historySortOverride:null,historySortOverrides:{week:null,month:null}}}function Y(e){return{...e,weekly_usd:e.weekly_usd??null}}function kn(){return{enabled:!1,weekly_thresholds:[90,95],five_hour_thresholds:[90,95],budget_thresholds:[90,100],budget_enabled:!1,weekly_usd:null,projected_weekly_enabled:!1,projected_budget_enabled:!1,rate_change_enabled:!1,project_alerts_enabled:!1,codex_budget_configured:!1,codex_budget_alerts_enabled:!1,codex_projected_enabled:!1}}function An(){let e=J(),t=localStorage.getItem(K),n=localStorage.getItem(wn);if(t){try{let n=JSON.parse(t);e={...J(),...n};let r=typeof n.panelOrderSchemaVersion==`number`?n.panelOrderSchemaVersion:1,i=wt(n.panelOrder??null,r);e.panelOrderSchemaVersion=i.newVersion,e.panelOrder=Tt(i.panels,R),e.trendSortOverride=z(e.trendSortOverride??null),e.sessionsSortOverride=z(e.sessionsSortOverride??null),e.projectsSortOverride=z(e.projectsSortOverride??null),e.historySortOverride=null;let a=e.historySortOverrides;e.historySortOverrides={week:z(a?.week??null),month:z(a?.month??null)},r!==i.newVersion&&localStorage.setItem(K,JSON.stringify(e))}catch{e=J(),e.panelOrderSchemaVersion=6}n!=null&&localStorage.removeItem(wn)}else n?(e={...J(),sortDefault:n,panelOrderSchemaVersion:6},localStorage.setItem(K,JSON.stringify(e)),localStorage.removeItem(wn)):e.panelOrderSchemaVersion=6;let r=!0;try{let e=localStorage.getItem(Tn);e===`false`?r=!1:e===`true`&&(r=!0)}catch{r=!0}let i=Le();return{snapshot:null,snapshotObservedAtMs:null,activeSource:Wt(),accountFocus:Zt(),view:`dashboard`,selectedConversationId:null,selectedConversationRef:null,conversationSearch:``,conversationSearchKind:`all`,conversationJump:null,convOutlineOpen:r,convOutlineMobileOpen:!1,convOutlineWidth:Be(),convFocusMode:`all`,convOutlineTab:`outline`,convCurrentTurnUuid:null,convPinnedUuid:null,convPinnedAnchorKey:null,convBookmarks:{},convAnonRefusals:{},convFindOpen:!1,conversationFilters:i.filters,convFiltersOpen:!1,conversationRailSort:i.sort,compare:null,comparePick:null,compareCloseFocusPending:!1,conversationTitles:{},openModal:null,openModalSource:null,openSessionId:null,openBlockStartAt:null,openDailyDate:null,openProjectKey:null,openExplainAccountKey:null,openExplainWindowStartAt:null,openExplainWindowEndAt:null,openExplainAlertFiredAt:null,sessionsSort:e.sortDefault,filterText:localStorage.getItem(q)??``,searchText:``,searchMatches:[],searchIndex:-1,inputMode:null,prefs:e,syncErrorFloorUntil:0,syncBusy:!1,syncSuccessFlashUntil:0,syncBusyNoticeUntil:0,outstandingSyncId:null,syncEpoch:null,toast:null,alerts:[],seenAlertIds:new Set,alertsConfig:kn(),dashboardPrefs:{},alertToastQueue:[],dragPreviewOrder:null,update:En(),...kt,basket:{items:Rt(),rejectedReason:null},doctor:null,doctorModalOpen:!1,heroScrolled:!1,chromeOverlayOpen:0,openSourceDetail:null,openSourceDetailSelection:null,sourceSessionsSort:null}}var X=An(),jn=new Set,Z=``;function Mn(){jn.forEach(e=>{try{e()}catch(e){console.error(`subscriber error:`,e)}})}function Nn(){return X}function Pn(e=X){let t=e.selectedConversationRef;return t?e.convAnonRefusals[j(t)]??null:null}function Fn(e=X){return e.dashboardPrefs.cache_failure_markers!==!1}function In(e=X){return e.dashboardPrefs.live_tail!==!1}function Ln(e=X){return e.dashboardPrefs.lan_auth!==!1}function Rn(e=X){return e.update.state?.configured_channel===`beta`?`beta`:`stable`}function zn(e){return e.composerModal?`composer`:e.shareModal?`share`:e.update.modalOpen?`update`:e.doctorModalOpen?`doctor`:e.openSourceDetail==null?e.openModal==null?null:`panel`:`source-detail`}function Bn(e){return jn.add(e),()=>{jn.delete(e)}}function Vn(e=X){let t=ot(e.snapshot?.sessions?.rows??[],e.filterText),n=e.prefs.sessionsSortOverride;return(n?Et(t,Ot,n):t.slice().sort(at(e.sessionsSort))).slice(0,e.prefs.sessionsPerPage)}function Hn(e=X,t=e.activeSource){return un(e.snapshot,t,Qt(e.accountFocus,t,`codex`))}function Un(e=X){if(e.activeSource===`claude`)return gn(Vn(e).map(e=>({key:e.session_id,source:`claude`,started_utc:e.started_utc,duration_min:e.duration_min,model:e.model,project:e.project,project_key:e.project_key,cost_usd:e.cost_usd,cache_hit_pct:e.cache_hit_pct,title:e.title})));let t=bn(vn(W(Hn(e),e.activeSource)),e.filterText),n=e.sourceSessionsSort;return(n?Et(t,Sn({includeSource:e.activeSource===`all`,oneModel:!1}),n):t.slice().sort(Cn)).slice(0,e.prefs.sessionsPerPage)}function Q(e){if(!e.searchText)return{searchMatches:[],searchIndex:-1};let t=e.activeSource===`claude`?ct(Vn(e),e.searchText,it(e.snapshot)):xn(Un(e),e.searchText);return t.length===0?{searchMatches:[],searchIndex:-1}:{searchMatches:t,searchIndex:e.searchIndex<0||e.searchIndex>=t.length?0:e.searchIndex}}function Wn(e){let t=e.outstandingSyncId,n=e.syncEpoch;if(t==null||n==null)return{};let r=e.snapshot?.sync_activity;if(!r||!r.server_epoch)return{};if(r.server_epoch!==n)return{outstandingSyncId:null,syncEpoch:null};if(r.settled_id<t)return{};let i={outstandingSyncId:null,syncEpoch:null},a=vt(r.settled_warnings);return r.settled_status===`failed`||a.some(_t)?{...i,syncErrorFloorUntil:Date.now()+ft}:a.some(e=>gt.has(e))?{...i,syncBusyNoticeUntil:Date.now()+mt}:{...i,syncSuccessFlashUntil:Date.now()+pt}}function Gn(e){let t=e?.sync_activity?.server_epoch,n=X.snapshot?.sync_activity?.server_epoch;return!t||!n?!1:t!==n}function Kn(e){let t=e?.generated_at??``,n=Gn(e);if(!n&&t&&Z&&t<Z)return!1;n&&(Z=``),t&&(Z=t);let r={...X,snapshot:e,snapshotObservedAtMs:e==null?null:Date.now()},i={...r,...Wn(r)};return X={...i,...Q(i)},Mn(),!0}function qn(){Z=``}function Jn(e,t,n){return e==null?null:t==null?e:e+Math.max(0,Math.floor((n-t)/1e3))}var Yn={openModal:null,openModalSource:null,openSessionId:null,openBlockStartAt:null,openDailyDate:null,openProjectKey:null,openExplainAccountKey:null,openExplainWindowStartAt:null,openExplainWindowEndAt:null,openExplainAlertFiredAt:null,shareModal:null,composerModal:null,openSourceDetail:null,openSourceDetailSelection:null};function $(e,t){return e===void 0?typeof t==`string`&&t?k(t):null:e}function Xn(e){switch(e.type){case`OPEN_MODAL`:X={...X,openModal:e.kind,openModalSource:X.activeSource,openSessionId:e.sessionId??null,openBlockStartAt:e.blockStartAt??null,openDailyDate:e.dailyDate??null,openProjectKey:e.projectKey??null,openExplainAccountKey:e.accountKey??null,openExplainWindowStartAt:e.windowStartAt??null,openExplainWindowEndAt:e.windowEndAt??null,openExplainAlertFiredAt:e.alertFiredAt??null};break;case`CLOSE_MODAL`:X={...X,openModal:null,openModalSource:null,openSessionId:null,openBlockStartAt:null,openDailyDate:null,openProjectKey:null,openExplainAccountKey:null,openExplainWindowStartAt:null,openExplainWindowEndAt:null,openExplainAlertFiredAt:null};break;case`SET_ACTIVE_SOURCE`:if(X.activeSource===e.source)break;Gt(e.source);{let t={...X,activeSource:e.source};X={...t,...Q(t)}}break;case`SET_ACCOUNT_FOCUS`:if(X.accountFocus[e.slot][e.source]===e.account)break;Xt(e.source,e.account,e.slot),X={...X,accountFocus:{...X.accountFocus,[e.slot]:{...X.accountFocus[e.slot],[e.source]:e.account}},selectedConversationId:null,selectedConversationRef:null,conversationJump:null,convFindOpen:!1,compare:null,comparePick:null};break;case`OPEN_SOURCE_DETAIL`:X={...X,openSourceDetail:{source:e.source,resource:e.resource,key:e.key,accountKey:e.accountKey??null},openSourceDetailSelection:X.activeSource};break;case`CLOSE_SOURCE_DETAIL`:if(X.openSourceDetail==null)break;X={...X,openSourceDetail:null,openSourceDetailSelection:null};break;case`SET_SOURCE_SESSIONS_SORT`:{let t={...X,sourceSessionsSort:e.override};X={...t,...Q(t)};break}case`SET_VIEW`:X={...X,view:e.view,...Yn,compare:null,comparePick:null,compareCloseFocusPending:!1,...e.view===`dashboard`?{selectedConversationId:null,selectedConversationRef:null,conversationJump:null,conversationSearch:``,conversationSearchKind:`all`}:{}};break;case`OPEN_CONVERSATION`:{let t=$(e.conversationRef,e.sessionId);if(!t)break;let n=!M(t,X.selectedConversationRef);X={...X,view:`conversations`,...Yn,compare:null,comparePick:null,compareCloseFocusPending:!1,selectedConversationId:t.source===`claude`?t.key:null,selectedConversationRef:t,conversationJump:e.jump??null,...n?{convFocusMode:`all`,convOutlineTab:`outline`,convCurrentTurnUuid:null,convPinnedUuid:null,convPinnedAnchorKey:null,convFindOpen:!1,convOutlineMobileOpen:!1,convBookmarks:N(t)}:{}};break}case`SELECT_CONVERSATION`:{let t=$(e.conversationRef,e.sessionId),n=!M(t,X.selectedConversationRef);X={...X,...n?{convOutlineMobileOpen:!1,convFindOpen:!1,convBookmarks:t?N(t):{}}:{},compare:null,comparePick:null,compareCloseFocusPending:!1,selectedConversationId:t?.source===`claude`?t.key:null,selectedConversationRef:t,conversationJump:null,convFocusMode:`all`,convOutlineTab:`outline`,convCurrentTurnUuid:null,convPinnedUuid:null,convPinnedAnchorKey:null};break}case`SET_CONVERSATION_SEARCH`:X={...X,conversationSearch:e.text,...e.text===``?{conversationSearchKind:`all`}:{}};break;case`SET_CONVERSATION_SEARCH_KIND`:X={...X,conversationSearchKind:e.kind};break;case`CLEAR_CONVERSATION_JUMP`:X={...X,conversationJump:null};break;case`TOGGLE_CONV_OUTLINE`:{let e=!X.convOutlineOpen;try{localStorage.setItem(Tn,e?`true`:`false`)}catch{}X={...X,convOutlineOpen:e};break}case`SET_CONV_OUTLINE_WIDTH`:{let t=P(e.px);if(t===X.convOutlineWidth)break;Ve(t),X={...X,convOutlineWidth:t};break}case`TOGGLE_CONV_OUTLINE_MOBILE`:X={...X,convOutlineMobileOpen:!X.convOutlineMobileOpen};break;case`CLOSE_CONV_OUTLINE_MOBILE`:X={...X,convOutlineMobileOpen:!1};break;case`SET_CONV_FOCUS_MODE`:X={...X,convFocusMode:e.mode};break;case`SET_CONV_OUTLINE_TAB`:X={...X,convOutlineTab:e.tab};break;case`OPEN_CONV_FIND`:X={...X,convFindOpen:!0};break;case`CLOSE_CONV_FIND`:X={...X,convFindOpen:!1};break;case`SET_CONVERSATION_FILTERS`:{let t={...X.conversationFilters,...e.patch};Re({filters:t,sort:X.conversationRailSort}),X={...X,conversationFilters:t};break}case`CLEAR_CONVERSATION_FILTERS`:Re({filters:O,sort:X.conversationRailSort}),X={...X,conversationFilters:O};break;case`TOGGLE_CONV_FILTERS`:X={...X,convFiltersOpen:!X.convFiltersOpen};break;case`SET_CONV_FILTERS_OPEN`:X={...X,convFiltersOpen:e.open};break;case`SET_CONVERSATION_RAIL_SORT`:Re({filters:X.conversationFilters,sort:e.sort}),X={...X,conversationRailSort:e.sort};break;case`START_COMPARE_PICK`:{let t=$(e.anchorRef,e.anchor);if(!t||!M(t,X.selectedConversationRef))break;X={...X,comparePick:{anchor:t},convOutlineMobileOpen:!1}}break;case`CANCEL_COMPARE_PICK`:X={...X,comparePick:null,convFiltersOpen:!1,compareCloseFocusPending:!0};break;case`OPEN_COMPARE`:{let t=$(e.aRef,e.a),n=$(e.bRef,e.b);if(!t||!n||M(t,n))break;X={...X,...Yn,view:`conversations`,selectedConversationId:t.source===`claude`?t.key:null,selectedConversationRef:t,conversationJump:null,comparePick:null,convFiltersOpen:!1,compare:{a:t,b:n}};break}case`SWAP_COMPARE`:X={...X,compare:X.compare?{a:X.compare.b,b:X.compare.a}:null};break;case`CLOSE_COMPARE`:X={...X,compare:null,compareCloseFocusPending:!0};break;case`CLEAR_COMPARE_CLOSE_FOCUS`:X={...X,compareCloseFocusPending:!1};break;case`CACHE_CONVERSATION_TITLES`:{let t=!1,n={...X.conversationTitles};for(let[r,i]of e.titles){if(!r||!i)continue;let e=pe(r)?j(r):r;n[e]!==i&&(n[e]=i,t=!0)}t&&(X={...X,conversationTitles:n});break}case`SET_CONV_CURRENT_TURN`:if(X.convCurrentTurnUuid===e.uuid)break;e.uuid!=null&&X.selectedConversationRef!=null&&Se(X.selectedConversationRef,e.uuid),X={...X,convCurrentTurnUuid:e.uuid};break;case`SET_CONV_PINNED_TURN`:{let t=e.anchorKey??null;if(X.convPinnedUuid===e.uuid&&X.convPinnedAnchorKey===t)break;X={...X,convPinnedUuid:e.uuid,convPinnedAnchorKey:t};break}case`SET_CONV_ANON_REFUSAL`:{let t=j(e.conversationRef),n=X.convAnonRefusals[t];if(e.refused){let r=e.message??``;if(n===r)break;X={...X,convAnonRefusals:{...X.convAnonRefusals,[t]:r}};break}if(n===void 0)break;let r={...X.convAnonRefusals};delete r[t],X={...X,convAnonRefusals:r};break}case`CLEAR_CONV_PIN`:if(X.convPinnedUuid===null&&X.convPinnedAnchorKey===null)break;X={...X,convPinnedUuid:null,convPinnedAnchorKey:null};break;case`TOGGLE_BOOKMARK`:{let t=$(e.conversationRef,e.sessionId)??X.selectedConversationRef;if(!t)break;Ae(t,e.uuid),M(t,X.selectedConversationRef)&&(X={...X,convBookmarks:N(t)});break}case`SET_BOOKMARK_NOTE`:{let t=$(e.conversationRef,e.sessionId)??X.selectedConversationRef;if(!t)break;je(t,e.uuid,e.note),M(t,X.selectedConversationRef)&&(X={...X,convBookmarks:N(t)});break}case`SET_FILTER`:{e.text?localStorage.setItem(q,e.text):localStorage.removeItem(q);let t={...X,filterText:e.text};X={...t,...Q(t)};break}case`SET_SEARCH`:{let t={...X,searchText:e.text,searchIndex:0};X={...t,...Q(t)};break}case`SET_SEARCH_MATCHES`:X={...X,searchMatches:e.matches,searchIndex:e.index};break;case`SET_SORT`:{let t={...X,sessionsSort:e.key};X={...t,...Q(t)};break}case`SET_INPUT_MODE`:X={...X,inputMode:e.mode};break;case`SAVE_PREFS`:{let t={...X.prefs,...e.patch};localStorage.setItem(K,JSON.stringify(t));let n={...X,prefs:t};X={...n,...Q(n)};break}case`RESET_PREFS`:{let e=X.prefs.onboardingToastSeen,t=X.prefs.mobileOnboardingToastSeen;localStorage.removeItem(K),localStorage.removeItem(q);let n=J();n.onboardingToastSeen=e,n.mobileOnboardingToastSeen=t,n.panelOrderSchemaVersion=6,localStorage.setItem(K,JSON.stringify(n)),X={...X,prefs:n,filterText:``,searchText:``,searchMatches:[],searchIndex:-1,sessionsSort:n.sortDefault};break}case`RESET_PANEL_ORDER`:{let e={...X.prefs,panelOrder:[...R],panelOrderSchemaVersion:6};localStorage.setItem(K,JSON.stringify(e)),X={...X,prefs:e};break}case`REORDER_PANELS`:{let{from:t,to:n}=e,r=X.prefs.panelOrder,i=fn(r,W(X.snapshot,X.activeSource));if(t===n||t<0||t>=i.length||n<0||n>=i.length)break;let a=i.slice(),[o]=a.splice(t,1);a.splice(n,0,o);let s=pn(r,i,a),c={...X.prefs,panelOrder:s};localStorage.setItem(K,JSON.stringify(c)),X={...X,prefs:c};break}case`SET_DRAG_PREVIEW`:X={...X,dragPreviewOrder:e.order};break;case`COMMIT_DRAG_PREVIEW`:{let e=X.dragPreviewOrder;if(!e)break;let t={...X.prefs,panelOrder:e};localStorage.setItem(K,JSON.stringify(t)),X={...X,prefs:t,dragPreviewOrder:null};break}case`CLEAR_DRAG_PREVIEW`:if(X.dragPreviewOrder==null)break;X={...X,dragPreviewOrder:null};break;case`SWAP_PANELS`:{let{index:t,direction:n}=e,r=X.prefs.panelOrder,i=fn(r,W(X.snapshot,X.activeSource));if(t<0||t>=i.length)break;let a=ut[i[t]].row,o=t+n;for(;o>=0&&o<i.length&&ut[i[o]].row!==a;)o+=n;if(o<0||o>=i.length)break;let s=i.slice();[s[t],s[o]]=[s[o],s[t]];let c=pn(r,i,s),l={...X.prefs,panelOrder:c};localStorage.setItem(K,JSON.stringify(l)),X={...X,prefs:l};break}case`MARK_ONBOARDING_TOAST_SEEN`:{if(X.prefs.onboardingToastSeen)break;let e={...X.prefs,onboardingToastSeen:!0};localStorage.setItem(K,JSON.stringify(e)),X={...X,prefs:e};break}case`MARK_MOBILE_ONBOARDING_TOAST_SEEN`:{if(X.prefs.mobileOnboardingToastSeen)break;let e={...X.prefs,mobileOnboardingToastSeen:!0};localStorage.setItem(K,JSON.stringify(e)),X={...X,prefs:e};break}case`SET_SYNC_ERROR_FLOOR`:X={...X,syncErrorFloorUntil:e.untilMs};break;case`SET_SYNC_BUSY`:X={...X,syncBusy:e.busy};break;case`SET_SYNC_SUCCESS_FLASH`:X={...X,syncSuccessFlashUntil:e.untilMs};break;case`SET_SYNC_BUSY_NOTICE`:X={...X,syncBusyNoticeUntil:e.untilMs};break;case`REGISTER_SYNC_REQUEST`:{let t={...X,outstandingSyncId:e.id,syncEpoch:e.epoch};X={...t,...Wn(t)};break}case`SHOW_STATUS_TOAST`:X={...X,toast:{kind:`status`,text:e.text}};break;case`SHOW_ALERT_TOAST`:X={...X,toast:{kind:`alert`,payload:e.alert}};break;case`HIDE_TOAST`:if(X.toast?.kind===`alert`&&X.alertToastQueue.length>0){let[e,...t]=X.alertToastQueue;X={...X,toast:{kind:`alert`,payload:e},alertToastQueue:t}}else X={...X,toast:null};break;case`INGEST_SNAPSHOT_ALERTS`:{let t=new Set(X.seenAlertIds);if(e.isFirstTick){for(let n of e.alerts)t.add(n.id);X={...X,alerts:e.alerts,seenAlertIds:t,alertsConfig:Y(e.alertsSettings),alertToastQueue:[]};break}let n=e.alerts.filter(e=>!t.has(e.id));for(let e of n)t.add(e.id);let r=X.toast,i=X.alertToastQueue;n.length>0&&(!r||r.kind!==`alert`?(r={kind:`alert`,payload:n[0]},i=[...i,...n.slice(1)]):i=[...i,...n]),X={...X,alerts:e.alerts,seenAlertIds:t,alertsConfig:Y(e.alertsSettings),alertToastQueue:i,toast:r};break}case`INGEST_SOURCE_ALERTS`:{let t=new Set(X.seenAlertIds),n=e.rateChanges??[],r=new Set(n.filter(e=>e.supersession!=null).map(e=>e.id)),i=e=>On(e)&&r.has(e.id);if(e.isFirstTick){for(let n of e.rows)for(let e of b(n))t.add(e);for(let e of n)t.add(e.id);X={...X,seenAlertIds:t,alertsConfig:Y(e.alertsSettings),alertToastQueue:[]};break}let a=e.rows.filter(e=>!t.has(y(e)));for(let e of a)for(let n of b(e))t.add(n);let o=n.filter(e=>!t.has(e.id)&&e.supersession==null);for(let e of n)t.add(e.id);let s=[...a,...o],c=X.toast,l=r.size>0?X.alertToastQueue.filter(e=>!i(e)):X.alertToastQueue;if(c?.kind===`alert`&&i(c.payload)){let[e,...t]=l;c=e==null?null:{kind:`alert`,payload:e},l=t}s.length>0&&(!c||c.kind!==`alert`?(c={kind:`alert`,payload:s[0]},l=[...l,...s.slice(1)]):l=[...l,...s]),X={...X,seenAlertIds:t,alertsConfig:Y(e.alertsSettings),alertToastQueue:l,toast:c};break}case`INGEST_DASHBOARD_PREFS`:X={...X,dashboardPrefs:e.prefs};break;case`SET_TABLE_SORT`:{let t=e.table===`history`?{...X.prefs,historySortOverrides:{...X.prefs.historySortOverrides,[e.periodKind]:e.override}}:{...X.prefs,[e.table===`trend`?`trendSortOverride`:e.table===`projects`?`projectsSortOverride`:`sessionsSortOverride`]:e.override};localStorage.setItem(K,JSON.stringify(t));let n={...X,prefs:t};X={...n,...Q(n)};break}case`CLEAR_TABLE_SORTS`:{let e={...X.prefs,trendSortOverride:null,sessionsSortOverride:null,projectsSortOverride:null,historySortOverride:null,historySortOverrides:{week:null,month:null}};localStorage.setItem(K,JSON.stringify(e));let t={...X,prefs:e};X={...t,...Q(t)};break}case`OPEN_UPDATE_MODAL`:X={...X,update:{...X.update,modalOpen:!0}};break;case`CLOSE_UPDATE_MODAL`:X={...X,update:{...X.update,modalOpen:!1}};break;case`SET_UPDATE_STATE`:X={...X,update:{...X.update,state:e.state,suppress:e.suppress}};break;case`SET_UPDATE_STATUS`:X={...X,update:{...X.update,status:e.status,errorMessage:e.errorMessage===void 0?X.update.errorMessage:e.errorMessage}};break;case`SET_UPDATE_RUN_ID`:X={...X,update:{...X.update,runId:e.runId,startedAt:e.startedAt===void 0?X.update.startedAt:e.startedAt}};break;case`APPEND_UPDATE_STREAM`:X={...X,update:{...X.update,stream:[...X.update.stream,e.event]}};break;case`RESET_UPDATE_RUN`:X={...X,update:{...X.update,status:`idle`,runId:null,stream:[],errorMessage:null,startedAt:null}};break;case`OPEN_SHARE`:case`CLOSE_SHARE`:case`OPEN_COMPOSER`:case`CLOSE_COMPOSER`:{let t=e.type===`OPEN_SHARE`?e.source??(X.openModal==null?null:X.openModalSource)??X.activeSource:X.activeSource,n=e.type===`OPEN_SHARE`?tn(X.snapshot,t,t===`all`?`codex`:t,X.accountFocus):null,r=e.type===`OPEN_SHARE`?{...e,source:t,account:e.account??n}:e,i=At({shareModal:X.shareModal,composerModal:X.composerModal},r);X={...X,...i};break}case`BASKET_ADD`:case`BASKET_REMOVE`:case`BASKET_REORDER`:case`BASKET_CLEAR`:case`BASKET_CLEAR_REJECTED`:case`BASKET_HYDRATE`:{let t=It(X.basket,e);if(t===X.basket)break;let n=t.items!==X.basket.items;X={...X,basket:t},n&&zt(t.items),e.type===`BASKET_ADD`&&t.rejectedReason===`capacity`&&(X={...X,toast:{kind:`status`,text:`Basket is full (20 sections). Remove one to add another.`}});break}case`SET_DOCTOR_AGGREGATE`:X={...X,doctor:e.doctor};break;case`OPEN_DOCTOR_MODAL`:X={...X,doctorModalOpen:!0};break;case`CLOSE_DOCTOR_MODAL`:X={...X,doctorModalOpen:!1};break;case`SET_HERO_SCROLLED`:X.heroScrolled!==e.scrolled&&(X={...X,heroScrolled:e.scrolled});break;case`INCREMENT_CHROME_OVERLAY`:X={...X,chromeOverlayOpen:X.chromeOverlayOpen+1};break;case`DECREMENT_CHROME_OVERLAY`:X={...X,chromeOverlayOpen:Math.max(0,X.chromeOverlayOpen-1)};break}Mn()}var Zn=o((e=>{var t=d(),n=Symbol.for(`react.element`),r=Symbol.for(`react.fragment`),i=Object.prototype.hasOwnProperty,a=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,o={key:!0,ref:!0,__self:!0,__source:!0};function s(e,t,r){var s,c={},l=null,u=null;for(s in r!==void 0&&(l=``+r),t.key!==void 0&&(l=``+t.key),t.ref!==void 0&&(u=t.ref),t)i.call(t,s)&&!o.hasOwnProperty(s)&&(c[s]=t[s]);if(e&&e.defaultProps)for(s in t=e.defaultProps,t)c[s]===void 0&&(c[s]=t[s]);return{$$typeof:n,type:e,key:l,ref:u,props:c,_owner:a.current}}e.Fragment=r,e.jsx=s,e.jsxs=s})),Qn=o(((e,t)=>{t.exports=Zn()})),$n=new Set,er=null,tr={overlay:0,modal:1,sessions:2,global:3};function nr(e){return e===`modal`||e===`overlay`?`any`:`dashboard`}function rr(e){if(!e||!(e instanceof Element))return!1;let t=e.tagName;if(t===`INPUT`||t===`TEXTAREA`)return!0;if(e instanceof HTMLElement){if(e.isContentEditable)return!0;let t=e.getAttribute(`contenteditable`);if(t===``||t===`true`||t===`plaintext-only`)return!0}return!1}function ir(e){return e.forEach(e=>$n.add(e)),()=>e.forEach(e=>$n.delete(e))}function ar(e){if(e.ctrlKey||e.metaKey||e.altKey||rr(e.target)&&e.key.length===1)return;let t=Nn().view,n=[...$n].sort((e,t)=>{let n=tr[e.scope]-tr[t.scope];return n===0?(t.layer??0)-(e.layer??0):n});for(let r of n){if(r.key!==e.key)continue;let n=r.view??nr(r.scope);if(!(n!==`any`&&n!==t)&&!(r.when&&!r.when())){r.action(),e.preventDefault();return}}}function or(){er||(er=ar,document.addEventListener(`keydown`,er))}function sr(e){(0,ee.useEffect)(()=>ir(e),[e])}export{ut as $,en as A,h as At,Pt as B,Sn as C,v as Ct,dn as D,se as Dt,fn as E,ae as Et,tn as F,d as Ft,Dt as G,Nt as H,Jt as I,o as It,ft as J,gt as K,V as L,s as Lt,nn as M,g as Mt,$t as N,ie as Nt,W as O,y as Ot,H as P,p as Pt,vt as Q,Qt as R,l as Rt,Kn as S,ue as St,hn as T,x as Tt,jt as U,Mt as V,Et as W,_t as X,pt as Y,bt as Z,Ln as _,A as _t,Qn as a,$e as at,Bn as b,le as bt,Xn as c,P as ct,Hn as d,de as dt,R as et,Nn as f,j as ft,Pn as g,k as gt,Rn as h,me as ht,ir as i,nt as it,qt as j,_ as jt,cn as k,m as kt,Jn as l,Ce as lt,qn as m,pe as mt,ar as n,lt as nt,Dn as o,et as ot,On as p,he as pt,mt as q,or as r,it as rt,J as s,tt as st,sr as t,dt as tt,Un as u,fe as ut,In as v,M as vt,vn as w,E as wt,zn as x,ce as xt,Fn as y,ge as yt,Lt as z};
@@ -5,9 +5,9 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
6
6
  <link rel="icon" type="image/svg+xml" href="/static/favicon.svg" />
7
7
  <title>cctally dashboard</title>
8
- <script type="module" crossorigin src="/static/assets/index-CYZ3NLqF.js"></script>
9
- <link rel="modulepreload" crossorigin href="/static/assets/useKeymap-CW7Up0Ay.js">
10
- <link rel="stylesheet" crossorigin href="/static/assets/index-BKITk1CT.css">
8
+ <script type="module" crossorigin src="/static/assets/index-BjQV-0-D.js"></script>
9
+ <link rel="modulepreload" crossorigin href="/static/assets/useKeymap-CUgEnnua.js">
10
+ <link rel="stylesheet" crossorigin href="/static/assets/index-D34eYhAc.css">
11
11
  </head>
12
12
  <body>
13
13
  <div id="root"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cctally",
3
- "version": "1.116.1",
3
+ "version": "1.117.2",
4
4
  "description": "Claude Code usage tracker and local dashboard for Pro/Max subscription limits - weekly cost-per-percent trend, quota forecasts, threshold alerts. ccusage-compatible.",
5
5
  "homepage": "https://github.com/omrikais/cctally",
6
6
  "repository": {
@@ -21,6 +21,7 @@
21
21
  "bin/_cctally_alerts.py",
22
22
  "bin/_cctally_cache.py",
23
23
  "bin/_cctally_cache_report.py",
24
+ "bin/_cctally_claude_attribution.py",
24
25
  "bin/_cctally_codex.py",
25
26
  "bin/_cctally_completion.py",
26
27
  "bin/_cctally_config.py",
@@ -86,6 +87,7 @@
86
87
  "bin/_lib_cache_report_wire.py",
87
88
  "bin/_lib_cache_writer_lock.py",
88
89
  "bin/_lib_changelog.py",
90
+ "bin/_lib_claude_attribution.py",
89
91
  "bin/_lib_clone_copy.py",
90
92
  "bin/_lib_codex_account_adoption.py",
91
93
  "bin/_lib_codex_conversation.py",
@@ -106,6 +108,7 @@
106
108
  "bin/_lib_codex_segments.py",
107
109
  "bin/_lib_codex_title_clean.py",
108
110
  "bin/_lib_codex_window_attribution.py",
111
+ "bin/_lib_codex_worker_lifecycle.py",
109
112
  "bin/_lib_conversation.py",
110
113
  "bin/_lib_conversation_anon.py",
111
114
  "bin/_lib_conversation_dispatch.py",
@@ -149,6 +152,7 @@
149
152
  "bin/_lib_quota_calibration.py",
150
153
  "bin/_lib_quota_copy.py",
151
154
  "bin/_lib_quota_ledger.py",
155
+ "bin/_lib_quota_lineage.py",
152
156
  "bin/_lib_quota_model.py",
153
157
  "bin/_lib_rate_change_delivery.py",
154
158
  "bin/_lib_readme_refresh.py",