@yansigit/opencodex 2.36.1-dev.20260829.47 → 2.36.1-dev.20260829.50

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 (112) hide show
  1. package/gui/dist/assets/{ApiKeys-DAuYQsGJ.js → ApiKeys-BLPOvK4z.js} +1 -1
  2. package/gui/dist/assets/{Claude-bN_80RT8.js → Claude-BbHv3EU7.js} +1 -1
  3. package/gui/dist/assets/{CodexSet-D3dWX_ay.js → CodexSet-hgu5hES-.js} +1 -1
  4. package/gui/dist/assets/{FileIntegrationPage-BGyzkPs2.js → FileIntegrationPage-RCmDvvsx.js} +1 -1
  5. package/gui/dist/assets/{Grok-CuaKd1TT.js → Grok-DH-ggRqA.js} +1 -1
  6. package/gui/dist/assets/{Integrations-C7NGQoxR.js → Integrations-D6m5E2-T.js} +2 -2
  7. package/gui/dist/assets/{IntegrationsOverview-DjVorYO5.js → IntegrationsOverview-C1rbnXV7.js} +1 -1
  8. package/gui/dist/assets/{Logs-B21a-9xe.js → Logs-Bqb0vYRk.js} +1 -1
  9. package/gui/dist/assets/{Models-CN7Q3kuK.js → Models-gMnzHf0c.js} +1 -1
  10. package/gui/dist/assets/{NumberStepper-BWg90tEs.js → NumberStepper-awaoZNlj.js} +1 -1
  11. package/gui/dist/assets/{Providers-CP_i-7LS.js → Providers-Bo6wuQMa.js} +1 -1
  12. package/gui/dist/assets/{RestoreDialog-3M0NqCiD.js → RestoreDialog-DX7SGWIk.js} +1 -1
  13. package/gui/dist/assets/{Startup-BVPFoP2s.js → Startup-B1htiLU9.js} +1 -1
  14. package/gui/dist/assets/{Storage-BdsG9ypz.js → Storage-B3MfosmS.js} +1 -1
  15. package/gui/dist/assets/{Subagents-CguR_bGQ.js → Subagents-L6Q2V9PZ.js} +1 -1
  16. package/gui/dist/assets/{Usage-C0kKi9_H.js → Usage-xbZnkDoj.js} +1 -1
  17. package/gui/dist/assets/{codex-stale-banner-D4gvSWnO.js → codex-stale-banner-W4FhikN7.js} +1 -1
  18. package/gui/dist/assets/{data-surface-BtO3lwam.js → data-surface-B8PX8rjm.js} +1 -1
  19. package/gui/dist/assets/{data-surface-BCycbObp.js → data-surface-BbBMp0Wj.js} +1 -1
  20. package/gui/dist/assets/{index-CU1jE0st.js → index-JEC_6CUW.js} +3 -3
  21. package/gui/dist/assets/{model-display-D2elXkuE.js → model-display-BvLWy9D5.js} +1 -1
  22. package/gui/dist/assets/{provider-payload-DfkXWE7v.js → provider-payload-BRfSsonS.js} +1 -1
  23. package/gui/dist/assets/{section-tabs-BP7gEPK6.js → section-tabs-B8sLMiz6.js} +1 -1
  24. package/gui/dist/assets/shared-DI18-uF7.js +69 -0
  25. package/gui/dist/index.html +2 -2
  26. package/package.json +3 -1
  27. package/src/adapters/base.ts +26 -0
  28. package/src/adapters/cursor/catalog.ts +541 -0
  29. package/src/adapters/cursor/cursor-errors.ts +15 -0
  30. package/src/adapters/cursor/discovery.ts +34 -41
  31. package/src/adapters/cursor/envelope-echo.ts +128 -0
  32. package/src/adapters/cursor/request-builder.ts +19 -12
  33. package/src/adapters/cursor/tool-definitions.ts +2 -1
  34. package/src/adapters/cursor/tool-result-normalize.ts +23 -31
  35. package/src/adapters/cursor.ts +21 -2
  36. package/src/adapters/exec-tool-result-normalize.ts +99 -0
  37. package/src/adapters/google-antigravity-replay.ts +71 -2
  38. package/src/adapters/google.ts +19 -4
  39. package/src/adapters/kiro-constants.ts +12 -0
  40. package/src/adapters/kiro.ts +128 -11
  41. package/src/adapters/openai-chat.ts +16 -2
  42. package/src/adapters/openai-responses.ts +15 -2
  43. package/src/adapters/tool-catalog-nudge.ts +2 -1
  44. package/src/adapters/xai-web-search.ts +10 -14
  45. package/src/claude/outbound.ts +14 -3
  46. package/src/cli/access.ts +46 -3
  47. package/src/cli/account-api.ts +93 -16
  48. package/src/cli/account-extended.ts +262 -36
  49. package/src/cli/account-main.ts +12 -12
  50. package/src/cli/account.ts +40 -10
  51. package/src/cli/agent.ts +8 -1
  52. package/src/cli/capabilities-command.ts +94 -0
  53. package/src/cli/capabilities.ts +535 -0
  54. package/src/cli/claude-desktop.ts +31 -11
  55. package/src/cli/config-command.ts +7 -3
  56. package/src/cli/dispatch.ts +195 -27
  57. package/src/cli/doctor.ts +100 -1
  58. package/src/cli/help.ts +11 -2
  59. package/src/cli/index.ts +19 -3
  60. package/src/cli/init.ts +2 -2
  61. package/src/cli/inspect.ts +230 -0
  62. package/src/cli/observe.ts +11 -3
  63. package/src/cli/provider.ts +58 -74
  64. package/src/cli/registry.ts +34 -2
  65. package/src/cli/runtime-api.ts +51 -7
  66. package/src/cli/status.ts +16 -0
  67. package/src/cli/storage.ts +234 -0
  68. package/src/cli/system-command.ts +16 -0
  69. package/src/cli/usage-report.ts +52 -2
  70. package/src/cli/version-skew.ts +46 -0
  71. package/src/codex/account-label.ts +21 -0
  72. package/src/codex/catalog/provider-fetch.ts +4 -0
  73. package/src/codex/convergence.ts +110 -15
  74. package/src/codex/transition-state.ts +12 -3
  75. package/src/compatibility/openai-responses.ts +9 -1
  76. package/src/config.ts +209 -11
  77. package/src/generated/compatibility-version.json +115 -75
  78. package/src/integrations/ownership-policy.ts +24 -5
  79. package/src/integrations/ownership.ts +36 -2
  80. package/src/integrations/state.ts +40 -7
  81. package/src/integrations/writer.ts +21 -3
  82. package/src/lib/admin-secrets.ts +24 -0
  83. package/src/lib/errors.ts +25 -1
  84. package/src/lib/service-secrets.ts +15 -0
  85. package/src/oauth/index.ts +143 -82
  86. package/src/oauth/login-cli.ts +53 -11
  87. package/src/oauth/store.ts +16 -6
  88. package/src/providers/alibaba-region-startup.ts +31 -11
  89. package/src/providers/api-keys.ts +58 -34
  90. package/src/providers/key-failover.ts +59 -46
  91. package/src/providers/label.ts +34 -1
  92. package/src/providers/model-rename-startup.ts +25 -7
  93. package/src/providers/openai-tier-startup.ts +38 -14
  94. package/src/responses/turn-termination.ts +107 -0
  95. package/src/server/index.ts +10 -0
  96. package/src/server/management/context.ts +10 -3
  97. package/src/server/management/logs-usage-routes.ts +24 -43
  98. package/src/server/management/model-routes.ts +284 -165
  99. package/src/server/management/oauth-account-routes.ts +93 -15
  100. package/src/server/management/provider-routes.ts +200 -87
  101. package/src/server/management/route-registry.ts +317 -0
  102. package/src/server/proxy-liveness.ts +27 -4
  103. package/src/server/request-log.ts +37 -17
  104. package/src/server/responses/core.ts +80 -4
  105. package/src/server/responses/policy-fallback.ts +1 -1
  106. package/src/service.ts +34 -0
  107. package/src/storage/policy-input.ts +166 -0
  108. package/src/storage/policy-job.ts +14 -4
  109. package/src/storage/policy.ts +115 -221
  110. package/src/usage/log.ts +32 -6
  111. package/src/usage/summary.ts +22 -34
  112. package/gui/dist/assets/shared-BdYGV-yJ.js +0 -69
