specrails-desktop 2.48.0 → 2.49.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.
Files changed (121) hide show
  1. package/client/dist/assets/{ActivityFeedPage-CGq6QhP5.js → ActivityFeedPage-FdZBSmTU.js} +1 -1
  2. package/client/dist/assets/{AgentBrowserCapture-C4GZ-kdf.js → AgentBrowserCapture-Dr8kZotA.js} +1 -1
  3. package/client/dist/assets/{AgentModeAnalyticsPane-_IPmL0ZS.js → AgentModeAnalyticsPane-DXQSjYe-.js} +2 -2
  4. package/client/dist/assets/{AgentModeCodePane-B5WG5DOP.js → AgentModeCodePane-DcVV6EBy.js} +2 -2
  5. package/client/dist/assets/AgentModeJobsPane-a9f-g56c.js +1 -0
  6. package/client/dist/assets/AgentsPage-CTv4UVdp.js +87 -0
  7. package/client/dist/assets/{AnalyticsPage-BUMsKtsJ.js → AnalyticsPage-BbXPcz3a.js} +1 -1
  8. package/client/dist/assets/CodePage-CIigb_O0.js +3 -0
  9. package/client/dist/assets/DesktopAnalyticsPage-DZhN5jVh.js +1 -0
  10. package/client/dist/assets/{DocsDialog-ccQETHKB.js → DocsDialog-DzrqPxuj.js} +2 -2
  11. package/client/dist/assets/{DocsPage-DzEgplB3.js → DocsPage-B1AUuk0U.js} +1 -1
  12. package/client/dist/assets/{ExportDropdown-B8bBGopr.js → ExportDropdown-IPutNYvD.js} +1 -1
  13. package/client/dist/assets/InteractiveJobComposer-jg3xE_GX.js +19 -0
  14. package/client/dist/assets/{JobDetailModal-BYXmuTDe.js → JobDetailModal-BS-htwqZ.js} +1 -1
  15. package/client/dist/assets/JobDetailPage-CKYtQV5a.js +1 -0
  16. package/client/dist/assets/JobsPage-DFJm0bw0.js +1 -0
  17. package/client/dist/assets/{LoopBuilderPage-DQE-7Vby.js → LoopBuilderPage-ujkA2U0T.js} +2 -2
  18. package/client/dist/assets/LoopPreviewModal-BYOrnmcp.js +1 -0
  19. package/client/dist/assets/LoopsPage-DRcT1ikP.js +1 -0
  20. package/client/dist/assets/{MinimizedChatsContext-UpnqccPx.js → MinimizedChatsContext-CX1i2kQ8.js} +1 -1
  21. package/client/dist/assets/{PluginsPage-CjgVvmpW.js → PluginsPage-BR9ZTqxR.js} +2 -2
  22. package/client/dist/assets/{ProjectSettingsDialog-D6vBCoay.js → ProjectSettingsDialog-SAfCqXzC.js} +1 -1
  23. package/client/dist/assets/RepositoryDeliveries-DqmlG0Zs.js +5 -0
  24. package/client/dist/assets/{RepositoryScopeSelector-0Gz_fR1E.js → RepositoryScopeSelector-DG8KKPrm.js} +1 -1
  25. package/client/dist/assets/ReviewPacketPage-BoqahYNC.js +4 -0
  26. package/client/dist/assets/TemplatePreviewModal-CK5OoImj.js +1 -0
  27. package/client/dist/assets/TicketDetailModalContext-D2MEhRwJ.js +14 -0
  28. package/client/dist/assets/{Trans-9pHTy2fH.js → Trans-BLljsfHR.js} +1 -1
  29. package/client/dist/assets/agent-B76BhAyE.js +1 -0
  30. package/client/dist/assets/agent-BII69Nc0.js +1 -0
  31. package/client/dist/assets/agent-BIO4q6b0.js +1 -0
  32. package/client/dist/assets/agent-ButS6kwl.js +1 -0
  33. package/client/dist/assets/agent-CVeMLIu4.js +1 -0
  34. package/client/dist/assets/agent-CYFBDwFD.js +1 -0
  35. package/client/dist/assets/agent-D3jkMipn.js +1 -0
  36. package/client/dist/assets/agent-DSrflYFL.js +1 -0
  37. package/client/dist/assets/{formatDistanceToNow-w_2U5pm0.js → formatDistanceToNow-CbQZkD8M.js} +1 -1
  38. package/client/dist/assets/{getTimezoneOffsetInMilliseconds-BRymg1Kk.js → getTimezoneOffsetInMilliseconds-pBVK3rJC.js} +1 -1
  39. package/client/dist/assets/index-CjAPu3wb.js +80 -0
  40. package/client/dist/assets/index-UDzndadF.css +2 -0
  41. package/client/dist/assets/{jira-api-BqHbSdxK.js → jira-api-f-sYCIuX.js} +1 -1
  42. package/client/dist/assets/packet-BTRySHoQ.js +1 -0
  43. package/client/dist/assets/packet-BsRimSfZ.js +1 -0
  44. package/client/dist/assets/packet-C0pcMd6x.js +1 -0
  45. package/client/dist/assets/packet-C8qzvgrZ.js +1 -0
  46. package/client/dist/assets/packet-DF-iwqqY.js +1 -0
  47. package/client/dist/assets/packet-DQ_GnT2b.js +1 -0
  48. package/client/dist/assets/packet-Nb8BLI5h.js +1 -0
  49. package/client/dist/assets/packet-r7J14m89.js +1 -0
  50. package/client/dist/assets/{project-repositories-BsCs1PPA.js → project-repositories-DAjJbFhm.js} +1 -1
  51. package/client/dist/assets/{spending-hcgxHP4O.js → spending-DJBbdJyD.js} +1 -1
  52. package/client/dist/assets/{useDesktop-CAisjKWC.js → useDesktop-BJ8IRBRt.js} +1 -1
  53. package/client/dist/assets/useRuntimeRuns-Ch1KUc7k.js +1 -0
  54. package/client/dist/assets/{useSharedWebSocket-BHIfW4QT.js → useSharedWebSocket-BN3Lmehi.js} +2 -2
  55. package/client/dist/index.html +17 -17
  56. package/docs/guide/de/integrations/6-agent-chat.md +8 -0
  57. package/docs/guide/en/integrations/6-agent-chat.md +8 -0
  58. package/docs/guide/es/integrations/6-agent-chat.md +8 -0
  59. package/docs/guide/fr/integrations/6-agent-chat.md +8 -0
  60. package/docs/guide/it/integrations/6-agent-chat.md +8 -0
  61. package/docs/guide/ja/integrations/6-agent-chat.md +8 -0
  62. package/docs/guide/pt/integrations/6-agent-chat.md +8 -0
  63. package/docs/guide/zh/integrations/6-agent-chat.md +8 -0
  64. package/docs/internals/mission-rail-cards.md +130 -0
  65. package/docs/internals/review-packet.md +16 -3
  66. package/docs/mcp.md +24 -1
  67. package/package.json +1 -1
  68. package/server/dist/agent-chat-manager.js +97 -2
  69. package/server/dist/agent-chat-router.js +57 -1
  70. package/server/dist/agent-context-resolver.js +15 -0
  71. package/server/dist/agent-cwd-manager.js +1 -1
  72. package/server/dist/agent-failure-briefing.js +90 -0
  73. package/server/dist/agent-fence-promotion.js +8 -1
  74. package/server/dist/agent-operator-prompt.js +69 -1
  75. package/server/dist/agent-runtime-controls-router.js +17 -0
  76. package/server/dist/agent-store.js +40 -0
  77. package/server/dist/delivery-evidence.js +159 -0
  78. package/server/dist/desktop-db.js +11 -0
  79. package/server/dist/feature-flags.js +20 -0
  80. package/server/dist/mcp/guide.js +7 -0
  81. package/server/dist/mcp/tools/jobs.js +91 -4
  82. package/server/dist/mcp/tools/rails.js +2 -2
  83. package/server/dist/mission-run-notify.js +170 -0
  84. package/server/dist/rail-isolated-launch.js +47 -0
  85. package/server/dist/rail-launch-parser.js +182 -0
  86. package/server/dist/rail-pr-store.js +20 -0
  87. package/server/dist/rails-router.js +98 -5
  88. package/server/dist/review-packet.js +35 -2
  89. package/client/dist/assets/AgentModeJobsPane-w1N_HIXh.js +0 -1
  90. package/client/dist/assets/AgentsPage-CmwnnT46.js +0 -87
  91. package/client/dist/assets/CodePage-PjgywJPS.js +0 -3
  92. package/client/dist/assets/DesktopAnalyticsPage-BXY1pH4y.js +0 -1
  93. package/client/dist/assets/InteractiveJobComposer-CEwGkJ8F.js +0 -19
  94. package/client/dist/assets/JobDetailPage-CWp6MwJj.js +0 -1
  95. package/client/dist/assets/JobsPage-D1O1uyG8.js +0 -1
  96. package/client/dist/assets/LoopPreviewModal-Bk7zIXD5.js +0 -1
  97. package/client/dist/assets/LoopsPage-CqG7mx56.js +0 -1
  98. package/client/dist/assets/RepositoryDeliveries-C36ipKp_.js +0 -5
  99. package/client/dist/assets/ReviewPacketPage-Dr9RYs7q.js +0 -1
  100. package/client/dist/assets/TemplatePreviewModal-sCMHYFJo.js +0 -1
  101. package/client/dist/assets/TicketDetailModalContext-C5GgJlEt.js +0 -14
  102. package/client/dist/assets/agent-BdT0SB1D.js +0 -1
  103. package/client/dist/assets/agent-Bh9K7iEt.js +0 -1
  104. package/client/dist/assets/agent-C4ibdFk9.js +0 -1
  105. package/client/dist/assets/agent-CSFY22Zo.js +0 -1
  106. package/client/dist/assets/agent-DAnqxUn8.js +0 -1
  107. package/client/dist/assets/agent-DTQiu0Mi.js +0 -1
  108. package/client/dist/assets/agent-T54WuR_Y.js +0 -1
  109. package/client/dist/assets/agent-i75WDZOA.js +0 -1
  110. package/client/dist/assets/brain-DI9lHkKY.js +0 -1
  111. package/client/dist/assets/format-duration-NJVPOPBG.js +0 -1
  112. package/client/dist/assets/index-D0ScFZvR.css +0 -2
  113. package/client/dist/assets/index-DORCrgbI.js +0 -77
  114. package/client/dist/assets/packet-BNW8ODQw.js +0 -1
  115. package/client/dist/assets/packet-CXYvfdjy.js +0 -1
  116. package/client/dist/assets/packet-CtIlB8YE.js +0 -1
  117. package/client/dist/assets/packet-DA1SJkMH.js +0 -1
  118. package/client/dist/assets/packet-DYcWfBip.js +0 -1
  119. package/client/dist/assets/packet-DseX9yKC.js +0 -1
  120. package/client/dist/assets/packet-_m5aOy_d.js +0 -1
  121. package/client/dist/assets/packet-qOemUAm3.js +0 -1
