specrails-desktop 2.31.2 → 2.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/dist/assets/{ActivityFeedPage-Cdccp1kl.js → ActivityFeedPage-DaBTALGY.js} +1 -1
- package/client/dist/assets/{AgentBrowserCapture-DUwwfVOf.js → AgentBrowserCapture-SxwVNrUs.js} +1 -1
- package/client/dist/assets/{AgentModeCodePane-B1Fu0f_G.js → AgentModeCodePane-CmLgIoDw.js} +2 -2
- package/client/dist/assets/{AgentModeJobsPane-DA6wQKKt.js → AgentModeJobsPane-BvP_T32M.js} +1 -1
- package/client/dist/assets/{AgentsPage-CR72XsPj.js → AgentsPage-Bz7uDqvI.js} +1 -1
- package/client/dist/assets/{AnalyticsPage-CPnl0xkM.js → AnalyticsPage-DrNHMTed.js} +1 -1
- package/client/dist/assets/{CodePage-BYY7EF1b.js → CodePage-DZtAK2Ac.js} +1 -1
- package/client/dist/assets/{DesktopAnalyticsPage-9PUjsD8C.js → DesktopAnalyticsPage-DrvNiDb0.js} +1 -1
- package/client/dist/assets/{DocsDialog-zngqdI-4.js → DocsDialog-BEQpGC1o.js} +1 -1
- package/client/dist/assets/{DocsPage-CDJH_q9M.js → DocsPage-Btso3Viq.js} +1 -1
- package/client/dist/assets/{InteractiveJobComposer-drUo56r7.js → InteractiveJobComposer-Ca9-_4VF.js} +1 -1
- package/client/dist/assets/{JobDetailModal-CWmzaRXG.js → JobDetailModal-Brk7fL5A.js} +1 -1
- package/client/dist/assets/{JobDetailPage-xlzBYZEJ.js → JobDetailPage-DiQVcvW7.js} +1 -1
- package/client/dist/assets/{JobsPage-Dcnol1Y6.js → JobsPage-1SvirYQm.js} +1 -1
- package/client/dist/assets/{LoopBuilderPage-D3q7EoNM.js → LoopBuilderPage-X_YwJ-Ik.js} +1 -1
- package/client/dist/assets/{LoopPreviewModal-Q8osegkj.js → LoopPreviewModal-BeW-cr7A.js} +1 -1
- package/client/dist/assets/{LoopsPage-CATnNd1X.js → LoopsPage-Na9vDt4p.js} +1 -1
- package/client/dist/assets/{MinimizedChatsContext-DIsnQMVz.js → MinimizedChatsContext-BQQohTp2.js} +1 -1
- package/client/dist/assets/{PluginsPage-BOh6z0zK.js → PluginsPage-B-NLA93L.js} +1 -1
- package/client/dist/assets/{ProjectSettingsDialog-CNcANqEL.js → ProjectSettingsDialog-CQlq1Mf7.js} +1 -1
- package/client/dist/assets/{TemplatePreviewModal-4EpqyErX.js → TemplatePreviewModal-CPz1o3fP.js} +1 -1
- package/client/dist/assets/{TicketDetailModal-BfV4tnvr.js → TicketDetailModal-DEoAJOuD.js} +3 -3
- package/client/dist/assets/{Trans-cWtExGkC.js → Trans-CpUoGvNy.js} +1 -1
- package/client/dist/assets/agentstudio-BNUth0uj.js +1 -0
- package/client/dist/assets/agentstudio-BNdB5hkr.js +1 -0
- package/client/dist/assets/agentstudio-C7-bt8FO.js +1 -0
- package/client/dist/assets/agentstudio-C8uNchpV.js +1 -0
- package/client/dist/assets/agentstudio-CKabyMlg.js +1 -0
- package/client/dist/assets/agentstudio-CN2pokQu.js +1 -0
- package/client/dist/assets/agentstudio-DR7doNBV.js +1 -0
- package/client/dist/assets/agentstudio-y2dVDXeM.js +1 -0
- package/client/dist/assets/{dist-js-Cn09PP3z.js → dist-js-1QRck05T.js} +1 -1
- package/client/dist/assets/{dist-js-mq5XA-4f.js → dist-js-K9AsZWxz.js} +1 -1
- package/client/dist/assets/{formatDistanceToNow-DUyzS4rr.js → formatDistanceToNow-2bGOYubE.js} +1 -1
- package/client/dist/assets/{getTimezoneOffsetInMilliseconds-BCIwmmTj.js → getTimezoneOffsetInMilliseconds-B_N-0uSl.js} +1 -1
- package/client/dist/assets/{i18n-D21Pr8Sj.js → i18n-B2SaZsf2.js} +2 -2
- package/client/dist/assets/{index-CzNyrRn5.js → index-Bpzm94S9.js} +17 -17
- package/client/dist/assets/index-ChIuonbC.css +2 -0
- package/client/dist/assets/loops-B2_97D26.js +1 -0
- package/client/dist/assets/loops-BISOkuCu.js +1 -0
- package/client/dist/assets/loops-Bo6w_peZ.js +1 -0
- package/client/dist/assets/loops-BwxCndZk.js +1 -0
- package/client/dist/assets/loops-CD19kEzq.js +1 -0
- package/client/dist/assets/loops-CMMQOw2P.js +1 -0
- package/client/dist/assets/loops-CnxqL8IL.js +1 -0
- package/client/dist/assets/loops-aEb4RxN2.js +1 -0
- package/client/dist/assets/setup-CA9J5hck.js +1 -0
- package/client/dist/assets/setup-CK8IKkeD.js +1 -0
- package/client/dist/assets/setup-Cas_jrnl.js +1 -0
- package/client/dist/assets/setup-ClcYC8KP.js +1 -0
- package/client/dist/assets/setup-CtfFTXdf.js +1 -0
- package/client/dist/assets/setup-D73npsqO.js +1 -0
- package/client/dist/assets/setup-DXw1UgZB.js +1 -0
- package/client/dist/assets/setup-DsKIBie0.js +1 -0
- package/client/dist/assets/{spending-BCyUxoOI.js → spending-B20-uFLQ.js} +1 -1
- package/client/dist/assets/{useBrowserCaptureSession-CkVCDzer.js → useBrowserCaptureSession-DACautTD.js} +1 -1
- package/client/dist/assets/{useDesktop-DCP_MHp9.js → useDesktop-Cwyis9DX.js} +1 -1
- package/client/dist/index.html +14 -14
- package/package.json +1 -1
- package/server/dist/ai-invocations.js +35 -0
- package/server/dist/job-phase-breakdown.js +132 -0
- package/server/dist/loop-executors.js +10 -3
- package/server/dist/loop-factory.js +7 -5
- package/server/dist/loop-graph.js +4 -3
- package/server/dist/loop-run-manager.js +7 -3
- package/server/dist/loop-templates.js +4 -3
- package/server/dist/pr-body.js +13 -0
- package/server/dist/profiles-router.js +24 -1
- package/server/dist/project-router-jobs.js +16 -0
- package/server/dist/queue-manager.js +4 -0
- package/server/dist/rail-isolated-launch.js +15 -0
- package/server/dist/rail-pr-decision.js +10 -0
- package/server/dist/repo-map.js +293 -0
- package/server/dist/spawn-lifecycle.js +1 -1
- package/server/dist/worktree-node-modules.js +158 -0
- package/client/dist/assets/agentstudio-8TQqBenW.js +0 -1
- package/client/dist/assets/agentstudio-B8Z_mmEX.js +0 -1
- package/client/dist/assets/agentstudio-BZR9YmLs.js +0 -1
- package/client/dist/assets/agentstudio-Bge9pAWb.js +0 -1
- package/client/dist/assets/agentstudio-Bz169Vzt.js +0 -1
- package/client/dist/assets/agentstudio-D6L2jpNi.js +0 -1
- package/client/dist/assets/agentstudio-K2-Z7CL0.js +0 -1
- package/client/dist/assets/agentstudio-Zmgzthv8.js +0 -1
- package/client/dist/assets/index-Bz0TeGRs.css +0 -2
- package/client/dist/assets/loops-BzfXWEwO.js +0 -1
- package/client/dist/assets/loops-CPpgMapU.js +0 -1
- package/client/dist/assets/loops-CWWbKuVL.js +0 -1
- package/client/dist/assets/loops-Crc9It8o.js +0 -1
- package/client/dist/assets/loops-DH2hZcbK.js +0 -1
- package/client/dist/assets/loops-DS5TmvIU.js +0 -1
- package/client/dist/assets/loops-P2f0cN8-.js +0 -1
- package/client/dist/assets/loops-fJV-9hH7.js +0 -1
- package/client/dist/assets/setup-BBiHEO7h.js +0 -1
- package/client/dist/assets/setup-BlTWhNIQ.js +0 -1
- package/client/dist/assets/setup-Bp2L_oiP.js +0 -1
- package/client/dist/assets/setup-CInYXp1-.js +0 -1
- package/client/dist/assets/setup-CYH3bP6K.js +0 -1
- package/client/dist/assets/setup-DwcQ921P.js +0 -1
- package/client/dist/assets/setup-PBLjuDSs.js +0 -1
- package/client/dist/assets/setup-bx6FtoBp.js +0 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/dist-js-
|
|
2
|
-
import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t,t as n}from"./jsx-runtime-zu2_FqZY.js";import{t as r}from"./react-dom-DiWzBDP9.js";import{t as i}from"./preload-helper-Czpn1I53.js";import{l as a}from"./chunk-KS7C4IRE-Cx5sqopX.js";import{_ as o,a as s,f as c,h as l,o as u,v as d}from"./i18n-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/dist-js-1QRck05T.js","assets/index-Bpzm94S9.js","assets/rolldown-runtime-CNC7AqOf.js","assets/jsx-runtime-zu2_FqZY.js","assets/react-dom-DiWzBDP9.js","assets/preload-helper-Czpn1I53.js","assets/chunk-KS7C4IRE-Cx5sqopX.js","assets/i18n-B2SaZsf2.js","assets/createLucideIcon-Bjbbp_KS.js","assets/activity-DiyjsgQV.js","assets/addspec-x3mizDxc.js","assets/agent-Bs9NilfI.js","assets/agents-ms7TwG16.js","assets/agentstudio-CN2pokQu.js","assets/aiedit-iIjz2_Qk.js","assets/analytics-BHqUazhP.js","assets/attachments-B53PG733.js","assets/browser-CXUcnTMI.js","assets/builder-skfnZ1uC.js","assets/chat-BGD7MXAy.js","assets/code-CHPkOkDS.js","assets/commands-DyUZQ1FI.js","assets/common-DHsv9N5d.js","assets/dashboard-C_NQZle_.js","assets/explore-DgBACn39.js","assets/integrations-mB-7zoyT.js","assets/jira-CmKWERE0.js","assets/jobs-B_TeSQxb.js","assets/loops-CnxqL8IL.js","assets/mcp-uDkXYu4L.js","assets/nav-VaB-C4k5.js","assets/settings-CuVwOpe0.js","assets/setup-D73npsqO.js","assets/specs-DII0C8gw.js","assets/terminal-BFRZnMPP.js","assets/tickets-CqqOHbli.js","assets/Trans-CpUoGvNy.js","assets/dist-bVqfYmby.js","assets/arrow-left-CpIR4j7G.js","assets/useBrowserCaptureSession-DACautTD.js","assets/auth-D_5bQv5W.js","assets/api-B2M7CtDw.js","assets/arrow-up-right-9DoMn7fD.js","assets/MinimizedChatsContext-BQQohTp2.js","assets/sparkles-DrY8hb0X.js","assets/x-CBMI9ejn.js","assets/useSharedWebSocket-DaPh7QBL.js","assets/useDesktop-Cwyis9DX.js","assets/external-link-BcU5EWZp.js","assets/chevron-right-CViMxucY.js","assets/circle-x-CMYsN4ZH.js","assets/download-CFHyyHcw.js","assets/file-text-CFT-xXKN.js","assets/git-branch-BRM0F5GN.js","assets/loader-circle-DcygOQpC.js","assets/pencil-C9RkrIPZ.js","assets/play-DNlrawbS.js","assets/plus-CsnjfkmX.js","assets/save-28sIlCdr.js","assets/search-Cq_gE3Ik.js","assets/trash-2-BOU3WdZZ.js","assets/triangle-alert-H9T4jAmh.js","assets/zap-CHo3aCD1.js","assets/dist-Cez5CRkX.js","assets/button-BUIIBQPT.js","assets/clsx-CjueKrWZ.js","assets/utils-BC4DHlz2.js","assets/dialog-CzIekCw0.js","assets/jira-api-BgFIr8eD.js","assets/provider-capabilities-BvoExILy.js","assets/lib-CGdyxIWg.js","assets/getTimezoneOffsetInMilliseconds-B_N-0uSl.js","assets/index-ChIuonbC.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t,t as n}from"./jsx-runtime-zu2_FqZY.js";import{t as r}from"./react-dom-DiWzBDP9.js";import{t as i}from"./preload-helper-Czpn1I53.js";import{l as a}from"./chunk-KS7C4IRE-Cx5sqopX.js";import{_ as o,a as s,f as c,h as l,o as u,v as d}from"./i18n-B2SaZsf2.js";import{t as f}from"./Trans-CpUoGvNy.js";import{n as p,t as m}from"./createLucideIcon-Bjbbp_KS.js";import{n as h}from"./dist-bVqfYmby.js";import{t as g}from"./arrow-left-CpIR4j7G.js";import{c as _,g as v,h as y,i as b,m as x,o as S,t as C,u as w}from"./useBrowserCaptureSession-DACautTD.js";import{n as T,u as E}from"./MinimizedChatsContext-BQQohTp2.js";import{n as D,t as ee}from"./external-link-BcU5EWZp.js";import{t as te}from"./circle-x-CMYsN4ZH.js";import{t as ne}from"./download-CFHyyHcw.js";import{t as O}from"./file-text-CFT-xXKN.js";import{t as re}from"./git-branch-BRM0F5GN.js";import{t as ie}from"./loader-circle-DcygOQpC.js";import{t as ae}from"./pencil-C9RkrIPZ.js";import{t as k}from"./play-DNlrawbS.js";import{t as oe}from"./plus-CsnjfkmX.js";import{t as se}from"./save-28sIlCdr.js";import{t as ce}from"./search-Cq_gE3Ik.js";import{t as le}from"./trash-2-BOU3WdZZ.js";import{t as A}from"./triangle-alert-H9T4jAmh.js";import{t as ue}from"./x-CBMI9ejn.js";import{t as de}from"./zap-CHo3aCD1.js";import{a as j}from"./auth-D_5bQv5W.js";import{n as M}from"./useSharedWebSocket-DaPh7QBL.js";import{t as N}from"./api-B2M7CtDw.js";import{r as P}from"./useDesktop-Cwyis9DX.js";import{t as F}from"./button-BUIIBQPT.js";import{t as I}from"./utils-BC4DHlz2.js";import{a as fe,c as pe,i as me,n as he,o as ge,r as _e,s as ve,t as ye}from"./dialog-CzIekCw0.js";import{t as L}from"./jira-api-BgFIr8eD.js";import{n as be}from"./provider-capabilities-BvoExILy.js";import{n as R,t as xe}from"./lib-CGdyxIWg.js";import{t as z}from"./formatDistanceToNow-2bGOYubE.js";import{n as Se}from"./spending-B20-uFLQ.js";var B=m(`circle-arrow-right`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m12 16 4-4-4-4`,key:`1i9zcv`}],[`path`,{d:`M8 12h8`,key:`1wcyev`}]]),Ce=m(`circle`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),we=m(`columns-2`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M12 3v18`,key:`108xh3`}]]),Te=m(`file-minus-corner`,[[`path`,{d:`M20 14V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12`,key:`l9p8hp`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M14 18h6`,key:`1m8k6r`}]]),Ee=m(`file-plus-corner`,[[`path`,{d:`M11.35 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v5.35`,key:`17jvcc`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M14 19h6`,key:`bvotb8`}],[`path`,{d:`M17 16v6`,key:`18yu1i`}]]),V=m(`git-commit-horizontal`,[[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}],[`line`,{x1:`3`,x2:`9`,y1:`12`,y2:`12`,key:`1dyftd`}],[`line`,{x1:`15`,x2:`21`,y1:`12`,y2:`12`,key:`oup4p8`}]]),De=m(`git-pull-request`,[[`circle`,{cx:`18`,cy:`18`,r:`3`,key:`1xkwt0`}],[`circle`,{cx:`6`,cy:`6`,r:`3`,key:`1lh9wr`}],[`path`,{d:`M13 6h3a2 2 0 0 1 2 2v7`,key:`1yeb86`}],[`line`,{x1:`6`,x2:`6`,y1:`9`,y2:`21`,key:`rroup`}]]),Oe=m(`message-square`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}]]),H=m(`split`,[[`path`,{d:`M16 3h5v5`,key:`1806ms`}],[`path`,{d:`M8 3H3v5`,key:`15dfkv`}],[`path`,{d:`M12 22v-8.3a4 4 0 0 0-1.172-2.872L3 3`,key:`1qrqzj`}],[`path`,{d:`m15 9 6-6`,key:`ko1vev`}]]),ke=m(`ticket`,[[`path`,{d:`M2 9a3 3 0 0 1 0 6v2a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-2a3 3 0 0 1 0-6V7a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z`,key:`qn84l0`}],[`path`,{d:`M13 5v2`,key:`dyzc3o`}],[`path`,{d:`M13 17v2`,key:`1ont0d`}],[`path`,{d:`M13 11v2`,key:`1wjjxi`}]]),U=new Map,Ae=2e3;function je(e){U.set(e,(U.get(e)??0)+1)}function Me(e){(U.get(e)??0)<=0||setTimeout(()=>{let t=(U.get(e)??0)-1;t<=0?U.delete(e):U.set(e,t)},Ae)}function Ne(e){return e?(U.get(e)??0)>0:!1}var W=e(t(),1),Pe=3e3,Fe=`
|
|
3
3
|
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
## Contract Layer
|
|
7
7
|
|
|
8
|
-
`;function G(e){return`${j}/api/projects/${encodeURIComponent(e)}`}function Ie(e,t){return JSON.stringify(e)===JSON.stringify(t)}function Le(e,t){let n=new Map(e.map(e=>[e.id,e])),r=t.map(e=>{let t=n.get(e.id);return t&&Ie(t,e)?t:e});return r.length===e.length&&r.every((t,n)=>t===e[n])?e:r}function K(){let{t:e}=p(`tickets`),{activeProjectId:t}=P(),[n,r]=(0,W.useState)([]),[i,a]=(0,W.useState)(!1),[o,s]=(0,W.useState)(null),[c,l]=(0,W.useState)(new Set),[u,d]=(0,W.useState)(new Set),f=(0,W.useRef)(t);f.current=t;let m=(0,W.useRef)(0),g=(0,W.useRef)(null),_=(0,W.useRef)(new Set),{registerHandler:v,unregisterHandler:y,connectionStatus:b}=M(),x=(0,W.useId)(),S=(0,W.useCallback)(async(e,t)=>{let n=G(e),r=await fetch(`${n}/tickets`,{signal:t,cache:`no-store`});if(!r.ok)throw Error(`Failed to fetch tickets: ${r.status}`);let i=await r.json();return Array.isArray(i)?i:i.tickets??[]},[]),C=(0,W.useCallback)(async(t,n)=>{let i=++m.current;g.current?.abort();let o=new AbortController;g.current=o,f.current===t&&(a(!0),s(null));try{let a=await S(t,o.signal);if(o.signal.aborted||i!==m.current||f.current!==t)return;let s=_.current,c=new Set;if(n===`merge`)for(let e of a)s.size>0&&!s.has(e.id)&&c.add(e.id);_.current=new Set(a.map(e=>e.id)),r(n===`replace`?a:e=>Le(e,a)),c.size>0&&s.size>0&&(l(c),h.success(e(`toasts.newTicketsAdded`,{count:c.size}),{id:`tickets-added-${t}`}),setTimeout(()=>{f.current===t&&l(e=>{let t=new Set(e);for(let e of c)t.delete(e);return t})},Pe))}catch(e){if(o.signal.aborted||i!==m.current||f.current!==t)return;s(e instanceof Error?e.message:String(e))}finally{i===m.current&&(g.current===o&&(g.current=null),f.current===t&&a(!1))}},[S,e]),w=(0,W.useCallback)(async()=>{t&&await C(t,`merge`)},[t,C]);(0,W.useEffect)(()=>{if(m.current+=1,g.current?.abort(),g.current=null,r([]),a(!1),s(null),_.current=new Set,l(new Set),d(new Set),t)return C(t,`replace`),()=>{m.current+=1,g.current?.abort(),g.current=null}},[t,C]);let T=(0,W.useCallback)(t=>{let n=t;if(!n||typeof n.type!=`string`)return;let i=f.current;if(!(n.projectId&&n.projectId!==i))switch(n.type){case`mcp.activity`:n.affectedProjectId&&n.affectedProjectId===i&&w();break;case`ticket_created`:{if(!n.ticket)break;let t=n.ticket;r(e=>e.some(e=>e.id===t.id)?e:[...e,t]),_.current.add(t.id),l(e=>new Set([...e,t.id])),Ne(i)||h.success(e(`toasts.newTicket`,{title:t.title}),{id:`new-ticket-${t.id}`}),setTimeout(()=>{l(e=>{let n=new Set(e);return n.delete(t.id),n})},Pe);break}case`ticket_updated`:{if(!n.ticket)break;if(n.ticket.id===0){w();break}let e=n.ticket;r(t=>t.map(t=>t.id===e.id?e:t)),typeof e.description==`string`&&e.description.includes(Fe)&&d(t=>{if(!t.has(e.id))return t;let n=new Set(t);return n.delete(e.id),n});break}case`ticket_deleted`:{if(n.ticketId==null)break;let e=n.ticketId;r(t=>t.filter(t=>t.id!==e)),_.current.delete(e);break}case`explore.contract_refine_started`:if(n.ticketId==null)break;d(e=>new Set([...e,n.ticketId]));break;case`explore.contract_refine_failed`:{if(n.ticketId==null)break;let e=n.ticketId;d(t=>{if(!t.has(e))return t;let n=new Set(t);return n.delete(e),n});break}}},[w,e]);(0,W.useLayoutEffect)(()=>(v(`tickets-${x}`,T),()=>y(`tickets-${x}`)),[T,v,y,x]);let E=(0,W.useRef)(b);return(0,W.useEffect)(()=>{E.current!==`connected`&&b===`connected`&&f.current&&w(),E.current=b},[b,w]),{tickets:n,loading:i,isLoading:i,error:o,newTicketIds:c,contractRefiningIds:u,refetch:w,refresh:w,deleteTicket:(0,W.useCallback)(async e=>{let n=t;if(!n)return!1;try{let t=await fetch(`${G(n)}/tickets/${e}`,{method:`DELETE`});return t.ok&&f.current===n&&await C(n,`merge`),t.ok}catch{return!1}},[t,C]),updateTicketStatus:(0,W.useCallback)(async(e,n)=>{let r=t;if(!r)return!1;try{let t=await fetch(`${G(r)}/tickets/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({status:n})});return t.ok&&f.current===r&&await C(r,`merge`),t.ok}catch{return!1}},[t,C]),updateTicketPriority:(0,W.useCallback)(async(e,n)=>{let r=t;if(!r)return!1;try{let t=await fetch(`${G(r)}/tickets/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({priority:n})});return t.ok&&f.current===r&&await C(r,`merge`),t.ok}catch{return!1}},[t,C]),createTicket:(0,W.useCallback)(async e=>{let n=t;if(!n)return!1;try{let t=await fetch(`${G(n)}/tickets`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});return t.ok&&f.current===n&&await C(n,`merge`),t.ok}catch{return!1}},[t,C]),updateTicket:(0,W.useCallback)(async(e,n)=>{let r=t;if(!r)return!1;try{let t=await fetch(`${G(r)}/tickets/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)});return t.ok&&f.current===r&&await C(r,`merge`),t.ok}catch{return!1}},[t,C])}}var q=n(),Re=224,ze=8,Be=8;function Ve({rails:e,onMoveToRail:t,onClose:n,anchorRect:r}){let{t:i}=p(`tickets`),a=(0,W.useRef)(null),[o,s]=(0,W.useState)(!1);(0,W.useLayoutEffect)(()=>{let e=requestAnimationFrame(()=>s(!0));return()=>cancelAnimationFrame(e)},[]),(0,W.useEffect)(()=>{function e(e){a.current&&(a.current.contains(e.target)||n())}function t(e){e.key===`Escape`&&n()}return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,t)}},[n]);let{top:c,left:l,caretLeft:u}=(0,W.useMemo)(()=>{let e=r.left+r.width/2,t=e-Re/2,n=window.innerWidth-Re-ze,i=Math.max(ze,Math.min(n,t)),a=e-i,o=Math.max(12,Math.min(Re-12,a));return{top:r.bottom+Be,left:i,caretLeft:o}},[r]);return(0,q.jsxs)(`div`,{ref:a,role:`dialog`,"aria-label":i(`rail.popoverTitle`),"data-testid":`move-to-rail-popover`,style:{top:c,left:l,width:Re,opacity:+!!o,transform:o?`translateY(0) scale(1)`:`translateY(-4px) scale(0.97)`,transformOrigin:`${u}px top`,transition:`opacity 140ms ease-out, transform 160ms cubic-bezier(0.2, 0.9, 0.3, 1)`},className:`fixed z-50 rounded-xl border border-border/60 bg-card/95 backdrop-blur shadow-xl shadow-black/40 p-1`,children:[(0,q.jsx)(`div`,{"aria-hidden":!0,className:`absolute w-2 h-2 rotate-45 bg-card/95 border-l border-t border-border/60`,style:{top:-5,left:u-4}}),(0,q.jsx)(`div`,{className:`px-2 py-1.5 text-[10px] uppercase tracking-wider text-muted-foreground/70 font-medium`,children:i(`rail.popoverTitle`)}),e.length===0?(0,q.jsx)(`div`,{className:`px-2 py-2 text-xs text-muted-foreground`,children:i(`rail.noRails`)}):(0,q.jsx)(`ul`,{className:`flex flex-col`,children:e.map(e=>(0,q.jsx)(`li`,{children:(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{t(e.id),n()},className:`w-full flex items-center gap-2 px-2 py-1.5 rounded-lg text-left text-sm hover:bg-accent-info/10 hover:text-accent-info transition-colors`,children:[e.status===`running`?(0,q.jsx)(k,{className:`w-3 h-3 text-accent-success animate-pulse shrink-0`,"aria-hidden":!0}):(0,q.jsx)(Ce,{className:`w-3 h-3 text-muted-foreground/60 shrink-0`,"aria-hidden":!0}),(0,q.jsx)(`span`,{className:`flex-1 truncate`,children:e.label}),(0,q.jsx)(B,{className:`w-3.5 h-3.5 text-muted-foreground/40 shrink-0`,"aria-hidden":!0})]})},e.id))})]})}var He=/\n*##\s*Acceptance Criteria\s*\n([\s\S]*?)(?=\n##\s|\n*$)/i;function J(e){if(!e)return{body:``,criteria:[]};let t=He.exec(e);if(!t)return{body:e.replace(/\s+$/,``),criteria:[]};let n=t[1],r=e.slice(0,t.index),i=e.slice(t.index+t[0].length),a=`${r.replace(/\s+$/,``)}${i?`\n\n${i.replace(/^\s+/,``)}`:``}`,o=n.split(/\r?\n/).map(e=>e.replace(/^\s*[-*+]\s+/,``).trim()).filter(e=>e.length>0);return{body:a.replace(/\s+$/,``),criteria:o}}var Ue=new Set([`draft`,`todo`]);function We(e){return!!(Ue.has(e.status)||e.source===`jira`&&e.jira_key&&e.status!==`cancelled`)}function Y(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e===`x`?t:t&3|8).toString(16)})}var X=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_TERMINAL_PANEL;return typeof e!=`string`||e!==`false`})(),Z=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_AGENTS_SECTION;return typeof e!=`string`||e!==`false`})(),Ge=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_CODE_EXPLORER;return typeof e!=`string`||e!==`false`})(),Ke=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_JIRA;return typeof e!=`string`||e!==`false`})(),qe=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_MCP;return typeof e!=`string`||e!==`false`})(),Je=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_AGENT_CHAT;return typeof e!=`string`||e!==`false`})(),Ye=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_AGENT_MODE;return Je&&(typeof e!=`string`||e!==`false`)})();(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_INTERACTIVE_JOBS;return typeof e!=`string`||e!==`false`})();var Xe=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_LOOPS_SECTION;return typeof e!=`string`||e!==`false`})(),Ze=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_PROJECT_BUILDER;return typeof e!=`string`||e!==`false`})();function Qe(){let{activeProjectId:e}=P(),[t,n]=(0,W.useState)({connected:!1,key:null,discardStatus:null}),[r,i]=(0,W.useState)(!0);return(0,W.useEffect)(()=>{if(!Ke||!e){n({connected:!1,key:null,discardStatus:null}),i(!1);return}let t=!1;return i(!0),L.getConnection().then(e=>{if(t)return;let r=!!(e.connected&&e.connection?.enabled);n({connected:r,key:e.connection?.jiraProjectKey??null,discardStatus:r?e.connection?.discardStatus??null:null})}).catch(()=>{t||n({connected:!1,key:null,discardStatus:null})}).finally(()=>{t||i(!1)}),()=>{t=!0}},[e]),{connected:t.connected,jiraProjectKey:t.key,discardStatus:t.discardStatus,loading:r}}function $e({open:e,onOpenChange:t,ticket:n,discardStatus:r,onDiscarded:i}){let{t:a}=p(`jira`),[o,s]=(0,W.useState)(``),[c,l]=(0,W.useState)(!1);async function u(){l(!0);try{await L.discardSpec(n.id,o.trim()||null),h.success(a(`discard.movedToast`,{status:r,key:n.jira_key??`#${n.id}`})),t(!1),s(``),i?.()}catch(e){h.error(e instanceof Error?e.message:a(`errors.generic`))}finally{l(!1)}}return(0,q.jsx)(ye,{open:e,onOpenChange:e=>{c||t(e)},children:(0,q.jsxs)(he,{movableResizable:!0,className:`max-w-md`,"data-testid":`jira-discard-dialog`,children:[(0,q.jsxs)(fe,{children:[(0,q.jsx)(ge,{children:a(`discard.title`,{status:r})}),(0,q.jsx)(_e,{children:a(`discard.body`,{status:r,key:n.jira_key??`#${n.id}`})})]}),(0,q.jsxs)(`label`,{className:`block space-y-1`,children:[(0,q.jsx)(`span`,{className:`text-xs font-medium text-foreground`,children:a(`discard.commentLabel`)}),(0,q.jsx)(`textarea`,{value:o,onChange:e=>s(e.target.value),placeholder:a(`discard.commentPlaceholder`),rows:3,className:`w-full rounded-md border border-border bg-input px-3 py-2 text-xs text-foreground placeholder:text-muted-foreground resize-none`,"data-testid":`jira-discard-comment`})]}),(0,q.jsxs)(me,{children:[(0,q.jsx)(F,{variant:`outline`,size:`sm`,onClick:()=>t(!1),disabled:c,children:a(`wizard.cancel`)}),(0,q.jsxs)(F,{size:`sm`,onClick:u,disabled:c,"data-testid":`jira-discard-confirm`,children:[(0,q.jsx)(v,{className:`w-3.5 h-3.5 mr-1.5`}),c?a(`discard.moving`):a(`discard.confirm`,{status:r})]})]})]})})}var et={draft:{dotClass:`bg-accent-secondary/60`,textClass:`text-accent-secondary`,borderClass:`border-l-[3px] border-dashed border-accent-secondary/50 pl-3`,labelKey:`common:status.draft`,pulsing:!1},todo:{dotClass:`bg-slate-500/70`,textClass:`text-muted-foreground`,borderClass:`border-l-[3px] border-dashed border-slate-500/40 pl-3`,labelKey:`status.todo`,pulsing:!1},in_progress:{dotClass:`bg-blue-400 aurora-light:bg-accent-info`,textClass:`text-foreground font-semibold`,borderClass:`border-l-[3px] border-solid border-blue-500 pl-3`,labelKey:`status.inProgress`,pulsing:!0},on_review:{dotClass:`bg-accent-warning/80`,textClass:`text-accent-warning`,borderClass:`border-l-[3px] border-solid border-accent-warning/60 pl-3`,labelKey:`status.onReview`,pulsing:!1},done:{dotClass:`text-emerald-400 aurora-light:text-accent-success`,textClass:`text-emerald-400/80 aurora-light:text-accent-success`,borderClass:`border-l-[3px] border-solid border-emerald-500 pl-3`,labelKey:`status.done`,pulsing:!1},cancelled:{dotClass:`text-red-400/60 aurora-light:text-destructive/70`,textClass:`text-muted-foreground/50`,borderClass:`pl-3`,labelKey:`status.cancelled`,pulsing:!1}};function tt({status:e,className:t}){let{t:n}=p(`specs`),r=et[e];return e===`done`?(0,q.jsx)(D,{className:I(`w-3.5 h-3.5 shrink-0`,r.dotClass,t),"aria-label":n(`status.done`)}):e===`cancelled`?(0,q.jsx)(ue,{className:I(`w-3.5 h-3.5 shrink-0`,r.dotClass,t),"aria-label":n(`status.cancelled`)}):r.pulsing?(0,q.jsxs)(`span`,{className:I(`relative flex shrink-0 h-2.5 w-2.5`,t),"aria-label":n(`status.inProgress`),children:[(0,q.jsx)(`span`,{className:I(`animate-ping absolute inline-flex h-full w-full rounded-full opacity-60`,r.dotClass)}),(0,q.jsx)(`span`,{className:I(`relative inline-flex rounded-full h-2.5 w-2.5`,r.dotClass)})]}):(0,q.jsx)(`span`,{className:I(`inline-flex rounded-full h-2.5 w-2.5 shrink-0`,r.dotClass,t),"aria-label":n(r.labelKey)})}function nt({status:e,className:t}){let{t:n}=p(`specs`),r=et[e];return(0,q.jsxs)(`span`,{className:I(`inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full text-[11px] font-medium border`,e===`todo`&&`bg-slate-500/10 border-slate-500/30 text-slate-400 aurora-light:bg-muted aurora-light:border-border aurora-light:text-muted-foreground`,e===`in_progress`&&`bg-blue-500/10 border-blue-500/30 text-blue-400 aurora-light:bg-accent-info/10 aurora-light:border-accent-info/30 aurora-light:text-accent-info`,e===`on_review`&&`bg-accent-warning/10 border-accent-warning/30 text-accent-warning`,e===`done`&&`bg-emerald-500/10 border-emerald-500/30 text-emerald-400 aurora-light:bg-accent-success/10 aurora-light:border-accent-success/30 aurora-light:text-accent-success`,e===`cancelled`&&`bg-red-500/10 border-red-500/30 text-red-400/60 aurora-light:bg-destructive/10 aurora-light:border-destructive/30 aurora-light:text-destructive/70`,t),children:[(0,q.jsx)(tt,{status:e}),n(r.labelKey)]})}async function rt(e,t,n){let r=new FormData;r.append(`file`,t);let i=await fetch(`${N()}/tickets/${e}/attachments`,{method:`POST`,body:r,signal:n});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e.error??u.t(`attachments:errors.uploadFailed`,{status:i.status}))}return(await i.json()).attachment}async function it(e,t){let n=await fetch(`${N()}/tickets/${e}/attachments/${t}`,{method:`DELETE`});if(!n.ok&&n.status!==404)throw Error(u.t(`attachments:errors.deleteFailed`,{status:n.status}))}async function at(e){let t=await fetch(`${N()}/tickets/${e}/attachments`,{method:`DELETE`});if(!t.ok&&t.status!==404)throw Error(u.t(`attachments:errors.bulkDeleteFailed`,{status:t.status}))}async function ot(e){let t=await fetch(`${N()}/tickets/${e}/attachments`);if(!t.ok)throw Error(u.t(`attachments:errors.listFailed`,{status:t.status}));return(await t.json()).attachments}function st(e,t){return`${N()}/tickets/${e}/attachments/${t}`}async function ct(e,t){let n=await fetch(st(e,t));if(!n.ok)throw Error(u.t(`attachments:errors.fetchFailed`,{status:n.status}));return n.blob()}var lt=`image/jpeg,image/png,image/gif,image/webp,application/pdf,text/csv,text/plain,application/json,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel,application/sql,application/x-sql,text/sql,text/x-sql,.sql`,ut=new Set(lt.split(`,`).filter(e=>!e.startsWith(`.`))),dt=/\.sql$/i,ft=/\.(png|jpe?g|gif|webp)$/i;function pt(e){return ut.has(e.type)||dt.test(e.name)||ft.test(e.name)}function mt(){return typeof window<`u`&&window.__TAURI_INTERNALS__!==void 0}function ht(e){return Function(`s`,`return import(s)`)(e).catch(()=>null)}async function gt(e){if(mt()){try{let t=await ht(`@tauri-apps/plugin-opener`);if(t?.revealItemInDir){await t.revealItemInDir(e);return}}catch{}try{await(await ht(`@tauri-apps/api/shell`))?.open?.(e)}catch{}}}async function Q(e){if(mt())try{let t=await i(()=>import(`./dist-js-Cn09PP3z.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72]));if(typeof t.open==`function`){await t.open(e);return}}catch(e){console.warn(`[openExternalUrl] tauri shell open failed:`,e)}try{window.open(e,`_blank`,`noopener,noreferrer`)}catch{}}function _t(e,t){let n=()=>l(t?.in,NaN),r=t?.additionalDigits??2,i=St(e),a;if(i.date){let e=Ct(i.date,r);a=wt(e.restDateString,e.year)}if(!a||isNaN(+a))return n();let o=+a,s=0,u;if(i.time&&(s=Et(i.time),isNaN(s)))return n();if(i.timezone){if(u=Ot(i.timezone),isNaN(u))return n()}else{let e=new Date(o+s),n=c(0,t?.in);return n.setFullYear(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()),n.setHours(e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()),n}return c(o+s+u,t?.in)}var vt={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},yt=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,bt=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,xt=/^([+-])(\d{2})(?::?(\d{2}))?$/;function St(e){let t={},n=e.split(vt.dateTimeDelimiter),r;if(n.length>2)return t;if(/:/.test(n[0])?r=n[0]:(t.date=n[0],r=n[1],vt.timeZoneDelimiter.test(t.date)&&(t.date=e.split(vt.timeZoneDelimiter)[0],r=e.substr(t.date.length,e.length))),r){let e=vt.timezone.exec(r);e?(t.time=r.replace(e[1],``),t.timezone=e[1]):t.time=r}return t}function Ct(e,t){let n=RegExp(`^(?:(\\d{4}|[+-]\\d{`+(4+t)+`})|(\\d{2}|[+-]\\d{`+(2+t)+`})$)`),r=e.match(n);if(!r)return{year:NaN,restDateString:``};let i=r[1]?parseInt(r[1]):null,a=r[2]?parseInt(r[2]):null;return{year:a===null?i:a*100,restDateString:e.slice((r[1]||r[2]).length)}}function wt(e,t){if(t===null)return new Date(NaN);let n=e.match(yt);if(!n)return new Date(NaN);let r=!!n[4],i=Tt(n[1]),a=Tt(n[2])-1,o=Tt(n[3]),s=Tt(n[4]),c=Tt(n[5])-1;if(r)return Pt(t,s,c)?kt(t,s,c):new Date(NaN);{let e=new Date(0);return!Mt(t,a,o)||!Nt(t,i)?new Date(NaN):(e.setUTCFullYear(t,a,Math.max(i,o)),e)}}function Tt(e){return e?parseInt(e):1}function Et(e){let t=e.match(bt);if(!t)return NaN;let n=Dt(t[1]),r=Dt(t[2]),i=Dt(t[3]);return Ft(n,r,i)?n*o+r*d+i*1e3:NaN}function Dt(e){return e&&parseFloat(e.replace(`,`,`.`))||0}function Ot(e){if(e===`Z`)return 0;let t=e.match(xt);if(!t)return 0;let n=t[1]===`+`?-1:1,r=parseInt(t[2]),i=t[3]&&parseInt(t[3])||0;return It(r,i)?n*(r*o+i*d):NaN}function kt(e,t,n){let r=new Date(0);r.setUTCFullYear(e,0,4);let i=r.getUTCDay()||7,a=(t-1)*7+n+1-i;return r.setUTCDate(r.getUTCDate()+a),r}var At=[31,null,31,30,31,30,31,31,30,31,30,31];function jt(e){return e%400==0||e%4==0&&e%100!=0}function Mt(e,t,n){return t>=0&&t<=11&&n>=1&&n<=(At[t]||(jt(e)?29:28))}function Nt(e,t){return t>=1&&t<=(jt(e)?366:365)}function Pt(e,t,n){return t>=1&&t<=53&&n>=0&&n<=6}function Ft(e,t,n){return e===24?t===0&&n===0:n>=0&&n<60&&t>=0&&t<60&&e>=0&&e<25}function It(e,t){return t>=0&&t<=59}function Lt({ticketKey:e,attachment:t,onClose:n}){let{t:r}=p(`attachments`),[i,a]=(0,W.useState)(null),[o,s]=(0,W.useState)(null);if((0,W.useEffect)(()=>{if(!t)return;function e(e){e.key===`Escape`&&n()}document.addEventListener(`keydown`,e);let r=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.removeEventListener(`keydown`,e),document.body.style.overflow=r}},[t,n]),(0,W.useEffect)(()=>{if(!t){a(null),s(null);return}let n=!1;return a(null),s(null),ct(e,t.id).then(e=>{n||a(URL.createObjectURL(e))}).catch(e=>{n||s(e instanceof Error?e.message:r(`errors.loadFailed`))}),()=>{n=!0}},[t,e]),(0,W.useEffect)(()=>()=>{i&&URL.revokeObjectURL(i)},[i]),!t)return null;let c=t.mimeType.startsWith(`image/`),l=t.mimeType===`application/pdf`;return(0,q.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-label":r(`lightbox.preview`,{name:t.filename}),className:`fixed inset-0 z-[100] flex flex-col bg-black/85 backdrop-blur-sm animate-in fade-in-0 duration-200`,onClick:n,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-3 border-b border-white/10 bg-black/40`,onClick:e=>e.stopPropagation(),children:[(0,q.jsxs)(`button`,{type:`button`,onClick:n,"aria-label":r(`lightbox.backToDesktop`),className:`inline-flex items-center gap-2 px-3 py-1.5 rounded-md text-sm text-white/85 hover:bg-white/10 hover:text-white transition-colors`,children:[(0,q.jsx)(g,{className:`w-4 h-4`}),r(`common:actions.back`)]}),(0,q.jsxs)(`div`,{className:`flex-1 text-center min-w-0 px-4`,children:[(0,q.jsx)(`div`,{className:`text-sm font-medium text-white/95 truncate`,children:t.filename}),(0,q.jsx)(`div`,{className:`text-[11px] text-white/50`,children:t.mimeType})]}),(0,q.jsxs)(`a`,{href:i??`#`,download:t.filename,onClick:e=>{e.stopPropagation(),i||e.preventDefault()},className:`inline-flex items-center gap-2 px-3 py-1.5 rounded-md text-sm text-white/85 hover:bg-white/10 hover:text-white transition-colors`,"aria-label":r(`lightbox.download`),children:[(0,q.jsx)(ne,{className:`w-4 h-4`}),r(`lightbox.download`)]})]}),(0,q.jsx)(`div`,{className:I(`flex-1 flex items-center justify-center overflow-auto p-6`),onClick:n,children:o?(0,q.jsx)(`div`,{onClick:e=>e.stopPropagation(),className:`text-center text-white/80 px-8 py-10 rounded-lg bg-white/5 border border-white/10`,children:(0,q.jsx)(`p`,{className:`text-sm`,children:r(`lightbox.loadError`,{error:o})})}):i?c?(0,q.jsx)(`img`,{src:i,alt:t.filename,onClick:e=>e.stopPropagation(),className:`max-h-full max-w-full rounded-lg shadow-2xl animate-in zoom-in-95 duration-200`}):l?(0,q.jsx)(`iframe`,{src:i,title:t.filename,onClick:e=>e.stopPropagation(),className:`w-full h-full max-w-5xl bg-white rounded-lg shadow-2xl`}):(0,q.jsxs)(`div`,{onClick:e=>e.stopPropagation(),className:`text-center text-white/80 px-8 py-10 rounded-lg bg-white/5 border border-white/10`,children:[(0,q.jsx)(`p`,{className:`text-sm mb-3`,children:r(`lightbox.previewUnavailable`)}),(0,q.jsxs)(`a`,{href:i,download:t.filename,className:`inline-flex items-center gap-2 px-4 py-2 rounded-md bg-white/10 hover:bg-white/20 text-white transition-colors`,children:[(0,q.jsx)(ne,{className:`w-4 h-4`}),r(`lightbox.downloadFile`,{name:t.filename})]})]}):(0,q.jsx)(`div`,{onClick:e=>e.stopPropagation(),className:`text-center text-white/70 px-8 py-10 rounded-lg bg-white/5 border border-white/10`,children:(0,q.jsx)(`p`,{className:`text-sm`,children:r(`lightbox.loading`)})})})]})}function Rt(e,t){let n=new Set,r=[];for(let i of[...e,...t])n.has(i.id)||(n.add(i.id),r.push(i));return r}function zt(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function Bt(e){return e.startsWith(`image/`)?`🖼`:e===`application/pdf`?`📄`:e===`text/csv`||e.includes(`spreadsheetml`)||e===`application/vnd.ms-excel`?`📊`:e===`application/json`?`{ }`:e===`text/plain`||e.includes(`sql`)?`📝`:`📎`}function Vt(e){try{return new Date(e).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`})}catch{return e}}function Ht({ticketKey:e,attachments:t,onChange:n,className:r}){let{t:i}=p(`attachments`),[a,o]=(0,W.useState)(new Set),[s,c]=(0,W.useState)(null),[l,u]=(0,W.useState)(null);if((0,W.useEffect)(()=>{let r=!1;return ot(e).then(e=>{if(r)return;let i=Rt(t,e);i.length!==t.length&&n?.(i)}).catch(()=>{}),()=>{r=!0}},[e]),!t||t.length===0)return null;let d=[...t].sort((e,t)=>e.addedAt<t.addedAt?1:-1);async function f(r){c(null),o(e=>{let t=new Set(e);return t.add(r.id),t});try{await it(e,r.id),await new Promise(e=>setTimeout(e,160)),n?.(t.filter(e=>e.id!==r.id))}catch(e){c(e instanceof Error?e.message:i(`errors.removeFailed`)),o(e=>{let t=new Set(e);return t.delete(r.id),t})}}return(0,q.jsxs)(`section`,{className:I(`mt-4`,r),"aria-label":i(`section.ariaLabel`),children:[(0,q.jsxs)(`header`,{className:`flex items-center justify-between mb-2`,children:[(0,q.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-muted-foreground`,children:i(`section.title`)}),(0,q.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:i(`section.fileCount`,{count:d.length})})]}),(0,q.jsx)(`ul`,{className:`flex flex-col gap-1`,children:d.map(e=>{let t=a.has(e.id);return(0,q.jsxs)(`li`,{className:I(`flex items-center gap-3 px-2.5 py-2 rounded-md border border-border bg-card/60 hover:bg-card transition-all duration-200`,t&&`opacity-0 scale-95 max-h-0 py-0 border-transparent overflow-hidden`),children:[(0,q.jsx)(`span`,{"aria-hidden":!0,className:`w-6 text-center text-sm shrink-0`,children:Bt(e.mimeType)}),(0,q.jsxs)(`button`,{type:`button`,onClick:()=>u(e),className:`flex-1 min-w-0 flex flex-col text-sm text-left hover:text-primary transition-colors`,children:[(0,q.jsx)(`span`,{className:`font-medium truncate text-foreground`,children:e.filename}),(0,q.jsxs)(`span`,{className:`text-[11px] text-muted-foreground`,children:[zt(e.size),` · `,Vt(e.addedAt)]})]}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>u(e),className:`text-[11px] text-primary hover:underline shrink-0`,children:i(`common:actions.open`)}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>f(e),"aria-label":i(`removeFile`,{name:e.filename}),disabled:t,className:`w-6 h-6 inline-flex items-center justify-center rounded text-muted-foreground hover:text-destructive hover:bg-destructive/10 transition-colors disabled:opacity-50`,children:`×`})]},e.id)})}),s&&(0,q.jsx)(`p`,{className:`mt-2 text-xs text-destructive`,children:s}),(0,q.jsx)(Lt,{ticketKey:e,attachment:l,onClose:()=>u(null)})]})}function Ut({ticketId:e,onClose:t}){let{t:n}=p(`code`),r=a(),{activeProjectId:i}=P(),[o,s]=(0,W.useState)(null);return(0,W.useEffect)(()=>{if(!Ge)return;let t=new AbortController;return s(null),fetch(`${N()}/code/provenance?ticketId=${e}`,{signal:t.signal}).then(e=>e.ok?e.json():[]).then(e=>{s(Array.isArray(e)?e:[])}).catch(e=>{e?.name!==`AbortError`&&s([])}),()=>t.abort()},[e,i]),!Ge||!o||o.length===0?null:(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:n(`ticketFiles.title`)}),(0,q.jsx)(`ul`,{className:`space-y-1`,children:o.map((e,i)=>(0,q.jsx)(`li`,{children:(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{t(),r(`/code?path=${encodeURIComponent(e.path)}`)},className:`w-full text-left flex items-center gap-2 rounded px-2 py-1 text-xs hover:bg-muted/40`,children:[(0,q.jsx)(e.kind===`created`?Ee:e.kind===`deleted`?Te:O,{className:`h-3.5 w-3.5 text-muted-foreground shrink-0`}),(0,q.jsx)(`span`,{className:`font-mono truncate flex-1`,children:e.path}),e.jobId&&(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-[10px] text-muted-foreground font-mono shrink-0`,title:n(`ticketFiles.jobTitle`,{jobId:e.jobId}),children:[(0,q.jsx)(V,{className:`h-3 w-3`}),e.jobId.length>10?e.jobId.slice(0,10):e.jobId]}),(0,q.jsx)(`span`,{className:`text-[10px] text-muted-foreground uppercase tracking-wider shrink-0`,children:n(`kind.${e.kind}`)})]})},`${e.path}-${i}`))})]})}var Wt={critical:`bg-red-500/15 aurora-light:bg-destructive/10 text-red-400 aurora-light:text-destructive border-red-500/30 aurora-light:border-destructive/30`,high:`bg-orange-500/15 aurora-light:bg-accent-warning/10 text-orange-400 aurora-light:text-accent-warning border-orange-500/30 aurora-light:border-accent-warning/30`,medium:``,low:`bg-gray-500/15 aurora-light:bg-muted text-gray-400 aurora-light:text-muted-foreground border-gray-500/30 aurora-light:border-border`};function Gt(e){try{return z(new Date(e),{addSuffix:!0,locale:s()})}catch{return e}}function Kt({tickets:e,excludeIds:t,onSelect:n}){let{t:r}=p(`tickets`),[i,a]=(0,W.useState)(``),o=(0,W.useMemo)(()=>{let n=new Set(t),r=e.filter(e=>e.status!==`cancelled`&&!n.has(e.id));if(!i.trim())return r;let a=i.toLowerCase();return r.filter(e=>e.title.toLowerCase().includes(a)||e.description.toLowerCase().includes(a))},[e,t,i]);return(0,q.jsxs)(`div`,{"data-testid":`spec-compare-picker`,className:`h-full flex flex-col rounded-xl bg-card border border-border/40 shadow-2xl shadow-black/50 overflow-hidden`,children:[(0,q.jsxs)(`div`,{className:`px-4 py-3 border-b border-border/30 flex items-center gap-2`,children:[(0,q.jsx)(ke,{className:`w-3.5 h-3.5 text-muted-foreground`}),(0,q.jsx)(`span`,{className:`text-xs font-semibold text-foreground`,children:r(`comparePicker.title`)}),(0,q.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:r(`comparePicker.count`,{n:o.length})})]}),(0,q.jsx)(`div`,{className:`px-4 py-2 border-b border-border/20`,children:(0,q.jsxs)(`div`,{className:`relative`,children:[(0,q.jsx)(ce,{className:`absolute left-2 top-1/2 -translate-y-1/2 w-3 h-3 text-muted-foreground`}),(0,q.jsx)(`input`,{type:`text`,value:i,onChange:e=>a(e.target.value),placeholder:r(`comparePicker.searchPlaceholder`),className:`w-full h-7 rounded border border-border bg-input pl-7 pr-2 text-[11px] text-foreground placeholder:text-muted-foreground outline-none focus:border-accent-primary/60`})]})}),(0,q.jsx)(`div`,{className:`flex-1 overflow-y-auto`,"data-testid":`spec-compare-picker-list`,children:o.length===0?(0,q.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full text-center px-4 py-8 gap-2`,children:[(0,q.jsx)(ke,{className:`w-6 h-6 text-muted-foreground/40`}),(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:i.trim()?r(`comparePicker.noMatches`):r(`comparePicker.empty`)})]}):(0,q.jsx)(`ul`,{className:`divide-y divide-border/10`,children:o.map(e=>(0,q.jsx)(`li`,{children:(0,q.jsxs)(`button`,{type:`button`,"data-testid":`spec-compare-card-${e.id}`,onClick:()=>n(e.id),className:`w-full text-left px-4 py-2.5 hover:bg-accent/30 transition-colors flex items-start gap-2 group`,children:[(0,q.jsx)(tt,{status:e.status}),(0,q.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsxs)(`span`,{className:`text-[10px] font-mono text-muted-foreground`,children:[`#`,e.id]}),e.priority&&Wt[e.priority]&&(0,q.jsx)(`span`,{className:`inline-flex items-center rounded px-1 py-0.5 text-[9px] font-medium border ${Wt[e.priority]}`,children:r(`priority.${e.priority}`)})]}),(0,q.jsx)(`p`,{className:`mt-0.5 text-xs text-foreground truncate group-hover:text-accent-primary transition-colors`,children:e.title||r(`untitled`)}),e.description&&(0,q.jsx)(`p`,{className:`mt-0.5 text-[10px] text-muted-foreground line-clamp-1`,children:e.description.slice(0,120)}),e.labels&&e.labels.length>0&&(0,q.jsxs)(`div`,{className:`mt-1 flex flex-wrap gap-1`,children:[e.labels.slice(0,3).map(e=>(0,q.jsx)(`span`,{className:`inline-flex items-center rounded px-1 py-0.5 text-[9px] bg-accent/40 text-foreground/60`,children:e},e)),e.labels.length>3&&(0,q.jsxs)(`span`,{className:`text-[9px] text-muted-foreground`,children:[`+`,e.labels.length-3]})]}),(0,q.jsx)(`p`,{className:`mt-1 text-[9px] text-muted-foreground`,children:r(`meta.updatedAgo`,{time:Gt(e.updated_at)})})]})]})},e.id))})})]})}var qt=.25,Jt=.75;function Yt({state:e,leftTicket:t,rightTicket:n,allTickets:r,allLabels:i,onSave:a,onDelete:o,onOpenTicket:s,onCloseAll:c,onSetCompared:l,onSetRatio:u,onExitSplit:d}){let f=(0,W.useRef)(null),p=(0,W.useRef)(null),[m,h]=(0,W.useState)(!0);(0,W.useEffect)(()=>{let e=setTimeout(()=>h(!1),320);return()=>clearTimeout(e)},[]);let g=(0,W.useCallback)(e=>{if(!p.current)return;let t=window.innerWidth,n=e.clientX/t;u(Math.min(Jt,Math.max(qt,n)))},[u]),_=(0,W.useCallback)(e=>{if(!p.current)return;let{pointerId:t,element:n}=p.current;try{n.releasePointerCapture(t)}catch{}p.current=null,window.removeEventListener(`pointermove`,g),window.removeEventListener(`pointerup`,_),window.removeEventListener(`pointercancel`,_)},[g]),v=(0,W.useCallback)(e=>{let t=e.currentTarget;try{t.setPointerCapture(e.pointerId)}catch{}p.current={pointerId:e.pointerId,element:t},window.addEventListener(`pointermove`,g),window.addEventListener(`pointerup`,_),window.addEventListener(`pointercancel`,_)},[g,_]);(0,W.useEffect)(()=>()=>{window.removeEventListener(`pointermove`,g),window.removeEventListener(`pointerup`,_),window.removeEventListener(`pointercancel`,_);let e=p.current;if(e){try{e.element.releasePointerCapture(e.pointerId)}catch{}p.current=null}},[g,_]);let y=(0,W.useCallback)(t=>{let n=.04;t.key===`ArrowLeft`?(t.preventDefault(),u(Math.max(qt,e.splitRatio-n))):t.key===`ArrowRight`?(t.preventDefault(),u(Math.min(Jt,e.splitRatio+n))):t.key===`Home`?(t.preventDefault(),u(qt)):t.key===`End`?(t.preventDefault(),u(Jt)):t.key===`0`&&(t.preventDefault(),u(.5))},[u,e.splitRatio]),b=e=>{e.target===e.currentTarget&&c()},x=u=>{let d=u===e.originSide,f=u===`left`?t:n;return f?(0,q.jsx)(Wn,{ticket:f,allLabels:i,allTickets:r,onClose:d?c:()=>l(null,u),onOpenTicket:s,onSave:a,onDelete:o,embedded:!0},`${u}-${f.id}`):(0,q.jsx)(Kt,{tickets:r,excludeIds:[t?.id,n?.id].filter(e=>e!=null),onSelect:e=>l(e,u)})},S=(e.splitRatio*100).toFixed(2),C=((1-e.splitRatio)*100).toFixed(2);return(0,q.jsxs)(`div`,{ref:f,"data-testid":`split-view-shell`,className:`fixed inset-0 z-[68] flex`,onClick:b,children:[(0,q.jsx)(`div`,{className:`absolute inset-0 bg-black/70 pointer-events-none`,"aria-hidden":!0}),(0,q.jsxs)(`div`,{className:`relative flex w-full h-full`,style:{transition:m?`opacity 280ms cubic-bezier(0.34, 1.56, 0.64, 1)`:void 0},children:[(0,q.jsx)(`div`,{"data-testid":`split-panel-left`,className:`relative h-full overflow-hidden`,style:{width:`${S}%`,transition:m?`width 280ms cubic-bezier(0.34, 1.56, 0.64, 1)`:void 0},children:(0,q.jsx)(`div`,{className:`h-full flex items-center justify-center p-2`,children:(0,q.jsx)(`div`,{className:`w-full h-full max-h-[95vh]`,children:x(`left`)})})}),(0,q.jsx)(`div`,{"data-testid":`split-divider`,role:`separator`,"aria-orientation":`vertical`,"aria-valuenow":Math.round(e.splitRatio*100),"aria-valuemin":Math.round(qt*100),"aria-valuemax":Math.round(Jt*100),tabIndex:0,onPointerDown:v,onKeyDown:y,className:`relative z-10 w-2 cursor-col-resize bg-border/40 hover:bg-accent-primary/40 transition-colors focus:outline-none focus:bg-accent-primary/60`}),(0,q.jsx)(`div`,{"data-testid":`split-panel-right`,className:`relative h-full overflow-hidden`,style:{width:`${C}%`,transition:m?`width 280ms cubic-bezier(0.34, 1.56, 0.64, 1)`:void 0},children:(0,q.jsx)(`div`,{className:`h-full flex items-center justify-center p-2`,children:(0,q.jsx)(`div`,{className:`w-full h-full max-h-[95vh]`,children:x(`right`)})})})]})]})}var Xt=.5,Zt=.25,Qt=.75,$t={leftId:null,rightId:null,originSide:null,splitRatio:Xt};function en(e){return Number.isFinite(e)?Math.min(Qt,Math.max(Zt,e)):Xt}function tn(e,t){switch(t.type){case`openCentered`:return e.originSide!==null&&e.leftId!==t.id&&e.rightId!==t.id?{leftId:t.id,rightId:null,originSide:null,splitRatio:Xt}:e.originSide!==null&&(e.leftId===t.id||e.rightId===t.id)?e:{...$t,leftId:t.id};case`closeAll`:return $t;case`enterSplit`:{let n=t.ticketId??e.leftId;return n===null||e.originSide!==null?e:t.side===`left`?{leftId:n,rightId:null,originSide:`left`,splitRatio:Xt}:{leftId:null,rightId:n,originSide:`right`,splitRatio:Xt}}case`setComparedTicket`:{if(e.originSide===null)return e;let n=e.originSide===`left`?`right`:`left`;return t.side===n?t.side===`left`?{...e,leftId:t.id}:{...e,rightId:t.id}:e}case`exitSplit`:{if(e.originSide===null)return e;let t=e.originSide===`left`?e.leftId:e.rightId;return{...$t,leftId:t}}case`setSplitRatio`:return{...e,splitRatio:en(t.ratio)};default:return e}}var nn=(0,W.createContext)(null),rn=900;function an({children:e}){let[t,n]=(0,W.useReducer)(tn,$t),{tickets:r,updateTicket:i,deleteTicket:a}=K(),{activeProjectId:o,setActiveProjectId:s}=P(),c=(0,W.useRef)(null);(0,W.useEffect)(()=>{n({type:`closeAll`});let e=c.current;e&&(c.current=null,e.projectId===o&&n({type:`openCentered`,id:e.ticketId}))},[o]);let l=(0,W.useCallback)(e=>n({type:`openCentered`,id:e}),[]),u=(0,W.useCallback)((e,t)=>{if(e===o){n({type:`openCentered`,id:t});return}c.current={projectId:e,ticketId:t},s(e)},[o,s]),d=(0,W.useCallback)(()=>n({type:`closeAll`}),[]),f=(0,W.useCallback)((e,t)=>{typeof window<`u`&&window.innerWidth<rn||n({type:`enterSplit`,side:e,ticketId:t})},[]),p=(0,W.useCallback)((e,t)=>n({type:`setComparedTicket`,id:e,side:t}),[]),m=(0,W.useCallback)(()=>n({type:`exitSplit`}),[]),h=(0,W.useCallback)(e=>n({type:`setSplitRatio`,ratio:e}),[]);(0,W.useEffect)(()=>{if(typeof window>`u`)return;function e(){window.innerWidth<rn&&n({type:`exitSplit`})}return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]);let g=(0,W.useMemo)(()=>{let e=new Set;for(let t of r)for(let n of t.labels??[])e.add(n);return Array.from(e).sort()},[r]),_=t.leftId==null?null:r.find(e=>e.id===t.leftId)??null,v=t.rightId==null?null:r.find(e=>e.id===t.rightId)??null,y=(0,W.useMemo)(()=>({openTicketDetail:l,openTicketDetailInProject:u,closeTicketDetail:d,enterSplit:f,setComparedTicket:p,exitSplit:m,setSplitRatio:h,state:t}),[l,u,d,f,p,m,h,t]),b=t.originSide!==null;return(0,q.jsxs)(nn.Provider,{value:y,children:[e,!b&&_&&(0,q.jsx)(Wn,{ticket:_,allLabels:g,allTickets:r,onClose:d,onOpenTicket:l,onSave:i,onDelete:a},_.id),b&&(0,q.jsx)(Yt,{state:t,leftTicket:_,rightTicket:v,allTickets:r,allLabels:g,onSave:i,onDelete:a,onOpenTicket:l,onCloseAll:d,onSetCompared:p,onSetRatio:h,onExitSplit:m})]})}function on(){return(0,W.useContext)(nn)||{openTicketDetail:()=>{typeof console<`u`&&console.warn(`[TicketDetailModalContext] openTicketDetail called without provider`)},openTicketDetailInProject:()=>{typeof console<`u`&&console.warn(`[TicketDetailModalContext] openTicketDetailInProject called without provider`)},closeTicketDetail:()=>{},enterSplit:()=>{},setComparedTicket:()=>{},exitSplit:()=>{},setSplitRatio:()=>{},state:$t}}function sn(e){return e<.005?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}function cn(e){return e<1e3?`${e} ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${Math.floor(e/6e4)}m ${Math.floor(e%6e4/1e3)}s`}function ln({ticketId:e}){let{t}=p(`tickets`),[n,r]=(0,W.useState)(null),i=a(),{activeProjectId:o}=P(),{closeTicketDetail:s}=on();if((0,W.useEffect)(()=>{let t=new AbortController;return r(null),fetch(`${N()}/tickets/${e}/spending-summary`,{signal:t.signal}).then(e=>e.ok?e.json():null).then(e=>{e&&r(e)}).catch(()=>{}),()=>t.abort()},[e,o]),!n||!n.bySurface||!n.totalRuns||n.totalRuns===0)return null;let c=Object.entries(n.bySurface).filter(([,e])=>e.count>0).map(([e,n])=>t(`spendingLine.breakdownItem`,{n:n.count,label:Se[e].toLowerCase()})).join(` + `),l=n.unpricedRuns??0,u=n.pricedRuns??Math.max(0,n.totalRuns-l),d=l>0&&u===0,f=l>0&&u>0,m=n.turnsUnavailableRuns??0,h=n.totalTurns==null||m>0&&(n.turnsReportedRuns??0)===0,g=!h&&m>0;return(0,q.jsxs)(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),s(),i(`/analytics?ticketId=${e}`)},className:`mt-1.5 group inline-flex items-center gap-1.5 text-[11px] text-muted-foreground hover:text-foreground transition-colors cursor-pointer`,"aria-label":t(`spendingLine.ariaLabel`),children:[(0,q.jsx)(`span`,{className:`tabular-nums font-medium text-foreground`,"data-testid":d?`ticket-cost-unavailable`:void 0,title:d?t(`spendingLine.costUnavailableTooltip`):f?t(`spendingLine.costPartiallyUnavailableTooltip`):(n.estimatedCostUsd??0)>0?t(`spendingLine.estimatedTooltip`):void 0,children:d?`—`:`${(n.estimatedCostUsd??0)>0?`~`:``}${f?`≥`:``}${sn(n.totalCostUsd)}`}),(0,q.jsx)(`span`,{className:`text-muted-foreground/60`,children:`·`}),(0,q.jsx)(`span`,{className:`tabular-nums`,"data-testid":h?`ticket-turns-unavailable`:void 0,title:h?t(`spendingLine.turnsUnavailableTooltip`):g?t(`spendingLine.turnsPartiallyUnavailableTooltip`):void 0,children:h?`—`:`${g?`≥`:``}${t(`spendingLine.turns`,{count:n.totalTurns})}`}),(0,q.jsx)(`span`,{className:`text-muted-foreground/60`,children:`·`}),(0,q.jsx)(`span`,{className:`tabular-nums`,children:t(`spendingLine.active`,{duration:cn(n.activeDurationMs)})}),c&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`span`,{className:`text-muted-foreground/60`,children:`·`}),(0,q.jsx)(`span`,{children:c})]}),(0,q.jsx)(v,{className:`w-3 h-3 opacity-0 group-hover:opacity-100 transition-opacity`})]})}var un=/^\d{4}-\d{2}-\d{2}T/;function dn(e){if(un.test(e))try{return{text:z(_t(e),{addSuffix:!0,locale:s()}),title:e}}catch{}return{text:e}}function fn({localId:e}){let{t}=p(`jira`),{activeProjectId:n}=P(),r=Qe(),[i,a]=(0,W.useState)(null);if((0,W.useEffect)(()=>{if(!Ke||!r.connected)return;let t=!1;return a(null),L.getSpecDetails(e).then(e=>{t||a(e)}).catch(()=>{t||a(null)}),()=>{t=!0}},[e,n,r.connected]),!Ke||!r.connected||!i)return null;let o=i.development,s=i.fields.length>0,c=o.pullRequests.length>0,l=o.branches.length>0,u=(o.commits?.length??0)>0;return!s&&!c&&!l&&!u?null:(0,q.jsxs)(`div`,{className:`space-y-4`,"data-testid":`jira-details-panel`,children:[s&&(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:t(`detail.detailsTitle`)}),(0,q.jsx)(`div`,{className:`space-y-1.5`,children:i.fields.map((e,t)=>{let n=dn(e.value);return(0,q.jsxs)(`div`,{className:`text-xs`,children:[(0,q.jsx)(`span`,{className:`text-[10px] text-muted-foreground uppercase tracking-wide block`,children:e.label}),e.href?(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{Q(e.href)},className:`inline-flex items-center gap-1 text-accent-info hover:underline text-left`,children:[(0,q.jsx)(`span`,{className:`truncate`,children:e.value}),(0,q.jsx)(ee,{className:`w-3 h-3 shrink-0`})]}):(0,q.jsx)(`span`,{className:`text-foreground/80 whitespace-pre-line`,title:n.title,children:n.text})]},`${e.label}-${t}`)})})]}),(c||l||u)&&(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:t(`detail.developmentTitle`)}),c&&(0,q.jsxs)(`div`,{className:`mb-2`,children:[(0,q.jsx)(`span`,{className:`text-[10px] text-muted-foreground uppercase tracking-wide block mb-1`,children:t(`detail.dev.pullRequests`)}),(0,q.jsx)(`div`,{className:`space-y-1`,children:o.pullRequests.map(e=>(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{Q(e.url)},className:`w-full flex items-start gap-1.5 text-left text-xs hover:bg-accent-info/10 rounded px-1 py-0.5`,"data-testid":`jira-dev-pr`,children:[(0,q.jsx)(De,{className:`w-3 h-3 mt-0.5 shrink-0 text-accent-info`}),(0,q.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,q.jsx)(`span`,{className:`truncate text-foreground/80 block`,children:e.title}),(0,q.jsxs)(`span`,{className:`text-[10px] text-muted-foreground`,children:[e.status,e.sourceBranch?` · ${e.sourceBranch} → ${e.destBranch??``}`:``]})]})]},e.url))})]}),l&&(0,q.jsxs)(`div`,{className:`mb-2`,children:[(0,q.jsx)(`span`,{className:`text-[10px] text-muted-foreground uppercase tracking-wide block mb-1`,children:t(`detail.dev.branches`)}),(0,q.jsx)(`div`,{className:`space-y-1`,children:o.branches.map(e=>(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{Q(e.url)},className:`w-full flex items-center gap-1.5 text-left text-xs hover:bg-accent-info/10 rounded px-1 py-0.5`,"data-testid":`jira-dev-branch`,children:[(0,q.jsx)(re,{className:`w-3 h-3 shrink-0 text-accent-info`}),(0,q.jsx)(`span`,{className:`truncate font-mono text-foreground/80`,children:e.name}),e.repo&&(0,q.jsx)(`span`,{className:`text-[10px] text-muted-foreground truncate`,children:e.repo})]},e.url))})]}),u&&(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`text-[10px] text-muted-foreground uppercase tracking-wide block mb-1`,children:t(`detail.dev.commits`)}),(0,q.jsx)(`div`,{className:`space-y-1`,children:o.commits.map(e=>(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{Q(e.url)},className:`w-full flex items-center gap-1.5 text-left text-xs hover:bg-accent-info/10 rounded px-1 py-0.5`,"data-testid":`jira-dev-commit`,children:[(0,q.jsx)(V,{className:`w-3 h-3 shrink-0 text-accent-info`}),(0,q.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground shrink-0`,children:e.displayId}),(0,q.jsx)(`span`,{className:`truncate text-foreground/80`,children:e.message})]},e.url))})]})]})]})}var pn=e(r(),1);function mn({open:e,url:t,projectId:n,onClose:r}){let{t:i}=p(`browser`),a=C({projectId:n,open:e,initialUrl:t}),{canvasRef:o,viewport:s,status:c,errorMsg:l,url:u,title:d,popup:f}=a,[m,h]=(0,W.useState)(t),S=(0,W.useRef)(a.forwardInput);S.current=a.forwardInput;let T=(0,W.useRef)(null),E=(0,W.useCallback)(()=>(T.current??=b(e=>S.current(e)),T.current),[]);(0,W.useEffect)(()=>()=>{T.current?.dispose(),T.current=null},[]),(0,W.useEffect)(()=>{u&&h(u)},[u]),(0,W.useEffect)(()=>{if(!e)return;let t=e=>{e.key===`Escape`&&r()};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[e,r]);let D=(0,W.useCallback)((e,t)=>{let n=o.current?.getBoundingClientRect();return n?_({x:e,y:t},{left:n.left,top:n.top,width:n.width,height:n.height},s):{x:0,y:0}},[o,s]),te=e=>e===2?`right`:e===1?`middle`:`left`,ne=(0,W.useCallback)(e=>{let t=D(e.clientX,e.clientY);E().move(t.x,t.y)},[D,E]),O=(0,W.useCallback)(e=>{let t=D(e.clientX,e.clientY),n=E();n.move(t.x,t.y),n.flush(),a.forwardInput({type:`mouse`,action:`down`,x:t.x,y:t.y,button:te(e.button),clickCount:e.detail||1})},[D,a,E]),re=(0,W.useCallback)(e=>{let t=D(e.clientX,e.clientY),n=E();n.move(t.x,t.y),n.flush(),a.forwardInput({type:`mouse`,action:`up`,x:t.x,y:t.y,button:te(e.button),clickCount:e.detail||1})},[D,a,E]),ie=(0,W.useCallback)(e=>{let t=D(e.clientX,e.clientY);E().wheel(t.x,t.y,e.deltaX,e.deltaY)},[D,E]),ae=(0,W.useCallback)(e=>{if(e.key===`Escape`)return;let t=e.metaKey||e.ctrlKey;if(t&&(e.key===`c`||e.key===`v`||e.key===`x`)){e.preventDefault();let t=e.key;(async()=>{try{if(t===`v`){let e=await navigator.clipboard.readText();e&&await a.clipboard(`paste`,e)}else{let{text:e}=await a.clipboard(t===`x`?`cut`:`copy`);e&&await navigator.clipboard.writeText(e)}}catch{}})();return}let n={type:`key`,action:`down`,key:e.key,code:e.code,text:!t&&e.key.length===1?e.key:void 0};a.forwardInput(n),(e.key===`Tab`||e.key===` `||e.key.startsWith(`Arrow`))&&e.preventDefault()},[a]),k=(0,W.useCallback)(e=>{e.key!==`Escape`&&a.forwardInput({type:`key`,action:`up`,key:e.key,code:e.code})},[a]),oe=(0,W.useCallback)(()=>{a.navigate(`goto`,m)},[a,m]);return!e||typeof document>`u`?null:(0,pn.createPortal)((0,q.jsx)(`div`,{className:`fixed inset-0 z-[80] bg-background-deep/50 backdrop-blur-sm pointer-events-auto`,onClick:e=>{e.target===e.currentTarget&&r()},"data-testid":`webview-modal`,children:(0,q.jsxs)(`div`,{className:`absolute inset-2 flex flex-col border border-border rounded-lg bg-background-deep overflow-hidden`,role:`dialog`,"aria-modal":`true`,"aria-label":i(`modal.dialogLabel`),onClick:e=>e.stopPropagation(),children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-b border-border/50 bg-surface/80 shrink-0`,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,q.jsx)(F,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":i(`common:actions.back`),onClick:()=>a.navigate(`back`),children:(0,q.jsx)(g,{className:`w-4 h-4`})}),(0,q.jsx)(F,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":i(`modal.nav.forward`),onClick:()=>a.navigate(`forward`),children:(0,q.jsx)(v,{className:`w-4 h-4`})}),(0,q.jsx)(F,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":i(`modal.nav.reload`),onClick:()=>a.navigate(`reload`),children:(0,q.jsx)(x,{className:`w-4 h-4`})})]}),(0,q.jsxs)(`form`,{className:`flex-1 flex items-center gap-2 min-w-0`,onSubmit:e=>{e.preventDefault(),oe()},children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2 flex-1 min-w-0 rounded-md border border-border bg-background px-2.5 py-1`,children:[(0,q.jsx)(y,{className:`w-3.5 h-3.5 text-muted-foreground shrink-0`}),(0,q.jsx)(`input`,{value:m,onChange:e=>h(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),oe())},placeholder:i(`modal.address.placeholder`),"aria-label":i(`modal.address.label`),className:`flex-1 min-w-0 bg-transparent outline-none text-sm`})]}),(0,q.jsx)(F,{type:`submit`,size:`sm`,variant:`secondary`,className:`shrink-0`,disabled:c===`error`,children:i(`modal.address.go`)})]}),(0,q.jsx)(F,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":i(`modal.closeBrowser`),onClick:r,children:(0,q.jsx)(ue,{className:`w-4 h-4`})})]}),(0,q.jsxs)(`div`,{className:`px-3 py-1 text-[11px] text-muted-foreground truncate shrink-0 flex items-center gap-2`,children:[(0,q.jsx)(`span`,{className:`inline-block w-2 h-2 rounded-full shrink-0 ${c===`ready`?`bg-accent-success`:c===`error`?`bg-destructive`:`bg-accent-warning animate-pulse`}`,"aria-hidden":!0}),(0,q.jsx)(`span`,{className:`truncate`,children:c===`connecting`?i(`modal.status.connecting`):c===`error`?l??i(`modal.status.unavailable`):d||``})]}),f&&(0,q.jsxs)(`div`,{"data-testid":`webview-popup-bar`,className:`flex items-center gap-2 px-3 py-1.5 text-xs border-b shrink-0 ${f.active?`bg-accent-info/10 border-accent-info/30 text-accent-info`:`bg-surface/70 border-border/40 text-muted-foreground`}`,children:[(0,q.jsx)(ee,{className:`w-3.5 h-3.5 shrink-0`}),f.active?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`span`,{className:`truncate font-medium`,children:i(`popup.loginWindow`,{origin:w(f.url)})}),f.count>1&&(0,q.jsx)(`span`,{className:`shrink-0 opacity-70`,children:i(`popup.stacked`,{count:f.count-1})}),(0,q.jsxs)(`button`,{type:`button`,onClick:()=>a.setPopupView(`root`),className:`ml-auto shrink-0 inline-flex items-center gap-1 h-6 px-2 rounded-md border border-current/30 hover:bg-card/60 transition-colors`,children:[(0,q.jsx)(g,{className:`w-3 h-3`}),i(`popup.backToPage`)]})]}):(0,q.jsxs)(`button`,{type:`button`,onClick:()=>a.setPopupView(`popup`),className:`inline-flex items-center gap-1 h-6 px-2 rounded-md border border-border/50 hover:bg-card/60 hover:text-foreground transition-colors`,children:[i(`popup.show`),f.count>1&&(0,q.jsx)(`span`,{className:`opacity-70`,children:i(`popup.stacked`,{count:f.count-1})})]})]}),(0,q.jsx)(`div`,{className:`relative flex-1 min-h-0 overflow-hidden flex items-center justify-center outline-none`,tabIndex:0,onKeyDown:ae,onKeyUp:k,children:c===`error`?(0,q.jsxs)(`div`,{className:`flex flex-col items-center gap-2 text-center max-w-md px-6`,children:[(0,q.jsx)(A,{className:`w-8 h-8 text-accent-warning`}),(0,q.jsx)(`p`,{className:`text-sm text-foreground/90`,children:l??i(`modal.error.unavailable`)})]}):(0,q.jsx)(`canvas`,{ref:o,className:`max-w-full max-h-full block shadow-2xl cursor-default`,onPointerMove:ne,onPointerDown:O,onPointerUp:re,onContextMenu:e=>e.preventDefault(),onWheel:ie})})]})}),document.body)}var hn=(0,W.createContext)(null);function gn({children:e}){let{activeProjectId:t}=P(),[n,r]=(0,W.useState)(null),i=(0,W.useCallback)(e=>r(e),[]),a=S();return(0,q.jsxs)(hn.Provider,{value:{openWebView:i,canOpenWebView:a&&!!t},children:[e,a&&n&&t&&(0,q.jsx)(mn,{open:!0,url:n,projectId:t,onClose:()=>r(null)})]})}function _n(){return(0,W.useContext)(hn)??{openWebView:()=>{},canOpenWebView:!1}}var vn={analyzing:`activity:smash.stage.analyzing`,identifying:`activity:smash.stage.identifying`,ordering:`activity:smash.stage.ordering`},yn=(0,W.createContext)(null);function $(e){return`smash:${e}`}async function bn(e,t){try{let n=await fetch(`${j}/api/projects/${e}/tickets/${t}/smash`,{method:`POST`});if(n.ok)h.loading(u.t(`activity:smash.retrying`),{id:$(t)});else{let e=await n.json().catch(()=>({}));h.error(e.reason?u.t(`activity:smash.couldNotRetryWithReason`,{reason:e.reason}):u.t(`activity:smash.couldNotRetry`),{id:$(t)})}}catch(e){h.error(u.t(`activity:smash.retryFailed`,{message:e.message}),{id:$(t)})}}async function xn(e,t,n){try{let r=await fetch(`${j}/api/projects/${e}/tickets/${t}/smash/undo`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({smashedAt:n})});if(r.ok)h.success(u.t(`activity:smash.undone`),{id:$(t),duration:3e3});else{let e=await r.json().catch(()=>({}));h.error(e.reason?u.t(`activity:smash.undoFailedWithReason`,{reason:e.reason}):u.t(`activity:smash.undoFailed`),{id:$(t)})}}catch(e){h.error(u.t(`activity:smash.undoFailedWithReason`,{reason:e.message}),{id:$(t)})}}function Sn({children:e}){let{registerHandler:t,unregisterHandler:n}=M(),[r,i]=(0,W.useState)({}),a=(0,W.useRef)(new Map),o=(0,W.useRef)(new Map),s=(0,W.useCallback)(e=>{let t=e;if(!t||t.type!==`smash.started`)return;let n=t.ticketId,r=t.runId,o=t.projectId,s=t.timestamp,c=t.ticketTitle;typeof n!=`number`||!r||!o||(a.current.set(n,o),i(e=>({...e,[n]:{ticketId:n,runId:r,stage:`analyzing`,startedAt:s??new Date().toISOString(),ticketTitle:c}})),h.loading(u.t(vn.analyzing),{id:$(n),description:c?u.t(`activity:smash.onTitled`,{title:c}):u.t(`activity:smash.onThisSpec`)}))},[]),c=(0,W.useCallback)(e=>{let t=e;if(!t||t.type!==`smash.progress`)return;let n=t.ticketId,r=t.stage;if(typeof n!=`number`||!r)return;let a;i(e=>{let t=e[n];return t?(a=t.ticketTitle,{...e,[n]:{...t,stage:r}}):e}),h.loading(u.t(vn[r]),{id:$(n),description:a?u.t(`activity:smash.onTitled`,{title:a}):u.t(`activity:smash.onThisSpec`)})},[]),l=(0,W.useCallback)(e=>{let t=e;if(!t||t.type!==`smash.completed`)return;let n=t.ticketId,r=t.runId,a=t.projectId,s=t.smashedAt,c=t.childrenIds;typeof n!=`number`||!r||!a||!s||!c||(o.current.set(r,s),i(e=>{let t={...e};return delete t[n],t}),h.success(u.t(`activity:smash.split`,{count:c.length}),{id:$(n),duration:1e4,action:{label:u.t(`activity:smash.undoAction`),onClick:()=>void xn(a,n,s)}}))},[]),d=(0,W.useCallback)(e=>{let t=e;if(!t||t.type!==`smash.failed`)return;let n=t.ticketId,r=t.projectId,o=t.reason??`unknown`;if(typeof n!=`number`||!r)return;a.current.set(n,r),i(e=>{let t={...e};return delete t[n],t});let s=o===`invalid-output`?u.t(`activity:smash.failReason.invalidOutput`):o===`timeout`?u.t(`activity:smash.failReason.timeout`):o===`model_error`?u.t(`activity:smash.failReason.modelError`):o===`crashed`?u.t(`activity:smash.failReason.crashed`):u.t(`activity:smash.failReason.generic`,{reason:o});h.error(u.t(`activity:smash.couldNotComplete`),{id:$(n),description:s,action:{label:u.t(`common:actions.retry`),onClick:()=>void bn(r,n)},duration:15e3})},[]),f=(0,W.useCallback)(e=>{let t=e;if(!t||t.type!==`smash.undone`)return;let n=t.ticketId;typeof n==`number`&&(h.dismiss($(n)),h.success(u.t(`activity:smash.undone`),{id:$(n),duration:3e3}))},[]);(0,W.useLayoutEffect)(()=>(t(`_smash_started`,s),t(`_smash_progress`,c),t(`_smash_completed`,l),t(`_smash_failed`,d),t(`_smash_undone`,f),()=>{n(`_smash_started`),n(`_smash_progress`),n(`_smash_completed`),n(`_smash_failed`),n(`_smash_undone`)}),[t,n,s,c,l,d,f]),(0,W.useEffect)(()=>()=>{a.current.clear(),o.current.clear()},[]);let p=(0,W.useMemo)(()=>({inflight:r}),[r]);return(0,q.jsx)(yn.Provider,{value:p,children:e})}function Cn(e){let t=(0,W.useContext)(yn);return!t||e==null?null:t.inflight[e]??null}var wn=150,Tn={analyzing:0,identifying:1,ordering:2},En={analyzing:`smash.stage.analyzing`,identifying:`smash.stage.identifying`,ordering:`smash.stage.ordering`};function Dn({stage:e,minDisplayMs:t=wn}){let{t:n}=p(`activity`),[r,i]=(0,W.useState)(e),a=(0,W.useRef)(Date.now()),o=(0,W.useRef)(null);if((0,W.useEffect)(()=>{if(e===r)return;let n=Date.now()-a.current,s=Math.max(0,t-n);return o.current&&clearTimeout(o.current),o.current=setTimeout(()=>{i(e),a.current=Date.now(),o.current=null},s),()=>{o.current&&clearTimeout(o.current)}},[e,r,t]),!r)return null;let s=Tn[r];return(0,q.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 rounded-md border border-accent-highlight/40 bg-accent-highlight/10 text-sm text-foreground`,role:`status`,"aria-live":`polite`,"data-testid":`smash-status-pills`,children:[(0,q.jsx)(ie,{className:`h-4 w-4 animate-spin text-accent-highlight`,"aria-hidden":!0}),(0,q.jsx)(`div`,{className:`flex items-center gap-1.5`,children:[`analyzing`,`identifying`,`ordering`].map(e=>(0,q.jsx)(`span`,{className:[`inline-block w-1.5 h-1.5 rounded-full transition-all`,Tn[e]<=s?`bg-accent-highlight`:`bg-muted`,e===r?`scale-125`:`scale-100`].join(` `),"aria-hidden":!0},e))}),(0,q.jsx)(`span`,{className:`font-medium`,children:n(En[r])})]})}var On={simple:{titleKey:`smashModal.modes.simple.title`,bulletKeys:[`smashModal.modes.simple.bullet1`,`smashModal.modes.simple.bullet2`,`smashModal.modes.simple.bullet3`],etaKey:`smashModal.modes.simple.eta`},full:{titleKey:`smashModal.modes.full.title`,bulletKeys:[`smashModal.modes.full.bullet1`,`smashModal.modes.full.bullet2`,`smashModal.modes.full.bullet3`,`smashModal.modes.full.bullet4`],etaKey:`smashModal.modes.full.eta`}};function kn({open:e,ticketTitle:t,isReSmash:n,childrenCount:r,submitting:i=!1,onCancel:a,onConfirm:o}){let{t:s}=p(`activity`),[c,l]=(0,W.useState)(`simple`),{panelRef:u,panelStyle:d,headerHandleProps:m,resizeHandles:h,isFloating:g,guardBackdrop:_}=pe();return e?(0,q.jsxs)(`div`,{className:`fixed inset-0 z-[60] flex items-center justify-center`,role:`dialog`,"aria-modal":`true`,"data-testid":`smash-confirm-modal`,children:[(0,q.jsx)(`div`,{className:`absolute inset-0 bg-black/60 backdrop-blur-sm`,onClick:_(a)}),(0,q.jsxs)(`div`,{ref:u,className:`relative w-full max-w-lg m-4 rounded-xl glass-card border border-border/30 animate-in fade-in zoom-in-95 duration-150`,style:d,children:[(0,q.jsxs)(`div`,{...m,className:`flex items-start justify-between gap-3 px-5 py-4 border-b border-border/30 ${g?`cursor-grab active:cursor-grabbing`:``}`,children:[(0,q.jsxs)(`div`,{className:`flex items-start gap-2 min-w-0`,children:[(0,q.jsx)(H,{className:`w-5 h-5 text-accent-highlight shrink-0 mt-0.5`,"aria-hidden":!0}),(0,q.jsxs)(`div`,{className:`min-w-0`,children:[(0,q.jsx)(`h2`,{className:`text-sm font-semibold text-foreground`,children:s(`smashModal.title`)}),(0,q.jsx)(`p`,{className:`text-[11px] text-muted-foreground truncate`,title:t,children:t})]})]}),(0,q.jsx)(`button`,{type:`button`,onClick:a,className:`h-7 w-7 flex items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-surface/50 transition-colors shrink-0`,"aria-label":s(`common:actions.close`),children:(0,q.jsx)(ue,{className:`w-4 h-4`})})]}),n&&r>0&&(0,q.jsx)(`div`,{className:`mx-5 mt-4 rounded-md border border-accent-warning/40 bg-accent-warning/10 px-3 py-2 text-xs text-foreground`,children:(0,q.jsx)(f,{t:s,i18nKey:`smashModal.reSmashWarning`,count:r})}),(0,q.jsxs)(`div`,{className:`px-5 py-4 space-y-3`,children:[(0,q.jsx)(`p`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground font-medium`,children:s(`smashModal.modePickerLabel`)}),[`simple`,`full`].map(e=>{let t=On[e],n=c===e;return(0,q.jsx)(`button`,{type:`button`,onClick:()=>l(e),disabled:i,className:`w-full text-left rounded-lg border px-3 py-3 transition-colors ${n?`border-accent-highlight/60 bg-accent-highlight/10`:`border-border/40 bg-card/40 hover:bg-card/60 hover:border-border/60`}`,"data-testid":`smash-mode-${e}`,children:(0,q.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,q.jsx)(`div`,{className:`mt-0.5 h-3.5 w-3.5 rounded-full border-2 shrink-0 ${n?`border-accent-highlight bg-accent-highlight`:`border-muted-foreground/60`}`,"aria-hidden":!0}),(0,q.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mb-1`,children:[(0,q.jsxs)(`span`,{className:`flex items-center gap-1.5 text-sm font-semibold text-foreground`,children:[e===`full`&&(0,q.jsx)(de,{className:`w-3.5 h-3.5 text-accent-highlight`,"aria-hidden":!0}),s(t.titleKey)]}),(0,q.jsx)(`span`,{className:`text-[10px] text-muted-foreground tabular-nums`,children:s(t.etaKey)})]}),(0,q.jsx)(`ul`,{className:`space-y-0.5`,children:t.bulletKeys.map(e=>(0,q.jsxs)(`li`,{className:`text-[11px] text-foreground/70 leading-snug`,children:[`• `,s(e)]},e))})]})]})},e)})]}),(0,q.jsxs)(`div`,{className:`flex items-center justify-end gap-2 px-5 py-3 border-t border-border/30 bg-surface/20`,children:[(0,q.jsx)(F,{variant:`ghost`,size:`sm`,onClick:a,disabled:i,children:s(`common:actions.cancel`)}),(0,q.jsxs)(F,{size:`sm`,onClick:()=>o(c),disabled:i,"data-testid":`smash-confirm-modal-continue`,children:[(0,q.jsx)(H,{className:`w-3.5 h-3.5 mr-1.5`}),s(i?`smashModal.starting`:n?`smashModal.confirmReSmash`:`smashModal.smash`)]})]})]}),(0,q.jsx)(ve,{handles:h})]}):null}var An=`## Contract Layer`;function jn(e,t){return!(!t||e.status===`draft`||e.parent_epic_id!=null||!e.description?.includes(An))}function Mn({ticket:e,projectId:t,provider:n,featureFlagOn:r,childrenCount:i}){let{t:a}=p(`activity`),o=Cn(e.id),[s,c]=(0,W.useState)(!1),[l,u]=(0,W.useState)(!1),[d,f]=(0,W.useState)(e.origin_conversation_id?void 0:null);(0,W.useEffect)(()=>{let r=e.origin_conversation_id;if(!r){f(null);return}let i=!1;return f(void 0),fetch(`${j}/api/projects/${t}/chat/conversations/${encodeURIComponent(r)}`).then(async e=>{if(!e.ok)throw Error(`origin conversation lookup failed (${e.status})`);let t=await e.json();i||f(t.conversation?.provider??n??null)}).catch(()=>{i||f(null)}),()=>{i=!0}},[t,n,e.origin_conversation_id]);let m=e.origin_conversation_id?d:n,g=r&&be(m),_=e.is_epic===!0,v=!_&&jn(e,g),y=_&&g,b=_&&i>0,x=(0,W.useCallback)(async n=>{if(g){u(!0);try{let r=await fetch(`${j}/api/projects/${t}/tickets/${e.id}/smash`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({mode:n})});if(!r.ok){let e=await r.json().catch(()=>({}));h.error(e.reason?a(`smash.couldNotStartWithReason`,{reason:e.reason}):a(`smash.couldNotStart`));return}c(!1)}catch(e){h.error(a(`smash.smashFailed`,{message:e.message}))}finally{u(!1)}}},[t,e.id,a,g]),S=(0,W.useCallback)(async n=>{if(g){if(b){u(!0);try{if(!(await fetch(`${j}/api/projects/${t}/tickets/${e.id}/children`,{method:`DELETE`})).ok){h.error(a(`smash.couldNotDeleteChildren`)),u(!1);return}}catch(e){h.error(a(`smash.deleteFailed`,{message:e.message})),u(!1);return}}await x(n)}},[b,x,t,e.id,a,g]);return!v&&!y?null:o?(0,q.jsx)(`div`,{className:`flex flex-col gap-2`,"data-testid":`smash-actions-streaming`,children:(0,q.jsx)(Dn,{stage:o.stage})}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(F,{size:`sm`,variant:`outline`,onClick:()=>c(!0),className:`border-accent-highlight/40 text-accent-highlight hover:bg-accent-highlight/10`,"data-testid":y?`resmash-button`:`smash-button`,children:[(0,q.jsx)(H,{className:`w-3.5 h-3.5 mr-1.5`}),a(y?`smash.reSmashButton`:`smash.smashButton`)]}),(0,q.jsx)(kn,{open:s,ticketTitle:e.title,isReSmash:b,childrenCount:i,submitting:l,onCancel:()=>c(!1),onConfirm:S})]})}function Nn({epic:e,childExecutionOrder:t,totalChildren:n,onOpenEpic:r}){let{t:i}=p(`activity`);return(0,q.jsxs)(`div`,{className:`flex items-center gap-2 rounded-md border border-accent-secondary/30 bg-accent-secondary/10 px-3 py-1.5 text-xs`,"data-testid":`epic-breadcrumb`,children:[(0,q.jsxs)(`button`,{type:`button`,onClick:r,className:`text-accent-secondary hover:underline font-medium`,children:[`← `,e.title]}),t!=null&&n>0&&(0,q.jsx)(`span`,{className:`text-foreground/60`,children:i(`epicChildren.step`,{order:t,total:n})})]})}var Pn={critical:`bg-red-400`,high:`bg-orange-400`,medium:`bg-yellow-400`,low:`bg-slate-400`};function Fn(e){return e?Pn[e]:`bg-muted`}function In(e){return[...e].sort((e,t)=>{let n=e.execution_order??1/0,r=t.execution_order??1/0;return n===r?e.id-t.id:n-r})}function Ln({ticket:e,allTickets:t,onOpenTicket:n}){let{t:r}=p(`activity`),i=e.is_epic===!0,a=e.parent_epic_id!=null;if(!i&&!a)return null;if(i){let i=In(t.filter(t=>t.parent_epic_id===e.id));return(0,q.jsx)(Rn,{header:r(`family.subSpecsHeader`,{count:i.length}),rows:i,currentId:e.id,onOpenTicket:n,emptyMessage:r(`family.emptySubSpecs`)})}let o=t.find(t=>t.id===e.parent_epic_id)??null,s=In(t.filter(t=>t.parent_epic_id===e.parent_epic_id)),c=o?[o,...s]:s;return(0,q.jsx)(Rn,{header:r(`family.familyHeader`,{count:s.length}),rows:c,currentId:e.id,onOpenTicket:n,emptyMessage:r(`family.noSiblings`)})}function Rn({header:e,rows:t,currentId:n,onOpenTicket:r,emptyMessage:i}){let{t:a}=p(`activity`);return(0,q.jsxs)(`div`,{"data-testid":`epic-family-sidebar`,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-1.5 mb-1.5`,children:[(0,q.jsx)(H,{className:`w-3 h-3 text-accent-highlight`,"aria-hidden":!0}),(0,q.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider`,children:e})]}),t.length===0?(0,q.jsx)(`p`,{className:`text-[10px] text-foreground/50 italic`,children:i}):(0,q.jsx)(`ul`,{className:`flex flex-col gap-0.5`,children:t.map(e=>{let t=e.id===n,i=e.is_epic===!0;return(0,q.jsx)(`li`,{children:(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{t||r(e.id)},disabled:t,"aria-label":a(i?`family.openParentEpic`:`family.openSubSpec`,{title:e.title}),"aria-current":t?`page`:void 0,className:[`w-full flex items-center gap-1.5 rounded px-1.5 py-1 text-left transition-colors`,t?`bg-accent-highlight/15 cursor-default`:`hover:bg-muted/30 cursor-pointer`].join(` `),"data-testid":`epic-family-row-${e.id}`,children:[i?(0,q.jsx)(E,{className:`w-3 h-3 text-accent-highlight flex-shrink-0`,"aria-hidden":!0}):(0,q.jsx)(`span`,{className:`text-[9px] tabular-nums text-foreground/40 w-3 text-center flex-shrink-0`,children:e.execution_order??`–`}),(0,q.jsx)(`span`,{className:`inline-block w-1.5 h-1.5 rounded-full flex-shrink-0 ${Fn(e.priority)}`,"aria-hidden":!0}),(0,q.jsx)(`span`,{className:`text-[11px] truncate ${t?`text-foreground font-medium`:`text-foreground/80`}`,title:e.title,children:e.title})]})},e.id)})})]})}var zn=900,Bn=.2,Vn=[{value:`critical`,labelKey:`priority.critical`,className:`text-red-400`},{value:`high`,labelKey:`priority.high`,className:`text-orange-400`},{value:`medium`,labelKey:`priority.medium`,className:`text-yellow-400`},{value:`low`,labelKey:`priority.low`,className:`text-slate-400`}];function Hn(e){return e.jira_epic_key&&e.jira_url?e.jira_url.replace(/\/browse\/[^/]+$/,`/browse/${e.jira_epic_key}`):null}var Un={manual:`source.manual`,"product-backlog":`source.productBacklog`,"propose-spec":`source.proposeSpec`,"get-backlog-specs":`source.getBacklogSpecs`,"free-prompt":`source.freePrompt`};function Wn({ticket:e,allLabels:t,allTickets:n,onClose:r,onOpenTicket:i,onSave:a,onDelete:o,rails:s,onMoveToRail:c,onRemoveFromRail:l,embedded:u=!1}){let{t:d}=p(`tickets`),{t:m}=p(`jira`),{activeProjectId:g,projects:_}=P(),{enterSplit:y,state:b}=on(),x=b.originSide!==null,S=_.find(e=>e.id===g)?.provider,C=be(S),w=(0,W.useMemo)(()=>(n??[]).filter(t=>t.parent_epic_id===e.id),[n,e.id]),T=(0,W.useMemo)(()=>e.parent_epic_id==null?null:(n??[]).find(t=>t.id===e.parent_epic_id)??null,[n,e.parent_epic_id]),E=(0,W.useMemo)(()=>T?(n??[]).filter(e=>e.parent_epic_id===T.id).length:0,[n,T]),[D,ne]=(0,W.useState)(e.title),[O,re]=(0,W.useState)(e.description),[k,ce]=(0,W.useState)(e.priority??`medium`),[A,de]=(0,W.useState)([...e.labels??[]]),[j,M]=(0,W.useState)(!1),[N,I]=(0,W.useState)(!1),[L,R]=(0,W.useState)(``),[xe,z]=(0,W.useState)(!1),[Se,B]=(0,W.useState)(!1),[Ce,Te]=(0,W.useState)(!1),[Ee,V]=(0,W.useState)(!1),[De,Oe]=(0,W.useState)(!1),[H,ke]=(0,W.useState)(!1),U=Qe(),Ae=U.connected&&!!U.discardStatus&&e.source===`jira`&&!!e.jira_key,je=U.connected&&e.source===`jira`&&!!e.jira_key,[Me,Ne]=(0,W.useState)(e.attachments??[]);(0,W.useEffect)(()=>{Ne(e.attachments??[])},[e.attachments,e.id]);let Pe=(0,W.useRef)(null),Fe=(0,W.useRef)(null),G=(0,W.useRef)(null),Ie=(0,W.useMemo)(()=>D!==e.title||O!==e.description||k!==e.priority||JSON.stringify(A)!==JSON.stringify(e.labels),[D,O,k,A,e]);(0,W.useEffect)(()=>{j&&Pe.current?.focus()},[j]),(0,W.useEffect)(()=>{if(N){let e=Fe.current;e&&(e.focus(),e.selectionStart=e.value.length)}},[N]),(0,W.useEffect)(()=>{xe&&G.current?.focus()},[xe]),(0,W.useEffect)(()=>{function e(e){e.key===`Escape`&&!j&&!N&&!Se&&r()}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[r,j,N,Se]);let Le=(0,W.useMemo)(()=>{if(!L.trim())return[];let e=L.toLowerCase();return t.filter(t=>t.toLowerCase().includes(e)&&!A.includes(t)).slice(0,5)},[L,t,A]),K=(0,W.useCallback)(e=>{let t=e.trim();t&&!A.includes(t)&&de(e=>[...e,t]),R(``)},[A]),Re=(0,W.useCallback)(e=>{de(t=>t.filter(t=>t!==e))},[]),ze=(0,W.useCallback)(async()=>{let t={};if(D!==e.title&&(t.title=D),O!==e.description&&(t.description=O),k!==e.priority&&(t.priority=k),JSON.stringify(A)!==JSON.stringify(e.labels)&&(t.labels=A),Object.keys(t).length===0){r();return}Oe(!0);let n=await a(e.id,t);Oe(!1),n?(h.success(d(`detailModal.toast.updated`)),r()):h.error(d(`detailModal.toast.updateFailed`))},[D,O,k,A,e,a,r,d]),Be=(0,W.useCallback)(async()=>{if(H)return;ke(!0);let t=!1;try{t=await o(e.id)}catch{t=!1}if(ke(!1),!t){h.error(d(`detailModal.toast.deleteFailed`));return}B(!1),r()},[H,e.id,o,r,d]),[Ve,He]=(0,W.useState)(0),J=(0,W.useRef)(null),[Ue,We]=(0,W.useState)(()=>typeof window<`u`&&window.innerWidth>=zn);(0,W.useEffect)(()=>{if(typeof window>`u`)return;let e=()=>We(window.innerWidth>=zn);return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]);let Y=!u&&!x&&Ue,X=(0,W.useCallback)(e=>{J.current&&He(e.clientX-J.current.startX)},[]),Z=(0,W.useCallback)(t=>{if(!J.current)return;let n=t.clientX-J.current.startX,i=window.innerWidth*Bn;if(window.removeEventListener(`pointermove`,X),window.removeEventListener(`pointerup`,Z),window.removeEventListener(`pointercancel`,Z),J.current=null,He(0),Math.abs(n)>=i&&window.innerWidth>=zn){let t=b.leftId===e.id;y(n<0?`left`:`right`,e.id),t||r()}},[y,X,b.leftId,e.id,r]),Ge=(0,W.useCallback)(e=>{Y&&e.button===0&&(e.target.closest(`button, input, textarea, select, [contenteditable="true"]`)||(J.current={startX:e.clientX,pointerId:e.pointerId},window.addEventListener(`pointermove`,X),window.addEventListener(`pointerup`,Z),window.addEventListener(`pointercancel`,Z)))},[Y,X,Z]);(0,W.useEffect)(()=>()=>{J.current&&(window.removeEventListener(`pointermove`,X),window.removeEventListener(`pointerup`,Z),window.removeEventListener(`pointercancel`,Z))},[X,Z]);let Ke=(0,W.useCallback)(()=>{if(!Y||window.innerWidth<zn)return;let t=b.leftId===e.id;y(`right`,e.id),t||r()},[Y,y,b.leftId,e.id,r]),{panelRef:qe,panelStyle:Je,resizeHandles:Ye,guardBackdrop:Xe}=pe({enabled:!u,allowMove:!1}),Ze=(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{ref:qe,className:u?`relative w-full h-full rounded-xl bg-card border border-border/40 shadow-2xl shadow-black/50 flex flex-col overflow-hidden`:`relative w-full max-w-[67rem] m-4 rounded-xl bg-card border border-border/40 shadow-2xl shadow-black/50 flex flex-col animate-in fade-in zoom-in-95 duration-200 h-[90vh]`,style:{...Ve===0?{transition:`transform 220ms cubic-bezier(0.34, 1.56, 0.64, 1)`}:{transform:`translateX(${Ve}px)`,transition:`none`},...Je},children:[T&&(0,q.jsx)(`div`,{className:`px-5 pt-3`,children:(0,q.jsx)(Nn,{epic:T,childExecutionOrder:e.execution_order??null,totalChildren:E,onOpenEpic:()=>i?.(T.id)})}),(0,q.jsxs)(`div`,{className:`flex items-start justify-between gap-3 px-5 py-4 border-b border-border/30 ${Y?`cursor-grab active:cursor-grabbing`:``}`,onPointerDown:Ge,"data-testid":`ticket-modal-header`,children:[(0,q.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[j?(0,q.jsx)(`input`,{ref:Pe,value:D,onChange:e=>ne(e.target.value),onBlur:()=>M(!1),onKeyDown:t=>{t.key===`Enter`&&M(!1),t.key===`Escape`&&(ne(e.title),M(!1))},className:`w-full bg-transparent border-b border-accent-primary/50 text-sm font-semibold text-foreground outline-none pb-0.5`}):(0,q.jsxs)(`button`,{type:`button`,onClick:()=>M(!0),className:`group flex items-center gap-1.5 text-left w-full`,children:[(0,q.jsx)(`h2`,{className:`text-sm font-semibold text-foreground truncate`,children:D||d(`untitled`)}),(0,q.jsx)(ae,{className:`w-3 h-3 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity shrink-0`})]}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2 mt-1.5`,children:[(0,q.jsxs)(`span`,{className:`text-[10px] text-foreground font-mono`,children:[`#`,e.id]}),e.status===`on_review`&&(0,q.jsx)(`span`,{title:d(`specs:status.onReviewHint`),"data-testid":`ticket-modal-on-review-badge`,children:(0,q.jsx)(nt,{status:`on_review`})})]}),(0,q.jsx)(ln,{ticketId:e.id})]}),g&&(0,q.jsx)(`div`,{className:`shrink-0`,children:(0,q.jsx)(Mn,{ticket:e,projectId:g,provider:S,featureFlagOn:C,childrenCount:w.length})}),(0,q.jsx)(Kn,{ticket:e,title:D,description:O,priority:k,labels:A,onClose:r}),s&&(c||l)&&(0,q.jsx)(qn,{ticket:e,rails:s,onMoveToRail:c,onRemoveFromRail:l}),Y&&(0,q.jsxs)(F,{variant:`outline`,size:`sm`,className:`shrink-0 mr-1 gap-1.5`,"data-testid":`ticket-modal-compare`,onClick:Ke,title:d(`detailModal.compareTooltip`),children:[(0,q.jsx)(we,{className:`w-3.5 h-3.5`}),d(`detailModal.compare`)]}),(0,q.jsx)(`button`,{onClick:r,className:`h-7 w-7 flex items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-surface/50 transition-colors cursor-pointer shrink-0`,"data-testid":`ticket-modal-close`,children:(0,q.jsx)(ue,{className:`w-4 h-4`})})]}),(0,q.jsx)(`div`,{className:`flex-1 overflow-y-auto min-h-0`,children:(0,q.jsxs)(`div`,{className:`flex flex-col sm:flex-row h-full`,children:[(0,q.jsxs)(`div`,{className:`flex-1 min-w-0 px-5 py-4 space-y-4 flex flex-col`,children:[(0,q.jsxs)(`div`,{className:`flex-1 flex flex-col`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between mb-1.5`,children:[(0,q.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider flex items-center gap-1.5`,children:d(`fields.description`)}),!N&&(0,q.jsxs)(`button`,{type:`button`,onClick:()=>I(!0),className:`text-[10px] text-muted-foreground hover:text-foreground transition-colors flex items-center gap-1`,children:[(0,q.jsx)(ae,{className:`w-2.5 h-2.5`}),d(`common:actions.edit`)]})]}),N?(0,q.jsxs)(`div`,{className:`space-y-1.5 flex-1 flex flex-col`,children:[(0,q.jsx)(`textarea`,{ref:Fe,value:O,onChange:e=>re(e.target.value),className:`w-full flex-1 rounded-lg border border-border bg-input px-3 py-2 text-xs text-foreground placeholder:text-muted-foreground resize-none min-h-[300px]`,placeholder:d(`fields.markdownPlaceholder`)}),(0,q.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,q.jsx)(F,{variant:`ghost`,size:`sm`,className:`h-6 text-[10px]`,onClick:()=>I(!1),children:d(`detailModal.doneEditing`)}),(0,q.jsx)(`span`,{className:`text-[9px] text-muted-foreground`,children:d(`fields.supportsMarkdown`)})]})]}):O?(0,q.jsx)(Zn,{description:O,onEdit:()=>I(!0)}):(0,q.jsx)(`button`,{type:`button`,onClick:()=>I(!0),className:`w-full rounded-lg border border-dashed border-border/40 bg-muted/10 px-3 py-4 text-xs text-muted-foreground hover:text-foreground hover:bg-muted/20 transition-colors text-center`,children:d(`detailModal.addDescription`)})]}),(0,q.jsx)(Ht,{ticketKey:e.id,attachments:Me,onChange:Ne}),(0,q.jsx)(Ut,{ticketId:e.id,onClose:r}),e.prerequisites&&e.prerequisites.length>0&&(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:d(`detailModal.prerequisites`)}),(0,q.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:e.prerequisites.map(e=>(0,q.jsxs)(`span`,{className:`inline-flex items-center rounded px-1.5 py-0.5 text-[10px] font-mono bg-accent/60 text-foreground/70`,children:[`#`,e]},e))})]})]}),(0,q.jsxs)(`div`,{className:`sm:w-56 sm:border-l border-t sm:border-t-0 border-border/30 px-4 py-4 space-y-4 bg-muted/5`,children:[e.jira_url&&e.jira_key&&(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{Q(e.jira_url)},"data-testid":`jira-go-to-ticket`,className:`w-full inline-flex items-center justify-center gap-1.5 h-7 rounded border border-accent-info/50 bg-accent-info/10 px-2 text-xs font-medium text-accent-info hover:bg-accent-info/20 transition-colors`,children:[(0,q.jsx)(ee,{className:`w-3.5 h-3.5 shrink-0`}),m(`detail.goToTicket`,{key:e.jira_key})]}),e.jira_epic_key&&(0,q.jsxs)(`div`,{"data-testid":`jira-epic`,children:[(0,q.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:m(`detail.epic`)}),(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{let t=Hn(e);t&&Q(t)},title:e.jira_epic_name??e.jira_epic_key,className:`w-full inline-flex items-center gap-1.5 rounded border border-accent-highlight/40 bg-accent-highlight/5 px-2 py-1.5 text-left text-xs hover:bg-accent-highlight/10 transition-colors`,children:[(0,q.jsx)(`span`,{className:`font-mono text-accent-highlight shrink-0`,children:e.jira_epic_key}),e.jira_epic_name&&(0,q.jsx)(`span`,{className:`truncate text-foreground/80`,children:e.jira_epic_name})]})]}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:d(`fields.priority`)}),(0,q.jsx)(`select`,{value:k,onChange:e=>ce(e.target.value),className:`w-full h-7 rounded border border-border bg-input px-2 text-xs text-foreground`,children:Vn.map(e=>(0,q.jsx)(`option`,{value:e.value,children:d(e.labelKey)},e.value))})]}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:d(`fields.labels`)}),(0,q.jsx)(`div`,{className:`flex flex-wrap gap-1 mb-1.5`,children:A.map(e=>(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-0.5 rounded px-1.5 py-0.5 text-[10px] font-medium bg-accent/60 text-foreground/70 group`,children:[e,(0,q.jsx)(`button`,{type:`button`,onClick:()=>Re(e),className:`text-muted-foreground hover:text-foreground opacity-0 group-hover:opacity-100 transition-opacity`,children:(0,q.jsx)(te,{className:`w-2.5 h-2.5`})})]},e))}),xe?(0,q.jsxs)(`div`,{className:`relative`,children:[(0,q.jsx)(`input`,{ref:G,value:L,onChange:e=>R(e.target.value),onKeyDown:e=>{e.key===`Enter`&&L.trim()&&(e.preventDefault(),K(L)),e.key===`Escape`&&(z(!1),R(``))},onBlur:()=>{L.trim()&&K(L),z(!1),R(``)},placeholder:d(`detailModal.addLabelPlaceholder`),className:`w-full h-6 rounded border border-border bg-input px-2 text-[10px] text-foreground placeholder:text-muted-foreground`}),Le.length>0&&(0,q.jsx)(`div`,{className:`absolute left-0 right-0 top-full mt-0.5 rounded border border-border/50 bg-popover shadow-lg z-10 py-0.5`,children:Le.map(e=>(0,q.jsx)(`button`,{type:`button`,onMouseDown:t=>{t.preventDefault(),K(e)},className:`w-full text-left px-2 py-1 text-[10px] hover:bg-accent/50 text-foreground/80`,children:e},e))})]}):(0,q.jsxs)(`button`,{type:`button`,onClick:()=>z(!0),className:`flex items-center gap-1 text-[10px] text-muted-foreground hover:text-foreground transition-colors`,children:[(0,q.jsx)(oe,{className:`w-2.5 h-2.5`}),d(`detailModal.addLabel`)]})]}),(0,q.jsx)(Ln,{ticket:e,allTickets:n??[],onOpenTicket:e=>i?.(e)}),e.source===`jira`&&e.jira_key&&(0,q.jsx)(fn,{localId:e.id}),e.metadata?.effort_level&&(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-0.5`,children:d(`detailModal.effort`)}),(0,q.jsx)(`span`,{className:`text-xs text-foreground/70`,children:e.metadata.effort_level})]}),e.assignee&&(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-0.5`,children:d(`detailModal.assignee`)}),(0,q.jsx)(`span`,{className:`text-xs text-foreground/70`,children:e.assignee})]})]})]})}),(0,q.jsxs)(`div`,{className:`flex items-center justify-between px-5 py-3 border-t border-border/30`,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-3 text-[10px] text-muted-foreground`,children:[(0,q.jsx)(`span`,{children:d(`meta.createdAgo`,{time:Gn(e.created_at)})}),(0,q.jsx)(`span`,{children:d(`meta.updatedAgo`,{time:Gn(e.updated_at)})}),e.source&&(0,q.jsx)(`span`,{className:`bg-muted/30 rounded px-1.5 py-0.5`,children:Un[e.source]?d(Un[e.source]):e.source})]}),(0,q.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[Ae?(0,q.jsxs)(F,{variant:`ghost`,size:`sm`,className:`h-7 text-xs text-accent-info hover:bg-accent-info/10`,onClick:()=>Te(!0),"data-testid":`jira-move-to-button`,children:[(0,q.jsx)(v,{className:`w-3 h-3 mr-1`}),m(`discard.moveButton`,{status:U.discardStatus})]}):(0,q.jsxs)(F,{variant:`ghost`,size:`sm`,className:`h-7 text-xs text-red-400 aurora-light:text-destructive hover:text-red-300 aurora-light:hover:text-destructive hover:bg-red-500/10 aurora-light:hover:bg-destructive/10`,onClick:()=>B(!0),children:[(0,q.jsx)(le,{className:`w-3 h-3 mr-1`}),d(`common:actions.delete`)]}),Ie&&(0,q.jsxs)(F,{size:`sm`,className:`h-7 text-xs`,onClick:()=>{je?V(!0):ze()},disabled:De||!D.trim(),children:[(0,q.jsx)(se,{className:`w-3 h-3 mr-1`}),d(De?`common:states.saving`:`common:actions.save`)]})]})]})]}),(0,q.jsx)(ye,{open:Se,onOpenChange:e=>{H||B(e)},children:(0,q.jsxs)(he,{className:`max-w-sm`,children:[(0,q.jsxs)(fe,{children:[(0,q.jsx)(ge,{children:d(`deleteDialog.title`)}),(0,q.jsx)(_e,{children:(0,q.jsx)(f,{t:d,i18nKey:`deleteDialog.body`,values:{id:e.id,title:e.title},components:{strong:(0,q.jsx)(`span`,{className:`font-semibold text-foreground`})}})})]}),(0,q.jsxs)(me,{children:[(0,q.jsx)(F,{variant:`outline`,size:`sm`,onClick:()=>B(!1),disabled:H,children:d(`common:actions.cancel`)}),(0,q.jsxs)(F,{variant:`destructive`,size:`sm`,onClick:()=>{Be()},disabled:H,"aria-busy":H,children:[H?(0,q.jsx)(ie,{className:`w-3.5 h-3.5 mr-1.5 animate-spin`}):(0,q.jsx)(le,{className:`w-3.5 h-3.5 mr-1.5`}),d(`common:actions.delete`)]})]})]})}),Ae&&U.discardStatus&&(0,q.jsx)($e,{open:Ce,onOpenChange:Te,ticket:{id:e.id,title:e.title,jira_key:e.jira_key},discardStatus:U.discardStatus,onDiscarded:r}),(0,q.jsx)(ye,{open:Ee,onOpenChange:V,children:(0,q.jsxs)(he,{className:`max-w-md`,"data-testid":`jira-save-confirm`,children:[(0,q.jsxs)(fe,{children:[(0,q.jsx)(ge,{children:m(`detail.saveTitle`)}),(0,q.jsx)(_e,{children:m(`detail.saveBody`,{key:e.jira_key??`#${e.id}`})})]}),(0,q.jsxs)(me,{children:[(0,q.jsx)(F,{variant:`outline`,size:`sm`,onClick:()=>V(!1),children:d(`common:actions.cancel`)}),(0,q.jsxs)(F,{size:`sm`,onClick:()=>{V(!1),ze()},disabled:De,"data-testid":`jira-save-confirm-btn`,children:[(0,q.jsx)(se,{className:`w-3.5 h-3.5 mr-1.5`}),m(`detail.saveConfirm`)]})]})]})})]});return u?Ze:(0,q.jsxs)(`div`,{className:`fixed inset-0 z-[68] flex items-center justify-center`,children:[(0,q.jsx)(`div`,{className:`absolute inset-0 bg-black/70`,onClick:Xe(r)}),Ze,(0,q.jsx)(ve,{handles:Ye})]})}function Gn(e){try{return z(new Date(e),{addSuffix:!0,locale:s()})}catch{return e}}function Kn({ticket:e,title:t,description:n,priority:r,labels:i,onClose:a}){let{t:o}=p(`tickets`),{triggerResume:s}=T(),{activeProjectId:c}=P(),{closeTicketDetail:l}=on();return We(e)?(0,q.jsxs)(F,{variant:`default`,size:`sm`,onClick:()=>{if(!c)return;let{body:u,criteria:d}=J(n);s({kind:`explore-spec`,projectId:c,label:t||e.title||o(`detailModal.ticketFallbackLabel`,{id:e.id}),restoreRoute:`/`,params:{initialIdea:``,pendingSpecId:Y(),initialAttachmentIds:[],resumeConversationId:e.origin_conversation_id??void 0,editTicket:{id:e.id,title:t,description:u,labels:i,priority:r,acceptanceCriteria:d,status:e.status}}}),l(),a()},className:`shrink-0 mr-2`,"data-testid":`continue-editing`,children:[(0,q.jsx)(Oe,{className:`w-3.5 h-3.5 mr-1.5`}),o(`detailModal.continueEditing`)]}):null}function qn({ticket:e,rails:t,onMoveToRail:n,onRemoveFromRail:r}){let{t:i}=p(`tickets`),[a,o]=(0,W.useState)(null),s=(0,W.useRef)(null),c=t.find(t=>t.ticketIds.includes(e.id));return c?r?(0,q.jsxs)(F,{variant:`outline`,size:`sm`,className:`shrink-0 mr-2 gap-1.5 border-accent-warning/30 text-accent-warning hover:bg-accent-warning/10 hover:text-accent-warning`,"data-testid":`modal-remove-from-rail`,onClick:()=>r(e.id),title:i(`rail.currentlyOn`,{rail:c.label}),children:[(0,q.jsx)(g,{className:`w-3.5 h-3.5`,"aria-hidden":!0}),i(`rail.removeFromRail`)]}):null:n?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(F,{ref:s,variant:`outline`,size:`sm`,className:`shrink-0 mr-2 gap-1.5 border-accent-info/30 text-accent-info hover:bg-accent-info/10 hover:text-accent-info`,"data-testid":`modal-move-to-rail`,onClick:()=>{s.current&&o(s.current.getBoundingClientRect())},children:[i(`rail.moveToRail`),(0,q.jsx)(v,{className:`w-3.5 h-3.5`,"aria-hidden":!0})]}),a&&(0,q.jsx)(Ve,{rails:t,anchorRect:a,onMoveToRail:t=>n(e.id,t),onClose:()=>o(null)})]}):null}var Jn=`
|
|
8
|
+
`;function G(e){return`${j}/api/projects/${encodeURIComponent(e)}`}function Ie(e,t){return JSON.stringify(e)===JSON.stringify(t)}function Le(e,t){let n=new Map(e.map(e=>[e.id,e])),r=t.map(e=>{let t=n.get(e.id);return t&&Ie(t,e)?t:e});return r.length===e.length&&r.every((t,n)=>t===e[n])?e:r}function K(){let{t:e}=p(`tickets`),{activeProjectId:t}=P(),[n,r]=(0,W.useState)([]),[i,a]=(0,W.useState)(!1),[o,s]=(0,W.useState)(null),[c,l]=(0,W.useState)(new Set),[u,d]=(0,W.useState)(new Set),f=(0,W.useRef)(t);f.current=t;let m=(0,W.useRef)(0),g=(0,W.useRef)(null),_=(0,W.useRef)(new Set),{registerHandler:v,unregisterHandler:y,connectionStatus:b}=M(),x=(0,W.useId)(),S=(0,W.useCallback)(async(e,t)=>{let n=G(e),r=await fetch(`${n}/tickets`,{signal:t,cache:`no-store`});if(!r.ok)throw Error(`Failed to fetch tickets: ${r.status}`);let i=await r.json();return Array.isArray(i)?i:i.tickets??[]},[]),C=(0,W.useCallback)(async(t,n)=>{let i=++m.current;g.current?.abort();let o=new AbortController;g.current=o,f.current===t&&(a(!0),s(null));try{let a=await S(t,o.signal);if(o.signal.aborted||i!==m.current||f.current!==t)return;let s=_.current,c=new Set;if(n===`merge`)for(let e of a)s.size>0&&!s.has(e.id)&&c.add(e.id);_.current=new Set(a.map(e=>e.id)),r(n===`replace`?a:e=>Le(e,a)),c.size>0&&s.size>0&&(l(c),h.success(e(`toasts.newTicketsAdded`,{count:c.size}),{id:`tickets-added-${t}`}),setTimeout(()=>{f.current===t&&l(e=>{let t=new Set(e);for(let e of c)t.delete(e);return t})},Pe))}catch(e){if(o.signal.aborted||i!==m.current||f.current!==t)return;s(e instanceof Error?e.message:String(e))}finally{i===m.current&&(g.current===o&&(g.current=null),f.current===t&&a(!1))}},[S,e]),w=(0,W.useCallback)(async()=>{t&&await C(t,`merge`)},[t,C]);(0,W.useEffect)(()=>{if(m.current+=1,g.current?.abort(),g.current=null,r([]),a(!1),s(null),_.current=new Set,l(new Set),d(new Set),t)return C(t,`replace`),()=>{m.current+=1,g.current?.abort(),g.current=null}},[t,C]);let T=(0,W.useCallback)(t=>{let n=t;if(!n||typeof n.type!=`string`)return;let i=f.current;if(!(n.projectId&&n.projectId!==i))switch(n.type){case`mcp.activity`:n.affectedProjectId&&n.affectedProjectId===i&&w();break;case`ticket_created`:{if(!n.ticket)break;let t=n.ticket;r(e=>e.some(e=>e.id===t.id)?e:[...e,t]),_.current.add(t.id),l(e=>new Set([...e,t.id])),Ne(i)||h.success(e(`toasts.newTicket`,{title:t.title}),{id:`new-ticket-${t.id}`}),setTimeout(()=>{l(e=>{let n=new Set(e);return n.delete(t.id),n})},Pe);break}case`ticket_updated`:{if(!n.ticket)break;if(n.ticket.id===0){w();break}let e=n.ticket;r(t=>t.map(t=>t.id===e.id?e:t)),typeof e.description==`string`&&e.description.includes(Fe)&&d(t=>{if(!t.has(e.id))return t;let n=new Set(t);return n.delete(e.id),n});break}case`ticket_deleted`:{if(n.ticketId==null)break;let e=n.ticketId;r(t=>t.filter(t=>t.id!==e)),_.current.delete(e);break}case`explore.contract_refine_started`:if(n.ticketId==null)break;d(e=>new Set([...e,n.ticketId]));break;case`explore.contract_refine_failed`:{if(n.ticketId==null)break;let e=n.ticketId;d(t=>{if(!t.has(e))return t;let n=new Set(t);return n.delete(e),n});break}}},[w,e]);(0,W.useLayoutEffect)(()=>(v(`tickets-${x}`,T),()=>y(`tickets-${x}`)),[T,v,y,x]);let E=(0,W.useRef)(b);return(0,W.useEffect)(()=>{E.current!==`connected`&&b===`connected`&&f.current&&w(),E.current=b},[b,w]),{tickets:n,loading:i,isLoading:i,error:o,newTicketIds:c,contractRefiningIds:u,refetch:w,refresh:w,deleteTicket:(0,W.useCallback)(async e=>{let n=t;if(!n)return!1;try{let t=await fetch(`${G(n)}/tickets/${e}`,{method:`DELETE`});return t.ok&&f.current===n&&await C(n,`merge`),t.ok}catch{return!1}},[t,C]),updateTicketStatus:(0,W.useCallback)(async(e,n)=>{let r=t;if(!r)return!1;try{let t=await fetch(`${G(r)}/tickets/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({status:n})});return t.ok&&f.current===r&&await C(r,`merge`),t.ok}catch{return!1}},[t,C]),updateTicketPriority:(0,W.useCallback)(async(e,n)=>{let r=t;if(!r)return!1;try{let t=await fetch(`${G(r)}/tickets/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({priority:n})});return t.ok&&f.current===r&&await C(r,`merge`),t.ok}catch{return!1}},[t,C]),createTicket:(0,W.useCallback)(async e=>{let n=t;if(!n)return!1;try{let t=await fetch(`${G(n)}/tickets`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});return t.ok&&f.current===n&&await C(n,`merge`),t.ok}catch{return!1}},[t,C]),updateTicket:(0,W.useCallback)(async(e,n)=>{let r=t;if(!r)return!1;try{let t=await fetch(`${G(r)}/tickets/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)});return t.ok&&f.current===r&&await C(r,`merge`),t.ok}catch{return!1}},[t,C])}}var q=n(),Re=224,ze=8,Be=8;function Ve({rails:e,onMoveToRail:t,onClose:n,anchorRect:r}){let{t:i}=p(`tickets`),a=(0,W.useRef)(null),[o,s]=(0,W.useState)(!1);(0,W.useLayoutEffect)(()=>{let e=requestAnimationFrame(()=>s(!0));return()=>cancelAnimationFrame(e)},[]),(0,W.useEffect)(()=>{function e(e){a.current&&(a.current.contains(e.target)||n())}function t(e){e.key===`Escape`&&n()}return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,t)}},[n]);let{top:c,left:l,caretLeft:u}=(0,W.useMemo)(()=>{let e=r.left+r.width/2,t=e-Re/2,n=window.innerWidth-Re-ze,i=Math.max(ze,Math.min(n,t)),a=e-i,o=Math.max(12,Math.min(Re-12,a));return{top:r.bottom+Be,left:i,caretLeft:o}},[r]);return(0,q.jsxs)(`div`,{ref:a,role:`dialog`,"aria-label":i(`rail.popoverTitle`),"data-testid":`move-to-rail-popover`,style:{top:c,left:l,width:Re,opacity:+!!o,transform:o?`translateY(0) scale(1)`:`translateY(-4px) scale(0.97)`,transformOrigin:`${u}px top`,transition:`opacity 140ms ease-out, transform 160ms cubic-bezier(0.2, 0.9, 0.3, 1)`},className:`fixed z-50 rounded-xl border border-border/60 bg-card/95 backdrop-blur shadow-xl shadow-black/40 p-1`,children:[(0,q.jsx)(`div`,{"aria-hidden":!0,className:`absolute w-2 h-2 rotate-45 bg-card/95 border-l border-t border-border/60`,style:{top:-5,left:u-4}}),(0,q.jsx)(`div`,{className:`px-2 py-1.5 text-[10px] uppercase tracking-wider text-muted-foreground/70 font-medium`,children:i(`rail.popoverTitle`)}),e.length===0?(0,q.jsx)(`div`,{className:`px-2 py-2 text-xs text-muted-foreground`,children:i(`rail.noRails`)}):(0,q.jsx)(`ul`,{className:`flex flex-col`,children:e.map(e=>(0,q.jsx)(`li`,{children:(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{t(e.id),n()},className:`w-full flex items-center gap-2 px-2 py-1.5 rounded-lg text-left text-sm hover:bg-accent-info/10 hover:text-accent-info transition-colors`,children:[e.status===`running`?(0,q.jsx)(k,{className:`w-3 h-3 text-accent-success animate-pulse shrink-0`,"aria-hidden":!0}):(0,q.jsx)(Ce,{className:`w-3 h-3 text-muted-foreground/60 shrink-0`,"aria-hidden":!0}),(0,q.jsx)(`span`,{className:`flex-1 truncate`,children:e.label}),(0,q.jsx)(B,{className:`w-3.5 h-3.5 text-muted-foreground/40 shrink-0`,"aria-hidden":!0})]})},e.id))})]})}var He=/\n*##\s*Acceptance Criteria\s*\n([\s\S]*?)(?=\n##\s|\n*$)/i;function J(e){if(!e)return{body:``,criteria:[]};let t=He.exec(e);if(!t)return{body:e.replace(/\s+$/,``),criteria:[]};let n=t[1],r=e.slice(0,t.index),i=e.slice(t.index+t[0].length),a=`${r.replace(/\s+$/,``)}${i?`\n\n${i.replace(/^\s+/,``)}`:``}`,o=n.split(/\r?\n/).map(e=>e.replace(/^\s*[-*+]\s+/,``).trim()).filter(e=>e.length>0);return{body:a.replace(/\s+$/,``),criteria:o}}var Ue=new Set([`draft`,`todo`]);function We(e){return!!(Ue.has(e.status)||e.source===`jira`&&e.jira_key&&e.status!==`cancelled`)}function Y(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e===`x`?t:t&3|8).toString(16)})}var X=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_TERMINAL_PANEL;return typeof e!=`string`||e!==`false`})(),Z=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_AGENTS_SECTION;return typeof e!=`string`||e!==`false`})(),Ge=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_CODE_EXPLORER;return typeof e!=`string`||e!==`false`})(),Ke=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_JIRA;return typeof e!=`string`||e!==`false`})(),qe=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_MCP;return typeof e!=`string`||e!==`false`})(),Je=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_AGENT_CHAT;return typeof e!=`string`||e!==`false`})(),Ye=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_AGENT_MODE;return Je&&(typeof e!=`string`||e!==`false`)})();(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_INTERACTIVE_JOBS;return typeof e!=`string`||e!==`false`})();var Xe=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_LOOPS_SECTION;return typeof e!=`string`||e!==`false`})(),Ze=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_PROJECT_BUILDER;return typeof e!=`string`||e!==`false`})();function Qe(){let{activeProjectId:e}=P(),[t,n]=(0,W.useState)({connected:!1,key:null,discardStatus:null}),[r,i]=(0,W.useState)(!0);return(0,W.useEffect)(()=>{if(!Ke||!e){n({connected:!1,key:null,discardStatus:null}),i(!1);return}let t=!1;return i(!0),L.getConnection().then(e=>{if(t)return;let r=!!(e.connected&&e.connection?.enabled);n({connected:r,key:e.connection?.jiraProjectKey??null,discardStatus:r?e.connection?.discardStatus??null:null})}).catch(()=>{t||n({connected:!1,key:null,discardStatus:null})}).finally(()=>{t||i(!1)}),()=>{t=!0}},[e]),{connected:t.connected,jiraProjectKey:t.key,discardStatus:t.discardStatus,loading:r}}function $e({open:e,onOpenChange:t,ticket:n,discardStatus:r,onDiscarded:i}){let{t:a}=p(`jira`),[o,s]=(0,W.useState)(``),[c,l]=(0,W.useState)(!1);async function u(){l(!0);try{await L.discardSpec(n.id,o.trim()||null),h.success(a(`discard.movedToast`,{status:r,key:n.jira_key??`#${n.id}`})),t(!1),s(``),i?.()}catch(e){h.error(e instanceof Error?e.message:a(`errors.generic`))}finally{l(!1)}}return(0,q.jsx)(ye,{open:e,onOpenChange:e=>{c||t(e)},children:(0,q.jsxs)(he,{movableResizable:!0,className:`max-w-md`,"data-testid":`jira-discard-dialog`,children:[(0,q.jsxs)(fe,{children:[(0,q.jsx)(ge,{children:a(`discard.title`,{status:r})}),(0,q.jsx)(_e,{children:a(`discard.body`,{status:r,key:n.jira_key??`#${n.id}`})})]}),(0,q.jsxs)(`label`,{className:`block space-y-1`,children:[(0,q.jsx)(`span`,{className:`text-xs font-medium text-foreground`,children:a(`discard.commentLabel`)}),(0,q.jsx)(`textarea`,{value:o,onChange:e=>s(e.target.value),placeholder:a(`discard.commentPlaceholder`),rows:3,className:`w-full rounded-md border border-border bg-input px-3 py-2 text-xs text-foreground placeholder:text-muted-foreground resize-none`,"data-testid":`jira-discard-comment`})]}),(0,q.jsxs)(me,{children:[(0,q.jsx)(F,{variant:`outline`,size:`sm`,onClick:()=>t(!1),disabled:c,children:a(`wizard.cancel`)}),(0,q.jsxs)(F,{size:`sm`,onClick:u,disabled:c,"data-testid":`jira-discard-confirm`,children:[(0,q.jsx)(v,{className:`w-3.5 h-3.5 mr-1.5`}),c?a(`discard.moving`):a(`discard.confirm`,{status:r})]})]})]})})}var et={draft:{dotClass:`bg-accent-secondary/60`,textClass:`text-accent-secondary`,borderClass:`border-l-[3px] border-dashed border-accent-secondary/50 pl-3`,labelKey:`common:status.draft`,pulsing:!1},todo:{dotClass:`bg-slate-500/70`,textClass:`text-muted-foreground`,borderClass:`border-l-[3px] border-dashed border-slate-500/40 pl-3`,labelKey:`status.todo`,pulsing:!1},in_progress:{dotClass:`bg-blue-400 aurora-light:bg-accent-info`,textClass:`text-foreground font-semibold`,borderClass:`border-l-[3px] border-solid border-blue-500 pl-3`,labelKey:`status.inProgress`,pulsing:!0},on_review:{dotClass:`bg-accent-warning/80`,textClass:`text-accent-warning`,borderClass:`border-l-[3px] border-solid border-accent-warning/60 pl-3`,labelKey:`status.onReview`,pulsing:!1},done:{dotClass:`text-emerald-400 aurora-light:text-accent-success`,textClass:`text-emerald-400/80 aurora-light:text-accent-success`,borderClass:`border-l-[3px] border-solid border-emerald-500 pl-3`,labelKey:`status.done`,pulsing:!1},cancelled:{dotClass:`text-red-400/60 aurora-light:text-destructive/70`,textClass:`text-muted-foreground/50`,borderClass:`pl-3`,labelKey:`status.cancelled`,pulsing:!1}};function tt({status:e,className:t}){let{t:n}=p(`specs`),r=et[e];return e===`done`?(0,q.jsx)(D,{className:I(`w-3.5 h-3.5 shrink-0`,r.dotClass,t),"aria-label":n(`status.done`)}):e===`cancelled`?(0,q.jsx)(ue,{className:I(`w-3.5 h-3.5 shrink-0`,r.dotClass,t),"aria-label":n(`status.cancelled`)}):r.pulsing?(0,q.jsxs)(`span`,{className:I(`relative flex shrink-0 h-2.5 w-2.5`,t),"aria-label":n(`status.inProgress`),children:[(0,q.jsx)(`span`,{className:I(`animate-ping absolute inline-flex h-full w-full rounded-full opacity-60`,r.dotClass)}),(0,q.jsx)(`span`,{className:I(`relative inline-flex rounded-full h-2.5 w-2.5`,r.dotClass)})]}):(0,q.jsx)(`span`,{className:I(`inline-flex rounded-full h-2.5 w-2.5 shrink-0`,r.dotClass,t),"aria-label":n(r.labelKey)})}function nt({status:e,className:t}){let{t:n}=p(`specs`),r=et[e];return(0,q.jsxs)(`span`,{className:I(`inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full text-[11px] font-medium border`,e===`todo`&&`bg-slate-500/10 border-slate-500/30 text-slate-400 aurora-light:bg-muted aurora-light:border-border aurora-light:text-muted-foreground`,e===`in_progress`&&`bg-blue-500/10 border-blue-500/30 text-blue-400 aurora-light:bg-accent-info/10 aurora-light:border-accent-info/30 aurora-light:text-accent-info`,e===`on_review`&&`bg-accent-warning/10 border-accent-warning/30 text-accent-warning`,e===`done`&&`bg-emerald-500/10 border-emerald-500/30 text-emerald-400 aurora-light:bg-accent-success/10 aurora-light:border-accent-success/30 aurora-light:text-accent-success`,e===`cancelled`&&`bg-red-500/10 border-red-500/30 text-red-400/60 aurora-light:bg-destructive/10 aurora-light:border-destructive/30 aurora-light:text-destructive/70`,t),children:[(0,q.jsx)(tt,{status:e}),n(r.labelKey)]})}async function rt(e,t,n){let r=new FormData;r.append(`file`,t);let i=await fetch(`${N()}/tickets/${e}/attachments`,{method:`POST`,body:r,signal:n});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e.error??u.t(`attachments:errors.uploadFailed`,{status:i.status}))}return(await i.json()).attachment}async function it(e,t){let n=await fetch(`${N()}/tickets/${e}/attachments/${t}`,{method:`DELETE`});if(!n.ok&&n.status!==404)throw Error(u.t(`attachments:errors.deleteFailed`,{status:n.status}))}async function at(e){let t=await fetch(`${N()}/tickets/${e}/attachments`,{method:`DELETE`});if(!t.ok&&t.status!==404)throw Error(u.t(`attachments:errors.bulkDeleteFailed`,{status:t.status}))}async function ot(e){let t=await fetch(`${N()}/tickets/${e}/attachments`);if(!t.ok)throw Error(u.t(`attachments:errors.listFailed`,{status:t.status}));return(await t.json()).attachments}function st(e,t){return`${N()}/tickets/${e}/attachments/${t}`}async function ct(e,t){let n=await fetch(st(e,t));if(!n.ok)throw Error(u.t(`attachments:errors.fetchFailed`,{status:n.status}));return n.blob()}var lt=`image/jpeg,image/png,image/gif,image/webp,application/pdf,text/csv,text/plain,application/json,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel,application/sql,application/x-sql,text/sql,text/x-sql,.sql`,ut=new Set(lt.split(`,`).filter(e=>!e.startsWith(`.`))),dt=/\.sql$/i,ft=/\.(png|jpe?g|gif|webp)$/i;function pt(e){return ut.has(e.type)||dt.test(e.name)||ft.test(e.name)}function mt(){return typeof window<`u`&&window.__TAURI_INTERNALS__!==void 0}function ht(e){return Function(`s`,`return import(s)`)(e).catch(()=>null)}async function gt(e){if(mt()){try{let t=await ht(`@tauri-apps/plugin-opener`);if(t?.revealItemInDir){await t.revealItemInDir(e);return}}catch{}try{await(await ht(`@tauri-apps/api/shell`))?.open?.(e)}catch{}}}async function Q(e){if(mt())try{let t=await i(()=>import(`./dist-js-1QRck05T.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72]));if(typeof t.open==`function`){await t.open(e);return}}catch(e){console.warn(`[openExternalUrl] tauri shell open failed:`,e)}try{window.open(e,`_blank`,`noopener,noreferrer`)}catch{}}function _t(e,t){let n=()=>l(t?.in,NaN),r=t?.additionalDigits??2,i=St(e),a;if(i.date){let e=Ct(i.date,r);a=wt(e.restDateString,e.year)}if(!a||isNaN(+a))return n();let o=+a,s=0,u;if(i.time&&(s=Et(i.time),isNaN(s)))return n();if(i.timezone){if(u=Ot(i.timezone),isNaN(u))return n()}else{let e=new Date(o+s),n=c(0,t?.in);return n.setFullYear(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()),n.setHours(e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()),n}return c(o+s+u,t?.in)}var vt={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},yt=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,bt=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,xt=/^([+-])(\d{2})(?::?(\d{2}))?$/;function St(e){let t={},n=e.split(vt.dateTimeDelimiter),r;if(n.length>2)return t;if(/:/.test(n[0])?r=n[0]:(t.date=n[0],r=n[1],vt.timeZoneDelimiter.test(t.date)&&(t.date=e.split(vt.timeZoneDelimiter)[0],r=e.substr(t.date.length,e.length))),r){let e=vt.timezone.exec(r);e?(t.time=r.replace(e[1],``),t.timezone=e[1]):t.time=r}return t}function Ct(e,t){let n=RegExp(`^(?:(\\d{4}|[+-]\\d{`+(4+t)+`})|(\\d{2}|[+-]\\d{`+(2+t)+`})$)`),r=e.match(n);if(!r)return{year:NaN,restDateString:``};let i=r[1]?parseInt(r[1]):null,a=r[2]?parseInt(r[2]):null;return{year:a===null?i:a*100,restDateString:e.slice((r[1]||r[2]).length)}}function wt(e,t){if(t===null)return new Date(NaN);let n=e.match(yt);if(!n)return new Date(NaN);let r=!!n[4],i=Tt(n[1]),a=Tt(n[2])-1,o=Tt(n[3]),s=Tt(n[4]),c=Tt(n[5])-1;if(r)return Pt(t,s,c)?kt(t,s,c):new Date(NaN);{let e=new Date(0);return!Mt(t,a,o)||!Nt(t,i)?new Date(NaN):(e.setUTCFullYear(t,a,Math.max(i,o)),e)}}function Tt(e){return e?parseInt(e):1}function Et(e){let t=e.match(bt);if(!t)return NaN;let n=Dt(t[1]),r=Dt(t[2]),i=Dt(t[3]);return Ft(n,r,i)?n*o+r*d+i*1e3:NaN}function Dt(e){return e&&parseFloat(e.replace(`,`,`.`))||0}function Ot(e){if(e===`Z`)return 0;let t=e.match(xt);if(!t)return 0;let n=t[1]===`+`?-1:1,r=parseInt(t[2]),i=t[3]&&parseInt(t[3])||0;return It(r,i)?n*(r*o+i*d):NaN}function kt(e,t,n){let r=new Date(0);r.setUTCFullYear(e,0,4);let i=r.getUTCDay()||7,a=(t-1)*7+n+1-i;return r.setUTCDate(r.getUTCDate()+a),r}var At=[31,null,31,30,31,30,31,31,30,31,30,31];function jt(e){return e%400==0||e%4==0&&e%100!=0}function Mt(e,t,n){return t>=0&&t<=11&&n>=1&&n<=(At[t]||(jt(e)?29:28))}function Nt(e,t){return t>=1&&t<=(jt(e)?366:365)}function Pt(e,t,n){return t>=1&&t<=53&&n>=0&&n<=6}function Ft(e,t,n){return e===24?t===0&&n===0:n>=0&&n<60&&t>=0&&t<60&&e>=0&&e<25}function It(e,t){return t>=0&&t<=59}function Lt({ticketKey:e,attachment:t,onClose:n}){let{t:r}=p(`attachments`),[i,a]=(0,W.useState)(null),[o,s]=(0,W.useState)(null);if((0,W.useEffect)(()=>{if(!t)return;function e(e){e.key===`Escape`&&n()}document.addEventListener(`keydown`,e);let r=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.removeEventListener(`keydown`,e),document.body.style.overflow=r}},[t,n]),(0,W.useEffect)(()=>{if(!t){a(null),s(null);return}let n=!1;return a(null),s(null),ct(e,t.id).then(e=>{n||a(URL.createObjectURL(e))}).catch(e=>{n||s(e instanceof Error?e.message:r(`errors.loadFailed`))}),()=>{n=!0}},[t,e]),(0,W.useEffect)(()=>()=>{i&&URL.revokeObjectURL(i)},[i]),!t)return null;let c=t.mimeType.startsWith(`image/`),l=t.mimeType===`application/pdf`;return(0,q.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-label":r(`lightbox.preview`,{name:t.filename}),className:`fixed inset-0 z-[100] flex flex-col bg-black/85 backdrop-blur-sm animate-in fade-in-0 duration-200`,onClick:n,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-3 border-b border-white/10 bg-black/40`,onClick:e=>e.stopPropagation(),children:[(0,q.jsxs)(`button`,{type:`button`,onClick:n,"aria-label":r(`lightbox.backToDesktop`),className:`inline-flex items-center gap-2 px-3 py-1.5 rounded-md text-sm text-white/85 hover:bg-white/10 hover:text-white transition-colors`,children:[(0,q.jsx)(g,{className:`w-4 h-4`}),r(`common:actions.back`)]}),(0,q.jsxs)(`div`,{className:`flex-1 text-center min-w-0 px-4`,children:[(0,q.jsx)(`div`,{className:`text-sm font-medium text-white/95 truncate`,children:t.filename}),(0,q.jsx)(`div`,{className:`text-[11px] text-white/50`,children:t.mimeType})]}),(0,q.jsxs)(`a`,{href:i??`#`,download:t.filename,onClick:e=>{e.stopPropagation(),i||e.preventDefault()},className:`inline-flex items-center gap-2 px-3 py-1.5 rounded-md text-sm text-white/85 hover:bg-white/10 hover:text-white transition-colors`,"aria-label":r(`lightbox.download`),children:[(0,q.jsx)(ne,{className:`w-4 h-4`}),r(`lightbox.download`)]})]}),(0,q.jsx)(`div`,{className:I(`flex-1 flex items-center justify-center overflow-auto p-6`),onClick:n,children:o?(0,q.jsx)(`div`,{onClick:e=>e.stopPropagation(),className:`text-center text-white/80 px-8 py-10 rounded-lg bg-white/5 border border-white/10`,children:(0,q.jsx)(`p`,{className:`text-sm`,children:r(`lightbox.loadError`,{error:o})})}):i?c?(0,q.jsx)(`img`,{src:i,alt:t.filename,onClick:e=>e.stopPropagation(),className:`max-h-full max-w-full rounded-lg shadow-2xl animate-in zoom-in-95 duration-200`}):l?(0,q.jsx)(`iframe`,{src:i,title:t.filename,onClick:e=>e.stopPropagation(),className:`w-full h-full max-w-5xl bg-white rounded-lg shadow-2xl`}):(0,q.jsxs)(`div`,{onClick:e=>e.stopPropagation(),className:`text-center text-white/80 px-8 py-10 rounded-lg bg-white/5 border border-white/10`,children:[(0,q.jsx)(`p`,{className:`text-sm mb-3`,children:r(`lightbox.previewUnavailable`)}),(0,q.jsxs)(`a`,{href:i,download:t.filename,className:`inline-flex items-center gap-2 px-4 py-2 rounded-md bg-white/10 hover:bg-white/20 text-white transition-colors`,children:[(0,q.jsx)(ne,{className:`w-4 h-4`}),r(`lightbox.downloadFile`,{name:t.filename})]})]}):(0,q.jsx)(`div`,{onClick:e=>e.stopPropagation(),className:`text-center text-white/70 px-8 py-10 rounded-lg bg-white/5 border border-white/10`,children:(0,q.jsx)(`p`,{className:`text-sm`,children:r(`lightbox.loading`)})})})]})}function Rt(e,t){let n=new Set,r=[];for(let i of[...e,...t])n.has(i.id)||(n.add(i.id),r.push(i));return r}function zt(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function Bt(e){return e.startsWith(`image/`)?`🖼`:e===`application/pdf`?`📄`:e===`text/csv`||e.includes(`spreadsheetml`)||e===`application/vnd.ms-excel`?`📊`:e===`application/json`?`{ }`:e===`text/plain`||e.includes(`sql`)?`📝`:`📎`}function Vt(e){try{return new Date(e).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`})}catch{return e}}function Ht({ticketKey:e,attachments:t,onChange:n,className:r}){let{t:i}=p(`attachments`),[a,o]=(0,W.useState)(new Set),[s,c]=(0,W.useState)(null),[l,u]=(0,W.useState)(null);if((0,W.useEffect)(()=>{let r=!1;return ot(e).then(e=>{if(r)return;let i=Rt(t,e);i.length!==t.length&&n?.(i)}).catch(()=>{}),()=>{r=!0}},[e]),!t||t.length===0)return null;let d=[...t].sort((e,t)=>e.addedAt<t.addedAt?1:-1);async function f(r){c(null),o(e=>{let t=new Set(e);return t.add(r.id),t});try{await it(e,r.id),await new Promise(e=>setTimeout(e,160)),n?.(t.filter(e=>e.id!==r.id))}catch(e){c(e instanceof Error?e.message:i(`errors.removeFailed`)),o(e=>{let t=new Set(e);return t.delete(r.id),t})}}return(0,q.jsxs)(`section`,{className:I(`mt-4`,r),"aria-label":i(`section.ariaLabel`),children:[(0,q.jsxs)(`header`,{className:`flex items-center justify-between mb-2`,children:[(0,q.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-muted-foreground`,children:i(`section.title`)}),(0,q.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:i(`section.fileCount`,{count:d.length})})]}),(0,q.jsx)(`ul`,{className:`flex flex-col gap-1`,children:d.map(e=>{let t=a.has(e.id);return(0,q.jsxs)(`li`,{className:I(`flex items-center gap-3 px-2.5 py-2 rounded-md border border-border bg-card/60 hover:bg-card transition-all duration-200`,t&&`opacity-0 scale-95 max-h-0 py-0 border-transparent overflow-hidden`),children:[(0,q.jsx)(`span`,{"aria-hidden":!0,className:`w-6 text-center text-sm shrink-0`,children:Bt(e.mimeType)}),(0,q.jsxs)(`button`,{type:`button`,onClick:()=>u(e),className:`flex-1 min-w-0 flex flex-col text-sm text-left hover:text-primary transition-colors`,children:[(0,q.jsx)(`span`,{className:`font-medium truncate text-foreground`,children:e.filename}),(0,q.jsxs)(`span`,{className:`text-[11px] text-muted-foreground`,children:[zt(e.size),` · `,Vt(e.addedAt)]})]}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>u(e),className:`text-[11px] text-primary hover:underline shrink-0`,children:i(`common:actions.open`)}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>f(e),"aria-label":i(`removeFile`,{name:e.filename}),disabled:t,className:`w-6 h-6 inline-flex items-center justify-center rounded text-muted-foreground hover:text-destructive hover:bg-destructive/10 transition-colors disabled:opacity-50`,children:`×`})]},e.id)})}),s&&(0,q.jsx)(`p`,{className:`mt-2 text-xs text-destructive`,children:s}),(0,q.jsx)(Lt,{ticketKey:e,attachment:l,onClose:()=>u(null)})]})}function Ut({ticketId:e,onClose:t}){let{t:n}=p(`code`),r=a(),{activeProjectId:i}=P(),[o,s]=(0,W.useState)(null);return(0,W.useEffect)(()=>{if(!Ge)return;let t=new AbortController;return s(null),fetch(`${N()}/code/provenance?ticketId=${e}`,{signal:t.signal}).then(e=>e.ok?e.json():[]).then(e=>{s(Array.isArray(e)?e:[])}).catch(e=>{e?.name!==`AbortError`&&s([])}),()=>t.abort()},[e,i]),!Ge||!o||o.length===0?null:(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:n(`ticketFiles.title`)}),(0,q.jsx)(`ul`,{className:`space-y-1`,children:o.map((e,i)=>(0,q.jsx)(`li`,{children:(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{t(),r(`/code?path=${encodeURIComponent(e.path)}`)},className:`w-full text-left flex items-center gap-2 rounded px-2 py-1 text-xs hover:bg-muted/40`,children:[(0,q.jsx)(e.kind===`created`?Ee:e.kind===`deleted`?Te:O,{className:`h-3.5 w-3.5 text-muted-foreground shrink-0`}),(0,q.jsx)(`span`,{className:`font-mono truncate flex-1`,children:e.path}),e.jobId&&(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-[10px] text-muted-foreground font-mono shrink-0`,title:n(`ticketFiles.jobTitle`,{jobId:e.jobId}),children:[(0,q.jsx)(V,{className:`h-3 w-3`}),e.jobId.length>10?e.jobId.slice(0,10):e.jobId]}),(0,q.jsx)(`span`,{className:`text-[10px] text-muted-foreground uppercase tracking-wider shrink-0`,children:n(`kind.${e.kind}`)})]})},`${e.path}-${i}`))})]})}var Wt={critical:`bg-red-500/15 aurora-light:bg-destructive/10 text-red-400 aurora-light:text-destructive border-red-500/30 aurora-light:border-destructive/30`,high:`bg-orange-500/15 aurora-light:bg-accent-warning/10 text-orange-400 aurora-light:text-accent-warning border-orange-500/30 aurora-light:border-accent-warning/30`,medium:``,low:`bg-gray-500/15 aurora-light:bg-muted text-gray-400 aurora-light:text-muted-foreground border-gray-500/30 aurora-light:border-border`};function Gt(e){try{return z(new Date(e),{addSuffix:!0,locale:s()})}catch{return e}}function Kt({tickets:e,excludeIds:t,onSelect:n}){let{t:r}=p(`tickets`),[i,a]=(0,W.useState)(``),o=(0,W.useMemo)(()=>{let n=new Set(t),r=e.filter(e=>e.status!==`cancelled`&&!n.has(e.id));if(!i.trim())return r;let a=i.toLowerCase();return r.filter(e=>e.title.toLowerCase().includes(a)||e.description.toLowerCase().includes(a))},[e,t,i]);return(0,q.jsxs)(`div`,{"data-testid":`spec-compare-picker`,className:`h-full flex flex-col rounded-xl bg-card border border-border/40 shadow-2xl shadow-black/50 overflow-hidden`,children:[(0,q.jsxs)(`div`,{className:`px-4 py-3 border-b border-border/30 flex items-center gap-2`,children:[(0,q.jsx)(ke,{className:`w-3.5 h-3.5 text-muted-foreground`}),(0,q.jsx)(`span`,{className:`text-xs font-semibold text-foreground`,children:r(`comparePicker.title`)}),(0,q.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:r(`comparePicker.count`,{n:o.length})})]}),(0,q.jsx)(`div`,{className:`px-4 py-2 border-b border-border/20`,children:(0,q.jsxs)(`div`,{className:`relative`,children:[(0,q.jsx)(ce,{className:`absolute left-2 top-1/2 -translate-y-1/2 w-3 h-3 text-muted-foreground`}),(0,q.jsx)(`input`,{type:`text`,value:i,onChange:e=>a(e.target.value),placeholder:r(`comparePicker.searchPlaceholder`),className:`w-full h-7 rounded border border-border bg-input pl-7 pr-2 text-[11px] text-foreground placeholder:text-muted-foreground outline-none focus:border-accent-primary/60`})]})}),(0,q.jsx)(`div`,{className:`flex-1 overflow-y-auto`,"data-testid":`spec-compare-picker-list`,children:o.length===0?(0,q.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full text-center px-4 py-8 gap-2`,children:[(0,q.jsx)(ke,{className:`w-6 h-6 text-muted-foreground/40`}),(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:i.trim()?r(`comparePicker.noMatches`):r(`comparePicker.empty`)})]}):(0,q.jsx)(`ul`,{className:`divide-y divide-border/10`,children:o.map(e=>(0,q.jsx)(`li`,{children:(0,q.jsxs)(`button`,{type:`button`,"data-testid":`spec-compare-card-${e.id}`,onClick:()=>n(e.id),className:`w-full text-left px-4 py-2.5 hover:bg-accent/30 transition-colors flex items-start gap-2 group`,children:[(0,q.jsx)(tt,{status:e.status}),(0,q.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsxs)(`span`,{className:`text-[10px] font-mono text-muted-foreground`,children:[`#`,e.id]}),e.priority&&Wt[e.priority]&&(0,q.jsx)(`span`,{className:`inline-flex items-center rounded px-1 py-0.5 text-[9px] font-medium border ${Wt[e.priority]}`,children:r(`priority.${e.priority}`)})]}),(0,q.jsx)(`p`,{className:`mt-0.5 text-xs text-foreground truncate group-hover:text-accent-primary transition-colors`,children:e.title||r(`untitled`)}),e.description&&(0,q.jsx)(`p`,{className:`mt-0.5 text-[10px] text-muted-foreground line-clamp-1`,children:e.description.slice(0,120)}),e.labels&&e.labels.length>0&&(0,q.jsxs)(`div`,{className:`mt-1 flex flex-wrap gap-1`,children:[e.labels.slice(0,3).map(e=>(0,q.jsx)(`span`,{className:`inline-flex items-center rounded px-1 py-0.5 text-[9px] bg-accent/40 text-foreground/60`,children:e},e)),e.labels.length>3&&(0,q.jsxs)(`span`,{className:`text-[9px] text-muted-foreground`,children:[`+`,e.labels.length-3]})]}),(0,q.jsx)(`p`,{className:`mt-1 text-[9px] text-muted-foreground`,children:r(`meta.updatedAgo`,{time:Gt(e.updated_at)})})]})]})},e.id))})})]})}var qt=.25,Jt=.75;function Yt({state:e,leftTicket:t,rightTicket:n,allTickets:r,allLabels:i,onSave:a,onDelete:o,onOpenTicket:s,onCloseAll:c,onSetCompared:l,onSetRatio:u,onExitSplit:d}){let f=(0,W.useRef)(null),p=(0,W.useRef)(null),[m,h]=(0,W.useState)(!0);(0,W.useEffect)(()=>{let e=setTimeout(()=>h(!1),320);return()=>clearTimeout(e)},[]);let g=(0,W.useCallback)(e=>{if(!p.current)return;let t=window.innerWidth,n=e.clientX/t;u(Math.min(Jt,Math.max(qt,n)))},[u]),_=(0,W.useCallback)(e=>{if(!p.current)return;let{pointerId:t,element:n}=p.current;try{n.releasePointerCapture(t)}catch{}p.current=null,window.removeEventListener(`pointermove`,g),window.removeEventListener(`pointerup`,_),window.removeEventListener(`pointercancel`,_)},[g]),v=(0,W.useCallback)(e=>{let t=e.currentTarget;try{t.setPointerCapture(e.pointerId)}catch{}p.current={pointerId:e.pointerId,element:t},window.addEventListener(`pointermove`,g),window.addEventListener(`pointerup`,_),window.addEventListener(`pointercancel`,_)},[g,_]);(0,W.useEffect)(()=>()=>{window.removeEventListener(`pointermove`,g),window.removeEventListener(`pointerup`,_),window.removeEventListener(`pointercancel`,_);let e=p.current;if(e){try{e.element.releasePointerCapture(e.pointerId)}catch{}p.current=null}},[g,_]);let y=(0,W.useCallback)(t=>{let n=.04;t.key===`ArrowLeft`?(t.preventDefault(),u(Math.max(qt,e.splitRatio-n))):t.key===`ArrowRight`?(t.preventDefault(),u(Math.min(Jt,e.splitRatio+n))):t.key===`Home`?(t.preventDefault(),u(qt)):t.key===`End`?(t.preventDefault(),u(Jt)):t.key===`0`&&(t.preventDefault(),u(.5))},[u,e.splitRatio]),b=e=>{e.target===e.currentTarget&&c()},x=u=>{let d=u===e.originSide,f=u===`left`?t:n;return f?(0,q.jsx)(Wn,{ticket:f,allLabels:i,allTickets:r,onClose:d?c:()=>l(null,u),onOpenTicket:s,onSave:a,onDelete:o,embedded:!0},`${u}-${f.id}`):(0,q.jsx)(Kt,{tickets:r,excludeIds:[t?.id,n?.id].filter(e=>e!=null),onSelect:e=>l(e,u)})},S=(e.splitRatio*100).toFixed(2),C=((1-e.splitRatio)*100).toFixed(2);return(0,q.jsxs)(`div`,{ref:f,"data-testid":`split-view-shell`,className:`fixed inset-0 z-[68] flex`,onClick:b,children:[(0,q.jsx)(`div`,{className:`absolute inset-0 bg-black/70 pointer-events-none`,"aria-hidden":!0}),(0,q.jsxs)(`div`,{className:`relative flex w-full h-full`,style:{transition:m?`opacity 280ms cubic-bezier(0.34, 1.56, 0.64, 1)`:void 0},children:[(0,q.jsx)(`div`,{"data-testid":`split-panel-left`,className:`relative h-full overflow-hidden`,style:{width:`${S}%`,transition:m?`width 280ms cubic-bezier(0.34, 1.56, 0.64, 1)`:void 0},children:(0,q.jsx)(`div`,{className:`h-full flex items-center justify-center p-2`,children:(0,q.jsx)(`div`,{className:`w-full h-full max-h-[95vh]`,children:x(`left`)})})}),(0,q.jsx)(`div`,{"data-testid":`split-divider`,role:`separator`,"aria-orientation":`vertical`,"aria-valuenow":Math.round(e.splitRatio*100),"aria-valuemin":Math.round(qt*100),"aria-valuemax":Math.round(Jt*100),tabIndex:0,onPointerDown:v,onKeyDown:y,className:`relative z-10 w-2 cursor-col-resize bg-border/40 hover:bg-accent-primary/40 transition-colors focus:outline-none focus:bg-accent-primary/60`}),(0,q.jsx)(`div`,{"data-testid":`split-panel-right`,className:`relative h-full overflow-hidden`,style:{width:`${C}%`,transition:m?`width 280ms cubic-bezier(0.34, 1.56, 0.64, 1)`:void 0},children:(0,q.jsx)(`div`,{className:`h-full flex items-center justify-center p-2`,children:(0,q.jsx)(`div`,{className:`w-full h-full max-h-[95vh]`,children:x(`right`)})})})]})]})}var Xt=.5,Zt=.25,Qt=.75,$t={leftId:null,rightId:null,originSide:null,splitRatio:Xt};function en(e){return Number.isFinite(e)?Math.min(Qt,Math.max(Zt,e)):Xt}function tn(e,t){switch(t.type){case`openCentered`:return e.originSide!==null&&e.leftId!==t.id&&e.rightId!==t.id?{leftId:t.id,rightId:null,originSide:null,splitRatio:Xt}:e.originSide!==null&&(e.leftId===t.id||e.rightId===t.id)?e:{...$t,leftId:t.id};case`closeAll`:return $t;case`enterSplit`:{let n=t.ticketId??e.leftId;return n===null||e.originSide!==null?e:t.side===`left`?{leftId:n,rightId:null,originSide:`left`,splitRatio:Xt}:{leftId:null,rightId:n,originSide:`right`,splitRatio:Xt}}case`setComparedTicket`:{if(e.originSide===null)return e;let n=e.originSide===`left`?`right`:`left`;return t.side===n?t.side===`left`?{...e,leftId:t.id}:{...e,rightId:t.id}:e}case`exitSplit`:{if(e.originSide===null)return e;let t=e.originSide===`left`?e.leftId:e.rightId;return{...$t,leftId:t}}case`setSplitRatio`:return{...e,splitRatio:en(t.ratio)};default:return e}}var nn=(0,W.createContext)(null),rn=900;function an({children:e}){let[t,n]=(0,W.useReducer)(tn,$t),{tickets:r,updateTicket:i,deleteTicket:a}=K(),{activeProjectId:o,setActiveProjectId:s}=P(),c=(0,W.useRef)(null);(0,W.useEffect)(()=>{n({type:`closeAll`});let e=c.current;e&&(c.current=null,e.projectId===o&&n({type:`openCentered`,id:e.ticketId}))},[o]);let l=(0,W.useCallback)(e=>n({type:`openCentered`,id:e}),[]),u=(0,W.useCallback)((e,t)=>{if(e===o){n({type:`openCentered`,id:t});return}c.current={projectId:e,ticketId:t},s(e)},[o,s]),d=(0,W.useCallback)(()=>n({type:`closeAll`}),[]),f=(0,W.useCallback)((e,t)=>{typeof window<`u`&&window.innerWidth<rn||n({type:`enterSplit`,side:e,ticketId:t})},[]),p=(0,W.useCallback)((e,t)=>n({type:`setComparedTicket`,id:e,side:t}),[]),m=(0,W.useCallback)(()=>n({type:`exitSplit`}),[]),h=(0,W.useCallback)(e=>n({type:`setSplitRatio`,ratio:e}),[]);(0,W.useEffect)(()=>{if(typeof window>`u`)return;function e(){window.innerWidth<rn&&n({type:`exitSplit`})}return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]);let g=(0,W.useMemo)(()=>{let e=new Set;for(let t of r)for(let n of t.labels??[])e.add(n);return Array.from(e).sort()},[r]),_=t.leftId==null?null:r.find(e=>e.id===t.leftId)??null,v=t.rightId==null?null:r.find(e=>e.id===t.rightId)??null,y=(0,W.useMemo)(()=>({openTicketDetail:l,openTicketDetailInProject:u,closeTicketDetail:d,enterSplit:f,setComparedTicket:p,exitSplit:m,setSplitRatio:h,state:t}),[l,u,d,f,p,m,h,t]),b=t.originSide!==null;return(0,q.jsxs)(nn.Provider,{value:y,children:[e,!b&&_&&(0,q.jsx)(Wn,{ticket:_,allLabels:g,allTickets:r,onClose:d,onOpenTicket:l,onSave:i,onDelete:a},_.id),b&&(0,q.jsx)(Yt,{state:t,leftTicket:_,rightTicket:v,allTickets:r,allLabels:g,onSave:i,onDelete:a,onOpenTicket:l,onCloseAll:d,onSetCompared:p,onSetRatio:h,onExitSplit:m})]})}function on(){return(0,W.useContext)(nn)||{openTicketDetail:()=>{typeof console<`u`&&console.warn(`[TicketDetailModalContext] openTicketDetail called without provider`)},openTicketDetailInProject:()=>{typeof console<`u`&&console.warn(`[TicketDetailModalContext] openTicketDetailInProject called without provider`)},closeTicketDetail:()=>{},enterSplit:()=>{},setComparedTicket:()=>{},exitSplit:()=>{},setSplitRatio:()=>{},state:$t}}function sn(e){return e<.005?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}function cn(e){return e<1e3?`${e} ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${Math.floor(e/6e4)}m ${Math.floor(e%6e4/1e3)}s`}function ln({ticketId:e}){let{t}=p(`tickets`),[n,r]=(0,W.useState)(null),i=a(),{activeProjectId:o}=P(),{closeTicketDetail:s}=on();if((0,W.useEffect)(()=>{let t=new AbortController;return r(null),fetch(`${N()}/tickets/${e}/spending-summary`,{signal:t.signal}).then(e=>e.ok?e.json():null).then(e=>{e&&r(e)}).catch(()=>{}),()=>t.abort()},[e,o]),!n||!n.bySurface||!n.totalRuns||n.totalRuns===0)return null;let c=Object.entries(n.bySurface).filter(([,e])=>e.count>0).map(([e,n])=>t(`spendingLine.breakdownItem`,{n:n.count,label:Se[e].toLowerCase()})).join(` + `),l=n.unpricedRuns??0,u=n.pricedRuns??Math.max(0,n.totalRuns-l),d=l>0&&u===0,f=l>0&&u>0,m=n.turnsUnavailableRuns??0,h=n.totalTurns==null||m>0&&(n.turnsReportedRuns??0)===0,g=!h&&m>0;return(0,q.jsxs)(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),s(),i(`/analytics?ticketId=${e}`)},className:`mt-1.5 group inline-flex items-center gap-1.5 text-[11px] text-muted-foreground hover:text-foreground transition-colors cursor-pointer`,"aria-label":t(`spendingLine.ariaLabel`),children:[(0,q.jsx)(`span`,{className:`tabular-nums font-medium text-foreground`,"data-testid":d?`ticket-cost-unavailable`:void 0,title:d?t(`spendingLine.costUnavailableTooltip`):f?t(`spendingLine.costPartiallyUnavailableTooltip`):(n.estimatedCostUsd??0)>0?t(`spendingLine.estimatedTooltip`):void 0,children:d?`—`:`${(n.estimatedCostUsd??0)>0?`~`:``}${f?`≥`:``}${sn(n.totalCostUsd)}`}),(0,q.jsx)(`span`,{className:`text-muted-foreground/60`,children:`·`}),(0,q.jsx)(`span`,{className:`tabular-nums`,"data-testid":h?`ticket-turns-unavailable`:void 0,title:h?t(`spendingLine.turnsUnavailableTooltip`):g?t(`spendingLine.turnsPartiallyUnavailableTooltip`):void 0,children:h?`—`:`${g?`≥`:``}${t(`spendingLine.turns`,{count:n.totalTurns})}`}),(0,q.jsx)(`span`,{className:`text-muted-foreground/60`,children:`·`}),(0,q.jsx)(`span`,{className:`tabular-nums`,children:t(`spendingLine.active`,{duration:cn(n.activeDurationMs)})}),c&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`span`,{className:`text-muted-foreground/60`,children:`·`}),(0,q.jsx)(`span`,{children:c})]}),(0,q.jsx)(v,{className:`w-3 h-3 opacity-0 group-hover:opacity-100 transition-opacity`})]})}var un=/^\d{4}-\d{2}-\d{2}T/;function dn(e){if(un.test(e))try{return{text:z(_t(e),{addSuffix:!0,locale:s()}),title:e}}catch{}return{text:e}}function fn({localId:e}){let{t}=p(`jira`),{activeProjectId:n}=P(),r=Qe(),[i,a]=(0,W.useState)(null);if((0,W.useEffect)(()=>{if(!Ke||!r.connected)return;let t=!1;return a(null),L.getSpecDetails(e).then(e=>{t||a(e)}).catch(()=>{t||a(null)}),()=>{t=!0}},[e,n,r.connected]),!Ke||!r.connected||!i)return null;let o=i.development,s=i.fields.length>0,c=o.pullRequests.length>0,l=o.branches.length>0,u=(o.commits?.length??0)>0;return!s&&!c&&!l&&!u?null:(0,q.jsxs)(`div`,{className:`space-y-4`,"data-testid":`jira-details-panel`,children:[s&&(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:t(`detail.detailsTitle`)}),(0,q.jsx)(`div`,{className:`space-y-1.5`,children:i.fields.map((e,t)=>{let n=dn(e.value);return(0,q.jsxs)(`div`,{className:`text-xs`,children:[(0,q.jsx)(`span`,{className:`text-[10px] text-muted-foreground uppercase tracking-wide block`,children:e.label}),e.href?(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{Q(e.href)},className:`inline-flex items-center gap-1 text-accent-info hover:underline text-left`,children:[(0,q.jsx)(`span`,{className:`truncate`,children:e.value}),(0,q.jsx)(ee,{className:`w-3 h-3 shrink-0`})]}):(0,q.jsx)(`span`,{className:`text-foreground/80 whitespace-pre-line`,title:n.title,children:n.text})]},`${e.label}-${t}`)})})]}),(c||l||u)&&(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:t(`detail.developmentTitle`)}),c&&(0,q.jsxs)(`div`,{className:`mb-2`,children:[(0,q.jsx)(`span`,{className:`text-[10px] text-muted-foreground uppercase tracking-wide block mb-1`,children:t(`detail.dev.pullRequests`)}),(0,q.jsx)(`div`,{className:`space-y-1`,children:o.pullRequests.map(e=>(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{Q(e.url)},className:`w-full flex items-start gap-1.5 text-left text-xs hover:bg-accent-info/10 rounded px-1 py-0.5`,"data-testid":`jira-dev-pr`,children:[(0,q.jsx)(De,{className:`w-3 h-3 mt-0.5 shrink-0 text-accent-info`}),(0,q.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,q.jsx)(`span`,{className:`truncate text-foreground/80 block`,children:e.title}),(0,q.jsxs)(`span`,{className:`text-[10px] text-muted-foreground`,children:[e.status,e.sourceBranch?` · ${e.sourceBranch} → ${e.destBranch??``}`:``]})]})]},e.url))})]}),l&&(0,q.jsxs)(`div`,{className:`mb-2`,children:[(0,q.jsx)(`span`,{className:`text-[10px] text-muted-foreground uppercase tracking-wide block mb-1`,children:t(`detail.dev.branches`)}),(0,q.jsx)(`div`,{className:`space-y-1`,children:o.branches.map(e=>(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{Q(e.url)},className:`w-full flex items-center gap-1.5 text-left text-xs hover:bg-accent-info/10 rounded px-1 py-0.5`,"data-testid":`jira-dev-branch`,children:[(0,q.jsx)(re,{className:`w-3 h-3 shrink-0 text-accent-info`}),(0,q.jsx)(`span`,{className:`truncate font-mono text-foreground/80`,children:e.name}),e.repo&&(0,q.jsx)(`span`,{className:`text-[10px] text-muted-foreground truncate`,children:e.repo})]},e.url))})]}),u&&(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`text-[10px] text-muted-foreground uppercase tracking-wide block mb-1`,children:t(`detail.dev.commits`)}),(0,q.jsx)(`div`,{className:`space-y-1`,children:o.commits.map(e=>(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{Q(e.url)},className:`w-full flex items-center gap-1.5 text-left text-xs hover:bg-accent-info/10 rounded px-1 py-0.5`,"data-testid":`jira-dev-commit`,children:[(0,q.jsx)(V,{className:`w-3 h-3 shrink-0 text-accent-info`}),(0,q.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground shrink-0`,children:e.displayId}),(0,q.jsx)(`span`,{className:`truncate text-foreground/80`,children:e.message})]},e.url))})]})]})]})}var pn=e(r(),1);function mn({open:e,url:t,projectId:n,onClose:r}){let{t:i}=p(`browser`),a=C({projectId:n,open:e,initialUrl:t}),{canvasRef:o,viewport:s,status:c,errorMsg:l,url:u,title:d,popup:f}=a,[m,h]=(0,W.useState)(t),S=(0,W.useRef)(a.forwardInput);S.current=a.forwardInput;let T=(0,W.useRef)(null),E=(0,W.useCallback)(()=>(T.current??=b(e=>S.current(e)),T.current),[]);(0,W.useEffect)(()=>()=>{T.current?.dispose(),T.current=null},[]),(0,W.useEffect)(()=>{u&&h(u)},[u]),(0,W.useEffect)(()=>{if(!e)return;let t=e=>{e.key===`Escape`&&r()};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[e,r]);let D=(0,W.useCallback)((e,t)=>{let n=o.current?.getBoundingClientRect();return n?_({x:e,y:t},{left:n.left,top:n.top,width:n.width,height:n.height},s):{x:0,y:0}},[o,s]),te=e=>e===2?`right`:e===1?`middle`:`left`,ne=(0,W.useCallback)(e=>{let t=D(e.clientX,e.clientY);E().move(t.x,t.y)},[D,E]),O=(0,W.useCallback)(e=>{let t=D(e.clientX,e.clientY),n=E();n.move(t.x,t.y),n.flush(),a.forwardInput({type:`mouse`,action:`down`,x:t.x,y:t.y,button:te(e.button),clickCount:e.detail||1})},[D,a,E]),re=(0,W.useCallback)(e=>{let t=D(e.clientX,e.clientY),n=E();n.move(t.x,t.y),n.flush(),a.forwardInput({type:`mouse`,action:`up`,x:t.x,y:t.y,button:te(e.button),clickCount:e.detail||1})},[D,a,E]),ie=(0,W.useCallback)(e=>{let t=D(e.clientX,e.clientY);E().wheel(t.x,t.y,e.deltaX,e.deltaY)},[D,E]),ae=(0,W.useCallback)(e=>{if(e.key===`Escape`)return;let t=e.metaKey||e.ctrlKey;if(t&&(e.key===`c`||e.key===`v`||e.key===`x`)){e.preventDefault();let t=e.key;(async()=>{try{if(t===`v`){let e=await navigator.clipboard.readText();e&&await a.clipboard(`paste`,e)}else{let{text:e}=await a.clipboard(t===`x`?`cut`:`copy`);e&&await navigator.clipboard.writeText(e)}}catch{}})();return}let n={type:`key`,action:`down`,key:e.key,code:e.code,text:!t&&e.key.length===1?e.key:void 0};a.forwardInput(n),(e.key===`Tab`||e.key===` `||e.key.startsWith(`Arrow`))&&e.preventDefault()},[a]),k=(0,W.useCallback)(e=>{e.key!==`Escape`&&a.forwardInput({type:`key`,action:`up`,key:e.key,code:e.code})},[a]),oe=(0,W.useCallback)(()=>{a.navigate(`goto`,m)},[a,m]);return!e||typeof document>`u`?null:(0,pn.createPortal)((0,q.jsx)(`div`,{className:`fixed inset-0 z-[80] bg-background-deep/50 backdrop-blur-sm pointer-events-auto`,onClick:e=>{e.target===e.currentTarget&&r()},"data-testid":`webview-modal`,children:(0,q.jsxs)(`div`,{className:`absolute inset-2 flex flex-col border border-border rounded-lg bg-background-deep overflow-hidden`,role:`dialog`,"aria-modal":`true`,"aria-label":i(`modal.dialogLabel`),onClick:e=>e.stopPropagation(),children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-b border-border/50 bg-surface/80 shrink-0`,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,q.jsx)(F,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":i(`common:actions.back`),onClick:()=>a.navigate(`back`),children:(0,q.jsx)(g,{className:`w-4 h-4`})}),(0,q.jsx)(F,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":i(`modal.nav.forward`),onClick:()=>a.navigate(`forward`),children:(0,q.jsx)(v,{className:`w-4 h-4`})}),(0,q.jsx)(F,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":i(`modal.nav.reload`),onClick:()=>a.navigate(`reload`),children:(0,q.jsx)(x,{className:`w-4 h-4`})})]}),(0,q.jsxs)(`form`,{className:`flex-1 flex items-center gap-2 min-w-0`,onSubmit:e=>{e.preventDefault(),oe()},children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2 flex-1 min-w-0 rounded-md border border-border bg-background px-2.5 py-1`,children:[(0,q.jsx)(y,{className:`w-3.5 h-3.5 text-muted-foreground shrink-0`}),(0,q.jsx)(`input`,{value:m,onChange:e=>h(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),oe())},placeholder:i(`modal.address.placeholder`),"aria-label":i(`modal.address.label`),className:`flex-1 min-w-0 bg-transparent outline-none text-sm`})]}),(0,q.jsx)(F,{type:`submit`,size:`sm`,variant:`secondary`,className:`shrink-0`,disabled:c===`error`,children:i(`modal.address.go`)})]}),(0,q.jsx)(F,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":i(`modal.closeBrowser`),onClick:r,children:(0,q.jsx)(ue,{className:`w-4 h-4`})})]}),(0,q.jsxs)(`div`,{className:`px-3 py-1 text-[11px] text-muted-foreground truncate shrink-0 flex items-center gap-2`,children:[(0,q.jsx)(`span`,{className:`inline-block w-2 h-2 rounded-full shrink-0 ${c===`ready`?`bg-accent-success`:c===`error`?`bg-destructive`:`bg-accent-warning animate-pulse`}`,"aria-hidden":!0}),(0,q.jsx)(`span`,{className:`truncate`,children:c===`connecting`?i(`modal.status.connecting`):c===`error`?l??i(`modal.status.unavailable`):d||``})]}),f&&(0,q.jsxs)(`div`,{"data-testid":`webview-popup-bar`,className:`flex items-center gap-2 px-3 py-1.5 text-xs border-b shrink-0 ${f.active?`bg-accent-info/10 border-accent-info/30 text-accent-info`:`bg-surface/70 border-border/40 text-muted-foreground`}`,children:[(0,q.jsx)(ee,{className:`w-3.5 h-3.5 shrink-0`}),f.active?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`span`,{className:`truncate font-medium`,children:i(`popup.loginWindow`,{origin:w(f.url)})}),f.count>1&&(0,q.jsx)(`span`,{className:`shrink-0 opacity-70`,children:i(`popup.stacked`,{count:f.count-1})}),(0,q.jsxs)(`button`,{type:`button`,onClick:()=>a.setPopupView(`root`),className:`ml-auto shrink-0 inline-flex items-center gap-1 h-6 px-2 rounded-md border border-current/30 hover:bg-card/60 transition-colors`,children:[(0,q.jsx)(g,{className:`w-3 h-3`}),i(`popup.backToPage`)]})]}):(0,q.jsxs)(`button`,{type:`button`,onClick:()=>a.setPopupView(`popup`),className:`inline-flex items-center gap-1 h-6 px-2 rounded-md border border-border/50 hover:bg-card/60 hover:text-foreground transition-colors`,children:[i(`popup.show`),f.count>1&&(0,q.jsx)(`span`,{className:`opacity-70`,children:i(`popup.stacked`,{count:f.count-1})})]})]}),(0,q.jsx)(`div`,{className:`relative flex-1 min-h-0 overflow-hidden flex items-center justify-center outline-none`,tabIndex:0,onKeyDown:ae,onKeyUp:k,children:c===`error`?(0,q.jsxs)(`div`,{className:`flex flex-col items-center gap-2 text-center max-w-md px-6`,children:[(0,q.jsx)(A,{className:`w-8 h-8 text-accent-warning`}),(0,q.jsx)(`p`,{className:`text-sm text-foreground/90`,children:l??i(`modal.error.unavailable`)})]}):(0,q.jsx)(`canvas`,{ref:o,className:`max-w-full max-h-full block shadow-2xl cursor-default`,onPointerMove:ne,onPointerDown:O,onPointerUp:re,onContextMenu:e=>e.preventDefault(),onWheel:ie})})]})}),document.body)}var hn=(0,W.createContext)(null);function gn({children:e}){let{activeProjectId:t}=P(),[n,r]=(0,W.useState)(null),i=(0,W.useCallback)(e=>r(e),[]),a=S();return(0,q.jsxs)(hn.Provider,{value:{openWebView:i,canOpenWebView:a&&!!t},children:[e,a&&n&&t&&(0,q.jsx)(mn,{open:!0,url:n,projectId:t,onClose:()=>r(null)})]})}function _n(){return(0,W.useContext)(hn)??{openWebView:()=>{},canOpenWebView:!1}}var vn={analyzing:`activity:smash.stage.analyzing`,identifying:`activity:smash.stage.identifying`,ordering:`activity:smash.stage.ordering`},yn=(0,W.createContext)(null);function $(e){return`smash:${e}`}async function bn(e,t){try{let n=await fetch(`${j}/api/projects/${e}/tickets/${t}/smash`,{method:`POST`});if(n.ok)h.loading(u.t(`activity:smash.retrying`),{id:$(t)});else{let e=await n.json().catch(()=>({}));h.error(e.reason?u.t(`activity:smash.couldNotRetryWithReason`,{reason:e.reason}):u.t(`activity:smash.couldNotRetry`),{id:$(t)})}}catch(e){h.error(u.t(`activity:smash.retryFailed`,{message:e.message}),{id:$(t)})}}async function xn(e,t,n){try{let r=await fetch(`${j}/api/projects/${e}/tickets/${t}/smash/undo`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({smashedAt:n})});if(r.ok)h.success(u.t(`activity:smash.undone`),{id:$(t),duration:3e3});else{let e=await r.json().catch(()=>({}));h.error(e.reason?u.t(`activity:smash.undoFailedWithReason`,{reason:e.reason}):u.t(`activity:smash.undoFailed`),{id:$(t)})}}catch(e){h.error(u.t(`activity:smash.undoFailedWithReason`,{reason:e.message}),{id:$(t)})}}function Sn({children:e}){let{registerHandler:t,unregisterHandler:n}=M(),[r,i]=(0,W.useState)({}),a=(0,W.useRef)(new Map),o=(0,W.useRef)(new Map),s=(0,W.useCallback)(e=>{let t=e;if(!t||t.type!==`smash.started`)return;let n=t.ticketId,r=t.runId,o=t.projectId,s=t.timestamp,c=t.ticketTitle;typeof n!=`number`||!r||!o||(a.current.set(n,o),i(e=>({...e,[n]:{ticketId:n,runId:r,stage:`analyzing`,startedAt:s??new Date().toISOString(),ticketTitle:c}})),h.loading(u.t(vn.analyzing),{id:$(n),description:c?u.t(`activity:smash.onTitled`,{title:c}):u.t(`activity:smash.onThisSpec`)}))},[]),c=(0,W.useCallback)(e=>{let t=e;if(!t||t.type!==`smash.progress`)return;let n=t.ticketId,r=t.stage;if(typeof n!=`number`||!r)return;let a;i(e=>{let t=e[n];return t?(a=t.ticketTitle,{...e,[n]:{...t,stage:r}}):e}),h.loading(u.t(vn[r]),{id:$(n),description:a?u.t(`activity:smash.onTitled`,{title:a}):u.t(`activity:smash.onThisSpec`)})},[]),l=(0,W.useCallback)(e=>{let t=e;if(!t||t.type!==`smash.completed`)return;let n=t.ticketId,r=t.runId,a=t.projectId,s=t.smashedAt,c=t.childrenIds;typeof n!=`number`||!r||!a||!s||!c||(o.current.set(r,s),i(e=>{let t={...e};return delete t[n],t}),h.success(u.t(`activity:smash.split`,{count:c.length}),{id:$(n),duration:1e4,action:{label:u.t(`activity:smash.undoAction`),onClick:()=>void xn(a,n,s)}}))},[]),d=(0,W.useCallback)(e=>{let t=e;if(!t||t.type!==`smash.failed`)return;let n=t.ticketId,r=t.projectId,o=t.reason??`unknown`;if(typeof n!=`number`||!r)return;a.current.set(n,r),i(e=>{let t={...e};return delete t[n],t});let s=o===`invalid-output`?u.t(`activity:smash.failReason.invalidOutput`):o===`timeout`?u.t(`activity:smash.failReason.timeout`):o===`model_error`?u.t(`activity:smash.failReason.modelError`):o===`crashed`?u.t(`activity:smash.failReason.crashed`):u.t(`activity:smash.failReason.generic`,{reason:o});h.error(u.t(`activity:smash.couldNotComplete`),{id:$(n),description:s,action:{label:u.t(`common:actions.retry`),onClick:()=>void bn(r,n)},duration:15e3})},[]),f=(0,W.useCallback)(e=>{let t=e;if(!t||t.type!==`smash.undone`)return;let n=t.ticketId;typeof n==`number`&&(h.dismiss($(n)),h.success(u.t(`activity:smash.undone`),{id:$(n),duration:3e3}))},[]);(0,W.useLayoutEffect)(()=>(t(`_smash_started`,s),t(`_smash_progress`,c),t(`_smash_completed`,l),t(`_smash_failed`,d),t(`_smash_undone`,f),()=>{n(`_smash_started`),n(`_smash_progress`),n(`_smash_completed`),n(`_smash_failed`),n(`_smash_undone`)}),[t,n,s,c,l,d,f]),(0,W.useEffect)(()=>()=>{a.current.clear(),o.current.clear()},[]);let p=(0,W.useMemo)(()=>({inflight:r}),[r]);return(0,q.jsx)(yn.Provider,{value:p,children:e})}function Cn(e){let t=(0,W.useContext)(yn);return!t||e==null?null:t.inflight[e]??null}var wn=150,Tn={analyzing:0,identifying:1,ordering:2},En={analyzing:`smash.stage.analyzing`,identifying:`smash.stage.identifying`,ordering:`smash.stage.ordering`};function Dn({stage:e,minDisplayMs:t=wn}){let{t:n}=p(`activity`),[r,i]=(0,W.useState)(e),a=(0,W.useRef)(Date.now()),o=(0,W.useRef)(null);if((0,W.useEffect)(()=>{if(e===r)return;let n=Date.now()-a.current,s=Math.max(0,t-n);return o.current&&clearTimeout(o.current),o.current=setTimeout(()=>{i(e),a.current=Date.now(),o.current=null},s),()=>{o.current&&clearTimeout(o.current)}},[e,r,t]),!r)return null;let s=Tn[r];return(0,q.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 rounded-md border border-accent-highlight/40 bg-accent-highlight/10 text-sm text-foreground`,role:`status`,"aria-live":`polite`,"data-testid":`smash-status-pills`,children:[(0,q.jsx)(ie,{className:`h-4 w-4 animate-spin text-accent-highlight`,"aria-hidden":!0}),(0,q.jsx)(`div`,{className:`flex items-center gap-1.5`,children:[`analyzing`,`identifying`,`ordering`].map(e=>(0,q.jsx)(`span`,{className:[`inline-block w-1.5 h-1.5 rounded-full transition-all`,Tn[e]<=s?`bg-accent-highlight`:`bg-muted`,e===r?`scale-125`:`scale-100`].join(` `),"aria-hidden":!0},e))}),(0,q.jsx)(`span`,{className:`font-medium`,children:n(En[r])})]})}var On={simple:{titleKey:`smashModal.modes.simple.title`,bulletKeys:[`smashModal.modes.simple.bullet1`,`smashModal.modes.simple.bullet2`,`smashModal.modes.simple.bullet3`],etaKey:`smashModal.modes.simple.eta`},full:{titleKey:`smashModal.modes.full.title`,bulletKeys:[`smashModal.modes.full.bullet1`,`smashModal.modes.full.bullet2`,`smashModal.modes.full.bullet3`,`smashModal.modes.full.bullet4`],etaKey:`smashModal.modes.full.eta`}};function kn({open:e,ticketTitle:t,isReSmash:n,childrenCount:r,submitting:i=!1,onCancel:a,onConfirm:o}){let{t:s}=p(`activity`),[c,l]=(0,W.useState)(`simple`),{panelRef:u,panelStyle:d,headerHandleProps:m,resizeHandles:h,isFloating:g,guardBackdrop:_}=pe();return e?(0,q.jsxs)(`div`,{className:`fixed inset-0 z-[60] flex items-center justify-center`,role:`dialog`,"aria-modal":`true`,"data-testid":`smash-confirm-modal`,children:[(0,q.jsx)(`div`,{className:`absolute inset-0 bg-black/60 backdrop-blur-sm`,onClick:_(a)}),(0,q.jsxs)(`div`,{ref:u,className:`relative w-full max-w-lg m-4 rounded-xl glass-card border border-border/30 animate-in fade-in zoom-in-95 duration-150`,style:d,children:[(0,q.jsxs)(`div`,{...m,className:`flex items-start justify-between gap-3 px-5 py-4 border-b border-border/30 ${g?`cursor-grab active:cursor-grabbing`:``}`,children:[(0,q.jsxs)(`div`,{className:`flex items-start gap-2 min-w-0`,children:[(0,q.jsx)(H,{className:`w-5 h-5 text-accent-highlight shrink-0 mt-0.5`,"aria-hidden":!0}),(0,q.jsxs)(`div`,{className:`min-w-0`,children:[(0,q.jsx)(`h2`,{className:`text-sm font-semibold text-foreground`,children:s(`smashModal.title`)}),(0,q.jsx)(`p`,{className:`text-[11px] text-muted-foreground truncate`,title:t,children:t})]})]}),(0,q.jsx)(`button`,{type:`button`,onClick:a,className:`h-7 w-7 flex items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-surface/50 transition-colors shrink-0`,"aria-label":s(`common:actions.close`),children:(0,q.jsx)(ue,{className:`w-4 h-4`})})]}),n&&r>0&&(0,q.jsx)(`div`,{className:`mx-5 mt-4 rounded-md border border-accent-warning/40 bg-accent-warning/10 px-3 py-2 text-xs text-foreground`,children:(0,q.jsx)(f,{t:s,i18nKey:`smashModal.reSmashWarning`,count:r})}),(0,q.jsxs)(`div`,{className:`px-5 py-4 space-y-3`,children:[(0,q.jsx)(`p`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground font-medium`,children:s(`smashModal.modePickerLabel`)}),[`simple`,`full`].map(e=>{let t=On[e],n=c===e;return(0,q.jsx)(`button`,{type:`button`,onClick:()=>l(e),disabled:i,className:`w-full text-left rounded-lg border px-3 py-3 transition-colors ${n?`border-accent-highlight/60 bg-accent-highlight/10`:`border-border/40 bg-card/40 hover:bg-card/60 hover:border-border/60`}`,"data-testid":`smash-mode-${e}`,children:(0,q.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,q.jsx)(`div`,{className:`mt-0.5 h-3.5 w-3.5 rounded-full border-2 shrink-0 ${n?`border-accent-highlight bg-accent-highlight`:`border-muted-foreground/60`}`,"aria-hidden":!0}),(0,q.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mb-1`,children:[(0,q.jsxs)(`span`,{className:`flex items-center gap-1.5 text-sm font-semibold text-foreground`,children:[e===`full`&&(0,q.jsx)(de,{className:`w-3.5 h-3.5 text-accent-highlight`,"aria-hidden":!0}),s(t.titleKey)]}),(0,q.jsx)(`span`,{className:`text-[10px] text-muted-foreground tabular-nums`,children:s(t.etaKey)})]}),(0,q.jsx)(`ul`,{className:`space-y-0.5`,children:t.bulletKeys.map(e=>(0,q.jsxs)(`li`,{className:`text-[11px] text-foreground/70 leading-snug`,children:[`• `,s(e)]},e))})]})]})},e)})]}),(0,q.jsxs)(`div`,{className:`flex items-center justify-end gap-2 px-5 py-3 border-t border-border/30 bg-surface/20`,children:[(0,q.jsx)(F,{variant:`ghost`,size:`sm`,onClick:a,disabled:i,children:s(`common:actions.cancel`)}),(0,q.jsxs)(F,{size:`sm`,onClick:()=>o(c),disabled:i,"data-testid":`smash-confirm-modal-continue`,children:[(0,q.jsx)(H,{className:`w-3.5 h-3.5 mr-1.5`}),s(i?`smashModal.starting`:n?`smashModal.confirmReSmash`:`smashModal.smash`)]})]})]}),(0,q.jsx)(ve,{handles:h})]}):null}var An=`## Contract Layer`;function jn(e,t){return!(!t||e.status===`draft`||e.parent_epic_id!=null||!e.description?.includes(An))}function Mn({ticket:e,projectId:t,provider:n,featureFlagOn:r,childrenCount:i}){let{t:a}=p(`activity`),o=Cn(e.id),[s,c]=(0,W.useState)(!1),[l,u]=(0,W.useState)(!1),[d,f]=(0,W.useState)(e.origin_conversation_id?void 0:null);(0,W.useEffect)(()=>{let r=e.origin_conversation_id;if(!r){f(null);return}let i=!1;return f(void 0),fetch(`${j}/api/projects/${t}/chat/conversations/${encodeURIComponent(r)}`).then(async e=>{if(!e.ok)throw Error(`origin conversation lookup failed (${e.status})`);let t=await e.json();i||f(t.conversation?.provider??n??null)}).catch(()=>{i||f(null)}),()=>{i=!0}},[t,n,e.origin_conversation_id]);let m=e.origin_conversation_id?d:n,g=r&&be(m),_=e.is_epic===!0,v=!_&&jn(e,g),y=_&&g,b=_&&i>0,x=(0,W.useCallback)(async n=>{if(g){u(!0);try{let r=await fetch(`${j}/api/projects/${t}/tickets/${e.id}/smash`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({mode:n})});if(!r.ok){let e=await r.json().catch(()=>({}));h.error(e.reason?a(`smash.couldNotStartWithReason`,{reason:e.reason}):a(`smash.couldNotStart`));return}c(!1)}catch(e){h.error(a(`smash.smashFailed`,{message:e.message}))}finally{u(!1)}}},[t,e.id,a,g]),S=(0,W.useCallback)(async n=>{if(g){if(b){u(!0);try{if(!(await fetch(`${j}/api/projects/${t}/tickets/${e.id}/children`,{method:`DELETE`})).ok){h.error(a(`smash.couldNotDeleteChildren`)),u(!1);return}}catch(e){h.error(a(`smash.deleteFailed`,{message:e.message})),u(!1);return}}await x(n)}},[b,x,t,e.id,a,g]);return!v&&!y?null:o?(0,q.jsx)(`div`,{className:`flex flex-col gap-2`,"data-testid":`smash-actions-streaming`,children:(0,q.jsx)(Dn,{stage:o.stage})}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(F,{size:`sm`,variant:`outline`,onClick:()=>c(!0),className:`border-accent-highlight/40 text-accent-highlight hover:bg-accent-highlight/10`,"data-testid":y?`resmash-button`:`smash-button`,children:[(0,q.jsx)(H,{className:`w-3.5 h-3.5 mr-1.5`}),a(y?`smash.reSmashButton`:`smash.smashButton`)]}),(0,q.jsx)(kn,{open:s,ticketTitle:e.title,isReSmash:b,childrenCount:i,submitting:l,onCancel:()=>c(!1),onConfirm:S})]})}function Nn({epic:e,childExecutionOrder:t,totalChildren:n,onOpenEpic:r}){let{t:i}=p(`activity`);return(0,q.jsxs)(`div`,{className:`flex items-center gap-2 rounded-md border border-accent-secondary/30 bg-accent-secondary/10 px-3 py-1.5 text-xs`,"data-testid":`epic-breadcrumb`,children:[(0,q.jsxs)(`button`,{type:`button`,onClick:r,className:`text-accent-secondary hover:underline font-medium`,children:[`← `,e.title]}),t!=null&&n>0&&(0,q.jsx)(`span`,{className:`text-foreground/60`,children:i(`epicChildren.step`,{order:t,total:n})})]})}var Pn={critical:`bg-red-400`,high:`bg-orange-400`,medium:`bg-yellow-400`,low:`bg-slate-400`};function Fn(e){return e?Pn[e]:`bg-muted`}function In(e){return[...e].sort((e,t)=>{let n=e.execution_order??1/0,r=t.execution_order??1/0;return n===r?e.id-t.id:n-r})}function Ln({ticket:e,allTickets:t,onOpenTicket:n}){let{t:r}=p(`activity`),i=e.is_epic===!0,a=e.parent_epic_id!=null;if(!i&&!a)return null;if(i){let i=In(t.filter(t=>t.parent_epic_id===e.id));return(0,q.jsx)(Rn,{header:r(`family.subSpecsHeader`,{count:i.length}),rows:i,currentId:e.id,onOpenTicket:n,emptyMessage:r(`family.emptySubSpecs`)})}let o=t.find(t=>t.id===e.parent_epic_id)??null,s=In(t.filter(t=>t.parent_epic_id===e.parent_epic_id)),c=o?[o,...s]:s;return(0,q.jsx)(Rn,{header:r(`family.familyHeader`,{count:s.length}),rows:c,currentId:e.id,onOpenTicket:n,emptyMessage:r(`family.noSiblings`)})}function Rn({header:e,rows:t,currentId:n,onOpenTicket:r,emptyMessage:i}){let{t:a}=p(`activity`);return(0,q.jsxs)(`div`,{"data-testid":`epic-family-sidebar`,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-1.5 mb-1.5`,children:[(0,q.jsx)(H,{className:`w-3 h-3 text-accent-highlight`,"aria-hidden":!0}),(0,q.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider`,children:e})]}),t.length===0?(0,q.jsx)(`p`,{className:`text-[10px] text-foreground/50 italic`,children:i}):(0,q.jsx)(`ul`,{className:`flex flex-col gap-0.5`,children:t.map(e=>{let t=e.id===n,i=e.is_epic===!0;return(0,q.jsx)(`li`,{children:(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{t||r(e.id)},disabled:t,"aria-label":a(i?`family.openParentEpic`:`family.openSubSpec`,{title:e.title}),"aria-current":t?`page`:void 0,className:[`w-full flex items-center gap-1.5 rounded px-1.5 py-1 text-left transition-colors`,t?`bg-accent-highlight/15 cursor-default`:`hover:bg-muted/30 cursor-pointer`].join(` `),"data-testid":`epic-family-row-${e.id}`,children:[i?(0,q.jsx)(E,{className:`w-3 h-3 text-accent-highlight flex-shrink-0`,"aria-hidden":!0}):(0,q.jsx)(`span`,{className:`text-[9px] tabular-nums text-foreground/40 w-3 text-center flex-shrink-0`,children:e.execution_order??`–`}),(0,q.jsx)(`span`,{className:`inline-block w-1.5 h-1.5 rounded-full flex-shrink-0 ${Fn(e.priority)}`,"aria-hidden":!0}),(0,q.jsx)(`span`,{className:`text-[11px] truncate ${t?`text-foreground font-medium`:`text-foreground/80`}`,title:e.title,children:e.title})]})},e.id)})})]})}var zn=900,Bn=.2,Vn=[{value:`critical`,labelKey:`priority.critical`,className:`text-red-400`},{value:`high`,labelKey:`priority.high`,className:`text-orange-400`},{value:`medium`,labelKey:`priority.medium`,className:`text-yellow-400`},{value:`low`,labelKey:`priority.low`,className:`text-slate-400`}];function Hn(e){return e.jira_epic_key&&e.jira_url?e.jira_url.replace(/\/browse\/[^/]+$/,`/browse/${e.jira_epic_key}`):null}var Un={manual:`source.manual`,"product-backlog":`source.productBacklog`,"propose-spec":`source.proposeSpec`,"get-backlog-specs":`source.getBacklogSpecs`,"free-prompt":`source.freePrompt`};function Wn({ticket:e,allLabels:t,allTickets:n,onClose:r,onOpenTicket:i,onSave:a,onDelete:o,rails:s,onMoveToRail:c,onRemoveFromRail:l,embedded:u=!1}){let{t:d}=p(`tickets`),{t:m}=p(`jira`),{activeProjectId:g,projects:_}=P(),{enterSplit:y,state:b}=on(),x=b.originSide!==null,S=_.find(e=>e.id===g)?.provider,C=be(S),w=(0,W.useMemo)(()=>(n??[]).filter(t=>t.parent_epic_id===e.id),[n,e.id]),T=(0,W.useMemo)(()=>e.parent_epic_id==null?null:(n??[]).find(t=>t.id===e.parent_epic_id)??null,[n,e.parent_epic_id]),E=(0,W.useMemo)(()=>T?(n??[]).filter(e=>e.parent_epic_id===T.id).length:0,[n,T]),[D,ne]=(0,W.useState)(e.title),[O,re]=(0,W.useState)(e.description),[k,ce]=(0,W.useState)(e.priority??`medium`),[A,de]=(0,W.useState)([...e.labels??[]]),[j,M]=(0,W.useState)(!1),[N,I]=(0,W.useState)(!1),[L,R]=(0,W.useState)(``),[xe,z]=(0,W.useState)(!1),[Se,B]=(0,W.useState)(!1),[Ce,Te]=(0,W.useState)(!1),[Ee,V]=(0,W.useState)(!1),[De,Oe]=(0,W.useState)(!1),[H,ke]=(0,W.useState)(!1),U=Qe(),Ae=U.connected&&!!U.discardStatus&&e.source===`jira`&&!!e.jira_key,je=U.connected&&e.source===`jira`&&!!e.jira_key,[Me,Ne]=(0,W.useState)(e.attachments??[]);(0,W.useEffect)(()=>{Ne(e.attachments??[])},[e.attachments,e.id]);let Pe=(0,W.useRef)(null),Fe=(0,W.useRef)(null),G=(0,W.useRef)(null),Ie=(0,W.useMemo)(()=>D!==e.title||O!==e.description||k!==e.priority||JSON.stringify(A)!==JSON.stringify(e.labels),[D,O,k,A,e]);(0,W.useEffect)(()=>{j&&Pe.current?.focus()},[j]),(0,W.useEffect)(()=>{if(N){let e=Fe.current;e&&(e.focus(),e.selectionStart=e.value.length)}},[N]),(0,W.useEffect)(()=>{xe&&G.current?.focus()},[xe]),(0,W.useEffect)(()=>{function e(e){e.key===`Escape`&&!j&&!N&&!Se&&r()}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[r,j,N,Se]);let Le=(0,W.useMemo)(()=>{if(!L.trim())return[];let e=L.toLowerCase();return t.filter(t=>t.toLowerCase().includes(e)&&!A.includes(t)).slice(0,5)},[L,t,A]),K=(0,W.useCallback)(e=>{let t=e.trim();t&&!A.includes(t)&&de(e=>[...e,t]),R(``)},[A]),Re=(0,W.useCallback)(e=>{de(t=>t.filter(t=>t!==e))},[]),ze=(0,W.useCallback)(async()=>{let t={};if(D!==e.title&&(t.title=D),O!==e.description&&(t.description=O),k!==e.priority&&(t.priority=k),JSON.stringify(A)!==JSON.stringify(e.labels)&&(t.labels=A),Object.keys(t).length===0){r();return}Oe(!0);let n=await a(e.id,t);Oe(!1),n?(h.success(d(`detailModal.toast.updated`)),r()):h.error(d(`detailModal.toast.updateFailed`))},[D,O,k,A,e,a,r,d]),Be=(0,W.useCallback)(async()=>{if(H)return;ke(!0);let t=!1;try{t=await o(e.id)}catch{t=!1}if(ke(!1),!t){h.error(d(`detailModal.toast.deleteFailed`));return}B(!1),r()},[H,e.id,o,r,d]),[Ve,He]=(0,W.useState)(0),J=(0,W.useRef)(null),[Ue,We]=(0,W.useState)(()=>typeof window<`u`&&window.innerWidth>=zn);(0,W.useEffect)(()=>{if(typeof window>`u`)return;let e=()=>We(window.innerWidth>=zn);return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]);let Y=!u&&!x&&Ue,X=(0,W.useCallback)(e=>{J.current&&He(e.clientX-J.current.startX)},[]),Z=(0,W.useCallback)(t=>{if(!J.current)return;let n=t.clientX-J.current.startX,i=window.innerWidth*Bn;if(window.removeEventListener(`pointermove`,X),window.removeEventListener(`pointerup`,Z),window.removeEventListener(`pointercancel`,Z),J.current=null,He(0),Math.abs(n)>=i&&window.innerWidth>=zn){let t=b.leftId===e.id;y(n<0?`left`:`right`,e.id),t||r()}},[y,X,b.leftId,e.id,r]),Ge=(0,W.useCallback)(e=>{Y&&e.button===0&&(e.target.closest(`button, input, textarea, select, [contenteditable="true"]`)||(J.current={startX:e.clientX,pointerId:e.pointerId},window.addEventListener(`pointermove`,X),window.addEventListener(`pointerup`,Z),window.addEventListener(`pointercancel`,Z)))},[Y,X,Z]);(0,W.useEffect)(()=>()=>{J.current&&(window.removeEventListener(`pointermove`,X),window.removeEventListener(`pointerup`,Z),window.removeEventListener(`pointercancel`,Z))},[X,Z]);let Ke=(0,W.useCallback)(()=>{if(!Y||window.innerWidth<zn)return;let t=b.leftId===e.id;y(`right`,e.id),t||r()},[Y,y,b.leftId,e.id,r]),{panelRef:qe,panelStyle:Je,resizeHandles:Ye,guardBackdrop:Xe}=pe({enabled:!u,allowMove:!1}),Ze=(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{ref:qe,className:u?`relative w-full h-full rounded-xl bg-card border border-border/40 shadow-2xl shadow-black/50 flex flex-col overflow-hidden`:`relative w-full max-w-[67rem] m-4 rounded-xl bg-card border border-border/40 shadow-2xl shadow-black/50 flex flex-col animate-in fade-in zoom-in-95 duration-200 h-[90vh]`,style:{...Ve===0?{transition:`transform 220ms cubic-bezier(0.34, 1.56, 0.64, 1)`}:{transform:`translateX(${Ve}px)`,transition:`none`},...Je},children:[T&&(0,q.jsx)(`div`,{className:`px-5 pt-3`,children:(0,q.jsx)(Nn,{epic:T,childExecutionOrder:e.execution_order??null,totalChildren:E,onOpenEpic:()=>i?.(T.id)})}),(0,q.jsxs)(`div`,{className:`flex items-start justify-between gap-3 px-5 py-4 border-b border-border/30 ${Y?`cursor-grab active:cursor-grabbing`:``}`,onPointerDown:Ge,"data-testid":`ticket-modal-header`,children:[(0,q.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[j?(0,q.jsx)(`input`,{ref:Pe,value:D,onChange:e=>ne(e.target.value),onBlur:()=>M(!1),onKeyDown:t=>{t.key===`Enter`&&M(!1),t.key===`Escape`&&(ne(e.title),M(!1))},className:`w-full bg-transparent border-b border-accent-primary/50 text-sm font-semibold text-foreground outline-none pb-0.5`}):(0,q.jsxs)(`button`,{type:`button`,onClick:()=>M(!0),className:`group flex items-center gap-1.5 text-left w-full`,children:[(0,q.jsx)(`h2`,{className:`text-sm font-semibold text-foreground truncate`,children:D||d(`untitled`)}),(0,q.jsx)(ae,{className:`w-3 h-3 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity shrink-0`})]}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2 mt-1.5`,children:[(0,q.jsxs)(`span`,{className:`text-[10px] text-foreground font-mono`,children:[`#`,e.id]}),e.status===`on_review`&&(0,q.jsx)(`span`,{title:d(`specs:status.onReviewHint`),"data-testid":`ticket-modal-on-review-badge`,children:(0,q.jsx)(nt,{status:`on_review`})})]}),(0,q.jsx)(ln,{ticketId:e.id})]}),g&&(0,q.jsx)(`div`,{className:`shrink-0`,children:(0,q.jsx)(Mn,{ticket:e,projectId:g,provider:S,featureFlagOn:C,childrenCount:w.length})}),(0,q.jsx)(Kn,{ticket:e,title:D,description:O,priority:k,labels:A,onClose:r}),s&&(c||l)&&(0,q.jsx)(qn,{ticket:e,rails:s,onMoveToRail:c,onRemoveFromRail:l}),Y&&(0,q.jsxs)(F,{variant:`outline`,size:`sm`,className:`shrink-0 mr-1 gap-1.5`,"data-testid":`ticket-modal-compare`,onClick:Ke,title:d(`detailModal.compareTooltip`),children:[(0,q.jsx)(we,{className:`w-3.5 h-3.5`}),d(`detailModal.compare`)]}),(0,q.jsx)(`button`,{onClick:r,className:`h-7 w-7 flex items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-surface/50 transition-colors cursor-pointer shrink-0`,"data-testid":`ticket-modal-close`,children:(0,q.jsx)(ue,{className:`w-4 h-4`})})]}),(0,q.jsx)(`div`,{className:`flex-1 overflow-y-auto min-h-0`,children:(0,q.jsxs)(`div`,{className:`flex flex-col sm:flex-row h-full`,children:[(0,q.jsxs)(`div`,{className:`flex-1 min-w-0 px-5 py-4 space-y-4 flex flex-col`,children:[(0,q.jsxs)(`div`,{className:`flex-1 flex flex-col`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between mb-1.5`,children:[(0,q.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider flex items-center gap-1.5`,children:d(`fields.description`)}),!N&&(0,q.jsxs)(`button`,{type:`button`,onClick:()=>I(!0),className:`text-[10px] text-muted-foreground hover:text-foreground transition-colors flex items-center gap-1`,children:[(0,q.jsx)(ae,{className:`w-2.5 h-2.5`}),d(`common:actions.edit`)]})]}),N?(0,q.jsxs)(`div`,{className:`space-y-1.5 flex-1 flex flex-col`,children:[(0,q.jsx)(`textarea`,{ref:Fe,value:O,onChange:e=>re(e.target.value),className:`w-full flex-1 rounded-lg border border-border bg-input px-3 py-2 text-xs text-foreground placeholder:text-muted-foreground resize-none min-h-[300px]`,placeholder:d(`fields.markdownPlaceholder`)}),(0,q.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,q.jsx)(F,{variant:`ghost`,size:`sm`,className:`h-6 text-[10px]`,onClick:()=>I(!1),children:d(`detailModal.doneEditing`)}),(0,q.jsx)(`span`,{className:`text-[9px] text-muted-foreground`,children:d(`fields.supportsMarkdown`)})]})]}):O?(0,q.jsx)(Zn,{description:O,onEdit:()=>I(!0)}):(0,q.jsx)(`button`,{type:`button`,onClick:()=>I(!0),className:`w-full rounded-lg border border-dashed border-border/40 bg-muted/10 px-3 py-4 text-xs text-muted-foreground hover:text-foreground hover:bg-muted/20 transition-colors text-center`,children:d(`detailModal.addDescription`)})]}),(0,q.jsx)(Ht,{ticketKey:e.id,attachments:Me,onChange:Ne}),(0,q.jsx)(Ut,{ticketId:e.id,onClose:r}),e.prerequisites&&e.prerequisites.length>0&&(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:d(`detailModal.prerequisites`)}),(0,q.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:e.prerequisites.map(e=>(0,q.jsxs)(`span`,{className:`inline-flex items-center rounded px-1.5 py-0.5 text-[10px] font-mono bg-accent/60 text-foreground/70`,children:[`#`,e]},e))})]})]}),(0,q.jsxs)(`div`,{className:`sm:w-56 sm:border-l border-t sm:border-t-0 border-border/30 px-4 py-4 space-y-4 bg-muted/5`,children:[e.jira_url&&e.jira_key&&(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{Q(e.jira_url)},"data-testid":`jira-go-to-ticket`,className:`w-full inline-flex items-center justify-center gap-1.5 h-7 rounded border border-accent-info/50 bg-accent-info/10 px-2 text-xs font-medium text-accent-info hover:bg-accent-info/20 transition-colors`,children:[(0,q.jsx)(ee,{className:`w-3.5 h-3.5 shrink-0`}),m(`detail.goToTicket`,{key:e.jira_key})]}),e.jira_epic_key&&(0,q.jsxs)(`div`,{"data-testid":`jira-epic`,children:[(0,q.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:m(`detail.epic`)}),(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{let t=Hn(e);t&&Q(t)},title:e.jira_epic_name??e.jira_epic_key,className:`w-full inline-flex items-center gap-1.5 rounded border border-accent-highlight/40 bg-accent-highlight/5 px-2 py-1.5 text-left text-xs hover:bg-accent-highlight/10 transition-colors`,children:[(0,q.jsx)(`span`,{className:`font-mono text-accent-highlight shrink-0`,children:e.jira_epic_key}),e.jira_epic_name&&(0,q.jsx)(`span`,{className:`truncate text-foreground/80`,children:e.jira_epic_name})]})]}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:d(`fields.priority`)}),(0,q.jsx)(`select`,{value:k,onChange:e=>ce(e.target.value),className:`w-full h-7 rounded border border-border bg-input px-2 text-xs text-foreground`,children:Vn.map(e=>(0,q.jsx)(`option`,{value:e.value,children:d(e.labelKey)},e.value))})]}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:d(`fields.labels`)}),(0,q.jsx)(`div`,{className:`flex flex-wrap gap-1 mb-1.5`,children:A.map(e=>(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-0.5 rounded px-1.5 py-0.5 text-[10px] font-medium bg-accent/60 text-foreground/70 group`,children:[e,(0,q.jsx)(`button`,{type:`button`,onClick:()=>Re(e),className:`text-muted-foreground hover:text-foreground opacity-0 group-hover:opacity-100 transition-opacity`,children:(0,q.jsx)(te,{className:`w-2.5 h-2.5`})})]},e))}),xe?(0,q.jsxs)(`div`,{className:`relative`,children:[(0,q.jsx)(`input`,{ref:G,value:L,onChange:e=>R(e.target.value),onKeyDown:e=>{e.key===`Enter`&&L.trim()&&(e.preventDefault(),K(L)),e.key===`Escape`&&(z(!1),R(``))},onBlur:()=>{L.trim()&&K(L),z(!1),R(``)},placeholder:d(`detailModal.addLabelPlaceholder`),className:`w-full h-6 rounded border border-border bg-input px-2 text-[10px] text-foreground placeholder:text-muted-foreground`}),Le.length>0&&(0,q.jsx)(`div`,{className:`absolute left-0 right-0 top-full mt-0.5 rounded border border-border/50 bg-popover shadow-lg z-10 py-0.5`,children:Le.map(e=>(0,q.jsx)(`button`,{type:`button`,onMouseDown:t=>{t.preventDefault(),K(e)},className:`w-full text-left px-2 py-1 text-[10px] hover:bg-accent/50 text-foreground/80`,children:e},e))})]}):(0,q.jsxs)(`button`,{type:`button`,onClick:()=>z(!0),className:`flex items-center gap-1 text-[10px] text-muted-foreground hover:text-foreground transition-colors`,children:[(0,q.jsx)(oe,{className:`w-2.5 h-2.5`}),d(`detailModal.addLabel`)]})]}),(0,q.jsx)(Ln,{ticket:e,allTickets:n??[],onOpenTicket:e=>i?.(e)}),e.source===`jira`&&e.jira_key&&(0,q.jsx)(fn,{localId:e.id}),e.metadata?.effort_level&&(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-0.5`,children:d(`detailModal.effort`)}),(0,q.jsx)(`span`,{className:`text-xs text-foreground/70`,children:e.metadata.effort_level})]}),e.assignee&&(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-0.5`,children:d(`detailModal.assignee`)}),(0,q.jsx)(`span`,{className:`text-xs text-foreground/70`,children:e.assignee})]})]})]})}),(0,q.jsxs)(`div`,{className:`flex items-center justify-between px-5 py-3 border-t border-border/30`,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-3 text-[10px] text-muted-foreground`,children:[(0,q.jsx)(`span`,{children:d(`meta.createdAgo`,{time:Gn(e.created_at)})}),(0,q.jsx)(`span`,{children:d(`meta.updatedAgo`,{time:Gn(e.updated_at)})}),e.source&&(0,q.jsx)(`span`,{className:`bg-muted/30 rounded px-1.5 py-0.5`,children:Un[e.source]?d(Un[e.source]):e.source})]}),(0,q.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[Ae?(0,q.jsxs)(F,{variant:`ghost`,size:`sm`,className:`h-7 text-xs text-accent-info hover:bg-accent-info/10`,onClick:()=>Te(!0),"data-testid":`jira-move-to-button`,children:[(0,q.jsx)(v,{className:`w-3 h-3 mr-1`}),m(`discard.moveButton`,{status:U.discardStatus})]}):(0,q.jsxs)(F,{variant:`ghost`,size:`sm`,className:`h-7 text-xs text-red-400 aurora-light:text-destructive hover:text-red-300 aurora-light:hover:text-destructive hover:bg-red-500/10 aurora-light:hover:bg-destructive/10`,onClick:()=>B(!0),children:[(0,q.jsx)(le,{className:`w-3 h-3 mr-1`}),d(`common:actions.delete`)]}),Ie&&(0,q.jsxs)(F,{size:`sm`,className:`h-7 text-xs`,onClick:()=>{je?V(!0):ze()},disabled:De||!D.trim(),children:[(0,q.jsx)(se,{className:`w-3 h-3 mr-1`}),d(De?`common:states.saving`:`common:actions.save`)]})]})]})]}),(0,q.jsx)(ye,{open:Se,onOpenChange:e=>{H||B(e)},children:(0,q.jsxs)(he,{className:`max-w-sm`,children:[(0,q.jsxs)(fe,{children:[(0,q.jsx)(ge,{children:d(`deleteDialog.title`)}),(0,q.jsx)(_e,{children:(0,q.jsx)(f,{t:d,i18nKey:`deleteDialog.body`,values:{id:e.id,title:e.title},components:{strong:(0,q.jsx)(`span`,{className:`font-semibold text-foreground`})}})})]}),(0,q.jsxs)(me,{children:[(0,q.jsx)(F,{variant:`outline`,size:`sm`,onClick:()=>B(!1),disabled:H,children:d(`common:actions.cancel`)}),(0,q.jsxs)(F,{variant:`destructive`,size:`sm`,onClick:()=>{Be()},disabled:H,"aria-busy":H,children:[H?(0,q.jsx)(ie,{className:`w-3.5 h-3.5 mr-1.5 animate-spin`}):(0,q.jsx)(le,{className:`w-3.5 h-3.5 mr-1.5`}),d(`common:actions.delete`)]})]})]})}),Ae&&U.discardStatus&&(0,q.jsx)($e,{open:Ce,onOpenChange:Te,ticket:{id:e.id,title:e.title,jira_key:e.jira_key},discardStatus:U.discardStatus,onDiscarded:r}),(0,q.jsx)(ye,{open:Ee,onOpenChange:V,children:(0,q.jsxs)(he,{className:`max-w-md`,"data-testid":`jira-save-confirm`,children:[(0,q.jsxs)(fe,{children:[(0,q.jsx)(ge,{children:m(`detail.saveTitle`)}),(0,q.jsx)(_e,{children:m(`detail.saveBody`,{key:e.jira_key??`#${e.id}`})})]}),(0,q.jsxs)(me,{children:[(0,q.jsx)(F,{variant:`outline`,size:`sm`,onClick:()=>V(!1),children:d(`common:actions.cancel`)}),(0,q.jsxs)(F,{size:`sm`,onClick:()=>{V(!1),ze()},disabled:De,"data-testid":`jira-save-confirm-btn`,children:[(0,q.jsx)(se,{className:`w-3.5 h-3.5 mr-1.5`}),m(`detail.saveConfirm`)]})]})]})})]});return u?Ze:(0,q.jsxs)(`div`,{className:`fixed inset-0 z-[68] flex items-center justify-center`,children:[(0,q.jsx)(`div`,{className:`absolute inset-0 bg-black/70`,onClick:Xe(r)}),Ze,(0,q.jsx)(ve,{handles:Ye})]})}function Gn(e){try{return z(new Date(e),{addSuffix:!0,locale:s()})}catch{return e}}function Kn({ticket:e,title:t,description:n,priority:r,labels:i,onClose:a}){let{t:o}=p(`tickets`),{triggerResume:s}=T(),{activeProjectId:c}=P(),{closeTicketDetail:l}=on();return We(e)?(0,q.jsxs)(F,{variant:`default`,size:`sm`,onClick:()=>{if(!c)return;let{body:u,criteria:d}=J(n);s({kind:`explore-spec`,projectId:c,label:t||e.title||o(`detailModal.ticketFallbackLabel`,{id:e.id}),restoreRoute:`/`,params:{initialIdea:``,pendingSpecId:Y(),initialAttachmentIds:[],resumeConversationId:e.origin_conversation_id??void 0,editTicket:{id:e.id,title:t,description:u,labels:i,priority:r,acceptanceCriteria:d,status:e.status}}}),l(),a()},className:`shrink-0 mr-2`,"data-testid":`continue-editing`,children:[(0,q.jsx)(Oe,{className:`w-3.5 h-3.5 mr-1.5`}),o(`detailModal.continueEditing`)]}):null}function qn({ticket:e,rails:t,onMoveToRail:n,onRemoveFromRail:r}){let{t:i}=p(`tickets`),[a,o]=(0,W.useState)(null),s=(0,W.useRef)(null),c=t.find(t=>t.ticketIds.includes(e.id));return c?r?(0,q.jsxs)(F,{variant:`outline`,size:`sm`,className:`shrink-0 mr-2 gap-1.5 border-accent-warning/30 text-accent-warning hover:bg-accent-warning/10 hover:text-accent-warning`,"data-testid":`modal-remove-from-rail`,onClick:()=>r(e.id),title:i(`rail.currentlyOn`,{rail:c.label}),children:[(0,q.jsx)(g,{className:`w-3.5 h-3.5`,"aria-hidden":!0}),i(`rail.removeFromRail`)]}):null:n?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(F,{ref:s,variant:`outline`,size:`sm`,className:`shrink-0 mr-2 gap-1.5 border-accent-info/30 text-accent-info hover:bg-accent-info/10 hover:text-accent-info`,"data-testid":`modal-move-to-rail`,onClick:()=>{s.current&&o(s.current.getBoundingClientRect())},children:[i(`rail.moveToRail`),(0,q.jsx)(v,{className:`w-3.5 h-3.5`,"aria-hidden":!0})]}),a&&(0,q.jsx)(Ve,{rails:t,anchorRect:a,onMoveToRail:t=>n(e.id,t),onClose:()=>o(null)})]}):null}var Jn=`
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,t}from"./rolldown-runtime-CNC7AqOf.js";import{n}from"./jsx-runtime-zu2_FqZY.js";import{S as r}from"./i18n-
|
|
1
|
+
import{a as e,t}from"./rolldown-runtime-CNC7AqOf.js";import{n}from"./jsx-runtime-zu2_FqZY.js";import{S as r}from"./i18n-B2SaZsf2.js";import{a as i,d as a,f as o,i as s,l as c,p as l,s as u,u as d}from"./createLucideIcon-Bjbbp_KS.js";var f=t(((e,t)=>{t.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}})),p=e(n()),m=e(f()),h=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function g(e){var t={type:`tag`,name:``,voidElement:!1,attrs:{},children:[]},n=e.match(/<\/?([^\s]+?)[/\s>]/);if(n&&(t.name=n[1],(m.default[n[1]]||e.charAt(e.length-2)===`/`)&&(t.voidElement=!0),t.name.startsWith(`!--`))){var r=e.indexOf(`-->`);return{type:`comment`,comment:r===-1?``:e.slice(4,r)}}for(var i=new RegExp(h),a=null;(a=i.exec(e))!==null;)if(a[0].trim())if(a[1]){var o=a[1].trim(),s=[o,``];o.indexOf(`=`)>-1&&(s=o.split(`=`)),t.attrs[s[0]]=s[1],i.lastIndex--}else a[2]&&(t.attrs[a[2]]=a[3].trim().substring(1,a[3].length-1));return t}var _=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,v=/^\s*$/,y=Object.create(null);function b(e,t){switch(t.type){case`text`:return e+t.content;case`tag`:return e+=`<`+t.name+(t.attrs?function(e){var t=[];for(var n in e)t.push(n+`="`+e[n]+`"`);return t.length?` `+t.join(` `):``}(t.attrs):``)+(t.voidElement?`/>`:`>`),t.voidElement?e:e+t.children.reduce(b,``)+`</`+t.name+`>`;case`comment`:return e+`<!--`+t.comment+`-->`}}var x={parse:function(e,t){t||={},t.components||=y;var n,r=[],i=[],a=-1,o=!1;if(e.indexOf(`<`)!==0){var s=e.indexOf(`<`);r.push({type:`text`,content:s===-1?e:e.substring(0,s)})}return e.replace(_,function(s,c){if(o){if(s!==`</`+n.name+`>`)return;o=!1}var l,u=s.charAt(1)!==`/`,d=s.startsWith(`<!--`),f=c+s.length,p=e.charAt(f);if(d){var m=g(s);return a<0?(r.push(m),r):((l=i[a]).children.push(m),r)}if(u&&(a++,(n=g(s)).type===`tag`&&t.components[n.name]&&(n.type=`component`,o=!0),n.voidElement||o||!p||p===`<`||n.children.push({type:`text`,content:e.slice(f,e.indexOf(`<`,f))}),a===0&&r.push(n),(l=i[a-1])&&l.children.push(n),i[a]=n),(!u||n.voidElement)&&(a>-1&&(n.voidElement||n.name===s.slice(2,-1))&&(a--,n=a===-1?r:i[a]),!o&&p!==`<`&&p)){l=a===-1?r:i[a].children;var h=e.indexOf(`<`,f),_=e.slice(f,h===-1?void 0:h);v.test(_)&&(_=` `),(h>-1&&a+l.length>=0||_!==` `)&&l.push({type:`text`,content:_})}}),r},stringify:function(e){return e.reduce(function(e,t){return e+b(``,t)},``)}},S=(e,t)=>{if(!e)return!1;let n=e.props?.children??e.children;return t?n.length>0:!!n},C=e=>{if(!e)return[];let t=e.props?.children??e.children;return e.props?.i18nIsDynamicList?T(t):t},w=e=>Array.isArray(e)&&e.every(p.isValidElement),T=e=>Array.isArray(e)?e:[e],E=(e,t)=>{let n={...t};return n.props={...t.props,...e.props},n},D=e=>{let t={};if(!e)return t;let n=e=>{T(e).forEach(e=>{a(e)||(S(e)?n(C(e)):d(e)&&!(0,p.isValidElement)(e)&&Object.assign(t,e))})};return n(e),t},O=(e,t,n,r)=>{if(!e)return``;let i=``,s=T(e),c=t?.transSupportBasicHtmlNodes?t.transKeepBasicHtmlNodesFor??[]:[];return s.forEach((e,s)=>{if(a(e)){i+=`${e}`;return}if((0,p.isValidElement)(e)){let{props:o,type:l}=e,u=Object.keys(o).length,d=c.indexOf(l)>-1,f=o.children;if(!f&&d&&!u){i+=`<${l}/>`;return}if(!f&&(!d||u)||o.i18nIsDynamicList){i+=`<${s}></${s}>`;return}if(d&&u<=1){let e=a(f)?f:O(f,t,n,r);i+=`<${l}>${e}</${l}>`;return}let p=O(f,t,n,r);i+=`<${s}>${p}</${s}>`;return}if(e===null){o(n,`TRANS_NULL_VALUE`,`Passed in a null value as child`,{i18nKey:r});return}if(d(e)){let{format:t,...a}=e,s=Object.keys(a);if(s.length===1){let e=t?`${s[0]}, ${t}`:s[0];i+=`{{${e}}}`;return}o(n,`TRANS_INVALID_OBJ`,`Invalid child - Object should only have keys {{ value, format }} (format is optional).`,{i18nKey:r,child:e});return}o(n,`TRANS_INVALID_VAR`,`Passed in a variable like {number} - pass variables for interpolation as full objects like {{number}}.`,{i18nKey:r,child:e})}),i},k=(e,t=[],n={})=>{if(!e)return e;let r=Object.keys(n),i=[...t,...r],a=``,o=0;for(;o<e.length;)if(e[o]===`<`){let t=!1,n=e.slice(o).match(/^<\/(\d+|[a-zA-Z][a-zA-Z0-9_-]*)>/);if(n){let e=n[1];(/^\d+$/.test(e)||i.includes(e))&&(t=!0,a+=n[0],o+=n[0].length)}if(!t){let n=e.slice(o).match(/^<(\d+|[a-zA-Z][a-zA-Z0-9_-]*)(\s+[\w-]+(?:=(?:"[^"]*"|'[^']*'|[^\s>]+))?)*\s*(\/)?>/);if(n){let e=n[1];(/^\d+$/.test(e)||i.includes(e))&&(t=!0,a+=n[0],o+=n[0].length)}}t||(a+=`<`,o+=1)}else a+=e[o],o+=1;return a},A=(e,t,n,r,i,o,s)=>{if(n===``)return[];let l=i.transKeepBasicHtmlNodesFor||[],f=n&&new RegExp(l.map(e=>`<${e}`).join(`|`)).test(n);if(!e&&!t&&!f&&!s)return[n];let m=t??{},h=e=>{T(e).forEach(e=>{a(e)||(S(e)?h(C(e)):d(e)&&!(0,p.isValidElement)(e)&&Object.assign(m,e))})};h(e);let g=k(n,l,m),_=x.parse(`<0>${g}</0>`),v={...m,...o},y=(e,t,n)=>{let r=C(e),i=D(r,t.children,n);return w(r)&&i.length===0||e.props?.i18nIsDynamicList?r:i},b=(e,t,n,r,i)=>{e.dummy?(e.children=t,n.push((0,p.cloneElement)(e,{key:r},i?void 0:t))):n.push(...p.Children.map([e],e=>{if(e.type===p.Fragment||e.props?.i18nIsDynamicList!==void 0){let n={key:r};return e&&e.props&&Object.keys(e.props).forEach(t=>{t===`children`||t===`i18nIsDynamicList`||(n[t]=e.props[t])}),(0,p.createElement)(e.type,n,i?null:t)}let n={key:r};return e&&e.props&&Object.keys(e.props).forEach(t=>{t===`ref`||t===`children`||(n[t]=e.props[t])}),(0,p.cloneElement)(e,n,i?null:t)}))},D=(e,n,o)=>{let m=T(e),h=T(n),g={};return h.reduce((e,n,h)=>{let _=n.children?.[0]?.content&&r.services.interpolator.interpolate(n.children[0].content,v,r.language);if(n.type===`tag`){let u=m[parseInt(n.name,10)];!u&&t&&(u=t[n.name]),o.length===1&&!u&&(u=o[0][n.name]),u||={};let x={...n.attrs};s&&Object.keys(x).forEach(e=>{let t=x[e];a(t)&&(x[e]=c(t))});let w=Object.keys(x).length===0?u:E({props:x},u),O=(0,p.isValidElement)(w),k=O&&S(n,!0)&&!n.voidElement,A=f&&d(w)&&w.dummy&&!O,j=d(t)&&Object.hasOwnProperty.call(t,n.name);if(a(w)){let t=r.services.interpolator.interpolate(w,v,r.language);e.push(t)}else if(S(w)||k){let t=y(w,n,o);b(w,t,e,h)}else if(A){let t=D(m,n.children,o);b(w,t,e,h)}else if(Number.isNaN(parseFloat(n.name)))if(j){let t=y(w,n,o);b(w,t,e,h,n.voidElement)}else if(i.transSupportBasicHtmlNodes&&l.indexOf(n.name)>-1)if(n.voidElement)e.push((0,p.createElement)(n.name,{key:`${n.name}-${h}`}));else{let t=g[n.name]||0;g[n.name]=t+1;let r,i=0;for(let e=0;e<m.length;e+=1){let a=m[e];if((0,p.isValidElement)(a)&&a.type===n.name){if(i===t){r=a;break}i+=1}}let a=r?T(C(r)):m,s=D(a,n.children,o);e.push((0,p.createElement)(n.name,{key:`${n.name}-${h}`},s))}else if(n.voidElement)e.push(`<${n.name} />`);else{let t=D(m,n.children,o);e.push(`<${n.name}>${t}</${n.name}>`)}else if(d(w)&&!O){let t=n.children[0]?_:null;t&&e.push(t)}else b(w,_,e,h,n.children.length!==1||!_)}else if(n.type===`text`){let t=i.transWrapTextNodes,a=typeof i.unescape==`function`?i.unescape:u().unescape,o=s?a(r.services.interpolator.interpolate(n.content,v,r.language)):r.services.interpolator.interpolate(n.content,v,r.language);t?e.push((0,p.createElement)(t,{key:`${n.name}-${h}`},o)):e.push(o)}return e},[])};return C(D([{dummy:!0,children:e||[]}],_,T(e||[]))[0])},j=(e,t,n)=>{let r=e.key||t,i=(0,p.cloneElement)(e,{key:r});if(!i.props||!i.props.children||n.indexOf(`${t}/>`)<0&&n.indexOf(`${t} />`)<0)return i;function a(){return(0,p.createElement)(p.Fragment,null,i)}return(0,p.createElement)(a,{key:r})},M=(e,t)=>e.map((e,n)=>j(e,n,t)),N=(e,t)=>{let n={};return Object.keys(e).forEach(r=>{Object.assign(n,{[r]:j(e[r],r,t)})}),n},P=(e,t,n,r)=>e?Array.isArray(e)?M(e,t):d(e)?N(e,t):(l(n,`TRANS_INVALID_COMPONENTS`,`<Trans /> "components" prop expects an object or array`,{i18nKey:r}),null):null,F=e=>!d(e)||Array.isArray(e)?!1:Object.keys(e).reduce((e,t)=>e&&Number.isNaN(Number.parseFloat(t)),!0);function I({children:e,count:t,parent:n,i18nKey:o,context:s,tOptions:c={},values:d,defaults:f,components:m,ns:h,i18n:g,t:_,shouldUnescape:v,...y}){let b=g||i();if(!b)return l(b,`NO_I18NEXT_INSTANCE`,`Trans: You need to pass in an i18next instance using i18nextReactModule`,{i18nKey:o}),e;let x=_||b.t.bind(b)||(e=>e),S={...u(),...b.options?.react},C=h||x.ns||b.options?.defaultNS;C=a(C)?[C]:C||[`translation`];let{transDefaultProps:w}=S,T=w?.tOptions?{...w.tOptions,...c}:c,E=v??w?.shouldUnescape,k=w?.values?{...w.values,...d}:d,j=w?.components?{...w.components,...m}:m,M=O(e,S,b,o),N=f||T?.defaultValue||M||S.transEmptyNodeValue||(typeof o==`function`?r(o):o),{hashTransKey:I}=S,L=o||(I?I(M||N):M||N);d=b.options?.interpolation?.defaultVariables?k&&Object.keys(k).length>0?{...k,...b.options.interpolation.defaultVariables}:{...b.options.interpolation.defaultVariables}:k;let R=D(e);R&&typeof R.count==`number`&&t===void 0&&(t=R.count);let z=d||t!==void 0&&!b.options?.interpolation?.alwaysFormat||!e?T.interpolation:{interpolation:{...T.interpolation,prefix:`#$?`,suffix:`?$#`}},B={...T,context:s||T.context,count:t,...d,...z,defaultValue:N,ns:C},V=L?x(L,B):N;V===L&&N&&(V=N);let H=P(j,V,b,o),U=H||e,W=null;F(H)&&(W=H,U=e);let G=A(U,W,V,b,S,B,E),K=n??S.defaultTransParent;return K?(0,p.createElement)(K,y,G):G}function L({children:e,count:t,parent:n,i18nKey:r,context:a,tOptions:o={},values:c,defaults:l,components:u,ns:d,i18n:f,t:m,shouldUnescape:h,...g}){let{i18n:_,defaultNS:v}=(0,p.useContext)(s)||{},y=f||_||i(),b=m||y?.t.bind(y);return I({children:e,count:t,parent:n,i18nKey:r,context:a,tOptions:o,values:c,defaults:l,components:u,ns:d||b?.ns||v||y?.options?.defaultNS,i18n:y,t:m,shouldUnescape:h,...g})}export{L as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={loadingAgent:`エージェントを読み込み中…`,modeCreate:`新規カスタムエージェント`,modeEdit:`カスタムエージェントを編集`,create:`作成`,unsaved:`● 未保存`,resumeAiEdit:`AI編集を再開`,resumeAiEditTitle:`このドラフトをAI編集オーバーレイに戻す`,loadingAiDraft:`AIドラフトを読み込み中…`,testButton:`テスト`,testButtonTitle:`サンプルタスクでこのエージェントをテスト`,historyButton:`履歴`,historyButtonTitle:`バージョン履歴`,deleteConfirm:{title:`エージェント「{{agentId}}」を削除しますか?`,description:`ディスクから .md を削除します。バージョン履歴は DB に残ります — 後で本文を復元したい場合は新しいカスタムエージェントを作成してください。`},errors:{loadDraftFailed:`ドラフトの読み込みに失敗しました: {{status}}`,loadFailed:`読み込みに失敗しました: {{status}}`,saveFailed:`保存に失敗しました: {{status}}`,deleteFailed:`削除に失敗しました: {{status}}`,testFailed:`テストに失敗しました: {{status}}`},toasts:{agentCreated:`エージェントを作成しました`,agentSaved:`エージェントを保存しました`,agentDeleted:`エージェントを削除しました`,createFailed:`エージェントの作成に失敗しました`,saveFailed:`エージェントの保存に失敗しました`,deleteFailed:`エージェントの削除に失敗しました`},validation:{namePattern:`名前は <code>custom-</code> で始まり、小文字・数字・ハイフンのみ使用できます。`,missingFrontmatter:`YAML フロントマターがありません(1行目に <code>---</code> が必要です)。`},sampleTasks:{pick:`— サンプルタスクを選択 —`,terraform:`Terraform: 公開 S3 バケット`,sqlInjection:`コードレビュー: SQL インジェクション`,accessibility:`フロントエンド: アクセシビリティ`,schemaChange:`データ: スキーマ変更`,slowQuery:`パフォーマンス: 遅いクエリ`},testPane:{header:`エージェントをテスト`,sampleTaskLabel:`サンプルタスク`,placeholder:`エージェントに実行させたい内容を記述するか、上のサンプルを選択してください。`,run:`実行`,running:`実行中…`,sandboxNote:`サンドボックス実行。ファイルへの書き込みはありません。`,tokens_one:`<mono>{{count}}</mono> トークン`,tokens_other:`<mono>{{count}}</mono> トークン`,tokensUnavailable:`トークン使用量は利用できません`,emptyHint:`現在のドラフトに対してサンプルタスクを実行します。出力はここに表示されます。`},versions:{header:`バージョン履歴`,empty:`このエージェントの過去のバージョンはありません。`,restoreHint:`バージョンをクリックすると本文がエディタに復元されます(保存は別途必要です)。`}},t={eyebrow:`AI編集`,headline:`エージェントを改良`,streamingHeadline:`エージェントを改良中…`,placeholderInitial:`このエージェントをどう改良するか記述してください…`,placeholderFollowUp:`追加の改良指示を送信…`,viewCurrentBody:`現在のエージェント本文を表示`,appliedAsVersion:`バージョン {{version}} として適用しました。`,openInStudio:`Studio でドラフトを開いて手動編集`,chips:{tightenTools:`ツールリストを絞り込む`,stricterPersonality:`パーソナリティをより厳格に`,workflowSection:`ワークフロープロトコルのセクションを追加`,sharpenDescription:`説明を短く鋭く`,matchDeveloperStyle:`sr-developer のスタイルに合わせる`}},n={validation:{missingBaseline:`必須のベースラインエージェントがありません: {{agent}}`,multipleDefaultRules:`ルーティングのデフォルトルールは1つまでです({{found}} 件見つかりました)`,defaultRuleNotLast:`デフォルトのルーティングルールは最後に配置する必要があります`,unknownRoutingAgent:`ルーティングがチェーンにないエージェントを参照しています: {{agent}}`,invalidTags:`ルーティングルール {{agent}} に不正なタグがあります: {{tags}}(小文字のケバブケースを使用してください)`},validationSummary_one:`{{count}} 件の検証の問題`,validationSummary_other:`{{count}} 件の検証の問題`,nameLabel:`名前`,descriptionLabel:`説明`,descriptionPlaceholder:`このプロファイルの用途は?`,orchestrator:{heading:`オーケストレーター`,description:`両コマンドの最上位モデルです。batch-implement はフィーチャーごとに implement に委譲するため、起動されるすべてのレールがこのプロファイルのエージェントチェーンを継承します。`},agentChain:{heading:`エージェントチェーン({{n}})`,addTitle:`カタログからエージェントを追加`,addDisabledTitle:`カタログの全エージェントが既にチェーンに含まれています`,pickFromCatalog:`カタログから選択({{n}} 件利用可能)`,emptyCatalog:`カタログに追加できるエージェントがありません。エージェントカタログタブからカスタムエージェントを追加してください。`,kind:{upstream:`アップストリーム`,custom:`カスタム`}},routing:{heading:`ルーティング({{n}})`,addDefault:`デフォルトを追加`,addRule:`ルールを追加`,needAgentsTitle:`ルーティングルールを作成する前にエージェントを1つ以上追加してください`,explainer:`最初に一致したルールが適用されます。ルールは編集・削除でき、デフォルトのキャッチオールは存在する場合は常に最後に配置されます。ルーティングが空の場合、パイプラインはチェーン内の最初の developer 系エージェントにフォールバックします。`,untargetedTitle:`チェーン内の未割り当てエージェント`,untargetedDetail:`どのルーティングルールも <mono>{{agents}}</mono> を指していません。実行させたい場合はタグルールを追加するか、デフォルトルールのターゲットを変更してください。`},agentRow:{dragTitle:`ドラッグして並べ替え`,dragHandleAria:`ドラッグハンドル`,pinnedFirst:`先頭`,pinnedFirstTitle:`先頭に固定 — パイプラインは常に sr-architect から開始します`,pinnedLast:`末尾`,pinnedLastTitle:`末尾に固定 — マージフェーズは常に最後に実行されます`,required:`必須`,requiredRemoveTitle:`必須のベースラインエージェント — パイプラインはこの行に依存しています`},routingRow:{everythingElse:`その他すべて`,defaultTargetAria:`デフォルトのルーティングターゲット(コア、読み取り専用)`,defaultTargetTitle:`コアのフォールバック — 編集不可`,targetAria:`ルール {{ordinal}} のルーティングターゲット`,editTitle:`ルールを編集`,editAria:`ルール {{ordinal}} を編集`,moveDown:`下へ移動`,moveUp:`上へ移動`,coreDefaultBadge:`コア · デフォルト`,coreDefaultTitle:`コアのフォールバック — パイプラインの最終手段のルールで、sr-developer に固定されています`}},r={coreBadge:`コア`,agents:{"sr-architect":{name:`アーキテクト`,description:`アーキテクチャ設計、変更スペック、実装計画`},"sr-developer":{name:`デベロッパー`,description:`全レイヤーにわたるフルスタック実装`},"sr-reviewer":{name:`レビュアー`,description:`一般的なコードレビュー — 最終品質ゲート`}},coreTeamTitle:`エージェントチーム`,coreTeamNote:`この3つのコアエージェントは常にインストールされます — 選択は不要です。後からプロファイルと custom-* エージェントで専門エージェントを追加できます。`},i={"security-reviewer":{label:`セキュリティレビュアー`,blurb:`リリース前の diff から認証、インジェクション、データ漏洩のバグを発見します。`},"performance-profiler":{label:`パフォーマンスプロファイラー`,blurb:`ホットパス、N+1 クエリ、上限のないループ、バンドル肥大化を発見します。`},"data-engineer":{label:`データエンジニア`,blurb:`スキーママイグレーション、ETL パイプライン、データ変換。`},"ui-ux-polisher":{label:`UI / UX ポリッシャー`,blurb:`アクセシビリティ、スペーシング、空状態、エラーハンドリング。`},"api-designer":{label:`API デザイナー`,blurb:`バージョニング、ページネーション、エラー形式、後方互換性。`},"database-architect":{label:`データベースアーキテクト`,blurb:`インデックス、正規化 vs 非正規化、クエリ形状。`},"devops-sre":{label:`DevOps / SRE`,blurb:`CI/CD、可観測性、インシデント対応準備、ランブック。`},"mobile-engineer":{label:`モバイルエンジニア`,blurb:`iOS + Android のパターン、オフラインファースト、バッテリー配慮。`},"ml-engineer":{label:`ML エンジニア`,blurb:`パイプライン、評価、再現性、ドリフト監視。`},"accessibility-auditor":{label:`アクセシビリティ監査者`,blurb:`WCAG 2.2 レビュー: コントラスト、フォーカス、ARIA、キーボード。`},"qa-test-strategist":{label:`QA テストストラテジスト`,blurb:`テスト計画: ユニット / 統合 / E2E の配分、カバレッジの欠落。`},"load-tester":{label:`負荷 / ストレステスター`,blurb:`キャパシティプランニング、k6 / Locust シナリオ、ボトルネック探索。`},"integration-tester":{label:`統合テスター`,blurb:`サービス間コントラクト、フィクスチャ、フレーキーテストの削減。`},"regression-hunter":{label:`リグレッションハンター`,blurb:`バイセクトと再現を行い、まず失敗するテストを書きます。`},"data-analyst":{label:`データアナリスト`,blurb:`曖昧な質問をクエリと読みやすい知見に変換します。`},"etl-reviewer":{label:`ETL パイプラインレビュアー`,blurb:`冪等性、バックフィル、遅延到着データ。`},"dashboard-designer":{label:`ダッシュボードデザイナー`,blurb:`一目で分かるダッシュボード、正直な軸、チャートごとのアクション。`},"iac-reviewer":{label:`IaC / クラウドレビュアー`,blurb:`Terraform / CloudFormation: IAM、公開露出、コスト。`},"compliance-reviewer":{label:`コンプライアンスレビュアー`,blurb:`データフローに対する GDPR / SOC2 / HIPAA 関連のチェック。`},"threat-modeler":{label:`脅威モデラー`,blurb:`アーキテクチャ図に対する STRIDE / LINDDUN。`},"product-manager":{label:`プロダクトマネージャー`,blurb:`課題設定、PRD、優先順位付け。`},"ux-researcher":{label:`UX リサーチャー`,blurb:`インタビュースクリプト、ユーザビリティテスト計画、結果の統合。`},"technical-writer":{label:`テクニカルライター`,blurb:`実際に読まれるドキュメント — チュートリアル、リファレンス、変更履歴。`},"design-reviewer":{label:`デザインシステムレビュアー`,blurb:`トークンのドリフト、コンポーネントの誤用、フロー間の一貫性。`},"financial-analyst":{label:`ファイナンシャルアナリスト`,blurb:`ユニットエコノミクス、コホートモデル、シナリオ分析。`},"pricing-strategist":{label:`プライシングストラテジスト`,blurb:`ティアリング、パッケージング、支払い意欲調査。`},"market-researcher":{label:`マーケットリサーチャー`,blurb:`TAM/SAM/SOM、競合マップ、顧客セグメント。`},"ops-optimizer":{label:`オペレーション最適化担当`,blurb:`サイクルタイム、ボトルネック発見、自動化候補。`},"seo-auditor":{label:`SEO 監査者`,blurb:`テクニカル + コンテンツ SEO: インデックス可能性、情報設計、検索意図の一致。`},"growth-hacker":{label:`グロース実験担当`,blurb:`ファネル診断、リフト実験、アクティベーションループ。`},"social-strategist":{label:`ソーシャルメディアストラテジスト`,blurb:`チャネルに合ったコンテンツ、編集カレンダー、ボイスの一貫性。`},"literature-reviewer":{label:`文献レビュアー`,blurb:`システマティックレビューの要約、引用グラフ、相反の検出。`},"experiment-designer":{label:`実験デザイナー`,blurb:`仮説、対照群、サンプルサイズ、事前登録。`},"statistical-analyst":{label:`統計アナリスト`,blurb:`適切な検定を選び、p 値だけでなく効果量を報告します。`},"scientific-writer":{label:`サイエンティフィックライター`,blurb:`IMRaD 構成、誠実な限界の記述、読みやすい要旨。`},"curriculum-designer":{label:`カリキュラムデザイナー`,blurb:`学習成果 → アクティビティ → 評価。`},"assessment-author":{label:`評価項目作成者`,blurb:`暗記ではなく理解を測る設問。`},"tutor-explainer":{label:`チューター / 解説者`,blurb:`ファインマン流のシンプルな説明と例題。`},"clinical-guideline-reviewer":{label:`臨床ガイドラインレビュアー`,blurb:`最新のエビデンスに基づくガイドラインと診療を照合します。`},"medical-summarizer":{label:`医学文献要約者`,blurb:`臨床医向けの要約: 何が変わったか、エビデンスの質。`},"protocol-designer":{label:`プロトコルデザイナー`,blurb:`臨床プロトコル: エンドポイント、選択基準、安全性。`},"contract-reviewer":{label:`契約レビュアー`,blurb:`リスクの高い条項にフラグを立て、実際の意味を説明します。`},"privacy-counsel":{label:`プライバシーカウンセル`,blurb:`具体的なフローに適用する GDPR / CCPA / LGPD。`},"copy-editor":{label:`コピーエディター`,blurb:`行単位の編集: ボイス、リズム、意味を保ったまま 30% 削減。`},"brand-voice-guardian":{label:`ブランドボイスガーディアン`,blurb:`ボイスルールを徹底し、ブランドから外れた表現を検出します。`},"creative-brainstormer":{label:`クリエイティブブレインストーマー`,blurb:`発散してから収束。聖域も丁寧に切り捨てます。`},"hiring-interviewer":{label:`採用面接官`,blurb:`構造化面接、シグナル重視、バイアスに配慮。`},"strategic-planner":{label:`戦略プランナー`,blurb:`目標 → 賭け → 指標。お気に入りプロジェクトを剪定します。`},"coach-1on1":{label:`1:1 コーチ`,blurb:`フィードバック、キャリア成長、難しい対話の組み立てを支援します。`},"meeting-facilitator":{label:`ミーティングファシリテーター`,blurb:`報告ではなく意思決定を生むアジェンダ。`}},a={studio:e,refine:t,profileEditor:n,agentSelector:r,templates:i};export{r as agentSelector,a as default,n as profileEditor,t as refine,e as studio,i as templates};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={loadingAgent:`Chargement de l'agent…`,modeCreate:`Nouvel agent personnalisé`,modeEdit:`Modifier l'agent personnalisé`,create:`Créer`,unsaved:`● non enregistré`,resumeAiEdit:`Reprendre l'Édition IA`,resumeAiEditTitle:`Renvoyer ce brouillon vers l'overlay Édition IA`,loadingAiDraft:`chargement du brouillon IA…`,testButton:`Tester`,testButtonTitle:`Tester cet agent sur une tâche d'exemple`,historyButton:`Historique`,historyButtonTitle:`Historique des versions`,deleteConfirm:{title:`Supprimer l'agent « {{agentId}} » ?`,description:`Supprime le fichier .md du disque. L'historique des versions reste en base — créez un nouvel agent personnalisé si vous voulez récupérer le corps plus tard.`},errors:{loadDraftFailed:`Échec du chargement du brouillon : {{status}}`,loadFailed:`Échec du chargement : {{status}}`,saveFailed:`Échec de l'enregistrement : {{status}}`,deleteFailed:`Échec de la suppression : {{status}}`,testFailed:`Échec du test : {{status}}`},toasts:{agentCreated:`Agent créé`,agentSaved:`Agent enregistré`,agentDeleted:`Agent supprimé`,createFailed:`Échec de la création de l'agent`,saveFailed:`Échec de l'enregistrement de l'agent`,deleteFailed:`Échec de la suppression de l'agent`},validation:{namePattern:`Le nom doit commencer par <code>custom-</code> et ne contenir que des lettres minuscules, des chiffres et des tirets.`,missingFrontmatter:`Frontmatter YAML manquant (il faut un <code>---</code> d'ouverture sur la première ligne).`},sampleTasks:{pick:`— choisir une tâche d'exemple —`,terraform:`Terraform : bucket S3 public`,sqlInjection:`Revue de code : injection SQL`,accessibility:`Frontend : accessibilité`,schemaChange:`Données : changement de schéma`,slowQuery:`Performance : requête lente`},testPane:{header:`Tester l'agent`,sampleTaskLabel:`Tâche d'exemple`,placeholder:`Décrivez ce que l'agent doit faire, ou choisissez un exemple ci-dessus.`,run:`Exécuter`,running:`Exécution…`,sandboxNote:`Exécution en sandbox ; aucun fichier écrit.`,tokens_one:`<mono>{{count}}</mono> token`,tokens_other:`<mono>{{count}}</mono> tokens`,tokensUnavailable:`Utilisation des tokens indisponible`,emptyHint:`Exécutez une tâche d'exemple sur le brouillon actuel. La sortie s'affiche ici.`},versions:{header:`Historique des versions`,empty:`Aucune version antérieure enregistrée pour cet agent.`,restoreHint:`Cliquez sur une version pour restaurer son corps dans l'éditeur (il faudra ensuite Enregistrer).`}},t={eyebrow:`Édition IA`,headline:`Affinez votre agent`,streamingHeadline:`Affinage de votre agent…`,placeholderInitial:`Décrivez comment affiner cet agent…`,placeholderFollowUp:`Envoyez un affinage complémentaire…`,viewCurrentBody:`Voir le corps actuel de l'agent`,appliedAsVersion:`Appliqué comme version {{version}}.`,openInStudio:`Ouvrir le brouillon dans le Studio pour l'éditer manuellement`,chips:{tightenTools:`Resserrer la liste d'outils`,stricterPersonality:`Rendre la personnalité plus stricte`,workflowSection:`Ajouter une section de protocole Workflow`,sharpenDescription:`Raccourcir et affûter la description`,matchDeveloperStyle:`S'aligner sur le style de sr-developer`}},n={validation:{missingBaseline:`Agent de base requis manquant : {{agent}}`,multipleDefaultRules:`Le routage admet au plus une règle par défaut ({{found}} trouvées)`,defaultRuleNotLast:`La règle de routage par défaut doit être la dernière entrée`,unknownRoutingAgent:`Le routage référence un agent absent de la chaîne : {{agent}}`,invalidTags:`La règle de routage {{agent}} a des tags invalides : {{tags}} (utilisez du kebab-case en minuscules)`},validationSummary_one:`{{count}} problème de validation`,validationSummary_other:`{{count}} problèmes de validation`,nameLabel:`Nom`,descriptionLabel:`Description`,descriptionPlaceholder:`À quoi sert ce profil ?`,orchestrator:{heading:`Orchestrateur`,description:`Modèle de premier niveau pour les deux commandes. batch-implement délègue à implement pour chaque fonctionnalité, donc chaque rail qu'il lance hérite de la chaîne d'agents de ce profil.`},agentChain:{heading:`Chaîne d'agents ({{n}})`,addTitle:`Ajouter un agent depuis le catalogue`,addDisabledTitle:`Tous les agents du catalogue sont déjà dans la chaîne`,pickFromCatalog:`Choisir dans le catalogue ({{n}} disponibles)`,emptyCatalog:`Plus aucun agent dans le catalogue. Ajoutez des agents personnalisés depuis l'onglet Catalogue d'agents.`,kind:{upstream:`upstream`,custom:`personnalisé`}},routing:{heading:`Routage ({{n}})`,addDefault:`Ajouter la règle par défaut`,addRule:`Ajouter une règle`,needAgentsTitle:`Ajoutez au moins un agent avant de créer des règles de routage`,explainer:`La première règle correspondante l'emporte. Les règles sont modifiables et supprimables, et la règle fourre-tout par défaut reste en dernier quand elle existe. Si le routage est vide, le pipeline se rabat sur le premier agent de type développeur de la chaîne.`,untargetedTitle:`Agents non ciblés dans la chaîne`,untargetedDetail:`Aucune règle de routage ne pointe vers : <mono>{{agents}}</mono>. Ajoutez une règle de tag ou reciblez la règle par défaut si vous voulez qu'ils s'exécutent.`},agentRow:{dragTitle:`Glisser pour réordonner`,dragHandleAria:`Poignée de glissement`,pinnedFirst:`premier`,pinnedFirstTitle:`Épinglé en première position — le pipeline commence toujours par sr-architect`,pinnedLast:`dernier`,pinnedLastTitle:`Épinglé en dernière position — la phase de merge s'exécute toujours en dernier`,required:`requis`,requiredRemoveTitle:`Agent de base requis — le pipeline dépend de cette ligne`},routingRow:{everythingElse:`tout le reste`,defaultTargetAria:`Cible de routage par défaut (core, lecture seule)`,defaultTargetTitle:`Repli core — non modifiable`,targetAria:`Cible de routage pour la règle {{ordinal}}`,editTitle:`Modifier la règle`,editAria:`Modifier la règle {{ordinal}}`,moveDown:`Descendre`,moveUp:`Monter`,coreDefaultBadge:`core · défaut`,coreDefaultTitle:`Repli core — la règle de dernier recours du pipeline, épinglée sur sr-developer`}},r={coreBadge:`core`,agents:{"sr-architect":{name:`Architecte`,description:`Conception d'architecture, specs de changement, planification d'implémentation`},"sr-developer":{name:`Développeur`,description:`Implémentation full-stack sur toutes les couches`},"sr-reviewer":{name:`Relecteur`,description:`Revue de code générale — l'ultime contrôle qualité`}},coreTeamTitle:`Votre équipe d'agents`,coreTeamNote:`Ces trois agents de base sont toujours installés — rien à choisir. Ajoutez des spécialistes plus tard via des profils et des agents custom-*.`},i={"security-reviewer":{label:`Relecteur Sécurité`,blurb:`Détecte les bugs d'authentification, d'injection et d'exposition de données dans un diff avant livraison.`},"performance-profiler":{label:`Profileur de performance`,blurb:`Repère les hot paths, les requêtes N+1, les boucles non bornées, le gonflement du bundle.`},"data-engineer":{label:`Data Engineer`,blurb:`Migrations de schéma, pipelines ETL, transformations de données.`},"ui-ux-polisher":{label:`Polisseur UI / UX`,blurb:`Accessibilité, espacement, états vides, gestion des erreurs.`},"api-designer":{label:`Concepteur d'API`,blurb:`Versionnage, pagination, formats d'erreur, rétrocompatibilité.`},"database-architect":{label:`Architecte base de données`,blurb:`Index, normalisation vs dénormalisation, formes de requêtes.`},"devops-sre":{label:`DevOps / SRE`,blurb:`CI/CD, observabilité, préparation aux incidents, runbooks.`},"mobile-engineer":{label:`Ingénieur Mobile`,blurb:`Patterns iOS + Android, offline-first, sobriété batterie.`},"ml-engineer":{label:`Ingénieur ML`,blurb:`Pipelines, éval, reproductibilité, surveillance du drift.`},"accessibility-auditor":{label:`Auditeur Accessibilité`,blurb:`Revue WCAG 2.2 : contraste, focus, ARIA, clavier.`},"qa-test-strategist":{label:`Stratège de tests QA`,blurb:`Plans de test : répartition unitaires / intégration / E2E, lacunes de couverture.`},"load-tester":{label:`Testeur de charge / stress`,blurb:`Planification de capacité, scénarios k6 / Locust, chasse aux goulots d'étranglement.`},"integration-tester":{label:`Testeur d'intégration`,blurb:`Contrats inter-services, fixtures, réduction des tests flaky.`},"regression-hunter":{label:`Chasseur de régressions`,blurb:`Bisecte, reproduit, écrit d'abord le test qui échoue.`},"data-analyst":{label:`Data Analyst`,blurb:`Transforme des questions vagues en requêtes + conclusions lisibles.`},"etl-reviewer":{label:`Relecteur de pipeline ETL`,blurb:`Idempotence, backfills, données tardives.`},"dashboard-designer":{label:`Concepteur de dashboards`,blurb:`Dashboards lisibles d'un coup d'œil, axes honnêtes, une action par graphique.`},"iac-reviewer":{label:`Relecteur IaC / Cloud`,blurb:`Terraform / CloudFormation : IAM, exposition publique, coûts.`},"compliance-reviewer":{label:`Relecteur Conformité`,blurb:`Contrôles type RGPD / SOC2 / HIPAA sur les flux de données.`},"threat-modeler":{label:`Modélisateur de menaces`,blurb:`STRIDE / LINDDUN sur les diagrammes d'architecture.`},"product-manager":{label:`Product Manager`,blurb:`Cadrage du problème, PRD, priorisation.`},"ux-researcher":{label:`Chercheur UX`,blurb:`Scripts d'entretien, plans de tests d'utilisabilité, synthèse.`},"technical-writer":{label:`Rédacteur technique`,blurb:`Des docs qu'on lit vraiment — tutoriels, références, changelogs.`},"design-reviewer":{label:`Relecteur Design System`,blurb:`Dérive des tokens, mauvais usage des composants, cohérence entre les flux.`},"financial-analyst":{label:`Analyste financier`,blurb:`Unit economics, modèles de cohortes, analyse de scénarios.`},"pricing-strategist":{label:`Stratège Pricing`,blurb:`Paliers, packaging, études de disposition à payer.`},"market-researcher":{label:`Chargé d'études de marché`,blurb:`TAM/SAM/SOM, cartographies concurrentielles, segments clients.`},"ops-optimizer":{label:`Optimiseur des opérations`,blurb:`Temps de cycle, détection des goulots, candidats à l'automatisation.`},"seo-auditor":{label:`Auditeur SEO`,blurb:`SEO technique + contenu : indexabilité, architecture de l'information, adéquation à l'intention.`},"growth-hacker":{label:`Expérimentateur Growth`,blurb:`Diagnostic de funnel, expériences d'uplift, boucles d'activation.`},"social-strategist":{label:`Stratège réseaux sociaux`,blurb:`Contenu adapté au canal, calendrier éditorial, cohérence de la voix.`},"literature-reviewer":{label:`Relecteur de littérature`,blurb:`Synthèses de revues systématiques, graphes de citations, conflits.`},"experiment-designer":{label:`Concepteur d'expériences`,blurb:`Hypothèses, contrôles, taille d'échantillon, préenregistrement.`},"statistical-analyst":{label:`Analyste statistique`,blurb:`Choisit le bon test, rapporte les tailles d'effet, pas seulement les p-values.`},"scientific-writer":{label:`Rédacteur scientifique`,blurb:`Structure IMRaD, limites honnêtes, abstracts lisibles.`},"curriculum-designer":{label:`Concepteur de cursus`,blurb:`Objectifs d'apprentissage → activités → évaluation.`},"assessment-author":{label:`Auteur d'évaluations`,blurb:`Des questions qui mesurent la compréhension, pas la mémorisation.`},"tutor-explainer":{label:`Tuteur / Vulgarisateur`,blurb:`Explications simples façon Feynman, avec exemples corrigés.`},"clinical-guideline-reviewer":{label:`Relecteur de recommandations cliniques`,blurb:`Confronte la pratique aux dernières recommandations fondées sur les preuves.`},"medical-summarizer":{label:`Synthétiseur de littérature médicale`,blurb:`Des abstracts pour les cliniciens : ce qui change, qualité des preuves.`},"protocol-designer":{label:`Concepteur de protocoles`,blurb:`Protocoles cliniques : critères de jugement, critères d'inclusion, sécurité.`},"contract-reviewer":{label:`Relecteur de contrats`,blurb:`Signale les clauses à risque ; explique ce qu'elles veulent vraiment dire.`},"privacy-counsel":{label:`Conseil en confidentialité`,blurb:`RGPD / CCPA / LGPD appliqués à des flux concrets.`},"copy-editor":{label:`Réviseur éditorial`,blurb:`Corrections fines : voix, rythme, couper 30 % sans perdre le sens.`},"brand-voice-guardian":{label:`Gardien de la voix de marque`,blurb:`Fait respecter les règles de ton ; repère les formulations hors marque.`},"creative-brainstormer":{label:`Brainstormer créatif`,blurb:`Divergent puis convergent ; tue les vaches sacrées avec tact.`},"hiring-interviewer":{label:`Intervieweur de recrutement`,blurb:`Entretiens structurés, axés sur le signal, attentifs aux biais.`},"strategic-planner":{label:`Planificateur stratégique`,blurb:`Objectifs → paris → métriques ; élague les projets fétiches.`},"coach-1on1":{label:`Coach 1:1`,blurb:`Aide à cadrer le feedback, l'évolution de carrière, les conversations difficiles.`},"meeting-facilitator":{label:`Facilitateur de réunions`,blurb:`Des ordres du jour qui produisent des décisions, pas des points d'étape.`}},a={studio:e,refine:t,profileEditor:n,agentSelector:r,templates:i};export{r as agentSelector,a as default,n as profileEditor,t as refine,e as studio,i as templates};
|