@@ -1 +1 @@
1
- import{_ as e,c as t,h as n,m as r}from"./shared-BdYGV-yJ.js";import{F as i,G as a,H as o,I as s,J as c,K as l,L as u,N as d,S as f,W as p,d as m,h,k as g,lt as _,n as v,p as y,tt as b,yt as x}from"./index-CU1jE0st.js";import{t as S}from"./data-surface-BCycbObp.js";import{t as C}from"./data-surface-BtO3lwam.js";import{n as w,t as T}from"./section-tabs-BP7gEPK6.js";import{t as E}from"./model-display-D2elXkuE.js";import{t as D}from"./codex-stale-banner-D4gvSWnO.js";var O=e(n(),1),k=r();function A({model:e,effort:n,efforts:r,available:i,guidanceEnabled:a,syncCodexDefaults:o,nativeDefaultState:c=`disabled`,saving:l,onSave:d,prompt:p,childInstructions:m,childInstructionsSaving:h,onChildInstructionsSave:g,ultraMode:_,ultraSaving:v,onUltraModeSave:y,ultraLoadFailed:b,onUltraModeRetry:x,keepNativeChatGptOnV1:S=!1,nativeParentOverride:C={enabled:!1,model:null,active:!1},nativeParentOverrideSaving:w=!1,onNativeParentOverrideSave:T=()=>{},agentTaskRecovery:E={enabled:!1,model:null},agentTaskRecoverySaving:D=!1,onAgentTaskRecoverySave:O=()=>{},routedDelegationBridge:A={enabled:!1},routedDelegationBridgeSaving:P=!1,onRoutedDelegationBridgeSave:F=()=>{}}){let I=t(),L=(_.hintText??``).trim().length>0,R=c===`active`||c===`pending`||c===`blocked`?c:`disabled`,z=i.filter(e=>e.canonical!==!0),B=_.multiAgentV2Enabled&&!S&&C.model!==null;return(0,k.jsxs)(`div`,{className:`swi-delegation`,children:[b&&(0,k.jsxs)(`div`,{className:`swi-delegation-row`,children:[(0,k.jsxs)(`div`,{className:`setting-copy`,children:[(0,k.jsx)(`div`,{className:`font-semibold`,children:I(`sub.ultraMode`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.ultraModeLoadFail`)})]}),(0,k.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:x,children:I(`common.retry`)})]}),(0,k.jsxs)(`div`,{className:`swi-delegation-row`,children:[(0,k.jsxs)(`div`,{className:`setting-copy`,children:[(0,k.jsx)(`div`,{className:`font-semibold`,children:I(`sub.routedDelegationBridge`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.routedDelegationBridgeHint`)})]}),(0,k.jsx)(u,{on:A.enabled,onClick:()=>F(!A.enabled),disabled:P,label:I(`sub.routedDelegationBridge`)}),!_.multiAgentV2Enabled&&A.enabled&&(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.routedDelegationBridgeInactive`)})]}),(0,k.jsxs)(`div`,{className:`swi-delegation-row`,children:[(0,k.jsxs)(`div`,{className:`setting-copy`,children:[(0,k.jsx)(`div`,{className:`font-semibold`,children:I(`sub.delegation.model`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.delegation.modelHint`)})]}),(0,k.jsxs)(`div`,{className:`swi-delegation-controls`,children:[(0,k.jsx)(s,{value:e,options:[{value:``,label:I(`dash.injectionNone`)},...i.map(e=>({value:e.namespaced,label:f(`${e.provider}/${e.model}`,I)}))],onChange:e=>d({model:e||null,effort:n||null}),disabled:l,label:I(`dash.injectionLabel`),align:`right`}),e&&r.length>0&&(0,k.jsx)(s,{value:n,options:[{value:``,label:I(`dash.injectionEffortNone`)},...r.map(e=>({value:e,label:e}))],onChange:t=>d({model:e||null,effort:t||null}),disabled:l,label:I(`dash.injectionEffortLabel`),align:`right`})]})]}),(0,k.jsxs)(`div`,{className:`swi-delegation-row`,children:[(0,k.jsxs)(`div`,{className:`setting-copy`,children:[(0,k.jsx)(`div`,{className:`font-semibold`,children:I(`dash.syncCodexSubagentDefaults`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`dash.syncCodexSubagentDefaultsHint`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.nativeDefaultState.${R}`)})]}),(0,k.jsx)(`button`,{type:`button`,className:`switch ${o?`on`:``}`,onClick:()=>d({syncCodexSubagentDefaults:!o}),disabled:l||!e,"aria-label":I(`dash.syncCodexSubagentDefaults`),"aria-pressed":o,children:(0,k.jsx)(`span`,{className:`knob`})})]}),(0,k.jsxs)(`div`,{className:`swi-delegation-row`,children:[(0,k.jsxs)(`div`,{className:`setting-copy`,children:[(0,k.jsx)(`div`,{className:`font-semibold`,children:I(`dash.multiAgentGuidance`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`dash.multiAgentGuidanceHint`)})]}),(0,k.jsx)(`button`,{type:`button`,className:`switch ${a?`on`:``}`,onClick:()=>d({multiAgentGuidanceEnabled:!a}),disabled:l,"aria-label":I(`dash.multiAgentGuidance`),"aria-pressed":a,children:(0,k.jsx)(`span`,{className:`knob`})})]}),(0,k.jsxs)(`div`,{className:`swi-delegation-row`,children:[(0,k.jsxs)(`div`,{className:`setting-copy`,children:[(0,k.jsx)(`div`,{className:`font-semibold`,children:I(`sub.ultraMode`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.ultraModeHint`)})]}),(0,k.jsx)(`button`,{type:`button`,className:`switch ${L?`on`:``}`,onClick:()=>y({multiAgentModeHintText:L?null:M}),disabled:l||v||!L&&!_.multiAgentV2Enabled,"aria-label":I(`sub.ultraMode`),"aria-pressed":L,children:(0,k.jsx)(`span`,{className:`knob`})}),!_.multiAgentV2Enabled&&(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.ultraModeV2Required`)})]}),L&&(0,k.jsx)(`div`,{className:`swi-delegation-row swi-ultra-mode-editor`,children:(0,k.jsx)(j,{initialHint:_.hintText??``,disabled:l||v,onSave:y,preset:`Proactive multi-agent delegation is active. Any earlier instruction requiring an explicit user request before spawning sub-agents no longer applies. Delegate independent sub-tasks to sub-agents whenever parallel work would materially improve speed or quality — do not serialize work that can run concurrently. Each sub-agent runs in its own context and can use all available tools; prefer spawning specialists over doing everything yourself. This mode remains active until a later multi-agent mode developer message changes it.`,labels:{text:I(`sub.ultraModeText`),preset:I(`sub.ultraModePreset`),save:I(`common.save`)}},_.hintText)}),(0,k.jsxs)(`div`,{className:`swi-delegation-row`,children:[(0,k.jsxs)(`div`,{className:`setting-copy`,children:[(0,k.jsx)(`div`,{className:`font-semibold`,children:I(`sub.nativeParentOverride`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.nativeParentOverrideHint`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.nativeParentOverridePrivacyWarning`)})]}),(0,k.jsxs)(`div`,{className:`swi-delegation-controls`,children:[(0,k.jsx)(s,{value:C.model??``,options:[{value:``,label:I(`dash.injectionNone`)},...z.map(e=>({value:e.namespaced,label:f(`${e.provider}/${e.model}`,I)}))],onChange:e=>T({enabled:e?C.enabled:!1,model:e||null,active:C.active}),disabled:w,label:I(`sub.nativeParentOverrideModel`),align:`right`}),(0,k.jsx)(u,{on:C.enabled,onClick:()=>T({enabled:!C.enabled,model:C.model,active:C.active}),disabled:w||!C.enabled&&!B,label:I(`sub.nativeParentOverride`)})]}),!B&&!C.active&&(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.nativeParentOverrideV2Required`)})]}),(0,k.jsxs)(`div`,{className:`swi-delegation-row`,children:[(0,k.jsxs)(`div`,{className:`setting-copy`,children:[(0,k.jsx)(`div`,{className:`font-semibold`,children:I(`sub.agentTaskRecovery`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.agentTaskRecoveryHint`)})]}),(0,k.jsxs)(`div`,{className:`swi-delegation-controls`,children:[(0,k.jsx)(`input`,{type:`text`,className:`input input-sm`,style:{width:180,textAlign:`right`},placeholder:`gpt-5.6-luna`,value:E.model??``,onChange:e=>{let t=e.target.value.trim();O({enabled:E.enabled,model:t.length>0?t:null})},disabled:D,"aria-label":I(`sub.agentTaskRecoveryModel`)}),(0,k.jsx)(u,{on:E.enabled,onClick:()=>O({enabled:!E.enabled,model:E.model}),disabled:D,label:I(`sub.agentTaskRecovery`)})]})]}),(0,k.jsxs)(`div`,{className:`swi-delegation-row swi-prompt-editor`,children:[(0,k.jsxs)(`div`,{className:`setting-copy`,children:[(0,k.jsx)(`div`,{className:`font-semibold`,children:I(`sub.injectionPrompt`)}),(0,k.jsxs)(`div`,{className:`muted setting-hint`,children:[I(`sub.injectionPromptHint`),` `,(0,k.jsx)(`code`,{children:`{{model}}`}),` `,(0,k.jsx)(`code`,{children:`{{effort}}`}),` `,(0,k.jsx)(`code`,{children:`{{roster}}`}),` `,(0,k.jsx)(`code`,{children:`{{fallback}}`}),` `,(0,k.jsx)(`code`,{children:`{{roles}}`})]})]}),(0,k.jsx)(N,{initialValue:p,disabled:l,ariaLabel:I(`sub.injectionPrompt`),saveLabel:I(`sub.injectionPromptSave`),onSave:e=>d({prompt:e.trim()?e:null})},`prompt:${p}`)]}),(0,k.jsxs)(`div`,{className:`swi-delegation-row swi-prompt-editor`,children:[(0,k.jsxs)(`div`,{className:`setting-copy`,children:[(0,k.jsx)(`div`,{className:`font-semibold`,children:I(`sub.childInstructions`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.childInstructionsHint`)})]}),(0,k.jsx)(N,{initialValue:m,disabled:l||h,ariaLabel:I(`sub.childInstructions`),saveLabel:I(`sub.childInstructionsSave`),onSave:e=>g(e.trim()?e:null)},`child:${m}`)]})]})}function j({initialHint:e,disabled:t,onSave:n,preset:r,labels:i}){let[a,o]=(0,O.useState)(e);return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`textarea`,{className:`input swi-ultra-mode-textarea`,value:a,onChange:e=>o(e.target.value),disabled:t,rows:4,"aria-label":i.text}),(0,k.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>o(r),disabled:t,children:i.preset}),(0,k.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,onClick:()=>{a.trim().length!==0&&n({multiAgentModeHintText:a})},disabled:t||a.trim().length===0,children:i.save})]})}var M=`Proactive multi-agent delegation is active. Any earlier instruction requiring an explicit user request before spawning sub-agents no longer applies. Delegate independent sub-tasks to sub-agents whenever parallel work would materially improve speed or quality — do not serialize work that can run concurrently. Each sub-agent runs in its own context and can use all available tools; prefer spawning specialists over doing everything yourself. This mode remains active until a later multi-agent mode developer message changes it.`;function N({initialValue:e,disabled:t,ariaLabel:n,saveLabel:r,onSave:i}){let[a,o]=(0,O.useState)(e);return(0,k.jsxs)(`div`,{className:`swi-prompt-draft`,children:[(0,k.jsx)(`textarea`,{className:`input swi-ultra-mode-textarea`,value:a,onChange:e=>o(e.target.value),disabled:t,rows:4,"aria-label":n}),(0,k.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,onClick:()=>i(a),disabled:t,"aria-label":r,children:r})]})}var P=8,F=0;function I(){return F+=1,`role-${F}`}function L(e){return{key:I(),id:``,description:``,model:e,effort:``,developerInstructions:``,enabled:!0}}function R(e,t){if(e.indexOf(`/`)<=0)return!1;let n=t.find(t=>t.namespaced===e);return!n||n.provider!==`openai`}function z(e){return{id:e.id.trim(),description:e.description,model:e.model,...e.effort?{effort:e.effort}:{},developerInstructions:e.developerInstructions,enabled:e.enabled}}function B(e,t){return{key:I(),id:typeof e.id==`string`?e.id:``,description:typeof e.description==`string`?e.description:``,model:typeof e.model==`string`?e.model:t,effort:typeof e.effort==`string`?e.effort:``,developerInstructions:typeof e.developerInstructions==`string`?e.developerInstructions:``,enabled:e.enabled!==!1}}function V({apiBase:e,available:n,efforts:r,multiAgentMode:i,keepNativeChatGptOnV1:a,onStatus:o}){let c=t(),[l,p]=(0,O.useState)([]),[m,h]=(0,O.useState)(!1),[g,v]=(0,O.useState)(n),[y,b]=(0,O.useState)(r),[S,C]=(0,O.useState)(void 0),[w,T]=(0,O.useState)(!1),E=(0,O.useRef)(!1),D=g[0]?.namespaced??n[0]?.namespaced??``,A=g.length>0?g:n,j=y.length>0?y:r;(0,O.useEffect)(()=>{let t=!1;return(async()=>{try{let n=await fetch(`${e}/api/subagent-roles`),r=await d(n,c(`sub.roles.loadFail`));if(t||!r)return;p(Array.isArray(r.roles)?r.roles.map(e=>B(e,``)):[]),Array.isArray(r.available)&&v(r.available),Array.isArray(r.efforts)&&b(r.efforts);let i=typeof r.syncCodexAgentRoles==`boolean`?r.syncCodexAgentRoles:void 0,a=r.syncCodexAgentRolesEffective===!0;C(i),T(a),E.current=a}catch{t||o(!1,c(`sub.roles.loadFail`))}})(),()=>{t=!0}},[e,c,o]);let M=(e,t)=>{p(n=>n.map((n,r)=>r===e?{...n,...t}:n))},N=()=>{p(e=>e.length>=P?e:[...e,L(D)])},F=e=>{p(t=>t.filter((t,n)=>n!==e))},I=async()=>{if(!m){h(!0);try{let t={roles:l.map(z)};(S!==void 0||w!==E.current)&&(t.syncCodexAgentRoles=w);let n=await fetch(`${e}/api/subagent-roles`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}),r=await d(n,c(`sub.roles.saveFailed`));if(Array.isArray(r?.roles)&&p(r.roles.map(e=>B(e,D))),r&&typeof r.syncCodexAgentRoles==`boolean`?C(r.syncCodexAgentRoles):r&&!(`syncCodexAgentRoles`in r)&&C(void 0),r){let e=r.syncCodexAgentRolesEffective===!0;T(e),E.current=e}let i=(r?.warnings??[]).filter(e=>typeof e==`string`&&e.trim());o(!0,i.length>0?[c(`sub.roles.saved`),...i].join(` `):c(`sub.roles.saved`))}catch(e){o(!1,e instanceof Error&&e.message?e.message:c(`sub.roles.saveFailed`))}finally{h(!1)}}},V=l.length>=P,ee=i===`v2`&&!a;return(0,k.jsxs)(`div`,{className:`swi-roles`,children:[(0,k.jsx)(`p`,{className:`swi-featured-hint`,children:(0,k.jsx)(`span`,{children:c(`sub.roles.hint`)})}),l.length===0?(0,k.jsx)(`div`,{className:`swi-featured-empty`,children:c(`sub.roles.empty`)}):(0,k.jsx)(`div`,{className:`swi-roles-list`,children:l.map((e,t)=>{let n=ee&&e.enabled&&R(e.model,A);return(0,k.jsxs)(`div`,{className:`swi-role-card`,children:[(0,k.jsxs)(`div`,{className:`swi-role-grid`,children:[(0,k.jsxs)(`div`,{className:`swi-role-field`,children:[(0,k.jsx)(`span`,{className:`swi-role-label`,children:c(`sub.roles.id`)}),(0,k.jsx)(`input`,{className:`input`,type:`text`,value:e.id,onChange:e=>M(t,{id:e.currentTarget.value}),"aria-label":c(`sub.roles.id`),disabled:m})]}),(0,k.jsxs)(`div`,{className:`swi-role-field`,children:[(0,k.jsx)(`span`,{className:`swi-role-label`,children:c(`sub.roles.model`)}),(0,k.jsx)(s,{value:e.model,options:A.map(e=>({value:e.namespaced,label:f(`${e.provider}/${e.model}`,c)})),onChange:e=>M(t,{model:e}),disabled:m||A.length===0,label:c(`sub.roles.model`),align:`right`})]}),(0,k.jsxs)(`div`,{className:`swi-role-field`,children:[(0,k.jsx)(`span`,{className:`swi-role-label`,children:c(`sub.roles.effort`)}),(0,k.jsx)(s,{value:e.effort,options:[{value:``,label:c(`sub.roles.effortNone`)},...j.map(e=>({value:e,label:e}))],onChange:e=>M(t,{effort:e}),disabled:m,label:c(`sub.roles.effort`),align:`right`})]})]}),(0,k.jsxs)(`div`,{className:`swi-role-field`,children:[(0,k.jsx)(`span`,{className:`swi-role-label`,children:c(`sub.roles.description`)}),(0,k.jsx)(`input`,{className:`input`,type:`text`,value:e.description,onChange:e=>M(t,{description:e.currentTarget.value}),"aria-label":c(`sub.roles.description`),disabled:m}),(0,k.jsx)(`span`,{className:`muted setting-hint`,children:c(`sub.roles.descriptionHint`)})]}),(0,k.jsxs)(`div`,{className:`swi-role-field`,children:[(0,k.jsx)(`span`,{className:`swi-role-label`,children:c(`sub.roles.instructions`)}),(0,k.jsx)(`textarea`,{className:`input swi-role-instructions`,value:e.developerInstructions,onChange:e=>M(t,{developerInstructions:e.currentTarget.value}),"aria-label":c(`sub.roles.instructions`),rows:4,disabled:m}),(0,k.jsx)(`span`,{className:`muted setting-hint`,children:c(`sub.roles.instructionsHint`)})]}),n&&(0,k.jsx)(`div`,{className:`muted setting-hint`,role:`status`,children:c(`sub.roles.routedV2Warning`)}),(0,k.jsxs)(`div`,{className:`swi-role-footer`,children:[(0,k.jsxs)(`div`,{className:`swi-role-enable`,children:[(0,k.jsx)(`span`,{className:`swi-role-label`,children:c(`sub.roles.enabled`)}),(0,k.jsx)(u,{on:e.enabled,onClick:()=>M(t,{enabled:!e.enabled}),disabled:m,label:c(`sub.roles.enabled`)})]}),(0,k.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-icon btn-sm`,onClick:()=>F(t),disabled:m,"aria-label":c(`sub.roles.delete`,{id:e.id||String(t+1)}),style:{color:`var(--red)`},children:(0,k.jsx)(x,{})})]})]},e.key)})}),(0,k.jsxs)(`div`,{className:`swi-delegation-row`,children:[(0,k.jsxs)(`div`,{className:`setting-copy`,children:[(0,k.jsx)(`div`,{className:`font-semibold`,children:c(`sub.roles.sync`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:c(`sub.roles.syncHint`)})]}),(0,k.jsx)(u,{on:w,onClick:()=>T(e=>!e),disabled:m,label:c(`sub.roles.sync`)})]}),(0,k.jsxs)(`div`,{className:`swi-save-row`,children:[(0,k.jsxs)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:N,disabled:m||V,"aria-label":c(`sub.roles.add`),title:c(V?`sub.roles.full`:`sub.roles.add`),children:[(0,k.jsx)(_,{style:{width:14,height:14}}),c(`sub.roles.add`)]}),(0,k.jsx)(`button`,{type:`button`,className:`btn btn-primary`,onClick:()=>{I()},disabled:m,"aria-label":c(`sub.roles.save`),children:c(`sub.roles.save`)})]})]})}function ee({available:e,chosen:n,busy:r=!1,onToggle:i,onMove:s,onSave:u,delegation:d,roles:f}){let m=t(),[h,g]=(0,O.useState)(``),v=(0,O.useMemo)(()=>new Set(n),[n]),y=n.length>=5,S=(0,O.useMemo)(()=>{let t=h.trim().toLowerCase();return e.filter(e=>!t||e.toLowerCase().includes(t))},[e,h]),C=(0,O.useMemo)(()=>[{id:`roles`,label:m(`sub.roles`)},{id:`featured`,label:m(`sub.featured`),meta:`${n.length}/5`},{id:`models`,label:m(`sub.models`),meta:String(S.length)},{id:`settings`,label:m(`sub.settings`)}],[m,n.length,S.length]);return(0,k.jsxs)(`div`,{className:`subagents-workspace-shell`,children:[(0,k.jsx)(T,{scope:`subagents`,items:C,ariaLabel:m(`sub.sections`)}),(0,k.jsxs)(`div`,{className:`subagents-workspace-root`,children:[(0,k.jsxs)(`section`,{id:w(`subagents`,`roles`),className:`subagents-workspace-section`,"aria-label":m(`sub.roles`),children:[(0,k.jsx)(`div`,{className:`swi-featured-head`,children:(0,k.jsx)(`h2`,{className:`swi-featured-title`,children:m(`sub.roles`)})}),(0,k.jsx)(V,{apiBase:f.apiBase,available:d.available,efforts:d.efforts,multiAgentMode:f.multiAgentMode,keepNativeChatGptOnV1:f.keepNativeChatGptOnV1,onStatus:f.onStatus})]}),(0,k.jsxs)(`section`,{id:w(`subagents`,`featured`),className:`subagents-workspace-section`,"aria-label":m(`sub.featured`),children:[(0,k.jsxs)(`div`,{className:`swi-featured-head`,children:[(0,k.jsx)(`h2`,{className:`swi-featured-title`,children:m(`sub.featured`)}),(0,k.jsxs)(`span`,{className:`swi-featured-count`,children:[n.length,`/`,5]})]}),(0,k.jsxs)(`p`,{className:`swi-featured-hint`,children:[(0,k.jsx)(b,{width:15,height:15,"aria-hidden":`true`}),(0,k.jsx)(`span`,{children:(0,k.jsx)(o,{k:`sub.orderHint`,cmd:`spawn_agent`})})]}),n.length===0?(0,k.jsx)(`div`,{className:`swi-featured-empty`,children:m(`sub.noneSelected`)}):(0,k.jsx)(`div`,{className:`swi-featured-list`,children:n.map((e,t)=>(0,k.jsxs)(`div`,{className:`swi-featured-row`,children:[(0,k.jsx)(`span`,{className:`swi-featured-pos`,children:t+1}),(0,k.jsx)(`span`,{className:`swi-featured-name`,children:E(e)}),d.model===e&&(0,k.jsx)(`span`,{className:`badge badge-accent`,children:m(`sub.preferred`)}),(0,k.jsxs)(`span`,{className:`swi-featured-actions`,children:[d.model!==e&&(0,k.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>d.onSave({model:e,effort:d.effort||null}),disabled:r||d.saving,children:m(`sub.prefer`)}),(0,k.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-icon btn-sm`,onClick:()=>s(t,-1),disabled:r||t===0,"aria-label":m(`sub.moveUp`,{m:e}),children:(0,k.jsx)(a,{})}),(0,k.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-icon btn-sm`,onClick:()=>s(t,1),disabled:r||t===n.length-1,"aria-label":m(`sub.moveDown`,{m:e}),children:(0,k.jsx)(p,{})}),(0,k.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-icon btn-sm`,onClick:()=>i(e),disabled:r,"aria-label":m(`sub.removeAria`,{m:e}),style:{color:`var(--red)`},children:(0,k.jsx)(x,{})})]})]},e))}),(0,k.jsx)(`div`,{className:`swi-save-row`,children:(0,k.jsx)(`button`,{type:`button`,className:`btn btn-primary`,onClick:u,disabled:r,children:m(`common.save`)})})]}),(0,k.jsxs)(`section`,{id:w(`subagents`,`models`),className:`subagents-workspace-section`,"aria-label":m(`sub.models`),children:[(0,k.jsxs)(`div`,{className:`swi-featured-head`,children:[(0,k.jsx)(`h2`,{className:`swi-featured-title`,children:m(`sub.models`)}),(0,k.jsx)(`span`,{className:`swi-featured-count`,children:S.length})]}),(0,k.jsxs)(`div`,{className:`swi-picker-box`,children:[(0,k.jsx)(`div`,{className:`subagents-workspace-rail-search`,children:(0,k.jsx)(`input`,{className:`input`,value:h,onChange:e=>g(e.target.value),placeholder:m(`sub.search`),"aria-label":m(`sub.search`)})}),(0,k.jsx)(`div`,{className:`subagents-workspace-rail-list`,children:S.length===0?(0,k.jsx)(`span`,{className:`subagents-workspace-rail-empty`,children:m(`sub.noModels`)}):S.map(e=>{let t=v.has(e),a=t?n.indexOf(e)+1:null,o=!t&&(y||r);return(0,k.jsxs)(`div`,{className:`subagents-workspace-rail-row${t?` subagents-workspace-rail-row--selected`:``}`,children:[(0,k.jsxs)(`span`,{className:`subagents-workspace-rail-row-main`,children:[(0,k.jsx)(`span`,{className:`swi-rail-priority`,children:a??``}),(0,k.jsx)(l,{className:`swi-rail-icon`,"aria-hidden":`true`}),(0,k.jsx)(`span`,{className:`subagents-workspace-rail-name`,children:E(e)})]}),(0,k.jsx)(`button`,{type:`button`,className:`subagents-workspace-rail-toggle${t?` subagents-workspace-rail-toggle--on`:``}${o?` subagents-workspace-rail-toggle--disabled`:``}`,onClick:()=>{o||i(e)},disabled:o,"aria-pressed":t,"aria-label":m(t?`sub.workspace.removeFromFeatured`:`sub.workspace.addToFeatured`,{m:e}),title:t?m(`sub.workspace.removeFromFeatured`,{m:e}):y?m(`sub.workspace.featuredFull`):m(`sub.workspace.addToFeatured`,{m:e}),children:t?(0,k.jsx)(c,{style:{width:14,height:14}}):(0,k.jsx)(_,{style:{width:14,height:14}})})]},e)})})]})]}),(0,k.jsxs)(`section`,{id:w(`subagents`,`settings`),className:`subagents-workspace-section`,"aria-label":m(`sub.settings`),children:[(0,k.jsx)(`div`,{className:`swi-featured-head`,children:(0,k.jsx)(`h2`,{className:`swi-featured-title`,children:m(`sub.settings`)})}),d.model&&!v.has(d.model)&&(0,k.jsxs)(`p`,{className:`swi-featured-hint`,children:[(0,k.jsx)(b,{width:15,height:15,"aria-hidden":`true`}),m(`sub.preferredOutsideAdvertised`)]}),(0,k.jsx)(A,{model:d.model,effort:d.effort,efforts:d.efforts,available:d.available,guidanceEnabled:d.guidanceEnabled,syncCodexDefaults:d.syncCodexDefaults,nativeDefaultState:d.nativeDefaultState,saving:d.saving,onSave:d.onSave,ultraMode:d.ultraMode,ultraSaving:d.ultraSaving,onUltraModeSave:d.onUltraModeSave,ultraLoadFailed:d.ultraLoadFailed,onUltraModeRetry:d.onUltraModeRetry,nativeParentOverride:d.nativeParentOverride,nativeParentOverrideSaving:d.nativeParentOverrideSaving,onNativeParentOverrideSave:d.onNativeParentOverrideSave,agentTaskRecovery:d.agentTaskRecovery,agentTaskRecoverySaving:d.agentTaskRecoverySaving,onAgentTaskRecoverySave:d.onAgentTaskRecoverySave,routedDelegationBridge:d.routedDelegationBridge,routedDelegationBridgeSaving:d.routedDelegationBridgeSaving,onRoutedDelegationBridgeSave:d.onRoutedDelegationBridgeSave,keepNativeChatGptOnV1:f.keepNativeChatGptOnV1,prompt:d.prompt,childInstructions:d.childInstructions,childInstructionsSaving:d.childInstructionsSaving,onChildInstructionsSave:d.onChildInstructionsSave})]})]})]})}function te(e){let[t,n]=(0,O.useState)(!1),[r,i]=(0,O.useState)(!1),[a,o]=(0,O.useState)(``),[s,c]=(0,O.useState)(``),[l,u]=(0,O.useState)([]),[f,p]=(0,O.useState)([]),[h,_]=(0,O.useState)(!0),[v,y]=(0,O.useState)(!1),[b,x]=(0,O.useState)(``),[S,C]=(0,O.useState)(`disabled`),w=(0,O.useCallback)(e=>{let t=m(e);_(t.multiAgentGuidanceEnabled),y(t.syncCodexSubagentDefaults),C(e.nativeDefaultState===`active`||e.nativeDefaultState===`pending`||e.nativeDefaultState===`blocked`?e.nativeDefaultState:`disabled`),o(t.injectionModel),c(t.injectionEffort),`prompt`in e&&x(typeof e.prompt==`string`?e.prompt:``),Array.isArray(e.efforts)&&u(e.efforts),Array.isArray(e.available)&&p(e.available)},[]),T=(0,O.useCallback)(async()=>{try{let t=await fetch(`${e}/api/injection-model`);w(await g(t))}catch{}},[e,w]);return(0,O.useEffect)(()=>{let t=!1;return(async()=>{try{let n=await fetch(`${e}/api/injection-model`),r=await g(n);t||w(r)}catch{}finally{t||n(!0)}})(),()=>{t=!0}},[e,w]),{loaded:t,saving:r,model:a,effort:s,efforts:l,available:f,prompt:b,guidanceEnabled:h,syncCodexDefaults:v,nativeDefaultState:S,refresh:T,save:(0,O.useCallback)(async t=>{if(r)return{ok:!1,error:``};i(!0);try{let n=await fetch(`${e}/api/injection-model`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});await d(n,`injection save failed`);let r=await fetch(`${e}/api/injection-model`);return w(await g(r)),{ok:!0}}catch(e){return{ok:!1,error:e instanceof Error&&e.message?e.message:`injection save failed`}}finally{i(!1)}},[e,w,r])}}function ne(e){return y(e)}function re(e){let t=e?.catalogState?.state;return t===`fresh`||t===`stale`||t===`not_running`?t:`unknown`}function H({apiBase:e}){let n=t(),r=`ocx.subagents.v1:${e}`,a=ne(r),[o,s]=(0,O.useState)(()=>a?.chosen??[]),[c,l]=(0,O.useState)(``),[u,f]=(0,O.useState)(!1),[p,m]=(0,O.useState)(!1),g=(0,O.useRef)(!1),_=(0,O.useRef)(0),y=te(e),[b,x]=(0,O.useState)(()=>re(a)),[w,T]=(0,O.useState)({enabled:!1,hintText:null,multiAgentV2Enabled:!1}),[E,A]=(0,O.useState)({enabled:!1,model:null,active:!1}),[j,M]=(0,O.useState)({enabled:!1,model:null}),[N,P]=(0,O.useState)({enabled:!1}),[F,I]=(0,O.useState)(`default`),[L,R]=(0,O.useState)(!1),[z,B]=(0,O.useState)(``),[V,H]=(0,O.useState)(!1),[ie,ae]=(0,O.useState)(!1),[oe,se]=(0,O.useState)(!1),U=(0,O.useRef)(!1),[ce,W]=(0,O.useState)(!1),G=(0,O.useRef)(!1),K=(0,O.useRef)(!1),[le,ue]=(0,O.useState)(!1),[de,q]=(0,O.useState)(!1),J=(0,O.useRef)(0),Y=(0,O.useRef)(e);(0,O.useEffect)(()=>{Y.current=e,J.current++},[e]);let X=(0,O.useCallback)(async t=>{if(Y.current!==e)return!1;let r=++J.current,i=await fetch(`${e}/api/v2`,{signal:t}),a=await d(i,n(`sub.ultraModeLoadFail`));if(!a||t?.aborted||r!==J.current||Y.current!==e)return!1;q(!1),I(a.multiAgentMode===`v1`||a.multiAgentMode===`v2`?a.multiAgentMode:`default`),R(a.keepNativeChatGptOnV1===!0),B(typeof a.subagentDeveloperInstructions==`string`?a.subagentDeveloperInstructions:``),T({enabled:a.enabled??!1,hintText:a.multiAgentModeHintText??null,multiAgentV2Enabled:a.enabled===!0&&a.multiAgentMode===`v2`});let o=a.v2NativeParentOverride;A({enabled:o?.enabled===!0,model:typeof o?.model==`string`?o.model:null,active:o?.active===!0});let s=a.agentTaskRecovery;return M({enabled:s?.enabled===!0,model:typeof s?.model==`string`?s.model:null}),P({enabled:a.v2RoutedDelegationBridge===!0}),!0},[e,n]);(0,O.useEffect)(()=>{let e=new AbortController;return(async()=>{await X(e.signal)})().catch(()=>{e.signal.aborted||(f(!1),q(!0),l(n(`sub.ultraModeLoadFail`)))}),()=>{e.abort()}},[X,n]);let fe=async t=>{if(ie)return;let r=e;ae(!0),l(``);try{let i=await fetch(`${e}/api/v2`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(await d(i,n(`sub.ultraModeSaveFail`)),Y.current!==r||!await X())return;f(!0),l(n(`sub.ultraModeSaved`))}catch(e){if(Y.current!==r)return;f(!1),l(e instanceof Error&&e.message?e.message:n(`sub.networkError`))}finally{ae(!1)}},pe=async t=>{if(U.current)return;U.current=!0;let r=e;se(!0),l(``);try{let i=await fetch(`${e}/api/v2`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({v2NativeParentOverride:{enabled:t.enabled,model:t.model}})});if(await d(i,n(`sub.nativeParentOverrideSaveFail`)),Y.current!==r||!await X())return;f(!0),l(n(`sub.nativeParentOverrideSaved`))}catch(e){if(Y.current!==r)return;f(!1),l(e instanceof Error&&e.message?e.message:n(`sub.networkError`))}finally{U.current=!1,se(!1)}},me=async t=>{if(G.current)return;G.current=!0;let r=e;W(!0),l(``);try{let i=await fetch(`${e}/api/v2`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({agentTaskRecovery:{enabled:t.enabled,model:t.model}})});if(await d(i,n(`sub.agentTaskRecoverySaveFail`)),Y.current!==r||!await X())return;f(!0),l(n(`sub.agentTaskRecoverySaved`))}catch(e){if(Y.current!==r)return;f(!1),l(e instanceof Error&&e.message?e.message:n(`sub.networkError`))}finally{G.current=!1,W(!1)}},he=async t=>{if(K.current)return;K.current=!0;let r=e;ue(!0),l(``);try{let i=await fetch(`${e}/api/v2`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({v2RoutedDelegationBridge:t})});if(await d(i,n(`sub.routedDelegationBridgeSaveFail`)),Y.current!==r||!await X())return;f(!0),l(n(`sub.routedDelegationBridgeSaved`))}catch(e){if(Y.current!==r)return;f(!1),l(e instanceof Error&&e.message?e.message:n(`sub.networkError`))}finally{K.current=!1,ue(!1)}},ge=async t=>{if(V)return;let r=e;H(!0),l(``);try{let i=await fetch(`${e}/api/v2`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({subagentDeveloperInstructions:t})});if(await d(i,n(`sub.childInstructionsSaveFailed`)),Y.current!==r||!await X())return;f(!0),l(n(`sub.childInstructionsSaved`))}catch(e){if(Y.current!==r)return;f(!1),l(e instanceof Error&&e.message?e.message:n(`sub.networkError`))}finally{H(!1)}},_e=(0,O.useCallback)(async()=>{try{if(!await X())return;f(!1),l(e=>e===n(`sub.ultraModeLoadFail`)?``:e)}catch{f(!1),q(!0),l(n(`sub.ultraModeLoadFail`))}},[X,n]),ve=(0,O.useCallback)(async t=>{let i=++_.current,a=await fetch(`${e}/api/subagent-models`,{signal:t}),o=await d(a,n(`sub.loadFail`));if(!o)throw Error(n(`sub.loadFail`));let c=o.available??[],l=new Set(c),u={available:c,chosen:(o.chosen??[]).filter(e=>l.has(e)),catalogState:o.catalogState};return i===_.current?(s(u.chosen),x(re(u)),h(r,u),u):u},[e,r,n]),Z=S(r,[e],ve,{isEmpty:()=>!1,initialData:a??void 0}),{state:Q}=Z,$=Z.refresh,ye=Q.data??a,be=ye?.available??[],xe=y.refresh,Se=(0,O.useCallback)(()=>{$(),xe()},[xe,$]),Ce=v(e,{onSettled:Se}),we=e=>{p||(l(``),s(t=>t.includes(e)?t.filter(t=>t!==e):t.length>=5?t:[...t,e]))},Te=(e,t)=>{p||s(n=>{let r=[...n],i=e+t;return i<0||i>=r.length?n:([r[e],r[i]]=[r[i],r[e]],r)})},Ee=(0,O.useCallback)((e,t)=>{f(e),l(t)},[]),De=async()=>{if(p||g.current)return;g.current=!0;let t=_.current;m(!0),l(``);try{let i=await fetch(`${e}/api/subagent-models`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({models:o})}),a=await d(i,n(`sub.saveFailed`)),c=a?.applied??o;a?.applied&&s(a.applied),t===_.current&&h(r,{available:be,chosen:c,catalogState:{state:b}}),f(!0),l(n(`sub.saved`,{n:c.length,cmd:`ocx sync`}))}catch(e){f(!1),l(e instanceof Error&&e.message?e.message:n(`sub.networkError`))}finally{g.current=!1,m(!1)}};if(Q.showSkeleton&&!ye)return(0,k.jsx)(C,{label:n(`sub.loading`),rows:4});if(Q.kind===`failed-cold`){let e=Q.error instanceof Error?Q.error.message:n(`sub.loadFail`);return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(i,{tone:`err`,children:e}),(0,k.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>$(),children:n(`common.retry`)})]})}return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`div`,{className:`page-head`,children:(0,k.jsx)(`h2`,{children:n(`nav.subagents`)})}),c&&(0,k.jsx)(i,{tone:u?`ok`:`err`,children:c}),Q.showError&&(0,k.jsx)(i,{tone:`err`,children:n(`sub.loadFail`)}),(0,k.jsxs)(`p`,{className:`page-sub`,children:[n(`sub.catalogState.label`),`: `,n(`sub.catalogState.${b}`)]}),(0,k.jsx)(D,{state:b,controller:Ce}),(0,k.jsx)(ee,{available:be,chosen:o,busy:p,onToggle:we,onMove:Te,onSave:()=>{De()},delegation:{model:y.model,effort:y.effort,efforts:y.efforts,available:y.available,guidanceEnabled:y.guidanceEnabled,syncCodexDefaults:y.syncCodexDefaults,nativeDefaultState:y.nativeDefaultState,saving:y.saving,onSave:e=>{(async()=>{let t=await y.save(e);`prompt`in e&&(t.ok?(f(!0),l(n(`sub.injectionPromptSaved`))):(f(!1),l(t.error||n(`sub.injectionPromptSaveFailed`))))})()},ultraMode:w,ultraSaving:ie,onUltraModeSave:e=>{fe(e)},ultraLoadFailed:de,onUltraModeRetry:()=>{_e()},nativeParentOverride:E,nativeParentOverrideSaving:oe,onNativeParentOverrideSave:e=>{pe(e)},agentTaskRecovery:j,agentTaskRecoverySaving:ce,onAgentTaskRecoverySave:e=>{me(e)},routedDelegationBridge:N,routedDelegationBridgeSaving:le,onRoutedDelegationBridgeSave:e=>{he(e)},prompt:y.prompt,childInstructions:z,childInstructionsSaving:V,onChildInstructionsSave:e=>{ge(e)}},roles:{apiBase:e,multiAgentMode:F,keepNativeChatGptOnV1:L,onStatus:Ee}})]})}export{H as default};
1
+ import{_ as e,c as t,h as n,m as r}from"./shared-DI18-uF7.js";import{F as i,G as a,H as o,I as s,J as c,K as l,L as u,N as d,S as f,W as p,d as m,h,k as g,lt as _,n as v,p as y,tt as b,yt as x}from"./index-JEC_6CUW.js";import{t as S}from"./data-surface-BbBMp0Wj.js";import{t as C}from"./data-surface-B8PX8rjm.js";import{n as w,t as T}from"./section-tabs-B8sLMiz6.js";import{t as E}from"./model-display-BvLWy9D5.js";import{t as D}from"./codex-stale-banner-W4FhikN7.js";var O=e(n(),1),k=r();function A({model:e,effort:n,efforts:r,available:i,guidanceEnabled:a,syncCodexDefaults:o,nativeDefaultState:c=`disabled`,saving:l,onSave:d,prompt:p,childInstructions:m,childInstructionsSaving:h,onChildInstructionsSave:g,ultraMode:_,ultraSaving:v,onUltraModeSave:y,ultraLoadFailed:b,onUltraModeRetry:x,keepNativeChatGptOnV1:S=!1,nativeParentOverride:C={enabled:!1,model:null,active:!1},nativeParentOverrideSaving:w=!1,onNativeParentOverrideSave:T=()=>{},agentTaskRecovery:E={enabled:!1,model:null},agentTaskRecoverySaving:D=!1,onAgentTaskRecoverySave:O=()=>{},routedDelegationBridge:A={enabled:!1},routedDelegationBridgeSaving:P=!1,onRoutedDelegationBridgeSave:F=()=>{}}){let I=t(),L=(_.hintText??``).trim().length>0,R=c===`active`||c===`pending`||c===`blocked`?c:`disabled`,z=i.filter(e=>e.canonical!==!0),B=_.multiAgentV2Enabled&&!S&&C.model!==null;return(0,k.jsxs)(`div`,{className:`swi-delegation`,children:[b&&(0,k.jsxs)(`div`,{className:`swi-delegation-row`,children:[(0,k.jsxs)(`div`,{className:`setting-copy`,children:[(0,k.jsx)(`div`,{className:`font-semibold`,children:I(`sub.ultraMode`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.ultraModeLoadFail`)})]}),(0,k.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:x,children:I(`common.retry`)})]}),(0,k.jsxs)(`div`,{className:`swi-delegation-row`,children:[(0,k.jsxs)(`div`,{className:`setting-copy`,children:[(0,k.jsx)(`div`,{className:`font-semibold`,children:I(`sub.routedDelegationBridge`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.routedDelegationBridgeHint`)})]}),(0,k.jsx)(u,{on:A.enabled,onClick:()=>F(!A.enabled),disabled:P,label:I(`sub.routedDelegationBridge`)}),!_.multiAgentV2Enabled&&A.enabled&&(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.routedDelegationBridgeInactive`)})]}),(0,k.jsxs)(`div`,{className:`swi-delegation-row`,children:[(0,k.jsxs)(`div`,{className:`setting-copy`,children:[(0,k.jsx)(`div`,{className:`font-semibold`,children:I(`sub.delegation.model`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.delegation.modelHint`)})]}),(0,k.jsxs)(`div`,{className:`swi-delegation-controls`,children:[(0,k.jsx)(s,{value:e,options:[{value:``,label:I(`dash.injectionNone`)},...i.map(e=>({value:e.namespaced,label:f(`${e.provider}/${e.model}`,I)}))],onChange:e=>d({model:e||null,effort:n||null}),disabled:l,label:I(`dash.injectionLabel`),align:`right`}),e&&r.length>0&&(0,k.jsx)(s,{value:n,options:[{value:``,label:I(`dash.injectionEffortNone`)},...r.map(e=>({value:e,label:e}))],onChange:t=>d({model:e||null,effort:t||null}),disabled:l,label:I(`dash.injectionEffortLabel`),align:`right`})]})]}),(0,k.jsxs)(`div`,{className:`swi-delegation-row`,children:[(0,k.jsxs)(`div`,{className:`setting-copy`,children:[(0,k.jsx)(`div`,{className:`font-semibold`,children:I(`dash.syncCodexSubagentDefaults`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`dash.syncCodexSubagentDefaultsHint`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.nativeDefaultState.${R}`)})]}),(0,k.jsx)(`button`,{type:`button`,className:`switch ${o?`on`:``}`,onClick:()=>d({syncCodexSubagentDefaults:!o}),disabled:l||!e,"aria-label":I(`dash.syncCodexSubagentDefaults`),"aria-pressed":o,children:(0,k.jsx)(`span`,{className:`knob`})})]}),(0,k.jsxs)(`div`,{className:`swi-delegation-row`,children:[(0,k.jsxs)(`div`,{className:`setting-copy`,children:[(0,k.jsx)(`div`,{className:`font-semibold`,children:I(`dash.multiAgentGuidance`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`dash.multiAgentGuidanceHint`)})]}),(0,k.jsx)(`button`,{type:`button`,className:`switch ${a?`on`:``}`,onClick:()=>d({multiAgentGuidanceEnabled:!a}),disabled:l,"aria-label":I(`dash.multiAgentGuidance`),"aria-pressed":a,children:(0,k.jsx)(`span`,{className:`knob`})})]}),(0,k.jsxs)(`div`,{className:`swi-delegation-row`,children:[(0,k.jsxs)(`div`,{className:`setting-copy`,children:[(0,k.jsx)(`div`,{className:`font-semibold`,children:I(`sub.ultraMode`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.ultraModeHint`)})]}),(0,k.jsx)(`button`,{type:`button`,className:`switch ${L?`on`:``}`,onClick:()=>y({multiAgentModeHintText:L?null:M}),disabled:l||v||!L&&!_.multiAgentV2Enabled,"aria-label":I(`sub.ultraMode`),"aria-pressed":L,children:(0,k.jsx)(`span`,{className:`knob`})}),!_.multiAgentV2Enabled&&(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.ultraModeV2Required`)})]}),L&&(0,k.jsx)(`div`,{className:`swi-delegation-row swi-ultra-mode-editor`,children:(0,k.jsx)(j,{initialHint:_.hintText??``,disabled:l||v,onSave:y,preset:`Proactive multi-agent delegation is active. Any earlier instruction requiring an explicit user request before spawning sub-agents no longer applies. Delegate independent sub-tasks to sub-agents whenever parallel work would materially improve speed or quality — do not serialize work that can run concurrently. Each sub-agent runs in its own context and can use all available tools; prefer spawning specialists over doing everything yourself. This mode remains active until a later multi-agent mode developer message changes it.`,labels:{text:I(`sub.ultraModeText`),preset:I(`sub.ultraModePreset`),save:I(`common.save`)}},_.hintText)}),(0,k.jsxs)(`div`,{className:`swi-delegation-row`,children:[(0,k.jsxs)(`div`,{className:`setting-copy`,children:[(0,k.jsx)(`div`,{className:`font-semibold`,children:I(`sub.nativeParentOverride`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.nativeParentOverrideHint`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.nativeParentOverridePrivacyWarning`)})]}),(0,k.jsxs)(`div`,{className:`swi-delegation-controls`,children:[(0,k.jsx)(s,{value:C.model??``,options:[{value:``,label:I(`dash.injectionNone`)},...z.map(e=>({value:e.namespaced,label:f(`${e.provider}/${e.model}`,I)}))],onChange:e=>T({enabled:e?C.enabled:!1,model:e||null,active:C.active}),disabled:w,label:I(`sub.nativeParentOverrideModel`),align:`right`}),(0,k.jsx)(u,{on:C.enabled,onClick:()=>T({enabled:!C.enabled,model:C.model,active:C.active}),disabled:w||!C.enabled&&!B,label:I(`sub.nativeParentOverride`)})]}),!B&&!C.active&&(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.nativeParentOverrideV2Required`)})]}),(0,k.jsxs)(`div`,{className:`swi-delegation-row`,children:[(0,k.jsxs)(`div`,{className:`setting-copy`,children:[(0,k.jsx)(`div`,{className:`font-semibold`,children:I(`sub.agentTaskRecovery`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.agentTaskRecoveryHint`)})]}),(0,k.jsxs)(`div`,{className:`swi-delegation-controls`,children:[(0,k.jsx)(`input`,{type:`text`,className:`input input-sm`,style:{width:180,textAlign:`right`},placeholder:`gpt-5.6-luna`,value:E.model??``,onChange:e=>{let t=e.target.value.trim();O({enabled:E.enabled,model:t.length>0?t:null})},disabled:D,"aria-label":I(`sub.agentTaskRecoveryModel`)}),(0,k.jsx)(u,{on:E.enabled,onClick:()=>O({enabled:!E.enabled,model:E.model}),disabled:D,label:I(`sub.agentTaskRecovery`)})]})]}),(0,k.jsxs)(`div`,{className:`swi-delegation-row swi-prompt-editor`,children:[(0,k.jsxs)(`div`,{className:`setting-copy`,children:[(0,k.jsx)(`div`,{className:`font-semibold`,children:I(`sub.injectionPrompt`)}),(0,k.jsxs)(`div`,{className:`muted setting-hint`,children:[I(`sub.injectionPromptHint`),` `,(0,k.jsx)(`code`,{children:`{{model}}`}),` `,(0,k.jsx)(`code`,{children:`{{effort}}`}),` `,(0,k.jsx)(`code`,{children:`{{roster}}`}),` `,(0,k.jsx)(`code`,{children:`{{fallback}}`}),` `,(0,k.jsx)(`code`,{children:`{{roles}}`})]})]}),(0,k.jsx)(N,{initialValue:p,disabled:l,ariaLabel:I(`sub.injectionPrompt`),saveLabel:I(`sub.injectionPromptSave`),onSave:e=>d({prompt:e.trim()?e:null})},`prompt:${p}`)]}),(0,k.jsxs)(`div`,{className:`swi-delegation-row swi-prompt-editor`,children:[(0,k.jsxs)(`div`,{className:`setting-copy`,children:[(0,k.jsx)(`div`,{className:`font-semibold`,children:I(`sub.childInstructions`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:I(`sub.childInstructionsHint`)})]}),(0,k.jsx)(N,{initialValue:m,disabled:l||h,ariaLabel:I(`sub.childInstructions`),saveLabel:I(`sub.childInstructionsSave`),onSave:e=>g(e.trim()?e:null)},`child:${m}`)]})]})}function j({initialHint:e,disabled:t,onSave:n,preset:r,labels:i}){let[a,o]=(0,O.useState)(e);return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`textarea`,{className:`input swi-ultra-mode-textarea`,value:a,onChange:e=>o(e.target.value),disabled:t,rows:4,"aria-label":i.text}),(0,k.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>o(r),disabled:t,children:i.preset}),(0,k.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,onClick:()=>{a.trim().length!==0&&n({multiAgentModeHintText:a})},disabled:t||a.trim().length===0,children:i.save})]})}var M=`Proactive multi-agent delegation is active. Any earlier instruction requiring an explicit user request before spawning sub-agents no longer applies. Delegate independent sub-tasks to sub-agents whenever parallel work would materially improve speed or quality — do not serialize work that can run concurrently. Each sub-agent runs in its own context and can use all available tools; prefer spawning specialists over doing everything yourself. This mode remains active until a later multi-agent mode developer message changes it.`;function N({initialValue:e,disabled:t,ariaLabel:n,saveLabel:r,onSave:i}){let[a,o]=(0,O.useState)(e);return(0,k.jsxs)(`div`,{className:`swi-prompt-draft`,children:[(0,k.jsx)(`textarea`,{className:`input swi-ultra-mode-textarea`,value:a,onChange:e=>o(e.target.value),disabled:t,rows:4,"aria-label":n}),(0,k.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,onClick:()=>i(a),disabled:t,"aria-label":r,children:r})]})}var P=8,F=0;function I(){return F+=1,`role-${F}`}function L(e){return{key:I(),id:``,description:``,model:e,effort:``,developerInstructions:``,enabled:!0}}function R(e,t){if(e.indexOf(`/`)<=0)return!1;let n=t.find(t=>t.namespaced===e);return!n||n.provider!==`openai`}function z(e){return{id:e.id.trim(),description:e.description,model:e.model,...e.effort?{effort:e.effort}:{},developerInstructions:e.developerInstructions,enabled:e.enabled}}function B(e,t){return{key:I(),id:typeof e.id==`string`?e.id:``,description:typeof e.description==`string`?e.description:``,model:typeof e.model==`string`?e.model:t,effort:typeof e.effort==`string`?e.effort:``,developerInstructions:typeof e.developerInstructions==`string`?e.developerInstructions:``,enabled:e.enabled!==!1}}function V({apiBase:e,available:n,efforts:r,multiAgentMode:i,keepNativeChatGptOnV1:a,onStatus:o}){let c=t(),[l,p]=(0,O.useState)([]),[m,h]=(0,O.useState)(!1),[g,v]=(0,O.useState)(n),[y,b]=(0,O.useState)(r),[S,C]=(0,O.useState)(void 0),[w,T]=(0,O.useState)(!1),E=(0,O.useRef)(!1),D=g[0]?.namespaced??n[0]?.namespaced??``,A=g.length>0?g:n,j=y.length>0?y:r;(0,O.useEffect)(()=>{let t=!1;return(async()=>{try{let n=await fetch(`${e}/api/subagent-roles`),r=await d(n,c(`sub.roles.loadFail`));if(t||!r)return;p(Array.isArray(r.roles)?r.roles.map(e=>B(e,``)):[]),Array.isArray(r.available)&&v(r.available),Array.isArray(r.efforts)&&b(r.efforts);let i=typeof r.syncCodexAgentRoles==`boolean`?r.syncCodexAgentRoles:void 0,a=r.syncCodexAgentRolesEffective===!0;C(i),T(a),E.current=a}catch{t||o(!1,c(`sub.roles.loadFail`))}})(),()=>{t=!0}},[e,c,o]);let M=(e,t)=>{p(n=>n.map((n,r)=>r===e?{...n,...t}:n))},N=()=>{p(e=>e.length>=P?e:[...e,L(D)])},F=e=>{p(t=>t.filter((t,n)=>n!==e))},I=async()=>{if(!m){h(!0);try{let t={roles:l.map(z)};(S!==void 0||w!==E.current)&&(t.syncCodexAgentRoles=w);let n=await fetch(`${e}/api/subagent-roles`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}),r=await d(n,c(`sub.roles.saveFailed`));if(Array.isArray(r?.roles)&&p(r.roles.map(e=>B(e,D))),r&&typeof r.syncCodexAgentRoles==`boolean`?C(r.syncCodexAgentRoles):r&&!(`syncCodexAgentRoles`in r)&&C(void 0),r){let e=r.syncCodexAgentRolesEffective===!0;T(e),E.current=e}let i=(r?.warnings??[]).filter(e=>typeof e==`string`&&e.trim());o(!0,i.length>0?[c(`sub.roles.saved`),...i].join(` `):c(`sub.roles.saved`))}catch(e){o(!1,e instanceof Error&&e.message?e.message:c(`sub.roles.saveFailed`))}finally{h(!1)}}},V=l.length>=P,ee=i===`v2`&&!a;return(0,k.jsxs)(`div`,{className:`swi-roles`,children:[(0,k.jsx)(`p`,{className:`swi-featured-hint`,children:(0,k.jsx)(`span`,{children:c(`sub.roles.hint`)})}),l.length===0?(0,k.jsx)(`div`,{className:`swi-featured-empty`,children:c(`sub.roles.empty`)}):(0,k.jsx)(`div`,{className:`swi-roles-list`,children:l.map((e,t)=>{let n=ee&&e.enabled&&R(e.model,A);return(0,k.jsxs)(`div`,{className:`swi-role-card`,children:[(0,k.jsxs)(`div`,{className:`swi-role-grid`,children:[(0,k.jsxs)(`div`,{className:`swi-role-field`,children:[(0,k.jsx)(`span`,{className:`swi-role-label`,children:c(`sub.roles.id`)}),(0,k.jsx)(`input`,{className:`input`,type:`text`,value:e.id,onChange:e=>M(t,{id:e.currentTarget.value}),"aria-label":c(`sub.roles.id`),disabled:m})]}),(0,k.jsxs)(`div`,{className:`swi-role-field`,children:[(0,k.jsx)(`span`,{className:`swi-role-label`,children:c(`sub.roles.model`)}),(0,k.jsx)(s,{value:e.model,options:A.map(e=>({value:e.namespaced,label:f(`${e.provider}/${e.model}`,c)})),onChange:e=>M(t,{model:e}),disabled:m||A.length===0,label:c(`sub.roles.model`),align:`right`})]}),(0,k.jsxs)(`div`,{className:`swi-role-field`,children:[(0,k.jsx)(`span`,{className:`swi-role-label`,children:c(`sub.roles.effort`)}),(0,k.jsx)(s,{value:e.effort,options:[{value:``,label:c(`sub.roles.effortNone`)},...j.map(e=>({value:e,label:e}))],onChange:e=>M(t,{effort:e}),disabled:m,label:c(`sub.roles.effort`),align:`right`})]})]}),(0,k.jsxs)(`div`,{className:`swi-role-field`,children:[(0,k.jsx)(`span`,{className:`swi-role-label`,children:c(`sub.roles.description`)}),(0,k.jsx)(`input`,{className:`input`,type:`text`,value:e.description,onChange:e=>M(t,{description:e.currentTarget.value}),"aria-label":c(`sub.roles.description`),disabled:m}),(0,k.jsx)(`span`,{className:`muted setting-hint`,children:c(`sub.roles.descriptionHint`)})]}),(0,k.jsxs)(`div`,{className:`swi-role-field`,children:[(0,k.jsx)(`span`,{className:`swi-role-label`,children:c(`sub.roles.instructions`)}),(0,k.jsx)(`textarea`,{className:`input swi-role-instructions`,value:e.developerInstructions,onChange:e=>M(t,{developerInstructions:e.currentTarget.value}),"aria-label":c(`sub.roles.instructions`),rows:4,disabled:m}),(0,k.jsx)(`span`,{className:`muted setting-hint`,children:c(`sub.roles.instructionsHint`)})]}),n&&(0,k.jsx)(`div`,{className:`muted setting-hint`,role:`status`,children:c(`sub.roles.routedV2Warning`)}),(0,k.jsxs)(`div`,{className:`swi-role-footer`,children:[(0,k.jsxs)(`div`,{className:`swi-role-enable`,children:[(0,k.jsx)(`span`,{className:`swi-role-label`,children:c(`sub.roles.enabled`)}),(0,k.jsx)(u,{on:e.enabled,onClick:()=>M(t,{enabled:!e.enabled}),disabled:m,label:c(`sub.roles.enabled`)})]}),(0,k.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-icon btn-sm`,onClick:()=>F(t),disabled:m,"aria-label":c(`sub.roles.delete`,{id:e.id||String(t+1)}),style:{color:`var(--red)`},children:(0,k.jsx)(x,{})})]})]},e.key)})}),(0,k.jsxs)(`div`,{className:`swi-delegation-row`,children:[(0,k.jsxs)(`div`,{className:`setting-copy`,children:[(0,k.jsx)(`div`,{className:`font-semibold`,children:c(`sub.roles.sync`)}),(0,k.jsx)(`div`,{className:`muted setting-hint`,children:c(`sub.roles.syncHint`)})]}),(0,k.jsx)(u,{on:w,onClick:()=>T(e=>!e),disabled:m,label:c(`sub.roles.sync`)})]}),(0,k.jsxs)(`div`,{className:`swi-save-row`,children:[(0,k.jsxs)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:N,disabled:m||V,"aria-label":c(`sub.roles.add`),title:c(V?`sub.roles.full`:`sub.roles.add`),children:[(0,k.jsx)(_,{style:{width:14,height:14}}),c(`sub.roles.add`)]}),(0,k.jsx)(`button`,{type:`button`,className:`btn btn-primary`,onClick:()=>{I()},disabled:m,"aria-label":c(`sub.roles.save`),children:c(`sub.roles.save`)})]})]})}function ee({available:e,chosen:n,busy:r=!1,onToggle:i,onMove:s,onSave:u,delegation:d,roles:f}){let m=t(),[h,g]=(0,O.useState)(``),v=(0,O.useMemo)(()=>new Set(n),[n]),y=n.length>=5,S=(0,O.useMemo)(()=>{let t=h.trim().toLowerCase();return e.filter(e=>!t||e.toLowerCase().includes(t))},[e,h]),C=(0,O.useMemo)(()=>[{id:`roles`,label:m(`sub.roles`)},{id:`featured`,label:m(`sub.featured`),meta:`${n.length}/5`},{id:`models`,label:m(`sub.models`),meta:String(S.length)},{id:`settings`,label:m(`sub.settings`)}],[m,n.length,S.length]);return(0,k.jsxs)(`div`,{className:`subagents-workspace-shell`,children:[(0,k.jsx)(T,{scope:`subagents`,items:C,ariaLabel:m(`sub.sections`)}),(0,k.jsxs)(`div`,{className:`subagents-workspace-root`,children:[(0,k.jsxs)(`section`,{id:w(`subagents`,`roles`),className:`subagents-workspace-section`,"aria-label":m(`sub.roles`),children:[(0,k.jsx)(`div`,{className:`swi-featured-head`,children:(0,k.jsx)(`h2`,{className:`swi-featured-title`,children:m(`sub.roles`)})}),(0,k.jsx)(V,{apiBase:f.apiBase,available:d.available,efforts:d.efforts,multiAgentMode:f.multiAgentMode,keepNativeChatGptOnV1:f.keepNativeChatGptOnV1,onStatus:f.onStatus})]}),(0,k.jsxs)(`section`,{id:w(`subagents`,`featured`),className:`subagents-workspace-section`,"aria-label":m(`sub.featured`),children:[(0,k.jsxs)(`div`,{className:`swi-featured-head`,children:[(0,k.jsx)(`h2`,{className:`swi-featured-title`,children:m(`sub.featured`)}),(0,k.jsxs)(`span`,{className:`swi-featured-count`,children:[n.length,`/`,5]})]}),(0,k.jsxs)(`p`,{className:`swi-featured-hint`,children:[(0,k.jsx)(b,{width:15,height:15,"aria-hidden":`true`}),(0,k.jsx)(`span`,{children:(0,k.jsx)(o,{k:`sub.orderHint`,cmd:`spawn_agent`})})]}),n.length===0?(0,k.jsx)(`div`,{className:`swi-featured-empty`,children:m(`sub.noneSelected`)}):(0,k.jsx)(`div`,{className:`swi-featured-list`,children:n.map((e,t)=>(0,k.jsxs)(`div`,{className:`swi-featured-row`,children:[(0,k.jsx)(`span`,{className:`swi-featured-pos`,children:t+1}),(0,k.jsx)(`span`,{className:`swi-featured-name`,children:E(e)}),d.model===e&&(0,k.jsx)(`span`,{className:`badge badge-accent`,children:m(`sub.preferred`)}),(0,k.jsxs)(`span`,{className:`swi-featured-actions`,children:[d.model!==e&&(0,k.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>d.onSave({model:e,effort:d.effort||null}),disabled:r||d.saving,children:m(`sub.prefer`)}),(0,k.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-icon btn-sm`,onClick:()=>s(t,-1),disabled:r||t===0,"aria-label":m(`sub.moveUp`,{m:e}),children:(0,k.jsx)(a,{})}),(0,k.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-icon btn-sm`,onClick:()=>s(t,1),disabled:r||t===n.length-1,"aria-label":m(`sub.moveDown`,{m:e}),children:(0,k.jsx)(p,{})}),(0,k.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-icon btn-sm`,onClick:()=>i(e),disabled:r,"aria-label":m(`sub.removeAria`,{m:e}),style:{color:`var(--red)`},children:(0,k.jsx)(x,{})})]})]},e))}),(0,k.jsx)(`div`,{className:`swi-save-row`,children:(0,k.jsx)(`button`,{type:`button`,className:`btn btn-primary`,onClick:u,disabled:r,children:m(`common.save`)})})]}),(0,k.jsxs)(`section`,{id:w(`subagents`,`models`),className:`subagents-workspace-section`,"aria-label":m(`sub.models`),children:[(0,k.jsxs)(`div`,{className:`swi-featured-head`,children:[(0,k.jsx)(`h2`,{className:`swi-featured-title`,children:m(`sub.models`)}),(0,k.jsx)(`span`,{className:`swi-featured-count`,children:S.length})]}),(0,k.jsxs)(`div`,{className:`swi-picker-box`,children:[(0,k.jsx)(`div`,{className:`subagents-workspace-rail-search`,children:(0,k.jsx)(`input`,{className:`input`,value:h,onChange:e=>g(e.target.value),placeholder:m(`sub.search`),"aria-label":m(`sub.search`)})}),(0,k.jsx)(`div`,{className:`subagents-workspace-rail-list`,children:S.length===0?(0,k.jsx)(`span`,{className:`subagents-workspace-rail-empty`,children:m(`sub.noModels`)}):S.map(e=>{let t=v.has(e),a=t?n.indexOf(e)+1:null,o=!t&&(y||r);return(0,k.jsxs)(`div`,{className:`subagents-workspace-rail-row${t?` subagents-workspace-rail-row--selected`:``}`,children:[(0,k.jsxs)(`span`,{className:`subagents-workspace-rail-row-main`,children:[(0,k.jsx)(`span`,{className:`swi-rail-priority`,children:a??``}),(0,k.jsx)(l,{className:`swi-rail-icon`,"aria-hidden":`true`}),(0,k.jsx)(`span`,{className:`subagents-workspace-rail-name`,children:E(e)})]}),(0,k.jsx)(`button`,{type:`button`,className:`subagents-workspace-rail-toggle${t?` subagents-workspace-rail-toggle--on`:``}${o?` subagents-workspace-rail-toggle--disabled`:``}`,onClick:()=>{o||i(e)},disabled:o,"aria-pressed":t,"aria-label":m(t?`sub.workspace.removeFromFeatured`:`sub.workspace.addToFeatured`,{m:e}),title:t?m(`sub.workspace.removeFromFeatured`,{m:e}):y?m(`sub.workspace.featuredFull`):m(`sub.workspace.addToFeatured`,{m:e}),children:t?(0,k.jsx)(c,{style:{width:14,height:14}}):(0,k.jsx)(_,{style:{width:14,height:14}})})]},e)})})]})]}),(0,k.jsxs)(`section`,{id:w(`subagents`,`settings`),className:`subagents-workspace-section`,"aria-label":m(`sub.settings`),children:[(0,k.jsx)(`div`,{className:`swi-featured-head`,children:(0,k.jsx)(`h2`,{className:`swi-featured-title`,children:m(`sub.settings`)})}),d.model&&!v.has(d.model)&&(0,k.jsxs)(`p`,{className:`swi-featured-hint`,children:[(0,k.jsx)(b,{width:15,height:15,"aria-hidden":`true`}),m(`sub.preferredOutsideAdvertised`)]}),(0,k.jsx)(A,{model:d.model,effort:d.effort,efforts:d.efforts,available:d.available,guidanceEnabled:d.guidanceEnabled,syncCodexDefaults:d.syncCodexDefaults,nativeDefaultState:d.nativeDefaultState,saving:d.saving,onSave:d.onSave,ultraMode:d.ultraMode,ultraSaving:d.ultraSaving,onUltraModeSave:d.onUltraModeSave,ultraLoadFailed:d.ultraLoadFailed,onUltraModeRetry:d.onUltraModeRetry,nativeParentOverride:d.nativeParentOverride,nativeParentOverrideSaving:d.nativeParentOverrideSaving,onNativeParentOverrideSave:d.onNativeParentOverrideSave,agentTaskRecovery:d.agentTaskRecovery,agentTaskRecoverySaving:d.agentTaskRecoverySaving,onAgentTaskRecoverySave:d.onAgentTaskRecoverySave,routedDelegationBridge:d.routedDelegationBridge,routedDelegationBridgeSaving:d.routedDelegationBridgeSaving,onRoutedDelegationBridgeSave:d.onRoutedDelegationBridgeSave,keepNativeChatGptOnV1:f.keepNativeChatGptOnV1,prompt:d.prompt,childInstructions:d.childInstructions,childInstructionsSaving:d.childInstructionsSaving,onChildInstructionsSave:d.onChildInstructionsSave})]})]})]})}function te(e){let[t,n]=(0,O.useState)(!1),[r,i]=(0,O.useState)(!1),[a,o]=(0,O.useState)(``),[s,c]=(0,O.useState)(``),[l,u]=(0,O.useState)([]),[f,p]=(0,O.useState)([]),[h,_]=(0,O.useState)(!0),[v,y]=(0,O.useState)(!1),[b,x]=(0,O.useState)(``),[S,C]=(0,O.useState)(`disabled`),w=(0,O.useCallback)(e=>{let t=m(e);_(t.multiAgentGuidanceEnabled),y(t.syncCodexSubagentDefaults),C(e.nativeDefaultState===`active`||e.nativeDefaultState===`pending`||e.nativeDefaultState===`blocked`?e.nativeDefaultState:`disabled`),o(t.injectionModel),c(t.injectionEffort),`prompt`in e&&x(typeof e.prompt==`string`?e.prompt:``),Array.isArray(e.efforts)&&u(e.efforts),Array.isArray(e.available)&&p(e.available)},[]),T=(0,O.useCallback)(async()=>{try{let t=await fetch(`${e}/api/injection-model`);w(await g(t))}catch{}},[e,w]);return(0,O.useEffect)(()=>{let t=!1;return(async()=>{try{let n=await fetch(`${e}/api/injection-model`),r=await g(n);t||w(r)}catch{}finally{t||n(!0)}})(),()=>{t=!0}},[e,w]),{loaded:t,saving:r,model:a,effort:s,efforts:l,available:f,prompt:b,guidanceEnabled:h,syncCodexDefaults:v,nativeDefaultState:S,refresh:T,save:(0,O.useCallback)(async t=>{if(r)return{ok:!1,error:``};i(!0);try{let n=await fetch(`${e}/api/injection-model`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});await d(n,`injection save failed`);let r=await fetch(`${e}/api/injection-model`);return w(await g(r)),{ok:!0}}catch(e){return{ok:!1,error:e instanceof Error&&e.message?e.message:`injection save failed`}}finally{i(!1)}},[e,w,r])}}function ne(e){return y(e)}function re(e){let t=e?.catalogState?.state;return t===`fresh`||t===`stale`||t===`not_running`?t:`unknown`}function H({apiBase:e}){let n=t(),r=`ocx.subagents.v1:${e}`,a=ne(r),[o,s]=(0,O.useState)(()=>a?.chosen??[]),[c,l]=(0,O.useState)(``),[u,f]=(0,O.useState)(!1),[p,m]=(0,O.useState)(!1),g=(0,O.useRef)(!1),_=(0,O.useRef)(0),y=te(e),[b,x]=(0,O.useState)(()=>re(a)),[w,T]=(0,O.useState)({enabled:!1,hintText:null,multiAgentV2Enabled:!1}),[E,A]=(0,O.useState)({enabled:!1,model:null,active:!1}),[j,M]=(0,O.useState)({enabled:!1,model:null}),[N,P]=(0,O.useState)({enabled:!1}),[F,I]=(0,O.useState)(`default`),[L,R]=(0,O.useState)(!1),[z,B]=(0,O.useState)(``),[V,H]=(0,O.useState)(!1),[ie,ae]=(0,O.useState)(!1),[oe,se]=(0,O.useState)(!1),U=(0,O.useRef)(!1),[ce,W]=(0,O.useState)(!1),G=(0,O.useRef)(!1),K=(0,O.useRef)(!1),[le,ue]=(0,O.useState)(!1),[de,q]=(0,O.useState)(!1),J=(0,O.useRef)(0),Y=(0,O.useRef)(e);(0,O.useEffect)(()=>{Y.current=e,J.current++},[e]);let X=(0,O.useCallback)(async t=>{if(Y.current!==e)return!1;let r=++J.current,i=await fetch(`${e}/api/v2`,{signal:t}),a=await d(i,n(`sub.ultraModeLoadFail`));if(!a||t?.aborted||r!==J.current||Y.current!==e)return!1;q(!1),I(a.multiAgentMode===`v1`||a.multiAgentMode===`v2`?a.multiAgentMode:`default`),R(a.keepNativeChatGptOnV1===!0),B(typeof a.subagentDeveloperInstructions==`string`?a.subagentDeveloperInstructions:``),T({enabled:a.enabled??!1,hintText:a.multiAgentModeHintText??null,multiAgentV2Enabled:a.enabled===!0&&a.multiAgentMode===`v2`});let o=a.v2NativeParentOverride;A({enabled:o?.enabled===!0,model:typeof o?.model==`string`?o.model:null,active:o?.active===!0});let s=a.agentTaskRecovery;return M({enabled:s?.enabled===!0,model:typeof s?.model==`string`?s.model:null}),P({enabled:a.v2RoutedDelegationBridge===!0}),!0},[e,n]);(0,O.useEffect)(()=>{let e=new AbortController;return(async()=>{await X(e.signal)})().catch(()=>{e.signal.aborted||(f(!1),q(!0),l(n(`sub.ultraModeLoadFail`)))}),()=>{e.abort()}},[X,n]);let fe=async t=>{if(ie)return;let r=e;ae(!0),l(``);try{let i=await fetch(`${e}/api/v2`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(await d(i,n(`sub.ultraModeSaveFail`)),Y.current!==r||!await X())return;f(!0),l(n(`sub.ultraModeSaved`))}catch(e){if(Y.current!==r)return;f(!1),l(e instanceof Error&&e.message?e.message:n(`sub.networkError`))}finally{ae(!1)}},pe=async t=>{if(U.current)return;U.current=!0;let r=e;se(!0),l(``);try{let i=await fetch(`${e}/api/v2`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({v2NativeParentOverride:{enabled:t.enabled,model:t.model}})});if(await d(i,n(`sub.nativeParentOverrideSaveFail`)),Y.current!==r||!await X())return;f(!0),l(n(`sub.nativeParentOverrideSaved`))}catch(e){if(Y.current!==r)return;f(!1),l(e instanceof Error&&e.message?e.message:n(`sub.networkError`))}finally{U.current=!1,se(!1)}},me=async t=>{if(G.current)return;G.current=!0;let r=e;W(!0),l(``);try{let i=await fetch(`${e}/api/v2`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({agentTaskRecovery:{enabled:t.enabled,model:t.model}})});if(await d(i,n(`sub.agentTaskRecoverySaveFail`)),Y.current!==r||!await X())return;f(!0),l(n(`sub.agentTaskRecoverySaved`))}catch(e){if(Y.current!==r)return;f(!1),l(e instanceof Error&&e.message?e.message:n(`sub.networkError`))}finally{G.current=!1,W(!1)}},he=async t=>{if(K.current)return;K.current=!0;let r=e;ue(!0),l(``);try{let i=await fetch(`${e}/api/v2`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({v2RoutedDelegationBridge:t})});if(await d(i,n(`sub.routedDelegationBridgeSaveFail`)),Y.current!==r||!await X())return;f(!0),l(n(`sub.routedDelegationBridgeSaved`))}catch(e){if(Y.current!==r)return;f(!1),l(e instanceof Error&&e.message?e.message:n(`sub.networkError`))}finally{K.current=!1,ue(!1)}},ge=async t=>{if(V)return;let r=e;H(!0),l(``);try{let i=await fetch(`${e}/api/v2`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({subagentDeveloperInstructions:t})});if(await d(i,n(`sub.childInstructionsSaveFailed`)),Y.current!==r||!await X())return;f(!0),l(n(`sub.childInstructionsSaved`))}catch(e){if(Y.current!==r)return;f(!1),l(e instanceof Error&&e.message?e.message:n(`sub.networkError`))}finally{H(!1)}},_e=(0,O.useCallback)(async()=>{try{if(!await X())return;f(!1),l(e=>e===n(`sub.ultraModeLoadFail`)?``:e)}catch{f(!1),q(!0),l(n(`sub.ultraModeLoadFail`))}},[X,n]),ve=(0,O.useCallback)(async t=>{let i=++_.current,a=await fetch(`${e}/api/subagent-models`,{signal:t}),o=await d(a,n(`sub.loadFail`));if(!o)throw Error(n(`sub.loadFail`));let c=o.available??[],l=new Set(c),u={available:c,chosen:(o.chosen??[]).filter(e=>l.has(e)),catalogState:o.catalogState};return i===_.current?(s(u.chosen),x(re(u)),h(r,u),u):u},[e,r,n]),Z=S(r,[e],ve,{isEmpty:()=>!1,initialData:a??void 0}),{state:Q}=Z,$=Z.refresh,ye=Q.data??a,be=ye?.available??[],xe=y.refresh,Se=(0,O.useCallback)(()=>{$(),xe()},[xe,$]),Ce=v(e,{onSettled:Se}),we=e=>{p||(l(``),s(t=>t.includes(e)?t.filter(t=>t!==e):t.length>=5?t:[...t,e]))},Te=(e,t)=>{p||s(n=>{let r=[...n],i=e+t;return i<0||i>=r.length?n:([r[e],r[i]]=[r[i],r[e]],r)})},Ee=(0,O.useCallback)((e,t)=>{f(e),l(t)},[]),De=async()=>{if(p||g.current)return;g.current=!0;let t=_.current;m(!0),l(``);try{let i=await fetch(`${e}/api/subagent-models`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({models:o})}),a=await d(i,n(`sub.saveFailed`)),c=a?.applied??o;a?.applied&&s(a.applied),t===_.current&&h(r,{available:be,chosen:c,catalogState:{state:b}}),f(!0),l(n(`sub.saved`,{n:c.length,cmd:`ocx sync`}))}catch(e){f(!1),l(e instanceof Error&&e.message?e.message:n(`sub.networkError`))}finally{g.current=!1,m(!1)}};if(Q.showSkeleton&&!ye)return(0,k.jsx)(C,{label:n(`sub.loading`),rows:4});if(Q.kind===`failed-cold`){let e=Q.error instanceof Error?Q.error.message:n(`sub.loadFail`);return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(i,{tone:`err`,children:e}),(0,k.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>$(),children:n(`common.retry`)})]})}return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`div`,{className:`page-head`,children:(0,k.jsx)(`h2`,{children:n(`nav.subagents`)})}),c&&(0,k.jsx)(i,{tone:u?`ok`:`err`,children:c}),Q.showError&&(0,k.jsx)(i,{tone:`err`,children:n(`sub.loadFail`)}),(0,k.jsxs)(`p`,{className:`page-sub`,children:[n(`sub.catalogState.label`),`: `,n(`sub.catalogState.${b}`)]}),(0,k.jsx)(D,{state:b,controller:Ce}),(0,k.jsx)(ee,{available:be,chosen:o,busy:p,onToggle:we,onMove:Te,onSave:()=>{De()},delegation:{model:y.model,effort:y.effort,efforts:y.efforts,available:y.available,guidanceEnabled:y.guidanceEnabled,syncCodexDefaults:y.syncCodexDefaults,nativeDefaultState:y.nativeDefaultState,saving:y.saving,onSave:e=>{(async()=>{let t=await y.save(e);`prompt`in e&&(t.ok?(f(!0),l(n(`sub.injectionPromptSaved`))):(f(!1),l(t.error||n(`sub.injectionPromptSaveFailed`))))})()},ultraMode:w,ultraSaving:ie,onUltraModeSave:e=>{fe(e)},ultraLoadFailed:de,onUltraModeRetry:()=>{_e()},nativeParentOverride:E,nativeParentOverrideSaving:oe,onNativeParentOverrideSave:e=>{pe(e)},agentTaskRecovery:j,agentTaskRecoverySaving:ce,onAgentTaskRecoverySave:e=>{me(e)},routedDelegationBridge:N,routedDelegationBridgeSaving:le,onRoutedDelegationBridgeSave:e=>{he(e)},prompt:y.prompt,childInstructions:z,childInstructionsSaving:V,onChildInstructionsSave:e=>{ge(e)}},roles:{apiBase:e,multiAgentMode:F,keepNativeChatGptOnV1:L,onStatus:Ee}})]})}export{H as default};
@@ -1 +1 @@
1
- import{_ as e,h as t,m as n,s as r}from"./shared-BdYGV-yJ.js";import{C as i,F as a,P as o,St as s,b as c,h as l,p as u,x as d,y as f}from"./index-CU1jE0st.js";import{t as p}from"./data-surface-BCycbObp.js";import{t as m}from"./data-surface-BtO3lwam.js";import{n as h,t as g}from"./section-tabs-BP7gEPK6.js";import{t as _}from"./model-display-D2elXkuE.js";import{r as v}from"./intl-formatters-CTcuZoAe.js";var y=e(t(),1),b=s(),x=n();function S(e){return`${Math.round(e*100)}%`}function C(e,t){let n=`${t}/${e}`,r=0;for(let e=0;e<n.length;e++)r=r*31+n.charCodeAt(e)>>>0;return`hsl(${r%360} 55% 55%)`}function w(e){let t=new Map(e.map(e=>[e.date,e]));return f(e,7).map(e=>({...e,models:t.get(e.date)?.models??[]}))}function T(e){let t=window.innerWidth,n=window.innerHeight,r=Math.min(240,Math.max(0,t-16));return{left:Math.max(8,Math.min(e.left+e.width/2-r/2,t-8-r)),maxWidth:r,...e.top-8>n-e.bottom-8?(()=>{let t=Math.max(8,Math.min(n-8,n-e.top+8));return{bottom:t,maxHeight:Math.max(0,n-t-8)}})():(()=>{let t=Math.max(8,Math.min(n-8,e.bottom+8));return{top:t,maxHeight:Math.max(0,n-t-8)}})()}}function E({anchor:e,className:t,children:n}){return(0,b.createPortal)((0,x.jsx)(`div`,{className:`${t} chart-overlay`,role:`tooltip`,style:T(e),children:n}),document.body)}function D(e,t,n){return n(`usage.chart.dayDetail`,{date:c(e.date,t),requests:e.requests,tokens:d(e.totalTokens,t)})}function O(e){let t=e.filter(e=>e>0).sort((e,t)=>e-t);if(t.length===0)return[0,0,0,0];let n=e=>t[Math.min(t.length-1,Math.floor(e*t.length))];return[n(.25),n(.5),n(.75),n(.95)]}function k(e,t){return e<=0?0:e<=t[0]?1:e<=t[1]?2:e<=t[2]?3:4}function A(e,t){let n=O(e.map(e=>e.totalTokens)),r=new Map(e.map(e=>[e.date,e])),i=new Date;i.setHours(0,0,0,0);let a=new Date(i);a.setDate(a.getDate()-364),a.setDate(a.getDate()-a.getDay());let o=[],s=[],c=new Intl.DateTimeFormat(t,{month:`short`}),l=-4,u=-1,d=[],f=new Date(a);for(;f<=i;){let e=`${f.getFullYear()}-${String(f.getMonth()+1).padStart(2,`0`)}-${String(f.getDate()).padStart(2,`0`)}`,t=f.getMonth();f.getDay()===0&&t!==u&&o.length-l>=4&&(s.push({label:c.format(f),col:o.length}),l=o.length,u=t);let i=r.get(e);d.push({date:e,requests:i?.requests??0,totalTokens:i?.totalTokens??0,level:i?k(i.totalTokens,n):0,dayOfWeek:f.getDay()}),f.getDay()===6&&(o.push(d),d=[]),f.setDate(f.getDate()+1)}if(d.length>0){for(;d.length<7;)d.push({date:``,requests:0,totalTokens:0,level:0,dayOfWeek:d.length});o.push(d)}return{weeks:o,months:s,buckets:n}}function j({surface:e,range:t,onSurface:n,onRange:r,t:i}){return(0,x.jsxs)(`div`,{className:`usage-filters`,children:[(0,x.jsx)(`div`,{className:`usage-segmented`,role:`group`,"aria-label":i(`logs.filter.surface.label`),children:[`all`,`codex`,`claude`,`grok`].map(t=>{let r=i(`logs.filter.surface.${t}`);return(0,x.jsxs)(`button`,{type:`button`,className:`usage-segmented-btn usage-source-btn${e===t?` active`:``}`,"aria-label":r,"aria-pressed":e===t,onClick:()=>n(t),children:[t===`codex`&&(0,x.jsx)(`img`,{className:`usage-source-mark`,src:`/provider-icons/openai.svg`,alt:``,"aria-hidden":`true`}),t===`claude`&&(0,x.jsx)(`img`,{className:`usage-source-mark`,src:`/provider-icons/claude-color.svg`,alt:``,"aria-hidden":`true`}),t===`grok`&&(0,x.jsx)(`img`,{className:`usage-source-mark usage-source-mark--mono`,src:`/provider-icons/grok.svg`,alt:``,"aria-hidden":`true`}),(0,x.jsx)(`span`,{className:t===`all`?`usage-source-label`:`usage-source-label usage-source-label-collapsible`,children:r})]},t)})}),(0,x.jsx)(`div`,{className:`usage-segmented`,role:`group`,"aria-label":i(`usage.title`),children:[`all`,`30d`,`7d`].map(e=>{let n=i(e===`all`?`usage.range.available`:`usage.range.${e}`);return(0,x.jsx)(`button`,{type:`button`,className:`usage-segmented-btn${t===e?` active`:``}`,"aria-label":n,"aria-pressed":t===e,onClick:()=>r(e),children:n},e)})})]})}function M({summary:e,activeDays:t,locale:n,t:r}){return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`div`,{className:`usage-cards usage-cards-3x2`,role:`group`,"aria-label":r(`usage.title`),children:[(0,x.jsxs)(`div`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`muted`,children:r(`usage.card.requests`)}),(0,x.jsx)(`div`,{className:`stat-value`,children:e.requests})]}),(0,x.jsxs)(`div`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`muted`,children:r(`usage.card.measured`)}),(0,x.jsx)(`div`,{className:`stat-value`,children:e.measuredRequests})]}),(0,x.jsxs)(`div`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`muted`,children:r(`usage.card.totalTokens`)}),(0,x.jsx)(`div`,{className:`stat-value`,children:d(e.totalTokens,n)})]}),(0,x.jsxs)(`div`,{className:`stat`,title:r(`usage.card.cachedTokensHint`),children:[(0,x.jsx)(`div`,{className:`muted`,children:r(`usage.card.cachedTokens`)}),(0,x.jsx)(`div`,{className:`stat-value`,children:d(e.cacheReadInputTokens??e.cachedInputTokens,n)}),(e.cacheCreationInputTokens??0)>0&&(0,x.jsxs)(`div`,{className:`muted text-caption`,children:[r(`usage.card.cacheWriteTokens`),`: `,d(e.cacheCreationInputTokens??0,n)]})]}),(0,x.jsxs)(`div`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`muted`,children:r(`usage.card.coverage`)}),(0,x.jsx)(`div`,{className:`stat-value`,children:S(e.coverageRatio)})]}),(0,x.jsxs)(`div`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`muted`,children:r(`usage.card.activeDays`)}),(0,x.jsx)(`div`,{className:`stat-value`,children:t})]})]}),e.estimatedCostUsd!==void 0&&(0,x.jsxs)(`div`,{className:`usage-cost-row`,role:`note`,children:[(0,x.jsx)(`span`,{className:`muted`,children:r(`usage.cost.total`)}),(0,x.jsx)(`span`,{className:`stat-value mono usage-cost-value`,children:v(e.estimatedCostUsd,n)}),(0,x.jsx)(`span`,{className:`muted text-caption`,children:r(`usage.cost.disclaimer`)}),(e.unpricedRequests??0)+(e.unmeteredRequests??0)>0&&(0,x.jsx)(`span`,{className:`muted text-caption`,children:r(`usage.cost.unpricedNote`).replace(`{count}`,String((e.unpricedRequests??0)+(e.unmeteredRequests??0)))})]})]})}function N({weekBars:e,locale:t,t:n}){let[r,i]=(0,y.useState)(null),a=Math.max(1,...e.map(e=>e.totalTokens)),o=e.find(e=>e.date===r?.date),s=(e,t)=>{i({date:e.date,anchor:t.getBoundingClientRect()})};return(0,x.jsxs)(`div`,{className:`daybars`,role:`group`,"aria-label":n(`usage.section.heatmap`),children:[e.map(e=>{let r=Math.round(e.totalTokens/a*100),o=new Intl.DateTimeFormat(t,{weekday:`short`}).format(new Date(`${e.date}T12:00:00`));return(0,x.jsxs)(`button`,{type:`button`,className:`daybar`,"aria-label":D(e,t,n),onFocus:t=>s(e,t.currentTarget),onBlur:()=>i(t=>t?.date===e.date?null:t),onPointerEnter:t=>s(e,t.currentTarget),onPointerDown:t=>s(e,t.currentTarget),onPointerLeave:t=>{t.pointerType!==`touch`&&document.activeElement!==t.currentTarget&&i(t=>t?.date===e.date?null:t)},children:[(0,x.jsx)(`div`,{className:`daybar-track`,children:(0,x.jsxs)(`div`,{className:`daybar-stack`,style:{"--daybar-scale":String(Math.max(0,Math.min(1,r/100)))},children:[e.models.map(e=>(0,x.jsx)(`div`,{className:`daybar-seg`,style:{flexGrow:e.totalTokens,background:C(e.model,e.provider)}},`${e.provider}/${e.model}`)),e.models.length===0&&e.totalTokens>0&&(0,x.jsx)(`div`,{className:`daybar-seg`,style:{flexGrow:1,background:`var(--green)`}})]})}),(0,x.jsx)(`span`,{className:`daybar-count`,children:d(e.totalTokens,t)}),(0,x.jsx)(`span`,{className:`daybar-label muted`,children:o})]},e.date)}),r&&o&&(0,x.jsxs)(E,{className:`daybar-tip`,anchor:r.anchor,children:[(0,x.jsx)(`div`,{className:`daybar-tip-date`,children:c(o.date,t)}),(0,x.jsxs)(`div`,{className:`daybar-tip-row`,children:[(0,x.jsx)(`span`,{children:n(`usage.heatmap.tooltipRequests`,{requests:o.requests})}),(0,x.jsx)(`span`,{className:`daybar-tip-val`,children:n(`usage.heatmap.tooltipTokens`,{tokens:d(o.totalTokens,t)})})]}),o.models.slice(0,8).map(e=>(0,x.jsxs)(`div`,{className:`daybar-tip-row`,children:[(0,x.jsx)(`span`,{className:`daybar-tip-swatch`,style:{background:C(e.model,e.provider)}}),(0,x.jsx)(`span`,{className:`daybar-tip-name`,children:_(e.model)}),(0,x.jsx)(`span`,{className:`daybar-tip-val`,children:d(e.totalTokens,t)})]},`${e.provider}/${e.model}`))]})]})}function P({range:e,heatmap:t,weekBars:n,locale:r,t:i}){let a=(0,y.useRef)(null),o=(0,y.useMemo)(()=>t.weeks.flat().filter(e=>e.date),[t]),[s,l]=(0,y.useState)(()=>o.at(-1)?.date??``),[u,f]=(0,y.useState)(null),p=(0,y.useId)(),m=o.some(e=>e.date===s)?s:o.at(-1)?.date??``,h=(e,t)=>{l(e.date),f({date:e.date,anchor:t.getBoundingClientRect()})},g=(e,t)=>{let n=o.findIndex(e=>e.date===t.date),r=e.key===`ArrowUp`?-1:e.key===`ArrowDown`?1:e.key===`ArrowLeft`?-7:e.key===`ArrowRight`?7:0;if(!r||n<0)return;e.preventDefault();let i=o[Math.max(0,Math.min(o.length-1,n+r))];l(i.date);let s=a.current?.querySelector(`[data-date="${i.date}"]`);s&&(s.focus(),f({date:i.date,anchor:s.getBoundingClientRect()}))};return(0,y.useEffect)(()=>{let e=a.current;if(!e)return;let t=()=>{e.scrollLeft=e.scrollWidth};t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[t,e]),(0,x.jsxs)(`section`,{className:`panel`,style:{marginTop:16},"aria-labelledby":`usage-heatmap-title`,children:[(0,x.jsx)(`h3`,{id:`usage-heatmap-title`,className:`panel-title`,children:i(`usage.section.heatmap`)}),e===`7d`?(0,x.jsx)(N,{weekBars:n,locale:r,t:i}):(0,x.jsxs)(`div`,{className:`heatmap`,ref:a,children:[(0,x.jsxs)(`div`,{className:`heatmap-months`,style:{gridTemplateColumns:`28px repeat(${t.weeks.length}, calc(var(--hm-cell) + var(--hm-gap)))`},children:[(0,x.jsx)(`span`,{className:`heatmap-day-spacer`}),t.months.map(e=>(0,x.jsx)(`span`,{className:`heatmap-month`,style:{gridColumn:e.col+2},children:e.label},`${e.label}-${e.col}`))]}),(0,x.jsxs)(`div`,{className:`heatmap-body`,children:[(0,x.jsxs)(`div`,{className:`heatmap-days`,children:[(0,x.jsx)(`span`,{}),(0,x.jsx)(`span`,{children:i(`usage.dayMon`)}),(0,x.jsx)(`span`,{}),(0,x.jsx)(`span`,{children:i(`usage.dayWed`)}),(0,x.jsx)(`span`,{}),(0,x.jsx)(`span`,{children:i(`usage.dayFri`)}),(0,x.jsx)(`span`,{})]}),(0,x.jsx)(`div`,{className:`heatmap-grid`,role:`group`,"aria-labelledby":`usage-heatmap-title`,"aria-describedby":p,style:{gridTemplateColumns:`repeat(${t.weeks.length}, var(--hm-cell))`},children:t.weeks.map((e,t)=>(0,x.jsx)(`div`,{className:`heatmap-week`,children:e.map((e,n)=>e.date?(0,x.jsx)(`button`,{type:`button`,className:`heatmap-cell heatmap-cell-${e.level}`,"data-date":e.date,tabIndex:m===e.date?0:-1,"aria-label":D(e,r,i),onFocus:t=>h(e,t.currentTarget),onBlur:()=>f(t=>t?.date===e.date?null:t),onKeyDown:t=>g(t,e),onPointerEnter:t=>h(e,t.currentTarget),onPointerDown:t=>h(e,t.currentTarget),onPointerLeave:t=>{t.pointerType!==`touch`&&document.activeElement!==t.currentTarget&&f(t=>t?.date===e.date?null:t)}},e.date):(0,x.jsx)(`span`,{className:`heatmap-cell heatmap-cell-0`,"aria-hidden":`true`},`pad-${t}-${n}`))},e[0]?.date||`week-${t}`))})]}),(0,x.jsx)(`span`,{id:p,className:`sr-only`,children:i(`usage.heatmap.keyboardLabel`)}),(0,x.jsx)(`span`,{className:`sr-only`,"aria-live":`polite`,children:o.find(e=>e.date===m)?D(o.find(e=>e.date===m),r,i):``}),u&&(()=>{let e=o.find(e=>e.date===u.date);return e?.date?(0,x.jsxs)(E,{className:`heatmap-tip`,anchor:u.anchor,children:[(0,x.jsx)(`div`,{className:`heatmap-tip-date`,children:c(e.date,r)}),(0,x.jsx)(`div`,{className:`heatmap-tip-val`,children:i(`usage.heatmap.tooltipTokens`,{tokens:d(e.totalTokens,r)})}),(0,x.jsx)(`div`,{className:`heatmap-tip-req muted`,children:i(`usage.heatmap.tooltipRequests`,{requests:e.requests})})]}):null})(),(0,x.jsxs)(`div`,{className:`heatmap-legend muted`,children:[(0,x.jsx)(`span`,{children:i(`usage.heatmap.less`)}),[0,1,2,3,4].map(e=>(0,x.jsx)(`span`,{className:`heatmap-cell heatmap-cell-${e}`},e)),(0,x.jsx)(`span`,{children:i(`usage.heatmap.more`)})]})]})]})}function F({title:e,titleId:t,children:n}){return(0,x.jsxs)(`section`,{className:`usw-section`,"aria-labelledby":t,children:[(0,x.jsx)(`h3`,{id:t,className:`h-section`,children:e}),n]})}function I({models:e,modelQuery:t,onModelQuery:n,locale:r,t:a,workspace:o=!1}){let s=a(`usage.search.models`),c=a(`usage.section.models`),l=`usage-models-title`,u=(0,x.jsx)(`input`,{className:`input`,"aria-label":s,placeholder:s,value:t,onChange:e=>n(e.target.value)}),f=(0,x.jsx)(`div`,{className:`tbl-wrap`,children:(0,x.jsxs)(`table`,{className:`tbl`,children:[(0,x.jsx)(`thead`,{children:(0,x.jsxs)(`tr`,{children:[(0,x.jsx)(`th`,{children:a(`logs.col.model`)}),(0,x.jsx)(`th`,{children:a(`logs.col.provider`)}),(0,x.jsx)(`th`,{className:`num`,children:a(`usage.col.requests`)}),(0,x.jsx)(`th`,{className:`num`,children:a(`usage.col.measured`)}),(0,x.jsx)(`th`,{className:`num`,children:a(`usage.col.tokens`)}),(0,x.jsx)(`th`,{children:a(`usage.col.share`)})]})}),(0,x.jsx)(`tbody`,{children:e.map(e=>(0,x.jsxs)(`tr`,{children:[(0,x.jsx)(`td`,{className:`mono`,children:_(e.model)}),(0,x.jsx)(`td`,{className:`muted`,children:i(e.provider,a)}),(0,x.jsx)(`td`,{className:`num`,children:e.requests}),(0,x.jsx)(`td`,{className:`num`,children:e.measuredRequests}),(0,x.jsx)(`td`,{className:`num mono`,children:d(e.totalTokens,r)}),(0,x.jsx)(`td`,{children:(0,x.jsx)(`div`,{className:`usage-bar`,children:(0,x.jsx)(`div`,{className:`usage-bar-fill`,style:{width:`${Math.round(e.shareRatio*100)}%`}})})})]},`${e.provider}/${e.model}`))})]})});return o?(0,x.jsxs)(F,{title:c,titleId:l,children:[(0,x.jsx)(`div`,{className:`usw-section-toolbar`,children:u}),f]}):(0,x.jsxs)(`section`,{className:`panel`,style:{marginTop:16},"aria-labelledby":l,children:[(0,x.jsxs)(`div`,{className:`panel-head`,children:[(0,x.jsx)(`h3`,{id:l,className:`panel-title`,children:c}),u]}),f]})}function L({providers:e,locale:t,t:n,workspace:r=!1}){let a=n(`usage.section.providers`),o=`usage-providers-title`,s=(0,x.jsx)(`div`,{className:`tbl-wrap`,children:(0,x.jsxs)(`table`,{className:`tbl`,children:[(0,x.jsx)(`thead`,{children:(0,x.jsxs)(`tr`,{children:[(0,x.jsx)(`th`,{children:n(`logs.col.provider`)}),(0,x.jsx)(`th`,{className:`num`,children:n(`usage.col.requests`)}),(0,x.jsx)(`th`,{className:`num`,children:n(`usage.col.measured`)}),(0,x.jsx)(`th`,{className:`num`,children:n(`usage.col.tokens`)}),(0,x.jsx)(`th`,{children:n(`usage.col.share`)})]})}),(0,x.jsx)(`tbody`,{children:e.map(e=>(0,x.jsxs)(`tr`,{children:[(0,x.jsx)(`td`,{className:`mono`,children:i(e.provider,n)}),(0,x.jsx)(`td`,{className:`num`,children:e.requests}),(0,x.jsx)(`td`,{className:`num`,children:e.measuredRequests}),(0,x.jsx)(`td`,{className:`num mono`,children:d(e.totalTokens,t)}),(0,x.jsx)(`td`,{children:(0,x.jsx)(`div`,{className:`usage-bar`,children:(0,x.jsx)(`div`,{className:`usage-bar-fill`,style:{width:`${Math.round(e.shareRatio*100)}%`}})})})]},e.provider))})]})});return r?(0,x.jsx)(F,{title:a,titleId:o,children:s}):(0,x.jsxs)(`section`,{className:`panel`,style:{marginTop:16},"aria-labelledby":o,children:[(0,x.jsx)(`h3`,{id:o,className:`panel-title`,children:a}),s]})}function R({summary:e,t,workspace:n=!1}){let r=t(`usage.section.coverage`),i=`usage-coverage-title`,a=(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`div`,{className:`usage-cards usage-cards-3x2`,children:[(0,x.jsxs)(`div`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`muted`,children:t(`usage.coverage.measured`)}),(0,x.jsx)(`div`,{className:`stat-value`,children:e.measuredRequests})]}),(0,x.jsxs)(`div`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`muted`,children:t(`usage.coverage.reported`)}),(0,x.jsx)(`div`,{className:`stat-value`,children:e.reportedRequests})]}),(0,x.jsxs)(`div`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`muted`,children:t(`usage.coverage.estimated`)}),(0,x.jsx)(`div`,{className:`stat-value`,children:e.estimatedRequests})]}),(0,x.jsxs)(`div`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`muted`,children:t(`logs.tokens.unreported`)}),(0,x.jsx)(`div`,{className:`stat-value`,children:e.unreportedRequests})]}),(0,x.jsxs)(`div`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`muted`,children:t(`logs.tokens.unsupported`)}),(0,x.jsx)(`div`,{className:`stat-value`,children:e.unsupportedRequests})]})]}),(0,x.jsx)(`p`,{className:`muted text-control`,style:{marginTop:12},children:t(`usage.coverage.note`)})]});return n?(0,x.jsx)(F,{title:r,titleId:i,children:a}):(0,x.jsxs)(`section`,{className:`panel`,style:{marginTop:16},"aria-labelledby":i,children:[(0,x.jsx)(`h3`,{id:i,className:`panel-title`,children:r}),a]})}function z({data:e,heatmap:t,weekBars:n,activeDays:r,filteredModels:i,modelQuery:a,onModelQuery:s,sortedProviders:c,range:l,locale:u,t:d}){let f=!!e&&e.summary.requests===0,p=[{id:`overview`,label:d(`usage.section.overview`),meta:e?`${e.summary.requests}`:`—`,body:e?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(M,{summary:e.summary,activeDays:r,locale:u,t:d}),(0,x.jsx)(P,{range:l,heatmap:t,weekBars:n,locale:u,t:d})]}):null},{id:`models`,label:d(`usage.section.models`),meta:e?`${e.models.length}`:`—`,body:e?(0,x.jsx)(I,{models:i,modelQuery:a,onModelQuery:s,locale:u,t:d,workspace:!0}):null},{id:`providers`,label:d(`usage.section.providers`),meta:e?`${e.providers.length}`:`—`,body:e?(0,x.jsx)(L,{providers:c,locale:u,t:d,workspace:!0}):null},{id:`coverage`,label:d(`usage.section.coverage`),meta:e?S(e.summary.coverageRatio):`—`,body:e?(0,x.jsx)(R,{summary:e.summary,t:d,workspace:!0}):null}];return(0,x.jsx)(`div`,{className:`usage-workspace-shell`,children:(0,x.jsxs)(`div`,{className:`usage-workspace-root`,children:[(0,x.jsx)(g,{scope:`usage`,ariaLabel:d(`usage.workspace.sections`),items:p.map(e=>({id:e.id,label:e.label,meta:e.meta}))}),(0,x.jsx)(`section`,{className:`usage-workspace-main`,"aria-label":d(`usage.workspace.report`),children:f?(0,x.jsx)(o,{title:d(`usage.empty`)}):p.map(e=>(0,x.jsx)(`div`,{id:h(`usage`,e.id),className:`usw-body usw-section-block`,children:e.body},e.id))})]})})}var B=new Map;function V(e,t,n){return`ocx.usage.v1:${e}:${t}:${n}`}function H(e,t,n){let r=V(e,t,n);return B.get(r)??u(r)}function U(e,t,n,r){let i=V(e,t,n);B.set(i,r),l(i,r)}function W({apiBase:e}){let{t,locale:n}=r(),[i,o]=(0,y.useState)(`30d`),[s,c]=(0,y.useState)(`all`),[l,u]=(0,y.useState)(``),d=(0,y.useCallback)(async t=>{let n=await fetch(`${e}/api/usage?range=${i}&surface=${s}`,{signal:t});if(!n.ok)throw Error(`${n.status} ${n.statusText}`.trim());let r=await n.json();return U(e,i,s,r),r},[e,i,s]),f=V(e,i,s),h=H(e,i,s),g=p(f,[e,i,s],d,{isEmpty:()=>!1,initialData:h??void 0}),{state:_}=g,v=_.data??h??null,b=(0,y.useMemo)(()=>A(v?.days??[],n),[v?.days,n]),S=(0,y.useMemo)(()=>w(v?.days??[]),[v?.days]),C=(0,y.useMemo)(()=>(v?.days??[]).filter(e=>e.requests>0).length,[v?.days]),T=(0,y.useMemo)(()=>{let e=l.trim().toLowerCase(),t=(v?.models??[]).toSorted((e,t)=>t.totalTokens-e.totalTokens);return e?t.filter(t=>t.model.toLowerCase().includes(e)||t.provider.toLowerCase().includes(e)||(t.resolvedModel??``).toLowerCase().includes(e)).slice(0,100):t.slice(0,100)},[v?.models,l]),E=(0,y.useMemo)(()=>(v?.providers??[]).toSorted((e,t)=>t.totalTokens-e.totalTokens),[v?.providers]);return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`div`,{className:`page-head usage-head`,children:[(0,x.jsx)(`h2`,{id:`usage-page-title`,children:t(`usage.title`)}),(0,x.jsx)(j,{surface:s,range:i,onSurface:c,onRange:o,t})]}),(0,x.jsx)(`p`,{className:`page-sub`,children:t(`usage.subtitle`)}),_.showSkeleton&&!v?(0,x.jsx)(m,{label:t(`usage.loading`),rows:5}):_.kind===`failed-cold`?(0,x.jsxs)(a,{tone:`err`,children:[_.error instanceof Error?`${t(`usage.loadError`)} ${_.error.message}`:t(`usage.loadError`),` `,(0,x.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>g.refresh(),children:t(`common.retry`)})]}):(0,x.jsxs)(x.Fragment,{children:[_.showError&&(0,x.jsx)(a,{tone:`err`,children:t(`usage.loadError`)}),v?.historyTruncated&&(0,x.jsx)(a,{tone:`warn`,children:(()=>{let e=G(v.snapshotWindowStart),n=G(v.snapshotWindowEnd);return e!==null&&n!==null?t(`usage.historyTruncatedWindow`,{start:e,end:n}):t(`usage.historyTruncated`)})()}),(0,x.jsx)(z,{data:v,heatmap:b,weekBars:S,activeDays:C,filteredModels:T,modelQuery:l,onModelQuery:u,sortedProviders:E,range:i,locale:n,t})]})]})}function G(e){if(typeof e!=`number`||!Number.isFinite(e))return null;let t=new Date(e);return Number.isFinite(t.getTime())?t.toLocaleString():null}export{W as default};
1
+ import{_ as e,h as t,m as n,s as r}from"./shared-DI18-uF7.js";import{C as i,F as a,P as o,St as s,b as c,h as l,p as u,x as d,y as f}from"./index-JEC_6CUW.js";import{t as p}from"./data-surface-BbBMp0Wj.js";import{t as m}from"./data-surface-B8PX8rjm.js";import{n as h,t as g}from"./section-tabs-B8sLMiz6.js";import{t as _}from"./model-display-BvLWy9D5.js";import{r as v}from"./intl-formatters-CTcuZoAe.js";var y=e(t(),1),b=s(),x=n();function S(e){return`${Math.round(e*100)}%`}function C(e,t){let n=`${t}/${e}`,r=0;for(let e=0;e<n.length;e++)r=r*31+n.charCodeAt(e)>>>0;return`hsl(${r%360} 55% 55%)`}function w(e){let t=new Map(e.map(e=>[e.date,e]));return f(e,7).map(e=>({...e,models:t.get(e.date)?.models??[]}))}function T(e){let t=window.innerWidth,n=window.innerHeight,r=Math.min(240,Math.max(0,t-16));return{left:Math.max(8,Math.min(e.left+e.width/2-r/2,t-8-r)),maxWidth:r,...e.top-8>n-e.bottom-8?(()=>{let t=Math.max(8,Math.min(n-8,n-e.top+8));return{bottom:t,maxHeight:Math.max(0,n-t-8)}})():(()=>{let t=Math.max(8,Math.min(n-8,e.bottom+8));return{top:t,maxHeight:Math.max(0,n-t-8)}})()}}function E({anchor:e,className:t,children:n}){return(0,b.createPortal)((0,x.jsx)(`div`,{className:`${t} chart-overlay`,role:`tooltip`,style:T(e),children:n}),document.body)}function D(e,t,n){return n(`usage.chart.dayDetail`,{date:c(e.date,t),requests:e.requests,tokens:d(e.totalTokens,t)})}function O(e){let t=e.filter(e=>e>0).sort((e,t)=>e-t);if(t.length===0)return[0,0,0,0];let n=e=>t[Math.min(t.length-1,Math.floor(e*t.length))];return[n(.25),n(.5),n(.75),n(.95)]}function k(e,t){return e<=0?0:e<=t[0]?1:e<=t[1]?2:e<=t[2]?3:4}function A(e,t){let n=O(e.map(e=>e.totalTokens)),r=new Map(e.map(e=>[e.date,e])),i=new Date;i.setHours(0,0,0,0);let a=new Date(i);a.setDate(a.getDate()-364),a.setDate(a.getDate()-a.getDay());let o=[],s=[],c=new Intl.DateTimeFormat(t,{month:`short`}),l=-4,u=-1,d=[],f=new Date(a);for(;f<=i;){let e=`${f.getFullYear()}-${String(f.getMonth()+1).padStart(2,`0`)}-${String(f.getDate()).padStart(2,`0`)}`,t=f.getMonth();f.getDay()===0&&t!==u&&o.length-l>=4&&(s.push({label:c.format(f),col:o.length}),l=o.length,u=t);let i=r.get(e);d.push({date:e,requests:i?.requests??0,totalTokens:i?.totalTokens??0,level:i?k(i.totalTokens,n):0,dayOfWeek:f.getDay()}),f.getDay()===6&&(o.push(d),d=[]),f.setDate(f.getDate()+1)}if(d.length>0){for(;d.length<7;)d.push({date:``,requests:0,totalTokens:0,level:0,dayOfWeek:d.length});o.push(d)}return{weeks:o,months:s,buckets:n}}function j({surface:e,range:t,onSurface:n,onRange:r,t:i}){return(0,x.jsxs)(`div`,{className:`usage-filters`,children:[(0,x.jsx)(`div`,{className:`usage-segmented`,role:`group`,"aria-label":i(`logs.filter.surface.label`),children:[`all`,`codex`,`claude`,`grok`].map(t=>{let r=i(`logs.filter.surface.${t}`);return(0,x.jsxs)(`button`,{type:`button`,className:`usage-segmented-btn usage-source-btn${e===t?` active`:``}`,"aria-label":r,"aria-pressed":e===t,onClick:()=>n(t),children:[t===`codex`&&(0,x.jsx)(`img`,{className:`usage-source-mark`,src:`/provider-icons/openai.svg`,alt:``,"aria-hidden":`true`}),t===`claude`&&(0,x.jsx)(`img`,{className:`usage-source-mark`,src:`/provider-icons/claude-color.svg`,alt:``,"aria-hidden":`true`}),t===`grok`&&(0,x.jsx)(`img`,{className:`usage-source-mark usage-source-mark--mono`,src:`/provider-icons/grok.svg`,alt:``,"aria-hidden":`true`}),(0,x.jsx)(`span`,{className:t===`all`?`usage-source-label`:`usage-source-label usage-source-label-collapsible`,children:r})]},t)})}),(0,x.jsx)(`div`,{className:`usage-segmented`,role:`group`,"aria-label":i(`usage.title`),children:[`all`,`30d`,`7d`].map(e=>{let n=i(e===`all`?`usage.range.available`:`usage.range.${e}`);return(0,x.jsx)(`button`,{type:`button`,className:`usage-segmented-btn${t===e?` active`:``}`,"aria-label":n,"aria-pressed":t===e,onClick:()=>r(e),children:n},e)})})]})}function M({summary:e,activeDays:t,locale:n,t:r}){return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`div`,{className:`usage-cards usage-cards-3x2`,role:`group`,"aria-label":r(`usage.title`),children:[(0,x.jsxs)(`div`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`muted`,children:r(`usage.card.requests`)}),(0,x.jsx)(`div`,{className:`stat-value`,children:e.requests})]}),(0,x.jsxs)(`div`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`muted`,children:r(`usage.card.measured`)}),(0,x.jsx)(`div`,{className:`stat-value`,children:e.measuredRequests})]}),(0,x.jsxs)(`div`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`muted`,children:r(`usage.card.totalTokens`)}),(0,x.jsx)(`div`,{className:`stat-value`,children:d(e.totalTokens,n)})]}),(0,x.jsxs)(`div`,{className:`stat`,title:r(`usage.card.cachedTokensHint`),children:[(0,x.jsx)(`div`,{className:`muted`,children:r(`usage.card.cachedTokens`)}),(0,x.jsx)(`div`,{className:`stat-value`,children:d(e.cacheReadInputTokens??e.cachedInputTokens,n)}),(e.cacheCreationInputTokens??0)>0&&(0,x.jsxs)(`div`,{className:`muted text-caption`,children:[r(`usage.card.cacheWriteTokens`),`: `,d(e.cacheCreationInputTokens??0,n)]})]}),(0,x.jsxs)(`div`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`muted`,children:r(`usage.card.coverage`)}),(0,x.jsx)(`div`,{className:`stat-value`,children:S(e.coverageRatio)})]}),(0,x.jsxs)(`div`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`muted`,children:r(`usage.card.activeDays`)}),(0,x.jsx)(`div`,{className:`stat-value`,children:t})]})]}),e.estimatedCostUsd!==void 0&&(0,x.jsxs)(`div`,{className:`usage-cost-row`,role:`note`,children:[(0,x.jsx)(`span`,{className:`muted`,children:r(`usage.cost.total`)}),(0,x.jsx)(`span`,{className:`stat-value mono usage-cost-value`,children:v(e.estimatedCostUsd,n)}),(0,x.jsx)(`span`,{className:`muted text-caption`,children:r(`usage.cost.disclaimer`)}),(e.unpricedRequests??0)+(e.unmeteredRequests??0)>0&&(0,x.jsx)(`span`,{className:`muted text-caption`,children:r(`usage.cost.unpricedNote`).replace(`{count}`,String((e.unpricedRequests??0)+(e.unmeteredRequests??0)))})]})]})}function N({weekBars:e,locale:t,t:n}){let[r,i]=(0,y.useState)(null),a=Math.max(1,...e.map(e=>e.totalTokens)),o=e.find(e=>e.date===r?.date),s=(e,t)=>{i({date:e.date,anchor:t.getBoundingClientRect()})};return(0,x.jsxs)(`div`,{className:`daybars`,role:`group`,"aria-label":n(`usage.section.heatmap`),children:[e.map(e=>{let r=Math.round(e.totalTokens/a*100),o=new Intl.DateTimeFormat(t,{weekday:`short`}).format(new Date(`${e.date}T12:00:00`));return(0,x.jsxs)(`button`,{type:`button`,className:`daybar`,"aria-label":D(e,t,n),onFocus:t=>s(e,t.currentTarget),onBlur:()=>i(t=>t?.date===e.date?null:t),onPointerEnter:t=>s(e,t.currentTarget),onPointerDown:t=>s(e,t.currentTarget),onPointerLeave:t=>{t.pointerType!==`touch`&&document.activeElement!==t.currentTarget&&i(t=>t?.date===e.date?null:t)},children:[(0,x.jsx)(`div`,{className:`daybar-track`,children:(0,x.jsxs)(`div`,{className:`daybar-stack`,style:{"--daybar-scale":String(Math.max(0,Math.min(1,r/100)))},children:[e.models.map(e=>(0,x.jsx)(`div`,{className:`daybar-seg`,style:{flexGrow:e.totalTokens,background:C(e.model,e.provider)}},`${e.provider}/${e.model}`)),e.models.length===0&&e.totalTokens>0&&(0,x.jsx)(`div`,{className:`daybar-seg`,style:{flexGrow:1,background:`var(--green)`}})]})}),(0,x.jsx)(`span`,{className:`daybar-count`,children:d(e.totalTokens,t)}),(0,x.jsx)(`span`,{className:`daybar-label muted`,children:o})]},e.date)}),r&&o&&(0,x.jsxs)(E,{className:`daybar-tip`,anchor:r.anchor,children:[(0,x.jsx)(`div`,{className:`daybar-tip-date`,children:c(o.date,t)}),(0,x.jsxs)(`div`,{className:`daybar-tip-row`,children:[(0,x.jsx)(`span`,{children:n(`usage.heatmap.tooltipRequests`,{requests:o.requests})}),(0,x.jsx)(`span`,{className:`daybar-tip-val`,children:n(`usage.heatmap.tooltipTokens`,{tokens:d(o.totalTokens,t)})})]}),o.models.slice(0,8).map(e=>(0,x.jsxs)(`div`,{className:`daybar-tip-row`,children:[(0,x.jsx)(`span`,{className:`daybar-tip-swatch`,style:{background:C(e.model,e.provider)}}),(0,x.jsx)(`span`,{className:`daybar-tip-name`,children:_(e.model)}),(0,x.jsx)(`span`,{className:`daybar-tip-val`,children:d(e.totalTokens,t)})]},`${e.provider}/${e.model}`))]})]})}function P({range:e,heatmap:t,weekBars:n,locale:r,t:i}){let a=(0,y.useRef)(null),o=(0,y.useMemo)(()=>t.weeks.flat().filter(e=>e.date),[t]),[s,l]=(0,y.useState)(()=>o.at(-1)?.date??``),[u,f]=(0,y.useState)(null),p=(0,y.useId)(),m=o.some(e=>e.date===s)?s:o.at(-1)?.date??``,h=(e,t)=>{l(e.date),f({date:e.date,anchor:t.getBoundingClientRect()})},g=(e,t)=>{let n=o.findIndex(e=>e.date===t.date),r=e.key===`ArrowUp`?-1:e.key===`ArrowDown`?1:e.key===`ArrowLeft`?-7:e.key===`ArrowRight`?7:0;if(!r||n<0)return;e.preventDefault();let i=o[Math.max(0,Math.min(o.length-1,n+r))];l(i.date);let s=a.current?.querySelector(`[data-date="${i.date}"]`);s&&(s.focus(),f({date:i.date,anchor:s.getBoundingClientRect()}))};return(0,y.useEffect)(()=>{let e=a.current;if(!e)return;let t=()=>{e.scrollLeft=e.scrollWidth};t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[t,e]),(0,x.jsxs)(`section`,{className:`panel`,style:{marginTop:16},"aria-labelledby":`usage-heatmap-title`,children:[(0,x.jsx)(`h3`,{id:`usage-heatmap-title`,className:`panel-title`,children:i(`usage.section.heatmap`)}),e===`7d`?(0,x.jsx)(N,{weekBars:n,locale:r,t:i}):(0,x.jsxs)(`div`,{className:`heatmap`,ref:a,children:[(0,x.jsxs)(`div`,{className:`heatmap-months`,style:{gridTemplateColumns:`28px repeat(${t.weeks.length}, calc(var(--hm-cell) + var(--hm-gap)))`},children:[(0,x.jsx)(`span`,{className:`heatmap-day-spacer`}),t.months.map(e=>(0,x.jsx)(`span`,{className:`heatmap-month`,style:{gridColumn:e.col+2},children:e.label},`${e.label}-${e.col}`))]}),(0,x.jsxs)(`div`,{className:`heatmap-body`,children:[(0,x.jsxs)(`div`,{className:`heatmap-days`,children:[(0,x.jsx)(`span`,{}),(0,x.jsx)(`span`,{children:i(`usage.dayMon`)}),(0,x.jsx)(`span`,{}),(0,x.jsx)(`span`,{children:i(`usage.dayWed`)}),(0,x.jsx)(`span`,{}),(0,x.jsx)(`span`,{children:i(`usage.dayFri`)}),(0,x.jsx)(`span`,{})]}),(0,x.jsx)(`div`,{className:`heatmap-grid`,role:`group`,"aria-labelledby":`usage-heatmap-title`,"aria-describedby":p,style:{gridTemplateColumns:`repeat(${t.weeks.length}, var(--hm-cell))`},children:t.weeks.map((e,t)=>(0,x.jsx)(`div`,{className:`heatmap-week`,children:e.map((e,n)=>e.date?(0,x.jsx)(`button`,{type:`button`,className:`heatmap-cell heatmap-cell-${e.level}`,"data-date":e.date,tabIndex:m===e.date?0:-1,"aria-label":D(e,r,i),onFocus:t=>h(e,t.currentTarget),onBlur:()=>f(t=>t?.date===e.date?null:t),onKeyDown:t=>g(t,e),onPointerEnter:t=>h(e,t.currentTarget),onPointerDown:t=>h(e,t.currentTarget),onPointerLeave:t=>{t.pointerType!==`touch`&&document.activeElement!==t.currentTarget&&f(t=>t?.date===e.date?null:t)}},e.date):(0,x.jsx)(`span`,{className:`heatmap-cell heatmap-cell-0`,"aria-hidden":`true`},`pad-${t}-${n}`))},e[0]?.date||`week-${t}`))})]}),(0,x.jsx)(`span`,{id:p,className:`sr-only`,children:i(`usage.heatmap.keyboardLabel`)}),(0,x.jsx)(`span`,{className:`sr-only`,"aria-live":`polite`,children:o.find(e=>e.date===m)?D(o.find(e=>e.date===m),r,i):``}),u&&(()=>{let e=o.find(e=>e.date===u.date);return e?.date?(0,x.jsxs)(E,{className:`heatmap-tip`,anchor:u.anchor,children:[(0,x.jsx)(`div`,{className:`heatmap-tip-date`,children:c(e.date,r)}),(0,x.jsx)(`div`,{className:`heatmap-tip-val`,children:i(`usage.heatmap.tooltipTokens`,{tokens:d(e.totalTokens,r)})}),(0,x.jsx)(`div`,{className:`heatmap-tip-req muted`,children:i(`usage.heatmap.tooltipRequests`,{requests:e.requests})})]}):null})(),(0,x.jsxs)(`div`,{className:`heatmap-legend muted`,children:[(0,x.jsx)(`span`,{children:i(`usage.heatmap.less`)}),[0,1,2,3,4].map(e=>(0,x.jsx)(`span`,{className:`heatmap-cell heatmap-cell-${e}`},e)),(0,x.jsx)(`span`,{children:i(`usage.heatmap.more`)})]})]})]})}function F({title:e,titleId:t,children:n}){return(0,x.jsxs)(`section`,{className:`usw-section`,"aria-labelledby":t,children:[(0,x.jsx)(`h3`,{id:t,className:`h-section`,children:e}),n]})}function I({models:e,modelQuery:t,onModelQuery:n,locale:r,t:a,workspace:o=!1}){let s=a(`usage.search.models`),c=a(`usage.section.models`),l=`usage-models-title`,u=(0,x.jsx)(`input`,{className:`input`,"aria-label":s,placeholder:s,value:t,onChange:e=>n(e.target.value)}),f=(0,x.jsx)(`div`,{className:`tbl-wrap`,children:(0,x.jsxs)(`table`,{className:`tbl`,children:[(0,x.jsx)(`thead`,{children:(0,x.jsxs)(`tr`,{children:[(0,x.jsx)(`th`,{children:a(`logs.col.model`)}),(0,x.jsx)(`th`,{children:a(`logs.col.provider`)}),(0,x.jsx)(`th`,{className:`num`,children:a(`usage.col.requests`)}),(0,x.jsx)(`th`,{className:`num`,children:a(`usage.col.measured`)}),(0,x.jsx)(`th`,{className:`num`,children:a(`usage.col.tokens`)}),(0,x.jsx)(`th`,{children:a(`usage.col.share`)})]})}),(0,x.jsx)(`tbody`,{children:e.map(e=>(0,x.jsxs)(`tr`,{children:[(0,x.jsx)(`td`,{className:`mono`,children:_(e.model)}),(0,x.jsx)(`td`,{className:`muted`,children:i(e.provider,a)}),(0,x.jsx)(`td`,{className:`num`,children:e.requests}),(0,x.jsx)(`td`,{className:`num`,children:e.measuredRequests}),(0,x.jsx)(`td`,{className:`num mono`,children:d(e.totalTokens,r)}),(0,x.jsx)(`td`,{children:(0,x.jsx)(`div`,{className:`usage-bar`,children:(0,x.jsx)(`div`,{className:`usage-bar-fill`,style:{width:`${Math.round(e.shareRatio*100)}%`}})})})]},`${e.provider}/${e.model}`))})]})});return o?(0,x.jsxs)(F,{title:c,titleId:l,children:[(0,x.jsx)(`div`,{className:`usw-section-toolbar`,children:u}),f]}):(0,x.jsxs)(`section`,{className:`panel`,style:{marginTop:16},"aria-labelledby":l,children:[(0,x.jsxs)(`div`,{className:`panel-head`,children:[(0,x.jsx)(`h3`,{id:l,className:`panel-title`,children:c}),u]}),f]})}function L({providers:e,locale:t,t:n,workspace:r=!1}){let a=n(`usage.section.providers`),o=`usage-providers-title`,s=(0,x.jsx)(`div`,{className:`tbl-wrap`,children:(0,x.jsxs)(`table`,{className:`tbl`,children:[(0,x.jsx)(`thead`,{children:(0,x.jsxs)(`tr`,{children:[(0,x.jsx)(`th`,{children:n(`logs.col.provider`)}),(0,x.jsx)(`th`,{className:`num`,children:n(`usage.col.requests`)}),(0,x.jsx)(`th`,{className:`num`,children:n(`usage.col.measured`)}),(0,x.jsx)(`th`,{className:`num`,children:n(`usage.col.tokens`)}),(0,x.jsx)(`th`,{children:n(`usage.col.share`)})]})}),(0,x.jsx)(`tbody`,{children:e.map(e=>(0,x.jsxs)(`tr`,{children:[(0,x.jsx)(`td`,{className:`mono`,children:i(e.provider,n)}),(0,x.jsx)(`td`,{className:`num`,children:e.requests}),(0,x.jsx)(`td`,{className:`num`,children:e.measuredRequests}),(0,x.jsx)(`td`,{className:`num mono`,children:d(e.totalTokens,t)}),(0,x.jsx)(`td`,{children:(0,x.jsx)(`div`,{className:`usage-bar`,children:(0,x.jsx)(`div`,{className:`usage-bar-fill`,style:{width:`${Math.round(e.shareRatio*100)}%`}})})})]},e.provider))})]})});return r?(0,x.jsx)(F,{title:a,titleId:o,children:s}):(0,x.jsxs)(`section`,{className:`panel`,style:{marginTop:16},"aria-labelledby":o,children:[(0,x.jsx)(`h3`,{id:o,className:`panel-title`,children:a}),s]})}function R({summary:e,t,workspace:n=!1}){let r=t(`usage.section.coverage`),i=`usage-coverage-title`,a=(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`div`,{className:`usage-cards usage-cards-3x2`,children:[(0,x.jsxs)(`div`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`muted`,children:t(`usage.coverage.measured`)}),(0,x.jsx)(`div`,{className:`stat-value`,children:e.measuredRequests})]}),(0,x.jsxs)(`div`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`muted`,children:t(`usage.coverage.reported`)}),(0,x.jsx)(`div`,{className:`stat-value`,children:e.reportedRequests})]}),(0,x.jsxs)(`div`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`muted`,children:t(`usage.coverage.estimated`)}),(0,x.jsx)(`div`,{className:`stat-value`,children:e.estimatedRequests})]}),(0,x.jsxs)(`div`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`muted`,children:t(`logs.tokens.unreported`)}),(0,x.jsx)(`div`,{className:`stat-value`,children:e.unreportedRequests})]}),(0,x.jsxs)(`div`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`muted`,children:t(`logs.tokens.unsupported`)}),(0,x.jsx)(`div`,{className:`stat-value`,children:e.unsupportedRequests})]})]}),(0,x.jsx)(`p`,{className:`muted text-control`,style:{marginTop:12},children:t(`usage.coverage.note`)})]});return n?(0,x.jsx)(F,{title:r,titleId:i,children:a}):(0,x.jsxs)(`section`,{className:`panel`,style:{marginTop:16},"aria-labelledby":i,children:[(0,x.jsx)(`h3`,{id:i,className:`panel-title`,children:r}),a]})}function z({data:e,heatmap:t,weekBars:n,activeDays:r,filteredModels:i,modelQuery:a,onModelQuery:s,sortedProviders:c,range:l,locale:u,t:d}){let f=!!e&&e.summary.requests===0,p=[{id:`overview`,label:d(`usage.section.overview`),meta:e?`${e.summary.requests}`:`—`,body:e?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(M,{summary:e.summary,activeDays:r,locale:u,t:d}),(0,x.jsx)(P,{range:l,heatmap:t,weekBars:n,locale:u,t:d})]}):null},{id:`models`,label:d(`usage.section.models`),meta:e?`${e.models.length}`:`—`,body:e?(0,x.jsx)(I,{models:i,modelQuery:a,onModelQuery:s,locale:u,t:d,workspace:!0}):null},{id:`providers`,label:d(`usage.section.providers`),meta:e?`${e.providers.length}`:`—`,body:e?(0,x.jsx)(L,{providers:c,locale:u,t:d,workspace:!0}):null},{id:`coverage`,label:d(`usage.section.coverage`),meta:e?S(e.summary.coverageRatio):`—`,body:e?(0,x.jsx)(R,{summary:e.summary,t:d,workspace:!0}):null}];return(0,x.jsx)(`div`,{className:`usage-workspace-shell`,children:(0,x.jsxs)(`div`,{className:`usage-workspace-root`,children:[(0,x.jsx)(g,{scope:`usage`,ariaLabel:d(`usage.workspace.sections`),items:p.map(e=>({id:e.id,label:e.label,meta:e.meta}))}),(0,x.jsx)(`section`,{className:`usage-workspace-main`,"aria-label":d(`usage.workspace.report`),children:f?(0,x.jsx)(o,{title:d(`usage.empty`)}):p.map(e=>(0,x.jsx)(`div`,{id:h(`usage`,e.id),className:`usw-body usw-section-block`,children:e.body},e.id))})]})})}var B=new Map;function V(e,t,n){return`ocx.usage.v1:${e}:${t}:${n}`}function H(e,t,n){let r=V(e,t,n);return B.get(r)??u(r)}function U(e,t,n,r){let i=V(e,t,n);B.set(i,r),l(i,r)}function W({apiBase:e}){let{t,locale:n}=r(),[i,o]=(0,y.useState)(`30d`),[s,c]=(0,y.useState)(`all`),[l,u]=(0,y.useState)(``),d=(0,y.useCallback)(async t=>{let n=await fetch(`${e}/api/usage?range=${i}&surface=${s}`,{signal:t});if(!n.ok)throw Error(`${n.status} ${n.statusText}`.trim());let r=await n.json();return U(e,i,s,r),r},[e,i,s]),f=V(e,i,s),h=H(e,i,s),g=p(f,[e,i,s],d,{isEmpty:()=>!1,initialData:h??void 0}),{state:_}=g,v=_.data??h??null,b=(0,y.useMemo)(()=>A(v?.days??[],n),[v?.days,n]),S=(0,y.useMemo)(()=>w(v?.days??[]),[v?.days]),C=(0,y.useMemo)(()=>(v?.days??[]).filter(e=>e.requests>0).length,[v?.days]),T=(0,y.useMemo)(()=>{let e=l.trim().toLowerCase(),t=(v?.models??[]).toSorted((e,t)=>t.totalTokens-e.totalTokens);return e?t.filter(t=>t.model.toLowerCase().includes(e)||t.provider.toLowerCase().includes(e)||(t.resolvedModel??``).toLowerCase().includes(e)).slice(0,100):t.slice(0,100)},[v?.models,l]),E=(0,y.useMemo)(()=>(v?.providers??[]).toSorted((e,t)=>t.totalTokens-e.totalTokens),[v?.providers]);return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`div`,{className:`page-head usage-head`,children:[(0,x.jsx)(`h2`,{id:`usage-page-title`,children:t(`usage.title`)}),(0,x.jsx)(j,{surface:s,range:i,onSurface:c,onRange:o,t})]}),(0,x.jsx)(`p`,{className:`page-sub`,children:t(`usage.subtitle`)}),_.showSkeleton&&!v?(0,x.jsx)(m,{label:t(`usage.loading`),rows:5}):_.kind===`failed-cold`?(0,x.jsxs)(a,{tone:`err`,children:[_.error instanceof Error?`${t(`usage.loadError`)} ${_.error.message}`:t(`usage.loadError`),` `,(0,x.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>g.refresh(),children:t(`common.retry`)})]}):(0,x.jsxs)(x.Fragment,{children:[_.showError&&(0,x.jsx)(a,{tone:`err`,children:t(`usage.loadError`)}),v?.historyTruncated&&(0,x.jsx)(a,{tone:`warn`,children:(()=>{let e=G(v.snapshotWindowStart),n=G(v.snapshotWindowEnd);return e!==null&&n!==null?t(`usage.historyTruncatedWindow`,{start:e,end:n}):t(`usage.historyTruncated`)})()}),(0,x.jsx)(z,{data:v,heatmap:b,weekBars:S,activeDays:C,filteredModels:T,modelQuery:l,onModelQuery:u,sortedProviders:E,range:i,locale:n,t})]})]})}function G(e){if(typeof e!=`number`||!Number.isFinite(e))return null;let t=new Date(e);return Number.isFinite(t.getTime())?t.toLocaleString():null}export{W as default};
@@ -1 +1 @@
1
- import{m as e,s as t}from"./shared-BdYGV-yJ.js";var n=e();function r(e){let{t:r}=t();return e.state===`stale`?(0,n.jsxs)(`div`,{className:`codex-stale-banner`,role:`status`,children:[(0,n.jsx)(`span`,{className:`codex-stale-banner-text`,children:r(`models.staleBanner`)}),(0,n.jsx)(`button`,{type:`button`,className:`btn btn-sm`,disabled:e.controller.restarting,onClick:()=>{e.controller.restart()},children:e.controller.restarting?r(`dash.codexRestarting`):r(`dash.codexRestart`)})]}):null}export{r as t};
1
+ import{m as e,s as t}from"./shared-DI18-uF7.js";var n=e();function r(e){let{t:r}=t();return e.state===`stale`?(0,n.jsxs)(`div`,{className:`codex-stale-banner`,role:`status`,children:[(0,n.jsx)(`span`,{className:`codex-stale-banner-text`,children:r(`models.staleBanner`)}),(0,n.jsx)(`button`,{type:`button`,className:`btn btn-sm`,disabled:e.controller.restarting,onClick:()=>{e.controller.restart()},children:e.controller.restarting?r(`dash.codexRestarting`):r(`dash.codexRestart`)})]}):null}export{r as t};
@@ -1 +1 @@
1
- import{m as e}from"./shared-BdYGV-yJ.js";var t=e();function n({className:e,style:n}){return(0,t.jsx)(`span`,{"aria-hidden":`true`,className:e?`data-surface-skeleton__block ${e}`:`data-surface-skeleton__block`,style:n})}function r({label:e,rows:r=3,className:i}){let a=Math.max(1,Math.floor(r));return(0,t.jsxs)(`div`,{className:i?`data-surface-skeleton ${i}`:`data-surface-skeleton`,role:`status`,"aria-live":`polite`,"aria-atomic":`true`,"aria-busy":`true`,children:[(0,t.jsx)(`span`,{className:`sr-only`,children:e}),Array.from({length:a},(e,r)=>(0,t.jsx)(`div`,{className:`data-surface-skeleton__row`,"aria-hidden":`true`,children:(0,t.jsx)(n,{})},r))]})}function i({children:e,busy:n=!0,live:r=!0,className:i}){return(0,t.jsxs)(`div`,{className:i?`data-surface-status ${i}`:`data-surface-status`,role:r?`status`:void 0,"aria-live":r?`polite`:void 0,"aria-atomic":r?`true`:void 0,"aria-busy":n||void 0,children:[n&&(0,t.jsx)(`span`,{className:`spin`,"aria-hidden":`true`}),(0,t.jsx)(`span`,{children:e})]})}export{i as n,r as t};
1
+ import{m as e}from"./shared-DI18-uF7.js";var t=e();function n({className:e,style:n}){return(0,t.jsx)(`span`,{"aria-hidden":`true`,className:e?`data-surface-skeleton__block ${e}`:`data-surface-skeleton__block`,style:n})}function r({label:e,rows:r=3,className:i}){let a=Math.max(1,Math.floor(r));return(0,t.jsxs)(`div`,{className:i?`data-surface-skeleton ${i}`:`data-surface-skeleton`,role:`status`,"aria-live":`polite`,"aria-atomic":`true`,"aria-busy":`true`,children:[(0,t.jsx)(`span`,{className:`sr-only`,children:e}),Array.from({length:a},(e,r)=>(0,t.jsx)(`div`,{className:`data-surface-skeleton__row`,"aria-hidden":`true`,children:(0,t.jsx)(n,{})},r))]})}function i({children:e,busy:n=!0,live:r=!0,className:i}){return(0,t.jsxs)(`div`,{className:i?`data-surface-status ${i}`:`data-surface-status`,role:r?`status`:void 0,"aria-live":r?`polite`:void 0,"aria-atomic":r?`true`:void 0,"aria-busy":n||void 0,children:[n&&(0,t.jsx)(`span`,{className:`spin`,"aria-hidden":`true`}),(0,t.jsx)(`span`,{children:e})]})}export{i as n,r as t};
@@ -1 +1 @@
1
- import{_ as e,h as t}from"./shared-BdYGV-yJ.js";import{g as n,m as r,xt as i}from"./index-CU1jE0st.js";var a=e(t(),1);function o(e,t,n){if(!n)return{kind:`disabled`,data:void 0,error:void 0,showSkeleton:!1,refreshing:!1,showError:!1};let r=e.data!==void 0,i=!e.lastAttemptOk&&e.error!==void 0;return e.refreshing?r?{kind:`loading-with-stale-data`,data:e.data,error:e.error,showSkeleton:!1,refreshing:!0,showError:i}:{kind:i?`retrying-cold`:`cold`,data:void 0,error:i?e.error:void 0,showSkeleton:!0,refreshing:!0,showError:!1}:i?r?{kind:`failed-with-stale`,data:e.data,error:e.error,showSkeleton:!1,refreshing:!1,showError:!0}:{kind:`failed-cold`,data:void 0,error:e.error,showSkeleton:!1,refreshing:!1,showError:!0}:r?{kind:t(e.data)?`ready-empty`:`ready-populated`,data:e.data,error:void 0,showSkeleton:!1,refreshing:!1,showError:!1}:{kind:`cold`,data:void 0,error:void 0,showSkeleton:!0,refreshing:!1,showError:!1}}function s(e,t,s,c){let{isEmpty:l,sessionCacheKey:u,...d}=c,f=(0,a.useMemo)(()=>u?r(u):null,[u]),p=(0,a.useCallback)(async e=>{let t=await s(e);return u&&n(u,t),t},[s,u]),m=i(e,t,p,{...d,...u?{initialData:d.initialData??f?.data,initialDataCachedAt:d.initialDataCachedAt??f?.cachedAt??null}:{}});return{...m,state:o(m,l,c.enabled!==!1)}}export{s as t};
1
+ import{_ as e,h as t}from"./shared-DI18-uF7.js";import{g as n,m as r,xt as i}from"./index-JEC_6CUW.js";var a=e(t(),1);function o(e,t,n){if(!n)return{kind:`disabled`,data:void 0,error:void 0,showSkeleton:!1,refreshing:!1,showError:!1};let r=e.data!==void 0,i=!e.lastAttemptOk&&e.error!==void 0;return e.refreshing?r?{kind:`loading-with-stale-data`,data:e.data,error:e.error,showSkeleton:!1,refreshing:!0,showError:i}:{kind:i?`retrying-cold`:`cold`,data:void 0,error:i?e.error:void 0,showSkeleton:!0,refreshing:!0,showError:!1}:i?r?{kind:`failed-with-stale`,data:e.data,error:e.error,showSkeleton:!1,refreshing:!1,showError:!0}:{kind:`failed-cold`,data:void 0,error:e.error,showSkeleton:!1,refreshing:!1,showError:!0}:r?{kind:t(e.data)?`ready-empty`:`ready-populated`,data:e.data,error:void 0,showSkeleton:!1,refreshing:!1,showError:!1}:{kind:`cold`,data:void 0,error:void 0,showSkeleton:!0,refreshing:!1,showError:!1}}function s(e,t,s,c){let{isEmpty:l,sessionCacheKey:u,...d}=c,f=(0,a.useMemo)(()=>u?r(u):null,[u]),p=(0,a.useCallback)(async e=>{let t=await s(e);return u&&n(u,t),t},[s,u]),m=i(e,t,p,{...d,...u?{initialData:d.initialData??f?.data,initialDataCachedAt:d.initialDataCachedAt??f?.cachedAt??null}:{}});return{...m,state:o(m,l,c.enabled!==!1)}}export{s as t};