@@ -0,0 +1,14 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/core-B3mKBIh5.js","assets/rolldown-runtime-CNC7AqOf.js","assets/dist-js-Rlh4FLH5.js","assets/event-Bt7f3wXe.js"])))=>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{u as a}from"./chunk-KS7C4IRE-DEKu087k.js";import{D as o,E as s,a as c,h as l,l as u,m as d,r as f,w as p,x as m}from"./useSharedWebSocket-BN3Lmehi.js";import{t as h}from"./Trans-BLljsfHR.js";import{n as g,t as _}from"./createLucideIcon-Bjbbp_KS.js";import{a as v,r as y,s as b}from"./useDesktop-BJ8IRBRt.js";import{a as x}from"./provider-capabilities-Vi1ZGvAK.js";import{n as S,t as C}from"./save-B6wGWwBR.js";import{n as w,r as T}from"./spending-DJBbdJyD.js";import{c as E,d as D,n as O,u as k}from"./MinimizedChatsContext-CX1i2kQ8.js";import{t as A}from"./circle-x-CMYsN4ZH.js";import{t as j}from"./download-CFHyyHcw.js";import{t as ee}from"./file-text-CFT-xXKN.js";import{t as M}from"./git-branch-BRM0F5GN.js";import{t as te}from"./loader-circle-DcygOQpC.js";import{t as N}from"./pencil-C9RkrIPZ.js";import{n as ne,t as P}from"./square-Ci-PFcFe.js";import{t as F}from"./plus-CsnjfkmX.js";import{t as I}from"./search-Cq_gE3Ik.js";import{t as re}from"./trash-2-BOU3WdZZ.js";import{t as L}from"./triangle-alert-H9T4jAmh.js";import{t as ie}from"./wrench-BfmNO9Vw.js";import{t as ae}from"./x-CBMI9ejn.js";import{t as R}from"./zap-CHo3aCD1.js";import{M as oe,N as se,a as z,i as ce,j as le,l as ue,o as de,r as fe,t as pe}from"./dialog-xXB2q5HJ.js";import{t as B}from"./utils-BC4DHlz2.js";import{n as me,t as he}from"./lib-CGdyxIWg.js";import{t as V}from"./formatDistanceToNow-CbQZkD8M.js";import{t as H}from"./button-Ccc9Dc-D.js";import{t as ge}from"./jira-api-f-sYCIuX.js";import{t as _e}from"./RepositoryScopeSelector-DG8KKPrm.js";function U(){return typeof window<`u`&&window.__TAURI_INTERNALS__!==void 0}async function W(e){if(!U())return;let{invoke:t}=await i(async()=>{let{invoke:e}=await import(`./core-B3mKBIh5.js`).then(e=>e.i);return{invoke:e}},__vite__mapDeps([0,1]));await t(`desktop_reveal_path`,{path:e})}async function ve(e){if(U())try{let t=await i(()=>import(`./dist-js-Rlh4FLH5.js`),__vite__mapDeps([2,0,1]));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 ye(e=``){return e||(typeof window<`u`&&(`__TAURI_INTERNALS__`in window||window.location.hostname===`tauri.localhost`)||typeof window<`u`&&window.location.protocol!==`http:`&&window.location.protocol!==`https:`?`ws://127.0.0.1:4200`:`${window.location.protocol===`https:`?`wss:`:`ws:`}//${window.location.host}`)}var be=ye(),xe=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_TERMINAL_PANEL;return typeof e!=`string`||e!==`false`})(),Se=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_AGENTS_SECTION;return typeof e!=`string`||e!==`false`})(),Ce=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_CODE_EXPLORER;return typeof e!=`string`||e!==`false`})(),we=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_JIRA;return typeof e!=`string`||e!==`false`})(),Te=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_MCP;return typeof e!=`string`||e!==`false`})(),Ee=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_AGENT_CHAT;return typeof e!=`string`||e!==`false`})(),De=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_AGENT_MODE;return Ee&&(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 Oe=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_LOOPS_SECTION;return typeof e!=`string`||e!==`false`})(),ke=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_NATIVE_BROWSER;return typeof e!=`string`||e!==`false`})(),Ae=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_PROJECT_BUILDER;return typeof e!=`string`||e!==`false`})(),je=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_REVIEW_PACKET;return typeof e!=`string`||e!==`false`})(),Me=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_NARRATED_PROGRESS;return typeof e!=`string`||e!==`false`})(),Ne=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_LOCAL_ENGINES;return typeof e!=`string`||e!==`false`})();function Pe(){return Ne}var Fe=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_MISSION_RAIL_CARDS;return typeof e!=`string`||e!==`false`})(),Ie=_(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),Le=_(`camera`,[[`path`,{d:`M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z`,key:`18u6gg`}],[`circle`,{cx:`12`,cy:`13`,r:`3`,key:`1vg3eu`}]]),Re=_(`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`}]]),ze=_(`circle`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),Be=_(`columns-2`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M12 3v18`,key:`108xh3`}]]),Ve=_(`droplet`,[[`path`,{d:`M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z`,key:`c7niix`}]]),He=_(`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`}]]),G=_(`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`}]]),Ue=_(`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`}]]),We=_(`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`}]]),Ge=_(`globe`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20`,key:`13o1zl`}],[`path`,{d:`M2 12h20`,key:`9i4pu4`}]]),Ke=_(`hash`,[[`line`,{x1:`4`,x2:`20`,y1:`9`,y2:`9`,key:`4lhtct`}],[`line`,{x1:`4`,x2:`20`,y1:`15`,y2:`15`,key:`vyu0kd`}],[`line`,{x1:`10`,x2:`8`,y1:`3`,y2:`21`,key:`1ggp8o`}],[`line`,{x1:`16`,x2:`14`,y1:`3`,y2:`21`,key:`weycgp`}]]),qe=_(`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`}]]),Je=_(`mouse-pointer-2`,[[`path`,{d:`M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z`,key:`edeuup`}]]),Ye=_(`redo-2`,[[`path`,{d:`m15 14 5-5-5-5`,key:`12vg1m`}],[`path`,{d:`M20 9H9.5A5.5 5.5 0 0 0 4 14.5A5.5 5.5 0 0 0 9.5 20H13`,key:`6uklza`}]]),Xe=_(`rotate-cw`,[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`,key:`1p45f6`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}]]),Ze=_(`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`}]]),Qe=_(`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`}]]),$e=_(`type`,[[`path`,{d:`M12 4v16`,key:`1654pz`}],[`path`,{d:`M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2`,key:`e0r10z`}],[`path`,{d:`M9 20h6`,key:`s66wpe`}]]),et=_(`undo-2`,[[`path`,{d:`M9 14 4 9l5-5`,key:`102s5s`}],[`path`,{d:`M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11`,key:`f3b9sd`}]]),tt=_(`zoom-in`,[[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`line`,{x1:`21`,x2:`16.65`,y1:`21`,y2:`16.65`,key:`13gj7c`}],[`line`,{x1:`11`,x2:`11`,y1:`8`,y2:`14`,key:`1vmskp`}],[`line`,{x1:`8`,x2:`14`,y1:`11`,y2:`11`,key:`durymu`}]]),K=_(`zoom-out`,[[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`line`,{x1:`21`,x2:`16.65`,y1:`21`,y2:`16.65`,key:`13gj7c`}],[`line`,{x1:`8`,x2:`14`,y1:`11`,y2:`11`,key:`durymu`}]]),nt=new Map,rt=2e3;function it(e){nt.set(e,(nt.get(e)??0)+1)}function at(e){(nt.get(e)??0)<=0||setTimeout(()=>{let t=(nt.get(e)??0)-1;t<=0?nt.delete(e):nt.set(e,t)},rt)}function q(e){return e?(nt.get(e)??0)>0:!1}var J=e(t(),1),ot=3e3,st=`
3
+
4
+ ---
5
+
6
+ ## Contract Layer
7
+
8
+ `;function ct(e){return`${u}/api/projects/${encodeURIComponent(e)}`}function lt(e,t){return JSON.stringify(e)===JSON.stringify(t)}function ut(e,t){let n=new Map(e.map(e=>[e.id,e])),r=t.map(e=>{let t=n.get(e.id);return t&&lt(t,e)?t:e});return r.length===e.length&&r.every((t,n)=>t===e[n])?e:r}function dt(){let{t:e}=g(`tickets`),{activeProjectId:t}=y(),[n,r]=(0,J.useState)([]),[i,a]=(0,J.useState)(!1),[o,s]=(0,J.useState)(null),[c,l]=(0,J.useState)(new Set),[u,d]=(0,J.useState)(new Set),p=(0,J.useRef)(t);p.current=t;let m=(0,J.useRef)(0),h=(0,J.useRef)(null),_=(0,J.useRef)(new Set),{registerHandler:v,unregisterHandler:x,connectionStatus:S}=f(),C=(0,J.useId)(),w=(0,J.useCallback)(async(e,t)=>{let n=ct(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??[]},[]),T=(0,J.useCallback)(async(t,n)=>{let i=++m.current;h.current?.abort();let o=new AbortController;h.current=o,p.current===t&&(a(!0),s(null));try{let a=await w(t,o.signal);if(o.signal.aborted||i!==m.current||p.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=>ut(e,a)),c.size>0&&s.size>0&&(l(c),b.success(e(`toasts.newTicketsAdded`,{count:c.size}),{id:`tickets-added-${t}`}),setTimeout(()=>{p.current===t&&l(e=>{let t=new Set(e);for(let e of c)t.delete(e);return t})},ot))}catch(e){if(o.signal.aborted||i!==m.current||p.current!==t)return;s(e instanceof Error?e.message:String(e))}finally{i===m.current&&(h.current===o&&(h.current=null),p.current===t&&a(!1))}},[w,e]),E=(0,J.useCallback)(async()=>{t&&await T(t,`merge`)},[t,T]);(0,J.useEffect)(()=>{if(m.current+=1,h.current?.abort(),h.current=null,r([]),a(!1),s(null),_.current=new Set,l(new Set),d(new Set),t)return T(t,`replace`),()=>{m.current+=1,h.current?.abort(),h.current=null}},[t,T]);let D=(0,J.useCallback)(t=>{let n=t;if(!n||typeof n.type!=`string`)return;let i=p.current;if(!(n.projectId&&n.projectId!==i))switch(n.type){case`desktop.project_recovered`:n.projectId===i&&E();break;case`mcp.activity`:n.affectedProjectId&&n.affectedProjectId===i&&E();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])),q(i)||b.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})},ot);break}case`ticket_updated`:{if(!n.ticket)break;if(n.ticket.id===0){E();break}let e=n.ticket;r(t=>t.map(t=>t.id===e.id?e:t)),typeof e.description==`string`&&e.description.includes(st)&&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}}},[E,e]);(0,J.useLayoutEffect)(()=>(v(`tickets-${C}`,D),()=>x(`tickets-${C}`)),[D,v,x,C]);let O=(0,J.useRef)(S);return(0,J.useEffect)(()=>{O.current!==`connected`&&S===`connected`&&p.current&&E(),O.current=S},[S,E]),{tickets:n,loading:i,isLoading:i,error:o,newTicketIds:c,contractRefiningIds:u,refetch:E,refresh:E,deleteTicket:(0,J.useCallback)(async e=>{let n=t;if(!n)return!1;try{let t=await fetch(`${ct(n)}/tickets/${e}`,{method:`DELETE`});return t.ok&&p.current===n&&await T(n,`merge`),t.ok}catch{return!1}},[t,T]),updateTicketStatus:(0,J.useCallback)(async(e,n)=>{let r=t;if(!r)return!1;try{let t=await fetch(`${ct(r)}/tickets/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({status:n})});return t.ok&&p.current===r&&await T(r,`merge`),t.ok}catch{return!1}},[t,T]),updateTicketPriority:(0,J.useCallback)(async(e,n)=>{let r=t;if(!r)return!1;try{let t=await fetch(`${ct(r)}/tickets/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({priority:n})});return t.ok&&p.current===r&&await T(r,`merge`),t.ok}catch{return!1}},[t,T]),createTicket:(0,J.useCallback)(async e=>{let n=t;if(!n)return!1;try{let t=await fetch(`${ct(n)}/tickets`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});return t.ok&&p.current===n&&await T(n,`merge`),t.ok}catch{return!1}},[t,T]),updateTicket:(0,J.useCallback)(async(e,n)=>{let r=t;if(!r)return!1;try{let t=await fetch(`${ct(r)}/tickets/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)});return t.ok&&p.current===r&&await T(r,`merge`),t.ok}catch{return!1}},[t,T])}}function ft(e,t){let n=()=>p(t?.in,NaN),r=t?.additionalDigits??2,i=_t(e),a;if(i.date){let e=vt(i.date,r);a=yt(e.restDateString,e.year)}if(!a||isNaN(+a))return n();let o=+a,s=0,c;if(i.time&&(s=xt(i.time),isNaN(s)))return n();if(i.timezone){if(c=Ct(i.timezone),isNaN(c))return n()}else{let e=new Date(o+s),n=m(0,t?.in);return n.setFullYear(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()),n.setHours(e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()),n}return m(o+s+c,t?.in)}var pt={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},mt=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,ht=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,gt=/^([+-])(\d{2})(?::?(\d{2}))?$/;function _t(e){let t={},n=e.split(pt.dateTimeDelimiter),r;if(n.length>2)return t;if(/:/.test(n[0])?r=n[0]:(t.date=n[0],r=n[1],pt.timeZoneDelimiter.test(t.date)&&(t.date=e.split(pt.timeZoneDelimiter)[0],r=e.substr(t.date.length,e.length))),r){let e=pt.timezone.exec(r);e?(t.time=r.replace(e[1],``),t.timezone=e[1]):t.time=r}return t}function vt(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 yt(e,t){if(t===null)return new Date(NaN);let n=e.match(mt);if(!n)return new Date(NaN);let r=!!n[4],i=bt(n[1]),a=bt(n[2])-1,o=bt(n[3]),s=bt(n[4]),c=bt(n[5])-1;if(r)return kt(t,s,c)?wt(t,s,c):new Date(NaN);{let e=new Date(0);return!Dt(t,a,o)||!Ot(t,i)?new Date(NaN):(e.setUTCFullYear(t,a,Math.max(i,o)),e)}}function bt(e){return e?parseInt(e):1}function xt(e){let t=e.match(ht);if(!t)return NaN;let n=St(t[1]),r=St(t[2]),i=St(t[3]);return At(n,r,i)?n*s+r*o+i*1e3:NaN}function St(e){return e&&parseFloat(e.replace(`,`,`.`))||0}function Ct(e){if(e===`Z`)return 0;let t=e.match(gt);if(!t)return 0;let n=t[1]===`+`?-1:1,r=parseInt(t[2]),i=t[3]&&parseInt(t[3])||0;return jt(r,i)?n*(r*s+i*o):NaN}function wt(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 Tt=[31,null,31,30,31,30,31,31,30,31,30,31];function Et(e){return e%400==0||e%4==0&&e%100!=0}function Dt(e,t,n){return t>=0&&t<=11&&n>=1&&n<=(Tt[t]||(Et(e)?29:28))}function Ot(e,t){return t>=1&&t<=(Et(e)?366:365)}function kt(e,t,n){return t>=1&&t<=53&&n>=0&&n<=6}function At(e,t,n){return e===24?t===0&&n===0:n>=0&&n<60&&t>=0&&t<60&&e>=0&&e<25}function jt(e,t){return t>=0&&t<=59}async function Mt(e,t,n){let r=new FormData;r.append(`file`,t);let i=await fetch(`${v()}/tickets/${e}/attachments`,{method:`POST`,body:r,signal:n});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e.error??l.t(`attachments:errors.uploadFailed`,{status:i.status}))}return(await i.json()).attachment}async function Nt(e,t){let n=await fetch(`${v()}/tickets/${e}/attachments/${t}`,{method:`DELETE`});if(!n.ok&&n.status!==404)throw Error(l.t(`attachments:errors.deleteFailed`,{status:n.status}))}async function Pt(e){let t=await fetch(`${v()}/tickets/${e}/attachments`,{method:`DELETE`});if(!t.ok&&t.status!==404)throw Error(l.t(`attachments:errors.bulkDeleteFailed`,{status:t.status}))}async function Ft(e){let t=await fetch(`${v()}/tickets/${e}/attachments`);if(!t.ok)throw Error(l.t(`attachments:errors.listFailed`,{status:t.status}));return(await t.json()).attachments}function It(e,t){return`${v()}/tickets/${e}/attachments/${t}`}async function Lt(e,t){let n=await fetch(It(e,t));if(!n.ok)throw Error(l.t(`attachments:errors.fetchFailed`,{status:n.status}));return n.blob()}var Rt=`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`,zt=new Set(Rt.split(`,`).filter(e=>!e.startsWith(`.`))),Bt=/\.sql$/i,Vt=/\.(png|jpe?g|gif|webp)$/i;function Ht(e){return zt.has(e.type)||Bt.test(e.name)||Vt.test(e.name)}var Y=n();function Ut({ticketKey:e,attachment:t,onClose:n}){let{t:r}=g(`attachments`),[i,a]=(0,J.useState)(null),[o,s]=(0,J.useState)(null);if((0,J.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,J.useEffect)(()=>{if(!t){a(null),s(null);return}let n=!1;return a(null),s(null),Lt(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,J.useEffect)(()=>()=>{i&&URL.revokeObjectURL(i)},[i]),!t)return null;let c=t.mimeType.startsWith(`image/`),l=t.mimeType===`application/pdf`;return(0,Y.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,Y.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,Y.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,Y.jsx)(S,{className:`w-4 h-4`}),r(`common:actions.back`)]}),(0,Y.jsxs)(`div`,{className:`flex-1 text-center min-w-0 px-4`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-white/95 truncate`,children:t.filename}),(0,Y.jsx)(`div`,{className:`text-[11px] text-white/50`,children:t.mimeType})]}),(0,Y.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,Y.jsx)(j,{className:`w-4 h-4`}),r(`lightbox.download`)]})]}),(0,Y.jsx)(`div`,{className:B(`flex-1 flex items-center justify-center overflow-auto p-6`),onClick:n,children:o?(0,Y.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,Y.jsx)(`p`,{className:`text-sm`,children:r(`lightbox.loadError`,{error:o})})}):i?c?(0,Y.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,Y.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,Y.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,Y.jsx)(`p`,{className:`text-sm mb-3`,children:r(`lightbox.previewUnavailable`)}),(0,Y.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,Y.jsx)(j,{className:`w-4 h-4`}),r(`lightbox.downloadFile`,{name:t.filename})]})]}):(0,Y.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,Y.jsx)(`p`,{className:`text-sm`,children:r(`lightbox.loading`)})})})]})}function Wt(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 Gt(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function Kt(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 qt(e){try{return new Date(e).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`})}catch{return e}}function Jt({ticketKey:e,attachments:t,onChange:n,className:r}){let{t:i}=g(`attachments`),[a,o]=(0,J.useState)(new Set),[s,c]=(0,J.useState)(null),[l,u]=(0,J.useState)(null);if((0,J.useEffect)(()=>{let r=!1;return Ft(e).then(e=>{if(r)return;let i=Wt(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 Nt(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,Y.jsxs)(`section`,{className:B(`mt-4`,r),"aria-label":i(`section.ariaLabel`),children:[(0,Y.jsxs)(`header`,{className:`flex items-center justify-between mb-2`,children:[(0,Y.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-muted-foreground`,children:i(`section.title`)}),(0,Y.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:i(`section.fileCount`,{count:d.length})})]}),(0,Y.jsx)(`ul`,{className:`flex flex-col gap-1`,children:d.map(e=>{let t=a.has(e.id);return(0,Y.jsxs)(`li`,{className:B(`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,Y.jsx)(`span`,{"aria-hidden":!0,className:`w-6 text-center text-sm shrink-0`,children:Kt(e.mimeType)}),(0,Y.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,Y.jsx)(`span`,{className:`font-medium truncate text-foreground`,children:e.filename}),(0,Y.jsxs)(`span`,{className:`text-[11px] text-muted-foreground`,children:[Gt(e.size),` · `,qt(e.addedAt)]})]}),(0,Y.jsx)(`button`,{type:`button`,onClick:()=>u(e),className:`text-[11px] text-primary hover:underline shrink-0`,children:i(`common:actions.open`)}),(0,Y.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,Y.jsx)(`p`,{className:`mt-2 text-xs text-destructive`,children:s}),(0,Y.jsx)(Ut,{ticketKey:e,attachment:l,onClose:()=>u(null)})]})}function Yt({ticketId:e,onClose:t}){let{t:n}=g(`code`),r=a(),{activeProjectId:i}=y(),o=`${i}:${e}`,s=(0,J.useRef)(o);s.current=o;let c=(0,J.useRef)(0),l=(0,J.useRef)(null),[u,d]=(0,J.useState)(null),[f,p]=(0,J.useState)(!1),[m,h]=(0,J.useState)(!1),[_,b]=(0,J.useState)(null),x=(0,J.useCallback)(async(t=null)=>{l.current?.abort();let n=new AbortController;l.current=n;let r=++c.current,i=()=>!n.signal.aborted&&c.current===r&&s.current===o;p(!0),h(!1),b(t);try{let r=new URLSearchParams({ticketId:String(e),limit:`50`});t&&r.set(`cursor`,t);let a=await fetch(`${v()}/code/activity?${r}`,{signal:n.signal});if(!a.ok)throw Error(`activity unavailable`);let s=await a.json();if(!Array.isArray(s.entries))throw Error(`invalid activity response`);if(!i())return;d(e=>{let n=t&&e?.scope===o?[...e.rows]:[],r=new Set(n.map(e=>`${e.repositoryId}\0${e.path}`));for(let e of s.entries){let t=`${e.repositoryId}\0${e.path}`;r.has(t)||(r.add(t),n.push(e))}return{scope:o,rows:n,nextCursor:s.nextCursor,truncated:!!s.truncated||!!t&&!!e?.truncated}})}catch{i()&&h(!0)}finally{i()&&p(!1)}},[o,e]);if((0,J.useEffect)(()=>{if(Ce)return d(null),x(),()=>{l.current?.abort(),c.current++}},[x]),!Ce)return null;let S=u?.scope===o?u:null;return!f&&!m&&S&&!S.rows.length&&!S.truncated&&!S.nextCursor?null:(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:n(`ticketFiles.title`)}),f&&!S&&(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground`,role:`status`,children:n(`ticketFiles.loading`)}),m&&(0,Y.jsxs)(`div`,{className:`text-xs`,role:`alert`,children:[(0,Y.jsx)(`span`,{children:n(`ticketFiles.loadFailed`)}),` `,(0,Y.jsx)(`button`,{type:`button`,onClick:()=>{x(_)},className:`underline`,children:n(`ticketFiles.retry`)})]}),S?.truncated&&(0,Y.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[n(`ticketFiles.partial`),` `,(0,Y.jsx)(`button`,{type:`button`,disabled:f,onClick:()=>{x()},className:`underline`,children:n(`ticketFiles.retry`)})]}),(0,Y.jsx)(`ul`,{className:`space-y-1`,children:S?.rows.map(e=>(0,Y.jsx)(`li`,{children:(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>{let n=new URLSearchParams({repositoryId:e.repositoryId,path:e.path});e.jobId&&n.set(`changeJobId`,e.jobId),t(),r(`/code?${n}`)},className:`w-full text-left flex items-center gap-2 rounded px-2 py-1 text-xs hover:bg-muted/40`,children:[(0,Y.jsx)(e.kind===`created`?G:e.kind===`deleted`?He:ee,{className:`h-3.5 w-3.5 text-muted-foreground shrink-0`}),(0,Y.jsx)(`span`,{className:`text-[10px] text-muted-foreground truncate max-w-24`,title:e.repositoryName,children:e.repositoryName}),(0,Y.jsx)(`span`,{className:`font-mono truncate flex-1`,children:e.path}),e.jobId&&(0,Y.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,Y.jsx)(Ue,{className:`h-3 w-3`}),e.jobId.length>10?e.jobId.slice(0,10):e.jobId]}),(0,Y.jsx)(`span`,{className:`text-[10px] text-muted-foreground uppercase tracking-wider shrink-0`,children:n(`kind.${e.kind}`)})]})},`${e.repositoryId}:${e.path}`))}),S?.nextCursor&&(0,Y.jsx)(`button`,{type:`button`,disabled:f,onClick:()=>{x(S.nextCursor)},className:`text-xs underline mt-2`,children:n(f?`ticketFiles.loading`:`ticketFiles.loadMore`)})]})}function Xt(e){return e<.005?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}function Zt(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 Qt({ticketId:e}){let{t}=g(`tickets`),[n,r]=(0,J.useState)(null),i=a(),{activeProjectId:o}=y(),{closeTicketDetail:s}=Oi();if((0,J.useEffect)(()=>{let t=new AbortController;return r(null),fetch(`${v()}/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:w[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,p=n.turnsUnavailableRuns??0,m=n.totalTurns==null||p>0&&(n.turnsReportedRuns??0)===0,h=!m&&p>0;return(0,Y.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,Y.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?`≥`:``}${Xt(n.totalCostUsd)}`}),(0,Y.jsx)(`span`,{className:`text-muted-foreground/60`,children:`·`}),(0,Y.jsx)(`span`,{className:`tabular-nums`,"data-testid":m?`ticket-turns-unavailable`:void 0,title:m?t(`spendingLine.turnsUnavailableTooltip`):h?t(`spendingLine.turnsPartiallyUnavailableTooltip`):void 0,children:m?`—`:`${h?`≥`:``}${t(`spendingLine.turns`,{count:n.totalTurns})}`}),(0,Y.jsx)(`span`,{className:`text-muted-foreground/60`,children:`·`}),(0,Y.jsx)(`span`,{className:`tabular-nums`,children:t(`spendingLine.active`,{duration:Zt(n.activeDurationMs)})}),c&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground/60`,children:`·`}),(0,Y.jsx)(`span`,{children:c})]}),(0,Y.jsx)(Ie,{className:`w-3 h-3 opacity-0 group-hover:opacity-100 transition-opacity`})]})}var $t={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 en({status:e,className:t}){let{t:n}=g(`specs`),r=$t[e];return e===`done`?(0,Y.jsx)(k,{className:B(`w-3.5 h-3.5 shrink-0`,r.dotClass,t),"aria-label":n(`status.done`)}):e===`cancelled`?(0,Y.jsx)(ae,{className:B(`w-3.5 h-3.5 shrink-0`,r.dotClass,t),"aria-label":n(`status.cancelled`)}):r.pulsing?(0,Y.jsxs)(`span`,{className:B(`relative flex shrink-0 h-2.5 w-2.5`,t),"aria-label":n(`status.inProgress`),children:[(0,Y.jsx)(`span`,{className:B(`animate-ping absolute inline-flex h-full w-full rounded-full opacity-60`,r.dotClass)}),(0,Y.jsx)(`span`,{className:B(`relative inline-flex rounded-full h-2.5 w-2.5`,r.dotClass)})]}):(0,Y.jsx)(`span`,{className:B(`inline-flex rounded-full h-2.5 w-2.5 shrink-0`,r.dotClass,t),"aria-label":n(r.labelKey)})}function tn({status:e,className:t}){let{t:n}=g(`specs`),r=$t[e];return(0,Y.jsxs)(`span`,{className:B(`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,Y.jsx)(en,{status:e}),n(r.labelKey)]})}function nn(){let{activeProjectId:e}=y(),[t,n]=(0,J.useState)({connected:!1,key:null,discardStatus:null}),[r,i]=(0,J.useState)(!0);return(0,J.useEffect)(()=>{if(!we||!e){n({connected:!1,key:null,discardStatus:null}),i(!1);return}let t=!1;return i(!0),ge.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 rn({open:e,onOpenChange:t,ticket:n,discardStatus:r,onDiscarded:i}){let{t:a}=g(`jira`),[o,s]=(0,J.useState)(``),[c,l]=(0,J.useState)(!1);async function u(){l(!0);try{await ge.discardSpec(n.id,o.trim()||null),b.success(a(`discard.movedToast`,{status:r,key:n.jira_key??`#${n.id}`})),t(!1),s(``),i?.()}catch(e){b.error(e instanceof Error?e.message:a(`errors.generic`))}finally{l(!1)}}return(0,Y.jsx)(pe,{open:e,onOpenChange:e=>{c||t(e)},children:(0,Y.jsxs)(fe,{movableResizable:!0,className:`max-w-md`,"data-testid":`jira-discard-dialog`,children:[(0,Y.jsxs)(de,{children:[(0,Y.jsx)(ue,{children:a(`discard.title`,{status:r})}),(0,Y.jsx)(ce,{children:a(`discard.body`,{status:r,key:n.jira_key??`#${n.id}`})})]}),(0,Y.jsxs)(`label`,{className:`block space-y-1`,children:[(0,Y.jsx)(`span`,{className:`text-xs font-medium text-foreground`,children:a(`discard.commentLabel`)}),(0,Y.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,Y.jsxs)(z,{children:[(0,Y.jsx)(H,{variant:`outline`,size:`sm`,onClick:()=>t(!1),disabled:c,children:a(`wizard.cancel`)}),(0,Y.jsxs)(H,{size:`sm`,onClick:u,disabled:c,"data-testid":`jira-discard-confirm`,children:[(0,Y.jsx)(Ie,{className:`w-3.5 h-3.5 mr-1.5`}),c?a(`discard.moving`):a(`discard.confirm`,{status:r})]})]})]})})}var an=/^\d{4}-\d{2}-\d{2}T/;function on(e){if(an.test(e))try{return{text:V(ft(e),{addSuffix:!0,locale:d()}),title:e}}catch{}return{text:e}}function sn({localId:e}){let{t}=g(`jira`),{activeProjectId:n}=y(),r=nn(),[i,a]=(0,J.useState)(null);if((0,J.useEffect)(()=>{if(!we||!r.connected)return;let t=!1;return a(null),ge.getSpecDetails(e).then(e=>{t||a(e)}).catch(()=>{t||a(null)}),()=>{t=!0}},[e,n,r.connected]),!we||!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,Y.jsxs)(`div`,{className:`space-y-4`,"data-testid":`jira-details-panel`,children:[s&&(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:t(`detail.detailsTitle`)}),(0,Y.jsx)(`div`,{className:`space-y-1.5`,children:i.fields.map((e,t)=>{let n=on(e.value);return(0,Y.jsxs)(`div`,{className:`text-xs`,children:[(0,Y.jsx)(`span`,{className:`text-[10px] text-muted-foreground uppercase tracking-wide block`,children:e.label}),e.href?(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>{ve(e.href)},className:`inline-flex items-center gap-1 text-accent-info hover:underline text-left`,children:[(0,Y.jsx)(`span`,{className:`truncate`,children:e.value}),(0,Y.jsx)(E,{className:`w-3 h-3 shrink-0`})]}):(0,Y.jsx)(`span`,{className:`text-foreground/80 whitespace-pre-line`,title:n.title,children:n.text})]},`${e.label}-${t}`)})})]}),(c||l||u)&&(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:t(`detail.developmentTitle`)}),c&&(0,Y.jsxs)(`div`,{className:`mb-2`,children:[(0,Y.jsx)(`span`,{className:`text-[10px] text-muted-foreground uppercase tracking-wide block mb-1`,children:t(`detail.dev.pullRequests`)}),(0,Y.jsx)(`div`,{className:`space-y-1`,children:o.pullRequests.map(e=>(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>{ve(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,Y.jsx)(We,{className:`w-3 h-3 mt-0.5 shrink-0 text-accent-info`}),(0,Y.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,Y.jsx)(`span`,{className:`truncate text-foreground/80 block`,children:e.title}),(0,Y.jsxs)(`span`,{className:`text-[10px] text-muted-foreground`,children:[e.status,e.sourceBranch?` · ${e.sourceBranch} → ${e.destBranch??``}`:``]})]})]},e.url))})]}),l&&(0,Y.jsxs)(`div`,{className:`mb-2`,children:[(0,Y.jsx)(`span`,{className:`text-[10px] text-muted-foreground uppercase tracking-wide block mb-1`,children:t(`detail.dev.branches`)}),(0,Y.jsx)(`div`,{className:`space-y-1`,children:o.branches.map(e=>(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>{ve(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,Y.jsx)(M,{className:`w-3 h-3 shrink-0 text-accent-info`}),(0,Y.jsx)(`span`,{className:`truncate font-mono text-foreground/80`,children:e.name}),e.repo&&(0,Y.jsx)(`span`,{className:`text-[10px] text-muted-foreground truncate`,children:e.repo})]},e.url))})]}),u&&(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`span`,{className:`text-[10px] text-muted-foreground uppercase tracking-wide block mb-1`,children:t(`detail.dev.commits`)}),(0,Y.jsx)(`div`,{className:`space-y-1`,children:o.commits.map(e=>(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>{ve(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,Y.jsx)(Ue,{className:`w-3 h-3 shrink-0 text-accent-info`}),(0,Y.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground shrink-0`,children:e.displayId}),(0,Y.jsx)(`span`,{className:`truncate text-foreground/80`,children:e.message})]},e.url))})]})]})]})}var cn=/\n*##\s*Acceptance Criteria\s*\n([\s\S]*?)(?=\n##\s|\n*$)/i;function ln(e){if(!e)return{body:``,criteria:[]};let t=cn.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 un=new Set([`draft`,`todo`]);function dn(e){return!!(un.has(e.status)||e.source===`jira`&&e.jira_key&&e.status!==`cancelled`)}function fn(){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)})}function pn(){let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_BROWSER_CAPTURE;return typeof e!=`string`||e!==`false`}var mn={desktop:{width:1280,height:800},tablet:{width:768,height:1024},mobile:{width:375,height:667}},hn=class extends Error{},gn=class extends Error{};function X(e){if(!e)throw Error(`A project owner is required for browser sessions`);return`${u}/api/projects/${encodeURIComponent(e)}`}async function _n(e,t){let n=await fetch(`${X(e)}/browser/sessions`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({initialUrl:t})});if(n.status===409)throw new hn(`Too many open browser sessions`);if(n.status===502)throw new gn(`The browser failed to launch`);if(!n.ok)throw Error(`Failed to open browser (${n.status})`);return(await n.json()).session}async function vn(e,t,n,r){let i=await fetch(`${X(e)}/browser/sessions/${t}/navigate`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:n,url:r})});if(!i.ok)throw Error(`Navigation failed (${i.status})`);return await i.json()}async function yn(e,t,n,r,i){let a=await fetch(`${X(e)}/browser/sessions/${t}/capture`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({rect:n,pendingSpecId:r,captureNetwork:i?.captureNetwork??!0})});if(!a.ok)throw Error(await bn(a));return await a.json()}async function bn(e){let t=await e.json().then(e=>e.error).catch(()=>void 0);return t?`Capture failed (${e.status}): ${t}`:`Capture failed (${e.status})`}async function xn(e,t,n,r,i,a=mn){let o=await fetch(`${X(e)}/browser/sessions/${t}/capture-breakpoints`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({rect:n,anchorPoint:r,pendingSpecId:i,breakpoints:a})});if(!o.ok)throw Error(await bn(o));return await o.json()}async function Sn(e,t,n){let r=new FormData;r.append(`file`,t,n);let i=await fetch(`${v()}/tickets/${e}/attachments`,{method:`POST`,body:r});if(!i.ok)throw Error(`Upload failed (${i.status})`);return(await i.json()).attachment}async function Cn(e,t,n,r){let i=await fetch(`${X(e)}/browser/sessions/${t}/clipboard`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:n,text:r})});if(!i.ok)throw Error(`Clipboard failed (${i.status})`);return await i.json()}async function wn(e,t,n,r){let i=await fetch(`${X(e)}/browser/sessions/${t}/element`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({selector:n,direction:r})});if(!i.ok)throw Error(`Element navigate failed (${i.status})`);return(await i.json()).probe}async function Tn(e,t,n){let r=await fetch(`${X(e)}/browser/sessions/${t}/popup-view`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({target:n})});if(!r.ok)throw Error(`Could not switch browser view (${r.status})`)}function En(e){if(!e||e===`about:blank`)return`…`;try{return new URL(e).hostname||`…`}catch{return`…`}}async function Dn(e,t){try{await fetch(`${X(e)}/browser/sessions/${t}`,{method:`DELETE`})}catch{}}function On(e,t){return`${be||(typeof window<`u`?`${window.location.protocol===`https:`?`wss:`:`ws:`}//${window.location.host}`:`ws://localhost:4200`)}/ws/browser/${e}?projectId=${encodeURIComponent(t)}`}function kn(e,t){let n=On(e,t),r=c(),i=r?new WebSocket(n,[`specrails-desktop`,r]):new WebSocket(n);return i.binaryType=`arraybuffer`,i}function An(e,t=e=>requestAnimationFrame(e),n=e=>cancelAnimationFrame(e)){let r=null,i=null,a=null,o=!1,s=()=>{a!=null&&(n(a),a=null);let t=r,o=i;r=null,i=null,t&&(!o||t.x!==o.x||t.y!==o.y)&&e({type:`mouse`,action:`move`,x:t.x,y:t.y}),o&&e({type:`wheel`,x:o.x,y:o.y,deltaX:o.deltaX,deltaY:o.deltaY})},c=()=>{a==null&&!o&&(a=t(()=>{a=null,s()}))};return{move(e,t){o||(r={x:e,y:t},c())},wheel(e,t,n,r){o||(i?(i.x=e,i.y=t,i.deltaX+=n,i.deltaY+=r):i={x:e,y:t,deltaX:n,deltaY:r},c())},flush(){o||s()},dispose(){o||(o=!0,a!=null&&(n(a),a=null),r=null,i=null)}}}function jn(e,t,n){let r=t.width>0?(e.x-t.left)/t.width:0,i=t.height>0?(e.y-t.top)/t.height:0,a=Math.min(Math.max(r,0),1)*n.width,o=Math.min(Math.max(i,0),1)*n.height;return{x:Math.round(a),y:Math.round(o)}}function Mn(e,t,n){let r=n.width>0?t.width/n.width:0,i=n.height>0?t.height/n.height:0;return{left:t.left+e.x*r,top:t.top+e.y*i,width:e.width*r,height:e.height*i}}function Nn(e,t){return{x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),width:Math.abs(e.x-t.x),height:Math.abs(e.y-t.y)}}function Pn(e,t=8){return e.width>=t&&e.height>=t}function Fn(e,t){let n=Math.max(1,t.width),r=Math.max(1,t.height),i=Math.max(0,Math.min(e.x,n-1)),a=Math.max(0,Math.min(e.y,r-1)),o=Math.min(n,Math.max(i+1,e.x+e.width)),s=Math.min(r,Math.max(a+1,e.y+e.height));return{x:Math.round(i),y:Math.round(a),width:Math.round(o-i),height:Math.round(s-a)}}function In(e){return{nodeCount:e.nodes.length,htmlBytes:e.html.length,truncated:e.htmlTruncated,networkCount:e.networkRequests?.length??0}}function Ln(e,t){let n=e.indexOf(`,`);if(!e.startsWith(`data:`)||n===-1)throw Error(`dataUrlToFile: not a data URL`);let r=e.slice(0,n),i=/^data:([^;,]+)/.exec(r)?.[1]||`application/octet-stream`,a=e.slice(n+1);if(/;base64$/i.test(r)){let e=atob(a),n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t);return new File([n],t,{type:i})}return new File([decodeURIComponent(a)],t,{type:i})}var Rn={objects:[],past:[],future:[]};function zn(e,t){switch(t.type){case`add`:return{objects:[...e.objects,t.obj],past:[...e.past,e.objects],future:[]};case`delete`:return e.objects.some(e=>e.id===t.id)?{objects:e.objects.filter(e=>e.id!==t.id),past:[...e.past,e.objects],future:[]}:e;case`undo`:return e.past.length===0?e:{objects:e.past[e.past.length-1],past:e.past.slice(0,-1),future:[e.objects,...e.future]};case`redo`:return e.future.length===0?e:{objects:e.future[0],past:[...e.past,e.objects],future:e.future.slice(1)};case`clear`:return e.objects.length===0?e:{objects:[],past:[...e.past,e.objects],future:[]};default:return e}}function Bn(e){let t=e.filter(e=>e.kind===`step`).map(e=>e.n);return t.length===0?1:Math.max(...t)+1}function Vn(e,t){return{x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),w:Math.abs(e.x-t.x),h:Math.abs(e.y-t.y)}}function Hn(e,t,n=.04){let r=Math.atan2(t.y-e.y,t.x-e.x),i=r-Math.PI/7,a=r+Math.PI/7;return{left:{x:t.x-n*Math.cos(i),y:t.y-n*Math.sin(i)},right:{x:t.x-n*Math.cos(a),y:t.y-n*Math.sin(a)}}}function Un(e,t,n=.01){return Math.abs(e.x-t.x)>=n||Math.abs(e.y-t.y)>=n}function Wn(e,t=.05){let n=e=>Math.min(1+t,Math.max(-t,e));return{x:n(e.x),y:n(e.y)}}function Gn(e,t,n){return{schemaVersion:1,objects:e,baseWidth:t,baseHeight:n}}function Kn({result:e,pendingSpecId:t,onConfirm:n,...r}){let i=(0,J.useCallback)(async r=>{if(!r.annotations){await n(e);return}let i=`screen-annotated-${Date.now()}.png`,a=await Sn(t,Ln(r.screenshotDataUrl,i),i);await n({...e,rawScreenshot:e.screenshot,screenshot:a,screenshotDataUrl:r.screenshotDataUrl,annotations:r.annotations,...e.breakpoints?{breakpoints:Object.fromEntries(Object.entries(e.breakpoints).map(([t,n])=>[t,n.attachment.id===e.screenshot.id?{...n,attachment:a,dataUrl:r.screenshotDataUrl}:n]))}:{}})},[n,t,e]);return(0,Y.jsx)(Qn,{...r,responsive:Object.keys(e.breakpoints??{}).length>1,screenshotDataUrl:e.screenshotDataUrl,onConfirm:i})}var qn=[`#ef4444`,`#f59e0b`,`#3b82f6`,`#22c55e`,`#ffffff`],Jn=`#111827`,Yn=[{tool:`arrow`,icon:T,labelKey:`editor.tools.arrow`,key:`a`},{tool:`box`,icon:P,labelKey:`editor.tools.box`,key:`r`},{tool:`text`,icon:$e,labelKey:`editor.tools.text`,key:`t`},{tool:`blur`,icon:Ve,labelKey:`editor.tools.blur`,key:`b`},{tool:`step`,icon:Ke,labelKey:`editor.tools.step`,key:`n`}],Xn=0,Zn=()=>`a${++Xn}-${Date.now().toString(36)}`;function Qn({screenshotDataUrl:e,responsive:t,macOverlay:n,confirmLabel:r,onConfirm:i,onReselect:a,onCancel:o}){let{t:s}=g(`browser`),[c,l]=(0,J.useReducer)(zn,Rn),[u,d]=(0,J.useState)(`arrow`),[f,p]=(0,J.useState)(qn[0]),[m,h]=(0,J.useState)(null),[_,v]=(0,J.useState)({w:1,h:1}),[y,b]=(0,J.useState)(!1),[x,C]=(0,J.useState)(!1),w=(0,J.useRef)(!1),T=(0,J.useRef)(null),E=(0,J.useRef)(null),D=c.objects,O=(0,J.useCallback)(()=>{let e=T.current;if(!e)return;let t=E.current?.getBoundingClientRect();if(!t||t.width<=0||t.height<=0||e.naturalWidth<=0||e.naturalHeight<=0)return;let n=Math.min(1,t.width/e.naturalWidth,t.height/e.naturalHeight),r=e.naturalWidth*n,i=e.naturalHeight*n;v(e=>e.w===r&&e.h===i?e:{w:r,h:i})},[]);(0,J.useEffect)(()=>{O();let e=typeof ResizeObserver>`u`?null:new ResizeObserver(O);return E.current&&e?.observe(E.current),window.addEventListener(`resize`,O),()=>{e?.disconnect(),window.removeEventListener(`resize`,O)}},[O]);let A=(0,J.useCallback)((e,t)=>{let n=T.current;if(!n)return{x:0,y:0};let r=n.getBoundingClientRect();return Wn({x:r.width>0?(e-r.left)/r.width:0,y:r.height>0?(t-r.top)/r.height:0})},[]),j=(0,J.useCallback)(e=>{if(y)return;e.target.setPointerCapture?.(e.pointerId);let t=A(e.clientX,e.clientY);if(u===`text`){let e=window.prompt(s(`editor.notePrompt`))?.trim();e&&l({type:`add`,obj:{id:Zn(),kind:`text`,x:t.x,y:t.y,text:e,color:f}});return}if(u===`step`){l({type:`add`,obj:{id:Zn(),kind:`step`,x:t.x,y:t.y,n:Bn(D),color:f}});return}h({start:t,cur:t})},[y,u,f,D,A,s]),ee=(0,J.useCallback)(e=>{m&&h(t=>t&&{...t,cur:A(e.clientX,e.clientY)})},[m,A]),M=(0,J.useCallback)(()=>{if(!m)return;let{start:e,cur:t}=m;if(h(null),Un(e,t)){if(u===`arrow`)l({type:`add`,obj:{id:Zn(),kind:`arrow`,from:e,to:t,color:f}});else if(u===`box`){let n=Vn(e,t);l({type:`add`,obj:{id:Zn(),kind:`box`,...n,color:f}})}else if(u===`blur`){let n=Vn(e,t);l({type:`add`,obj:{id:Zn(),kind:`blur`,...n}})}}},[m,u,f]),N=(0,J.useCallback)(()=>{let e=T.current;if(!e||!e.naturalWidth||!e.naturalHeight)throw Error(`Capture image is not loaded`);let t=e.naturalWidth,n=e.naturalHeight,r=document.createElement(`canvas`);r.width=t,r.height=n;let i=r.getContext(`2d`);if(!i)throw Error(`Image rendering is unavailable`);i.drawImage(e,0,0,t,n);for(let e of D)e.kind===`blur`&&(i.fillStyle=Jn,i.fillRect(e.x*t,e.y*n,e.w*t,e.h*n));let a=Math.max(2,t*.004);for(let e of D)if(e.kind===`box`)i.strokeStyle=e.color,i.lineWidth=a,i.strokeRect(e.x*t,e.y*n,e.w*t,e.h*n);else if(e.kind===`arrow`){let r={x:e.from.x*t,y:e.from.y*n},o={x:e.to.x*t,y:e.to.y*n},s=Hn(e.from,e.to,.035);i.strokeStyle=e.color,i.lineWidth=a,i.lineCap=`round`,i.beginPath(),i.moveTo(r.x,r.y),i.lineTo(o.x,o.y),i.moveTo(s.left.x*t,s.left.y*n),i.lineTo(o.x,o.y),i.lineTo(s.right.x*t,s.right.y*n),i.stroke()}else if(e.kind===`text`){let r=Math.max(12,n*.03);i.font=`600 ${r}px sans-serif`,i.textBaseline=`top`,i.lineWidth=Math.max(2,r*.18),i.strokeStyle=`rgba(0,0,0,0.55)`,i.strokeText(e.text,e.x*t,e.y*n),i.fillStyle=e.color,i.fillText(e.text,e.x*t,e.y*n)}else if(e.kind===`step`){let r=Math.max(10,n*.025);i.beginPath(),i.arc(e.x*t,e.y*n,r,0,Math.PI*2),i.fillStyle=e.color,i.fill(),i.fillStyle=`#000`,i.font=`700 ${r*1.1}px sans-serif`,i.textAlign=`center`,i.textBaseline=`middle`,i.fillText(String(e.n),e.x*t,e.y*n),i.textAlign=`start`}let o=r.toDataURL(`image/png`);if(!o.startsWith(`data:image/png;base64,`))throw Error(`Image encoding failed`);return{screenshotDataUrl:o,annotations:Gn(D,t,n)}},[D]),ne=(0,J.useCallback)(async()=>{if(!w.current){w.current=!0,b(!0),C(!1);try{await i(D.length===0?{screenshotDataUrl:e}:N())}catch{C(!0)}finally{w.current=!1,b(!1)}}},[D,N,e,i]),P=(0,J.useCallback)(()=>{D.length>0&&!window.confirm(s(`editor.discardConfirm`))||o()},[D.length,o,s]);(0,J.useEffect)(()=>{let e=e=>{if(y)return;let t=e.metaKey||e.ctrlKey;if(t&&e.key.toLowerCase()===`z`){e.preventDefault(),l({type:e.shiftKey?`redo`:`undo`});return}if(t&&e.key===`Enter`){e.preventDefault(),ne();return}if(t)return;let n=Yn.find(t=>t.key===e.key.toLowerCase());if(n){d(n.tool);return}e.key===`Escape`&&(e.preventDefault(),P())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[y,ne,P]);let F=(e,t)=>e*(t===`w`?_.w:_.h),I=m?Vn(m.start,m.cur):null;return(0,Y.jsxs)(`div`,{className:`flex-1 min-h-0 min-w-0 flex flex-col items-center overflow-hidden p-3 gap-2`,children:[(0,Y.jsxs)(`div`,{className:`flex shrink-0 max-w-full items-center gap-1 overflow-x-auto rounded-lg border border-border/60 bg-surface/90 px-1.5 py-1 shadow-xl ${n?`ml-[80px]`:``}`,children:[Yn.map(({tool:e,icon:t,labelKey:n})=>(0,Y.jsx)(`button`,{type:`button`,title:s(n),"aria-label":s(n),"aria-pressed":u===e,onClick:()=>d(e),className:`h-7 w-7 inline-flex items-center justify-center rounded transition-colors ${u===e?`bg-primary/15 text-primary`:`text-muted-foreground hover:text-foreground hover:bg-card/60`}`,children:(0,Y.jsx)(t,{className:`w-3.5 h-3.5`})},e)),(0,Y.jsx)(`span`,{className:`w-px h-5 bg-border/60 mx-0.5`}),qn.map(e=>(0,Y.jsx)(`button`,{type:`button`,"aria-label":s(`editor.colorLabel`,{color:e}),onClick:()=>p(e),className:`h-5 w-5 rounded-full border transition-transform ${f===e?`scale-110 border-foreground`:`border-border/60`}`,style:{background:e}},e)),(0,Y.jsx)(`span`,{className:`w-px h-5 bg-border/60 mx-0.5`}),(0,Y.jsx)(`button`,{type:`button`,"aria-label":s(`editor.undo`),title:s(`editor.undoTitle`),disabled:c.past.length===0,onClick:()=>l({type:`undo`}),className:`h-7 w-7 inline-flex items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-card/60 disabled:opacity-40`,children:(0,Y.jsx)(et,{className:`w-3.5 h-3.5`})}),(0,Y.jsx)(`button`,{type:`button`,"aria-label":s(`editor.redo`),title:s(`editor.redoTitle`),disabled:c.future.length===0,onClick:()=>l({type:`redo`}),className:`h-7 w-7 inline-flex items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-card/60 disabled:opacity-40`,children:(0,Y.jsx)(Ye,{className:`w-3.5 h-3.5`})})]}),t&&(0,Y.jsx)(`p`,{className:`shrink-0 max-w-prose text-center text-xs text-muted-foreground`,children:s(`editor.responsiveHint`)}),(0,Y.jsx)(`div`,{ref:E,className:`relative flex-1 min-h-0 w-full flex items-center justify-center`,children:(0,Y.jsxs)(`div`,{className:`relative shrink-0`,style:{width:_.w,height:_.h},children:[(0,Y.jsx)(`img`,{ref:T,src:e,alt:s(`editor.capturedAlt`),onLoad:O,draggable:!1,className:`block w-full h-full select-none rounded shadow-2xl`}),D.map(e=>e.kind===`blur`?(0,Y.jsx)(`div`,{className:`absolute pointer-events-none`,style:{backgroundColor:Jn,left:`${e.x*100}%`,top:`${e.y*100}%`,width:`${e.w*100}%`,height:`${e.h*100}%`}},e.id):null),m&&u===`blur`&&I&&(0,Y.jsx)(`div`,{className:`absolute border border-accent-info pointer-events-none`,style:{backgroundColor:Jn,left:`${I.x*100}%`,top:`${I.y*100}%`,width:`${I.w*100}%`,height:`${I.h*100}%`}}),(0,Y.jsxs)(`svg`,{className:`absolute inset-0 w-full h-full ${u===`text`||u===`step`?`cursor-pointer`:`cursor-crosshair`}`,viewBox:`0 0 ${_.w} ${_.h}`,preserveAspectRatio:`none`,onPointerDown:j,onPointerMove:ee,onPointerUp:M,children:[D.map(e=>{if(e.kind===`box`)return(0,Y.jsx)(`rect`,{x:F(e.x,`w`),y:F(e.y,`h`),width:F(e.w,`w`),height:F(e.h,`h`),fill:`none`,stroke:e.color,strokeWidth:Math.max(2,_.w*.004)},e.id);if(e.kind===`arrow`){let t=Hn(e.from,e.to,.035),n=Math.max(2,_.w*.004);return(0,Y.jsxs)(`g`,{stroke:e.color,strokeWidth:n,strokeLinecap:`round`,fill:`none`,children:[(0,Y.jsx)(`line`,{x1:F(e.from.x,`w`),y1:F(e.from.y,`h`),x2:F(e.to.x,`w`),y2:F(e.to.y,`h`)}),(0,Y.jsx)(`polyline`,{points:`${F(t.left.x,`w`)},${F(t.left.y,`h`)} ${F(e.to.x,`w`)},${F(e.to.y,`h`)} ${F(t.right.x,`w`)},${F(t.right.y,`h`)}`})]},e.id)}if(e.kind===`text`)return(0,Y.jsx)(`text`,{x:F(e.x,`w`),y:F(e.y,`h`),dominantBaseline:`hanging`,fontSize:Math.max(12,_.h*.03),fontWeight:600,fill:e.color,stroke:`rgba(0,0,0,0.55)`,strokeWidth:1,paintOrder:`stroke`,children:e.text},e.id);if(e.kind===`step`){let t=Math.max(10,_.h*.025);return(0,Y.jsxs)(`g`,{children:[(0,Y.jsx)(`circle`,{cx:F(e.x,`w`),cy:F(e.y,`h`),r:t,fill:e.color}),(0,Y.jsx)(`text`,{x:F(e.x,`w`),y:F(e.y,`h`),textAnchor:`middle`,dominantBaseline:`central`,fontSize:t*1.1,fontWeight:700,fill:`#000`,children:e.n})]},e.id)}return null}),m&&u===`box`&&I&&(0,Y.jsx)(`rect`,{x:F(I.x,`w`),y:F(I.y,`h`),width:F(I.w,`w`),height:F(I.h,`h`),fill:`none`,stroke:f,strokeDasharray:`4 3`,strokeWidth:Math.max(2,_.w*.004)}),m&&u===`arrow`&&(0,Y.jsx)(`line`,{x1:F(m.start.x,`w`),y1:F(m.start.y,`h`),x2:F(m.cur.x,`w`),y2:F(m.cur.y,`h`),stroke:f,strokeWidth:Math.max(2,_.w*.004),strokeLinecap:`round`})]}),y&&(0,Y.jsxs)(`div`,{className:`absolute inset-0 flex items-center justify-center gap-2 bg-background-deep/50 text-sm text-foreground`,children:[(0,Y.jsx)(te,{className:`w-4 h-4 animate-spin`}),` `,s(`common:states.saving`)]})]})}),x&&(0,Y.jsx)(`p`,{role:`alert`,className:`shrink-0 text-sm text-destructive`,children:s(`modal.toast.captureFailed`)}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[(0,Y.jsxs)(H,{size:`sm`,variant:`ghost`,className:`gap-1.5`,onClick:a,disabled:y,children:[(0,Y.jsx)(S,{className:`w-3.5 h-3.5`}),` `,s(`editor.reselect`)]}),(0,Y.jsxs)(H,{size:`sm`,variant:`ghost`,className:`gap-1.5`,onClick:P,disabled:y,children:[(0,Y.jsx)(ae,{className:`w-3.5 h-3.5`}),` `,s(`common:actions.cancel`)]}),(0,Y.jsxs)(H,{size:`sm`,className:`gap-1.5`,onClick:()=>void ne(),disabled:y,"data-testid":`annotation-confirm`,children:[(0,Y.jsx)(k,{className:`w-3.5 h-3.5`}),` `,D.length>0?r??s(`editor.createSpec`):s(`editor.skipContinue`)]})]})]})}var $n=`native-browser:event`;function er(e){let t=(e??``).trim();if(!t)return null;if(t===`about:blank`)return t;let n=tr(t);if(n){if(n.protocol===`http:`||n.protocol===`https:`)return n.toString();let e=`${n.pathname}${n.search}${n.hash}`;if(!/^\d+([/?#].*)?$/.test(e))return null}let r=tr(`https://${t}`);if(r&&r.protocol===`https:`){let e=r.hostname.toLowerCase();return(e===`localhost`||e.endsWith(`.localhost`)||e===`[::1]`||/^127\./.test(e))&&(r.protocol=`http:`),r.toString()}return null}function tr(e){try{return new URL(e)}catch{return null}}function nr(e){let t=(e,t)=>Number.isFinite(e)?e:t;return{x:Math.max(0,Math.round(t(e.left,0))),y:Math.max(0,Math.round(t(e.top,0))),width:Math.max(1,Math.round(t(e.width,1))),height:Math.max(1,Math.round(t(e.height,1)))}}var rr=null,ir=null,ar=Promise.resolve();async function or(){return(await i(()=>import(`./core-B3mKBIh5.js`).then(e=>e.i),__vite__mapDeps([0,1]))).invoke}function sr(e){let t=e?.flag??ke,n=e?.tauri??U();return!t||!n?Promise.resolve(!1):(rr||=(async()=>{try{return await(await or())(`browser_supported`)===!0}catch{return rr=null,!1}})(),rr)}async function cr(e){return await sr(e)?(ir||=Z(`browser_capture_supported`).then(e=>e===!0).catch(()=>(ir=null,!1)),ir):!1}async function Z(e,t){return(await or())(e,t)}function lr(e){let t=ar.then(e,e);return ar=t.catch(()=>{}),t}var Q={open:(e,t,n)=>lr(()=>Z(`browser_open`,{ownerId:e,url:t,bounds:n})),navigate:(e,t)=>Z(`browser_navigate`,{ownerId:e,url:t}),back:e=>Z(`browser_back`,{ownerId:e}),forward:e=>Z(`browser_forward`,{ownerId:e}),reload:e=>Z(`browser_reload`,{ownerId:e}),setBounds:(e,t)=>Z(`browser_set_bounds`,{ownerId:e,bounds:t}),show:e=>Z(`browser_show`,{ownerId:e}),hide:e=>Z(`browser_hide`,{ownerId:e}),close:e=>lr(()=>Z(`browser_close`,{ownerId:e})),devtools:e=>Z(`browser_devtools`,{ownerId:e}),zoom:(e,t)=>Z(`browser_zoom`,{ownerId:e,factor:t}),setSelectMode:(e,t)=>Z(`browser_set_select_mode`,{ownerId:e,enabled:t}),selection:e=>Z(`browser_selection`,{ownerId:e}),capture:(e,t)=>Z(`browser_capture`,{ownerId:e,selectionOnly:t}),onEvent:async(e,t)=>{let n=n=>{n.payload.ownerId===e&&t(n.payload)},{listen:r}=await i(async()=>{let{listen:e}=await import(`./event-Bt7f3wXe.js`).then(e=>e.i);return{listen:e}},__vite__mapDeps([3,1,0]));return r($n,n)}},ur=e(r(),1),dr=new Map,fr=new Map;function pr(e,t){let n=(fr.get(e)??Promise.resolve()).catch(()=>{}).then(t);return fr.set(e,n),n.finally(()=>{fr.get(e)===n&&fr.delete(e)}).catch(()=>{}),n}function mr({ownerId:e,leaseRevision:t=0,onBusyChange:n,transferError:r,url:i,onClose:a,onFallback:o,onUrlChange:s,onCaptured:c,confirmLabel:l,selectLabel:u}){let{t:d}=g(`browser`),f=(0,J.useRef)(null),p=(0,J.useRef)(!1),[m,h]=(0,J.useState)(i),[_,v]=(0,J.useState)(i),[y,b]=(0,J.useState)(null),[x,C]=(0,J.useState)(!0),[w,T]=(0,J.useState)(!1),[D,O]=(0,J.useState)(null),[k,A]=(0,J.useState)(!1),[j,ee]=(0,J.useState)(null),[M,te]=(0,J.useState)(!1),[N,ne]=(0,J.useState)(null);(0,J.useEffect)(()=>(n?.(k||j!==null||M||N!==null),()=>{n?.(!1)}),[n,k,j,M,N]);let P=(0,J.useRef)(1),F=(0,J.useRef)(null),I=(0,J.useRef)(!1),re=(0,J.useRef)(!1),L=(0,J.useRef)(!1),R=(0,J.useRef)(null),oe=(0,J.useRef)(i),se=(0,J.useRef)({url:i,onFallback:o,onUrlChange:s});se.current={url:i,onFallback:o,onUrlChange:s},L.current=N!==null;let z=(0,J.useCallback)(async e=>{let t=F.current;if(!(!t||!I.current)){O(null);try{await e(t)}catch(e){F.current===t&&O(e instanceof Error?e.message:String(e))}}},[]);(0,J.useEffect)(()=>{let t=!1,n=null,r=0,i=null,a=e??crypto.randomUUID(),o=Symbol(a);dr.set(a,o);let s=()=>{pr(a,async()=>{dr.get(a)===o&&(dr.delete(a),await Q.close(a))}).catch(()=>{})};F.current=a,I.current=!1,T(!1);let c=()=>{t||r||(r=requestAnimationFrame(()=>{if(r=0,!I.current||L.current||re.current)return;let e=f.current?.getBoundingClientRect();if(!e||e.width<=0||e.height<=0)return;let t=nr(e);JSON.stringify(t)!==JSON.stringify(R.current)&&(R.current=t,Q.setBounds(a,t).catch(()=>{R.current=null}))}))};return(async()=>{try{let e=await Q.onEvent(a,e=>{if(!t){if(e.kind===`resume`){!L.current&&!re.current&&pr(a,async()=>{if(t||dr.get(a)!==o||L.current||re.current)return;let n=f.current?.getBoundingClientRect();n&&await Q.open(a,e.url??oe.current,nr(n))}).catch(e=>{t||O(String(e))});return}e.kind===`nav`&&e.url?(v(e.url),se.current.onUrlChange?.(e.url),ee(null),A(!1),p.current||h(e.url)):e.kind===`title`?b(e.title??null):e.kind===`load-started`?C(!0):e.kind===`load-finished`?(C(!1),e.url&&!p.current&&h(e.url)):e.kind===`popup-error`?O(d(`popup.openFailed`)):e.kind===`popup-opened`&&O(null)}});if(t){e();return}n=e;let r=f.current?.getBoundingClientRect();if(!r)throw Error(`hole not measurable`);oe.current=er(se.current.url)??`about:blank`,R.current=nr(r);let l=R.current;if(!await pr(a,async()=>t||dr.get(a)!==o?!1:(await Q.open(a,oe.current,l),!0)))return;if(t){s();return}I.current=!0,T(!0),i=new ResizeObserver(c),f.current&&i.observe(f.current),window.addEventListener(`resize`,c),window.addEventListener(`scroll`,c,!0),window.visualViewport?.addEventListener(`resize`,c),window.visualViewport?.addEventListener(`scroll`,c),c()}catch{t||se.current.onFallback()}})(),()=>{t=!0,cancelAnimationFrame(r),i?.disconnect(),window.removeEventListener(`resize`,c),window.removeEventListener(`scroll`,c,!0),window.visualViewport?.removeEventListener(`resize`,c),window.visualViewport?.removeEventListener(`scroll`,c),n?.(),F.current===a&&(F.current=null,I.current=!1),s()}},[e,t]),(0,J.useEffect)(()=>{let e=er(i)??`about:blank`;!w||e===oe.current||(oe.current=e,h(e),z(t=>Q.navigate(t,e)))},[i,w,z]);let ce=(0,J.useCallback)(async e=>{let t=F.current;if(!(!t||!I.current||re.current)){re.current=!0,te(!0),O(null);try{let n=await Q.capture(t,e);if(F.current!==t||(await Q.hide(t),F.current!==t))return;L.current=!0,A(!1),ne(n)}catch(e){F.current===t&&O(e instanceof Error?e.message:String(e))}finally{re.current=!1,F.current===t&&te(!1)}}},[]);(0,J.useEffect)(()=>{if(!k||!w)return;let e=F.current,t=!1,n,r=async()=>{try{let n=await Q.selection(e);if(t||F.current!==e)return;if(n){if(await Q.setSelectMode(e,!1),t||F.current!==e)return;ee(n),A(!1),await ce(!0);return}}catch(n){if(t||F.current!==e)return;O(String(n));try{await Q.setSelectMode(e,!1),!t&&F.current===e&&A(!1)}catch(n){!t&&F.current===e&&O(String(n))}return}t||(n=setTimeout(r,200))};return r(),()=>{t=!0,clearTimeout(n)}},[k,w,ce]);let le=async()=>{await z(async e=>{await Q.setSelectMode(e,!k),ee(null),A(!k)})},ue=async()=>{ne(null),await z(async e=>{await new Promise(e=>requestAnimationFrame(()=>e()));let t=f.current?.getBoundingClientRect();t&&t.width>0&&t.height>0&&(R.current=nr(t),await Q.setBounds(e,R.current)),await Q.show(e)})};(0,J.useEffect)(()=>{let e=e=>{e.key===`Escape`&&!L.current&&a()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[a]);let de=(0,J.useCallback)(()=>{let e=er(m);e&&(h(e),z(t=>Q.navigate(t,e)))},[m,z]),fe=(0,J.useCallback)(e=>{P.current=Math.min(3,Math.max(.25,e)),z(e=>Q.zoom(e,P.current))},[z]);return typeof document>`u`?null:(0,ur.createPortal)((0,Y.jsx)(`div`,{className:`fixed inset-0 z-[80] bg-background-deep/60 backdrop-blur-md pointer-events-auto`,onClick:e=>{e.target===e.currentTarget&&!N&&a()},"data-testid":`native-browser-modal`,children:(0,Y.jsxs)(`div`,{className:`absolute inset-x-[4%] inset-y-[3.5%] flex flex-col border border-border/70 rounded-2xl bg-background-deep overflow-hidden shadow-2xl ring-1 ring-black/20`,role:`dialog`,"aria-modal":`true`,"aria-label":d(`modal.dialogLabel`),onClick:e=>e.stopPropagation(),children:[!N&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.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,Y.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(H,{disabled:!w,variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":d(`common:actions.back`),onClick:()=>void z(Q.back),children:(0,Y.jsx)(S,{className:`w-4 h-4`})}),(0,Y.jsx)(H,{disabled:!w,variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":d(`modal.nav.forward`),onClick:()=>void z(Q.forward),children:(0,Y.jsx)(Ie,{className:`w-4 h-4`})}),(0,Y.jsx)(H,{disabled:!w,variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":d(`modal.nav.reload`),onClick:()=>void z(Q.reload),children:(0,Y.jsx)(Xe,{className:`w-4 h-4`})})]}),(0,Y.jsxs)(`form`,{className:`flex-1 flex items-center gap-2 min-w-0`,onSubmit:e=>{e.preventDefault(),de()},children:[(0,Y.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,Y.jsx)(Ge,{className:`w-3.5 h-3.5 text-muted-foreground shrink-0`}),(0,Y.jsx)(`input`,{value:m,onChange:e=>h(e.target.value),onFocus:()=>{p.current=!0},onBlur:()=>{p.current=!1},onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),de())},placeholder:d(`modal.address.placeholder`),"aria-label":d(`modal.address.label`),className:`flex-1 min-w-0 bg-transparent outline-none text-sm`})]}),(0,Y.jsx)(H,{type:`submit`,size:`sm`,variant:`secondary`,className:`shrink-0`,children:d(`modal.address.go`)})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(H,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":d(`native.zoomOut`),title:d(`native.zoomOut`),onClick:()=>fe(P.current-.1),children:(0,Y.jsx)(K,{className:`w-4 h-4`})}),(0,Y.jsx)(H,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":d(`native.zoomIn`),title:d(`native.zoomIn`),onClick:()=>fe(P.current+.1),children:(0,Y.jsx)(tt,{className:`w-4 h-4`})}),(0,Y.jsx)(H,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":d(`native.devtools`),title:d(`native.devtools`),onClick:()=>void z(Q.devtools),children:(0,Y.jsx)(ie,{className:`w-4 h-4`})}),(0,Y.jsx)(H,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":d(`native.openExternal`),title:d(`native.openExternal`),onClick:()=>void ve(_),children:(0,Y.jsx)(E,{className:`w-4 h-4`})}),(0,Y.jsx)(H,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":d(`modal.closeBrowser`),onClick:a,children:(0,Y.jsx)(ae,{className:`w-4 h-4`})})]})]}),(0,Y.jsxs)(`div`,{className:`px-3 py-1 text-[11px] text-muted-foreground truncate shrink-0 flex items-center gap-2`,children:[(0,Y.jsx)(`span`,{className:`inline-block w-2 h-2 rounded-full shrink-0 ${x?`bg-accent-warning animate-pulse`:`bg-accent-success`}`,"aria-hidden":!0}),(0,Y.jsx)(`span`,{className:`truncate`,children:y||_}),(0,Y.jsx)(`span`,{className:`ml-auto shrink-0 rounded-full border border-accent-success/30 bg-accent-success/10 text-accent-success px-2 py-px text-[10px] font-medium`,children:d(`native.badge`)})]}),c&&(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 border-b border-border/50 px-3 py-2 shrink-0`,children:[(0,Y.jsxs)(H,{variant:k?`secondary`:`ghost`,size:`sm`,disabled:!w||M,"aria-pressed":k,onClick:()=>void le(),children:[(0,Y.jsx)(Je,{className:`mr-1.5 h-3.5 w-3.5`}),u??d(`native.selectElement`)]}),(0,Y.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-xs text-muted-foreground`,children:k?d(`native.selectHint`):j?.selector}),(0,Y.jsxs)(H,{variant:`secondary`,size:`sm`,disabled:!w||M||k||_===`about:blank`,onClick:()=>void ce(j!==null),children:[(0,Y.jsx)(Le,{className:`mr-1.5 h-3.5 w-3.5`}),d(M?`native.capturing`:j?`native.captureSelection`:`native.capturePage`)]})]})]}),(D||r)&&(0,Y.jsx)(`div`,{role:`alert`,className:`border-b border-destructive/30 bg-destructive/10 px-3 py-2 text-xs text-destructive shrink-0`,children:D||r}),N&&c&&(0,Y.jsx)(Qn,{screenshotDataUrl:N.screenshotDataUrl,confirmLabel:l,onConfirm:async e=>{await c({...N,screenshotDataUrl:e.screenshotDataUrl})},onReselect:()=>{ue()},onCancel:a}),(0,Y.jsx)(`div`,{ref:f,className:N?`hidden`:`relative flex-1 min-h-0 overflow-hidden`,children:x&&(0,Y.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center text-sm text-muted-foreground`,children:d(`modal.status.opening`)})})]})}),document.body)}function hr(e){let t=e.schedule??(e=>requestAnimationFrame(e)),n=e.cancel??(e=>cancelAnimationFrame(e)),r=e.now??(()=>typeof performance<`u`?performance.now():Date.now()),i=e.release??(()=>{}),a={received:0,decoded:0,drawn:0,droppedStale:0,droppedUndrawn:0,decodeMsTotal:0,drawMsTotal:0},o=!1,s=!1,c=null,l=null,u=null,d=()=>{u=null;let t=l;if(l=null,t==null||o){t!=null&&f(t);return}let n=r();try{e.draw(t),a.drawn++,a.drawMsTotal+=r()-n}catch{}finally{f(t)}},f=e=>{try{i(e)}catch{}},p=()=>{u==null&&!o&&(u=t(d))},m=t=>{s=!0;let n=r();e.decode(t).then(e=>{if(o){f(e);return}a.decoded++,a.decodeMsTotal+=r()-n,l!=null&&(a.droppedUndrawn++,f(l)),l=e,p(),h()},()=>{h()})},h=()=>{if(o){s=!1;return}let e=c;c=null,e==null?s=!1:m(e)};return{push(e){if(!o){if(a.received++,s){c!=null&&a.droppedStale++,c=e;return}m(e)}},stats(){return{...a}},dispose(){if(!o){if(o=!0,c=null,u!=null){try{n(u)}catch{}u=null}l!=null&&(f(l),l=null)}}}}var gr=`specrails-desktop:browser-capture-debug`;function _r(){try{return typeof localStorage<`u`&&localStorage.getItem(gr)===`1`}catch{return!1}}function vr(e,t,n){let r=Math.max(1,n),i=t.decoded-e.decoded,a=t.drawn-e.drawn,o=e=>Math.round(e*10)/10;return{fpsReceived:o((t.received-e.received)*1e3/r),fpsDrawn:o(a*1e3/r),droppedStale:t.droppedStale-e.droppedStale,droppedUndrawn:t.droppedUndrawn-e.droppedUndrawn,avgDecodeMs:i>0?o((t.decodeMsTotal-e.decodeMsTotal)/i):0,avgDrawMs:a>0?o((t.drawMsTotal-e.drawMsTotal)/a):0}}function yr(e,t=e=>console.table([e]),n=2e3,r=()=>Date.now()){let i=e(),a=r(),o=setInterval(()=>{let n=e(),o=r();t(vr(i,n,o-a)),i=n,a=o},n);return()=>clearInterval(o)}function br(e){let{projectId:t,open:n,initialUrl:r}=e,i=(0,J.useRef)(null),a=(0,J.useRef)(null),o=(0,J.useRef)(null),s=(0,J.useRef)(0),c=(0,J.useRef)(0),u=(0,J.useRef)(null),d=(0,J.useRef)(null),f=(0,J.useCallback)(()=>{let e=u.current,t=d.current,n=a.current;if(!(!e||!n||n.readyState!==WebSocket.OPEN)&&!(t&&t.width===e.width&&t.height===e.height&&t.deviceScaleFactor===e.deviceScaleFactor))try{n.send(JSON.stringify({type:`input`,event:{type:`resize`,...e}})),d.current=e}catch{}},[]),p=(0,J.useRef)(0),m=(0,J.useRef)(new Map),h=(0,J.useCallback)(()=>{if(p.current!==0||m.current.size===0)return;let e=[...m.current.values()];m.current.clear();for(let t of e)Dn(t.projectId,t.sessionId)},[]),[g,_]=(0,J.useState)({status:`connecting`,errorMsg:null,url:null,title:null,viewport:{width:1280,height:800},hoverRect:null,hoverSelector:null,hoverPath:null,popup:null,popupError:null});(0,J.useEffect)(()=>{if(!n||!t)return;let e=!1,c=null;d.current=null,_(e=>({...e,status:`connecting`,errorMsg:null,popup:null,popupError:null}));let h=hr({decode:e=>createImageBitmap(new Blob([e],{type:`image/jpeg`})),draw:e=>{let t=i.current;t&&(t.width!==e.width&&(t.width=e.width),t.height!==e.height&&(t.height=e.height),t.getContext(`2d`)?.drawImage(e,0,0))},release:e=>e.close()}),g=_r()?yr(()=>h.stats()):null;return(async()=>{try{let n=await _n(t,r);if(e){Dn(t,n.id);return}c=n.id,o.current={id:n.id,projectId:t},_(e=>({...e,url:n.url,title:n.title,viewport:u.current??{width:n.viewportWidth,height:n.viewportHeight}}));let i=kn(n.id,t);a.current=i,i.onmessage=e=>{if(typeof e.data==`string`){try{let t=JSON.parse(e.data);if(t.type===`ready`)_(e=>({...e,status:`ready`,url:t.url??e.url,title:t.title??e.title,viewport:u.current??t.viewport??e.viewport})),f();else if(t.type===`nav`)_(e=>({...e,url:t.url??e.url,title:t.title??e.title}));else if(t.type===`hover`)_(e=>({...e,hoverRect:t.rect??null,hoverSelector:t.selector??null,hoverPath:t.path??null}));else if(t.type===`popup`){let e=typeof t.count==`number`?t.count:0;s.current+=1,_(n=>({...n,popup:e>0?{count:e,active:t.active===!0,url:t.url??null}:null,popupError:null}))}}catch{}return}h.push(e.data)},i.onopen=()=>{e||(f(),_(e=>({...e,status:`ready`})))},i.onerror=()=>{e||_(e=>({...e,status:`error`,errorMsg:l.t(`browser:session.connectionError`)}))},i.onclose=()=>{e||_(e=>({...e,status:`error`,errorMsg:l.t(`browser:session.lostConnection`)}))}}catch(t){if(e)return;let n=t instanceof hn?l.t(`browser:session.tooManySessions`):t instanceof gn?l.t(`browser:session.launchFailed`):l.t(`browser:session.openFailed`);_(e=>({...e,status:`error`,errorMsg:n}))}})(),()=>{e=!0,g?.(),h.dispose();let n=a.current;if(n){n.onmessage=null,n.onopen=null,n.onerror=null,n.onclose=null;try{n.close()}catch{}}a.current=null;let r=c;r&&o.current?.id===r&&o.current.projectId===t&&(o.current=null),r&&(p.current>0?m.current.set(`${t}\0${r}`,{sessionId:r,projectId:t}):Dn(t,r))}},[n,t,r,h,f]);let v=(0,J.useCallback)(e=>{let t=a.current;if(t&&t.readyState===WebSocket.OPEN)try{t.send(JSON.stringify({type:`input`,event:e}))}catch{}},[]),y=(0,J.useCallback)(async(e,t)=>{let n=o.current;if(n)try{let r=await vn(n.projectId,n.id,e,t);if(o.current!==n)return;r.target!==`popup`&&_(e=>({...e,url:r.url,title:r.title}))}catch{}},[]),b=(0,J.useCallback)(async(e,t,n)=>{let r=o.current;if(!r)throw Error(`No active browser session`);p.current+=1;try{return await yn(r.projectId,r.id,e,t,n)}finally{p.current=Math.max(0,p.current-1),h()}},[h]),x=(0,J.useCallback)(async(e,t,n,r)=>{let i=o.current;if(!i)throw Error(`No active browser session`);p.current+=1;try{return await xn(i.projectId,i.id,e,t,n,r)}finally{p.current=Math.max(0,p.current-1),h()}},[h]),S=(0,J.useCallback)(async(e,t)=>{let n=o.current;return n?Cn(n.projectId,n.id,e,t):{text:``}},[]),C=(0,J.useCallback)((e,t,n=window.devicePixelRatio||1)=>{if(!Number.isFinite(e)||!Number.isFinite(t)||e<=0||t<=0)return;let r=Math.max(1,Math.round(e)),i=Math.max(1,Math.round(t));u.current={width:r,height:i,deviceScaleFactor:Number.isFinite(n)?Math.min(2,Math.max(1,n)):1},_(e=>e.viewport.width===r&&e.viewport.height===i?e:{...e,viewport:{width:r,height:i}}),f()},[f]),w=(0,J.useCallback)(e=>{let t=a.current;if(t&&t.readyState===WebSocket.OPEN)try{t.send(JSON.stringify({type:`probe`,x:e.x,y:e.y}))}catch{}},[]),T=(0,J.useCallback)(()=>{_(e=>e.hoverRect||e.hoverPath?{...e,hoverRect:null,hoverSelector:null,hoverPath:null}:e)},[]),E=(0,J.useCallback)(async(e,t)=>{let n=o.current;return n?wn(n.projectId,n.id,e,t):null},[]),D=(0,J.useCallback)(async e=>{let t=o.current;if(!t)return;let n=s.current,r=++c.current,i=()=>o.current===t&&s.current===n&&c.current===r;try{await Tn(t.projectId,t.id,e),i()&&_(e=>({...e,popupError:null}))}catch{i()&&_(e=>({...e,popupError:l.t(`browser:session.connectionError`)}))}},[]);return{...g,canvasRef:i,forwardInput:v,navigate:y,capture:b,captureBreakpoints:x,clipboard:S,navigateElement:E,setViewport:C,probe:w,clearHover:T,setPopupView:D}}function xr(e,t,n,r){let i=(0,J.useRef)(t);i.current=t,(0,J.useEffect)(()=>{let t=e.current;if(!n||!t)return;let a=!1,o=null,s=0,c=0,l=0,u=null,d=()=>{if(o=null,a)return;let e=r??t.getBoundingClientRect();if(!Number.isFinite(e.width)||!Number.isFinite(e.height)||e.width<=0||e.height<=0)return;let n=Math.max(1,Math.round(e.width)),u=Math.max(1,Math.round(e.height)),d=window.devicePixelRatio,f=Number.isFinite(d)?Math.min(2,Math.max(1,d)):1;n===s&&u===c&&f===l||(s=n,c=u,l=f,i.current(n,u,f))},f=()=>{a||o===null&&(o=requestAnimationFrame(d))},p=()=>{u?.removeEventListener(`change`,m),u=typeof window.matchMedia==`function`?window.matchMedia(`(resolution: ${window.devicePixelRatio||1}dppx)`):null,u?.addEventListener(`change`,m)},m=()=>{f(),p()};d();let h=typeof ResizeObserver>`u`?null:new ResizeObserver(f);return h?.observe(t),window.addEventListener(`resize`,f),p(),()=>{a=!0,o!==null&&cancelAnimationFrame(o),h?.disconnect(),u?.removeEventListener(`change`,m),window.removeEventListener(`resize`,f)}},[e,n,r?.width,r?.height])}function Sr({open:e,url:t,projectId:n,onClose:r}){let[i,a]=(0,J.useState)(`probing`);(0,J.useEffect)(()=>{if(!e||i!==`probing`)return;let t=!0;return sr().then(e=>{t&&a(e?`native`:`screencast`)}),()=>{t=!1}},[e,i]);let o=(0,J.useCallback)(()=>a(`screencast`),[]);return!e||i===`probing`?null:i===`native`?(0,Y.jsx)(mr,{url:t,onClose:r,onFallback:o}):(0,Y.jsx)(Cr,{open:e,url:t,projectId:n,onClose:r})}function Cr({open:e,url:t,projectId:n,onClose:r}){let{t:i}=g(`browser`),a=br({projectId:n,open:e,initialUrl:t}),{canvasRef:o,viewport:s,status:c,errorMsg:l,url:u,title:d,popup:f,popupError:p,setViewport:m}=a,[h,_]=(0,J.useState)(t),v=(0,J.useRef)(null);xr(v,m,e);let y=(0,J.useRef)(a.forwardInput);y.current=a.forwardInput;let b=(0,J.useRef)(null),x=(0,J.useCallback)(()=>(b.current??=An(e=>y.current(e)),b.current),[]);(0,J.useEffect)(()=>()=>{b.current?.dispose(),b.current=null},[]);let C=f?.active?f.url??`about:blank`:u??``;(0,J.useEffect)(()=>{_(C)},[C,f?.active]),(0,J.useEffect)(()=>{if(!e)return;let t=e=>{e.key===`Escape`&&r()};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[e,r]);let w=(0,J.useCallback)((e,t)=>{let n=o.current?.getBoundingClientRect();return n?jn({x:e,y:t},{left:n.left,top:n.top,width:n.width,height:n.height},s):{x:0,y:0}},[o,s]),T=e=>e===2?`right`:e===1?`middle`:`left`,D=(0,J.useCallback)(e=>{let t=w(e.clientX,e.clientY);x().move(t.x,t.y)},[w,x]),O=(0,J.useCallback)(e=>{let t=w(e.clientX,e.clientY),n=x();n.move(t.x,t.y),n.flush(),a.forwardInput({type:`mouse`,action:`down`,x:t.x,y:t.y,button:T(e.button),clickCount:e.detail||1})},[w,a,x]),k=(0,J.useCallback)(e=>{let t=w(e.clientX,e.clientY),n=x();n.move(t.x,t.y),n.flush(),a.forwardInput({type:`mouse`,action:`up`,x:t.x,y:t.y,button:T(e.button),clickCount:e.detail||1})},[w,a,x]),A=(0,J.useCallback)(e=>{let t=w(e.clientX,e.clientY);x().wheel(t.x,t.y,e.deltaX,e.deltaY)},[w,x]),j=(0,J.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]),ee=(0,J.useCallback)(e=>{e.key!==`Escape`&&a.forwardInput({type:`key`,action:`up`,key:e.key,code:e.code})},[a]),M=(0,J.useCallback)(()=>{a.navigate(`goto`,h)},[a,h]);return!e||typeof document>`u`?null:(0,ur.createPortal)((0,Y.jsx)(`div`,{className:`fixed inset-0 z-[80] bg-background-deep/60 backdrop-blur-md pointer-events-auto`,onClick:e=>{e.target===e.currentTarget&&r()},"data-testid":`webview-modal`,children:(0,Y.jsxs)(`div`,{className:`absolute inset-x-[4%] inset-y-[3.5%] flex flex-col border border-border/70 rounded-2xl bg-background-deep overflow-hidden shadow-2xl ring-1 ring-black/20`,role:`dialog`,"aria-modal":`true`,"aria-label":i(`modal.dialogLabel`),onClick:e=>e.stopPropagation(),children:[(0,Y.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,Y.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(H,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":i(`common:actions.back`),onClick:()=>a.navigate(`back`),children:(0,Y.jsx)(S,{className:`w-4 h-4`})}),(0,Y.jsx)(H,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":i(`modal.nav.forward`),onClick:()=>a.navigate(`forward`),children:(0,Y.jsx)(Ie,{className:`w-4 h-4`})}),(0,Y.jsx)(H,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":i(`modal.nav.reload`),onClick:()=>a.navigate(`reload`),children:(0,Y.jsx)(Xe,{className:`w-4 h-4`})})]}),(0,Y.jsxs)(`form`,{className:`flex-1 flex items-center gap-2 min-w-0`,onSubmit:e=>{e.preventDefault(),M()},children:[(0,Y.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,Y.jsx)(Ge,{className:`w-3.5 h-3.5 text-muted-foreground shrink-0`}),(0,Y.jsx)(`input`,{value:h,onChange:e=>_(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),M())},placeholder:i(`modal.address.placeholder`),"aria-label":i(`modal.address.label`),className:`flex-1 min-w-0 bg-transparent outline-none text-sm`})]}),(0,Y.jsx)(H,{type:`submit`,size:`sm`,variant:`secondary`,className:`shrink-0`,disabled:c===`error`,children:i(`modal.address.go`)})]}),(0,Y.jsx)(H,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":i(`modal.closeBrowser`),onClick:r,children:(0,Y.jsx)(ae,{className:`w-4 h-4`})})]}),(0,Y.jsxs)(`div`,{className:`px-3 py-1 text-[11px] text-muted-foreground truncate shrink-0 flex items-center gap-2`,children:[(0,Y.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,Y.jsx)(`span`,{className:`truncate`,children:c===`connecting`?i(`modal.status.connecting`):c===`error`?l??i(`modal.status.unavailable`):f?.active?i(`popup.loginWindow`,{origin:En(f.url)}):d||``})]}),p&&(0,Y.jsx)(`div`,{role:`alert`,className:`px-3 py-1.5 text-xs text-destructive border-b border-border/40 shrink-0`,children:p}),f&&(0,Y.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,Y.jsx)(E,{className:`w-3.5 h-3.5 shrink-0`}),f.active?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`span`,{className:`truncate font-medium`,children:i(`popup.loginWindow`,{origin:En(f.url)})}),f.count>1&&(0,Y.jsx)(`span`,{className:`shrink-0 opacity-70`,children:i(`popup.stacked`,{count:f.count-1})}),(0,Y.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,Y.jsx)(S,{className:`w-3 h-3`}),i(`popup.backToPage`)]})]}):(0,Y.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,Y.jsx)(`span`,{className:`opacity-70`,children:i(`popup.stacked`,{count:f.count-1})})]})]}),(0,Y.jsx)(`div`,{ref:v,className:`relative flex-1 min-h-0 overflow-hidden flex items-center justify-center outline-none`,tabIndex:0,onKeyDown:j,onKeyUp:ee,children:c===`error`?(0,Y.jsxs)(`div`,{className:`flex flex-col items-center gap-2 text-center max-w-md px-6`,children:[(0,Y.jsx)(L,{className:`w-8 h-8 text-accent-warning`}),(0,Y.jsx)(`p`,{className:`text-sm text-foreground/90`,children:l??i(`modal.error.unavailable`)})]}):(0,Y.jsx)(`canvas`,{ref:o,style:{maxWidth:`min(100%, ${s.width}px)`,maxHeight:`min(100%, ${s.height}px)`},className:`max-w-full max-h-full block shadow-2xl cursor-default`,onPointerMove:D,onPointerDown:O,onPointerUp:k,onContextMenu:e=>e.preventDefault(),onWheel:A})})]})}),document.body)}var wr=(0,J.createContext)(null);function Tr({children:e}){let{activeProjectId:t}=y(),[n,r]=(0,J.useState)(null),i=(0,J.useCallback)(e=>r(e),[]),a=pn();return(0,Y.jsxs)(wr.Provider,{value:{openWebView:i,canOpenWebView:a&&!!t},children:[e,a&&n&&t&&(0,Y.jsx)(Sr,{open:!0,url:n,projectId:t,onClose:()=>r(null)})]})}function Er(){return(0,J.useContext)(wr)??{openWebView:()=>{},canOpenWebView:!1}}var Dr={analyzing:`activity:smash.stage.analyzing`,identifying:`activity:smash.stage.identifying`,ordering:`activity:smash.stage.ordering`},Or=(0,J.createContext)(null);function $(e){return`smash:${e}`}async function kr(e,t){try{let n=await fetch(`${u}/api/projects/${e}/tickets/${t}/smash`,{method:`POST`});if(n.ok)b.loading(l.t(`activity:smash.retrying`),{id:$(t)});else{let e=await n.json().catch(()=>({}));b.error(e.reason?l.t(`activity:smash.couldNotRetryWithReason`,{reason:e.reason}):l.t(`activity:smash.couldNotRetry`),{id:$(t)})}}catch(e){b.error(l.t(`activity:smash.retryFailed`,{message:e.message}),{id:$(t)})}}async function Ar(e,t,n){try{let r=await fetch(`${u}/api/projects/${e}/tickets/${t}/smash/undo`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({smashedAt:n})});if(r.ok)b.success(l.t(`activity:smash.undone`),{id:$(t),duration:3e3});else{let e=await r.json().catch(()=>({}));b.error(e.reason?l.t(`activity:smash.undoFailedWithReason`,{reason:e.reason}):l.t(`activity:smash.undoFailed`),{id:$(t)})}}catch(e){b.error(l.t(`activity:smash.undoFailedWithReason`,{reason:e.message}),{id:$(t)})}}function jr({children:e}){let{registerHandler:t,unregisterHandler:n}=f(),[r,i]=(0,J.useState)({}),a=(0,J.useRef)(new Map),o=(0,J.useRef)(new Map),s=(0,J.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}})),b.loading(l.t(Dr.analyzing),{id:$(n),description:c?l.t(`activity:smash.onTitled`,{title:c}):l.t(`activity:smash.onThisSpec`)}))},[]),c=(0,J.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}),b.loading(l.t(Dr[r]),{id:$(n),description:a?l.t(`activity:smash.onTitled`,{title:a}):l.t(`activity:smash.onThisSpec`)})},[]),u=(0,J.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}),b.success(l.t(`activity:smash.split`,{count:c.length}),{id:$(n),duration:1e4,action:{label:l.t(`activity:smash.undoAction`),onClick:()=>void Ar(a,n,s)}}))},[]),d=(0,J.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`?l.t(`activity:smash.failReason.invalidOutput`):o===`timeout`?l.t(`activity:smash.failReason.timeout`):o===`model_error`?l.t(`activity:smash.failReason.modelError`):o===`crashed`?l.t(`activity:smash.failReason.crashed`):l.t(`activity:smash.failReason.generic`,{reason:o});b.error(l.t(`activity:smash.couldNotComplete`),{id:$(n),description:s,action:{label:l.t(`common:actions.retry`),onClick:()=>void kr(r,n)},duration:15e3})},[]),p=(0,J.useCallback)(e=>{let t=e;if(!t||t.type!==`smash.undone`)return;let n=t.ticketId;typeof n==`number`&&(b.dismiss($(n)),b.success(l.t(`activity:smash.undone`),{id:$(n),duration:3e3}))},[]);(0,J.useLayoutEffect)(()=>(t(`_smash_started`,s),t(`_smash_progress`,c),t(`_smash_completed`,u),t(`_smash_failed`,d),t(`_smash_undone`,p),()=>{n(`_smash_started`),n(`_smash_progress`),n(`_smash_completed`),n(`_smash_failed`),n(`_smash_undone`)}),[t,n,s,c,u,d,p]),(0,J.useEffect)(()=>()=>{a.current.clear(),o.current.clear()},[]);let m=(0,J.useMemo)(()=>({inflight:r}),[r]);return(0,Y.jsx)(Or.Provider,{value:m,children:e})}function Mr(e){let t=(0,J.useContext)(Or);return!t||e==null?null:t.inflight[e]??null}var Nr=150,Pr={analyzing:0,identifying:1,ordering:2},Fr={analyzing:`smash.stage.analyzing`,identifying:`smash.stage.identifying`,ordering:`smash.stage.ordering`};function Ir({stage:e,minDisplayMs:t=Nr}){let{t:n}=g(`activity`),[r,i]=(0,J.useState)(e),a=(0,J.useRef)(Date.now()),o=(0,J.useRef)(null);if((0,J.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=Pr[r];return(0,Y.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,Y.jsx)(te,{className:`h-4 w-4 animate-spin text-accent-highlight`,"aria-hidden":!0}),(0,Y.jsx)(`div`,{className:`flex items-center gap-1.5`,children:[`analyzing`,`identifying`,`ordering`].map(e=>(0,Y.jsx)(`span`,{className:[`inline-block w-1.5 h-1.5 rounded-full transition-all`,Pr[e]<=s?`bg-accent-highlight`:`bg-muted`,e===r?`scale-125`:`scale-100`].join(` `),"aria-hidden":!0},e))}),(0,Y.jsx)(`span`,{className:`font-medium`,children:n(Fr[r])})]})}var Lr={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 Rr({open:e,ticketTitle:t,isReSmash:n,childrenCount:r,submitting:i=!1,onCancel:a,onConfirm:o}){let{t:s}=g(`activity`),[c,l]=(0,J.useState)(`simple`),{panelRef:u,panelStyle:d,headerHandleProps:f,resizeHandles:p,isFloating:m,guardBackdrop:_}=oe();return e?(0,ur.createPortal)((0,Y.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,Y.jsx)(`div`,{className:`absolute inset-0 bg-black/60 backdrop-blur-sm`,onClick:_(a)}),(0,Y.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,Y.jsxs)(`div`,{...f,className:`flex items-start justify-between gap-3 px-5 py-4 border-b border-border/30 ${m?`cursor-grab active:cursor-grabbing`:``}`,children:[(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 min-w-0`,children:[(0,Y.jsx)(Ze,{className:`w-5 h-5 text-accent-highlight shrink-0 mt-0.5`,"aria-hidden":!0}),(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`h2`,{className:`text-sm font-semibold text-foreground`,children:s(`smashModal.title`)}),(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground truncate`,title:t,children:t})]})]}),(0,Y.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,Y.jsx)(ae,{className:`w-4 h-4`})})]}),n&&r>0&&(0,Y.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,Y.jsx)(h,{t:s,i18nKey:`smashModal.reSmashWarning`,count:r})}),(0,Y.jsxs)(`div`,{className:`px-5 py-4 space-y-3`,children:[(0,Y.jsx)(`p`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground font-medium`,children:s(`smashModal.modePickerLabel`)}),[`simple`,`full`].map(e=>{let t=Lr[e],n=c===e;return(0,Y.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,Y.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Y.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,Y.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mb-1`,children:[(0,Y.jsxs)(`span`,{className:`flex items-center gap-1.5 text-sm font-semibold text-foreground`,children:[e===`full`&&(0,Y.jsx)(R,{className:`w-3.5 h-3.5 text-accent-highlight`,"aria-hidden":!0}),s(t.titleKey)]}),(0,Y.jsx)(`span`,{className:`text-[10px] text-muted-foreground tabular-nums`,children:s(t.etaKey)})]}),(0,Y.jsx)(`ul`,{className:`space-y-0.5`,children:t.bulletKeys.map(e=>(0,Y.jsxs)(`li`,{className:`text-[11px] text-foreground/70 leading-snug`,children:[`• `,s(e)]},e))})]})]})},e)})]}),(0,Y.jsxs)(`div`,{className:`flex items-center justify-end gap-2 px-5 py-3 border-t border-border/30 bg-surface/20`,children:[(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:a,disabled:i,children:s(`common:actions.cancel`)}),(0,Y.jsxs)(H,{size:`sm`,onClick:()=>o(c),disabled:i,"data-testid":`smash-confirm-modal-continue`,children:[(0,Y.jsx)(Ze,{className:`w-3.5 h-3.5 mr-1.5`}),s(i?`smashModal.starting`:n?`smashModal.confirmReSmash`:`smashModal.smash`)]})]})]}),(0,Y.jsx)(le,{handles:p})]}),document.body):null}var zr=`## Contract Layer`;function Br(e,t){return!(!t||e.status===`draft`||e.parent_epic_id!=null||!e.description?.includes(zr))}function Vr({ticket:e,projectId:t,provider:n,featureFlagOn:r,childrenCount:i}){let{t:a}=g(`activity`),o=Mr(e.id),[s,c]=(0,J.useState)(!1),[l,d]=(0,J.useState)(!1),[f,p]=(0,J.useState)(e.origin_conversation_id?void 0:null);(0,J.useEffect)(()=>{let r=e.origin_conversation_id;if(!r){p(null);return}let i=!1;return p(void 0),fetch(`${u}/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||p(t.conversation?.provider??n??null)}).catch(()=>{i||p(null)}),()=>{i=!0}},[t,n,e.origin_conversation_id]);let m=e.origin_conversation_id?f:n,h=r&&x(m),_=e.is_epic===!0,v=!_&&Br(e,h),y=_&&h,S=_&&i>0,C=(0,J.useCallback)(async n=>{if(h){d(!0);try{let r=await fetch(`${u}/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(()=>({}));b.error(e.reason?a(`smash.couldNotStartWithReason`,{reason:e.reason}):a(`smash.couldNotStart`));return}c(!1)}catch(e){b.error(a(`smash.smashFailed`,{message:e.message}))}finally{d(!1)}}},[t,e.id,a,h]),w=(0,J.useCallback)(async n=>{if(h){if(S){d(!0);try{if(!(await fetch(`${u}/api/projects/${t}/tickets/${e.id}/children`,{method:`DELETE`})).ok){b.error(a(`smash.couldNotDeleteChildren`)),d(!1);return}}catch(e){b.error(a(`smash.deleteFailed`,{message:e.message})),d(!1);return}}await C(n)}},[S,C,t,e.id,a,h]);return!v&&!y?null:o?(0,Y.jsx)(`div`,{className:`flex flex-col gap-2`,"data-testid":`smash-actions-streaming`,children:(0,Y.jsx)(Ir,{stage:o.stage})}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(H,{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,Y.jsx)(Ze,{className:`w-3.5 h-3.5 mr-1.5`}),a(y?`smash.reSmashButton`:`smash.smashButton`)]}),(0,Y.jsx)(Rr,{open:s,ticketTitle:e.title,isReSmash:S,childrenCount:i,submitting:l,onCancel:()=>c(!1),onConfirm:w})]})}function Hr({epic:e,childExecutionOrder:t,totalChildren:n,onOpenEpic:r}){let{t:i}=g(`activity`);return(0,Y.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,Y.jsxs)(`button`,{type:`button`,onClick:r,className:`text-accent-secondary hover:underline font-medium`,children:[`← `,e.title]}),t!=null&&n>0&&(0,Y.jsx)(`span`,{className:`text-foreground/60`,children:i(`epicChildren.step`,{order:t,total:n})})]})}var Ur={critical:`bg-red-400`,high:`bg-orange-400`,medium:`bg-yellow-400`,low:`bg-slate-400`};function Wr(e){return e?Ur[e]:`bg-muted`}function Gr(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 Kr({ticket:e,allTickets:t,onOpenTicket:n}){let{t:r}=g(`activity`),i=e.is_epic===!0,a=e.parent_epic_id!=null;if(!i&&!a)return null;if(i){let i=Gr(t.filter(t=>t.parent_epic_id===e.id));return(0,Y.jsx)(qr,{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=Gr(t.filter(t=>t.parent_epic_id===e.parent_epic_id)),c=o?[o,...s]:s;return(0,Y.jsx)(qr,{header:r(`family.familyHeader`,{count:s.length}),rows:c,currentId:e.id,onOpenTicket:n,emptyMessage:r(`family.noSiblings`)})}function qr({header:e,rows:t,currentId:n,onOpenTicket:r,emptyMessage:i}){let{t:a}=g(`activity`);return(0,Y.jsxs)(`div`,{"data-testid":`epic-family-sidebar`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 mb-1.5`,children:[(0,Y.jsx)(Ze,{className:`w-3 h-3 text-accent-highlight`,"aria-hidden":!0}),(0,Y.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider`,children:e})]}),t.length===0?(0,Y.jsx)(`p`,{className:`text-[10px] text-foreground/50 italic`,children:i}):(0,Y.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,Y.jsx)(`li`,{children:(0,Y.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,Y.jsx)(D,{className:`w-3 h-3 text-accent-highlight flex-shrink-0`,"aria-hidden":!0}):(0,Y.jsx)(`span`,{className:`text-[9px] tabular-nums text-foreground/40 w-3 text-center flex-shrink-0`,children:e.execution_order??`–`}),(0,Y.jsx)(`span`,{className:`inline-block w-1.5 h-1.5 rounded-full flex-shrink-0 ${Wr(e.priority)}`,"aria-hidden":!0}),(0,Y.jsx)(`span`,{className:`text-[11px] truncate ${t?`text-foreground font-medium`:`text-foreground/80`}`,title:e.title,children:e.title})]})},e.id)})})]})}var Jr=224,Yr=8,Xr=8;function Zr({rails:e,onMoveToRail:t,onClose:n,anchorRect:r}){let{t:i}=g(`tickets`),a=(0,J.useRef)(null),[o,s]=(0,J.useState)(!1);(0,J.useLayoutEffect)(()=>{let e=requestAnimationFrame(()=>s(!0));return()=>cancelAnimationFrame(e)},[]),(0,J.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,J.useMemo)(()=>{let e=r.left+r.width/2,t=e-Jr/2,n=window.innerWidth-Jr-Yr,i=Math.max(Yr,Math.min(n,t)),a=e-i,o=Math.max(12,Math.min(Jr-12,a));return{top:r.bottom+Xr,left:i,caretLeft:o}},[r]);return(0,Y.jsxs)(`div`,{ref:a,role:`dialog`,"aria-label":i(`rail.popoverTitle`),"data-testid":`move-to-rail-popover`,style:{top:c,left:l,width:Jr,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,Y.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,Y.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,Y.jsx)(`div`,{className:`px-2 py-2 text-xs text-muted-foreground`,children:i(`rail.noRails`)}):(0,Y.jsx)(`ul`,{className:`flex flex-col`,children:e.map(e=>(0,Y.jsx)(`li`,{children:(0,Y.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,Y.jsx)(ne,{className:`w-3 h-3 text-accent-success animate-pulse shrink-0`,"aria-hidden":!0}):(0,Y.jsx)(ze,{className:`w-3 h-3 text-muted-foreground/60 shrink-0`,"aria-hidden":!0}),(0,Y.jsx)(`span`,{className:`flex-1 truncate`,children:e.label}),(0,Y.jsx)(Re,{className:`w-3.5 h-3.5 text-muted-foreground/40 shrink-0`,"aria-hidden":!0})]})},e.id))})]})}var Qr=900,$r=.2,ei=[`todo`,`in_progress`,`done`,`cancelled`],ti={draft:`ticketStatus.draft`,todo:`ticketStatus.todo`,in_progress:`ticketStatus.inProgress`,on_review:`ticketStatus.onReview`,done:`ticketStatus.done`,cancelled:`ticketStatus.cancelled`},ni=[{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 ri(e){return e.jira_epic_key&&e.jira_url?e.jira_url.replace(/\/browse\/[^/]+$/,`/browse/${e.jira_epic_key}`):null}var ii={manual:`source.manual`,"product-backlog":`source.productBacklog`,"propose-spec":`source.proposeSpec`,"get-backlog-specs":`source.getBacklogSpecs`,"free-prompt":`source.freePrompt`};function ai({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}=g(`tickets`),{t:f}=g(`jira`),{activeProjectId:p,projects:m}=y(),{enterSplit:_,state:v}=Oi(),S=v.originSide!==null,w=m.find(e=>e.id===p)?.provider,T=x(w),D=(0,J.useMemo)(()=>(n??[]).filter(t=>t.parent_epic_id===e.id),[n,e.id]),O=(0,J.useMemo)(()=>e.parent_epic_id==null?null:(n??[]).find(t=>t.id===e.parent_epic_id)??null,[n,e.parent_epic_id]),k=(0,J.useMemo)(()=>O?(n??[]).filter(e=>e.parent_epic_id===O.id).length:0,[n,O]),[j,ee]=(0,J.useState)(e.title),[M,ne]=(0,J.useState)(e.description),[P,I]=(0,J.useState)(e.priority??`medium`),[L,ie]=(0,J.useState)([...e.labels??[]]),[R,B]=(0,J.useState)(e.repositoryIds),[me,he]=(0,J.useState)(!1),[V,U]=(0,J.useState)(!1),[W,ye]=(0,J.useState)(``),[be,xe]=(0,J.useState)(!1),[Se,Ce]=(0,J.useState)(!1),[we,Te]=(0,J.useState)(!1),[Ee,De]=(0,J.useState)(!1),[Oe,ke]=(0,J.useState)(!1),[Ae,je]=(0,J.useState)(!1),Me=nn(),Ne=Me.connected&&!!Me.discardStatus&&e.source===`jira`&&!!e.jira_key,Pe=Me.connected&&e.source===`jira`&&!!e.jira_key,[Fe,Le]=(0,J.useState)(e.attachments??[]);(0,J.useEffect)(()=>{Le(e.attachments??[])},[e.attachments,e.id]);let[Re,ze]=(0,J.useState)(!1),[Ve,He]=(0,J.useState)(null);(0,J.useEffect)(()=>{if(!Pe)return;let e=!0;return ge.listStatuses().then(t=>{e&&He(t.statuses)}).catch(()=>{e&&He([])}),()=>{e=!1}},[Pe,e.id]);let G=e.jira_status??``,Ue=async t=>{if(t!==e.status){ze(!0);try{await a(e.id,{status:t})}finally{ze(!1)}}},We=async t=>{if(!(!t||t===G)){ze(!0);try{await ge.moveSpecToStatus(e.id,t),b.success(f(`moveToStatus.queued`,{status:t}))}catch{b.error(f(`moveToStatus.failed`))}finally{ze(!1)}}},Ge=(0,J.useRef)(null),Ke=(0,J.useRef)(null),qe=(0,J.useRef)(null),Je=(0,J.useMemo)(()=>j!==e.title||M!==e.description||P!==e.priority||JSON.stringify(L)!==JSON.stringify(e.labels)||JSON.stringify(R)!==JSON.stringify(e.repositoryIds),[j,M,P,L,R,e]);(0,J.useEffect)(()=>{me&&Ge.current?.focus()},[me]),(0,J.useEffect)(()=>{if(V){let e=Ke.current;e&&(e.focus(),e.selectionStart=e.value.length)}},[V]),(0,J.useEffect)(()=>{be&&qe.current?.focus()},[be]),(0,J.useEffect)(()=>{function e(e){e.key===`Escape`&&!me&&!V&&!Se&&r()}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[r,me,V,Se]);let Ye=(0,J.useMemo)(()=>{if(!W.trim())return[];let e=W.toLowerCase();return t.filter(t=>t.toLowerCase().includes(e)&&!L.includes(t)).slice(0,5)},[W,t,L]),Xe=(0,J.useCallback)(e=>{let t=e.trim();t&&!L.includes(t)&&ie(e=>[...e,t]),ye(``)},[L]),Ze=(0,J.useCallback)(e=>{ie(t=>t.filter(t=>t!==e))},[]),Qe=(0,J.useCallback)(async()=>{let t={};if(j!==e.title&&(t.title=j),M!==e.description&&(t.description=M),P!==e.priority&&(t.priority=P),JSON.stringify(L)!==JSON.stringify(e.labels)&&(t.labels=L),JSON.stringify(R)!==JSON.stringify(e.repositoryIds)&&(t.repositoryIds=R),Object.keys(t).length===0){r();return}ke(!0);let n=await a(e.id,t);ke(!1),n?(b.success(d(`detailModal.toast.updated`)),r()):b.error(d(`detailModal.toast.updateFailed`))},[j,M,P,L,R,e,a,r,d]),$e=(0,J.useCallback)(async()=>{if(Ae)return;je(!0);let t=!1;try{t=await o(e.id)}catch{t=!1}if(je(!1),!t){b.error(d(`detailModal.toast.deleteFailed`));return}Ce(!1),r()},[Ae,e.id,o,r,d]),[et,tt]=(0,J.useState)(0),K=(0,J.useRef)(null),[nt,rt]=(0,J.useState)(()=>typeof window<`u`&&window.innerWidth>=Qr);(0,J.useEffect)(()=>{if(typeof window>`u`)return;let e=()=>rt(window.innerWidth>=Qr);return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]);let it=!u&&!S&&nt,at=(0,J.useCallback)(e=>{K.current&&tt(e.clientX-K.current.startX)},[]),q=(0,J.useCallback)(t=>{if(!K.current)return;let n=t.clientX-K.current.startX,i=window.innerWidth*$r;if(window.removeEventListener(`pointermove`,at),window.removeEventListener(`pointerup`,q),window.removeEventListener(`pointercancel`,q),K.current=null,tt(0),Math.abs(n)>=i&&window.innerWidth>=Qr){let t=v.leftId===e.id;_(n<0?`left`:`right`,e.id),t||r()}},[_,at,v.leftId,e.id,r]),ot=(0,J.useCallback)(e=>{it&&e.button===0&&(e.target.closest(`button, input, textarea, select, [contenteditable="true"]`)||(K.current={startX:e.clientX,pointerId:e.pointerId},window.addEventListener(`pointermove`,at),window.addEventListener(`pointerup`,q),window.addEventListener(`pointercancel`,q)))},[it,at,q]);(0,J.useEffect)(()=>()=>{K.current&&(window.removeEventListener(`pointermove`,at),window.removeEventListener(`pointerup`,q),window.removeEventListener(`pointercancel`,q))},[at,q]);let st=(0,J.useCallback)(()=>{if(!it||window.innerWidth<Qr)return;let t=v.leftId===e.id;_(`right`,e.id),t||r()},[it,_,v.leftId,e.id,r]),{panelRef:ct,panelStyle:lt,resizeHandles:ut,guardBackdrop:dt}=oe({enabled:!u,allowMove:!1}),ft=(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`div`,{ref:ct,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] max-h-[calc(100%-2rem)]`,style:{...et===0?{transition:`transform 220ms cubic-bezier(0.34, 1.56, 0.64, 1)`}:{transform:`translateX(${et}px)`,transition:`none`},...lt},children:[O&&(0,Y.jsx)(`div`,{className:`px-5 pt-3`,children:(0,Y.jsx)(Hr,{epic:O,childExecutionOrder:e.execution_order??null,totalChildren:k,onOpenEpic:()=>i?.(O.id)})}),(0,Y.jsxs)(`div`,{className:`flex items-start justify-between gap-3 px-5 py-4 border-b border-border/30 ${it?`cursor-grab active:cursor-grabbing`:``}`,onPointerDown:ot,"data-testid":`ticket-modal-header`,children:[(0,Y.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[me?(0,Y.jsx)(`input`,{ref:Ge,value:j,onChange:e=>ee(e.target.value),onBlur:()=>he(!1),onKeyDown:t=>{t.key===`Enter`&&he(!1),t.key===`Escape`&&(ee(e.title),he(!1))},className:`w-full bg-transparent border-b border-accent-primary/50 text-sm font-semibold text-foreground outline-none pb-0.5`}):(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>he(!0),className:`group flex items-center gap-1.5 text-left w-full`,children:[(0,Y.jsx)(`h2`,{className:`text-sm font-semibold text-foreground truncate`,children:j||d(`untitled`)}),(0,Y.jsx)(N,{className:`w-3 h-3 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity shrink-0`})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 mt-1.5`,children:[(0,Y.jsxs)(`span`,{className:`text-[10px] text-foreground font-mono`,children:[`#`,e.id]}),e.status===`on_review`&&(0,Y.jsx)(`span`,{title:d(`specs:status.onReviewHint`),"data-testid":`ticket-modal-on-review-badge`,children:(0,Y.jsx)(tn,{status:`on_review`})})]}),(0,Y.jsx)(Qt,{ticketId:e.id})]}),p&&(0,Y.jsx)(`div`,{className:`shrink-0`,children:(0,Y.jsx)(Vr,{ticket:e,projectId:p,provider:w,featureFlagOn:T,childrenCount:D.length})}),(0,Y.jsx)(si,{ticket:e,title:j,description:M,priority:P,labels:L,repositoryIds:R,onClose:r}),s&&(c||l)&&(0,Y.jsx)(ci,{ticket:e,rails:s,onMoveToRail:c,onRemoveFromRail:l}),it&&(0,Y.jsxs)(H,{variant:`outline`,size:`sm`,className:`shrink-0 mr-1 gap-1.5`,"data-testid":`ticket-modal-compare`,onClick:st,title:d(`detailModal.compareTooltip`),children:[(0,Y.jsx)(Be,{className:`w-3.5 h-3.5`}),d(`detailModal.compare`)]}),(0,Y.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,Y.jsx)(ae,{className:`w-4 h-4`})})]}),(0,Y.jsx)(`div`,{className:`flex-1 overflow-y-auto min-h-0`,children:(0,Y.jsxs)(`div`,{className:`flex flex-col sm:flex-row h-full`,children:[(0,Y.jsxs)(`div`,{className:`flex-1 min-w-0 px-5 py-4 space-y-4 flex flex-col`,children:[(0,Y.jsxs)(`div`,{className:`flex-1 flex flex-col`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between mb-1.5`,children:[(0,Y.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider flex items-center gap-1.5`,children:d(`fields.description`)}),!V&&(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>U(!0),className:`text-[10px] text-muted-foreground hover:text-foreground transition-colors flex items-center gap-1`,children:[(0,Y.jsx)(N,{className:`w-2.5 h-2.5`}),d(`common:actions.edit`)]})]}),V?(0,Y.jsxs)(`div`,{className:`space-y-1.5 flex-1 flex flex-col`,children:[(0,Y.jsx)(`textarea`,{ref:Ke,value:M,onChange:e=>ne(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,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,className:`h-6 text-[10px]`,onClick:()=>U(!1),children:d(`detailModal.doneEditing`)}),(0,Y.jsx)(`span`,{className:`text-[9px] text-muted-foreground`,children:d(`fields.supportsMarkdown`)})]})]}):M?(0,Y.jsx)(fi,{description:M,onEdit:()=>U(!0)}):(0,Y.jsx)(`button`,{type:`button`,onClick:()=>U(!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,Y.jsx)(Jt,{ticketKey:e.id,attachments:Fe,onChange:Le}),(0,Y.jsx)(Yt,{ticketId:e.id,onClose:r}),e.prerequisites&&e.prerequisites.length>0&&(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:d(`detailModal.prerequisites`)}),(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:e.prerequisites.map(e=>(0,Y.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,Y.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,Y.jsxs)(`button`,{type:`button`,onClick:()=>{ve(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,Y.jsx)(E,{className:`w-3.5 h-3.5 shrink-0`}),f(`detail.goToTicket`,{key:e.jira_key})]}),e.jira_epic_key&&(0,Y.jsxs)(`div`,{"data-testid":`jira-epic`,children:[(0,Y.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:f(`detail.epic`)}),(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>{let t=ri(e);t&&ve(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,Y.jsx)(`span`,{className:`font-mono text-accent-highlight shrink-0`,children:e.jira_epic_key}),e.jira_epic_name&&(0,Y.jsx)(`span`,{className:`truncate text-foreground/80`,children:e.jira_epic_name})]})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:d(`fields.status`)}),Pe?(0,Y.jsx)(`select`,{value:G,disabled:Re||Ve===null,onChange:e=>{We(e.target.value)},className:`w-full h-7 rounded border border-border bg-input px-2 text-xs text-foreground disabled:opacity-60`,"data-testid":`ticket-jira-status-select`,children:Ve===null?(0,Y.jsx)(`option`,{value:G,children:G||d(`states.loading`,{ns:`common`})}):(0,Y.jsxs)(Y.Fragment,{children:[G&&!Ve.some(e=>e.name===G)&&(0,Y.jsx)(`option`,{value:G,children:G}),Ve.map(e=>(0,Y.jsx)(`option`,{value:e.name,children:e.name},e.name))]})}):(0,Y.jsxs)(`select`,{value:e.status,disabled:Re,onChange:e=>{Ue(e.target.value)},className:`w-full h-7 rounded border border-border bg-input px-2 text-xs text-foreground disabled:opacity-60`,"data-testid":`ticket-status-select`,children:[!ei.includes(e.status)&&(0,Y.jsx)(`option`,{value:e.status,children:d(ti[e.status],{ns:`tickets`})}),ei.map(e=>(0,Y.jsx)(`option`,{value:e,children:d(ti[e],{ns:`tickets`})},e))]})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:d(`fields.priority`)}),(0,Y.jsx)(`select`,{value:P,onChange:e=>I(e.target.value),className:`w-full h-7 rounded border border-border bg-input px-2 text-xs text-foreground`,children:ni.map(e=>(0,Y.jsx)(`option`,{value:e.value,children:d(e.labelKey)},e.value))})]}),(0,Y.jsx)(_e,{value:R,onChange:B,disabled:Oe}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:d(`fields.labels`)}),(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1 mb-1.5`,children:L.map(e=>(0,Y.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,Y.jsx)(`button`,{type:`button`,onClick:()=>Ze(e),className:`text-muted-foreground hover:text-foreground opacity-0 group-hover:opacity-100 transition-opacity`,children:(0,Y.jsx)(A,{className:`w-2.5 h-2.5`})})]},e))}),be?(0,Y.jsxs)(`div`,{className:`relative`,children:[(0,Y.jsx)(`input`,{ref:qe,value:W,onChange:e=>ye(e.target.value),onKeyDown:e=>{e.key===`Enter`&&W.trim()&&(e.preventDefault(),Xe(W)),e.key===`Escape`&&(xe(!1),ye(``))},onBlur:()=>{W.trim()&&Xe(W),xe(!1),ye(``)},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`}),Ye.length>0&&(0,Y.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:Ye.map(e=>(0,Y.jsx)(`button`,{type:`button`,onMouseDown:t=>{t.preventDefault(),Xe(e)},className:`w-full text-left px-2 py-1 text-[10px] hover:bg-accent/50 text-foreground/80`,children:e},e))})]}):(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>xe(!0),className:`flex items-center gap-1 text-[10px] text-muted-foreground hover:text-foreground transition-colors`,children:[(0,Y.jsx)(F,{className:`w-2.5 h-2.5`}),d(`detailModal.addLabel`)]})]}),(0,Y.jsx)(Kr,{ticket:e,allTickets:n??[],onOpenTicket:e=>i?.(e)}),e.source===`jira`&&e.jira_key&&(0,Y.jsx)(sn,{localId:e.id}),e.metadata?.effort_level&&(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-0.5`,children:d(`detailModal.effort`)}),(0,Y.jsx)(`span`,{className:`text-xs text-foreground/70`,children:e.metadata.effort_level})]}),e.assignee&&(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-0.5`,children:d(`detailModal.assignee`)}),(0,Y.jsx)(`span`,{className:`text-xs text-foreground/70`,children:e.assignee})]})]})]})}),(0,Y.jsxs)(`div`,{className:`flex items-center justify-between px-5 py-3 border-t border-border/30`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 text-[10px] text-muted-foreground`,children:[(0,Y.jsx)(`span`,{children:d(`meta.createdAgo`,{time:oi(e.created_at)})}),(0,Y.jsx)(`span`,{children:d(`meta.updatedAgo`,{time:oi(e.updated_at)})}),e.source&&(0,Y.jsx)(`span`,{className:`bg-muted/30 rounded px-1.5 py-0.5`,children:ii[e.source]?d(ii[e.source]):e.source})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[Ne?(0,Y.jsxs)(H,{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,Y.jsx)(Ie,{className:`w-3 h-3 mr-1`}),f(`discard.moveButton`,{status:Me.discardStatus})]}):(0,Y.jsxs)(H,{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:()=>Ce(!0),children:[(0,Y.jsx)(re,{className:`w-3 h-3 mr-1`}),d(`common:actions.delete`)]}),Je&&(0,Y.jsxs)(H,{size:`sm`,className:`h-7 text-xs`,onClick:()=>{Pe?De(!0):Qe()},disabled:Oe||!j.trim(),children:[(0,Y.jsx)(C,{className:`w-3 h-3 mr-1`}),d(Oe?`common:states.saving`:`common:actions.save`)]})]})]})]}),(0,Y.jsx)(pe,{open:Se,onOpenChange:e=>{Ae||Ce(e)},children:(0,Y.jsxs)(fe,{className:`max-w-sm`,children:[(0,Y.jsxs)(de,{children:[(0,Y.jsx)(ue,{children:d(`deleteDialog.title`)}),(0,Y.jsx)(ce,{children:(0,Y.jsx)(h,{t:d,i18nKey:`deleteDialog.body`,values:{id:e.id,title:e.title},components:{strong:(0,Y.jsx)(`span`,{className:`font-semibold text-foreground`})}})})]}),(0,Y.jsxs)(z,{children:[(0,Y.jsx)(H,{variant:`outline`,size:`sm`,onClick:()=>Ce(!1),disabled:Ae,children:d(`common:actions.cancel`)}),(0,Y.jsxs)(H,{variant:`destructive`,size:`sm`,onClick:()=>{$e()},disabled:Ae,"aria-busy":Ae,children:[Ae?(0,Y.jsx)(te,{className:`w-3.5 h-3.5 mr-1.5 animate-spin`}):(0,Y.jsx)(re,{className:`w-3.5 h-3.5 mr-1.5`}),d(`common:actions.delete`)]})]})]})}),Ne&&Me.discardStatus&&(0,Y.jsx)(rn,{open:we,onOpenChange:Te,ticket:{id:e.id,title:e.title,jira_key:e.jira_key},discardStatus:Me.discardStatus,onDiscarded:r}),(0,Y.jsx)(pe,{open:Ee,onOpenChange:De,children:(0,Y.jsxs)(fe,{className:`max-w-md`,"data-testid":`jira-save-confirm`,children:[(0,Y.jsxs)(de,{children:[(0,Y.jsx)(ue,{children:f(`detail.saveTitle`)}),(0,Y.jsx)(ce,{children:f(`detail.saveBody`,{key:e.jira_key??`#${e.id}`})})]}),(0,Y.jsxs)(z,{children:[(0,Y.jsx)(H,{variant:`outline`,size:`sm`,onClick:()=>De(!1),children:d(`common:actions.cancel`)}),(0,Y.jsxs)(H,{size:`sm`,onClick:()=>{De(!1),Qe()},disabled:Oe,"data-testid":`jira-save-confirm-btn`,children:[(0,Y.jsx)(C,{className:`w-3.5 h-3.5 mr-1.5`}),f(`detail.saveConfirm`)]})]})]})})]});return u?ft:(0,ur.createPortal)((0,Y.jsxs)(`div`,{style:se(),className:`fixed inset-0 z-[68] flex items-center justify-center`,children:[(0,Y.jsx)(`div`,{className:`absolute inset-0 bg-black/70`,onClick:dt(r)}),ft,(0,Y.jsx)(le,{handles:ut})]}),document.body)}function oi(e){try{return V(new Date(e),{addSuffix:!0,locale:d()})}catch{return e}}function si({ticket:e,title:t,description:n,priority:r,labels:i,repositoryIds:a,onClose:o}){let{t:s}=g(`tickets`),{triggerResume:c}=O(),{activeProjectId:l}=y(),{closeTicketDetail:u}=Oi();return dn(e)?(0,Y.jsxs)(H,{variant:`default`,size:`sm`,onClick:()=>{if(!l)return;let{body:d,criteria:f}=ln(n);c({kind:`explore-spec`,projectId:l,label:t||e.title||s(`detailModal.ticketFallbackLabel`,{id:e.id}),restoreRoute:`/`,params:{initialIdea:``,pendingSpecId:fn(),initialAttachmentIds:[],resumeConversationId:e.origin_conversation_id??void 0,editTicket:{id:e.id,title:t,description:d,labels:i,priority:r,repositoryIds:a,acceptanceCriteria:f,status:e.status}}}),u(),o()},className:`shrink-0 mr-2`,"data-testid":`continue-editing`,children:[(0,Y.jsx)(qe,{className:`w-3.5 h-3.5 mr-1.5`}),s(`detailModal.continueEditing`)]}):null}function ci({ticket:e,rails:t,onMoveToRail:n,onRemoveFromRail:r}){let{t:i}=g(`tickets`),[a,o]=(0,J.useState)(null),s=(0,J.useRef)(null),c=t.find(t=>t.ticketIds.includes(e.id));return c?r?(0,Y.jsxs)(H,{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,Y.jsx)(S,{className:`w-3.5 h-3.5`,"aria-hidden":!0}),i(`rail.removeFromRail`)]}):null:n?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(H,{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,Y.jsx)(Ie,{className:`w-3.5 h-3.5`,"aria-hidden":!0})]}),a&&(0,Y.jsx)(Zr,{rails:t,anchorRect:a,onMoveToRail:t=>n(e.id,t),onClose:()=>o(null)})]}):null}var li=`
9
+
10
+ ---
11
+
12
+ ## Contract Layer
13
+
14
+ `;function ui(e){let t=e.indexOf(li);return t<0?{user:e,contract:null}:{user:e.slice(0,t),contract:e.slice(t+26)}}function di(e){let t=[`### Naming Contract`,`### Data Shapes`,`### State Machine`,`### Invariants`,`### File Touch List`],n=0;for(let r of t){let t=e.indexOf(r);if(t<0)continue;let i=e.slice(t+r.length),a=i.indexOf(`N/A — model did not produce items`),o=i.indexOf(`### `);a>=0&&(o<0||a<o)||n++}return n}function fi({description:e,onEdit:t}){let{t:n}=g(`tickets`),{openWebView:r}=Er(),{user:i,contract:a}=ui(e),o=i||e,s=(0,J.useMemo)(()=>({a:({href:e,children:t})=>(0,Y.jsx)(`a`,{href:e,target:`_blank`,rel:`noreferrer`,onClick:t=>{typeof e==`string`&&/^https?:\/\//i.test(e)&&(t.preventDefault(),t.stopPropagation(),r(e))},children:t})}),[r]);return(0,Y.jsxs)(`div`,{className:`flex-1 rounded-lg bg-muted/20 px-3 py-2 overflow-y-auto transition-colors`,onClick:e=>{e.target.closest(`details, summary`)||t()},role:`button`,style:{cursor:`pointer`},children:[(0,Y.jsx)(`div`,{className:`prose prose-invert prose-xs max-w-none prose-p:my-1 prose-headings:mt-2 prose-headings:mb-1 prose-headings:text-sm prose-headings:font-semibold prose-ul:my-1 prose-ol:my-1 prose-li:my-0 prose-code:text-cyan-300 prose-code:text-[10px] prose-code:bg-muted/40 prose-code:px-1 prose-code:py-0.5 prose-code:rounded text-foreground/80 text-xs`,children:(0,Y.jsx)(me,{remarkPlugins:[he],components:s,children:o})}),a&&(0,Y.jsxs)(`details`,{"data-testid":`contract-layer-disclosure`,className:`mt-3 rounded-md border border-border/40 bg-muted/10 px-2 py-1`,onClick:e=>e.stopPropagation(),children:[(0,Y.jsxs)(`summary`,{className:`cursor-pointer text-[10px] font-medium text-foreground/80 select-none flex items-center gap-2`,children:[n(`contractLayer.title`),(0,Y.jsx)(`span`,{className:`rounded-full bg-muted/40 px-1.5 text-[9px] text-foreground/60`,children:n(`contractLayer.populated`,{n:di(a)})})]}),(0,Y.jsx)(`div`,{className:`mt-2 prose prose-invert prose-xs max-w-none prose-p:my-1 prose-headings:mt-2 prose-headings:mb-1 prose-headings:text-sm prose-headings:font-semibold prose-ul:my-1 prose-ol:my-1 prose-li:my-0 prose-code:text-cyan-300 prose-code:text-[10px] prose-code:bg-muted/40 prose-code:px-1 prose-code:py-0.5 prose-code:rounded text-foreground/80 text-xs`,children:(0,Y.jsx)(me,{remarkPlugins:[he],components:s,children:a})})]})]})}var pi={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 mi(e){try{return V(new Date(e),{addSuffix:!0,locale:d()})}catch{return e}}function hi({tickets:e,excludeIds:t,onSelect:n}){let{t:r}=g(`tickets`),[i,a]=(0,J.useState)(``),o=(0,J.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,Y.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,Y.jsxs)(`div`,{className:`px-4 py-3 border-b border-border/30 flex items-center gap-2`,children:[(0,Y.jsx)(Qe,{className:`w-3.5 h-3.5 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`text-xs font-semibold text-foreground`,children:r(`comparePicker.title`)}),(0,Y.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:r(`comparePicker.count`,{n:o.length})})]}),(0,Y.jsx)(`div`,{className:`px-4 py-2 border-b border-border/20`,children:(0,Y.jsxs)(`div`,{className:`relative`,children:[(0,Y.jsx)(I,{className:`absolute left-2 top-1/2 -translate-y-1/2 w-3 h-3 text-muted-foreground`}),(0,Y.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,Y.jsx)(`div`,{className:`flex-1 overflow-y-auto`,"data-testid":`spec-compare-picker-list`,children:o.length===0?(0,Y.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full text-center px-4 py-8 gap-2`,children:[(0,Y.jsx)(Qe,{className:`w-6 h-6 text-muted-foreground/40`}),(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:i.trim()?r(`comparePicker.noMatches`):r(`comparePicker.empty`)})]}):(0,Y.jsx)(`ul`,{className:`divide-y divide-border/10`,children:o.map(e=>(0,Y.jsx)(`li`,{children:(0,Y.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,Y.jsx)(en,{status:e.status}),(0,Y.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(`span`,{className:`text-[10px] font-mono text-muted-foreground`,children:[`#`,e.id]}),e.priority&&pi[e.priority]&&(0,Y.jsx)(`span`,{className:`inline-flex items-center rounded px-1 py-0.5 text-[9px] font-medium border ${pi[e.priority]}`,children:r(`priority.${e.priority}`)})]}),(0,Y.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,Y.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,Y.jsxs)(`div`,{className:`mt-1 flex flex-wrap gap-1`,children:[e.labels.slice(0,3).map(e=>(0,Y.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,Y.jsxs)(`span`,{className:`text-[9px] text-muted-foreground`,children:[`+`,e.labels.length-3]})]}),(0,Y.jsx)(`p`,{className:`mt-1 text-[9px] text-muted-foreground`,children:r(`meta.updatedAgo`,{time:mi(e.updated_at)})})]})]})},e.id))})})]})}var gi=.25,_i=.75;function vi({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,J.useRef)(null),p=(0,J.useRef)(null),[m,h]=(0,J.useState)(!0);(0,J.useEffect)(()=>{let e=setTimeout(()=>h(!1),320);return()=>clearTimeout(e)},[]);let g=(0,J.useCallback)(e=>{if(!p.current)return;let t=window.innerWidth,n=e.clientX/t;u(Math.min(_i,Math.max(gi,n)))},[u]),_=(0,J.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,J.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,J.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,J.useCallback)(t=>{let n=.04;t.key===`ArrowLeft`?(t.preventDefault(),u(Math.max(gi,e.splitRatio-n))):t.key===`ArrowRight`?(t.preventDefault(),u(Math.min(_i,e.splitRatio+n))):t.key===`Home`?(t.preventDefault(),u(gi)):t.key===`End`?(t.preventDefault(),u(_i)):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,Y.jsx)(ai,{ticket:f,allLabels:i,allTickets:r,onClose:d?c:()=>l(null,u),onOpenTicket:s,onSave:a,onDelete:o,embedded:!0},`${u}-${f.id}`):(0,Y.jsx)(hi,{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,ur.createPortal)((0,Y.jsxs)(`div`,{ref:f,"data-testid":`split-view-shell`,style:se(),className:`fixed inset-0 z-[68] flex`,onClick:b,children:[(0,Y.jsx)(`div`,{className:`absolute inset-0 bg-black/70 pointer-events-none`,"aria-hidden":!0}),(0,Y.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,Y.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,Y.jsx)(`div`,{className:`h-full flex items-center justify-center p-2`,children:(0,Y.jsx)(`div`,{className:`w-full h-full max-h-[95vh]`,children:x(`left`)})})}),(0,Y.jsx)(`div`,{"data-testid":`split-divider`,role:`separator`,"aria-orientation":`vertical`,"aria-valuenow":Math.round(e.splitRatio*100),"aria-valuemin":Math.round(gi*100),"aria-valuemax":Math.round(_i*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,Y.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,Y.jsx)(`div`,{className:`h-full flex items-center justify-center p-2`,children:(0,Y.jsx)(`div`,{className:`w-full h-full max-h-[95vh]`,children:x(`right`)})})})]})]}),document.body)}var yi=.5,bi=.25,xi=.75,Si={leftId:null,rightId:null,originSide:null,splitRatio:yi};function Ci(e){return Number.isFinite(e)?Math.min(xi,Math.max(bi,e)):yi}function wi(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:yi}:e.originSide!==null&&(e.leftId===t.id||e.rightId===t.id)?e:{...Si,leftId:t.id};case`closeAll`:return Si;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:yi}:{leftId:null,rightId:n,originSide:`right`,splitRatio:yi}}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{...Si,leftId:t}}case`setSplitRatio`:return{...e,splitRatio:Ci(t.ratio)};default:return e}}var Ti=(0,J.createContext)(null),Ei=900;function Di({children:e}){let[t,n]=(0,J.useReducer)(wi,Si),{tickets:r,updateTicket:i,deleteTicket:a}=dt(),{activeProjectId:o,setActiveProjectId:s}=y(),c=(0,J.useRef)(null);(0,J.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,J.useCallback)(e=>n({type:`openCentered`,id:e}),[]),u=(0,J.useCallback)((e,t)=>{if(e===o){n({type:`openCentered`,id:t});return}c.current={projectId:e,ticketId:t},s(e)},[o,s]),d=(0,J.useCallback)(()=>n({type:`closeAll`}),[]),f=(0,J.useCallback)((e,t)=>{typeof window<`u`&&window.innerWidth<Ei||n({type:`enterSplit`,side:e,ticketId:t})},[]),p=(0,J.useCallback)((e,t)=>n({type:`setComparedTicket`,id:e,side:t}),[]),m=(0,J.useCallback)(()=>n({type:`exitSplit`}),[]),h=(0,J.useCallback)(e=>n({type:`setSplitRatio`,ratio:e}),[]);(0,J.useEffect)(()=>{if(typeof window>`u`)return;function e(){window.innerWidth<Ei&&n({type:`exitSplit`})}return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]);let g=(0,J.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,b=(0,J.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]),x=t.originSide!==null;return(0,Y.jsxs)(Ti.Provider,{value:b,children:[e,!x&&_&&(0,Y.jsx)(ai,{ticket:_,allLabels:g,allTickets:r,onClose:d,onOpenTicket:l,onSave:i,onDelete:a},_.id),x&&(0,Y.jsx)(vi,{state:t,leftTicket:_,rightTicket:v,allTickets:r,allLabels:g,onSave:i,onDelete:a,onOpenTicket:l,onCloseAll:d,onSetCompared:p,onSetRatio:h,onExitSplit:m})]})}function Oi(){return(0,J.useContext)(Ti)||{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:Si}}export{De as $,en as A,qe as B,En as C,ln as D,dn as E,dt as F,G,Ge as H,it as I,ze as J,He as K,at as L,Pt as M,Ht as N,rn as O,Mt as P,Ee as Q,Qe as R,Mn as S,fn as T,We as U,Ke as V,Ue as W,Ie as X,Le as Y,Se as Z,An as _,jr as a,Fe as at,Pn as b,xr as c,je as ct,cr as d,be as dt,Ce as et,er as f,U as ft,Fn as g,mn as h,Zr as i,Te as it,Rt as j,nn as k,br as l,xe as lt,Ln as m,W as mt,Oi as n,Ne as nt,Tr as o,Me as ot,Kn as p,ve as pt,Be as q,ai as r,Oe as rt,Er as s,Ae as st,Di as t,we as tt,mr as u,Pe as ut,In as v,Nn as w,jn as x,pn as y,Xe as z};
@@ -1 +1 @@
1
- import{a as e,t}from"./rolldown-runtime-CNC7AqOf.js";import{n}from"./jsx-runtime-zu2_FqZY.js";import{j as r}from"./useSharedWebSocket-BHIfW4QT.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+=`&lt;`,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};
1
+ import{a as e,t}from"./rolldown-runtime-CNC7AqOf.js";import{n}from"./jsx-runtime-zu2_FqZY.js";import{j as r}from"./useSharedWebSocket-BN3Lmehi.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+=`&lt;`,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=`Controle de missões`,t=`Opere o Specrails conversando`,n=`Controle de missões`,r=`Peça ao agente o que quiser…`,i=`Enviar`,a=`Parar`,o=`Copiar`,s={openPreview:`Pré-visualizar {{name}}`,openDownload:`Transferir {{name}}`,previewTitle:`Pré-visualização de {{name}}`,downloadTitle:`Transferir ficheiro?`,downloadPrompt:`Este ficheiro não pode ser pré-visualizado aqui. Queres transferi-lo?`,download:`Transferir`,cancelDownload:`Agora não`,loading:`A preparar ficheiro…`,loadFailed:`Não foi possível carregar o anexo`,loadError:`Não foi possível carregar o anexo: {{error}}`},c=`Maximizar`,l=`Restaurar`,u=`Minimizar`,d=`Fechar`,f=`Nova missão`,p=`Qual é a missão?`,m=`Escolha um projeto e depois pergunte. O quadro é atualizado ao vivo enquanto o agente trabalha.`,h=`Pensando…`,g=`Conectando…`,_=`Consultando o app…`,v={compact:`Compacto`,comfortable:`Confortável`,max:`Maximizar`},y={label:`Modelo`,loading:`Carregando modelos…`,unavailable:`Modelos indisponíveis`},b={hint:`Explorando histórico — escreva para editar, ↑↓ para navegar`},x={queued:`Na fila`,send:`Enviar mensagem`,sendHint:`Enfileirar para o próximo turno. Escolha «Orientar» em uma mensagem na fila para enviá-la sem interromper o modelo.`,placeholder:`Adicionar uma mensagem à fila…`,delivered:`Entregue ao agente`,interrupted:`Entrega não confirmada`,cancelled:`Cancelada antes da entrega`,steer:`Orientar`,steerHint:`Enviar sem interromper o modelo`,steering:`Enviando ao agente…`,remove:`Excluir mensagem da fila`,more:`Opções da mensagem`,edit:`Editar`,actionConflict:`Esta mensagem já está sendo entregue ou não está mais na fila.`,actionFailed:`Não foi possível atualizar a mensagem na fila. Tente novamente.`},S={sent:`Enviado ao agente`,received:`Entregue ao agente`,read:`Lido pelo agente`,interrupted:`Entrega não confirmada`,cancelled:`Cancelado antes da entrega`},C={editing:`Editando mensagem pendente {{n}} de {{m}}`,hint:`↑↓ para navegar · Enter salva · Esc cancela`,save:`Salvar mensagem pendente`,cancel:`Cancelar edição`,dispatched:`Essa mensagem já foi entregue; seu texto foi mantido como rascunho`,saveFailed:`Não foi possível salvar a mensagem pendente`},w={branch:`Branch`,detached:`(detached)`,dirty:`Alterações sem commit`,switched:`Mudou para {{branch}}`,switchFailed:`Não foi possível trocar de branch`,lockedWhileWorking:`Branch bloqueada enquanto o agente trabalha`,searchPlaceholder:`Buscar branches…`,noMatches:`Nenhuma branch corresponde`,worktrees:`Worktrees`,worktreePathCopied:`Caminho do worktree copiado`,copyWorktreePath:`Copiar caminho do worktree`,repository:`Repositório`,repositoryUnavailable:`Repositório indisponível`,loadFailed:`Estado do Git indisponível`,notGit:`Pasta de contexto · sem Git`,retry:`Tentar novamente`},T={label:`Provedor`,claude:`Claude`,codex:`Codex`,gemini:`Gemini`,kimi:`Kimi`},E={cycleHint:`⇧⇥ para mudar`,observe:{name:`Observa`,desc:`Somente leitura — nada muda`},edit:{name:`Edita`,desc:`Criar e editar (reversível)`},operate:{name:`Opera`,desc:`Lançar IA — tem custo`},autonomous:{name:`Autônomo`,desc:`Excluir e encerrar — irreversível`},lockedTitle:`Precisa de um nível superior`,lockedBody:`Essa ação precisa do nível "{{level}}". Você está no "{{current}}".`,raiseHint:`⇧⇥ para aumentar o nível, ou peça de outra forma.`},D={title:`Confirmar ação`,costAction:`{{action}} · ~{{cost}} · {{tier}}`,approve:`Aprovar`,cancel:`Cancelar`,dontAskAgain:`Não perguntar de novo nesta sessão`,approved:`Aprovado`,cancelled:`Cancelado`},O={home:`Início`,searchPlaceholder:`Fale com o Specrails…`,searchProjectsPlaceholder:`Buscar projetos…`,recents:`Recentes`,allProjects:`Todos os projetos`,searchAll:`Buscar em todos os projetos`,addProject:`Adicionar projeto…`,homeHint:`Nenhum projeto selecionado — operando em todos os projetos.`,askCreateOrSearch:`Nenhum projeto está selecionado. Você quer criar um novo projeto ou buscar em todos os projetos?`},k={remove:`Remover {{label}}`,addContextAction:`Adicionar contexto ou ação`,filtering:`Filtrando "{{query}}"`,keyboard:`↑↓ Enter Esc`,noMatches:`Sem resultados`,noMatchesFor:`Sem resultados para "{{query}}"`,mode:{reference:{title:`Referência`,hint:`@ projetos, specs, missões`},trace:{title:`Traço`,hint:`# jobs, execuções, IDs`},action:{title:`Ação`,hint:`/ comandos para este contexto`}},plus:{reference:`Referência`,referenceHint:`Projetos, specs, missões`,trace:`Traço`,traceHint:`Jobs, execuções, IDs`,action:`Ação`,actionHint:`Criar, lançar, inspecionar`,fileAttachment:`Anexo de arquivo`,fileAttachmentHint:`Adicionar docs, imagens, logs`,browserCapture:`Captura do navegador`,browserCaptureHint:`Capturar uma área da página para esta missão`},railGroup:`Rails`,railGroupInUse:`Rails em uso`},A={label:`Trocar de missão`,untitled:`Nova missão`,new:`Nova missão`,searchPlaceholder:`Pesquisar missões…`,noMatches:`Nenhuma missão corresponde`,working:`O agente está trabalhando`,queuedBadge:`{{n}} na fila`,delete:`Excluir missão "{{title}}"`,deleteConfirm:`Excluir?`,deleteLiveConfirm:`O agente está trabalhando — excluir mesmo assim?`,confirmDelete:`Confirmar exclusão`,cancelDelete:`Manter missão`,deleteFailed:`Não foi possível excluir a missão`},j={title:`Nenhum provedor de IA instalado`,body:`O agente precisa de Claude, Codex, Gemini ou Kimi na sua máquina. Instale um e reabra o agente para começar a conversar.`,placeholder:`Instale um provedor de IA para usar o agente…`},M={title:`O MCP do Specrails está desligado`,body:`O agente precisa do servidor MCP integrado para operar o app.`,enable:`Ativar o MCP do Specrails`,enabling:`Ativando…`,enabled:`MCP ativado`},N={live:`ao vivo`,queued:`na fila`,running:`em execução`,done:`concluído`,failed:`falhou`},P={generic:`Algo deu errado. Tente novamente.`,busy:`O agente está ocupado. Tente novamente em um instante.`},F={kindAgent:`Missão do agente`},I=`Nova missão`,L=`Mudar para o Controle de missões`,R=`Mudar para o quadro`,z=`Buscar`,B=`Início`,V=`Missões favoritas`,H=`Sem título`,U={title:`No workspace`,terminal:`Terminal`,files:`Arquivos`,browser:`Navegador`,requiresProject:`Selecione um projeto para usar esta ferramenta`,resizeCode:`Redimensionar painel de código`,closeFiles:`Fechar código`,browserConfirm:`Adicionar ao agente`,browserSelectStart:`Selecionar para adicionar à missão`,browserCaptured:`Captura adicionada`,uploadFailed:`Falha no upload`,requiresConversation:`Inicie uma missão para usar esta ferramenta`,jobs:`Jobs`,closeJobs:`Fechar jobs`,resizeJobs:`Redimensionar painel de jobs`,noJobs:`Ainda não há jobs — peça ao agente para lançar um`,analytics:`Analítica`,closeAnalytics:`Fechar analítica`,resizeAnalytics:`Redimensionar painel de analítica`},W=`Anexar arquivo`,G=`Excluir "{{title}}"`,K=`Confirmar exclusão de "{{title}}"`,q=`Adicionar "{{title}}" aos favoritos`,J=`Remover "{{title}}" dos favoritos`,Y=`confirmar?`,X=`Este provedor ainda não lê imagens — anexe arquivos de texto`,Z={label:`Esforço`,minimal:`Mínimo`,low:`Baixo`,medium:`Médio`,high:`Alto`,xhigh:`Extra alto`,max:`Máximo`,ultra:`Ultra`},Q=JSON.parse(`{"operation":{"inProgress":"Ação em andamento…","create-pr":"Criando PR…","publish":"Publicando…","discard":"Descartando…","dismiss":"Encerrando acompanhamento…","poll-merge":"Verificando merge…","reopen":"Reabrindo…","merge-local":"Integrando localmente…","recover-and-retry":"A criar o commit e a tentar novamente o push do resultado preservado…","acknowledge-no-changes":"Marcando como concluído…"},"markDone":"Marcar como concluídas","refine":"Refinar","completedNote":"Confirmado — as specs foram movidas para Concluído","partialSummary":"{{succeeded}} de {{total}} concluídas; {{failed}} falharam","unit":{"failed":"implementação falhou","blocked":"entrega bloqueada","noChanges":"sem alterações","succeeded":"pronta"},"rail":"Rail {{index}}","specCount_one":"{{count}} spec","specCount_other":"{{count}} specs","base":"Ramo base","openPr":"Abrir PR","existingPr":"PR existente","title":{"no_changes":"Nenhuma alteração necessária","partial":"Implementação parcial","delivery_blocked":"Implementação concluída — a entrega requer atenção","update_failed":"Implementação concluída — falha na atualização","pr_closed":"PR fechada sem merge","superseded":"Substituída por uma execução mais recente","existing_pr_updated":"PR existente atualizada","building":"A implementar num worktree isolado…","buildingExistingPr":"A aplicar alterações numa PR existente…","paused":"Precisa de decisão humana","on_review":"Implementação pronta para revisão","pr_draft":"PR em rascunho criada","pr_draft_degraded":"Entrega da PR incompleta","pr_ready":"PR pronta para merge","implementation_failed":"Implementação falhou","pr_failed":"Falha ao criar a PR","merged":"Merge da PR concluído","discarded":"Descartada"},"buildingHint":"Quando terminar, ser-lhe-á perguntado se quer criar a PR.","buildingExistingPrHint":"O Specrails está a trabalhar no ramo da PR existente e irá enviar as alterações de revisão para essa mesma PR.","paused":"Implementação em pausa","pausedForRun":"Em pausa em {{ref}}","resume":"Retomar","stopExecution":"Parar execução","stopExecutionSent":"Sinal de paragem enviado","stopExecutionFailed":"Não foi possível parar a execução","createPr":"Criar PR","publish":"Publicar","checkout":"Mudar para o branch","openReview":"Revisar","openReviewTooltip":"Abrir a revisão em linguagem clara","checkoutTooltip":"Fazer checkout de {{branch}} na pasta principal do projeto","checkoutSuccess":"Checkout feito em {{branch}}","checkoutFailed":"Não foi possível fazer checkout da branch de implementação","checkoutDirtyTitle":"Checkout bloqueado para proteger as suas alterações","checkoutDirtyBody":"A pasta principal do projeto contém alterações sem commit. Faça commit ou stash e tente novamente. Não foi feita qualquer alteração.","checkoutSafetyUnknownTitle":"Checkout em pausa porque não foi possível verificar a segurança","checkoutSafetyUnknownBody":"O Specrails não conseguiu ler o estado do Git na pasta principal do projeto. Nada foi libertado ou alterado. Tente novamente quando o Git estiver disponível.","checkoutNotDeliverableTitle":"Esta branch não contém a implementação preservada","checkoutNotDeliverableBody":"O commit exato da entrega ainda não foi verificado. Em alternativa, inspecione ou recupere o resultado local.","inspectLocalResult":"Inspecionar resultado local","inspectLocalResultTooltip":"Mostrar o worktree isolado preservado e copiar o respetivo caminho","localResultPathCopied":"Caminho do resultado local copiado","localResultPath":"Resultado local preservado","localResultUnavailableHere":"Não existe nenhum worktree recuperável neste computador. Consulte o log da execução no computador onde foi iniciada.","recoverAndRetry":"Fazer commit e tentar push novamente","recoverAndRetryVerified":"O commit recuperado {{sha}} está verificado na PR","recoveryStillBlocked":"A recuperação local ainda requer atenção","recheckRecovery":"Verificar novamente","recoveryUnavailable":"Não foi possível verificar a recuperação neste computador","recoveryUnavailableBody":"O Specrails não conseguiu comprovar com segurança um único resultado pertencente à entrega neste clone. Nada foi alterado ou removido. Consulte os detalhes da etapa e os registos de execução. Se o run foi executado noutro computador, abra o Specrails nele e verifique novamente.","recoveryDetailSummary":"Detalhe técnico da recuperação","retry":"Tentar novamente","retryPr":"Tentar PR novamente","checkMerge":"Verificar merge","verifyPr":"Verificar PR","discard":"Descartar","confirmDiscard":"Confirmar descarte?","mergedNote":"Merge concluído — specs movidas para Concluído","discardedNote":"Descartada — specs devolvidas ao backlog","implementationFailedNote":"A execução de implementação falhou antes de produzir algo entregável. Abra o log da execução para inspecionar a falha e descarte este cartão antes de relançar.","dismiss":"Encerrar acompanhamento","discardLocalResult":"Descartar resultado local","retryPush":"Tentar push novamente","retryPushVerified":"Push verificado · o commit {{sha}} está na PR","commitAlreadyVerified":"O commit {{sha}} já está verificado na PR","deliveryCommit":"commit {{sha}}","reopen":"Reabrir","createPartialPr":"Criar PR com {{count}}","supersededNote":"Uma execução de implementação mais recente substituiu este cartão.","noChangesExisting":"Nenhuma nova alteração foi necessária; a PR existente permanece inalterada.","noChangesNote":"Nenhuma alteração de código foi necessária. Marque as specs como concluídas ou devolva-as ao backlog para refinamento.","deliveryNeedsAttention":"Implementação concluída; a entrega requer atenção","deliveryBlockedNote":"A implementação foi concluída com sucesso, mas a entrega está bloqueada. Revise os detalhes da etapa e os logs antes de descartar o resultado local.","partialDeliveryBlockedNote":"Parte da implementação foi concluída com sucesso, mas ainda não há nada que possa ser entregue com segurança. Reveja as evidências por unidade e os logs antes de escolher a próxima ação.","retryPushNote":"A implementação foi concluída com sucesso e as alterações estão seguras localmente. Tente novamente apenas o push.","cleanupIncomplete_one":"Limpeza incompleta ({{count}} aviso)","cleanupIncomplete_other":"Limpeza incompleta ({{count}} avisos)","safetyArchiveTitle":"Arquivo de segurança ({{count}})","safetyArchiveHint":"Os ficheiros temporários do espaço de trabalho foram preservados fora da PR por precaução. Pode inspecioná-los ou removê-los manualmente.","confirm":{"recoverAndRetryTitle":"Fazer commit e enviar o resultado preservado?","recoverAndRetryBody":"O Specrails utilizará apenas o worktree isolado ou o ramo registado compatível com avanço rápido para {{branch}}. Se necessário, criará um commit com os ficheiros entregáveis e enviará esse commit exato apenas se a PR continuar aberta nos ramos de origem e destino esperados. A pasta principal do projeto e as respetivas alterações sem commit não serão afetadas.","recheckRecoveryTitle":"Verificar este computador novamente?","recheckRecoveryBody":"O Specrails examinará novamente neste clone o worktree, a branch, as refs, os reflogs e os objetos Git órfãos pertencentes à entrega de {{branch}}. Se comprovar um único resultado, poderá fazer commit das alterações isoladas e repetir o push exato. A pasta principal do projeto não será alterada.","noChangesDoneTitle":"Marcar estas specs como concluídas?","noChangesDoneBody":"A implementação confirmou que nenhuma alteração de código é necessária. As specs serão movidas para Concluído e o worktree sem alterações será limpo.","refineTitle":"Refinar estas specs?","refineBody":"O resultado sem alterações será fechado e as specs voltarão ao backlog para refinamento. Os logs de execução permanecerão disponíveis.","mergeLocalTitle":"Integrar localmente?","mergeLocalBody":"As branches entregues serão integradas em {{base}} localmente. As alterações existentes são preservadas; alterações sobrepostas podem precisar de resolução antes da integração.","freshDiscardTitle":"Descartar esta entrega?","freshDiscardBody":"A PR será fechada sem excluir o branch remoto. Apenas branches locais e worktrees pertencentes ao SpecRails que ainda estejam no commit registrado serão removidos; qualquer item alterado será preservado com um aviso. As specs voltarão ao backlog. Os recursos locais removidos não podem ser recuperados.","implementationFailedDiscardTitle":"Descartar esta entrega com falha?","implementationFailedDiscardBody":"O cartão será fechado e as specs voltarão ao backlog. O trabalho local e os branches serão preservados para inspeção. Apenas recursos comprovadamente seguros para limpeza poderão ser removidos.","dismissTitle":"Encerrar este acompanhamento?","dismissBody":"Este cartão de acompanhamento será encerrado. Seu worktree só será removido se isso ainda for seguro; caso contrário, será preservado com um aviso. A PR existente, seu branch e o estado da revisão permanecerão inalterados.","discardLocalTitle":"Descartar o resultado local?","discardLocalBody":"A iteração local recuperável só será removida se isso ainda for seguro; se tiver sido alterada, será preservada com um aviso. Qualquer PR existente e seu branch permanecerão inalterados. Um resultado removido não pode ser recuperado."},"degraded":{"pushed":"O ramo foi enviado mas não foi possível criar a PR — tente novamente para concluir.","localOnly":"As alterações foram montadas localmente mas não enviadas — tente novamente para publicar a PR."},"alreadyResolved":"Já resolvida noutro lugar","actionFailed":"A ação falhou","notMergedYet":"Ainda sem merge","commitMissingRetry":"O commit da entrega não está mais na PR. Você pode tentar o push novamente.","prVerifiedWaiting":"Commit {{sha}} verificado · aguardando merge","viewLog":"Ver o registro de execução de {{ref}}","runElapsedAria":"{{elapsed}} decorridos","runCostAria":"{{cost}} gastos","pinned":{"label":"Fixada","marker":"Cartão de implementação — fixado acima","collapse":"Minimizar cartão fixado","expand":"Expandir cartão fixado","expandCard":"Expandir este cartão","collapseCard":"Minimizar este cartão","collapsed_one":"Cartão de implementação","collapsed_other":"{{count}} cartões de implementação","state":{"completed":"Concluída","no_changes":"Sem alterações","pr_closed":"Fechada","superseded":"Substituída","building":"Em curso","on_review":"Revisão","pr_draft":"PR rascunho","pr_ready":"Publicada","implementation_failed":"Falhou","pr_failed":"Falhou","merged":"Integrada","discarded":"Descartada"}},"mergeLocal":"Integrar localmente","mergeLocalTooltip":"Faz merge dos branches entregues em {{base}} no seu checkout local (sem GitHub)","mergeLocalBlockedDirty":"Não é possível integrar: as alterações locais em {{base}} sobrepõem-se à entrega. Faça commit ou stash dessas alterações e tente novamente.","mergeLocalBlockedBranch":"Não é possível integrar: seu checkout está em {{current}}, não em {{base}}. Mude para {{base}} e tente de novo.","mergedLocally":"Integrado em {{base}} localmente","discardStackedNote":"Os rails seguintes deste marco foram construídos sobre esta entrega. Descartá-la pausa a cadeia do marco; os rails seguintes mantêm o seu trabalho."}`),$={heading:`Rascunho da spec`,drafting:`Atualizando rascunho…`,acceptanceCriteria:`Critérios de aceitação`,untitled:`Spec sem título`,expand:`Ver descrição completa`,collapse:`Recolher descrição`},ee={heading:`Enquadramento`,framing:`A enquadrar o pedido…`,restated:`O que entendi`,alternative:`Também poderia significar`,pick:`Responder com isto`,touches:`Tocaria em`,discriminator:`Qual das duas?`,assumptions:`O que estou a assumir`,unknowns:`Ainda em aberto`},te={openTicket:`Abrir spec #{{id}}`,openPullRequest:`Abrir PR #{{id}}`,openJob:`Abrir job {{id}}`,openLoop:`Abrir loop {{id}}`,ticketNotFound:`Spec #{{id}} não encontrada — pode ter sido excluída`,pullRequestUrlMissing:`A PR #{{id}} foi mencionada sem URL`,pullRequestNotFound:`A PR #{{id}} não foi encontrada neste projeto`,jobNotFound:`Job não encontrado — pode ter sido excluído`,loopNotFound:`Loop não encontrado — pode ter sido excluído`,lookupFailed:`Não foi possível verificar a referência — tente novamente`},ne={untitled:`Missão sem título`,menu:`Menu da missão`,rename:`Renomear`,renamePlaceholder:`Nome da missão`,renameHint:`Duplo clique para renomear`,renameFailed:`Não foi possível renomear`,addFavorite:`Adicionar aos favoritos`,removeFavorite:`Remover dos favoritos`,copyName:`Copiar nome da missão`,copyId:`Copiar ID da missão`,copyProject:`Copiar nome do projeto`,copyProjectPath:`Copiar caminho do projeto`,copyFailed:`Não foi possível copiar`,copyTranscript:`Copiar transcrição`,copyTranscriptSuccess:`Transcrição copiada`,copyTranscriptFailed:`Não foi possível copiar a transcrição`,exportTranscript:`Exportar transcrição (.txt)`,exportTranscriptSuccess:`Exportação da transcrição iniciada`,exportTranscriptFailed:`Não foi possível exportar a transcrição`,delete:`Excluir missão`,deleteConfirm:`Excluir esta missão? Não pode ser desfeito.`,deleteFailed:`Não foi possível excluir a missão`},re=`O que devemos construir agora?`,ie={title:`Log de execução`,live:`Ao vivo`,empty:`Ainda não há atividade de ferramentas neste turno.`,output:`Saída`,error:`Erro`,copyAll:`Copiar log completo`,copyEntry:`Copiar entrada`,copySuccess:`Log copiado para a área de transferência`,copyFailed:`Não foi possível copiar o log`,openLog:`Ver log de execução`,close:`Fechar`},ae={open:`Ver logs de {{command}}`,logsTitle:`Logs do processo`,logsDescription:`Saída ao vivo e histórico salvo deste processo.`,close:`Fechar logs`,command:`Comando`,directory:`Diretório`,exitCode:`Código de saída: {{code}}`,signal:`Sinal: {{signal}}`,search:`Pesquisar nos logs…`,source:`Origem da saída`,allSources:`Toda a saída`,pause:`Pausar`,resume:`Retomar`,follow:`Seguir`,copy:`Copiar logs visíveis`,download:`Descarregar logs visíveis`,stop:`Parar processo`,stopCommand:`Parar {{command}}`,stopFailed:`Não foi possível parar o processo. Tente novamente.`,truncated:`É apresentada uma janela limitada de logs. Saída anterior ou linhas longas podem ser omitidas. Copiar e descarregar incluem apenas esta vista.`,paused:`Vista em pausa. O processo continua a funcionar.`,loadFailed:`Não foi possível carregar os logs. A retenção pode ter expirado; a saída já carregada continua visível.`,retry:`Tentar novamente`,copied:`Logs visíveis copiados.`,exportFailed:`Não foi possível exportar os logs. Tente novamente.`,output:`Saída do processo`,loading:`A carregar logs…`,noMatches:`Nenhuma saída correspondente.`,empty:`Ainda não há saída.`,lineCount:`{{count}} de {{total}} linhas`,exportHint:`A exportação inclui apenas o filtro atual e a saída retida.`,status:{starting:`A iniciar`,running:`Em execução`,stopping:`A parar`,exited:`Terminado`,killed:`Parado`,failed:`Falhou`,interrupted:`Desconectado`},repository:`Repositório`,history:{button:`Processos`,title:`Processos da missão`,open:`Ver histórico de processos`,description:`Consulte processos ativos e logs salvos de execuções anteriores.`,search:`Buscar comando ou repositório…`,refresh:`Atualizar histórico`,close:`Fechar histórico de processos`,back:`Voltar aos processos`,loading:`Carregando histórico de processos…`,empty:`Ainda não há processos registrados nesta missão.`,noMatches:`Nenhum processo correspondente.`,loadFailed:`Não foi possível carregar o histórico. As entradas já carregadas continuam disponíveis.`,showMore:`Mostrar mais`,count:`Processos: {{count}}`},interruptedHint:`O Specrails deixou de monitorar este processo. Seu estado no sistema operacional é desconhecido; os logs salvos continuam disponíveis.`,persistenceFailed:`Não foi possível salvar o histórico do processo. A saída disponível continua visível.`},oe={detach:`Abrir numa janela separada`,attach:`Voltar à janela principal`,detached:`Esta missão está aberta noutra janela.`,focus:`Mostrar janela da missão`,loading:`A mover a missão…`,failed:`Não foi possível mover esta missão. O rascunho foi preservado.`,dismiss:`Fechar aviso`,wrongMission:`Abre esta missão antes de a mover.`,finishPending:`Conclui a operação em curso ou guarda ou cancela a mensagem ou a captura antes de mover a missão.`},se={heading:`Lançamento de rail`,rail:`Rail {{index}}`,newRail:`Novo rail`,play:`Play`,launching:`A lançar…`,dismiss:`Descartar`,playHint:`Ajuste o que quiser e depois prima Play para lançar sob a sua própria autoridade.`,pending:`A preparar uma proposta de lançamento…`,unreadable_one:`Não foi possível ler a proposta de lançamento do agente.`,unreadable_other:`Não foi possível ler {{count}} propostas de lançamento.`,pinnedMarker:`Proposta de lançamento fixada acima do compositor`,effortDefault:`Esforço padrão`,profileNone:`Sem perfil`,status:{proposal:`Proposta`,ready:`Pronto`,blocked:`Requer atenção`,loading:`A verificar…`},availability:{free:`livre`,busy:`em execução`,pending_decision:`a aguardar uma decisão`,on_review:`em revisão`},fields:{rail:`Rail`,newRailName:`Nome do novo rail (opcional)`,railName:`Nome do rail`,addSpec:`Adicionar spec`,removeSpec:`Remover #{{id}}`,loop:`Loop`,engine:`Motor de IA`,model:`Modelo`,effort:`Esforço de raciocínio`,profile:`Perfil de agentes`,targetPr:`PR de destino #`,baseBranch:`Branch base`},notes:{railMissing:`O Rail {{index}} já não existe — escolha outro rail ou crie um.`,railBusy:`O Rail {{index}} está {{state}} — não é possível lançar aí.`,useFree:`Usar o Rail {{index}}`,specsDropped:`Já não fazem parte deste projeto: {{ids}}`,engineStale:`{{engine}} não foi detetado nesta máquina — será usado {{fallback}}.`,modelStale:`{{model}} não está disponível — será usado {{fallback}}.`},block:{noProject:`Esta missão não está fixada a nenhum projeto.`,loadFailed:`Não foi possível carregar os rails do projeto.`,noSpecs:`Adicione pelo menos uma spec para lançar.`,railLimit:`Os {{max}} rails já existem e nenhum está livre.`},errors:{tickets_in_flight:`Uma destas specs já está em execução noutro rail.`,pr_decision_pending:`Este rail está a aguardar uma decisão sobre a PR.`,rail_limit_reached:`O projeto já tem o número máximo de rails.`,invalid_base_branch:`Essa branch base não existe localmente.`,base_branch_requires_isolation:`Uma branch base requer isolamento por worktree (um repositório git com commits).`,target_pr_requires_pr_mode:`Uma PR de destino requer isolamento por worktree (um repositório git com commits).`,invalid_response:`Resposta inesperada do servidor.`},stub:{launched:`Lançado → Rail {{rail}}`,dismissed:`Proposta descartada`,viewRun:`Ver run`,goToCard:`Ir para o card`,goToCardTitle:`Ir para o card de implementação deste lançamento`,viewRunTitle:`Abrir o log ao vivo do run`}},ce={status:{running:`Em execução`,paused:`Em pausa`,succeeded:`Concluído`,failed:`Falhou`,stalled:`Parado`,cancelled:`Cancelado`,unknown:`Desconhecido`},title:{running:`A implementar no checkout do projeto…`,paused:`Requer uma decisão humana`,succeeded:`Implementação concluída`,failed:`A implementação falhou`,stalled:`A implementação parou`,cancelled:`Run cancelado`,unknown:`Estado do run desconhecido`},noDeliveryNote:`Sem fase de PR — este projeto não tem repositório git nem commits, por isso o trabalho foi aplicado diretamente na pasta do projeto.`,noDeliveryHint:`A executar diretamente na pasta do projeto (sem repositório git nem commits — não será proposta nenhuma PR).`,failure:{title:`Porque parou`,step:`passo {{step}}`,unit:`#{{ticket}} · {{code}}`},actions:{resume:`Retomar`,approve:`Aprovar`,recover:`Recuperar e tentar novamente`,relaunch:`Relançar`},relaunchSent:`Rail {{index}} relançado — um novo cartão acompanhará o run.`,relaunchFailed:`Não foi possível relançar o rail`,relaunchBlockedActive:`O rail ainda tem um run ativo`},le={marker:`O Rail {{rail}} falhou: {{code}}`,openCard:`Abrir cartão`,briefing:{title:`Relatório automático da falha`}},ue={title:e,subtitle:t,trigger:n,composerPlaceholder:r,send:i,stop:a,copy:o,attachment:s,maximize:c,restore:l,minimize:u,close:d,newConversation:f,emptyTitle:p,emptyHint:m,thinking:h,connecting:g,consultingCode:_,size:v,model:y,history:b,queue:x,receipt:S,queueEdit:C,git:w,provider:T,tier:E,approval:D,project:O,palette:k,mission:A,noProvider:j,degraded:M,toolCard:N,error:P,chip:F,newAgent:I,switchToAgent:L,switchToKanban:R,search:z,home:B,favoriteMissions:V,untitled:H,workspace:U,attachFile:W,deleteConversation:G,confirmDeleteConversation:K,addFavoriteConversation:q,removeFavoriteConversation:J,confirmShort:Y,imagesUnsupported:X,effort:Z,prCard:Q,specDraft:$,problemFrame:ee,refs:te,header:ne,emptyTitleCodeRain:re,activity:ie,backgroundProcess:ae,window:oe,railCard:se,runCard:ce,runFailure:le};export{ie as activity,q as addFavoriteConversation,D as approval,W as attachFile,s as attachment,ae as backgroundProcess,F as chip,d as close,r as composerPlaceholder,K as confirmDeleteConversation,Y as confirmShort,g as connecting,_ as consultingCode,o as copy,ue as default,M as degraded,G as deleteConversation,Z as effort,m as emptyHint,p as emptyTitle,re as emptyTitleCodeRain,P as error,V as favoriteMissions,w as git,ne as header,b as history,B as home,X as imagesUnsupported,c as maximize,u as minimize,A as mission,y as model,I as newAgent,f as newConversation,j as noProvider,k as palette,Q as prCard,ee as problemFrame,O as project,T as provider,x as queue,C as queueEdit,se as railCard,S as receipt,te as refs,J as removeFavoriteConversation,l as restore,ce as runCard,le as runFailure,z as search,i as send,v as size,$ as specDraft,a as stop,t as subtitle,L as switchToAgent,R as switchToKanban,h as thinking,E as tier,e as title,N as toolCard,n as trigger,H as untitled,oe as window,U as workspace};
@@ -0,0 +1 @@
1
+ var e=`ミッションセンター`,t=`チャットで Specrails を操作`,n=`ミッションセンター`,r=`エージェントに何でも頼んでください…`,i=`送信`,a=`停止`,o=`コピー`,s={openPreview:`{{name}}をプレビュー`,openDownload:`{{name}}をダウンロード`,previewTitle:`{{name}}のプレビュー`,downloadTitle:`ファイルをダウンロードしますか?`,downloadPrompt:`このファイルはここではプレビューできません。ダウンロードしますか?`,download:`ダウンロード`,cancelDownload:`今はしない`,loading:`ファイルを準備中…`,loadFailed:`添付ファイルを読み込めませんでした`,loadError:`添付ファイルを読み込めませんでした: {{error}}`},c=`最大化`,l=`元に戻す`,u=`最小化`,d=`閉じる`,f=`新しいミッション`,p=`ミッションは何ですか?`,m=`プロジェクトを選んでから尋ねてください。エージェントの作業中、ボードはリアルタイムで更新されます。`,h=`考え中…`,g=`接続中…`,_=`アプリを確認中…`,v={compact:`コンパクト`,comfortable:`快適`,max:`最大化`},y={label:`モデル`,loading:`モデルを読み込み中…`,unavailable:`モデルを利用できません`},b={hint:`プロンプト履歴を表示中 — 入力で編集、↑↓ で移動`},x={queued:`キュー待ち`,send:`メッセージを送信`,sendHint:`次のターンに送信します。キュー内のメッセージで「方向修正」を選ぶと、モデルを中断せずに送信できます。`,placeholder:`キューにメッセージを追加…`,delivered:`エージェントに送信済み`,interrupted:`送信未確認`,cancelled:`送信前にキャンセル`,steer:`方向修正`,steerHint:`モデルを中断せずに送信`,steering:`エージェントに送信中…`,remove:`キューからメッセージを削除`,more:`メッセージのオプション`,edit:`編集`,actionConflict:`このメッセージはすでに送信中か、キューにありません。`,actionFailed:`キュー内のメッセージを更新できませんでした。もう一度お試しください。`},S={sent:`エージェントに送信済み`,received:`エージェントに配信済み`,read:`エージェントが既読`,interrupted:`送信未確認`,cancelled:`送信前にキャンセル`},C={editing:`保留中のメッセージ {{n}} / {{m}} を編集中`,hint:`↑↓ で移動 · Enter で保存 · Esc でキャンセル`,save:`保留中のメッセージを保存`,cancel:`編集をキャンセル`,dispatched:`このメッセージはすでに送信済みです。入力したテキストは下書きとして保存されます`,saveFailed:`保留中のメッセージを保存できませんでした`},w={branch:`ブランチ`,detached:`(detached)`,dirty:`未コミットの変更あり`,switched:`{{branch}} に切り替えました`,switchFailed:`ブランチを切り替えられませんでした`,lockedWhileWorking:`エージェントの作業中はブランチをロックしています`,searchPlaceholder:`ブランチを検索…`,noMatches:`一致するブランチがありません`,worktrees:`ワークツリー`,worktreePathCopied:`ワークツリーのパスをコピーしました`,copyWorktreePath:`ワークツリーのパスをコピー`,repository:`リポジトリ`,repositoryUnavailable:`リポジトリを利用できません`,loadFailed:`Git の状態を取得できません`,notGit:`コンテキストフォルダー · Git なし`,retry:`再試行`},T={label:`プロバイダー`,claude:`Claude`,codex:`Codex`,gemini:`Gemini`,kimi:`Kimi`},E={cycleHint:`⇧⇥ で変更`,observe:{name:`観察`,desc:`読み取り専用 — 何も変更しません`},edit:{name:`編集`,desc:`作成と編集(取り消し可能)`},operate:{name:`操作`,desc:`AI を起動 — 費用がかかります`},autonomous:{name:`自律`,desc:`削除と停止 — 取り消し不可`},lockedTitle:`より高いレベルが必要です`,lockedBody:`その操作には「{{level}}」レベルが必要です。現在は「{{current}}」です。`,raiseHint:`⇧⇥ でレベルを上げるか、別の方法で尋ねてください。`},D={title:`操作を確認`,costAction:`{{action}} · ~{{cost}} · {{tier}}`,approve:`承認`,cancel:`キャンセル`,dontAskAgain:`このセッションでは今後確認しない`,approved:`承認しました`,cancelled:`キャンセルしました`},O={home:`ホーム`,searchPlaceholder:`Specrails に話しかける…`,searchProjectsPlaceholder:`プロジェクトを検索…`,recents:`最近`,allProjects:`すべてのプロジェクト`,searchAll:`すべてのプロジェクトを検索`,addProject:`プロジェクトを追加…`,homeHint:`プロジェクトが未選択 — すべてのプロジェクトを横断して操作中。`,askCreateOrSearch:`プロジェクトが選択されていません。新しいプロジェクトを作成しますか、それともすべてのプロジェクトを検索しますか?`},k={remove:`{{label}} を削除`,addContextAction:`コンテキストまたはアクションを追加`,filtering:`"{{query}}" で絞り込み`,keyboard:`↑↓ Enter Esc`,noMatches:`一致なし`,noMatchesFor:`"{{query}}" の一致なし`,mode:{reference:{title:`参照`,hint:`@ プロジェクト、仕様、ミッション`},trace:{title:`トレース`,hint:`# ジョブ、実行、ID`},action:{title:`アクション`,hint:`/ このコンテキストのコマンド`}},plus:{reference:`参照`,referenceHint:`プロジェクト、仕様、ミッション`,trace:`トレース`,traceHint:`ジョブ、実行、ID`,action:`アクション`,actionHint:`作成、起動、確認`,fileAttachment:`ファイル添付`,fileAttachmentHint:`ドキュメント、画像、ログを追加`,browserCapture:`ブラウザーキャプチャ`,browserCaptureHint:`ページの領域をキャプチャしてこのミッションに追加`},railGroup:`レール`,railGroupInUse:`使用中のレール`},A={label:`ミッションを切り替え`,untitled:`新しいミッション`,new:`新しいミッション`,searchPlaceholder:`ミッションを検索…`,noMatches:`一致するミッションがありません`,working:`エージェントが作業中`,queuedBadge:`{{n}} 件キュー中`,delete:`ミッション "{{title}}" を削除`,deleteConfirm:`削除しますか?`,deleteLiveConfirm:`エージェントが作業中です — それでも削除しますか?`,confirmDelete:`削除を確定`,cancelDelete:`ミッションを残す`,deleteFailed:`ミッションを削除できませんでした`},j={title:`AIプロバイダーが未インストール`,body:`エージェントには Claude、Codex、Gemini、Kimi のいずれかが必要です。インストールしてからエージェントを再度開いてください。`,placeholder:`AIプロバイダーをインストールしてエージェントを利用…`},M={title:`Specrails MCP がオフです`,body:`エージェントがアプリを操作するには、組み込みの MCP サーバーが必要です。`,enable:`Specrails MCP を有効化`,enabling:`有効化中…`,enabled:`MCP を有効化しました`},N={live:`ライブ`,queued:`待機中`,running:`実行中`,done:`完了`,failed:`失敗`},P={generic:`問題が発生しました。もう一度お試しください。`,busy:`エージェントは処理中です。しばらくしてからお試しください。`},F={kindAgent:`エージェントのミッション`},I=`新しいミッション`,L=`ミッションセンターに切り替え`,R=`ボードに切り替え`,z=`検索`,B=`ホーム`,V=`お気に入りミッション`,H=`無題`,U={title:`ワークスペース`,terminal:`ターミナル`,files:`ファイル`,browser:`ブラウザ`,requiresProject:`このツールを使うにはプロジェクトを選択してください`,resizeCode:`コードペインをリサイズ`,closeFiles:`コードを閉じる`,browserConfirm:`エージェントに追加`,browserSelectStart:`ミッションに追加する要素を選択`,browserCaptured:`キャプチャを追加しました`,uploadFailed:`アップロードに失敗しました`,requiresConversation:`このツールを使うにはミッションを開始してください`,jobs:`ジョブ`,closeJobs:`ジョブを閉じる`,resizeJobs:`ジョブパネルのサイズ変更`,noJobs:`まだジョブがありません — エージェントに実行を頼んでみましょう`,analytics:`アナリティクス`,closeAnalytics:`アナリティクスを閉じる`,resizeAnalytics:`アナリティクスパネルをリサイズ`},W=`ファイルを添付`,G=`「{{title}}」を削除`,K=`「{{title}}」の削除を確認`,q=`「{{title}}」をお気に入りに追加`,J=`「{{title}}」をお気に入りから削除`,Y=`削除しますか?`,X=`このプロバイダーはまだ画像を読み取れません — テキストファイルを添付してください`,Z={label:`エフォート`,minimal:`最小`,low:`低`,medium:`中`,high:`高`,xhigh:`最高`,max:`最大`,ultra:`ウルトラ`},Q=JSON.parse(`{"operation":{"inProgress":"操作を実行中…","create-pr":"PR を作成中…","publish":"公開中…","discard":"破棄中…","dismiss":"フォローアップを閉じています…","poll-merge":"マージを確認中…","reopen":"再オープン中…","merge-local":"ローカルで統合中…","recover-and-retry":"保存された結果をコミットして再プッシュしています…","acknowledge-no-changes":"完了に変更中…"},"markDone":"完了にする","refine":"改善する","completedNote":"確認済み — spec を完了に移動しました","partialSummary":"{{total}} 件中 {{succeeded}} 件完了、{{failed}} 件失敗","unit":{"failed":"実装失敗","blocked":"配信ブロック","noChanges":"変更なし","succeeded":"準備完了"},"rail":"レール {{index}}","specCount_one":"スペック {{count}} 件","specCount_other":"スペック {{count}} 件","base":"ベースブランチ","openPr":"PR を開く","existingPr":"既存の PR","title":{"no_changes":"変更は不要でした","partial":"一部を実装しました","delivery_blocked":"実装完了 — 配信に対応が必要です","update_failed":"実装完了 — 更新に失敗しました","pr_closed":"PR はマージされずに閉じられました","superseded":"新しい実行に置き換えられました","existing_pr_updated":"既存の PR を更新しました","building":"分離されたワークツリーで実装中…","buildingExistingPr":"既存の PR に変更を適用中…","paused":"人の判断が必要です","on_review":"実装のレビュー準備完了","pr_draft":"ドラフト PR を作成しました","pr_draft_degraded":"PR の公開が未完了","pr_ready":"PR のマージ準備完了","implementation_failed":"実装に失敗しました","pr_failed":"PR の作成に失敗しました","merged":"PR がマージされました","discarded":"破棄済み"},"buildingHint":"完了すると PR を作成するか確認します。","buildingExistingPrHint":"Specrails は既存 PR のブランチで作業しており、レビュー変更を同じ PR に push します。","paused":"実装を一時停止中","pausedForRun":"{{ref}} で一時停止中","resume":"再開","stopExecution":"実行を停止","stopExecutionSent":"停止シグナルを送信しました","stopExecutionFailed":"実行を停止できませんでした","createPr":"PR を作成","publish":"公開","checkout":"ブランチをチェックアウト","openReview":"レビュー","openReviewTooltip":"わかりやすいレビューを開く","checkoutTooltip":"プロジェクトのメインフォルダで {{branch}} をチェックアウト","checkoutSuccess":"{{branch}} をチェックアウトしました","checkoutFailed":"実装ブランチをチェックアウトできませんでした","checkoutDirtyTitle":"変更を保護するためチェックアウトをブロックしました","checkoutDirtyBody":"プロジェクトのメインフォルダーに未コミットの変更があります。コミットまたは stash してから、もう一度お試しください。変更は一切加えられていません。","checkoutSafetyUnknownTitle":"安全性を確認できないためチェックアウトを一時停止しました","checkoutSafetyUnknownBody":"Specrails はプロジェクトのメインフォルダーの Git 状態を読み取れませんでした。解放や変更は行われていません。Git が利用可能になってから再試行してください。","checkoutNotDeliverableTitle":"このブランチには保持された実装がありません","checkoutNotDeliverableBody":"配信対象の正確なコミットはまだ検証されていません。代わりにローカルの結果を確認または復元してください。","inspectLocalResult":"ローカルの結果を確認","inspectLocalResultTooltip":"保存された隔離 worktree を表示してパスをコピー","localResultPathCopied":"ローカル結果のパスをコピーしました","localResultPath":"保存されたローカル結果","localResultUnavailableHere":"このコンピューターには復元可能な worktree がありません。実行したコンピューターで実行ログを確認してください。","recoverAndRetry":"コミットして push を再試行","recoverAndRetryVerified":"復元したコミット {{sha}} が PR 上で検証されました","recoveryStillBlocked":"ローカル復元には引き続き対応が必要です","recheckRecovery":"もう一度確認","recoveryUnavailable":"このコンピューターでは復旧を検証できませんでした","recoveryUnavailableBody":"Specrails は、このクローンで配信に属する結果を安全に 1 つへ特定できませんでした。変更や削除は行われていません。ステージの詳細と run ログを確認してください。run を別のコンピューターで実行した場合は、そちらで Specrails を開いて再確認してください。","recoveryDetailSummary":"復旧の技術的詳細","retry":"再試行","retryPr":"PR を再試行","checkMerge":"マージを確認","verifyPr":"PRを検証","discard":"破棄","confirmDiscard":"破棄しますか?","mergedNote":"マージ済み — スペックは完了に移動しました","discardedNote":"破棄済み — スペックはバックログに戻されました","implementationFailedNote":"実装の実行は、配信可能な成果物が生成される前に失敗しました。実行ログで失敗内容を確認し、再実行する前にこのカードを破棄してください。","dismiss":"フォローアップを閉じる","discardLocalResult":"ローカル結果を破棄","retryPush":"プッシュを再試行","retryPushVerified":"プッシュを検証しました · コミット {{sha}} はPRに含まれています","commitAlreadyVerified":"コミット {{sha}} はすでにPRで検証済みです","deliveryCommit":"コミット {{sha}}","reopen":"再オープン","createPartialPr":"{{count}} 件で PR を作成","supersededNote":"新しい実装実行がこのカードを置き換えました。","noChangesExisting":"新しい変更は不要でした。既存の PR は変更されていません。","noChangesNote":"コード変更は不要でした。spec を完了にするか、改善のためバックログに戻してください。","deliveryNeedsAttention":"実装完了。配信に対応が必要です","deliveryBlockedNote":"実装は成功しましたが、配信がブロックされています。ローカル結果を破棄する前に、ステージの詳細と実行ログを確認してください。","partialDeliveryBlockedNote":"実装の一部は成功しましたが、まだ安全に配信できるものはありません。次の操作を選ぶ前に、ユニットごとの結果と実行ログを確認してください。","retryPushNote":"実装は成功し、変更はローカルに安全に保存されています。プッシュのみ再試行してください。","cleanupIncomplete_one":"クリーンアップが不完全です(警告 {{count}} 件)","cleanupIncomplete_other":"クリーンアップが不完全です(警告 {{count}} 件)","safetyArchiveTitle":"安全アーカイブ({{count}})","safetyArchiveHint":"念のため、一時ワークスペースファイルを PR の外部に保存しました。内容を確認するか、手動で削除できます。","confirm":{"recoverAndRetryTitle":"保存された結果をコミットして push しますか?","recoverAndRetryBody":"Specrails は {{branch}} 用の隔離 worktree または記録済みの fast-forward 可能なブランチだけを使用します。必要に応じて配信対象ファイルをコミットし、PR が想定された head/base のまま開いている場合に限り、その正確なコミットだけを push します。メインのプロジェクトフォルダーと未コミットの変更には一切触れません。","recheckRecoveryTitle":"このコンピューターをもう一度確認しますか?","recheckRecoveryBody":"Specrails は、このクローンで {{branch}} の配信に属する worktree、ブランチ、refs、reflogs、孤立した Git オブジェクトを再スキャンします。結果を 1 つに特定できた場合、隔離された変更をコミットし、正確な push を再試行します。メインのプロジェクトフォルダーには触れません。","noChangesDoneTitle":"これらの spec を完了にしますか?","noChangesDoneBody":"コード変更が不要であることを実装が確認しました。spec を完了に移動し、変更のない worktree をクリーンアップします。","refineTitle":"これらの spec を改善しますか?","refineBody":"変更なしの結果を閉じ、改善できるよう spec をバックログに戻します。実行ログは引き続き利用できます。","mergeLocalTitle":"ローカルで統合しますか?","mergeLocalBody":"提供されたブランチをローカルの {{base}} にマージします。既存の変更は保持されます。変更が重なる場合は、統合前に解決が必要になることがあります。","freshDiscardTitle":"この配信を破棄しますか?","freshDiscardBody":"PR はリモートブランチを削除せずにクローズされます。SpecRails が所有し、記録済みコミットのままのローカルブランチと worktree だけが削除されます。変更されたものは警告とともに保持されます。spec はバックログに戻ります。削除されたローカルリソースは復旧できません。","implementationFailedDiscardTitle":"失敗した配信を破棄しますか?","implementationFailedDiscardBody":"カードを閉じ、spec をバックログに戻します。ローカルの作業とブランチは確認できるよう保持されます。安全にクリーンアップできることが確認されたリソースのみ削除される場合があります。","dismissTitle":"このフォローアップを閉じますか?","dismissBody":"このフォローアップカードを閉じます。専用 worktree は、安全に削除できる場合にのみ削除されます。安全でない場合は警告とともに保持されます。既存の PR、ブランチ、レビュー状態は変更されません。","discardLocalTitle":"ローカル結果を破棄しますか?","discardLocalBody":"復旧可能なローカル反復は、安全に削除できる場合にのみ削除されます。変更されている場合は警告とともに保持されます。既存の PR とブランチは変更されません。削除された結果は復旧できません。"},"degraded":{"pushed":"ブランチはプッシュされましたが、PR を作成できませんでした — 再試行して完了してください。","localOnly":"変更はローカルで組み立てられましたが、プッシュされていません — 再試行して PR を公開してください。"},"alreadyResolved":"すでに他の場所で解決済み","actionFailed":"操作に失敗しました","notMergedYet":"まだマージされていません","commitMissingRetry":"配信コミットは PR に含まれなくなりました。プッシュを再試行できます。","prVerifiedWaiting":"コミット {{sha}} を検証しました · マージ待ち","viewLog":"{{ref}} の実行ログを表示","runElapsedAria":"経過時間 {{elapsed}}","runCostAria":"消費コスト {{cost}}","pinned":{"label":"ピン留め","marker":"実装カード — 上部にピン留め中","collapse":"ピン留めカードを最小化","expand":"ピン留めカードを展開","expandCard":"このカードを展開","collapseCard":"このカードを最小化","collapsed_one":"実装カード","collapsed_other":"{{count}} 件の実装カード","state":{"completed":"完了","no_changes":"変更なし","pr_closed":"クローズ","superseded":"置換済み","building":"実装中","on_review":"レビュー","pr_draft":"ドラフト PR","pr_ready":"公開済み","implementation_failed":"失敗","pr_failed":"失敗","merged":"マージ済み","discarded":"破棄済み"}},"mergeLocal":"ローカルに統合","mergeLocalTooltip":"配信されたブランチをローカルチェックアウトの {{base}} にマージします(GitHub 不要)","mergeLocalBlockedDirty":"統合できません:{{base}} のローカル変更が実装と重なっています。該当する変更をコミットまたはスタッシュしてから再試行してください。","mergeLocalBlockedBranch":"統合できません:チェックアウトは {{current}} で、{{base}} ではありません。{{base}} に切り替えて再試行してください。","mergedLocally":"ローカルで {{base}} に統合しました","discardStackedNote":"このマイルストーンの後続レールはこの納品を基に構築されています。破棄するとマイルストーンのチェーンが一時停止します。後続レールの作業は保持されます。"}`),$={heading:`スペック下書き`,drafting:`下書きを更新中…`,acceptanceCriteria:`受け入れ基準`,untitled:`無題のスペック`,expand:`説明をすべて表示`,collapse:`説明を折りたたむ`},ee={heading:`認識の整理`,framing:`依頼を整理しています…`,restated:`理解した内容`,alternative:`こちらの意味かもしれません`,pick:`これで返信`,touches:`影響する範囲`,discriminator:`どちらでしょうか?`,assumptions:`前提としていること`,unknowns:`未確定のこと`},te={openTicket:`スペック #{{id}} を開く`,openPullRequest:`PR #{{id}} を開く`,openJob:`ジョブ {{id}} を開く`,openLoop:`ループ {{id}} を開く`,ticketNotFound:`スペック #{{id}} が見つかりません — 削除された可能性があります`,pullRequestUrlMissing:`PR #{{id}} は URL なしで参照されました`,pullRequestNotFound:`このプロジェクトで PR #{{id}} が見つかりません`,jobNotFound:`ジョブが見つかりません — 削除された可能性があります`,loopNotFound:`ループが見つかりません — 削除された可能性があります`,lookupFailed:`参照を確認できませんでした — もう一度お試しください`},ne={untitled:`無題のミッション`,menu:`ミッションメニュー`,rename:`名前を変更`,renamePlaceholder:`ミッション名`,renameHint:`ダブルクリックで名前を変更`,renameFailed:`名前を変更できませんでした`,addFavorite:`お気に入りに追加`,removeFavorite:`お気に入りから削除`,copyName:`ミッション名をコピー`,copyId:`ミッション ID をコピー`,copyProject:`プロジェクト名をコピー`,copyProjectPath:`プロジェクトパスをコピー`,copyFailed:`コピーできませんでした`,copyTranscript:`トランスクリプトをコピー`,copyTranscriptSuccess:`トランスクリプトをコピーしました`,copyTranscriptFailed:`トランスクリプトをコピーできませんでした`,exportTranscript:`トランスクリプトをエクスポート (.txt)`,exportTranscriptSuccess:`トランスクリプトのエクスポートを開始しました`,exportTranscriptFailed:`トランスクリプトをエクスポートできませんでした`,delete:`ミッションを削除`,deleteConfirm:`このミッションを削除しますか?元に戻せません。`,deleteFailed:`ミッションを削除できませんでした`},re=`次に何を作りますか?`,ie={title:`実行ログ`,live:`ライブ`,empty:`このターンにはまだツールの活動がありません。`,output:`出力`,error:`エラー`,copyAll:`ログ全体をコピー`,copyEntry:`エントリをコピー`,copySuccess:`ログをクリップボードにコピーしました`,copyFailed:`ログをコピーできませんでした`,openLog:`実行ログを表示`,close:`閉じる`},ae={open:`{{command}} のログを表示`,logsTitle:`プロセスログ`,logsDescription:`このプロセスのリアルタイム出力と保存済み履歴。`,close:`ログを閉じる`,command:`コマンド`,directory:`ディレクトリ`,exitCode:`終了コード:{{code}}`,signal:`シグナル:{{signal}}`,search:`ログを検索…`,source:`出力元`,allSources:`すべての出力`,pause:`一時停止`,resume:`再開`,follow:`追従`,copy:`表示中のログをコピー`,download:`表示中のログをダウンロード`,stop:`プロセスを停止`,stopCommand:`{{command}} を停止`,stopFailed:`プロセスを停止できませんでした。再試行してください。`,truncated:`表示するログには上限があります。過去の出力や長い行の一部が省略される場合があります。コピーとダウンロードにはこの表示のみが含まれます。`,paused:`表示を一時停止中です。プロセスは実行を続けています。`,loadFailed:`ログを読み込めませんでした。保存期間が終了した可能性があります。読み込み済みの出力は引き続き表示されます。`,retry:`再試行`,copied:`表示中のログをコピーしました。`,exportFailed:`ログをエクスポートできませんでした。再試行してください。`,output:`プロセス出力`,loading:`ログを読み込み中…`,noMatches:`一致する出力はありません。`,empty:`まだ出力がありません。`,lineCount:`{{total}} 行中 {{count}} 行`,exportHint:`エクスポートには現在のフィルターと保持中の出力のみが含まれます。`,status:{starting:`起動中`,running:`実行中`,stopping:`停止中`,exited:`終了`,killed:`停止済み`,failed:`失敗`,interrupted:`切断`},repository:`リポジトリ`,history:{button:`プロセス`,title:`ミッションのプロセス`,open:`プロセス履歴を表示`,description:`実行中のプロセスと過去の実行で保存されたログを確認できます。`,search:`コマンドまたはリポジトリを検索…`,refresh:`履歴を更新`,close:`プロセス履歴を閉じる`,back:`プロセスに戻る`,loading:`プロセス履歴を読み込み中…`,empty:`このミッションにはまだプロセスの記録がありません。`,noMatches:`一致するプロセスはありません。`,loadFailed:`履歴を読み込めませんでした。読み込み済みの項目は引き続き確認できます。`,showMore:`さらに表示`,count:`プロセス数:{{count}}`},interruptedHint:`Specrailsによるこのプロセスの監視は終了しました。OS上の状態は不明です。保存済みのログは引き続き確認できます。`,persistenceFailed:`プロセス履歴を保存できませんでした。取得済みの出力は引き続き表示されます。`},oe={detach:`別のウィンドウで開く`,attach:`メインウィンドウに戻す`,detached:`このミッションは別のウィンドウで開いています。`,focus:`ミッションのウィンドウを表示`,loading:`ミッションを移動中…`,failed:`ミッションを移動できませんでした。下書きは保持されています。`,dismiss:`閉じる`,wrongMission:`移動する前にこのミッションを開いてください。`,finishPending:`進行中の操作を完了するか、メッセージまたはキャプチャを保存またはキャンセルしてから、ミッションを移動してください。`},se={heading:`レールの起動`,rail:`レール {{index}}`,newRail:`新しいレール`,play:`Play`,launching:`起動中…`,dismiss:`閉じる`,playHint:`必要に応じて調整し、Play を押して自分の権限で起動します。`,pending:`起動の提案を準備しています…`,unreadable_one:`エージェントの起動提案を読み取れませんでした。`,unreadable_other:`{{count}} 件の起動提案を読み取れませんでした。`,pinnedMarker:`起動提案は入力欄の上に固定されています`,effortDefault:`デフォルトの推論強度`,profileNone:`プロファイルなし`,status:{proposal:`提案`,ready:`準備完了`,blocked:`要確認`,loading:`確認中…`},availability:{free:`空き`,busy:`実行中`,pending_decision:`判断待ち`,on_review:`レビュー中`},fields:{rail:`レール`,newRailName:`新しいレール名(任意)`,railName:`レール名`,addSpec:`スペックを追加`,removeSpec:`#{{id}} を削除`,loop:`ループ`,engine:`AI エンジン`,model:`モデル`,effort:`推論強度`,profile:`エージェントプロファイル`,targetPr:`対象 PR #`,baseBranch:`ベースブランチ`},notes:{railMissing:`レール {{index}} はもう存在しません — 別のレールを選ぶか、新しく作成してください。`,railBusy:`レール {{index}} は{{state}}です — ここでは起動できません。`,useFree:`レール {{index}} を使う`,specsDropped:`このプロジェクトに存在しません: {{ids}}`,engineStale:`このマシンで {{engine}} が検出されません — {{fallback}} を使用します。`,modelStale:`{{model}} は利用できません — {{fallback}} を使用します。`},block:{noProject:`このミッションはプロジェクトに固定されていません。`,loadFailed:`プロジェクトのレールを読み込めませんでした。`,noSpecs:`起動するにはスペックを 1 件以上追加してください。`,railLimit:`{{max}} 本のレールがすべて存在し、空きがありません。`},errors:{tickets_in_flight:`これらのスペックのいずれかはすでに別のレールで実行中です。`,pr_decision_pending:`このレールは PR の判断待ちです。`,rail_limit_reached:`プロジェクトのレール数はすでに上限です。`,invalid_base_branch:`そのベースブランチはローカルに存在しません。`,base_branch_requires_isolation:`ベースブランチには worktree による分離(コミットのある git リポジトリ)が必要です。`,target_pr_requires_pr_mode:`対象 PR には worktree による分離(コミットのある git リポジトリ)が必要です。`,invalid_response:`サーバーから予期しない応答がありました。`},stub:{launched:`起動しました → レール {{rail}}`,dismissed:`提案を閉じました`,viewRun:`実行を表示`,goToCard:`カードへ移動`,goToCardTitle:`この起動の実装カードへ移動`,viewRunTitle:`この run のライブログを開く`}},ce={status:{running:`実行中`,paused:`一時停止中`,succeeded:`成功`,failed:`失敗`,stalled:`停滞`,cancelled:`キャンセル済み`,unknown:`不明`},title:{running:`プロジェクトのチェックアウトで実装中…`,paused:`人の判断が必要です`,succeeded:`実装が完了しました`,failed:`実装に失敗しました`,stalled:`実装が停滞しています`,cancelled:`実行はキャンセルされました`,unknown:`実行状態は不明です`},noDeliveryNote:`PR フェーズなし — このプロジェクトには git リポジトリもコミットもないため、作業はプロジェクトフォルダーに直接反映されました。`,noDeliveryHint:`プロジェクトフォルダーで直接実行しています(git リポジトリもコミットもないため、PR は提案されません)。`,failure:{title:`停止した理由`,step:`ステップ {{step}}`,unit:`#{{ticket}} · {{code}}`},actions:{resume:`再開`,approve:`承認`,recover:`復旧して再試行`,relaunch:`再起動`},relaunchSent:`レール {{index}} を再起動しました — 新しいカードが実行を追跡します。`,relaunchFailed:`レールを再起動できませんでした`,relaunchBlockedActive:`レールにはまだ実行中の処理があります`},le={marker:`レール {{rail}} が失敗しました: {{code}}`,openCard:`カードを開く`,briefing:{title:`自動障害ブリーフィング`}},ue={title:e,subtitle:t,trigger:n,composerPlaceholder:r,send:i,stop:a,copy:o,attachment:s,maximize:c,restore:l,minimize:u,close:d,newConversation:f,emptyTitle:p,emptyHint:m,thinking:h,connecting:g,consultingCode:_,size:v,model:y,history:b,queue:x,receipt:S,queueEdit:C,git:w,provider:T,tier:E,approval:D,project:O,palette:k,mission:A,noProvider:j,degraded:M,toolCard:N,error:P,chip:F,newAgent:I,switchToAgent:L,switchToKanban:R,search:z,home:B,favoriteMissions:V,untitled:H,workspace:U,attachFile:W,deleteConversation:G,confirmDeleteConversation:K,addFavoriteConversation:q,removeFavoriteConversation:J,confirmShort:Y,imagesUnsupported:X,effort:Z,prCard:Q,specDraft:$,problemFrame:ee,refs:te,header:ne,emptyTitleCodeRain:re,activity:ie,backgroundProcess:ae,window:oe,railCard:se,runCard:ce,runFailure:le};export{ie as activity,q as addFavoriteConversation,D as approval,W as attachFile,s as attachment,ae as backgroundProcess,F as chip,d as close,r as composerPlaceholder,K as confirmDeleteConversation,Y as confirmShort,g as connecting,_ as consultingCode,o as copy,ue as default,M as degraded,G as deleteConversation,Z as effort,m as emptyHint,p as emptyTitle,re as emptyTitleCodeRain,P as error,V as favoriteMissions,w as git,ne as header,b as history,B as home,X as imagesUnsupported,c as maximize,u as minimize,A as mission,y as model,I as newAgent,f as newConversation,j as noProvider,k as palette,Q as prCard,ee as problemFrame,O as project,T as provider,x as queue,C as queueEdit,se as railCard,S as receipt,te as refs,J as removeFavoriteConversation,l as restore,ce as runCard,le as runFailure,z as search,i as send,v as size,$ as specDraft,a as stop,t as subtitle,L as switchToAgent,R as switchToKanban,h as thinking,E as tier,e as title,N as toolCard,n as trigger,H as untitled,oe as window,U as workspace};