ima2-gen 2.0.15 → 2.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -0
- package/bin/commands/skill.js +336 -17
- package/bin/ima2.js +22 -2
- package/bin/lib/doctor-checks.js +6 -4
- package/config.js +1 -0
- package/docs/CLI.md +25 -3
- package/docs/PROMPT_STUDIO.ko.md +29 -0
- package/docs/PROMPT_STUDIO.md +31 -0
- package/docs/migration/runtime-test-inventory.md +7 -1
- package/lib/agentImageVideoGen.js +8 -0
- package/lib/agentQueueStore.js +36 -10
- package/lib/agentQueueWorker.js +79 -7
- package/lib/agentRuntime.js +2 -0
- package/lib/assetLifecycle.js +40 -8
- package/lib/canvasVersionStore.js +86 -0
- package/lib/cardNewsGenerator.js +37 -3
- package/lib/cardNewsJobStore.js +10 -0
- package/lib/cardNewsManifestStore.js +6 -12
- package/lib/cardNewsPath.js +25 -0
- package/lib/db.js +2 -0
- package/lib/generatePipeline.js +474 -0
- package/lib/generationInputValidation.js +32 -0
- package/lib/grokImageCore.js +18 -1
- package/lib/historyIndex.js +11 -4
- package/lib/historyList.js +3 -0
- package/lib/imageMetadata.js +3 -0
- package/lib/inflight.js +30 -3
- package/lib/multimodePipeline.js +462 -0
- package/lib/nodeGeneration.js +440 -0
- package/lib/nodeValidation.js +23 -0
- package/lib/oauthProxy/generators.js +3 -246
- package/lib/oauthProxy/multimodeGenerators.js +251 -0
- package/lib/routeHelpers.js +9 -2
- package/package.json +2 -2
- package/routes/agent.js +4 -4
- package/routes/canvasVersions.js +21 -1
- package/routes/cardNews.js +2 -1
- package/routes/edit.js +25 -9
- package/routes/events.js +5 -1
- package/routes/generate.js +2 -481
- package/routes/keys.js +31 -39
- package/routes/multimode.js +2 -502
- package/routes/nodes.js +3 -448
- package/routes/video.js +12 -3
- package/routes/videoExtended.js +19 -4
- package/server.js +53 -1
- package/skills/ima2/SKILL.md +204 -0
- package/skills/ima2-front/SKILL.md +611 -0
- package/skills/ima2-front/references/a11y-patterns.md +134 -0
- package/skills/ima2-front/references/aesthetics.md +327 -0
- package/skills/ima2-front/references/anti-slop.md +241 -0
- package/skills/ima2-front/references/asset-requirements.md +431 -0
- package/skills/ima2-front/references/brand-asset-sourcing.md +122 -0
- package/skills/ima2-front/references/color-system.md +132 -0
- package/skills/ima2-front/references/consistency-locks.md +20 -0
- package/skills/ima2-front/references/crud-ui.md +53 -0
- package/skills/ima2-front/references/dropdown-layer.md +110 -0
- package/skills/ima2-front/references/i18n-global.md +104 -0
- package/skills/ima2-front/references/iterative-design.md +90 -0
- package/skills/ima2-front/references/korea-2026.md +174 -0
- package/skills/ima2-front/references/layout-discipline.md +161 -0
- package/skills/ima2-front/references/liquid-glass.md +181 -0
- package/skills/ima2-front/references/logo-sections.md +194 -0
- package/skills/ima2-front/references/mobile-ux.md +144 -0
- package/skills/ima2-front/references/performance-budget.md +106 -0
- package/skills/ima2-front/references/preflight-full.md +58 -0
- package/skills/ima2-front/references/product-density.md +53 -0
- package/skills/ima2-front/references/prototype-variants.md +54 -0
- package/skills/ima2-front/references/reference-capture.md +120 -0
- package/skills/ima2-front/references/responsive-viewport.md +139 -0
- package/skills/ima2-front/references/seo-baseline.md +123 -0
- package/skills/ima2-front/references/soft-3d-asset-gates.md +70 -0
- package/skills/ima2-front/references/stacks/astro.md +204 -0
- package/skills/ima2-front/references/stacks/mobile-native.md +281 -0
- package/skills/ima2-front/references/stacks/nextjs.md +219 -0
- package/skills/ima2-front/references/stacks/react.md +264 -0
- package/skills/ima2-front/references/stacks/svelte.md +235 -0
- package/skills/ima2-front/references/stacks/vanilla.md +226 -0
- package/skills/ima2-front/references/theme-switching.md +82 -0
- package/skills/ima2-front/references/top-bar.md +126 -0
- package/skills/ima2-front/references/typography-wrapping.md +270 -0
- package/skills/ima2-front/references/ux-writing-ko.md +62 -0
- package/skills/ima2-front/references/visual-verification.md +102 -0
- package/skills/ima2-uiux/SKILL.md +477 -0
- package/skills/ima2-uiux/references/anti-slop-judgment.md +39 -0
- package/skills/ima2-uiux/references/color-system.md +80 -0
- package/skills/ima2-uiux/references/design-isms.md +194 -0
- package/skills/ima2-uiux/references/design-read-example.md +33 -0
- package/skills/ima2-uiux/references/design-system-bootstrap.md +133 -0
- package/skills/ima2-uiux/references/favicon-logo.md +355 -0
- package/skills/ima2-uiux/references/form-patterns.md +118 -0
- package/skills/ima2-uiux/references/intent-discovery-ladder.md +86 -0
- package/skills/ima2-uiux/references/korean-design-vocabulary.md +52 -0
- package/skills/ima2-uiux/references/layout-macrostructures.md +54 -0
- package/skills/ima2-uiux/references/logo-trust-sections.md +96 -0
- package/skills/ima2-uiux/references/mobile-native-ux.md +207 -0
- package/skills/ima2-uiux/references/product-personalities.md +118 -0
- package/skills/ima2-uiux/references/responsive-nav.md +66 -0
- package/skills/ima2-uiux/references/typography-line-breaks.md +193 -0
- package/skills/ima2-uiux/references/ux-preflight.md +65 -0
- package/skills/ima2-uiux/references/ux-states.md +197 -0
- package/skills/ima2-uiux/references/visual-hierarchy.md +115 -0
- package/ui/dist/.vite/manifest.json +13 -13
- package/ui/dist/assets/AgentWorkspace-CtYt4SF5.js +3 -0
- package/ui/dist/assets/{CardNewsWorkspace-Cdxn1ohU.js → CardNewsWorkspace-DN5cVqG5.js} +1 -1
- package/ui/dist/assets/GenerationRequestLogPanel-DnmUQdKR.js +1 -0
- package/ui/dist/assets/{NodeCanvas-C67sLboA.js → NodeCanvas-CxpfIBI0.js} +1 -1
- package/ui/dist/assets/PromptBuilderPanel-C2R3ObtR.js +2 -0
- package/ui/dist/assets/{PromptImportDialog-DeQXsEEv.js → PromptImportDialog-BIxz_yEx.js} +2 -2
- package/ui/dist/assets/PromptImportDiscoverySection-BQTlPMME.js +1 -0
- package/ui/dist/assets/PromptImportFolderSection-Ds_Th9O3.js +1 -0
- package/ui/dist/assets/{PromptLibraryPanel-Db3xEPM_.js → PromptLibraryPanel-Rs4l45pV.js} +2 -2
- package/ui/dist/assets/{SettingsWorkspace-BDk_1W-V.js → SettingsWorkspace-p1AZ6uT9.js} +1 -1
- package/ui/dist/assets/index-0-_vgFGs.js +4 -0
- package/ui/dist/assets/index-Dm3pFxV4.js +23 -0
- package/ui/dist/assets/index-J8yDF3Ch.css +1 -0
- package/ui/dist/index.html +2 -2
- package/ui/dist/assets/AgentWorkspace-DAg_7zpY.js +0 -3
- package/ui/dist/assets/GenerationRequestLogPanel-C_qvEUi2.js +0 -1
- package/ui/dist/assets/PromptBuilderPanel-DjvVdAie.js +0 -2
- package/ui/dist/assets/PromptImportDiscoverySection-CrwyUKYI.js +0 -1
- package/ui/dist/assets/PromptImportFolderSection-CToGMqYE.js +0 -1
- package/ui/dist/assets/index-2oG6in1i.css +0 -1
- package/ui/dist/assets/index-CoxMOXAU.js +0 -23
- package/ui/dist/assets/index-p8egnGHk.js +0 -4
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{M as _e,a as m,j as e,u as j,i as Je,t as Ye,o as te,A as Ze,b as D,v as en,e as nn}from"./index-CoxMOXAU.js";async function B(n,s){const t=await fetch(n,s);if(!t.ok){const a=await t.json().catch(()=>({})),i=a.error,l=typeof i=="string"?i:i?.message??`Request failed: ${t.status}`,r=new Error(l);throw r.status=t.status,r.code=typeof i=="object"?i?.code:a.code,r}return await t.json()}function tn(n){return n.filename?`/generated/${n.filename}`:typeof n.url=="string"&&n.url?n.url:typeof n.thumb=="string"&&n.thumb?n.thumb:null}function we(n){const s=tn(n);if(!s)return null;const t=n.filename??n.canvasEditableFilename??"current-image.png";return{id:`current-${t}`,filename:t,url:s,thumbUrl:n.thumb??s,prompt:n.prompt??n.userPrompt??null,revisedPrompt:n.revisedPrompt??null,createdAt:n.createdAt??Date.now()}}async function pe(n){const s=n?`?selectedSessionId=${encodeURIComponent(n)}`:"";return B(`/api/agent/sessions${s}`)}async function fe(n){const s=n.currentImage?we(n.currentImage):null;return B("/api/agent/sessions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({title:n.title,currentImage:s,webSearchEnabled:n.webSearchEnabled??!0})})}async function Q(n,s){return B(`/api/agent/sessions/${encodeURIComponent(n)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)})}async function sn(n){return B(`/api/agent/sessions/${encodeURIComponent(n)}`,{method:"DELETE"})}async function an(n,s,t){return B(`/api/agent/sessions/${encodeURIComponent(n)}/queue`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:s,options:t})})}async function rn(n){return B(`/api/agent/queue/${encodeURIComponent(n)}/cancel`,{method:"POST"})}async function ln(n){return B(`/api/agent/queue/${encodeURIComponent(n)}/retry`,{method:"POST"})}const ae=_e,on=_e,cn={provider:"oauth",model:"gpt-5.4-mini",quality:"medium",size:"1024x1024",format:"png",moderation:"low",reasoningEffort:"none",webSearchEnabled:!0,generationStrategy:"auto",variants:1,maxAutoVariants:ae,parallelism:2};function xe(n){return{...cn,...n??{}}}function je(n){const{width:s,height:t}=n;return t<560&&s<1280?"mobile-chat-image-sheet":s>=1280?"desktop-three-pane":s>=960&&t>=560?"desktop-rail":s>=768&&t>=700?"tablet-stacked":"mobile-chat-image-sheet"}function un(){return typeof window>"u"?1440:window.innerWidth}function be(){return typeof window>"u"?900:window.innerHeight}function dn(){if(typeof window>"u"||typeof document>"u")return 1440;const n=document.querySelector('.app[data-ui-mode="agent"] .sidebar');if(!n)return window.innerWidth;const s=window.getComputedStyle(n);if(s.display==="none"||s.visibility==="hidden")return window.innerWidth;const t=n.getBoundingClientRect().width;return Math.max(0,window.innerWidth-t)}function gn(){const[n,s]=m.useState(()=>je({width:un(),height:be()}));return m.useEffect(()=>{const t=()=>s(je({width:dn(),height:be()}));return t(),window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[]),n}function C({size:n=16,children:s}){return e.jsx("svg",{width:n,height:n,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:s})}function Ne(n){return e.jsxs(C,{...n,children:[e.jsx("path",{d:"M12 5v14"}),e.jsx("path",{d:"M5 12h14"})]})}function Ce(n){return e.jsxs(C,{...n,children:[e.jsx("circle",{cx:"11",cy:"11",r:"7"}),e.jsx("path",{d:"M21 21l-4.3-4.3"})]})}function H(n){return e.jsxs(C,{...n,children:[e.jsx("rect",{x:"3",y:"5",width:"18",height:"14",rx:"2"}),e.jsx("circle",{cx:"8",cy:"10",r:"1.5"}),e.jsx("path",{d:"M21 16l-5-5L5 19"})]})}function Ie(n){return e.jsxs(C,{...n,children:[e.jsx("path",{d:"M18 6L6 18"}),e.jsx("path",{d:"M6 6l12 12"})]})}function mn(n){return e.jsxs(C,{...n,children:[e.jsx("path",{d:"M22 2L11 13"}),e.jsx("path",{d:"M22 2l-7 20-4-9-9-4 20-7z"})]})}function hn(n){return e.jsx(C,{...n,children:e.jsx("path",{d:"M21.4 11.1l-9.2 9.1a6 6 0 0 1-8.5-8.5l9.2-9.2a4 4 0 0 1 5.7 5.7l-9.2 9.2a2 2 0 0 1-2.8-2.8l8.5-8.5"})})}function pn(n){return e.jsxs(C,{...n,children:[e.jsx("circle",{cx:"12",cy:"12",r:"10"}),e.jsx("path",{d:"M2 12h20"}),e.jsx("path",{d:"M12 2a15.3 15.3 0 0 1 0 20"}),e.jsx("path",{d:"M12 2a15.3 15.3 0 0 0 0 20"})]})}function fn(n){return e.jsxs(C,{...n,children:[e.jsx("path",{d:"M4 6h16"}),e.jsx("path",{d:"M4 12h16"}),e.jsx("path",{d:"M4 18h16"})]})}function xn(n){return e.jsxs(C,{...n,children:[e.jsx("path",{d:"M3 6h18"}),e.jsx("path",{d:"M8 6V4h8v2"}),e.jsx("path",{d:"M19 6l-1 14H6L5 6"})]})}function jn(n){return e.jsxs(C,{...n,children:[e.jsx("path",{d:"M12 20h9"}),e.jsx("path",{d:"M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4 12.5-12.5z"})]})}function Ae(n){return e.jsx(C,{...n,children:e.jsx("path",{d:"M6 9l6 6 6-6"})})}function ke(n){return e.jsx(C,{...n,children:e.jsx("path",{d:"M9 6l6 6-6 6"})})}const ye=[{name:"question",display:"/question",aliases:["question","ask","q"],descriptionKey:"agent.slashDesc_question"},{name:"variants",display:"/variants <N>",aliases:["variants","variant","v","n"],descriptionKey:"agent.slashDesc_variants",hasValue:!0},{name:"generate",display:"/generate <N>",aliases:["generate","gen","g"],descriptionKey:"agent.slashDesc_generate",hasValue:!0},{name:"parallelism",display:"/parallelism <N>",aliases:["parallelism","parallel","p"],descriptionKey:"agent.slashDesc_parallelism",hasValue:!0},{name:"help",display:"/help",aliases:["help","h"],descriptionKey:"agent.slashDesc_help"}];function Ee(n){const s=n.toLowerCase();return s?ye.filter(t=>t.aliases.some(a=>a.startsWith(s))):ye}function bn({listboxId:n,query:s,highlightIndex:t,onSelect:a,onHighlightChange:i}){const{t:l}=j(),r=Ee(s);return r.length===0?null:e.jsx("ul",{id:n,className:"slash-command-menu",role:"listbox","aria-label":l("agent.slashCommands"),children:r.map((c,o)=>e.jsxs("li",{id:`${n}-opt-${o}`,role:"option","aria-selected":o===t,className:`slash-command-menu__item${o===t?" is-highlighted":""}`,onMouseDown:g=>g.preventDefault(),onClick:()=>a(c),onMouseEnter:()=>i(o),children:[e.jsx("span",{className:"slash-command-menu__name",children:c.display}),e.jsx("span",{className:"slash-command-menu__desc",children:l(c.descriptionKey)})]},c.name))})}function yn(n){return Array.from(n).filter(s=>s.type.startsWith("image/"))}function Sn(n){return Array.from(n.clipboardData?.items??[]).filter(s=>s.kind==="file"&&s.type.startsWith("image/")).map(s=>s.getAsFile()).filter(s=>!!s)}function vn({webSearchEnabled:n,insertedPrompt:s,onWebSearchChange:t,onAttachFiles:a,onSend:i}){const{t:l}=j(),[r,c]=m.useState(""),[o,g]=m.useState(0),[u,h]=m.useState(!1),p=m.useRef(null),f=m.useRef(null),S=m.useId(),k=r.trim().length>0,E=r.trimStart().match(/^\/([a-z]*)$/i),q=E!==null,X=q&&!u,P=E?.[1]??"",A=Ee(P),L=X&&A.length>0,M=A.length>0?Math.min(o,A.length-1):0,F=L?`${S}-opt-${M}`:void 0;m.useEffect(()=>{g(0),h(!1)},[P]),m.useEffect(()=>{q&&h(!1)},[q]),m.useEffect(()=>{s?.text&&c(x=>x.trim()?`${x.trim()}
|
|
2
|
-
|
|
3
|
-
${s.text}`:s.text)},[s]);const U=()=>{const x=r.trim();x&&(i(x),c(""))},I=x=>{c(`/${x.name} `),p.current?.focus()},w=x=>{const R=Sn(x);R.length!==0&&(x.preventDefault(),a(R))};return e.jsxs("div",{className:"agent-composer",children:[L&&e.jsx(bn,{listboxId:S,query:P,highlightIndex:M,onSelect:I,onHighlightChange:g}),e.jsx("textarea",{ref:p,value:r,"aria-autocomplete":"list","aria-haspopup":"listbox","aria-label":l("agent.composerPlaceholder"),...L?{"aria-controls":S}:{},"aria-activedescendant":F,autoCapitalize:"off",autoCorrect:"off",placeholder:l("agent.composerPlaceholder"),onChange:x=>c(x.target.value),onPaste:w,onKeyDown:x=>{if(x.key==="Enter"&&(x.metaKey||x.ctrlKey)){x.preventDefault(),U();return}if(L)switch(x.key){case"Tab":{x.preventDefault(),I(A[M]);return}case"ArrowDown":{x.preventDefault(),g((M+1)%A.length);return}case"ArrowUp":{x.preventDefault(),g((M-1+A.length)%A.length);return}case"Enter":{x.preventDefault(),I(A[M]);return}case"Escape":{x.preventDefault(),h(!0);return}}}}),e.jsx("input",{ref:f,type:"file",accept:"image/png,image/jpeg,image/webp",multiple:!0,hidden:!0,onChange:x=>{const R=yn(x.target.files??[]);R.length>0&&a(R),x.target.value=""}}),e.jsxs("div",{className:"agent-composer__actions",children:[e.jsx("button",{type:"button",onClick:()=>f.current?.click(),"aria-label":l("agent.attachReference"),title:l("agent.attachReference"),children:e.jsx(hn,{size:16})}),e.jsx("button",{type:"button",className:n?"is-active":"","aria-pressed":n,onClick:()=>t(!n),"aria-label":l("agent.webSearch"),title:l("agent.webSearch"),children:e.jsx(pn,{size:16})}),e.jsxs("button",{type:"button",className:"agent-composer__send",onClick:U,disabled:!k,"aria-label":l("agent.send"),children:[e.jsx(mn,{size:16}),e.jsx("span",{children:l("agent.send")})]})]})]})}function V({src:n,alt:s,className:t,fallbackClassName:a,iconSize:i=18}){const[l,r]=m.useState(!1);return!n||l?e.jsx("span",{className:a??"agent-image-fallback","aria-label":s,role:"img",children:e.jsx(H,{size:i})}):Je(n)?e.jsx("video",{className:t,src:n,controls:!0,loop:!0,playsInline:!0,muted:!0}):e.jsx("img",{className:t,src:n,alt:s,onError:()=>r(!0)})}const W=m.forwardRef(function({image:s,selected:t=!1,compact:a=!1,onSelect:i},l){const{t:r}=j(),c=`${r("agent.selectImage")}: ${s.prompt??s.filename}`,o=`${a?"agent-result-thumb agent-result-thumb--compact":"agent-result-thumb"}${t?" is-selected":""}`;return e.jsx("button",{ref:l,type:"button",className:o,"aria-label":c,"aria-current":t?"true":void 0,onClick:()=>i(s.id),title:r("agent.selectImage"),children:e.jsx(V,{src:s.thumbUrl??s.url,alt:s.prompt??r("agent.imageAlt"),iconSize:a?14:18})})});function _n({turn:n,imagesById:s,currentImageId:t,onImageSelect:a}){const{t:i}=j(),l=n.role==="user"?i("agent.user"):n.status==="error"?i("agent.errorRole"):i("agent.assistant"),r=n.imageIds??[],c=n.status==="streaming"?" is-streaming":n.status==="error"?" is-error":"",o=`agent-message agent-message--${n.role}${c}`;return e.jsxs("article",{className:o,"aria-busy":n.status==="streaming"?"true":void 0,children:[e.jsx("div",{className:"agent-message__role",children:l}),e.jsx("p",{children:n.text}),r.length>0?e.jsx("div",{className:"agent-message__images",children:r.map(g=>{const u=s[g];return u?e.jsx(W,{image:u,selected:g===t,compact:!1,onSelect:a},g):null})}):null]})}const wn=["ima2.get_image_context","ima2.web_search","ima2.generate_image","ima2.generate_video","ima2.get_generation_errors"];function Nn(n){return n.replace(/\s+/g," ").trim()||"tool"}function Cn(n){if(n.toolCalls?.length)return n.toolCalls;const s=Nn(n.text);return wn.filter(t=>s.includes(t)).map((t,a)=>({id:`${n.id}-fallback-${a}`,name:t,status:n.status==="error"?"error":n.status==="streaming"?"running":"complete",outputSummary:s,imageIds:t==="ima2.generate_image"||t==="ima2.generate_video"?n.imageIds??[]:[],webFindingIds:t==="ima2.web_search"?n.webFindingIds??[]:[]}))}function Te(n){return!n||n<0?null:n<1e3?`${n}ms`:`${(n/1e3).toFixed(1)}s`}function In({call:n,imagesById:s,currentImageId:t,onImageSelect:a}){const{t:i}=j(),l=n.imageIds??[],r=Te(n.durationMs);return e.jsxs("div",{className:"agent-tool-call-details",children:[e.jsxs("dl",{children:[e.jsxs("div",{children:[e.jsx("dt",{children:i("agent.toolInput")}),e.jsx("dd",{children:n.inputSummary??"-"})]}),e.jsxs("div",{children:[e.jsx("dt",{children:i("agent.toolOutput")}),e.jsx("dd",{children:n.errorMessage??n.outputSummary??"-"})]}),n.requestId?e.jsxs("div",{children:[e.jsx("dt",{children:i("agent.requestId")}),e.jsx("dd",{children:n.requestId})]}):null,r?e.jsxs("div",{children:[e.jsx("dt",{children:i("agent.duration")}),e.jsx("dd",{children:r})]}):null]}),l.length>0?e.jsx("div",{className:"agent-tool-call-details__artifacts","aria-label":i("agent.toolArtifacts"),children:l.map(c=>{const o=s[c];return o?e.jsx(W,{image:o,selected:c===t,compact:!0,onSelect:a},c):null})}):null]})}function An({call:n,imagesById:s,currentImageId:t,onImageSelect:a}){const{t:i}=j(),l=m.useId(),[r,c]=m.useState(!1),o=Te(n.durationMs);return e.jsxs("li",{className:`agent-tool-call-row agent-tool-call-row--${n.status}`,children:[e.jsxs("button",{type:"button",className:"agent-tool-call-row__toggle","aria-expanded":r,"aria-controls":l,"aria-busy":n.status==="running"?"true":void 0,onClick:()=>c(g=>!g),children:[e.jsx("span",{className:"agent-tool-call-row__status","aria-label":i(`agent.toolStatus.${n.status}`)}),e.jsx("span",{className:"agent-tool-call-row__name",children:n.name}),n.imageIds?.length?e.jsx("span",{className:"agent-tool-call-row__meta",children:i("agent.toolImageCount",{count:n.imageIds.length})}):null,o?e.jsx("span",{className:"agent-tool-call-row__meta",children:o}):null,r?e.jsx(Ae,{size:13}):e.jsx(ke,{size:13})]}),e.jsx("div",{id:l,hidden:!r,children:e.jsx(In,{call:n,imagesById:s,currentImageId:t,onImageSelect:a})})]})}function kn(n){const s=[],t=new Set;let a=!1;const i=[];for(const l of n){const r=Cn(l);s.push(...r);for(const c of l.imageIds??[])t.add(c);for(const c of r)for(const o of c.imageIds??[])t.add(o);l.status==="streaming"&&(a=!0);for(const c of r)i.includes(c.name)||i.push(c.name)}return{toolCalls:s,imageIds:[...t],isStreaming:a,label:i.join(" + ")||"tool"}}function En({turns:n,imagesById:s,currentImageId:t,onImageSelect:a}){const{t:i}=j(),l=m.useId(),[r,c]=m.useState(!1),{toolCalls:o,imageIds:g,isStreaming:u,label:h}=m.useMemo(()=>kn(n),[n]),p=i(r?"agent.toolCollapse":"agent.toolExpand");return e.jsxs("article",{className:`agent-message agent-message--tool is-collapsible${u?" is-streaming":""}`,"aria-busy":u?"true":void 0,children:[e.jsx("div",{className:"agent-message__tool-summary",children:e.jsx("button",{type:"button",className:"agent-message__tool-toggle","aria-expanded":r,"aria-controls":l,"aria-label":`${p}: ${h}`,onClick:()=>c(f=>!f),children:e.jsxs("span",{className:"agent-message__tool-summary-line",children:[e.jsx("span",{className:"agent-message__tool-dot","aria-hidden":"true"}),e.jsx("span",{className:"agent-message__role",children:i("agent.toolGroup")}),g.length>0?e.jsx("span",{className:"agent-message__tool-count",children:i("agent.toolImageCount",{count:g.length})}):null,o.length>0?e.jsx("span",{className:"agent-message__tool-count",children:i("agent.toolCallCount",{count:o.length})}):null,r?e.jsx(Ae,{size:14}):e.jsx(ke,{size:14})]})})}),e.jsxs("div",{id:l,className:"agent-message__tool-details",hidden:!r,children:[e.jsx("div",{className:"agent-message__tool-label",children:h}),o.length>0?e.jsx("ul",{className:"agent-tool-call-list",children:o.map(f=>e.jsx(An,{call:f,imagesById:s,currentImageId:t,onImageSelect:a},f.id))}):null,g.length>0?e.jsx("div",{className:"agent-message__tool-thumbs",children:g.map(f=>{const S=s[f];return S?e.jsx(W,{image:S,selected:f===t,compact:!0,onSelect:a},f):null})}):null]})]})}function Tn(n){return n.role!=="tool"&&(n.text.trim().length>0||(n.imageIds?.length??0)>0)}function Ln({turns:n,imagesById:s,currentImageId:t,onImageSelect:a}){const{t:i}=j(),l=n.filter(h=>h.role==="tool"),r=n.filter(Tn),c=n.some(h=>h.status==="streaming"),o=n.some(h=>h.status==="error"),g=c?" is-streaming":o?" is-error":"",u=i(o?"agent.errorRole":"agent.assistant");return e.jsxs("article",{className:`agent-message agent-message--assistant-run${g}`,"aria-busy":c?"true":void 0,children:[e.jsxs("div",{className:"agent-run__header",children:[e.jsx("div",{className:"agent-message__role",children:u}),l.length>0?e.jsx("div",{className:"agent-run__header-tool",children:e.jsx(En,{turns:l,imagesById:s,currentImageId:t,onImageSelect:a})}):null]}),r.length>0?e.jsx("ol",{className:"agent-run__steps","aria-label":u,children:r.map(h=>{const p=h.imageIds??[],f=h.status==="streaming"?" is-streaming":h.status==="error"?" is-error":"";return e.jsxs("li",{className:`agent-run__step${f}`,children:[e.jsx("span",{className:"agent-run__step-marker","aria-hidden":"true"}),e.jsxs("div",{className:"agent-run__step-body",children:[h.text.trim().length>0?e.jsx("p",{children:h.text}):null,p.length>0?e.jsx("div",{className:"agent-message__images",children:p.map(S=>{const k=s[S];return k?e.jsx(W,{image:k,selected:S===t,compact:!1,onSelect:a},S):null})}):null]})]},h.id)})}):null]})}function Mn(n){const s=[];let t=[];const a=()=>{t.length!==0&&(s.push({kind:"run",turns:t,key:t.map(i=>i.id).join("+")}),t=[])};for(const i of n)i.role==="user"?(a(),s.push({kind:"single",turn:i})):t.push(i);return a(),s}function qn({turns:n,imagesById:s,currentImageId:t,onImageSelect:a}){const{t:i}=j(),l=m.useRef(null),r=m.useMemo(()=>Mn(n),[n]);return m.useEffect(()=>{const c=l.current;c&&(c.scrollTop=c.scrollHeight)},[n.length]),e.jsxs("div",{ref:l,className:"agent-message-list","aria-live":"polite",children:[n.length===0?e.jsx("div",{className:"agent-message-list__empty",children:i("agent.emptyChat")}):null,r.map(c=>c.kind==="run"?e.jsx(Ln,{turns:c.turns,imagesById:s,currentImageId:t,onImageSelect:a},c.key):e.jsx(_n,{turn:c.turn,imagesById:s,currentImageId:t,onImageSelect:a},c.turn.id))]})}function Le({settings:n,onChange:s}){const{t}=j(),[a,i]=m.useState(!1),l=m.useRef(null),r=Ye(n),c=te.find(o=>o.value===n.reasoningEffort)??te[0];return m.useEffect(()=>{if(!a)return;const o=u=>{l.current?.contains(u.target)||i(!1)},g=u=>{u.key==="Escape"&&i(!1)};return window.addEventListener("pointerdown",o),window.addEventListener("keydown",g),()=>{window.removeEventListener("pointerdown",o),window.removeEventListener("keydown",g)}},[a]),e.jsxs("div",{ref:l,className:"image-model-select image-model-select--sidebar agent-model-select",children:[e.jsxs("button",{type:"button",className:"image-model-select__trigger image-model-select__trigger--pill","aria-haspopup":"menu","aria-expanded":a,"aria-label":t("sidebar.quickSettingsAria",{model:r.shortLabel,effort:c.shortLabel}),onClick:()=>i(o=>!o),children:[e.jsxs("span",{className:"image-model-select__trigger-top",children:[e.jsx("span",{className:"image-model-select__trigger-model",children:r.shortLabel}),e.jsx("span",{className:"image-model-select__trigger-chevron","aria-hidden":"true",children:"▾"})]}),e.jsx("span",{className:"image-model-select__trigger-effort",children:c.shortLabel})]}),a?e.jsxs("div",{className:"image-model-select__menu agent-model-select__menu",role:"menu","aria-label":t("sidebar.quickSettingsMenu"),children:[e.jsxs("div",{className:"image-model-select__section",role:"group","aria-label":t("agent.model"),children:[e.jsx("div",{className:"image-model-select__section-title",children:t("agent.model")}),Ze.map(o=>e.jsxs("button",{type:"button",className:`image-model-select__item${o.value===r.value?" is-active":""}`,role:"menuitemradio","aria-checked":o.value===r.value,onClick:()=>{s({model:o.value,provider:o.provider}),i(!1)},children:[e.jsx("span",{children:o.shortLabel}),e.jsx("small",{children:o.fullLabel})]},o.value))]}),e.jsxs("div",{className:"image-model-select__section",role:"group","aria-label":t("sidebar.reasoningLabel"),children:[e.jsx("div",{className:"image-model-select__section-title",children:t("sidebar.reasoningLabel")}),te.map(o=>e.jsxs("button",{type:"button",className:`image-model-select__item${o.value===n.reasoningEffort?" is-active":""}`,role:"menuitemradio","aria-checked":o.value===n.reasoningEffort,onClick:()=>{s({reasoningEffort:o.value}),i(!1)},children:[e.jsx("span",{children:o.shortLabel}),e.jsx("small",{children:t(o.fullLabelKey)})]},o.value))]})]}):null]})}function Rn({progress:n}){const{t:s}=j();if(!n?.active)return null;const t=[n.runningCount>0?`${n.runningCount} ${s("agent.runningShort")}`:null,n.queuedCount>0?`${n.queuedCount} ${s("agent.queuedShort")}`:null].filter(Boolean).join(" · ");return e.jsxs("div",{className:`agent-run-status agent-run-status--${n.status}`,role:"status","aria-live":"polite",children:[e.jsx("span",{className:"agent-run-status__spinner","aria-hidden":"true"}),e.jsx("span",{className:"agent-run-status__label",children:s(`agent.${n.labelKey}`)}),t?e.jsx("span",{className:"agent-run-status__meta",children:t}):null,n.status==="error"&&n.lastError?e.jsx("span",{className:"agent-run-status__meta",children:n.lastError}):null]})}function $n({status:n,compacted:s=!1}){const{t}=j(),a=t(n==="generating"?"agent.statusGenerating":n==="reconnecting"?"agent.statusReconnecting":"agent.statusReady");return e.jsxs("span",{className:`agent-status agent-status--${n}`,"aria-live":n==="ready"?void 0:"polite",children:[n==="generating"?e.jsx("span",{className:"agent-status__dot","aria-hidden":"true"}):null,e.jsx("span",{children:a}),s?e.jsx("em",{children:t("agent.compacted")}):null]})}function Dn({session:n,turns:s,imagesById:t,currentImageId:a,runtimeStatus:i,runProgress:l,settings:r,insertedPrompt:c,onSettingsChange:o,onWebSearchChange:g,onAttachFiles:u,onImageSelect:h,onSend:p}){const{t:f}=j();return e.jsxs("section",{className:"agent-chat","aria-label":f("agent.chat"),children:[e.jsxs("header",{className:"agent-pane-header",children:[e.jsxs("div",{className:"agent-pane-header__title",children:[e.jsx("span",{children:f("agent.chat")}),e.jsx("strong",{children:n?.title??f("agent.newSession")})]}),e.jsxs("div",{className:"agent-pane-header__actions",children:[r&&o?e.jsx(Le,{settings:r,onChange:o}):null,e.jsx($n,{status:i,compacted:n?.compacted})]})]}),e.jsx(qn,{turns:s,imagesById:t,currentImageId:a,onImageSelect:h}),e.jsx(Rn,{progress:l}),e.jsx(vn,{webSearchEnabled:n?.webSearchEnabled??!1,insertedPrompt:c,onWebSearchChange:g,onAttachFiles:u,onSend:p})]})}const Bn=["image","refs","web","memory"];function Pn({activeTab:n,onChange:s}){const{t}=j(),a={image:t("agent.imageTab"),refs:t("agent.refsTab"),web:t("agent.webTab"),memory:t("agent.memoryTab")};return e.jsx("div",{className:"agent-context-tabs",role:"tablist","aria-label":t("agent.contextTabs"),children:Bn.map(i=>e.jsx("button",{type:"button",role:"tab","aria-selected":n===i,className:n===i?"active":"",onClick:()=>s(i),children:a[i]},i))})}function On({activeTab:n,currentImage:s}){const{t}=j();return n==="refs"?e.jsx("div",{className:"agent-tab-empty",children:t("agent.noRefs")}):n==="web"?e.jsx("div",{className:"agent-tab-empty",children:t("agent.noWeb")}):n==="memory"?e.jsxs("ul",{className:"agent-memory-list",children:[e.jsx("li",{children:t("agent.memoryItemStyle")}),e.jsx("li",{children:t("agent.memoryItemSubject")})]}):e.jsxs("dl",{className:"agent-image-meta",children:[e.jsxs("div",{children:[e.jsx("dt",{children:t("agent.filename")}),e.jsx("dd",{children:s?.filename??"-"})]}),e.jsxs("div",{children:[e.jsx("dt",{children:t("agent.prompt")}),e.jsx("dd",{children:s?.prompt??s?.revisedPrompt??"-"})]})]})}function Me({currentImage:n,images:s,activeTab:t,onTabChange:a,onImageSelect:i,headerAction:l}){const{t:r}=j(),c=m.useRef({}),o=m.useMemo(()=>s.findIndex(h=>h.id===n?.id),[n?.id,s]);m.useEffect(()=>{n?.id&&c.current[n.id]?.scrollIntoView({block:"nearest",inline:"nearest"})},[n?.id]);const g=m.useCallback(h=>{const p=s[h];p&&i(p.id)},[s,i]),u=m.useCallback(h=>{if(s.length===0)return;const p=o>=0?o:0;let f=null;(h.key==="ArrowLeft"||h.key==="ArrowUp")&&(f=Math.max(0,p-1)),(h.key==="ArrowRight"||h.key==="ArrowDown")&&(f=Math.min(s.length-1,p+1)),h.key==="Home"&&(f=0),h.key==="End"&&(f=s.length-1),!(f===null||f===p)&&(h.preventDefault(),g(f))},[o,s.length,g]);return e.jsxs("section",{className:"agent-image","aria-label":r("agent.imagePane"),children:[e.jsxs("header",{className:"agent-pane-header",children:[e.jsxs("div",{className:"agent-pane-header__title",children:[e.jsx("span",{children:r("agent.imagePane")}),e.jsx("strong",{children:r("agent.currentImage")})]}),l]}),e.jsx("div",{className:"agent-image__preview",tabIndex:s.length>1?0:void 0,onKeyDown:u,"aria-label":s.length>1?r("agent.variants"):void 0,children:n?e.jsx(V,{src:n.url,alt:n.prompt??r("agent.imageAlt"),fallbackClassName:"agent-image__empty",iconSize:34}):e.jsxs("div",{className:"agent-image__empty",children:[e.jsx(H,{size:34}),e.jsx("span",{children:r("agent.noImage")})]})}),e.jsx("div",{className:"agent-image__variants","aria-label":r("agent.variants"),onKeyDown:u,children:s.map(h=>e.jsx(W,{ref:p=>{c.current[h.id]=p},image:h,selected:h.id===n?.id,onSelect:i},h.id))}),e.jsx(Pn,{activeTab:t,onChange:a}),e.jsx(On,{activeTab:t,currentImage:n})]})}const Se='button, [href], input, textarea, select, [tabindex]:not([tabindex="-1"])';function qe(n,s){const t=m.useRef(null),a=m.useRef(null);return m.useEffect(()=>{if(!n)return;a.current=document.activeElement;const i=window.setTimeout(()=>{t.current?.querySelector(Se)?.focus()},0),l=r=>{if(r.key==="Escape"){r.preventDefault(),s();return}if(r.key!=="Tab")return;const c=Array.from(t.current?.querySelectorAll(Se)??[]);if(c.length===0)return;const o=c[0],g=c[c.length-1];r.shiftKey&&document.activeElement===o?(r.preventDefault(),g.focus()):!r.shiftKey&&document.activeElement===g&&(r.preventDefault(),o.focus())};return document.addEventListener("keydown",l),()=>{window.clearTimeout(i),document.removeEventListener("keydown",l),a.current?.focus()}},[s,n]),t}function zn({open:n,currentImage:s,images:t,activeTab:a,onTabChange:i,onImageSelect:l,onClose:r}){const{t:c}=j(),o=m.useCallback(()=>r(),[r]),g=qe(n,o);return n?e.jsxs("div",{className:"agent-dialog agent-dialog--image",role:"presentation",children:[e.jsx("button",{type:"button",className:"agent-dialog__backdrop",onClick:r,"aria-label":c("agent.closeImage")}),e.jsx("section",{ref:g,className:"agent-image-sheet",role:"dialog","aria-modal":"true","aria-label":c("agent.imagePane"),children:e.jsx(Me,{currentImage:s,images:t,activeTab:a,onTabChange:i,onImageSelect:l,headerAction:e.jsx("button",{type:"button",onClick:r,"aria-label":c("agent.closeImage"),children:e.jsx(Ie,{size:17})})})})]}):null}function Re({mode:n,onInsert:s}){const{t}=j(),a=D(g=>g.promptLibrary),i=D(g=>g.promptLibraryLoading),l=D(g=>g.loadPromptLibrary),[r,c]=m.useState("");m.useEffect(()=>{l()},[l]);const o=m.useMemo(()=>{const g=r.trim().toLowerCase();return a.prompts.filter(u=>{const h=u.tags.map(p=>p.toLowerCase());return n==="forms"&&!h.includes("agent:form")?!1:g?u.name.toLowerCase().includes(g)||u.text.toLowerCase().includes(g)||h.some(p=>p.includes(g)):!0})},[a.prompts,n,r]);return e.jsxs("section",{className:"agent-sidebar-section","aria-label":t(n==="forms"?"agent.forms":"agent.promptLibrary"),children:[e.jsx("header",{children:e.jsxs("div",{children:[e.jsx("span",{children:t(n==="forms"?"agent.forms":"agent.promptLibrary")}),e.jsx("strong",{children:o.length})]})}),e.jsxs("label",{className:"agent-sidebar-search",children:[e.jsx("span",{children:t("promptLibrary.search")}),e.jsx("input",{value:r,onChange:g=>c(g.target.value),placeholder:t("promptLibrary.search")})]}),e.jsxs("div",{className:"agent-prompt-library-list",children:[i?e.jsx("div",{className:"agent-tab-empty",children:t("common.loading")}):null,!i&&o.length===0?e.jsx("div",{className:"agent-tab-empty",children:t(n==="forms"?"agent.noForms":"promptLibrary.empty")}):null,o.map(g=>e.jsxs("article",{className:"agent-prompt-library-row",children:[e.jsx("strong",{children:g.name||t("promptLibrary.untitled")}),e.jsx("p",{children:g.text}),e.jsx("button",{type:"button",onClick:()=>s(g.text),children:t("agent.insertPrompt")})]},g.id))]})]})}function Wn({onInsert:n}){return e.jsx(Re,{mode:"forms",onInsert:n})}function Fn({settings:n,onChange:s}){const{t}=j();return e.jsxs("section",{className:"agent-settings-grid","aria-label":t("agent.quality"),children:[e.jsxs("label",{children:[e.jsx("span",{children:t("agent.generationStrategy")}),e.jsxs("select",{value:n.generationStrategy,onChange:a=>s({generationStrategy:a.target.value}),children:[e.jsx("option",{value:"auto",children:t("agent.generationStrategyAuto")}),e.jsx("option",{value:"manual",children:t("agent.generationStrategyManual")})]})]}),e.jsxs("label",{children:[e.jsx("span",{children:t("agent.quality")}),e.jsxs("select",{value:n.quality,onChange:a=>s({quality:a.target.value}),children:[e.jsx("option",{value:"low",children:"low"}),e.jsx("option",{value:"medium",children:"medium"}),e.jsx("option",{value:"high",children:"high"})]})]}),e.jsxs("label",{children:[e.jsx("span",{children:t("agent.size")}),e.jsxs("select",{value:n.size,onChange:a=>s({size:a.target.value}),children:[e.jsx("option",{value:"1024x1024",children:"1024x1024"}),e.jsx("option",{value:"1536x1024",children:"1536x1024"}),e.jsx("option",{value:"1024x1536",children:"1024x1536"}),e.jsx("option",{value:"2048x2048",children:"2048x2048"})]})]}),e.jsxs("label",{children:[e.jsx("span",{children:t("agent.format")}),e.jsxs("select",{value:n.format,onChange:a=>s({format:a.target.value}),children:[e.jsx("option",{value:"png",children:"png"}),e.jsx("option",{value:"jpeg",children:"jpeg"}),e.jsx("option",{value:"webp",children:"webp"})]})]}),e.jsxs("label",{children:[e.jsx("span",{children:t("agent.moderation")}),e.jsxs("select",{value:n.moderation,onChange:a=>s({moderation:a.target.value}),children:[e.jsx("option",{value:"low",children:"low"}),e.jsx("option",{value:"auto",children:"auto"})]})]}),n.generationStrategy==="manual"?e.jsxs("label",{children:[e.jsx("span",{children:t("agent.variantsCount")}),e.jsx("input",{type:"number",min:1,max:ae,value:n.variants,onChange:a=>s({variants:Number(a.target.value)})})]}):e.jsxs("label",{children:[e.jsx("span",{children:t("agent.maxAutoVariants")}),e.jsx("input",{type:"number",min:1,max:ae,value:n.maxAutoVariants,onChange:a=>s({maxAutoVariants:Number(a.target.value)})})]}),e.jsxs("label",{children:[e.jsx("span",{children:t("agent.parallelism")}),e.jsx("input",{type:"number",min:1,max:on,value:n.parallelism,onChange:a=>s({parallelism:Number(a.target.value)})})]})]})}function Un(n){return n.status==="queued"?`#${n.position}`:n.status==="running"?"running":n.status==="succeeded"?`${n.resultImageIds.length} img`:n.status==="failed"?n.errorCode??"failed":"canceled"}function Kn(n){if(!n)return"-";const s=Math.max(1,Math.round((Date.now()-n)/1e3));if(s<60)return`${s}s ago`;const t=Math.round(s/60);return t<60?`${t}m ago`:`${Math.round(t/60)}h ago`}function Gn({item:n,onCancel:s,onRetry:t}){const{t:a}=j(),i=n.status==="queued",l=n.status==="failed"||n.status==="canceled",r=`${n.plan.plannedVariants||n.plan.prompts.length||1}v/${n.plan.plannedParallelism||n.options.parallelism}p · ${n.plan.source}`;return e.jsxs("div",{className:`agent-queue-row agent-queue-row--${n.status}`,children:[e.jsxs("div",{className:"agent-queue-row__main",children:[e.jsx("strong",{children:n.prompt}),e.jsxs("span",{children:[a(`agent.queueStatus.${n.status}`)," · ",Un(n)," · ",r," · ",Kn(n.createdAt)]}),n.plan.reason?e.jsx("small",{children:n.plan.reason}):null,n.errorMessage?e.jsx("small",{children:n.errorMessage}):null]}),e.jsxs("div",{className:"agent-queue-row__actions",children:[i?e.jsx("button",{type:"button",onClick:()=>s(n.id),children:a("agent.cancelQueue")}):null,l?e.jsx("button",{type:"button",onClick:()=>t(n.id),children:a("agent.retryQueue")}):null]})]})}function Qn({items:n,summary:s,onCancel:t,onRetry:a}){const{t:i}=j();return e.jsxs("section",{className:"agent-sidebar-section","aria-label":i("agent.queue"),children:[e.jsx("header",{children:e.jsxs("div",{children:[e.jsx("span",{children:i("agent.queue")}),e.jsxs("strong",{children:[s?.runningCount??0," ",i("agent.runningShort")," · ",s?.queuedCount??0," ",i("agent.queuedShort")]})]})}),e.jsx("div",{className:"agent-queue-list",children:n.length===0?e.jsx("div",{className:"agent-tab-empty",children:i("agent.queueEmpty")}):n.map(l=>e.jsx(Gn,{item:l,onCancel:t,onRetry:a},l.id))})]})}const Hn=["image","library","forms","quality","model","queue"];function Vn({activeTab:n,onChange:s}){const{t}=j();return e.jsx("div",{className:"agent-sidebar-tabs",role:"tablist","aria-label":t("agent.rightSidebar"),children:Hn.map(a=>e.jsx("button",{type:"button",role:"tab",className:n===a?"active":"","aria-selected":n===a,onClick:()=>s(a),children:t(`agent.sidebarTabs.${a}`)},a))})}function Xn({currentImage:n,images:s,contextTab:t,sidebarTab:a,queueItems:i,runSummary:l,settings:r,onContextTabChange:c,onSidebarTabChange:o,onImageSelect:g,onSettingsChange:u,onInsertPrompt:h,onCancelQueue:p,onRetryQueue:f}){const{t:S}=j();return e.jsxs("aside",{className:"agent-right-sidebar",children:[e.jsx(Vn,{activeTab:a,onChange:o}),a==="image"?e.jsx(Me,{currentImage:n,images:s,activeTab:t,onTabChange:c,onImageSelect:g}):null,a==="library"?e.jsx(Re,{mode:"library",onInsert:h}):null,a==="forms"?e.jsx(Wn,{onInsert:h}):null,a==="quality"?e.jsxs("section",{className:"agent-sidebar-section","aria-label":S("agent.quality"),children:[e.jsx("header",{children:e.jsxs("div",{children:[e.jsx("span",{children:S("agent.quality")}),e.jsx("strong",{children:r.generationStrategy==="auto"?S("agent.generationStrategyAuto"):S("agent.generationStrategyManual")})]})}),e.jsx(Fn,{settings:r,onChange:u})]}):null,a==="model"?e.jsxs("section",{className:"agent-sidebar-section","aria-label":S("agent.modelSettings"),children:[e.jsx("header",{children:e.jsxs("div",{children:[e.jsx("span",{children:S("agent.modelSettings")}),e.jsx("strong",{children:r.model})]})}),e.jsx(Le,{settings:r,onChange:u})]}):null,a==="queue"?e.jsx(Qn,{items:i,summary:l,onCancel:p,onRetry:f}):null]})}function Jn({summary:n}){const{t:s}=j();if(!n||n.status==="idle")return null;const t=n.status==="running"?s("agent.sessionRunning"):n.status==="queued"?s("agent.sessionQueued",{count:n.queuedCount}):s("agent.sessionError");return e.jsxs("span",{className:`agent-session-spinner agent-session-spinner--${n.status}`,"aria-label":t,title:t,children:[e.jsx("span",{"aria-hidden":"true"}),n.queuedCount>0?e.jsx("em",{children:n.queuedCount}):null]})}function Yn(n){const s=Math.max(1,Math.round((Date.now()-n)/6e4));if(s<60)return`${s}m`;const t=Math.round(s/60);return t<24?`${t}h`:`${Math.round(t/24)}d`}function $e({sessions:n,selectedId:s,imagesById:t,runSummaryBySession:a={},onSelect:i,onRename:l,onDelete:r}){const{t:c}=j();return e.jsx("div",{className:"agent-session-list",children:n.map(o=>{const g=o.lastImageId?t[o.lastImageId]:null;return e.jsxs("div",{className:`agent-session-row${o.id===s?" is-active":""}`,children:[e.jsxs("button",{type:"button","aria-current":o.id===s?"page":void 0,onClick:()=>i(o.id),children:[e.jsx("span",{className:"agent-session-row__thumb",children:g?e.jsx(V,{src:g.thumbUrl??g.url,alt:"",iconSize:17}):e.jsx(H,{size:17})}),e.jsxs("span",{className:"agent-session-row__body",children:[e.jsx("strong",{children:o.title}),e.jsxs("span",{children:[c("agent.imageCount",{count:o.imageCount})," · ",Yn(o.updatedAt)]})]}),e.jsxs("span",{className:"agent-session-row__badges",children:[e.jsx(Jn,{summary:a[o.id]}),o.webSearchEnabled?e.jsx("em",{title:c("agent.web"),children:"W"}):null,o.compacted?e.jsx("em",{title:c("agent.compacted"),children:"C"}):null]})]}),e.jsxs("div",{className:"agent-session-row__actions",children:[e.jsx("button",{type:"button",onClick:()=>l(o.id),"aria-label":c("agent.renameSession"),title:c("agent.renameSession"),children:e.jsx(jn,{size:14})}),e.jsx("button",{type:"button",onClick:()=>r(o.id),"aria-label":c("agent.deleteSession"),title:c("agent.deleteSession"),children:e.jsx(xn,{size:14})})]})]},o.id)})})}function Zn({open:n,sessions:s,selectedId:t,imagesById:a,runSummaryBySession:i,onClose:l,onCreate:r,onSelect:c,onRename:o,onDelete:g}){const{t:u}=j(),[h,p]=m.useState(""),f=m.useCallback(()=>l(),[l]),S=qe(n,f),k=m.useMemo(()=>{const E=h.trim().toLowerCase();return E?s.filter(q=>q.title.toLowerCase().includes(E)):s},[h,s]);return n?e.jsxs("div",{className:"agent-dialog agent-dialog--drawer",role:"presentation",children:[e.jsx("button",{type:"button",className:"agent-dialog__backdrop",onClick:l,"aria-label":u("agent.closeSessions")}),e.jsxs("section",{ref:S,className:"agent-session-drawer",role:"dialog","aria-modal":"true","aria-label":u("agent.sessions"),children:[e.jsxs("header",{children:[e.jsx("strong",{children:u("agent.sessions")}),e.jsx("button",{type:"button",onClick:l,"aria-label":u("agent.closeSessions"),children:e.jsx(Ie,{size:17})})]}),e.jsxs("button",{type:"button",className:"agent-sessions__create",onClick:r,children:[e.jsx(Ne,{size:16}),e.jsx("span",{children:u("agent.newSession")})]}),e.jsxs("label",{className:"agent-sessions__search",children:[e.jsx(Ce,{size:15}),e.jsx("input",{value:h,onChange:E=>p(E.target.value),placeholder:u("agent.sessionSearch")})]}),e.jsx($e,{sessions:k,selectedId:t,imagesById:a,runSummaryBySession:i,onSelect:c,onRename:o,onDelete:g})]})]}):null}function et(n){const{t:s}=j(),[t,a]=m.useState(""),i=m.useMemo(()=>{const l=t.trim().toLowerCase();return l?n.sessions.filter(r=>r.title.toLowerCase().includes(l)):n.sessions},[n.sessions,t]);return e.jsx("aside",{className:"sidebar agent-session-sidebar","aria-label":s("agent.sessions"),children:e.jsxs("div",{className:"sidebar__scroll",children:[e.jsx(en,{agentSettings:n.settings,onAgentSettingsChange:n.onSettingsChange}),e.jsxs("section",{className:"agent-sessions","aria-label":s("agent.sessions"),children:[e.jsxs("button",{type:"button",className:"agent-sessions__create",onClick:n.onCreate,children:[e.jsx(Ne,{size:16}),e.jsx("span",{children:s("agent.newSession")})]}),e.jsxs("label",{className:"agent-sessions__search",children:[e.jsx(Ce,{size:15}),e.jsx("input",{value:t,onChange:l=>a(l.target.value),placeholder:s("agent.sessionSearch")})]}),e.jsx($e,{...n,sessions:i})]})]})})}function nt({layoutMode:n,session:s,currentImage:t,onOpenSessions:a,onOpenImage:i}){const{t:l}=j(),r=n==="mobile-chat-image-sheet";return e.jsxs("header",{className:"agent-topbar",children:[e.jsx("button",{type:"button",className:"agent-topbar__icon",onClick:a,"aria-label":l("agent.openSessions"),title:l("agent.openSessions"),children:e.jsx(fn,{size:18})}),e.jsxs("div",{className:"agent-topbar__title",children:[e.jsx("span",{children:l("agent.title")}),e.jsx("strong",{children:s?.title??l("agent.newSession")})]}),r?e.jsx("button",{type:"button",className:"agent-topbar__image",onClick:i,"aria-label":l("agent.openImage"),title:l("agent.openImage"),children:t?e.jsx(V,{src:t.thumbUrl??t.url,alt:"",iconSize:18}):e.jsx(H,{size:18})}):null]})}async function tt({sessionId:n,files:s,importLocalImageToHistory:t,applyWorkspace:a}){for(const i of s){const l=await t(i),r=l?we(l):null;if(!r)continue;const c=await Q(n,{currentImage:r});a(c)}}const re="agent-local-",st=`${re}pending-`;let ve=0;function ie(n){return ve+=1,`${re}${n}-${Date.now()}-${ve}`}function De(n){return n.id.startsWith(re)}function G(n){return n.id.startsWith(st)}function at(n,s){return{id:ie("user"),role:"user",text:n,imageIds:[],webFindingIds:[],status:"complete",createdAt:s}}function rt(n,s){return{id:ie("pending"),role:"assistant",text:n,imageIds:[],webFindingIds:[],status:"streaming",createdAt:s}}function it(n){return{id:ie("error"),role:"assistant",text:n,imageIds:[],webFindingIds:[],status:"error",createdAt:Date.now()}}function lt({turns:n,queueItems:s,runSummary:t,localPendingCount:a}){if(t?.status==="error"&&t.lastError)return{active:!0,status:"error",labelKey:"runError",queuedCount:t.queuedCount,runningCount:t.runningCount,lastError:t.lastError};if(t?.status==="queued")return{active:!0,status:"queued",labelKey:"pendingQueued",queuedCount:t.queuedCount,runningCount:t.runningCount};if(t?.status==="running"){const i=ot(s),l=n.some(r=>!De(r)&&r.role==="tool"&&(!i||(r.createdAt??0)>=i));return{active:!0,status:l?"running":"planning",labelKey:l?"pendingGenerating":"pendingPlanning",queuedCount:t.queuedCount,runningCount:t.runningCount}}return a>0?{active:!0,status:"planning",labelKey:"pendingPlanning",queuedCount:t?.queuedCount??0,runningCount:t?.runningCount??0}:null}function ot(n){const s=n.filter(t=>t.status==="running").sort((t,a)=>(t.startedAt??t.createdAt)-(a.startedAt??a.createdAt))[0];return s?s.startedAt??s.createdAt??null:null}function se(){return{sessions:[],turnsBySession:{},imagesById:{},imageIdsBySession:{},selectedSessionId:null,currentImageId:null,allowedTools:["ima2.get_image_context","ima2.web_search","ima2.generate_image","ima2.generate_video","ima2.get_generation_errors"],manifest:null,queueBySession:{},runSummaryBySession:{}}}function ct(n){const s=n.filename.endsWith(".mp4");return{image:n.url,url:n.url,filename:n.filename,thumb:n.thumbUrl??void 0,prompt:n.prompt??void 0,revisedPrompt:n.revisedPrompt??null,createdAt:n.createdAt,mediaType:s?"video":"image",kind:"agent"}}function ut(n,s,t){return{...n,turnsBySession:{...n.turnsBySession,[s]:[...n.turnsBySession[s]??[],...t]}}}function dt(n,s,t,a){const i=n.turnsBySession[s]??[];return{...n,turnsBySession:{...n.turnsBySession,[s]:[...i.filter(l=>l.id!==t),it(a)]}}}function gt(n,s,t){const a={...s.turnsBySession};for(const[i,l]of Object.entries(n.turnsBySession)){const r=a[i]??[],c=new Set(r.map(u=>u.id)),o=Math.max(0,...r.map(u=>u.createdAt??0)),g=l.filter(u=>t.has(u.id)||c.has(u.id)?!1:De(u)||u.status==="streaming"?!0:(u.createdAt??0)>=o);g.length>0&&(a[i]=[...r,...g])}return{...s,turnsBySession:a}}function ht(){const{t:n}=j(),s=gn(),t=nn(),a=D(d=>d.currentImage),i=D(d=>d.importLocalImageToHistory),l=D(d=>d.addHistoryItem),r=D(d=>d.selectHistory),c=m.useRef(!1),o=m.useRef(0),g=m.useRef(null),[u,h]=m.useState(()=>se()),[p,f]=m.useState(null),[S,k]=m.useState("image"),[E,q]=m.useState("image"),[X,P]=m.useState(null),[A,L]=m.useState(!1),[M,F]=m.useState(!1),[U,I]=m.useState("reconnecting"),w=m.useCallback(d=>{h({...se(),...d}),f(d.selectedSessionId??null)},[]),x=m.useCallback((d,b)=>{const y={...se(),...d};h(v=>gt(v,y,b)),f(d.selectedSessionId??null)},[]),R=()=>{o.current+=1,I("generating")},Be=()=>{o.current=Math.max(0,o.current-1),o.current===0&&I("ready")},J=m.useCallback(async d=>{I("reconnecting");const b=await pe(d);if(b.sessions.length>0){w(b),I("ready");return}const y=await fe({title:n("agent.newSession"),currentImage:a});w(y),I("ready")},[w,a,n]),le=m.useCallback(async d=>{const b=await pe(d);x(b,new Set),I("ready")},[x]);m.useEffect(()=>{c.current||(c.current=!0,J().catch(d=>{console.error(d),I("ready")}))},[J]);const O=u.sessions.find(d=>d.id===p)??null,Y=u.currentImageId?u.imagesById[u.currentImageId]??null:null,oe=p?(u.imageIdsBySession[p]??[]).map(d=>u.imagesById[d]).filter(d=>!!d):[],Z=O?u.turnsBySession[O.id]??[]:[],Pe=Z.filter(G).length,Oe=Z.filter(d=>!G(d)),ce=p?u.queueBySession[p]??[]:[],T=p?u.runSummaryBySession[p]:void 0,ze=lt({turns:Z,queueItems:ce,runSummary:T,localPendingCount:Pe}),z=xe(O?.generationSettings),We=U==="reconnecting"?"reconnecting":o.current>0||T?.status==="queued"||T?.status==="running"?"generating":"ready",Fe=s!=="mobile-chat-image-sheet",Ue=t&&s!=="desktop-three-pane";m.useEffect(()=>{const d=Object.keys(u.imagesById);if(!g.current){(d.length>0||u.sessions.length>0)&&(g.current=new Set(d));return}const b=g.current,y=d.filter(_=>!b.has(_)).map(_=>u.imagesById[_]).filter(_=>!!_);if(y.length===0)return;for(const _ of d)b.add(_);const v=y.map(ct);for(const _ of v)l(_);const $=v.reduce((_,N)=>(N.createdAt??0)>(_.createdAt??0)?N:_);r($)},[u.imagesById,u.sessions.length,l,r]),m.useEffect(()=>{h(d=>{if(o.current>0)return d;let b=!1;const y={...d.turnsBySession};for(const[v,$]of Object.entries(y)){if($.filter(G).length===0)continue;const N=d.runSummaryBySession[v];N?.status==="queued"||N?.status==="running"||(y[v]=$.filter(ne=>!G(ne)),b=!0)}return b?{...d,turnsBySession:y}:d})},[u.turnsBySession,u.runSummaryBySession]),m.useEffect(()=>{if(!p||T?.status!=="queued"&&T?.status!=="running")return;const d=window.setInterval(()=>{le(p).catch(console.error)},600);return()=>window.clearInterval(d)},[le,p,T?.queuedCount,T?.runningCount,T?.status]);const ue=d=>{L(!1),J(d).catch(console.error)},de=()=>{fe({title:n("agent.newSession"),currentImage:null}).then(w).catch(console.error)},ge=d=>{const b=u.sessions.find(v=>v.id===d),y=window.prompt(n("agent.renameSession"),b?.title??"");y?.trim()&&Q(d,{title:y.trim()}).then(w).catch(console.error)},me=d=>{const b=u.sessions.find(y=>y.id===d);!b||!window.confirm(n("agent.deleteConfirm",{title:b.title}))||sn(d).then(w).catch(console.error)},K=d=>{if(!p)return;const b=xe({...z,...d});h(y=>({...y,sessions:y.sessions.map(v=>v.id===p?{...v,generationSettings:b,webSearchEnabled:b.webSearchEnabled}:v)})),Q(p,{generationSettings:d}).then(w).catch(console.error)},Ke=d=>{K({webSearchEnabled:d})},ee=d=>{if(!p||u.currentImageId===d)return;const b=p;h(y=>({...y,currentImageId:d})),Q(b,{currentImageId:d}).then(w).catch(console.error)},Ge=d=>{P({id:Date.now(),text:d})},Qe=d=>{rn(d).then(w).catch(console.error)},He=d=>{ln(d).then(w).catch(console.error)},Ve=d=>{!p||d.length===0||tt({sessionId:p,files:d,importLocalImageToHistory:i,applyWorkspace:w}).catch(console.error)},Xe=d=>{if(!p)return;const b=p,y=Date.now(),v=at(d,y),$=rt(n("agent.pending"),y+1),_=new Set([v.id]);R(),h(N=>ut(N,b,[v,$])),an(b,d,z).then(N=>x(N.workspace,_)).catch(N=>{const he=N instanceof Error?N.message:String(N);h(ne=>dt(ne,b,$.id,he))}).finally(Be)};return e.jsxs("main",{className:`agent-workspace agent-workspace--${s}`,"data-layout":s,"aria-label":n("agent.workspace"),children:[e.jsx(et,{sessions:u.sessions,selectedId:p??"",imagesById:u.imagesById,runSummaryBySession:u.runSummaryBySession,settings:z,onCreate:de,onSelect:ue,onRename:ge,onDelete:me,onSettingsChange:K}),Ue?e.jsx(nt,{layoutMode:s,session:O,currentImage:Y,onOpenSessions:()=>L(!0),onOpenImage:()=>F(!0)}):null,e.jsxs("div",{className:"agent-workspace__body",children:[e.jsx(Dn,{session:O,turns:Oe,imagesById:u.imagesById,currentImageId:u.currentImageId,runtimeStatus:We,runProgress:ze,settings:z,insertedPrompt:X,onSettingsChange:K,onWebSearchChange:Ke,onAttachFiles:Ve,onImageSelect:ee,onSend:Xe}),Fe?e.jsx(Xn,{currentImage:Y,images:oe,contextTab:S,sidebarTab:E,queueItems:ce,runSummary:T,settings:z,onContextTabChange:k,onSidebarTabChange:q,onImageSelect:ee,onSettingsChange:K,onInsertPrompt:Ge,onCancelQueue:Qe,onRetryQueue:He}):null]}),e.jsx(Zn,{open:A,sessions:u.sessions,selectedId:p??"",imagesById:u.imagesById,runSummaryBySession:u.runSummaryBySession,onClose:()=>L(!1),onCreate:de,onSelect:ue,onRename:ge,onDelete:me}),e.jsx(zn,{open:M,currentImage:Y,images:oe,activeTab:S,onTabChange:k,onImageSelect:ee,onClose:()=>F(!1)})]})}export{ht as AgentWorkspace};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{N as g,u as m,b as c,a as n,j as s}from"./index-CoxMOXAU.js";async function y(){return g("/api/generation-requests")}async function x(o){if(navigator.clipboard?.writeText){await navigator.clipboard.writeText(o);return}const t=document.createElement("textarea");t.value=o,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();try{document.execCommand("copy")}finally{document.body.removeChild(t)}}function f(){const{t:o}=m(),t=c(e=>e.showToast),i=c(e=>e.activeGenerations),[a,l]=n.useState([]),[u,d]=n.useState(!0),r=n.useCallback(async()=>{try{const e=await y();l(e.items)}finally{d(!1)}},[]);n.useEffect(()=>{r()},[r,i]);const p=async e=>{try{await x(e.prompt),t(o("generationLog.copied"))}catch{t(o("toast.copyFailed"),!0)}};return u?s.jsx("div",{className:"generation-request-log__empty",children:o("common.loading")}):s.jsx("div",{className:"generation-request-log",role:"list",children:a.length===0?s.jsx("div",{className:"generation-request-log__empty",children:o("generationLog.empty")}):a.map(e=>s.jsxs("button",{type:"button",role:"listitem",className:"generation-request-log__item",onClick:()=>{p(e)},title:e.succeeded===0&&e.error?e.error:o("generationLog.copy"),children:[s.jsx("span",{className:"generation-request-log__prompt",children:e.prompt}),s.jsxs("span",{className:`generation-request-log__count${e.succeeded===0?" is-error":" is-success"}`,children:[e.succeeded,"/",e.requested]})]},e.id))})}export{f as GenerationRequestLogPanel};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{K as I,L as S,b as u,u as f,j as t,a as _}from"./index-CoxMOXAU.js";function T(e){return e.filename??e.url??e.image}let M=0;function y(){return`pb_${Date.now()}_${++M}`}async function A(e){const n=y(),s=e.type.startsWith("image/")?"image":"file";if(s==="image"){const r=await new Promise(o=>{const l=new FileReader;l.onload=()=>o(l.result),l.readAsDataURL(e)});return{id:n,kind:s,name:e.name,mimeType:e.type,size:e.size,dataUrl:r}}return{id:n,kind:s,name:e.name,mimeType:e.type,size:e.size}}const p=I()((e,n)=>({messages:[],scope:{kind:"draft"},draft:"",model:"gpt-5.5",loading:!1,attachments:[],error:null,setDraft:s=>e({draft:s}),setModel:s=>e({model:s}),clearMessages:()=>e({messages:[],error:null}),clearImageScope:()=>e({scope:{kind:"draft"}}),setScopeFromImage:s=>{const r=T(s);e({scope:{kind:"image",imageKey:r}})},addAttachments:async s=>{const r=await Promise.all(s.map(A));e(o=>({attachments:[...o.attachments,...r]}))},removeAttachment:s=>{e(r=>({attachments:r.attachments.filter(o=>o.id!==s)}))},sendMessage:async s=>{const{draft:r,attachments:o,model:l,messages:i}=n(),d=r.trim()||(o.length>0?"Use the attached file as context and help with the prompt":"");if(!d&&o.length===0)return;const c={id:y(),role:"user",content:d,attachments:o.length>0?[...o]:void 0};e(m=>({messages:[...m.messages,c],draft:"",attachments:[],loading:!0,error:null}));try{const m=[...i,c].map(x=>({role:x.role,content:x.content,attachments:x.attachments?.map(h=>({kind:h.kind,name:h.name,mimeType:h.mimeType,size:h.size,dataUrl:h.dataUrl,text:h.text}))})),g=await S({model:l,messages:m,context:s}),j={id:y(),role:"assistant",content:g.message.content};e(x=>({messages:[...x.messages,j],loading:!1}))}catch(m){const g=m instanceof Error?m.message:"Prompt builder request failed";e({loading:!1,error:g})}}}));function P(e){return e?.filename??e?.url??e?.image??null}function C(e){const n=e.split(/[\\/]/).pop()??e;return n.length<=32?n:`${n.slice(0,14)}...${n.slice(-12)}`}function E(){const e=p(c=>c.scope),n=p(c=>c.clearImageScope),s=u(c=>c.currentImage),r=u(c=>c.history),{t:o}=f();if(e.kind==="draft")return t.jsx("span",{className:"prompt-builder__scope",children:o("promptBuilder.scopeDraft")});const i=P(s)===e.imageKey?s:r.find(c=>P(c)===e.imageKey)??null;if(!i)return t.jsx("span",{className:"prompt-builder__scope",children:o("promptBuilder.scopeDraft")});const d=o("promptBuilder.scopeImage",{name:C(e.imageKey)||o("promptBuilder.scopeImageFallback")});return t.jsxs("div",{className:"prompt-builder__scope-card",children:[t.jsx("img",{className:"prompt-builder__scope-thumb",src:i.thumb||i.url||i.image,alt:""}),t.jsx("span",{className:"prompt-builder__scope-name",children:d}),t.jsx("button",{type:"button",className:"prompt-builder__scope-remove",onClick:n,"aria-label":o("promptBuilder.removeScopeImage"),title:o("promptBuilder.removeScopeImage"),children:"×"})]})}const K=["gpt-5.5","gpt-5.4","gpt-5.4-mini","gpt-5.6-sol","gpt-5.6-terra","gpt-5.6-luna"];function $(){const e=p(l=>l.model),n=p(l=>l.setModel),[s,r]=_.useState(!1),{t:o}=f();return t.jsxs("div",{className:"prompt-builder__model-picker",onBlur:l=>{const i=l.relatedTarget;i instanceof Node&&l.currentTarget.contains(i)||r(!1)},children:[t.jsx("button",{type:"button",className:"prompt-builder__model-trigger","aria-label":o("promptBuilder.model"),"aria-haspopup":"listbox","aria-expanded":s,onClick:()=>r(l=>!l),onKeyDown:l=>{l.key==="Escape"&&r(!1)},children:t.jsx("span",{children:e})}),s&&t.jsx("div",{className:"prompt-builder__model-menu",role:"listbox","aria-label":o("promptBuilder.model"),children:K.map(l=>t.jsx("button",{type:"button",role:"option","aria-selected":l===e,className:`prompt-builder__model-option${l===e?" active":""}`,onClick:()=>{n(l),r(!1)},children:l},l))})]})}const D={"Brief Intent Summary":"summary","Final Prompt - Korean":"ko","Final Prompt - English":"en",Notes:"notes"},F=/^(Brief Intent Summary|Final Prompt - Korean|Final Prompt - English|Notes):\s*(.*)$/gim;function w(e){const n=e.trim();return(n.match(/^```(?:[a-zA-Z0-9_-]+)?\s*([\s\S]*?)\s*```$/)?.[1]??n).trim()}function R(e){const n={},s=Array.from(e.matchAll(F));for(let r=0;r<s.length;r+=1){const o=s[r],l=o[1]??"",i=D[l];if(!i||typeof o.index!="number")continue;const d=o[2]?.trim()??"",c=o.index+o[0].length,m=s[r+1]?.index??e.length,g=w([d,e.slice(c,m)].filter(Boolean).join(`
|
|
2
|
-
`));g&&(n[i]=g)}return n}function z(e){const n=R(e),s=[];return n.ko&&s.push({language:"ko",heading:"Final Prompt - Korean",text:n.ko}),n.en&&s.push({language:"en",heading:"Final Prompt - English",text:n.en}),s.length===0?null:{summary:n.summary,prompts:s,notes:n.notes}}function U({messageId:e,prompt:n}){const s=u(m=>m.setPrompt),r=u(m=>m.insertPromptToComposer),o=u(m=>m.showToast),{t:l}=f(),i=n.language==="ko"?l("promptBuilder.finalKoreanPrompt"):l("promptBuilder.finalEnglishPrompt"),d=()=>{s(n.text),o(l("promptBuilder.applied"))},c=()=>{r({id:`builder_${e}_${n.language}`,name:i,text:n.text,placement:"after"}),o(l("promptBuilder.inserted"))};return t.jsxs("section",{className:"prompt-builder__structured-card","aria-label":i,children:[t.jsxs("div",{className:"prompt-builder__structured-card-header",children:[t.jsx("strong",{children:i}),t.jsx("span",{children:n.language.toUpperCase()})]}),t.jsx("p",{children:n.text}),t.jsxs("div",{className:"prompt-builder__structured-actions",children:[t.jsx("button",{type:"button",onClick:d,children:l("promptBuilder.applyToPrompt")}),t.jsx("button",{type:"button",onClick:c,children:l("promptBuilder.insertAsBlock")})]})]})}function L(e){return e.kind==="image"?"IMG":e.kind==="text"?"TXT":"FILE"}function O({message:e}){const{t:n}=f(),s=e.role==="assistant"?z(e.content):null;return t.jsxs("article",{className:`prompt-builder__message prompt-builder__message--${e.role}`,children:[t.jsx("div",{className:"prompt-builder__message-role",children:e.role==="user"?n("promptBuilder.user"):n("promptBuilder.assistant")}),s?t.jsxs("div",{className:"prompt-builder__structured-prompts",children:[s.summary?t.jsx("p",{className:"prompt-builder__structured-summary",children:s.summary}):null,s.prompts.map(r=>t.jsx(U,{messageId:e.id,prompt:r},`${e.id}-${r.language}`)),s.notes?t.jsx("p",{className:"prompt-builder__structured-notes",children:s.notes}):null]}):t.jsx("p",{children:e.content}),e.attachments&&e.attachments.length>0?t.jsx("div",{className:"prompt-builder__message-attachments",children:e.attachments.map(r=>t.jsxs("span",{className:"prompt-builder__message-attachment",children:[r.kind==="image"&&r.dataUrl?t.jsx("img",{src:r.dataUrl,alt:""}):t.jsx("span",{children:L(r)}),t.jsx("em",{children:r.name})]},r.id))}):null]})}function q(){const e=p(o=>o.messages),n=p(o=>o.loading),s=_.useRef(null),{t:r}=f();return _.useEffect(()=>{const o=s.current;o&&(o.scrollTop=o.scrollHeight)},[e.length,n]),t.jsxs("div",{ref:s,className:"prompt-builder__messages",children:[e.length===0&&t.jsx("div",{className:"prompt-builder__empty",children:r("promptBuilder.empty")}),e.map(o=>t.jsx(O,{message:o},o.id)),n&&t.jsxs("div",{className:"prompt-builder__thinking",role:"status","aria-live":"polite",children:[t.jsxs("span",{className:"prompt-builder__thinking-dots","aria-hidden":"true",children:[t.jsx("span",{}),t.jsx("span",{}),t.jsx("span",{})]}),t.jsx("span",{children:r("promptBuilder.thinking")})]})]})}function G(e){return e.kind==="image"?"IMG":e.kind==="text"?"TXT":"FILE"}function H(){const e=p(r=>r.attachments),n=p(r=>r.removeAttachment),{t:s}=f();return e.length===0?null:t.jsx("div",{className:"prompt-builder__attachments",children:e.map(r=>t.jsxs("span",{className:"prompt-builder__attachment",children:[r.kind==="image"&&r.dataUrl?t.jsx("img",{src:r.dataUrl,alt:""}):t.jsx("span",{children:G(r)}),t.jsx("em",{children:r.name}),t.jsx("button",{type:"button",onClick:()=>n(r.id),"aria-label":s("promptBuilder.removeAttachment",{name:r.name}),title:s("promptBuilder.removeAttachment",{name:r.name}),children:"×"})]},r.id))})}function X(){const e=p(a=>a.draft),n=p(a=>a.setDraft),s=p(a=>a.loading),r=p(a=>a.addAttachments),o=p(a=>a.sendMessage),l=p(a=>a.messages),i=p(a=>a.clearMessages),d=p(a=>a.attachments),c=u(a=>a.prompt),m=u(a=>a.insertedPrompts),g=u(a=>a.quality),j=u(a=>a.getResolvedSize),x=u(a=>a.currentImage),h=_.useRef(null),{t:b}=f(),B=()=>{!e.trim()&&d.length===0||s||o({currentPrompt:c,insertedPrompts:m.map(a=>({name:a.name,text:a.text})),settings:{quality:g,size:j()},currentResultPrompt:x?.prompt??null})},N=a=>{a.length!==0&&r(a)},v=a=>{const k=Array.from(a.clipboardData?.files??[]);k.length!==0&&(a.preventDefault(),N(k))};return t.jsxs("div",{className:"prompt-builder__composer",children:[t.jsx(H,{}),t.jsx("textarea",{value:e,placeholder:b("promptBuilder.placeholder"),onChange:a=>n(a.target.value),onPaste:v,onKeyDown:a=>{a.key==="Enter"&&(a.ctrlKey||a.metaKey)&&(a.preventDefault(),B())}}),t.jsx("input",{ref:h,type:"file",multiple:!0,hidden:!0,onChange:a=>{N(Array.from(a.target.files??[])),a.target.value=""}}),t.jsxs("div",{className:"prompt-builder__composer-actions",children:[t.jsx("button",{type:"button",className:"prompt-builder__attach",onClick:()=>h.current?.click(),disabled:s,"aria-label":b("promptBuilder.attach"),title:b("promptBuilder.attach"),children:"+"}),t.jsx("button",{type:"button",className:"prompt-builder__clear",onClick:i,disabled:l.length===0||s,children:b("promptBuilder.clear")}),t.jsx("button",{type:"button",className:"prompt-builder__send",onClick:B,disabled:!e.trim()&&d.length===0||s,children:b(s?"promptBuilder.sending":"promptBuilder.send")})]})]})}function Y({variant:e="panel"}){const{t:n}=f();return t.jsxs("section",{className:`prompt-builder prompt-builder--${e}`,"aria-label":n("promptBuilder.title"),children:[t.jsxs("div",{className:"prompt-builder__header",children:[t.jsxs("div",{children:[t.jsx("span",{className:"section-title",children:n("promptBuilder.title")}),t.jsx(E,{})]}),t.jsx("div",{className:"prompt-builder__header-actions",children:t.jsx($,{})})]}),t.jsx(q,{}),t.jsx(X,{})]})}export{Y as PromptBuilderPanel};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{u as L,a as t,X as S,Y as C,Z as P,j as r}from"./index-CoxMOXAU.js";const R=["gpt-image-2 prompt","nano banana prompts","typography image prompt"];function k({disabled:d=!1,onError:a,onSourcesChanged:y}){const{t:s}=L(),[l,N]=t.useState("gpt-image-2 prompt"),[v,p]=t.useState([]),[n,c]=t.useState(!1),[g,m]=t.useState([]),[h,_]=t.useState({});t.useEffect(()=>{let e=!1;return S().then(i=>{e||p(i.candidates)}).catch(()=>{e||p([])}),()=>{e=!0}},[]);const w=t.useCallback(async()=>{c(!0),m([]),a(null);try{const e=await C({q:l.trim(),seeds:R});p(e.candidates),m([...e.warnings,...e.rateLimit?.remaining===0?["github-rate-limit-exhausted"]:[]]),e.candidates.length===0&&a(s("promptLibrary.discoveryNoResults"))}catch(e){a(e instanceof Error?e.message:s("promptLibrary.importFailed"))}finally{c(!1)}},[a,l,s]),x=t.useCallback(async(e,i)=>{c(!0),m([]),a(null);try{const j=(h[e.fullName]||"").split(/\r?\n|,/).map(u=>u.trim()).filter(Boolean),b=await P({repo:e.fullName,status:i,allowedPaths:i==="approved"?j:[],defaultSearch:i==="approved"&&j.length>0});m(b.warnings),p(u=>u.map(f=>f.fullName===e.fullName?b.candidate:f)),await y()}catch(o){a(o instanceof Error?o.message:s("promptLibrary.importFailed"))}finally{c(!1)}},[h,a,y,s]);return r.jsxs("div",{className:"prompt-import-dialog__discovery",children:[r.jsxs("div",{className:"prompt-import-dialog__section-title",children:[r.jsx("strong",{children:s("promptLibrary.discovery")}),r.jsx("span",{children:s("promptLibrary.discoveryReviewQueue")})]}),r.jsxs("div",{className:"prompt-import-dialog__discovery-actions",children:[r.jsx("input",{type:"text",value:l,onChange:e=>N(e.target.value),placeholder:s("promptLibrary.discoverySearchPlaceholder"),"aria-label":s("promptLibrary.discoverySearch")}),r.jsx("button",{type:"button",onClick:()=>{w()},disabled:d||n||!l.trim(),children:s(n?"common.loading":"promptLibrary.discoverySearch")})]}),g.length>0?r.jsx("div",{className:"prompt-import-dialog__discovery-warning",children:g.slice(0,3).join(" · ")}):null,v.length===0?r.jsx("div",{className:"prompt-import-dialog__empty",children:s("promptLibrary.discoveryNoResults")}):r.jsx("div",{className:"prompt-import-dialog__discovery-list",children:v.map(e=>r.jsxs("article",{className:"prompt-import-dialog__discovery-candidate",children:[r.jsxs("div",{children:[r.jsx("strong",{children:e.fullName}),r.jsx("small",{children:e.description||e.htmlUrl})]}),r.jsxs("div",{className:"prompt-import-dialog__score",children:[r.jsxs("span",{children:[s("promptLibrary.discoveryScore"),": ",e.score]}),r.jsx("span",{children:e.licenseSpdx}),r.jsx("span",{children:e.status})]}),e.scoreReasons.length>0?r.jsx("em",{children:e.scoreReasons.slice(0,3).join(" · ")}):null,e.warnings.length>0?r.jsx("b",{children:e.warnings.slice(0,2).join(" · ")}):null,r.jsx("textarea",{value:h[e.fullName]||"",onChange:i=>_(o=>({...o,[e.fullName]:i.target.value})),placeholder:"README.md, prompts/example.md","aria-label":s("promptLibrary.discoveryRequiresPaths")}),r.jsxs("div",{className:"prompt-import-dialog__review-actions",children:[r.jsx("button",{type:"button",onClick:()=>{x(e,"approved")},disabled:d||n,children:s("promptLibrary.discoveryApprove")}),r.jsx("button",{type:"button",onClick:()=>{x(e,"rejected")},disabled:d||n,children:s("promptLibrary.discoveryReject")})]})]},e.fullName))})]})}export{k as PromptImportDiscoverySection};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{u as w,a,$ as S,a0 as _,j as t}from"./index-CoxMOXAU.js";function F({input:i,disabled:h=!1,onCandidates:u,onError:l}){const{t:s}=w(),[f,g]=a.useState([]),[o,p]=a.useState(new Set),[d,n]=a.useState(!1),[x,c]=a.useState([]),y=a.useCallback(async()=>{if(i.trim()){n(!0),c([]),l(null);try{const e=await S({source:{kind:"github-folder",input:i.trim()}});g(e.files),p(new Set(e.files.slice(0,5).map(r=>r.path))),c(e.warnings),e.files.length===0&&l(s("promptLibrary.folderFilesEmpty"))}catch(e){g([]),p(new Set),l(e instanceof Error?e.message:s("promptLibrary.folderUnsupported"))}finally{n(!1)}}},[i,l,s]),b=a.useCallback(async()=>{const e=[...o];if(e.length===0){l(s("promptLibrary.folderNoSelection"));return}n(!0),c([]),l(null);try{const r=await _({source:{kind:"github-folder",input:i.trim()},paths:e});c(r.warnings),u(r.candidates)}catch(r){l(r instanceof Error?r.message:s("promptLibrary.importFailed"))}finally{n(!1)}},[i,u,l,o,s]);return t.jsxs("div",{className:"prompt-import-dialog__folder",children:[t.jsxs("div",{className:"prompt-import-dialog__section-title",children:[t.jsx("strong",{children:s("promptLibrary.folderFiles")}),t.jsx("span",{children:s("promptLibrary.folderBrowseHint")})]}),t.jsxs("div",{className:"prompt-import-dialog__folder-actions",children:[t.jsx("button",{type:"button",onClick:()=>{y()},disabled:h||d||!i.trim(),children:s(d?"common.loading":"promptLibrary.folderBrowse")}),t.jsx("button",{type:"button",onClick:()=>{b()},disabled:h||d||o.size===0,children:s("promptLibrary.folderPreviewSelected")}),t.jsx("span",{children:s("promptLibrary.folderSelectedCount",{count:o.size})})]}),f.length>0?t.jsx("div",{className:"prompt-import-dialog__folder-list",children:f.map(e=>t.jsxs("label",{className:"prompt-import-dialog__folder-file",children:[t.jsx("input",{type:"checkbox",checked:o.has(e.path),onChange:r=>{p(j=>{const m=new Set(j);return r.target.checked?m.add(e.path):m.delete(e.path),m})}}),t.jsxs("span",{children:[t.jsx("strong",{children:e.name}),t.jsx("small",{children:e.path})]}),t.jsxs("em",{children:[Math.ceil(e.sizeBytes/1024)," KB"]})]},e.path))}):null,x.length>0?t.jsx("div",{className:"prompt-import-dialog__folder-warning",children:x.slice(0,3).join(" · ")}):null]})}export{F as PromptImportFolderSection};
|