ima2-gen 2.0.1 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/CHANGELOG.md +150 -0
  2. package/README.md +10 -1
  3. package/bin/commands/backfillThumbs.js +6 -0
  4. package/bin/commands/gen.js +6 -0
  5. package/bin/ima2.js +14 -10
  6. package/docs/API.md +131 -8
  7. package/docs/CLI.md +2 -1
  8. package/docs/FAQ.ko.md +16 -0
  9. package/docs/FAQ.md +30 -0
  10. package/docs/README.ko.md +7 -3
  11. package/docs/migration/runtime-test-inventory.md +15 -1
  12. package/lib/agentImageVideoGen.js +261 -0
  13. package/lib/agentRuntime.js +7 -262
  14. package/lib/agyImageAdapter.js +35 -8
  15. package/lib/errorClassify.js +8 -7
  16. package/lib/eventBus.js +71 -0
  17. package/lib/geminiApiImageAdapter.js +16 -20
  18. package/lib/generationErrors.js +3 -1
  19. package/lib/grokImageAdapter.js +68 -129
  20. package/lib/grokImageCore.js +153 -0
  21. package/lib/grokMultimodeAdapter.js +5 -3
  22. package/lib/grokVideoCanvas.js +13 -0
  23. package/lib/grokVideoPlannerPrompt.js +53 -6
  24. package/lib/historyList.js +1 -0
  25. package/lib/inflight.js +54 -17
  26. package/lib/multimodeHelpers.js +10 -0
  27. package/lib/nodeHelpers.js +59 -0
  28. package/lib/oauthProxy/prompts.js +30 -36
  29. package/lib/promptBuilder/systemPrompt.js +2 -5
  30. package/lib/promptSafetyPolicy.js +1 -5
  31. package/lib/responsesFallback.js +2 -1
  32. package/lib/routeHelpers.js +44 -0
  33. package/lib/ssePublish.js +12 -0
  34. package/lib/storyboardPrefix.js +28 -0
  35. package/lib/thumbBackfill.js +16 -5
  36. package/package.json +4 -1
  37. package/routes/agy.js +44 -0
  38. package/routes/auth.js +6 -2
  39. package/routes/edit.js +7 -1
  40. package/routes/events.js +78 -0
  41. package/routes/generate.js +99 -127
  42. package/routes/index.js +4 -0
  43. package/routes/multimode.js +99 -56
  44. package/routes/nodes.js +59 -103
  45. package/routes/video.js +100 -17
  46. package/skills/ima2/SKILL.md +98 -21
  47. package/ui/dist/.vite/manifest.json +12 -12
  48. package/ui/dist/assets/{AgentWorkspace-CYv84Rus.js → AgentWorkspace-Dth6YijN.js} +1 -1
  49. package/ui/dist/assets/{CardNewsWorkspace-Dqyc1WZ1.js → CardNewsWorkspace-Dav3K5CT.js} +1 -1
  50. package/ui/dist/assets/{NodeCanvas-ChEXzQbb.js → NodeCanvas-C4ifFzB1.js} +1 -1
  51. package/ui/dist/assets/{PromptBuilderPanel-B95ZufnR.js → PromptBuilderPanel-CEcyU9PL.js} +1 -1
  52. package/ui/dist/assets/{PromptImportDialog-DGOwFQET.js → PromptImportDialog-CgQ94Gth.js} +2 -2
  53. package/ui/dist/assets/{PromptImportDiscoverySection-CgvdnR49.js → PromptImportDiscoverySection-CuzyzbNI.js} +1 -1
  54. package/ui/dist/assets/{PromptImportFolderSection-CfUye9J8.js → PromptImportFolderSection-DHLGlO6l.js} +1 -1
  55. package/ui/dist/assets/{PromptLibraryPanel-B9kndPw1.js → PromptLibraryPanel-BOe18we8.js} +2 -2
  56. package/ui/dist/assets/SettingsWorkspace-Cdgnm4Wa.js +1 -0
  57. package/ui/dist/assets/{index-BhcvL0g-.js → index-C5PSahkr.js} +1 -1
  58. package/ui/dist/assets/index-Dn2AhL6d.css +1 -0
  59. package/ui/dist/assets/index-Tjqx6wUV.js +23 -0
  60. package/ui/dist/index.html +2 -2
  61. package/ui/dist/assets/SettingsWorkspace-B3tgLrmF.js +0 -1
  62. package/ui/dist/assets/index-BtK3YhJc.js +0 -39
  63. package/ui/dist/assets/index-ClOLOjnA.css +0 -1
@@ -34,8 +34,8 @@
34
34
  }
35
35
  })();
36
36
  </script>
37
- <script type="module" crossorigin src="/assets/index-BtK3YhJc.js"></script>
38
- <link rel="stylesheet" crossorigin href="/assets/index-ClOLOjnA.css">
37
+ <script type="module" crossorigin src="/assets/index-Tjqx6wUV.js"></script>
38
+ <link rel="stylesheet" crossorigin href="/assets/index-Dn2AhL6d.css">
39
39
  </head>
40
40
  <body>
41
41
  <div id="root"></div>
@@ -1 +0,0 @@
1
- import{u as j,a as c,j as e,h as I,k as P,l as F,m as B,b as y,o as M,p as D,T as z,I as G,W as U}from"./index-BtK3YhJc.js";function L({provider:s,label:a,placeholder:r,maskedKey:t,source:i,configured:o,onSaved:u}){const{t:d}=j(),[h,n]=c.useState(""),[m,p]=c.useState(!1),[g,b]=c.useState(!1),[l,x]=c.useState(null),[f,_]=c.useState(!1),N=i==="env",v=h.trim().length>0,k=o&&!m&&!v,E=c.useCallback(async()=>{if(v){b(!0),x(null),_(!1);try{const $=await(await fetch(`/api/keys/${s}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:h.trim()})})).json();$.ok?(n(""),p(!1),_(!0),u(),setTimeout(()=>_(!1),3e3)):x($.error||"Failed to save")}catch(w){x(w.message||"Network error")}finally{b(!1)}}},[h,s,v,u]),S=c.useCallback(async()=>{try{if(!(await fetch(`/api/keys/${s}`,{method:"DELETE"})).ok){x("Failed to remove key");return}n(""),p(!1),u()}catch(w){x(w.message||"Failed to remove key")}},[s,u]),T=c.useCallback(()=>{o&&p(!0)},[o]),O=c.useCallback(()=>{v||p(!1)},[v]);return e.jsxs("article",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row__copy",children:[e.jsx("p",{className:"settings-eyebrow",children:d(N?"settings.apiKeys.envSource":"settings.apiKeys.configSource")}),e.jsx("h4",{children:a}),e.jsxs("div",{className:"api-key-input-group",children:[k?e.jsx("input",{type:"text",className:"api-key-input is-masked",value:t||"●●●●●●",readOnly:!0,onFocus:T,onClick:T}):e.jsx("input",{type:"password",className:`api-key-input${l?" is-invalid":""}`,placeholder:r,value:h,onChange:w=>{n(w.target.value),x(null)},onBlur:O,readOnly:!1,autoComplete:"off",autoFocus:m,spellCheck:!1,"data-1p-ignore":!0,"data-lpignore":"true","data-form-type":"other"}),e.jsxs("div",{className:"api-key-actions",children:[e.jsx("button",{type:"button",className:"settings-action-btn",onClick:E,disabled:!v||g,children:d(g?"settings.apiKeys.saving":f?"settings.apiKeys.saved":"settings.apiKeys.save")}),o&&!N&&e.jsx("button",{type:"button",className:"settings-action-btn settings-action-btn--danger",onClick:S,children:d("settings.apiKeys.remove")})]})]}),l&&e.jsx("p",{className:"api-key-error",children:l})]}),e.jsxs("div",{className:`settings-status${o?" is-ok":""}`,children:[e.jsx("span",{"aria-hidden":"true"}),d(o?"settings.apiKeys.status.valid":"settings.apiKeys.status.notConfigured")]})]})}function W({configured:s,maskedKey:a,source:r,onSaved:t}){const{t:i}=j(),[o,u]=c.useState(""),[d,h]=c.useState(!1),[n,m]=c.useState(!1),[p,g]=c.useState(null),[b,l]=c.useState(!1),x=r==="env",f=o.trim().length>0,_=s&&!d&&!f,N=c.useCallback(async()=>{if(f){m(!0),g(null),l(!1);try{const T=await(await fetch("/api/keys/vertex",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({serviceAccountJson:o.trim()})})).json();T.ok?(u(""),h(!1),l(!0),t(),setTimeout(()=>l(!1),3e3)):g(T.error||"Failed to save")}catch(S){g(S.message||"Network error")}finally{m(!1)}}},[o,f,t]),v=c.useCallback(async()=>{try{await fetch("/api/keys/vertex",{method:"DELETE"}),u(""),h(!1),t()}catch{}},[t]),k=c.useCallback(()=>{s&&!x&&h(!0)},[s,x]),E=c.useCallback(()=>{f||h(!1)},[f]);return e.jsxs("div",{className:"vertex-json-section",children:[e.jsx("p",{className:"settings-eyebrow",children:i(x?"settings.apiKeys.envSource":"settings.apiKeys.configSource")}),s&&a&&e.jsx("p",{className:"vertex-project-id",children:a}),_?e.jsx("textarea",{className:"vertex-json-textarea is-masked",value:"●●● (configured — click to replace)",readOnly:!0,onFocus:k,onClick:k}):e.jsx("textarea",{className:`vertex-json-textarea${p?" is-invalid":""}`,placeholder:i("settings.apiKeys.vertex.placeholder"),value:o,onChange:S=>{u(S.target.value),g(null)},onBlur:E,readOnly:x,autoFocus:d,spellCheck:!1,"data-1p-ignore":!0,"data-lpignore":"true","data-form-type":"other"}),e.jsxs("div",{className:"api-key-actions",style:{marginTop:8},children:[!x&&e.jsx("button",{type:"button",className:"settings-action-btn",onClick:N,disabled:!f||n,children:i(n?"settings.apiKeys.saving":b?"settings.apiKeys.saved":"settings.apiKeys.save")}),s&&!x&&e.jsx("button",{type:"button",className:"settings-action-btn settings-action-btn--danger",onClick:v,children:i("settings.apiKeys.remove")})]}),p&&e.jsx("p",{className:"api-key-error",children:p}),e.jsxs("div",{className:`settings-status${s?" is-ok":""}`,style:{marginTop:8},children:[e.jsx("span",{"aria-hidden":"true"}),i(s?"settings.apiKeys.status.valid":"settings.apiKeys.status.notConfigured")]})]})}function J({keyStatus:s,onSaved:a}){const{t:r}=j(),t=s.vertex?.configured??!1,i=s.gemini?.configured??!1,[o,u]=c.useState(t&&!i?"vertex":"apikey"),[d,h]=c.useState(!1);return c.useEffect(()=>{d||u(t&&!i?"vertex":"apikey")},[t,i,d]),e.jsxs("div",{className:"gemini-key-section",children:[e.jsxs("div",{className:"gemini-key-section__header",children:[e.jsx("h5",{children:r("settings.apiKeys.gemini.label")}),e.jsxs("select",{value:o,onChange:n=>{h(!0),u(n.target.value)},className:"gemini-auth-mode-select",children:[e.jsx("option",{value:"apikey",children:r("settings.apiKeys.vertex.authModeApiKey")}),e.jsx("option",{value:"vertex",children:r("settings.apiKeys.vertex.authModeVertex")})]})]}),o==="apikey"?e.jsx(L,{provider:"gemini",label:"",placeholder:r("settings.apiKeys.gemini.placeholder"),maskedKey:s.gemini?.maskedKey??null,source:s.gemini?.source??"none",configured:i,onSaved:a}):e.jsx(W,{configured:t,maskedKey:s.vertex?.maskedKey??null,source:s.vertex?.source??"none",onSaved:a})]})}function R(s,a){return s(a==="ready"?"settings.account.status.ready":a==="auth_required"?"settings.account.status.authRequired":a==="starting"?"settings.account.status.starting":a==="offline"?"settings.account.status.offline":a==="no_image_model"?"settings.account.status.noImageModel":a==="error"?"settings.account.status.error":"settings.account.status.checking")}function V(){const{t:s}=j(),a=I(),r=P(),{data:t,error:i}=F(),{data:o,mutate:u}=B(),[d,h]=c.useState(!1),n=t?.apiKeySource==="env"||t?.apiKeySource==="config"||t?.apiKeyValid===!0,m=a?.status==="ready",p=t?.apiKeySource==="config"?s("settings.account.apiSourceConfig"):s("settings.account.apiSourceEnv"),g=t?.apiKeyValid===!0,b=r?.status==="ready";return e.jsxs(e.Fragment,{children:[e.jsxs("article",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row__copy",children:[e.jsx("p",{className:"settings-eyebrow",children:s("settings.account.primaryEyebrow")}),e.jsx("h4",{children:s("settings.account.oauthTitle")}),e.jsx("p",{children:s("settings.account.oauthBody")})]}),e.jsxs("div",{className:`settings-status${m?" is-ok":""}`,children:[e.jsx("span",{"aria-hidden":"true"}),R(s,a?.status)]})]}),n?e.jsxs("article",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row__copy",children:[e.jsx("p",{className:"settings-eyebrow",children:p}),e.jsx("h4",{children:s("settings.account.apiTitle")}),e.jsx("p",{children:s("settings.account.apiBody")})]}),e.jsxs("div",{className:`settings-status${g?" is-ok":" is-muted"}`,children:[e.jsx("span",{"aria-hidden":"true"}),s(i?"settings.account.apiUnknown":g?"settings.account.apiReady":"settings.account.apiUnavailable")]})]}):null,e.jsxs("article",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row__copy",children:[e.jsx("p",{className:"settings-eyebrow",children:s("settings.account.grokEyebrow")}),e.jsx("h4",{children:s("settings.account.grokTitle")}),e.jsx("p",{children:s("settings.account.grokBody")})]}),e.jsxs("div",{className:`settings-status${b?" is-ok":" is-muted"}`,children:[e.jsx("span",{"aria-hidden":"true"}),R(s,r?.status)]})]}),o&&e.jsxs("article",{className:"settings-row settings-accordion",children:[e.jsxs("button",{type:"button",className:"settings-accordion__trigger",onClick:()=>h(!d),children:[e.jsx("h4",{children:s("settings.apiKeys.accordionTitle")}),e.jsx("span",{className:`settings-accordion__arrow${d?" is-open":""}`,children:"▼"})]}),d&&e.jsxs("div",{className:"settings-accordion__body",children:[e.jsx(L,{provider:"openai",label:s("settings.apiKeys.openai.label"),placeholder:s("settings.apiKeys.openai.placeholder"),maskedKey:o.openai?.maskedKey??null,source:o.openai?.source??"none",configured:o.openai?.configured??!1,onSaved:u}),e.jsx(L,{provider:"xai",label:s("settings.apiKeys.xai.label"),placeholder:s("settings.apiKeys.xai.placeholder"),maskedKey:o.xai?.maskedKey??null,source:o.xai?.source??"none",configured:o.xai?.configured??!1,onSaved:u}),e.jsx(J,{keyStatus:o,onSaved:u})]})]})]})}function H(){const{t:s}=j(),a=y(i=>i.reasoningEffort),r=y(i=>i.setReasoningEffort),t=i=>{r(i.target.value)};return e.jsx("div",{className:"image-model-select image-model-select--settings",children:e.jsx("select",{id:"settings-reasoning-effort",value:a,onChange:t,children:M.map(i=>e.jsx("option",{value:i.value,children:s(i.fullLabelKey)},i.value))})})}const Q={ko:"KO",en:"EN"};function X(){const{t:s,locale:a}=j(),r=y(t=>t.setLocale);return e.jsx("div",{className:"lang-toggle",role:"group","aria-label":s("language.label"),children:D.map(t=>e.jsx("button",{type:"button",className:`lang-toggle__btn ${a===t?"is-active":""}`,onClick:()=>r(t),"aria-pressed":a===t,title:s(`language.${t}`),children:e.jsx("span",{className:"lang-toggle__label",children:Q[t]})},t))})}const Y=["system","dark","light"];function Z(){const{t:s}=j(),a=y(n=>n.theme),r=y(n=>n.setTheme),t=y(n=>n.themeFamily),i=y(n=>n.setThemeFamily),[o,u]=c.useState(!1),d=c.useRef(null);c.useEffect(()=>{if(!o)return;const n=p=>{d.current&&(d.current.contains(p.target)||u(!1))},m=p=>{p.key==="Escape"&&u(!1)};return document.addEventListener("mousedown",n),document.addEventListener("keydown",m),()=>{document.removeEventListener("mousedown",n),document.removeEventListener("keydown",m)}},[o]);const h=n=>s(`theme.family.${n}`);return e.jsxs("div",{className:"theme-toggle","aria-label":s("theme.label"),children:[e.jsxs("div",{className:"theme-toggle__row",children:[e.jsx("span",{className:"theme-toggle__label",id:"theme-style-label",children:s("theme.styleLabel")}),e.jsxs("div",{className:"theme-toggle__family",ref:d,children:[e.jsxs("button",{type:"button",className:"theme-toggle__family-trigger","aria-haspopup":"listbox","aria-expanded":o,"aria-labelledby":"theme-style-label",onClick:()=>u(n=>!n),children:[e.jsx("span",{className:`theme-toggle__family-dot theme-toggle__family-dot--${t}`,"aria-hidden":"true"}),e.jsx("span",{className:"theme-toggle__family-name",children:h(t)}),e.jsx("span",{className:"theme-toggle__family-caret","aria-hidden":"true",children:"▾"})]}),o?e.jsx("ul",{className:"theme-toggle__family-menu",role:"listbox","aria-labelledby":"theme-style-label",children:z.map(n=>e.jsx("li",{role:"none",children:e.jsxs("button",{type:"button",role:"option","aria-selected":t===n,className:`theme-toggle__family-option ${t===n?"is-active":""}`,onClick:()=>{i(n),u(!1)},children:[e.jsx("span",{className:`theme-toggle__family-dot theme-toggle__family-dot--${n}`,"aria-hidden":"true"}),e.jsx("span",{className:"theme-toggle__family-name",children:h(n)})]})},n))}):null]})]}),e.jsxs("div",{className:"theme-toggle__row",children:[e.jsx("span",{className:"theme-toggle__label",id:"theme-mode-label",children:s("theme.modeLabel")}),e.jsx("div",{className:"theme-toggle__mode",role:"group","aria-labelledby":"theme-mode-label",children:Y.map(n=>e.jsx("button",{type:"button",className:`theme-toggle__btn ${a===n?"is-active":""}`,onClick:()=>r(n),"aria-pressed":a===n,title:s(`theme.${n}`),children:s(`theme.${n}`)},n))})]})]})}const ee=["rail","horizontal","sidebar"];function se(){const{t:s}=j(),a=y(t=>t.historyStripLayout),r=y(t=>t.setHistoryStripLayout);return e.jsx("div",{className:"history-layout-toggle",role:"group","aria-label":s("settings.appearance.historyStripLayoutTitle"),children:ee.map(t=>e.jsx("button",{type:"button",className:`history-layout-toggle__btn ${a===t?"is-active":""}`,onClick:()=>r(t),"aria-pressed":a===t,title:s(`settings.appearance.historyStripLayout.${t}`),children:s(`settings.appearance.historyStripLayout.${t}`)},t))})}const te=[{value:"default",labelKey:"workspace.defaultLabel",descKey:"workspace.defaultDesc"},{value:"prompt-studio",labelKey:"workspace.promptStudioLabel",descKey:"workspace.promptStudioDesc"}];function ae(){const s=y(t=>t.workspaceProfile),a=y(t=>t.setWorkspaceProfile),{t:r}=j();return e.jsx("div",{className:"settings-field",children:e.jsx("select",{id:"workspace-profile-select",className:"settings-field__select",value:s,onChange:t=>a(t.target.value),"aria-label":r("workspace.profileLabel"),children:te.map(t=>e.jsx("option",{value:t.value,children:r(t.labelKey)},t.value))})})}function ne(s){return s>80?"var(--error, #e53935)":s>50?"var(--warning, #f59e0b)":"var(--info, #3b82f6)"}function ie(s){if(!s)return"";const a=new Date(s);return`${a.getMonth()+1}/${a.getDate()} ${String(a.getHours()).padStart(2,"0")}:${String(a.getMinutes()).padStart(2,"0")}`}function re(){return e.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",children:e.jsx("path",{d:"M22.282 9.821a5.985 5.985 0 0 0-.516-4.91 6.046 6.046 0 0 0-6.51-2.9A6.065 6.065 0 0 0 4.981 4.18a5.998 5.998 0 0 0-3.998 2.9 6.049 6.049 0 0 0 .743 7.097 5.98 5.98 0 0 0 .51 4.911 6.051 6.051 0 0 0 6.515 2.9A5.985 5.985 0 0 0 13.26 24a6.056 6.056 0 0 0 5.772-4.206 5.99 5.99 0 0 0 3.997-2.9 6.056 6.056 0 0 0-.747-7.073zM13.26 22.43a4.476 4.476 0 0 1-2.876-1.04l.141-.081 4.779-2.758a.795.795 0 0 0 .392-.681v-6.737l2.02 1.168a.071.071 0 0 1 .038.052v5.583a4.504 4.504 0 0 1-4.494 4.494zM3.6 18.304a4.47 4.47 0 0 1-.535-3.014l.142.085 4.783 2.759a.771.771 0 0 0 .78 0l5.843-3.369v2.332a.08.08 0 0 1-.033.062L9.74 19.95a4.5 4.5 0 0 1-6.14-1.646zM2.34 7.896a4.485 4.485 0 0 1 2.366-1.973V11.6a.766.766 0 0 0 .388.676l5.815 3.355-2.02 1.168a.076.076 0 0 1-.071 0l-4.83-2.786A4.504 4.504 0 0 1 2.34 7.872zm16.597 3.855l-5.833-3.387L15.119 7.2a.076.076 0 0 1 .071 0l4.83 2.791a4.494 4.494 0 0 1-.676 8.105v-5.678a.79.79 0 0 0-.407-.667zm2.01-3.023l-.141-.085-4.774-2.782a.776.776 0 0 0-.785 0L9.409 9.23V6.897a.066.066 0 0 1 .028-.061l4.83-2.787a4.5 4.5 0 0 1 6.68 4.66zm-12.64 4.135l-2.02-1.164a.08.08 0 0 1-.038-.057V6.075a4.5 4.5 0 0 1 7.375-3.453l-.142.08L8.704 5.46a.795.795 0 0 0-.393.681zm1.097-2.365l2.602-1.5 2.607 1.5v2.999l-2.597 1.5-2.612-1.5z"})})}function le(){return e.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor",fillRule:"evenodd","aria-hidden":"true",children:e.jsx("path",{d:"M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815"})})}function A({window:s}){const a=ie(s.resetsAt);return e.jsxs("div",{className:"quota-bar",children:[e.jsx("span",{className:"quota-bar__label",children:s.label}),e.jsx("div",{className:"quota-bar__track",children:e.jsx("div",{className:"quota-bar__fill",style:{width:`${Math.min(s.percent,100)}%`,background:ne(s.percent)}})}),e.jsxs("span",{className:"quota-bar__pct",children:[s.percent,"%"]}),a&&e.jsx("span",{className:"quota-bar__reset",children:a})]})}function q({provider:s,onComplete:a}){const[r,t]=c.useState({phase:"idle"}),[i,o]=c.useState(!1),u=c.useRef(!1),d=c.useCallback(async()=>{if(!u.current){u.current=!0,t({phase:"starting"});try{const h=await fetch("/api/auth/switch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:s})});if(!h.ok){const m=await h.json().catch(()=>({error:"Request failed"}));t({phase:"error",error:m.error||`HTTP ${h.status}`});return}const n=await h.json();t({phase:"waiting",...n}),window.open(n.verificationUrl,"_blank")}catch(h){u.current=!1,t({phase:"error",error:h.message})}}},[s]);return c.useEffect(()=>{if(r.phase!=="waiting"||!r.sessionId)return;let h=!1;const n=async()=>{try{const g=await(await fetch(`/api/auth/switch/${r.sessionId}`)).json();if(h)return;if(g.status==="complete"){t({phase:"complete"}),setTimeout(a,1e3);return}if(g.status==="error"||g.status==="expired"){t({phase:"error",error:g.error||g.status});return}}catch{}h||setTimeout(n,3e3)},m=setTimeout(n,3e3);return()=>{h=!0,clearTimeout(m)}},[r.phase,r.sessionId,a]),r.phase==="idle"?e.jsxs("button",{type:"button",className:"settings-action-btn",style:{width:"100%",marginTop:"6px"},onClick:d,children:["Switch ",s==="grok"?"Grok":"Codex"," Account"]}):r.phase==="starting"?e.jsx("div",{className:"quota-card__hint",style:{textAlign:"center",marginTop:"6px"},children:"Starting login..."}):r.phase==="waiting"?e.jsxs("div",{style:{marginTop:"6px",padding:"8px",background:"var(--surface, #f5f5f5)",borderRadius:"6px",fontSize:"12px"},children:[e.jsx("div",{style:{textAlign:"center",marginBottom:"4px"},children:"Enter this code in the opened tab:"}),e.jsx("div",{style:{textAlign:"center",fontSize:"18px",fontWeight:700,fontFamily:"monospace",letterSpacing:"2px",margin:"6px 0"},children:r.userCode}),r.verificationUrl&&e.jsxs("div",{style:{display:"flex",gap:"4px",margin:"6px 0"},children:[e.jsx("button",{type:"button",className:"settings-action-btn",style:{flex:1,fontSize:"11px"},onClick:()=>window.open(r.verificationUrl,"_blank"),children:"Open tab again"}),e.jsx("button",{type:"button",className:"settings-action-btn",style:{flex:1,fontSize:"11px"},onClick:()=>{navigator.clipboard?.writeText(r.verificationUrl).then(()=>{o(!0),setTimeout(()=>o(!1),2e3)})},children:i?"Copied!":"Copy link"})]}),e.jsx("div",{style:{textAlign:"center",color:"var(--text-dim, #888)",fontSize:"11px"},children:"Waiting for approval..."})]}):r.phase==="complete"?e.jsx("div",{className:"quota-card__hint",style:{textAlign:"center",marginTop:"6px",color:"var(--success, #22c55e)"},children:"Account switched! Refreshing..."}):e.jsxs("div",{style:{marginTop:"6px"},children:[e.jsx("div",{className:"quota-card__hint",style:{color:"var(--error, #e53935)",marginBottom:"4px"},children:r.error||"Switch failed"}),e.jsx("button",{type:"button",className:"settings-action-btn",style:{width:"100%",fontSize:"11px"},onClick:()=>{u.current=!1,t({phase:"idle"})},children:"Try again"})]})}function ce(){const{t:s}=j(),[a,r]=c.useState(null),[t,i]=c.useState(!0),o=c.useCallback(()=>{i(!0),fetch("/api/quota").then(g=>g.json()).then(r).catch(()=>r(null)).finally(()=>i(!1))},[]);c.useEffect(()=>{const g=setTimeout(o,1500);return()=>clearTimeout(g)},[o]);const u=a?.codex,d=a?.grok,h=u?.windows&&u.windows.length>0,n=d?.windows&&d.windows.length>0,m=u?.account?[u.account.email,u.account.plan].filter(Boolean).join(" · "):null,p=d?.account?[d.account.email,d.account.plan].filter(Boolean).join(" · "):null;return e.jsxs("article",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row__copy",children:[e.jsx("p",{className:"settings-eyebrow",children:s("settings.quota.eyebrow")}),e.jsx("h4",{children:s("settings.quota.title")})]}),e.jsxs("div",{className:"settings-row__control quota-cards",children:[e.jsxs("div",{className:"quota-card",children:[e.jsxs("div",{className:"quota-card__header",children:[e.jsx(re,{}),e.jsx("strong",{children:"Codex"}),m&&e.jsx("span",{className:"quota-card__account",children:m})]}),t?e.jsx("span",{className:"quota-card__loading",children:s("common.loading")}):h?u.windows.map(g=>e.jsx(A,{window:g},g.label)):u?.authenticated===!1?e.jsx("span",{className:"quota-card__hint",children:s("settings.quota.codexNotLoggedIn")}):u?.error?e.jsx("span",{className:"quota-card__hint",children:s("settings.quota.fetchError")}):e.jsx("span",{className:"quota-card__hint",children:s("settings.quota.noData")}),e.jsx(q,{provider:"codex",onComplete:o})]}),e.jsxs("div",{className:"quota-card",children:[e.jsxs("div",{className:"quota-card__header",style:{display:"flex",alignItems:"center"},children:[e.jsx(le,{}),e.jsx("strong",{children:"Grok"}),p&&e.jsx("span",{className:"quota-card__account",children:p}),d?.billing&&e.jsxs("span",{style:{marginLeft:"auto",fontSize:"11px",color:"var(--text-dim, #888)",whiteSpace:"nowrap"},children:["$",d.billing.usedUsd.toFixed(1),"/$",d.billing.limitUsd]})]}),t?e.jsx("span",{className:"quota-card__loading",children:s("common.loading")}):n?d.windows.map(g=>e.jsx(A,{window:g},g.label)):d?.authenticated===!1?e.jsx("span",{className:"quota-card__hint",children:"Not logged in"}):e.jsx("a",{href:"https://grok.com/?_s=usage",target:"_blank",rel:"noopener noreferrer",className:"settings-action-btn",children:s("settings.quota.grokUsageLink")}),e.jsx(q,{provider:"grok",onComplete:o})]})]})]})}function oe(){const{t:s}=j(),[a,r]=c.useState(null);c.useEffect(()=>{fetch("/api/config/grok-planner").then(i=>i.json()).then(r).catch(()=>{})},[]);const t=async i=>{try{await fetch("/api/config/grok-planner",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:i})}),r(o=>o?{...o,model:i}:null)}catch{}};return a?e.jsxs("article",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row__copy",children:[e.jsx("h4",{children:s("settings.grokPlanner.title")}),e.jsx("p",{children:s("settings.grokPlanner.body")})]}),e.jsx("div",{className:"settings-row__control",children:e.jsx("select",{value:a.model,onChange:i=>{t(i.target.value)},"aria-label":s("settings.grokPlanner.title"),children:a.options.map(i=>e.jsx("option",{value:i,children:i},i))})})]}):null}const K=["account","generation","appearance","workspace","language","future"];function C({id:s,setRef:a,children:r}){const{t}=j();return e.jsxs("section",{id:s,ref:i=>a(s,i),className:"settings-section","aria-labelledby":`settings-section-${s}`,children:[e.jsx("header",{className:"settings-section__header",children:e.jsxs("div",{children:[e.jsx("h3",{id:`settings-section-${s}`,children:t(`settings.sections.${s}.title`)}),e.jsx("p",{children:t(`settings.sections.${s}.hint`)})]})}),e.jsx("div",{className:"settings-section__body",children:r})]})}function ue(){const{t:s}=j(),a=y(l=>l.activeSettingsSection),r=y(l=>l.setActiveSettingsSection),t=y(l=>l.closeSettings),i=y(l=>l.openReadinessPopup),o=y(l=>l.galleryDefaultScope),u=y(l=>l.setGalleryDefaultScope),d=y(l=>l.provider),h=c.useRef(null),n=c.useRef(null),m=c.useRef(!1),p=c.useRef({account:null,generation:null,appearance:null,workspace:null,language:null,future:null}),g=(l,x)=>{p.current[l]=x},b=l=>{r(l),m.current=!0,p.current[l]?.scrollIntoView({behavior:"auto",block:"start"}),n.current!==null&&window.clearTimeout(n.current),n.current=window.setTimeout(()=>{m.current=!1,n.current=null},120)};return c.useEffect(()=>{const l=x=>{x.key==="Escape"&&t()};return window.addEventListener("keydown",l),()=>window.removeEventListener("keydown",l)},[t]),c.useEffect(()=>{const l=h.current;if(!l||typeof IntersectionObserver!="function")return;const x=new IntersectionObserver(f=>{if(m.current)return;const N=f.filter(v=>v.isIntersecting).sort((v,k)=>k.intersectionRatio-v.intersectionRatio)[0]?.target.id;N&&K.includes(N)&&r(N)},{root:l,threshold:[.35,.6]});for(const f of K){const _=p.current[f];_&&x.observe(_)}return()=>x.disconnect()},[r]),c.useEffect(()=>()=>{n.current!==null&&window.clearTimeout(n.current)},[]),e.jsx("main",{ref:h,className:"settings-workspace","aria-labelledby":"settings-title",children:e.jsxs("div",{className:"settings-shell",children:[e.jsxs("header",{className:"settings-header",children:[e.jsxs("div",{children:[e.jsx("p",{className:"settings-eyebrow",children:s("settings.eyebrow")}),e.jsx("h2",{id:"settings-title",children:s("settings.title")}),e.jsx("p",{children:s("settings.subtitle")})]}),e.jsx("button",{type:"button",className:"settings-close",onClick:t,"aria-label":s("settings.closeAria"),title:s("settings.closeTitle"),children:"X"})]}),e.jsxs("div",{className:"settings-layout",children:[e.jsx("nav",{className:"settings-nav settings-nav--mobile","aria-label":s("settings.navAria"),children:e.jsx("div",{className:"settings-mobile-nav",role:"list",children:K.map(l=>e.jsxs("button",{type:"button",className:`settings-mobile-nav__item${a===l?" is-active":""}`,onClick:()=>b(l),"aria-current":a===l?"true":void 0,children:[e.jsx("span",{children:s(`settings.sections.${l}.title`)}),e.jsx("small",{children:s(`settings.sections.${l}.hint`)})]},l))})}),e.jsx("nav",{className:"settings-nav","aria-label":s("settings.navAria"),children:K.map(l=>e.jsxs("button",{type:"button",className:`settings-nav__item${a===l?" is-active":""}`,onClick:()=>b(l),"aria-label":s("settings.jumpTo",{section:s(`settings.sections.${l}.title`)}),children:[e.jsx("span",{children:s(`settings.sections.${l}.title`)}),e.jsx("small",{children:s(`settings.sections.${l}.hint`)})]},l))}),e.jsxs("section",{className:"settings-content","aria-label":s("settings.contentAria"),children:[e.jsxs(C,{id:"account",setRef:g,children:[e.jsx(V,{}),e.jsx(ce,{}),e.jsxs("article",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row__copy",children:[e.jsx("h4",{children:s("readiness.settingsTitle")}),e.jsx("p",{children:s("readiness.settingsBody")})]}),e.jsx("div",{className:"settings-row__control",children:e.jsx("button",{type:"button",className:"settings-action-btn",onClick:i,children:s("readiness.open")})})]})]}),e.jsxs(C,{id:"generation",setRef:g,children:[e.jsxs("article",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row__copy",children:[e.jsx("h4",{children:s("settings.imageModel.title")}),e.jsx("p",{children:s("settings.imageModel.body")}),e.jsx("p",{className:"settings-row__microcopy",children:s("settings.imageModel.unsupportedHelp")})]}),e.jsx("div",{className:"settings-row__control",children:e.jsx(G,{variant:"settings"})})]}),d==="grok"?e.jsxs(e.Fragment,{children:[e.jsx("article",{className:"settings-row",children:e.jsxs("div",{className:"settings-row__copy",children:[e.jsx("h4",{children:s("settings.grokCompatibility.title")}),e.jsx("p",{children:s("settings.grokCompatibility.body")})]})}),e.jsx(oe,{})]}):d==="agy"||d==="gemini-api"?e.jsx("article",{className:"settings-row",children:e.jsxs("div",{className:"settings-row__copy",children:[e.jsx("h4",{children:d==="gemini-api"?"Gemini API":s("provider.agyCompatTitle")}),e.jsx("p",{children:d==="gemini-api"?"Google Gemini API direct. Supports nano-banana-2 (Flash) and nano-banana-pro (Pro). 1024x1024 default, JPEG output.":s("provider.agyCompatBodyLong")})]})}):e.jsxs(e.Fragment,{children:[e.jsxs("article",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row__copy",children:[e.jsx("h4",{children:s("settings.reasoning.title")}),e.jsx("p",{children:s("settings.reasoning.body")})]}),e.jsx("div",{className:"settings-row__control",children:e.jsx(H,{})})]}),e.jsxs("article",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row__copy",children:[e.jsx("h4",{children:s("settings.webSearch.title")}),e.jsx("p",{children:s("settings.webSearch.body")})]}),e.jsx("div",{className:"settings-row__control",children:e.jsx(U,{})})]})]}),e.jsxs("article",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row__copy",children:[e.jsx("h4",{children:s("settings.gallery.defaultScopeTitle")}),e.jsx("p",{children:s("settings.gallery.defaultScopeBody")})]}),e.jsx("div",{className:"settings-row__control",children:e.jsxs("select",{value:o,onChange:l=>u(l.target.value),"aria-label":s("settings.gallery.defaultScopeTitle"),children:[e.jsx("option",{value:"current-session",children:s("gallery.scope.current")}),e.jsx("option",{value:"all",children:s("gallery.scope.all")})]})})]})]}),e.jsxs(C,{id:"appearance",setRef:g,children:[e.jsxs("article",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row__copy",children:[e.jsx("h4",{children:s("settings.appearance.themeTitle")}),e.jsx("p",{children:s("settings.appearance.themeBody")})]}),e.jsx("div",{className:"settings-row__control",children:e.jsx(Z,{})})]}),e.jsxs("article",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row__copy",children:[e.jsx("h4",{children:s("settings.appearance.historyStripLayoutTitle")}),e.jsx("p",{children:s("settings.appearance.historyStripLayoutBody")})]}),e.jsx("div",{className:"settings-row__control",children:e.jsx(se,{})})]})]}),e.jsx(C,{id:"workspace",setRef:g,children:e.jsxs("article",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row__copy",children:[e.jsx("h4",{children:s("workspace.sectionTitle")}),e.jsx("p",{children:s("workspace.sectionBody")})]}),e.jsx("div",{className:"settings-row__control",children:e.jsx(ae,{})})]})}),e.jsx(C,{id:"language",setRef:g,children:e.jsxs("article",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row__copy",children:[e.jsx("h4",{children:s("settings.language.title")}),e.jsx("p",{children:s("settings.language.body")})]}),e.jsx("div",{className:"settings-row__control",children:e.jsx(X,{})})]})}),e.jsx(C,{id:"future",setRef:g,children:e.jsxs("article",{className:"settings-note",children:[e.jsx("h4",{children:s("settings.future.title")}),e.jsx("p",{children:s("settings.future.body")})]})})]})]})]})})}export{ue as SettingsWorkspace};