farming-code 2.2.14 → 2.2.17

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 (136) hide show
  1. package/README.md +3 -3
  2. package/README.zh_cn.md +3 -3
  3. package/THIRD_PARTY_NOTICES.md +17 -1
  4. package/backend/acp/packaged-codex-acp.js +13 -0
  5. package/backend/acp-runtime.js +413 -24
  6. package/backend/agent-manager.js +572 -557
  7. package/backend/agent-provider-session.js +15 -1
  8. package/backend/agent-runtime-binding.js +9 -55
  9. package/backend/chat-runtime.js +28 -0
  10. package/backend/codex-rollout-follower.js +83 -0
  11. package/backend/codex-session-archive.js +12 -1
  12. package/backend/codex-session-history.js +94 -0
  13. package/backend/codex-transcript.js +2 -1
  14. package/backend/config-manager.js +25 -17
  15. package/backend/control-api.js +3 -1
  16. package/backend/farming-app-cli.js +21 -0
  17. package/backend/farming-session-store.js +2 -1
  18. package/backend/native-pty-host-client.js +59 -2
  19. package/backend/npm-update-helper.js +65 -7
  20. package/backend/provider-adapters.js +123 -38
  21. package/backend/provider-session-service.js +138 -34
  22. package/backend/server.js +94 -105
  23. package/backend/storage-layout.js +5 -16
  24. package/backend/update-service.js +94 -5
  25. package/backend/usage-history-client.js +305 -0
  26. package/backend/usage-history-scanner.generated.js +2250 -0
  27. package/backend/usage-history-scanner.ts +2718 -0
  28. package/backend/usage-history-smoke.js +64 -0
  29. package/backend/usage-history-worker.js +34 -0
  30. package/backend/usage-monitor.js +188 -588
  31. package/backend/vendor/usage-parsers/CC_STATISTICS_LICENSE +21 -0
  32. package/backend/vendor/usage-parsers/CODEXBAR_LICENSE +21 -0
  33. package/backend/vendor/usage-parsers/VENDOR.json +45 -0
  34. package/dist/acp/LICENSE.codex-acp +190 -0
  35. package/dist/acp/codex-acp-1.1.4.js +30718 -0
  36. package/dist/assets/App-6yWdwzj8.js +210 -0
  37. package/dist/assets/{FileEditorMarkdownPreview-UlVd0O4D.js → FileEditorMarkdownPreview-R0jwwLME.js} +4 -4
  38. package/dist/assets/FileEditorPane-DNy3LAqS.js +2 -0
  39. package/dist/assets/{IconGlyphs-AU22gPDY.js → IconGlyphs-BsUfqpKN.js} +1 -1
  40. package/dist/assets/ProjectFilesSection-BhDEUVHA.js +12 -0
  41. package/dist/assets/{ReviewPage-CeDKDyZh.js → ReviewPage-ChtByBe3.js} +1 -1
  42. package/dist/assets/{abnfDiagram-VRR7QNED-BgawzDQT.js → abnfDiagram-VRR7QNED-nnglrXFi.js} +1 -1
  43. package/dist/assets/{architectureDiagram-ZJ3FMSHR-DUShwPg0.js → architectureDiagram-ZJ3FMSHR-BEXMaFfY.js} +1 -1
  44. package/dist/assets/{blockDiagram-677ZJIJ3-CeGZviXR.js → blockDiagram-677ZJIJ3-1mCezSBk.js} +1 -1
  45. package/dist/assets/{c4Diagram-LMCZKHZV-CLhYht6S.js → c4Diagram-LMCZKHZV-DhTiI6Uv.js} +1 -1
  46. package/dist/assets/channel-BVWNatUB.js +1 -0
  47. package/dist/assets/{chunk-32BRIVSS-LFYpT-Cu.js → chunk-32BRIVSS-CCdsKd73.js} +1 -1
  48. package/dist/assets/{chunk-52WLFC77-BH6jDw9J.js → chunk-52WLFC77-Gncjk4LF.js} +1 -1
  49. package/dist/assets/{chunk-C7G6YPKG-B_mIUlb7.js → chunk-C7G6YPKG-CiDVUP82.js} +1 -1
  50. package/dist/assets/{chunk-EX3LRPZG-C63hVuAJ.js → chunk-EX3LRPZG-z6gXP2_N.js} +1 -1
  51. package/dist/assets/{chunk-FWX5IMBZ-CboX-WF_.js → chunk-FWX5IMBZ-DMZBccQa.js} +2 -2
  52. package/dist/assets/{chunk-HOUHSVGY-BOgSd6Un.js → chunk-HOUHSVGY-D8tIeoPk.js} +1 -1
  53. package/dist/assets/{chunk-ICXQ74PX-C0K-pgZt.js → chunk-ICXQ74PX-b6oQ2Q17.js} +1 -1
  54. package/dist/assets/{chunk-MOJQB5TN-CVMfwN_7.js → chunk-MOJQB5TN-DAVH_p2a.js} +1 -1
  55. package/dist/assets/{chunk-OGEWGWER-DLT3pxyw.js → chunk-OGEWGWER-DxoiMCI-.js} +1 -1
  56. package/dist/assets/{chunk-PUDLZKDR-Cd079yIQ.js → chunk-PUDLZKDR-NsOWh7HM.js} +1 -1
  57. package/dist/assets/{chunk-Q4XR5HBZ-D0jHa6SO.js → chunk-Q4XR5HBZ-Di4H7L21.js} +1 -1
  58. package/dist/assets/{chunk-V7JOEXUC-CVDtR75H.js → chunk-V7JOEXUC-DttpZg9Y.js} +1 -1
  59. package/dist/assets/{chunk-VAUOI2AC-B-W2_9Ot.js → chunk-VAUOI2AC-UHNr_yhX.js} +1 -1
  60. package/dist/assets/{chunk-VR4S4FIN-FD3kWh32.js → chunk-VR4S4FIN-D-Fmtd4Z.js} +1 -1
  61. package/dist/assets/{chunk-WYO6CB5R-C2bGaS5r.js → chunk-WYO6CB5R-CUxMtfK2.js} +4 -4
  62. package/dist/assets/{chunk-ZGVPDNZ5-ymgts0zo.js → chunk-ZGVPDNZ5-CoV2QEl0.js} +1 -1
  63. package/dist/assets/classDiagram-OUVF2IWQ-Db0ib5iE.js +1 -0
  64. package/dist/assets/classDiagram-v2-EOCWNBFH-Bkf69XF9.js +1 -0
  65. package/dist/assets/code-dark-5esj0bRu.css +1 -0
  66. package/dist/assets/{cynefinDiagram-TSTJHNR4-CwpobXIl.js → cynefinDiagram-TSTJHNR4-0xPI92Lg.js} +1 -1
  67. package/dist/assets/{dagre-VKFMJZFB-Dkhlfjna.js → dagre-VKFMJZFB-DfuMG4gU.js} +1 -1
  68. package/dist/assets/{diagram-FQU43EPY-hA8dicp6.js → diagram-FQU43EPY-CT00bLZ6.js} +1 -1
  69. package/dist/assets/{diagram-G47NLZAW-BTY6JTzO.js → diagram-G47NLZAW-Xbh7zXUx.js} +1 -1
  70. package/dist/assets/{diagram-NH7WQ7WH-xkaHHX9M.js → diagram-NH7WQ7WH-SRDVPfn7.js} +1 -1
  71. package/dist/assets/{diagram-OA4YK3LP-gk_fg9UU.js → diagram-OA4YK3LP-CQRli4Np.js} +1 -1
  72. package/dist/assets/{diagram-WEI45ONY-BvC8xd6T.js → diagram-WEI45ONY-DMf17WQi.js} +1 -1
  73. package/dist/assets/{ebnfDiagram-CCIWWBDH-CR7RaNat.js → ebnfDiagram-CCIWWBDH-DhpFkgJ5.js} +1 -1
  74. package/dist/assets/{erDiagram-Q63AITRT-_M-JFPbj.js → erDiagram-Q63AITRT-1IwxWmJo.js} +1 -1
  75. package/dist/assets/file-icons-DpbrD5ZP.js +1 -0
  76. package/dist/assets/flowDiagram-23GEKE2U-DYFo2xmB.js +1 -0
  77. package/dist/assets/{ganttDiagram-NO4QXBWP-Bl8P1yf_.js → ganttDiagram-NO4QXBWP-BNCdfyr1.js} +1 -1
  78. package/dist/assets/{gitGraphDiagram-IHSO6WYX-DoHa5ysz.js → gitGraphDiagram-IHSO6WYX-pbyWZuiX.js} +1 -1
  79. package/dist/assets/{index-BA-iH2Kg.js → index-C8ZFKye1.js} +2 -2
  80. package/dist/assets/{infoDiagram-FWYZ7A6U-DSFcSuUs.js → infoDiagram-FWYZ7A6U-BcTOgDbe.js} +1 -1
  81. package/dist/assets/{ishikawaDiagram-FXEZZL3T-DdkqullI.js → ishikawaDiagram-FXEZZL3T-DCdvGKrn.js} +1 -1
  82. package/dist/assets/{journeyDiagram-5HDEW3XC-B4hRnQJr.js → journeyDiagram-5HDEW3XC-BZ-1q_IT.js} +1 -1
  83. package/dist/assets/{kanban-definition-HUTT4EX6-tm2FZB2E.js → kanban-definition-HUTT4EX6-BIgejCjj.js} +1 -1
  84. package/dist/assets/{line-CmsjK4kn.js → line-CfptFMmX.js} +1 -1
  85. package/dist/assets/main-DSO3i_Gs.css +1 -0
  86. package/dist/assets/{mermaid.core-C7UT_EEL.js → mermaid.core-gSpX30pV.js} +3 -3
  87. package/dist/assets/{mindmap-definition-LN4V7U3C-DplfjGms.js → mindmap-definition-LN4V7U3C-BKBaI4LW.js} +1 -1
  88. package/dist/assets/{pegDiagram-2B236MQR-lu3SdkQs.js → pegDiagram-2B236MQR-sBvDY3VX.js} +1 -1
  89. package/dist/assets/{pieDiagram-ENE6RG2P-3fHbmDf9.js → pieDiagram-ENE6RG2P-DWlWcu08.js} +1 -1
  90. package/dist/assets/{quadrantDiagram-ABIIQ3AL-a5qoWz-X.js → quadrantDiagram-ABIIQ3AL-DZutUd3J.js} +1 -1
  91. package/dist/assets/{railroadDiagram-RFXS5EU6-D2TOuXW9.js → railroadDiagram-RFXS5EU6-DQb3lXGM.js} +1 -1
  92. package/dist/assets/{requirementDiagram-TGXJPOKE-LQBWpUvd.js → requirementDiagram-TGXJPOKE-DqFGXu2e.js} +1 -1
  93. package/dist/assets/{sankeyDiagram-HTMAVEWB-B1ohYoyK.js → sankeyDiagram-HTMAVEWB-d7ECahnO.js} +1 -1
  94. package/dist/assets/{sequenceDiagram-DBY2YBRQ-C3vM-hMq.js → sequenceDiagram-DBY2YBRQ-DdsbKqct.js} +1 -1
  95. package/dist/assets/{stateDiagram-2N3HPSRC-BvFhOryI.js → stateDiagram-2N3HPSRC-P6iSrgwR.js} +1 -1
  96. package/dist/assets/stateDiagram-v2-6OUMAXLB-DIYSf_qh.js +1 -0
  97. package/dist/assets/{swimlanes-5IMT3BWC-DKF_b-2s.js → swimlanes-5IMT3BWC-BGnZJx1M.js} +1 -1
  98. package/dist/assets/swimlanesDiagram-G3AALYLV-BIkrlKrZ.js +8 -0
  99. package/dist/assets/{timeline-definition-FHXFAJF6-vAs11ux_.js → timeline-definition-FHXFAJF6-rA-r3aUR.js} +1 -1
  100. package/dist/assets/{vennDiagram-L72KCM5P-BybTX_9B.js → vennDiagram-L72KCM5P-DiVKUjA9.js} +1 -1
  101. package/dist/assets/{wardleyDiagram-EHGQE667-CicUmMBR.js → wardleyDiagram-EHGQE667-Cfxh7UOn.js} +1 -1
  102. package/dist/assets/workspace-editor-model-D0Im34S5.js +1 -0
  103. package/dist/assets/{workspace-editor-monaco-BICJESG0.js → workspace-editor-monaco-BIpqcWf1.js} +1 -1
  104. package/dist/assets/workspace-editor-monaco-DLlws5Ig.js +1 -0
  105. package/dist/assets/{workspace-view-state-DvYG_9PH.js → workspace-view-state-BpPINu84.js} +1 -1
  106. package/dist/assets/{xychartDiagram-FW5EYKEG-BhWDyCX-.js → xychartDiagram-FW5EYKEG--hmryQeL.js} +1 -1
  107. package/dist/crt-mermaid-renderer.js +313 -313
  108. package/dist/index.html +1 -1
  109. package/frontend/session-bridge.js +24 -2
  110. package/frontend/skins/crt/app.js +203 -85
  111. package/frontend/skins/crt/index.html +2 -11
  112. package/frontend/skins/crt/styles/effects.css +2 -34
  113. package/package.json +30 -12
  114. package/shared/backend-connection-status.d.ts +25 -0
  115. package/shared/backend-connection-status.js +40 -0
  116. package/shared/browser-protocol.js +3 -3
  117. package/backend/app-server-api.js +0 -917
  118. package/backend/codex-app-server-home.js +0 -39
  119. package/backend/codex-app-server-runtime.js +0 -901
  120. package/dist/assets/App-Bumi772v.js +0 -206
  121. package/dist/assets/FileEditorPane-Dxx4rKOg.js +0 -2
  122. package/dist/assets/ProjectFilesSection-DE7Nb9Jk.js +0 -12
  123. package/dist/assets/channel-Uw90AO0b.js +0 -1
  124. package/dist/assets/classDiagram-OUVF2IWQ-DKW_dtku.js +0 -1
  125. package/dist/assets/classDiagram-v2-EOCWNBFH-C8Fi7-yv.js +0 -1
  126. package/dist/assets/code-dark-DPiuyeSp.css +0 -1
  127. package/dist/assets/code-mobile-3C2Rr-CN.css +0 -1
  128. package/dist/assets/file-icons-Bw2qd5iT.js +0 -1
  129. package/dist/assets/flowDiagram-23GEKE2U-DAiS5Y7G.js +0 -1
  130. package/dist/assets/main-Bqtb5kuz.css +0 -1
  131. package/dist/assets/stateDiagram-v2-6OUMAXLB-WMrz4PNo.js +0 -1
  132. package/dist/assets/swimlanesDiagram-G3AALYLV-BGswC9oC.js +0 -8
  133. package/dist/assets/workspace-editor-model-BQol4qbA.js +0 -1
  134. package/dist/assets/workspace-editor-monaco-DRJ7IaXk.js +0 -1
  135. package/scripts/sync-ghostty-vendor.js +0 -66
  136. /package/dist/assets/{core-D0LFJkDt.js → core-B9MwRjDE.js} +0 -0
@@ -1,3 +1,3 @@
1
- import{r as e}from"./chunk-DECur_0Z.js";import{i as t,t as n}from"./jsx-runtime-BthL93pI.js";import{T as r,c as i,f as a,g as o,h as s,m as c,s as l,u}from"./IconGlyphs-AU22gPDY.js";import{a as d,c as f,d as p,i as m,l as h,n as g,o as _,r as v,s as y,t as b,u as x}from"./core-D0LFJkDt.js";import{A as S,C as ee,D as te,E as ne,F as re,M as ie,N as C,O as ae,P as oe,S as se,T as ce,_ as le,a as ue,b as w,c as de,d as fe,f as pe,g as me,h as he,i as ge,j as T,k as _e,l as ve,m as ye,n as be,p as xe,r as Se,s as Ce,t as we,u as Te,v as Ee,w as De,x as Oe,y as ke}from"./api-D8nyOEbz.js";var E=e(t());function D(e){let t=[`package`,`import`,`option`,`optional`,`required`,`repeated`,`group`,`oneof`],n=[`double`,`float`,`int32`,`int64`,`uint32`,`uint64`,`sint32`,`sint64`,`fixed32`,`fixed64`,`sfixed32`,`sfixed64`,`bool`,`string`,`bytes`],r={match:[/(message|enum|service)\s+/,e.IDENT_RE],scope:{1:`keyword`,2:`title.class`}};return{name:`Protocol Buffers`,aliases:[`proto`],keywords:{keyword:t,type:n,literal:[`true`,`false`]},contains:[e.QUOTE_STRING_MODE,e.NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,r,{className:`function`,beginKeywords:`rpc`,end:/[{;]/,excludeEnd:!0,keywords:`rpc returns`},{begin:/^\s*[A-Z_]+(?=\s*=[^\n]+;$)/}]}}function Ae(e){return e instanceof Error&&e.message.trim()?e.message.trim():typeof e==`string`&&e.trim()?e.trim():`review file diff request failed`}function O(e){return e.diffLoaded===!1&&!ie(e)}function je(e,t,n,r={}){if(t.reviewId!==void 0&&r.reviewId!==t.reviewId)throw Error(`loaded review file belongs to a stale review`);if(n.path!==t.path)throw Error(`loaded review file path does not match requested path`);if(O(n))throw Error(`loaded review file is still a metadata-only row`);if(!e[t.patchset]?.some(e=>e.path===t.path))throw Error(`loaded review file path is no longer in the review catalog`);return{action:{patchset:t.patchset,path:t.path,...t.reviewId?{reviewId:t.reviewId}:{},type:`commit-file-diff-load`},catalog:se(e,t.patchset,{...n,diffLoaded:!0})}}function Me(e,t){return{error:Ae(t),patchset:e.patchset,path:e.path,...e.reviewId?{reviewId:e.reviewId}:{},type:`fail-file-diff-load`}}function k(e){return e===`added`?`A`:e===`copied`?`C`:e===`deleted`?`D`:e===`renamed`?`R`:e===`rewritten`?`W`:e===`unmodified`?`U`:e===`reverted`?`X`:`M`}function A(e){return e.status?e.status:k(e.kind)}function j(e){return _e(e)}function Ne(e){return e.binary?`binary`:ie(e)?`too-expensive`:e.diffLoaded===!1?`not-loaded`:`loaded`}function Pe(e,t,n={}){let r=n.patchset??e.patchRange.patchset,i=C(e,t.path,r),a=oe(e,r),o=i.loaded?i.status===`reviewed`:null;return{action:o===null?null:{ariaLabel:o?`Mark as unreviewed`:`Mark as reviewed`,disabled:!!n.mutationPending,label:o?`MARK UNREVIEWED`:`MARK REVIEWED`,nextReviewed:!o,visibility:`on-row-interaction`},added:t.added,binary:t.binary===!0,changeLabel:A(t),commentPaths:j(t),deleted:t.removed,...T(e,t.path,r)?{diffLoadError:T(e,t.path,r)}:{},diffLoadPending:a.pendingDiffPaths.includes(t.path),diffStatus:Ne(t),diffTooExpensive:t.diffTooExpensive===!0||t.diff.truncated===!0,expanded:a.expandedPaths.includes(t.path),...t.newMode?{newMode:t.newMode}:{},...t.newSha?{newSha:t.newSha}:{},...t.oldMode?{oldMode:t.oldMode}:{},...t.oldSha?{oldSha:t.oldSha}:{},path:t.path,pending:i.pending,...t.previousPath?{previousPath:t.previousPath}:{},reviewed:o,reviewedLabel:o===!0?`Reviewed`:null,reviewStatusLoaded:i.loaded,...Number.isInteger(t.size)?{size:t.size}:{},...Number.isInteger(t.sizeDelta)?{sizeDelta:t.sizeDelta}:{}}}function Fe(e){let t=typeof e==`string`?new URLSearchParams(e):e,n=t.get(`agentId`)?.trim()||``,r=[...new Set(t.getAll(`acpItem`).map(e=>e.trim()).filter(Boolean))];return!n||r.length===0||r.length>256?null:{agentId:n,itemIds:r}}function M(e,t,n){let r=e.get(t);if(r===null||r.trim()===``||!/^\d+$/.test(r.trim()))return;let i=Number(r.trim());return Number.isSafeInteger(i)&&i>=n?i:void 0}function Ie(e){let t=e.get(`ignoreWhitespace`);if(t===`ALL`||t===`IGNORE_ALL`)return`ALL`;if(t===`TRAILING`||t===`IGNORE_TRAILING`)return`TRAILING`;if(t===`LEADING_AND_TRAILING`||t===`IGNORE_LEADING_AND_TRAILING`)return`LEADING_AND_TRAILING`}function Le(e){let t=e.get(`metadataOnly`);return t===`1`||t===`true`?!0:void 0}function Re(e){let t=e.get(`scope`);return t===`tracked`||t===`untracked`?t:void 0}function ze(e){let t=M(e,`context`,0),n=Ie(e),r=M(e,`limit`,1),i=Le(e),a=M(e,`modifiedWithinDays`,1),o=Re(e),s=e.getAll(`path`).map(e=>e.trim()).filter(Boolean);return{...t===void 0?{}:{context:t},...n?{ignoreWhitespace:n}:{},...r===void 0?{}:{limit:r},...i===!0?{metadataOnly:i}:{},...o?{scope:o}:{},...s.length>0?{paths:s}:{},...o===`untracked`&&a!==void 0?{modifiedWithinDays:a}:{}}}function Be(e){let t=typeof e==`string`?new URLSearchParams(e):e,n=t.get(`agentId`)?.trim()||``,r=t.get(`root`)?.trim()||``;if(n&&r)return{error:`only one review workspace target is allowed`,request:null};if(!n&&!r)return{request:null};let i=n?{agentId:n}:{root:r},a=ze(t),o=t.get(`reviewId`)?.trim()||``,s=t.get(`base`),c=t.get(`head`);if(!(s!==null||c!==null))return{request:{...i,...a,source:`working-copy`}};let l=w(s||``),u=w(c||``);return!l||!u?{error:`base and head revisions are invalid`,request:null}:{request:{...i,base:l,head:u,...a,...o?{reviewId:o}:{},source:`git-range`}}}function Ve(e){return Be(e?.search??``)}var N=n();async function He(e,t){let n=[],r=[],i=0;return await Promise.all(Array.from({length:Math.min(4,t.length)},async()=>{for(;i<t.length;){let a=t[i++];if(a)try{n.push(await fe(e,a))}catch(e){r.push(e instanceof Error?e:Error(`review file diff request failed`))}}})),{errors:r,files:n}}function Ue(e){let t=L(e.path),n=t===`python`,r=tt(e.path).replace(/\W/g,`_`),i=(e,t)=>({kind:`context`,left:{line:e,text:t},right:{line:e,text:t}}),a=Array.from({length:128},(e,n)=>{let r=n+1,a=t===`python`?`#`:t===`markdown`?`<!--`:`//`,o=t===`markdown`?` -->`:``,s=r>=29?`unchanged review context ${r-28}`:`unchanged review prelude ${r}`;return i(r,`${r===29||r===128?` `:``}${a} ${s}${o}`)});if(e.kind===`added`){let t=n?`${r} = create_review_snapshot()`:`export const ${r} = createReviewSnapshot()`,i=n?`__all__ = ["${r}"]`:`export default ${r}`;return{hunks:[{header:`@@ -0,0 +1,2 @@ ${e.path}`,oldStart:0,oldLines:0,newStart:1,newLines:2,rows:[{kind:`added`,right:{line:1,text:t}},{kind:`added`,right:{line:2,text:i}}]}]}}if(e.kind===`deleted`){let t=n?`def summarize_changes():`:`export function summarizeChanges() {`,r=n?` return "legacy summary"`:` return 'legacy summary'`;return{hunks:[{header:`@@ -1,2 +0,0 @@ ${e.path}`,oldStart:1,oldLines:2,newStart:0,newLines:0,rows:[{kind:`deleted`,left:{line:1,text:t}},{kind:`deleted`,left:{line:2,text:r}}]}]}}let o=n?`def create_change_set(input: ChangeInput) -> list[ReviewEntry]:`:`export function createChangeSet(input: ChangeInput) {`,s=n?` return normalize_changes(input.files)`:` return normalizeChanges(input.files)`,c=n?` return create_review_entries(input.files, input.base)`:` return createReviewEntries(input.files, input.base)`,l=n?`def mark_reviewed(path: str) -> ReviewState:`:`export function markReviewed(path: string) {`,u=n?` return {"path": path, "reviewed_at": time.time()}`:` return { path, reviewedAt: Date.now() }`,d=n?`if not path:`:` if (!path) return null`,f=n?` return None`:` const snapshot = readSnapshot(input.base)`,p=n?`return {**snapshot, "files": input.files}`:` return { ...snapshot, files: input.files }`,m=n?``:`}`,h=n?` return finalize_change_set(input) `:` return finalizeChangeSet(input) `;return{hunks:[{commonContext:a,header:`@@ -129,7 +129,10 @@ ${e.path}`,oldStart:129,oldLines:7,newStart:129,newLines:10,rows:[i(129,o),{kind:`deleted`,left:{line:130,text:s}},{kind:`added`,right:{line:130,text:c}},i(131,m),{kind:`added`,right:{line:133,text:l}},{kind:`added`,right:{line:134,text:u}},i(135,d),i(136,f),{kind:`added`,right:{line:137,text:p}},i(138,m),{kind:`deleted`,left:{line:139,text:h},whitespaceOnly:!0},{kind:`added`,right:{line:139,text:h.trimEnd()},whitespaceOnly:!0}]}]}}function We(e){return{...e,diff:Ue(e)}}var Ge=Object.fromEntries(Object.entries({"Patchset 20":[{path:`clis/dataflow.py`,kind:`modified`,added:2,removed:85},{path:`clis/diagnose.py`,kind:`modified`,added:8,removed:11},{path:`clis/fetch_instance_log.py`,kind:`deleted`,added:0,removed:573},{path:`clis/fetch_logview.py`,kind:`modified`,added:2,removed:2},{path:`clis/fetch_meta_timeline.py`,kind:`modified`,added:0,removed:2},{path:`clis/fetch_quota_snapshot.py`,kind:`deleted`,added:0,removed:290},{path:`clis/hbo_plan_diagnose.py`,kind:`deleted`,added:0,removed:119},{path:`clis/parse_logview.py`,kind:`modified`,added:6,removed:2},{path:`clis/query_sls.py`,kind:`modified`,added:14,removed:2},{path:`devclis/README.md`,kind:`added`,added:15,removed:0},{path:`docs/cli/studio.md`,kind:`modified`,added:1,removed:2},{path:`tests/review/change-set.spec.ts`,kind:`renamed`,previousPath:`tests/changes/change-summary.spec.ts`,added:28,removed:6}],"Patchset 19":[{path:`clis/dataflow.py`,kind:`modified`,added:1,removed:52},{path:`clis/diagnose.py`,kind:`modified`,added:5,removed:6},{path:`clis/fetch_instance_log.py`,kind:`deleted`,added:0,removed:573},{path:`clis/fetch_logview.py`,kind:`modified`,added:1,removed:2},{path:`clis/fetch_meta_timeline.py`,kind:`modified`,added:0,removed:2},{path:`clis/hbo_plan_diagnose.py`,kind:`deleted`,added:0,removed:119},{path:`clis/parse_logview.py`,kind:`modified`,added:4,removed:2},{path:`clis/query_sls.py`,kind:`modified`,added:7,removed:1},{path:`docs/cli/studio.md`,kind:`modified`,added:1,removed:1}]}).map(([e,t])=>[e,t.map(We)])),Ke=`Working copy`,qe=`Review`,P={"Patchset 20":[`clis/dataflow.py`,`clis/fetch_instance_log.py`],"Patchset 19":[`clis/fetch_instance_log.py`]},Je=De,Ye=`farming.review.diff-preferences`;b.registerLanguage(`typescript`,m),b.registerLanguage(`python`,_),b.registerLanguage(`sql`,d),b.registerLanguage(`markdown`,y),b.registerLanguage(`cpp`,x),b.registerLanguage(`java`,h),b.registerLanguage(`protobuf`,D),b.registerLanguage(`json`,f),b.registerLanguage(`yaml`,g),b.registerLanguage(`bash`,p),b.registerLanguage(`xml`,v);function Xe(){if(typeof window>`u`)return Je;try{return te(JSON.parse(window.localStorage.getItem(Ye)||`{}`))}catch{return Je}}function Ze(e,t=!0){return e?e.source===`git-range`?e.head:Ke:t?`Patchset 20`:qe}function Qe(e,t=!0){return e?e.source===`git-range`?e.base:`HEAD`:`Base`}function $e(e,t=!0){return e?{[Ze(e,t)]:[]}:t?Ge:{[qe]:[]}}function et({catalog:e,comments:t,initialPatchset:n,basePatchset:r,initiallyExpand:i,reviewId:a}){let o=ne({catalog:e,comments:t,patchRange:{basePatchset:r,patchset:n},preferences:Xe(),reviewId:a,reviewedPathsByPatchset:n===`Patchset 20`||n===`Patchset 19`?P:{}});return i?{...o,patchsets:Object.fromEntries(Object.keys(e).map(t=>{let n=e[t]??[],r=n[1]?.path??n[0]?.path;return[t,{...oe(o,t),expandedPaths:r?[r]:[]}]}))}:o}function tt(e){let t=e.split(`/`);return t[t.length-1]||e}function F(e){let t=Math.abs(e);return t<1024?`${e} B`:t<1024*1024?`${(e/1024).toFixed(1)} KiB`:`${(e/(1024*1024)).toFixed(1)} MiB`}function I(e){return e.replace(/[&<>"']/g,e=>({"&":`&amp;`,"<":`&lt;`,">":`&gt;`,'"':`&quot;`,"'":`&#39;`})[e]??e)}function nt(e,t,n){return Array.from(e).slice(t,n).join(``)}function rt({action:e,pending:t,reviewed:n,reviewedLabel:r,onToggle:i}){return(0,N.jsxs)(`div`,{className:`review-review-status ${n?`reviewed`:``} ${t?`pending`:``}`,children:[r?(0,N.jsx)(`span`,{className:`review-reviewed-label`,children:r}):null,e?(0,N.jsx)(`button`,{type:`button`,"aria-checked":n===!0,"aria-label":`Reviewed`,"data-action-visibility":e.visibility,disabled:e.disabled,role:`switch`,title:t?`Saving review status`:e.ariaLabel,onClick:i,children:t?`SAVING…`:e.label}):(0,N.jsx)(`span`,{className:`review-review-loading`,children:`Reviewed status loading`})]})}function it({file:e,maxChangeSize:t}){if(e.binary)return(0,N.jsx)(`span`,{className:`review-change-bar binary`,"aria-label":`Binary file`});let n=e=>e===0?0:Math.max(2,Math.round(e/t*72));return(0,N.jsxs)(`span`,{className:`review-change-bar`,"aria-label":`+${e.added} −${e.removed}`,children:[(0,N.jsx)(`i`,{className:`added`,style:{width:`${n(e.added)}px`}}),(0,N.jsx)(`i`,{className:`deleted`,style:{width:`${n(e.removed)}px`}})]})}function at({file:e}){if(e.binary){let t=typeof e.sizeDelta==`number`&&Number.isInteger(e.sizeDelta)?e.sizeDelta:null;return(0,N.jsx)(`span`,{className:`review-file-stats binary`,children:t===null?`Binary`:F(t)})}return(0,N.jsxs)(`span`,{className:`review-file-stats`,children:[e.added?(0,N.jsxs)(`span`,{className:`added`,children:[`+`,e.added]}):null,e.removed?(0,N.jsxs)(`span`,{className:`removed`,children:[`−`,e.removed]}):null]})}function L(e){let t=e.toLowerCase();return t.endsWith(`.osql`)||t.endsWith(`.odpsql`)?`sql`:t.endsWith(`.py`)?`python`:t.endsWith(`.md`)||t.endsWith(`.mdx`)?`markdown`:/\.(c|cc|cpp|cxx|h|hh|hpp|hxx)$/.test(t)?`cpp`:t.endsWith(`.java`)?`java`:t.endsWith(`.proto`)?`protobuf`:t.endsWith(`.json`)?`json`:t.endsWith(`.yaml`)||t.endsWith(`.yml`)?`yaml`:/\.(bash|sh|zsh)$/.test(t)?`bash`:/\.(html|htm|xml)$/.test(t)?`xml`:`typescript`}function R({intraline:e,language:t,line:n,side:r,text:i,preferences:a}){let o=n&&r?{"data-review-line":n,"data-review-side":r}:{},s=a.showTrailingWhitespace?i.match(/[ \t]+$/)?.[0]:void 0,c=s?i.slice(0,-s.length):i,l=a.intralineDifference?e:void 0,u=l?.length?ot(c,l,t,a):z(c,t,a);return a.showTabs&&(u=u.replace(/\t/g,`<span class="review-tab-marker">⇥</span>`)),s&&(u+=`<span class="review-trailing-whitespace">${s.replace(/[ \t]/g,`·`)}</span>`),(0,N.jsx)(`code`,{...o,dangerouslySetInnerHTML:{__html:u}})}function z(e,t,n){return n.syntaxHighlighting&&e?b.highlight(e,{language:t,ignoreIllegals:!0}).value:I(e)}function ot(e,t,n,r){let i=``,a=0,o=Array.from(e).length;for(let s of t){let t=Math.max(a,Math.min(s.start,o)),c=Math.max(t,Math.min(s.end,o));i+=z(nt(e,a,t),n,r),c>t&&(i+=`<span class="review-intraline">${z(nt(e,t,c),n,r)}</span>`),a=c}return i+=z(nt(e,a),n,r),i}function B({kind:e,intraline:t,language:n,line:r,side:i,text:a,preferences:o,renderAttachment:s}){return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(`div`,{className:`review-diff-row unified ${e}`,children:[(0,N.jsx)(`span`,{children:r??``}),(0,N.jsx)(R,{intraline:t,language:n,line:r,side:i,text:a,preferences:o})]}),r?s?.(r,[i]):null]})}function V({kind:e,language:t,leftLine:n,leftIntraline:r,leftText:i,rightLine:a,rightIntraline:o,rightText:s,preferences:c,renderAttachment:l}){let u=a??n,d=[...n?[`left`]:[],...a?[`right`]:[]];return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(`div`,{className:`review-diff-row ${e}`,children:[(0,N.jsx)(`span`,{children:n??``}),(0,N.jsx)(R,{intraline:r,language:t,line:n,side:`left`,text:i??``,preferences:c}),(0,N.jsx)(`span`,{children:a??``}),(0,N.jsx)(R,{intraline:o,language:t,line:a,side:`right`,text:s??``,preferences:c})]}),u?l?.(u,d):null]})}function H(e){let t=e.findIndex(e=>e.kind!==`context`);if(t<0)return{body:e,leading:[],trailing:[]};let n=e.length-1;for(;n>t&&e[n]?.kind===`context`;)--n;return{body:e.slice(t,n+1),leading:e.slice(0,t),trailing:e.slice(n+1)}}function U(e,t,n){let r=e.filter(e=>e.kind!==`context`&&e.kind!==`skipped`);return(t===`first`?r:[...r].reverse()).find(e=>e[n]?.line)?.[n]?.line}function st(e,t){let n=e[t]?.rows??[],r=e[t-1]?.rows??[],i=[`left`,`right`].flatMap(e=>{let t=U(n,`first`,e);if(!t)return[];let i=U(r,`last`,e);return[Math.max(0,t-(i??0)-1)]});return i.length?Math.min(...i):0}function W(e,t){let n=e[t];if(!n)return 0;let r=e[t-1],i=r?r.oldStart+r.oldLines-1:0,a=r?r.newStart+r.newLines-1:0;return Math.max(0,Math.min(n.oldStart-i-1,n.newStart-a-1))}function G(e){let t=e.diff.hunks[e.diff.hunks.length-1],n=e.diff.leftMeta?.lines,r=e.diff.rightMeta?.lines;if(!t||!Number.isInteger(n)||!Number.isInteger(r))return 0;let i=t.oldStart+t.oldLines-1,a=t.newStart+t.newLines-1;return Math.max(0,Math.min((n??0)-i,(r??0)-a))}function ct(e,t,n,r){let i=n[r-1],a=n[r];return`${e}:${t}:${i?`${i.oldStart+i.oldLines-1}:${i.newStart+i.newLines-1}`:`0:0`}>${a?`${a.oldStart}:${a.newStart}`:`0:0`}`}function K(e,t){let n=t.diff.hunks[t.diff.hunks.length-1],r=n?`${n.oldStart+n.oldLines-1}:${n.newStart+n.newLines-1}`:`0:0`;return`${e}:${t.path}:${r}>eof:${t.diff.leftMeta?.lines??0}:${t.diff.rightMeta?.lines??0}`}function lt(){return{aboveRows:[],belowRows:[]}}function ut(e,t,n,r,i){let a=n.diff.hunks[r],o=n.diff.hunks[r-1],s=H(a?.rows??[]),c=o?H(o.rows):null,l=[...a?.commonContext??[],...s.leading],u=!!a?.commonContext?.length,d=u?st(n.diff.hunks,r):W(n.diff.hunks,r),f=ct(e,n.path,n.diff.hunks,r),p=t[f]??lt(),m=c?.trailing.slice(0,r>0?Math.min(d,i):0)??[],h=Math.min(Math.max(0,d-m.length),i),g=h>0?l.slice(-h):[],_=Math.max(0,d-(u?m.length+g.length:0)-p.aboveRows.length-p.belowRows.length),v=u?U(o?.rows??[],`last`,`left`)??0:o?o.oldStart+o.oldLines-1:0,y=u?U(o?.rows??[],`last`,`right`)??0:o?o.newStart+o.newLines-1:0,b=v+(u?m.length:0)+p.aboveRows.length+1,x=y+(u?m.length:0)+p.aboveRows.length+1;return{availableRows:[...c?.trailing??[],...a?.commonContext??[],...s.leading].filter(e=>{let t=e.left?.line,n=e.right?.line;return t!==void 0&&n!==void 0&&t>=b&&t<b+_&&n>=x&&n<x+_}),baseAboveRows:m,baseBelowRows:g,expansion:p,header:a?.header??``,hiddenLines:_,key:f,location:r===0?`top`:`middle`,newHiddenStart:x,oldHiddenStart:b}}function dt(e,t,n,r){let i=n.diff.hunks[n.diff.hunks.length-1];if(!i)return null;let a=G(n),o=K(e,n),s=t[o]??lt(),c=H(i.rows).trailing,l=c.slice(0,Math.min(a,r)),u=Math.max(0,a-s.aboveRows.length),d=i.oldStart+i.oldLines-1,f=i.newStart+i.newLines-1,p=d+s.aboveRows.length+1,m=f+s.aboveRows.length+1;return{availableRows:c.filter(e=>{let t=e.left?.line,n=e.right?.line;return t!==void 0&&n!==void 0&&t>=p&&n>=m}),baseAboveRows:l,baseBelowRows:[],expansion:s,header:``,hiddenLines:u,key:o,location:`bottom`,newHiddenStart:m,oldHiddenStart:p}}function q({gap:e,onExpand:t}){let n=e.hiddenLines>10,r=!!e.expansion.pending;return(0,N.jsxs)(`div`,{className:`review-diff-hunk interactive`,role:`group`,"aria-label":`${e.hiddenLines} hidden common lines`,children:[(0,N.jsx)(`span`,{children:e.header}),(0,N.jsxs)(`span`,{className:`review-context-controls`,children:[n&&e.location!==`top`?(0,N.jsx)(`button`,{type:`button`,disabled:r,"aria-label":`Show 10 lines above`,onClick:()=>t(`above`),children:`+10↑`}):null,n&&e.location!==`top`?(0,N.jsx)(`span`,{"aria-hidden":`true`,children:`−`}):null,(0,N.jsxs)(`button`,{type:`button`,disabled:r,"aria-label":`Show all ${e.hiddenLines} common lines`,onClick:()=>t(`all`),children:[`+`,e.hiddenLines,` common `,e.hiddenLines===1?`line`:`lines`]}),n&&e.location!==`bottom`?(0,N.jsx)(`span`,{"aria-hidden":`true`,children:`−`}):null,n&&e.location!==`bottom`?(0,N.jsx)(`button`,{type:`button`,disabled:r,"aria-label":`Show 10 lines below`,onClick:()=>t(`below`),children:`+10↓`}):null]}),e.expansion.error?(0,N.jsx)(`span`,{className:`review-context-error`,role:`alert`,children:e.expansion.error}):null]})}function ft({contextKeyPrefix:e,contextGapExpansions:t,file:n,mode:r,preferences:i,renderAttachment:a,onExpandContext:o,onExpandSkippedContext:s}){let c=L(n.path),l=n.diff.hunks.reduce((e,t)=>{for(let n of[...t.commonContext??[],...t.rows])n.left?.missingNewlineAtEnd&&(e.left=!0),n.right?.missingNewlineAtEnd&&(e.right=!0);return e},{left:!1,right:!1}),u=(t,r,a)=>{let o=Math.max(t.leftLines??0,t.rightLines??0),c=ct(e,n.path,n.diff.hunks,a),l=i.context,u=Math.min(10,o);return(0,N.jsxs)(`button`,{type:`button`,className:`review-skipped-row`,onClick:()=>s(c,a,Math.min(1e4,l+u)),children:[`Show `,u,` more common lines (`,o,` hidden)`]},r)},d=(e,t,n)=>(0,N.jsx)(N.Fragment,{children:(i.ignoreWhitespace===`NONE`?e:e.filter(e=>!e.whitespaceOnly)).map((e,o)=>{let s=`${n}:${t}:${e.left?.line??``}:${e.right?.line??``}:${o}`;if(r===`unified`){if(e.kind===`skipped`)return u(e,s,t);if(e.kind===`context`){let t=e.right??e.left;return(0,N.jsx)(B,{intraline:t?.intraline,kind:`context`,language:c,line:t?.line,side:S(`context`,!!e.right),text:t?.text??``,preferences:i,renderAttachment:a},s)}return e.kind===`changed`?(0,N.jsxs)(E.Fragment,{children:[(0,N.jsx)(B,{intraline:e.left?.intraline,kind:`deleted`,language:c,line:e.left?.line,side:S(`deleted`,!1),text:e.left?.text??``,preferences:i,renderAttachment:a}),(0,N.jsx)(B,{intraline:e.right?.intraline,kind:`added`,language:c,line:e.right?.line,side:S(`added`,!0),text:e.right?.text??``,preferences:i,renderAttachment:a})]},s):e.left?(0,N.jsx)(B,{intraline:e.left.intraline,kind:`deleted`,language:c,line:e.left.line,side:S(`deleted`,!1),text:e.left.text,preferences:i,renderAttachment:a},s):(0,N.jsx)(B,{intraline:e.right?.intraline,kind:`added`,language:c,line:e.right?.line,side:S(`added`,!!e.right),text:e.right?.text??``,preferences:i,renderAttachment:a},s)}return e.kind===`skipped`?u(e,s,t):(0,N.jsx)(V,{kind:e.kind,language:c,leftIntraline:e.left?.intraline,leftLine:e.left?.line,leftText:e.left?.text,rightIntraline:e.right?.intraline,rightLine:e.right?.line,rightText:e.right?.text,preferences:i,renderAttachment:a},s)})}),f=n.diff.hunks.map((r,a)=>ut(e,t,n,a,i.context)),p=dt(e,t,n,i.context),m=[...f,...p?[p]:[]].filter(e=>e.hiddenLines>0&&e.hiddenLines<=3&&!e.expansion.pending&&!e.expansion.error),h=m.map(e=>`${e.key}:${e.hiddenLines}:${e.oldHiddenStart}:${e.newHiddenStart}`).join(`|`),g=(0,E.useRef)(o);g.current=o,(0,E.useEffect)(()=>{for(let e of m)g.current(e,`all`,{lines:e.hiddenLines,newStart:e.newHiddenStart,oldStart:e.oldHiddenStart})},[h]);let _=(e,t)=>{let n=t===`all`?e.hiddenLines:Math.min(10,e.hiddenLines),r=t===`below`?e.hiddenLines-n:0;o(e,t,{lines:n,newStart:e.newHiddenStart+r,oldStart:e.oldHiddenStart+r})},v=(e,t)=>{let n=e.expansion.aboveRows.length>0||e.expansion.belowRows.length>0,r=e.hiddenLines>3||!!e.expansion.error;return(0,N.jsxs)(N.Fragment,{children:[d(e.baseAboveRows,t,`context`),d(e.expansion.aboveRows,t,`context`),r?(0,N.jsx)(q,{gap:e,onExpand:t=>_(e,t)}):null,!r&&e.hiddenLines>0?(0,N.jsxs)(`div`,{className:`review-diff-hunk interactive loading`,role:`status`,children:[(0,N.jsx)(`span`,{children:e.header}),(0,N.jsxs)(`span`,{children:[`Loading `,e.hiddenLines,` common `,e.hiddenLines===1?`line`:`lines`,`…`]})]}):null,!r&&e.hiddenLines===0&&!n&&e.location!==`bottom`?(0,N.jsx)(`div`,{className:`review-diff-hunk ${t>0?`secondary`:``}`,children:(0,N.jsx)(`span`,{children:e.header})}):null,d(e.expansion.belowRows,t,`context`),d(e.baseBelowRows,t,`context`)]})};return(0,N.jsxs)(N.Fragment,{children:[n.diff.hunks.map((e,t)=>(0,N.jsxs)(E.Fragment,{children:[v(f[t],t),d(H(e.rows).body,t,`change`)]},`${e.header}:${t}`)),p?v(p,n.diff.hunks.length):null,l.left||l.right?(0,N.jsx)(`div`,{className:`review-newline-warning`,role:`note`,children:[l.left?`No newline at end of left file.`:``,l.right?`No newline at end of right file.`:``].filter(Boolean).join(` — `)}):null]})}function pt({row:e}){return e.diffLoadError?(0,N.jsxs)(`div`,{className:`review-diff-message error`,role:`alert`,children:[`Could not load diff: `,e.diffLoadError]}):e.diffLoadPending?(0,N.jsx)(`div`,{className:`review-diff-message`,role:`status`,children:`Loading diff…`}):e.diffStatus===`binary`?(0,N.jsx)(`div`,{className:`review-diff-message`,children:`Binary file changed`}):e.diffStatus===`too-expensive`?(0,N.jsx)(`div`,{className:`review-diff-message`,children:`Diff too large to render`}):e.diffStatus===`not-loaded`?(0,N.jsx)(`div`,{className:`review-diff-message`,children:`Diff not loaded yet`}):null}function mt({disabled:e,draft:t,target:n,onCancel:r,onDraftChange:i,onSave:a}){let o=n.side===`right`?`Patchset`:n.side===`left`?`Base`:`file`;return(0,N.jsxs)(`form`,{className:`review-comment-editor`,onSubmit:e=>{e.preventDefault(),a()},children:[(0,N.jsxs)(`header`,{children:[`Comment on `,n.range?n.range.start_line===n.range.end_line?`${o} line ${n.range.start_line}, columns ${n.range.start_character+1}–${n.range.end_character}`:`${o} lines ${n.range.start_line}–${n.range.end_line}`:`${o} line ${n.line}`]}),(0,N.jsx)(`textarea`,{"aria-label":`Review comment`,name:`farming-review-comment`,inputMode:`text`,autoComplete:`off`,autoCorrect:`off`,autoCapitalize:`none`,spellCheck:!1,enterKeyHint:`done`,"data-lpignore":`true`,"data-1p-ignore":`true`,"data-bwignore":`true`,"data-form-type":`other`,autoFocus:!0,placeholder:`Leave a review comment…`,value:t,onChange:e=>i(e.target.value)}),(0,N.jsxs)(`footer`,{children:[(0,N.jsx)(`button`,{type:`button`,onClick:r,children:`CANCEL`}),(0,N.jsx)(`button`,{type:`submit`,disabled:e||!t.trim(),children:e?`SAVING…`:`SAVE COMMENT`})]})]})}function ht({comment:e,disabled:t,onDelete:n,onStatusChange:r}){let i=e.side===`right`?`Patchset`:e.side===`left`?`Base`:`File`,o=e.status||`open`,s=e.range?e.range.start_line===e.range.end_line?`${i} line ${e.range.start_line}, columns ${e.range.start_character+1}–${e.range.end_character}`:`${i} lines ${e.range.start_line}–${e.range.end_line}`:`${i} line ${e.line}`;return(0,N.jsxs)(`article`,{className:`review-comment-thread ${o}`,children:[(0,N.jsxs)(`header`,{children:[(0,N.jsx)(`span`,{children:o===`outdated`?`Outdated · ${s}`:s}),(0,N.jsxs)(`span`,{className:`review-comment-actions`,children:[(0,N.jsx)(`button`,{type:`button`,disabled:t,onClick:()=>r(o===`resolved`?`open`:`resolved`),children:o===`resolved`?`REOPEN`:`RESOLVE`}),(0,N.jsx)(`button`,{type:`button`,"aria-label":`Delete comment on line ${e.line}`,disabled:t,onClick:n,children:(0,N.jsx)(a,{})})]})]}),(0,N.jsx)(`p`,{children:e.body})]})}function J(e,t){let n=(e instanceof Element?e:e?.parentElement)?.closest(`code[data-review-line][data-review-side]`)??null;return n&&t.contains(n)?n:null}function gt(e,t,n){let r=document.createRange();r.selectNodeContents(e);try{r.setEnd(t,n)}catch{return 0}return r.toString().length}function _t(e){let t=window.getSelection();if(!t||t.isCollapsed||!t.anchorNode||!t.focusNode)return null;let n=J(t.anchorNode,e),r=J(t.focusNode,e);if(!n||!r)return null;let i=n.dataset.reviewSide;if(i!==r.dataset.reviewSide||i!==`left`&&i!==`right`&&i!==`unified`)return null;let a=Number(n.dataset.reviewLine),o=Number(r.dataset.reviewLine);if(!Number.isInteger(a)||!Number.isInteger(o))return null;let s={character:gt(n,t.anchorNode,t.anchorOffset),line:a},c={character:gt(r,t.focusNode,t.focusOffset),line:o},l=s.line<c.line||s.line===c.line&&s.character<=c.character,u=l?s:c,d=l?c:s;return u.line===d.line&&u.character===d.character?null:{line:d.line,range:{end_character:d.character,end_line:d.line,start_character:u.character,start_line:u.line},side:i}}function Y(){let e=typeof window<`u`&&new URLSearchParams(window.location.search).get(`fixture`)===`1`,[t]=(0,E.useState)(()=>{let e=typeof window>`u`?``:window.location.search;return{requested:new URLSearchParams(e).has(`acpItem`),route:Fe(e)}}),n=t.route,[a]=(0,E.useState)(()=>Ve(typeof window>`u`?null:window.location)),d=!e&&!t.requested&&a.request&&(a.request.source===`working-copy`||a.request.head===`now`)?a.request:null,[f,p]=(0,E.useState)(()=>d||t.requested?null:a.request),[m,h]=(0,E.useState)(null),[g,_]=(0,E.useState)(`final`),[v,y]=(0,E.useState)(!!(d||n)),b=t.requested?!n:!!a.error,x=!e,S=f?.source===`working-copy`,ne=f?.source===`git-range`,[ie,C]=(0,E.useState)(()=>b?{[qe]:[]}:$e(f,e)),[w,T]=(0,E.useState)(t.requested?n?``:`ACP review target is invalid`:a.error??``),[_e,De]=(0,E.useState)(null),[D,Ae]=(0,E.useState)(()=>{let t=b?{[qe]:[]}:$e(f,e);return et({basePatchset:b?`Base`:Qe(f,e),catalog:t,comments:[],initialPatchset:b?qe:Ze(f,e),initiallyExpand:!x,reviewId:x?void 0:we})}),O=(0,E.useRef)(D),k=(0,E.useRef)(ie);k.current=ie;let[A,j]=(0,E.useState)(Je),[Ne,M]=(0,E.useState)(!1),[Ie,Le]=(0,E.useState)(!1),[Re,ze]=(0,E.useState)(``),[Be,Ue]=(0,E.useState)(``),[We,Ge]=(0,E.useState)(``),[Ke,P]=(0,E.useState)([]),[tt,F]=(0,E.useState)({}),[I,nt]=(0,E.useState)(null),[L,R]=(0,E.useState)(``),[z,ot]=(0,E.useState)(!1),[B,V]=(0,E.useState)(()=>new URLSearchParams(window.location.search).get(`comparison`)||``),[H,U]=(0,E.useState)(!1),st=(0,E.useRef)(null),W=x?D.reviewId??``:we,G=D.patchRange.patchset,ct=D.patchRange.basePatchset,K=oe(D,G),ut=new Set(K.expandedPaths),dt=D.diffMode,q=!!(m&&f?.source===`git-range`&&f.reviewId===m.reviewId&&f.head===m.head),J=q?m?.scope:f?.source===`working-copy`?f.scope:void 0,gt=J===`untracked`?`unified`:dt,Y=D.preferences,vt=f?{...f,context:Y.context,ignoreWhitespace:Y.ignoreWhitespace}:null,yt=(0,E.useRef)(vt);yt.current=vt;let X=q?{..._e??{workingTree:!0},head:void 0,workingTree:!0}:_e,Z=D.commentDraft,bt=D.commentDraft?.body??``,Q=ie[G]??[],xt=Q.reduce((e,t)=>e+t.added,0),St=Q.reduce((e,t)=>e+t.removed,0),Ct=Math.max(1,...Q.map(e=>e.added+e.removed)),$=e=>{let t=re(O.current,e,k.current);if(t.state!==O.current){O.current=t.state,Ae(t.state);for(let e of t.effects){if(e.type===`load-file-diff`){let t=yt.current;if(!t){$(Me(e,`review file diff source is unavailable`));continue}fe(t,e.path).then(t=>{let n=je(k.current,e,t,{reviewId:O.current.reviewId});k.current=n.catalog,C(n.catalog),$(n.action)}).catch(t=>$(Me(e,t)))}if(e.type===`save-reviewed-status`){let t=e.reviewId??W;le({...e,reviewId:t}).then(t=>$({patchset:e.patchset,paths:e.changes.map(e=>e.path),reviewedPaths:t.reviewedPaths,...e.reviewId?{reviewId:e.reviewId}:{},revision:t.revision,type:`commit-reviewed-status`})).catch(async n=>{let r=n instanceof be&&n.state?n.state:await xe(t,e.patchset).catch(()=>null);if(!r){let t=oe(O.current,e.patchset),n=new Set(t.reviewedPaths);for(let t of e.changes)t.reviewed?n.delete(t.path):n.add(t.path);r={reviewedPaths:[...n],revision:e.revision}}$({patchset:e.patchset,reviewedPaths:r.reviewedPaths,...e.reviewId?{reviewId:e.reviewId}:{},revision:r.revision,type:`restore-reviewed-status`}),ze(n instanceof Error?`Could not save Reviewed: ${n.message}`:`Could not save Reviewed status`)})}if(e.type===`save-comment`){let t=e.reviewId??W;me(t,e.comment).then(()=>$({id:e.comment.id,patchset:e.comment.patchset,pendingType:`save`,...e.reviewId?{reviewId:e.reviewId}:{},type:`commit-comment`})).catch(async n=>{$({comments:await Ce(t,e.comment.patchset).catch(()=>O.current.comments.filter(t=>t.id!==e.comment.id)),id:e.comment.id,patchset:e.comment.patchset,pendingType:`save`,...e.reviewId?{reviewId:e.reviewId}:{},type:`restore-comments`}),Ue(n instanceof Error?`Could not save comment: ${n.message}`:`Could not save comment`)})}if(e.type===`delete-comment`){let t=e.reviewId??W;ue(t,e.comment.patchset,e.comment.id).then(()=>$({id:e.comment.id,patchset:e.comment.patchset,pendingType:`delete`,...e.reviewId?{reviewId:e.reviewId}:{},type:`commit-comment`})).catch(async n=>{$({comments:await Ce(t,e.comment.patchset).catch(()=>[...O.current.comments,e.comment]),id:e.comment.id,patchset:e.comment.patchset,pendingType:`delete`,...e.reviewId?{reviewId:e.reviewId}:{},type:`restore-comments`}),Ue(n instanceof Error?`Could not delete comment: ${n.message}`:`Could not delete comment`)})}}}};(0,E.useEffect)(()=>(document.body.classList.add(`review-body`),()=>document.body.classList.remove(`review-body`)),[]),(0,E.useEffect)(()=>{if(!H)return;let e=e=>{st.current?.contains(e.target)||U(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[H]),(0,E.useEffect)(()=>{if(!d&&!n)return;let e=!0;return y(!0),(n?Se(n.agentId,n.itemIds):(()=>{let e=d;return ge(`root`in e&&typeof e.root==`string`?{root:e.root}:{agentId:e.agentId},e.source===`git-range`?e.base:`HEAD`,e.source===`working-copy`?{modifiedWithinDays:e.modifiedWithinDays,paths:e.paths,scope:e.scope}:void 0)})()).then(t=>{if(!e)return;let n=he(t,`final`),r=new URLSearchParams(window.location.search);r.delete(`agentId`),r.delete(`acpItem`),r.set(`root`,t.root),r.set(`base`,n.base),r.set(`head`,n.head),r.set(`reviewId`,t.reviewId),r.set(`comparison`,`last-turn`),window.history.replaceState(null,``,`${window.location.pathname}?${r.toString()}`),h(t),_(`final`),V(`last-turn`),p(n),T(``)}).catch(t=>{e&&T(t instanceof Error?t.message:`review capture failed`)}).finally(()=>{e&&y(!1)}),()=>{e=!1}},[n,d]),(0,E.useEffect)(()=>{if(d||n||f?.source!==`git-range`||!f.reviewId)return;let e=!0;return pe(f.reviewId).then(t=>{if(!e)return;let n=t.revisions.find(e=>e.head===f.head)??t;h(n),V(e=>e||`last-turn`),_(f.base===n.fixesBase&&n.fixesBase!==n.base?`fixes`:`final`)}).catch(()=>{}),()=>{e=!1}},[n,d,f]),(0,E.useEffect)(()=>{if(!f)return;let e=!0,t=Xe();return ve({...f,context:t.context,ignoreWhitespace:t.ignoreWhitespace,metadataOnly:!0}).then(async n=>{let[r,i]=await Promise.all([xe(n.reviewId,n.patchset).catch(()=>null),Ce(n.reviewId,n.patchset).catch(()=>[])]);if(!e)return;let a=ee(Oe(n),n.patchset,i.map(e=>e.path)),o=ke({comments:i,preferences:t,...r?{reviewedPaths:r.reviewedPaths}:{},snapshot:n});r&&(o=re(o,{patchset:n.patchset,reviewedPaths:r.reviewedPaths,reviewId:n.reviewId,revision:r.revision,type:`hydrate-reviewed-status`},a).state),O.current=o,k.current=a,De(n.comparison??null),C(a),Ae(o),T(``)}).catch(t=>{e&&T(t instanceof Error?t.message:`review diff request failed`)}),()=>{e=!1}},[f]),(0,E.useEffect)(()=>{if(!Re)return;let e=window.setTimeout(()=>ze(``),4e3);return()=>window.clearTimeout(e)},[Re]),(0,E.useEffect)(()=>{if(!Be)return;let e=window.setTimeout(()=>Ue(``),4e3);return()=>window.clearTimeout(e)},[Be]),(0,E.useEffect)(()=>{try{window.localStorage.setItem(Ye,JSON.stringify(Y))}catch{}},[D.preferences]),(0,E.useEffect)(()=>{if(x||!W||!k.current[G])return;let e=!0;return xe(W,G).then(t=>{e&&$({patchset:G,reviewedPaths:t.reviewedPaths,reviewId:W,revision:t.revision,type:`hydrate-reviewed-status`})}).catch(()=>{}),Ce(W,G).then(t=>{if(!e)return;let n=ee(k.current,G,t.map(e=>e.path));n!==k.current&&(k.current=n,C(n)),$({comments:t,patchset:G,reviewId:W,type:`hydrate-comments`})}).catch(()=>{}),()=>{e=!1}},[x,G,W]),(0,E.useEffect)(()=>{let e=()=>{let e=``;for(let t of document.querySelectorAll(`.review-file-change.expanded[data-file-path]`)){let n=t.querySelector(`.review-file-change-header`);if(!n)continue;let r=t.getBoundingClientRect(),i=n.getBoundingClientRect();i.top<=1&&r.bottom>i.bottom&&(e=t.dataset.filePath??``)}Ge(t=>t===e?t:e)};return e(),window.addEventListener(`scroll`,e,{passive:!0}),document.body.addEventListener(`scroll`,e,{passive:!0}),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`scroll`,e),document.body.removeEventListener(`scroll`,e),window.removeEventListener(`resize`,e)}},[G,K.expandedPaths.join(`\0`)]);let wt=!!K.pendingReview,Tt=!!K.pendingComment,Et=(e,t)=>{$({path:e,reviewed:t,type:`set-file-reviewed`})},Dt=e=>{$({patchset:e,type:`select-patchset`})},Ot=Q.length>0&&Q.every(e=>ut.has(e.path)),kt=e=>{$({path:e,type:`toggle-file-expanded`})},At=()=>{j(Y),M(!0)},jt=()=>{let e=Y,t=te(A),n=e.context!==t.context||e.ignoreWhitespace!==t.ignoreWhitespace;if($({preferences:t,type:`set-preferences`}),M(!1),n&&F({}),!x||!f||!n)return;let r=G,i=new Map(Q.map(e=>[e.path,e])),a=K.expandedPaths.filter(e=>{let t=i.get(e);return!!(t&&t.kind!==`unmodified`&&!t.binary&&!t.diffTooExpensive)});a.length&&(P(e=>[...new Set([...e,...a])]),He({...f,context:t.context,ignoreWhitespace:t.ignoreWhitespace},a).then(e=>{if(O.current.patchRange.patchset!==r)return;let t=k.current;for(let n of e.files)t=se(t,r,n);k.current=t,C(t);let n=e.errors[0];n&&T(n.message)}).finally(()=>P(e=>e.filter(e=>!a.includes(e)))))},Mt=()=>{navigator.clipboard&&navigator.clipboard.writeText(`34a15ae`).catch(()=>{}),Le(!0),window.setTimeout(()=>Le(!1),1200)},Nt=(e,t)=>{let n=yt.current;if(!n||Ke.includes(e))return;let r=G;P(t=>[...t,e]),fe({...n,context:t},e).then(e=>{let t=se(k.current,r,e);k.current=t,C(t)}).catch(e=>T(e instanceof Error?e.message:`review context request failed`)).finally(()=>P(t=>t.filter(t=>t!==e)))},Pt=(e,t,n,r)=>{let i=yt.current;if(t.expansion.pending||r.lines<1)return;let a=e=>{F(r=>{let i=r[t.key]??lt();return{...r,[t.key]:n===`below`?{...i,belowRows:[...e,...i.belowRows],error:void 0,pending:void 0}:{...i,aboveRows:[...i.aboveRows,...e],error:void 0,pending:void 0}}})},o=e=>{let n=e instanceof Error?e.message:`review context request failed`;F(e=>{let r=e[t.key]??lt();return{...e,[t.key]:{...r,error:n,pending:void 0}}})};if(F(e=>{let r=e[t.key]??lt();return{...e,[t.key]:{...r,error:void 0,pending:n}}}),!i){let e=t.availableRows.filter(e=>{let t=e.left?.line,n=e.right?.line;return t!==void 0&&n!==void 0&&t>=r.oldStart&&t<r.oldStart+r.lines&&n>=r.newStart&&n<r.newStart+r.lines});e.length===r.lines?a(e):o(Error(`review context is unavailable`));return}Te(i,e.path,r).then(e=>a(e.rows)).catch(o)},Ft=(e,t,n,r)=>{$({line:t,path:e,range:r,side:n,type:`start-comment`})},It=()=>{!Z||!bt.trim()||$({id:typeof crypto?.randomUUID==`function`?crypto.randomUUID():`comment-${Date.now()}-${Math.random().toString(36).slice(2)}`,type:`save-comment`})},Lt=(e,t)=>{W&&Ee(W,e.patchset,e.id,t).then(()=>Ce(W,e.patchset)).then(t=>$({comments:t,patchset:e.patchset,reviewId:W,type:`hydrate-comments`})).catch(e=>Ue(e instanceof Error?e.message:`review comment status failed`))},Rt=(e,t)=>{let n=he(e,t),r=new URLSearchParams(window.location.search);r.delete(`agentId`),r.set(`root`,e.root),r.set(`base`,n.base),r.set(`head`,n.head),r.set(`reviewId`,e.reviewId),r.set(`comparison`,`last-turn`),window.history.replaceState(null,``,`${window.location.pathname}?${r.toString()}`),h(e),_(t),V(`last-turn`),U(!1),p(n)},zt=f&&`root`in f&&f.root?{root:f.root}:f&&`agentId`in f&&f.agentId?{agentId:f.agentId}:m?{root:m.root}:null,Bt=()=>{let e=!H;U(e),!(!e||I||z||!zt)&&(ot(!0),R(``),de(zt).then(nt).catch(e=>R(e instanceof Error?e.message:`Comparison sources could not be loaded`)).finally(()=>ot(!1)))},Vt=e=>{if(!I)return;let t={base:e.base,head:e.head,metadataOnly:!0,root:I.root,source:`git-range`},n=new URLSearchParams(window.location.search);n.delete(`agentId`),n.delete(`reviewId`),n.delete(`path`),n.delete(`scope`),n.delete(`modifiedWithinDays`),n.set(`root`,I.root),n.set(`base`,e.base),n.set(`head`,e.head),n.set(`comparison`,e.id),window.history.replaceState(null,``,`${window.location.pathname}?${n.toString()}`),V(e.id),U(!1),_(`final`),p(t)},Ht=()=>{!m||v||(y(!0),ye(m.reviewId).then(e=>{Rt(e,e.number>1?`fixes`:`final`),T(``)}).catch(e=>T(e instanceof Error?e.message:`review refresh failed`)).finally(()=>y(!1)))},Ut=e=>{!m||e===g||Rt(m,e)},Wt=J,Gt=Wt===`tracked`?`Changes`:Wt===`untracked`?`Untracked`:`Files`,Kt=I?[I.unstaged,I.staged,...I.commits,...I.branches].find(e=>e.id===B):null,qt=q?`Last Turn`:Kt?.id.startsWith(`commit:`)?`Commit · ${Kt.label}`:Kt?.id.startsWith(`branch:`)?`Branch · ${Kt.label}`:Kt?.label??(S?`Working copy`:ne?`Changes`:Gt),Jt=B===`staged`?`Staged changes`:X?.workingTree?`Workspace changes`:X?.head?.message.split(`
1
+ import{r as e}from"./chunk-DECur_0Z.js";import{i as t,t as n}from"./jsx-runtime-BthL93pI.js";import{E as r,c as i,f as a,g as o,h as s,m as c,s as l,u}from"./IconGlyphs-BsUfqpKN.js";import{a as d,c as f,d as p,i as m,l as h,n as g,o as _,r as v,s as y,t as b,u as x}from"./core-B9MwRjDE.js";import{A as S,C as ee,D as te,E as ne,F as re,M as ie,N as C,O as ae,P as oe,S as se,T as ce,_ as le,a as ue,b as w,c as de,d as fe,f as pe,g as me,h as he,i as ge,j as T,k as _e,l as ve,m as ye,n as be,p as xe,r as Se,s as Ce,t as we,u as Te,v as Ee,w as De,x as Oe,y as ke}from"./api-D8nyOEbz.js";var E=e(t());function D(e){let t=[`package`,`import`,`option`,`optional`,`required`,`repeated`,`group`,`oneof`],n=[`double`,`float`,`int32`,`int64`,`uint32`,`uint64`,`sint32`,`sint64`,`fixed32`,`fixed64`,`sfixed32`,`sfixed64`,`bool`,`string`,`bytes`],r={match:[/(message|enum|service)\s+/,e.IDENT_RE],scope:{1:`keyword`,2:`title.class`}};return{name:`Protocol Buffers`,aliases:[`proto`],keywords:{keyword:t,type:n,literal:[`true`,`false`]},contains:[e.QUOTE_STRING_MODE,e.NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,r,{className:`function`,beginKeywords:`rpc`,end:/[{;]/,excludeEnd:!0,keywords:`rpc returns`},{begin:/^\s*[A-Z_]+(?=\s*=[^\n]+;$)/}]}}function Ae(e){return e instanceof Error&&e.message.trim()?e.message.trim():typeof e==`string`&&e.trim()?e.trim():`review file diff request failed`}function O(e){return e.diffLoaded===!1&&!ie(e)}function je(e,t,n,r={}){if(t.reviewId!==void 0&&r.reviewId!==t.reviewId)throw Error(`loaded review file belongs to a stale review`);if(n.path!==t.path)throw Error(`loaded review file path does not match requested path`);if(O(n))throw Error(`loaded review file is still a metadata-only row`);if(!e[t.patchset]?.some(e=>e.path===t.path))throw Error(`loaded review file path is no longer in the review catalog`);return{action:{patchset:t.patchset,path:t.path,...t.reviewId?{reviewId:t.reviewId}:{},type:`commit-file-diff-load`},catalog:se(e,t.patchset,{...n,diffLoaded:!0})}}function Me(e,t){return{error:Ae(t),patchset:e.patchset,path:e.path,...e.reviewId?{reviewId:e.reviewId}:{},type:`fail-file-diff-load`}}function k(e){return e===`added`?`A`:e===`copied`?`C`:e===`deleted`?`D`:e===`renamed`?`R`:e===`rewritten`?`W`:e===`unmodified`?`U`:e===`reverted`?`X`:`M`}function A(e){return e.status?e.status:k(e.kind)}function j(e){return _e(e)}function Ne(e){return e.binary?`binary`:ie(e)?`too-expensive`:e.diffLoaded===!1?`not-loaded`:`loaded`}function Pe(e,t,n={}){let r=n.patchset??e.patchRange.patchset,i=C(e,t.path,r),a=oe(e,r),o=i.loaded?i.status===`reviewed`:null;return{action:o===null?null:{ariaLabel:o?`Mark as unreviewed`:`Mark as reviewed`,disabled:!!n.mutationPending,label:o?`MARK UNREVIEWED`:`MARK REVIEWED`,nextReviewed:!o,visibility:`on-row-interaction`},added:t.added,binary:t.binary===!0,changeLabel:A(t),commentPaths:j(t),deleted:t.removed,...T(e,t.path,r)?{diffLoadError:T(e,t.path,r)}:{},diffLoadPending:a.pendingDiffPaths.includes(t.path),diffStatus:Ne(t),diffTooExpensive:t.diffTooExpensive===!0||t.diff.truncated===!0,expanded:a.expandedPaths.includes(t.path),...t.newMode?{newMode:t.newMode}:{},...t.newSha?{newSha:t.newSha}:{},...t.oldMode?{oldMode:t.oldMode}:{},...t.oldSha?{oldSha:t.oldSha}:{},path:t.path,pending:i.pending,...t.previousPath?{previousPath:t.previousPath}:{},reviewed:o,reviewedLabel:o===!0?`Reviewed`:null,reviewStatusLoaded:i.loaded,...Number.isInteger(t.size)?{size:t.size}:{},...Number.isInteger(t.sizeDelta)?{sizeDelta:t.sizeDelta}:{}}}function Fe(e){let t=typeof e==`string`?new URLSearchParams(e):e,n=t.get(`agentId`)?.trim()||``,r=[...new Set(t.getAll(`acpItem`).map(e=>e.trim()).filter(Boolean))];return!n||r.length===0||r.length>256?null:{agentId:n,itemIds:r}}function M(e,t,n){let r=e.get(t);if(r===null||r.trim()===``||!/^\d+$/.test(r.trim()))return;let i=Number(r.trim());return Number.isSafeInteger(i)&&i>=n?i:void 0}function Ie(e){let t=e.get(`ignoreWhitespace`);if(t===`ALL`||t===`IGNORE_ALL`)return`ALL`;if(t===`TRAILING`||t===`IGNORE_TRAILING`)return`TRAILING`;if(t===`LEADING_AND_TRAILING`||t===`IGNORE_LEADING_AND_TRAILING`)return`LEADING_AND_TRAILING`}function Le(e){let t=e.get(`metadataOnly`);return t===`1`||t===`true`?!0:void 0}function Re(e){let t=e.get(`scope`);return t===`tracked`||t===`untracked`?t:void 0}function ze(e){let t=M(e,`context`,0),n=Ie(e),r=M(e,`limit`,1),i=Le(e),a=M(e,`modifiedWithinDays`,1),o=Re(e),s=e.getAll(`path`).map(e=>e.trim()).filter(Boolean);return{...t===void 0?{}:{context:t},...n?{ignoreWhitespace:n}:{},...r===void 0?{}:{limit:r},...i===!0?{metadataOnly:i}:{},...o?{scope:o}:{},...s.length>0?{paths:s}:{},...o===`untracked`&&a!==void 0?{modifiedWithinDays:a}:{}}}function Be(e){let t=typeof e==`string`?new URLSearchParams(e):e,n=t.get(`agentId`)?.trim()||``,r=t.get(`root`)?.trim()||``;if(n&&r)return{error:`only one review workspace target is allowed`,request:null};if(!n&&!r)return{request:null};let i=n?{agentId:n}:{root:r},a=ze(t),o=t.get(`reviewId`)?.trim()||``,s=t.get(`base`),c=t.get(`head`);if(!(s!==null||c!==null))return{request:{...i,...a,source:`working-copy`}};let l=w(s||``),u=w(c||``);return!l||!u?{error:`base and head revisions are invalid`,request:null}:{request:{...i,base:l,head:u,...a,...o?{reviewId:o}:{},source:`git-range`}}}function Ve(e){return Be(e?.search??``)}var N=n();async function He(e,t){let n=[],r=[],i=0;return await Promise.all(Array.from({length:Math.min(4,t.length)},async()=>{for(;i<t.length;){let a=t[i++];if(a)try{n.push(await fe(e,a))}catch(e){r.push(e instanceof Error?e:Error(`review file diff request failed`))}}})),{errors:r,files:n}}function Ue(e){let t=L(e.path),n=t===`python`,r=tt(e.path).replace(/\W/g,`_`),i=(e,t)=>({kind:`context`,left:{line:e,text:t},right:{line:e,text:t}}),a=Array.from({length:128},(e,n)=>{let r=n+1,a=t===`python`?`#`:t===`markdown`?`<!--`:`//`,o=t===`markdown`?` -->`:``,s=r>=29?`unchanged review context ${r-28}`:`unchanged review prelude ${r}`;return i(r,`${r===29||r===128?` `:``}${a} ${s}${o}`)});if(e.kind===`added`){let t=n?`${r} = create_review_snapshot()`:`export const ${r} = createReviewSnapshot()`,i=n?`__all__ = ["${r}"]`:`export default ${r}`;return{hunks:[{header:`@@ -0,0 +1,2 @@ ${e.path}`,oldStart:0,oldLines:0,newStart:1,newLines:2,rows:[{kind:`added`,right:{line:1,text:t}},{kind:`added`,right:{line:2,text:i}}]}]}}if(e.kind===`deleted`){let t=n?`def summarize_changes():`:`export function summarizeChanges() {`,r=n?` return "legacy summary"`:` return 'legacy summary'`;return{hunks:[{header:`@@ -1,2 +0,0 @@ ${e.path}`,oldStart:1,oldLines:2,newStart:0,newLines:0,rows:[{kind:`deleted`,left:{line:1,text:t}},{kind:`deleted`,left:{line:2,text:r}}]}]}}let o=n?`def create_change_set(input: ChangeInput) -> list[ReviewEntry]:`:`export function createChangeSet(input: ChangeInput) {`,s=n?` return normalize_changes(input.files)`:` return normalizeChanges(input.files)`,c=n?` return create_review_entries(input.files, input.base)`:` return createReviewEntries(input.files, input.base)`,l=n?`def mark_reviewed(path: str) -> ReviewState:`:`export function markReviewed(path: string) {`,u=n?` return {"path": path, "reviewed_at": time.time()}`:` return { path, reviewedAt: Date.now() }`,d=n?`if not path:`:` if (!path) return null`,f=n?` return None`:` const snapshot = readSnapshot(input.base)`,p=n?`return {**snapshot, "files": input.files}`:` return { ...snapshot, files: input.files }`,m=n?``:`}`,h=n?` return finalize_change_set(input) `:` return finalizeChangeSet(input) `;return{hunks:[{commonContext:a,header:`@@ -129,7 +129,10 @@ ${e.path}`,oldStart:129,oldLines:7,newStart:129,newLines:10,rows:[i(129,o),{kind:`deleted`,left:{line:130,text:s}},{kind:`added`,right:{line:130,text:c}},i(131,m),{kind:`added`,right:{line:133,text:l}},{kind:`added`,right:{line:134,text:u}},i(135,d),i(136,f),{kind:`added`,right:{line:137,text:p}},i(138,m),{kind:`deleted`,left:{line:139,text:h},whitespaceOnly:!0},{kind:`added`,right:{line:139,text:h.trimEnd()},whitespaceOnly:!0}]}]}}function We(e){return{...e,diff:Ue(e)}}var Ge=Object.fromEntries(Object.entries({"Patchset 20":[{path:`clis/dataflow.py`,kind:`modified`,added:2,removed:85},{path:`clis/diagnose.py`,kind:`modified`,added:8,removed:11},{path:`clis/fetch_instance_log.py`,kind:`deleted`,added:0,removed:573},{path:`clis/fetch_logview.py`,kind:`modified`,added:2,removed:2},{path:`clis/fetch_meta_timeline.py`,kind:`modified`,added:0,removed:2},{path:`clis/fetch_quota_snapshot.py`,kind:`deleted`,added:0,removed:290},{path:`clis/hbo_plan_diagnose.py`,kind:`deleted`,added:0,removed:119},{path:`clis/parse_logview.py`,kind:`modified`,added:6,removed:2},{path:`clis/query_sls.py`,kind:`modified`,added:14,removed:2},{path:`devclis/README.md`,kind:`added`,added:15,removed:0},{path:`docs/cli/studio.md`,kind:`modified`,added:1,removed:2},{path:`tests/review/change-set.spec.ts`,kind:`renamed`,previousPath:`tests/changes/change-summary.spec.ts`,added:28,removed:6}],"Patchset 19":[{path:`clis/dataflow.py`,kind:`modified`,added:1,removed:52},{path:`clis/diagnose.py`,kind:`modified`,added:5,removed:6},{path:`clis/fetch_instance_log.py`,kind:`deleted`,added:0,removed:573},{path:`clis/fetch_logview.py`,kind:`modified`,added:1,removed:2},{path:`clis/fetch_meta_timeline.py`,kind:`modified`,added:0,removed:2},{path:`clis/hbo_plan_diagnose.py`,kind:`deleted`,added:0,removed:119},{path:`clis/parse_logview.py`,kind:`modified`,added:4,removed:2},{path:`clis/query_sls.py`,kind:`modified`,added:7,removed:1},{path:`docs/cli/studio.md`,kind:`modified`,added:1,removed:1}]}).map(([e,t])=>[e,t.map(We)])),Ke=`Working copy`,qe=`Review`,P={"Patchset 20":[`clis/dataflow.py`,`clis/fetch_instance_log.py`],"Patchset 19":[`clis/fetch_instance_log.py`]},Je=De,Ye=`farming.review.diff-preferences`;b.registerLanguage(`typescript`,m),b.registerLanguage(`python`,_),b.registerLanguage(`sql`,d),b.registerLanguage(`markdown`,y),b.registerLanguage(`cpp`,x),b.registerLanguage(`java`,h),b.registerLanguage(`protobuf`,D),b.registerLanguage(`json`,f),b.registerLanguage(`yaml`,g),b.registerLanguage(`bash`,p),b.registerLanguage(`xml`,v);function Xe(){if(typeof window>`u`)return Je;try{return te(JSON.parse(window.localStorage.getItem(Ye)||`{}`))}catch{return Je}}function Ze(e,t=!0){return e?e.source===`git-range`?e.head:Ke:t?`Patchset 20`:qe}function Qe(e,t=!0){return e?e.source===`git-range`?e.base:`HEAD`:`Base`}function $e(e,t=!0){return e?{[Ze(e,t)]:[]}:t?Ge:{[qe]:[]}}function et({catalog:e,comments:t,initialPatchset:n,basePatchset:r,initiallyExpand:i,reviewId:a}){let o=ne({catalog:e,comments:t,patchRange:{basePatchset:r,patchset:n},preferences:Xe(),reviewId:a,reviewedPathsByPatchset:n===`Patchset 20`||n===`Patchset 19`?P:{}});return i?{...o,patchsets:Object.fromEntries(Object.keys(e).map(t=>{let n=e[t]??[],r=n[1]?.path??n[0]?.path;return[t,{...oe(o,t),expandedPaths:r?[r]:[]}]}))}:o}function tt(e){let t=e.split(`/`);return t[t.length-1]||e}function F(e){let t=Math.abs(e);return t<1024?`${e} B`:t<1024*1024?`${(e/1024).toFixed(1)} KiB`:`${(e/(1024*1024)).toFixed(1)} MiB`}function I(e){return e.replace(/[&<>"']/g,e=>({"&":`&amp;`,"<":`&lt;`,">":`&gt;`,'"':`&quot;`,"'":`&#39;`})[e]??e)}function nt(e,t,n){return Array.from(e).slice(t,n).join(``)}function rt({action:e,pending:t,reviewed:n,reviewedLabel:r,onToggle:i}){return(0,N.jsxs)(`div`,{className:`review-review-status ${n?`reviewed`:``} ${t?`pending`:``}`,children:[r?(0,N.jsx)(`span`,{className:`review-reviewed-label`,children:r}):null,e?(0,N.jsx)(`button`,{type:`button`,"aria-checked":n===!0,"aria-label":`Reviewed`,"data-action-visibility":e.visibility,disabled:e.disabled,role:`switch`,title:t?`Saving review status`:e.ariaLabel,onClick:i,children:t?`SAVING…`:e.label}):(0,N.jsx)(`span`,{className:`review-review-loading`,children:`Reviewed status loading`})]})}function it({file:e,maxChangeSize:t}){if(e.binary)return(0,N.jsx)(`span`,{className:`review-change-bar binary`,"aria-label":`Binary file`});let n=e=>e===0?0:Math.max(2,Math.round(e/t*72));return(0,N.jsxs)(`span`,{className:`review-change-bar`,"aria-label":`+${e.added} −${e.removed}`,children:[(0,N.jsx)(`i`,{className:`added`,style:{width:`${n(e.added)}px`}}),(0,N.jsx)(`i`,{className:`deleted`,style:{width:`${n(e.removed)}px`}})]})}function at({file:e}){if(e.binary){let t=typeof e.sizeDelta==`number`&&Number.isInteger(e.sizeDelta)?e.sizeDelta:null;return(0,N.jsx)(`span`,{className:`review-file-stats binary`,children:t===null?`Binary`:F(t)})}return(0,N.jsxs)(`span`,{className:`review-file-stats`,children:[e.added?(0,N.jsxs)(`span`,{className:`added`,children:[`+`,e.added]}):null,e.removed?(0,N.jsxs)(`span`,{className:`removed`,children:[`−`,e.removed]}):null]})}function L(e){let t=e.toLowerCase();return t.endsWith(`.osql`)||t.endsWith(`.odpsql`)?`sql`:t.endsWith(`.py`)?`python`:t.endsWith(`.md`)||t.endsWith(`.mdx`)?`markdown`:/\.(c|cc|cpp|cxx|h|hh|hpp|hxx)$/.test(t)?`cpp`:t.endsWith(`.java`)?`java`:t.endsWith(`.proto`)?`protobuf`:t.endsWith(`.json`)?`json`:t.endsWith(`.yaml`)||t.endsWith(`.yml`)?`yaml`:/\.(bash|sh|zsh)$/.test(t)?`bash`:/\.(html|htm|xml)$/.test(t)?`xml`:`typescript`}function R({intraline:e,language:t,line:n,side:r,text:i,preferences:a}){let o=n&&r?{"data-review-line":n,"data-review-side":r}:{},s=a.showTrailingWhitespace?i.match(/[ \t]+$/)?.[0]:void 0,c=s?i.slice(0,-s.length):i,l=a.intralineDifference?e:void 0,u=l?.length?ot(c,l,t,a):z(c,t,a);return a.showTabs&&(u=u.replace(/\t/g,`<span class="review-tab-marker">⇥</span>`)),s&&(u+=`<span class="review-trailing-whitespace">${s.replace(/[ \t]/g,`·`)}</span>`),(0,N.jsx)(`code`,{...o,dangerouslySetInnerHTML:{__html:u}})}function z(e,t,n){return n.syntaxHighlighting&&e?b.highlight(e,{language:t,ignoreIllegals:!0}).value:I(e)}function ot(e,t,n,r){let i=``,a=0,o=Array.from(e).length;for(let s of t){let t=Math.max(a,Math.min(s.start,o)),c=Math.max(t,Math.min(s.end,o));i+=z(nt(e,a,t),n,r),c>t&&(i+=`<span class="review-intraline">${z(nt(e,t,c),n,r)}</span>`),a=c}return i+=z(nt(e,a),n,r),i}function B({kind:e,intraline:t,language:n,line:r,side:i,text:a,preferences:o,renderAttachment:s}){return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(`div`,{className:`review-diff-row unified ${e}`,children:[(0,N.jsx)(`span`,{children:r??``}),(0,N.jsx)(R,{intraline:t,language:n,line:r,side:i,text:a,preferences:o})]}),r?s?.(r,[i]):null]})}function V({kind:e,language:t,leftLine:n,leftIntraline:r,leftText:i,rightLine:a,rightIntraline:o,rightText:s,preferences:c,renderAttachment:l}){let u=a??n,d=[...n?[`left`]:[],...a?[`right`]:[]];return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(`div`,{className:`review-diff-row ${e}`,children:[(0,N.jsx)(`span`,{children:n??``}),(0,N.jsx)(R,{intraline:r,language:t,line:n,side:`left`,text:i??``,preferences:c}),(0,N.jsx)(`span`,{children:a??``}),(0,N.jsx)(R,{intraline:o,language:t,line:a,side:`right`,text:s??``,preferences:c})]}),u?l?.(u,d):null]})}function H(e){let t=e.findIndex(e=>e.kind!==`context`);if(t<0)return{body:e,leading:[],trailing:[]};let n=e.length-1;for(;n>t&&e[n]?.kind===`context`;)--n;return{body:e.slice(t,n+1),leading:e.slice(0,t),trailing:e.slice(n+1)}}function U(e,t,n){let r=e.filter(e=>e.kind!==`context`&&e.kind!==`skipped`);return(t===`first`?r:[...r].reverse()).find(e=>e[n]?.line)?.[n]?.line}function st(e,t){let n=e[t]?.rows??[],r=e[t-1]?.rows??[],i=[`left`,`right`].flatMap(e=>{let t=U(n,`first`,e);if(!t)return[];let i=U(r,`last`,e);return[Math.max(0,t-(i??0)-1)]});return i.length?Math.min(...i):0}function W(e,t){let n=e[t];if(!n)return 0;let r=e[t-1],i=r?r.oldStart+r.oldLines-1:0,a=r?r.newStart+r.newLines-1:0;return Math.max(0,Math.min(n.oldStart-i-1,n.newStart-a-1))}function G(e){let t=e.diff.hunks[e.diff.hunks.length-1],n=e.diff.leftMeta?.lines,r=e.diff.rightMeta?.lines;if(!t||!Number.isInteger(n)||!Number.isInteger(r))return 0;let i=t.oldStart+t.oldLines-1,a=t.newStart+t.newLines-1;return Math.max(0,Math.min((n??0)-i,(r??0)-a))}function ct(e,t,n,r){let i=n[r-1],a=n[r];return`${e}:${t}:${i?`${i.oldStart+i.oldLines-1}:${i.newStart+i.newLines-1}`:`0:0`}>${a?`${a.oldStart}:${a.newStart}`:`0:0`}`}function K(e,t){let n=t.diff.hunks[t.diff.hunks.length-1],r=n?`${n.oldStart+n.oldLines-1}:${n.newStart+n.newLines-1}`:`0:0`;return`${e}:${t.path}:${r}>eof:${t.diff.leftMeta?.lines??0}:${t.diff.rightMeta?.lines??0}`}function lt(){return{aboveRows:[],belowRows:[]}}function ut(e,t,n,r,i){let a=n.diff.hunks[r],o=n.diff.hunks[r-1],s=H(a?.rows??[]),c=o?H(o.rows):null,l=[...a?.commonContext??[],...s.leading],u=!!a?.commonContext?.length,d=u?st(n.diff.hunks,r):W(n.diff.hunks,r),f=ct(e,n.path,n.diff.hunks,r),p=t[f]??lt(),m=c?.trailing.slice(0,r>0?Math.min(d,i):0)??[],h=Math.min(Math.max(0,d-m.length),i),g=h>0?l.slice(-h):[],_=Math.max(0,d-(u?m.length+g.length:0)-p.aboveRows.length-p.belowRows.length),v=u?U(o?.rows??[],`last`,`left`)??0:o?o.oldStart+o.oldLines-1:0,y=u?U(o?.rows??[],`last`,`right`)??0:o?o.newStart+o.newLines-1:0,b=v+(u?m.length:0)+p.aboveRows.length+1,x=y+(u?m.length:0)+p.aboveRows.length+1;return{availableRows:[...c?.trailing??[],...a?.commonContext??[],...s.leading].filter(e=>{let t=e.left?.line,n=e.right?.line;return t!==void 0&&n!==void 0&&t>=b&&t<b+_&&n>=x&&n<x+_}),baseAboveRows:m,baseBelowRows:g,expansion:p,header:a?.header??``,hiddenLines:_,key:f,location:r===0?`top`:`middle`,newHiddenStart:x,oldHiddenStart:b}}function dt(e,t,n,r){let i=n.diff.hunks[n.diff.hunks.length-1];if(!i)return null;let a=G(n),o=K(e,n),s=t[o]??lt(),c=H(i.rows).trailing,l=c.slice(0,Math.min(a,r)),u=Math.max(0,a-s.aboveRows.length),d=i.oldStart+i.oldLines-1,f=i.newStart+i.newLines-1,p=d+s.aboveRows.length+1,m=f+s.aboveRows.length+1;return{availableRows:c.filter(e=>{let t=e.left?.line,n=e.right?.line;return t!==void 0&&n!==void 0&&t>=p&&n>=m}),baseAboveRows:l,baseBelowRows:[],expansion:s,header:``,hiddenLines:u,key:o,location:`bottom`,newHiddenStart:m,oldHiddenStart:p}}function q({gap:e,onExpand:t}){let n=e.hiddenLines>10,r=!!e.expansion.pending;return(0,N.jsxs)(`div`,{className:`review-diff-hunk interactive`,role:`group`,"aria-label":`${e.hiddenLines} hidden common lines`,children:[(0,N.jsx)(`span`,{children:e.header}),(0,N.jsxs)(`span`,{className:`review-context-controls`,children:[n&&e.location!==`top`?(0,N.jsx)(`button`,{type:`button`,disabled:r,"aria-label":`Show 10 lines above`,onClick:()=>t(`above`),children:`+10↑`}):null,n&&e.location!==`top`?(0,N.jsx)(`span`,{"aria-hidden":`true`,children:`−`}):null,(0,N.jsxs)(`button`,{type:`button`,disabled:r,"aria-label":`Show all ${e.hiddenLines} common lines`,onClick:()=>t(`all`),children:[`+`,e.hiddenLines,` common `,e.hiddenLines===1?`line`:`lines`]}),n&&e.location!==`bottom`?(0,N.jsx)(`span`,{"aria-hidden":`true`,children:`−`}):null,n&&e.location!==`bottom`?(0,N.jsx)(`button`,{type:`button`,disabled:r,"aria-label":`Show 10 lines below`,onClick:()=>t(`below`),children:`+10↓`}):null]}),e.expansion.error?(0,N.jsx)(`span`,{className:`review-context-error`,role:`alert`,children:e.expansion.error}):null]})}function ft({contextKeyPrefix:e,contextGapExpansions:t,file:n,mode:r,preferences:i,renderAttachment:a,onExpandContext:o,onExpandSkippedContext:s}){let c=L(n.path),l=n.diff.hunks.reduce((e,t)=>{for(let n of[...t.commonContext??[],...t.rows])n.left?.missingNewlineAtEnd&&(e.left=!0),n.right?.missingNewlineAtEnd&&(e.right=!0);return e},{left:!1,right:!1}),u=(t,r,a)=>{let o=Math.max(t.leftLines??0,t.rightLines??0),c=ct(e,n.path,n.diff.hunks,a),l=i.context,u=Math.min(10,o);return(0,N.jsxs)(`button`,{type:`button`,className:`review-skipped-row`,onClick:()=>s(c,a,Math.min(1e4,l+u)),children:[`Show `,u,` more common lines (`,o,` hidden)`]},r)},d=(e,t,n)=>(0,N.jsx)(N.Fragment,{children:(i.ignoreWhitespace===`NONE`?e:e.filter(e=>!e.whitespaceOnly)).map((e,o)=>{let s=`${n}:${t}:${e.left?.line??``}:${e.right?.line??``}:${o}`;if(r===`unified`){if(e.kind===`skipped`)return u(e,s,t);if(e.kind===`context`){let t=e.right??e.left;return(0,N.jsx)(B,{intraline:t?.intraline,kind:`context`,language:c,line:t?.line,side:S(`context`,!!e.right),text:t?.text??``,preferences:i,renderAttachment:a},s)}return e.kind===`changed`?(0,N.jsxs)(E.Fragment,{children:[(0,N.jsx)(B,{intraline:e.left?.intraline,kind:`deleted`,language:c,line:e.left?.line,side:S(`deleted`,!1),text:e.left?.text??``,preferences:i,renderAttachment:a}),(0,N.jsx)(B,{intraline:e.right?.intraline,kind:`added`,language:c,line:e.right?.line,side:S(`added`,!0),text:e.right?.text??``,preferences:i,renderAttachment:a})]},s):e.left?(0,N.jsx)(B,{intraline:e.left.intraline,kind:`deleted`,language:c,line:e.left.line,side:S(`deleted`,!1),text:e.left.text,preferences:i,renderAttachment:a},s):(0,N.jsx)(B,{intraline:e.right?.intraline,kind:`added`,language:c,line:e.right?.line,side:S(`added`,!!e.right),text:e.right?.text??``,preferences:i,renderAttachment:a},s)}return e.kind===`skipped`?u(e,s,t):(0,N.jsx)(V,{kind:e.kind,language:c,leftIntraline:e.left?.intraline,leftLine:e.left?.line,leftText:e.left?.text,rightIntraline:e.right?.intraline,rightLine:e.right?.line,rightText:e.right?.text,preferences:i,renderAttachment:a},s)})}),f=n.diff.hunks.map((r,a)=>ut(e,t,n,a,i.context)),p=dt(e,t,n,i.context),m=[...f,...p?[p]:[]].filter(e=>e.hiddenLines>0&&e.hiddenLines<=3&&!e.expansion.pending&&!e.expansion.error),h=m.map(e=>`${e.key}:${e.hiddenLines}:${e.oldHiddenStart}:${e.newHiddenStart}`).join(`|`),g=(0,E.useRef)(o);g.current=o,(0,E.useEffect)(()=>{for(let e of m)g.current(e,`all`,{lines:e.hiddenLines,newStart:e.newHiddenStart,oldStart:e.oldHiddenStart})},[h]);let _=(e,t)=>{let n=t===`all`?e.hiddenLines:Math.min(10,e.hiddenLines),r=t===`below`?e.hiddenLines-n:0;o(e,t,{lines:n,newStart:e.newHiddenStart+r,oldStart:e.oldHiddenStart+r})},v=(e,t)=>{let n=e.expansion.aboveRows.length>0||e.expansion.belowRows.length>0,r=e.hiddenLines>3||!!e.expansion.error;return(0,N.jsxs)(N.Fragment,{children:[d(e.baseAboveRows,t,`context`),d(e.expansion.aboveRows,t,`context`),r?(0,N.jsx)(q,{gap:e,onExpand:t=>_(e,t)}):null,!r&&e.hiddenLines>0?(0,N.jsxs)(`div`,{className:`review-diff-hunk interactive loading`,role:`status`,children:[(0,N.jsx)(`span`,{children:e.header}),(0,N.jsxs)(`span`,{children:[`Loading `,e.hiddenLines,` common `,e.hiddenLines===1?`line`:`lines`,`…`]})]}):null,!r&&e.hiddenLines===0&&!n&&e.location!==`bottom`?(0,N.jsx)(`div`,{className:`review-diff-hunk ${t>0?`secondary`:``}`,children:(0,N.jsx)(`span`,{children:e.header})}):null,d(e.expansion.belowRows,t,`context`),d(e.baseBelowRows,t,`context`)]})};return(0,N.jsxs)(N.Fragment,{children:[n.diff.hunks.map((e,t)=>(0,N.jsxs)(E.Fragment,{children:[v(f[t],t),d(H(e.rows).body,t,`change`)]},`${e.header}:${t}`)),p?v(p,n.diff.hunks.length):null,l.left||l.right?(0,N.jsx)(`div`,{className:`review-newline-warning`,role:`note`,children:[l.left?`No newline at end of left file.`:``,l.right?`No newline at end of right file.`:``].filter(Boolean).join(` — `)}):null]})}function pt({row:e}){return e.diffLoadError?(0,N.jsxs)(`div`,{className:`review-diff-message error`,role:`alert`,children:[`Could not load diff: `,e.diffLoadError]}):e.diffLoadPending?(0,N.jsx)(`div`,{className:`review-diff-message`,role:`status`,children:`Loading diff…`}):e.diffStatus===`binary`?(0,N.jsx)(`div`,{className:`review-diff-message`,children:`Binary file changed`}):e.diffStatus===`too-expensive`?(0,N.jsx)(`div`,{className:`review-diff-message`,children:`Diff too large to render`}):e.diffStatus===`not-loaded`?(0,N.jsx)(`div`,{className:`review-diff-message`,children:`Diff not loaded yet`}):null}function mt({disabled:e,draft:t,target:n,onCancel:r,onDraftChange:i,onSave:a}){let o=n.side===`right`?`Patchset`:n.side===`left`?`Base`:`file`;return(0,N.jsxs)(`form`,{className:`review-comment-editor`,onSubmit:e=>{e.preventDefault(),a()},children:[(0,N.jsxs)(`header`,{children:[`Comment on `,n.range?n.range.start_line===n.range.end_line?`${o} line ${n.range.start_line}, columns ${n.range.start_character+1}–${n.range.end_character}`:`${o} lines ${n.range.start_line}–${n.range.end_line}`:`${o} line ${n.line}`]}),(0,N.jsx)(`textarea`,{"aria-label":`Review comment`,name:`farming-review-comment`,inputMode:`text`,autoComplete:`off`,autoCorrect:`off`,autoCapitalize:`none`,spellCheck:!1,enterKeyHint:`done`,"data-lpignore":`true`,"data-1p-ignore":`true`,"data-bwignore":`true`,"data-form-type":`other`,autoFocus:!0,placeholder:`Leave a review comment…`,value:t,onChange:e=>i(e.target.value)}),(0,N.jsxs)(`footer`,{children:[(0,N.jsx)(`button`,{type:`button`,onClick:r,children:`CANCEL`}),(0,N.jsx)(`button`,{type:`submit`,disabled:e||!t.trim(),children:e?`SAVING…`:`SAVE COMMENT`})]})]})}function ht({comment:e,disabled:t,onDelete:n,onStatusChange:r}){let i=e.side===`right`?`Patchset`:e.side===`left`?`Base`:`File`,o=e.status||`open`,s=e.range?e.range.start_line===e.range.end_line?`${i} line ${e.range.start_line}, columns ${e.range.start_character+1}–${e.range.end_character}`:`${i} lines ${e.range.start_line}–${e.range.end_line}`:`${i} line ${e.line}`;return(0,N.jsxs)(`article`,{className:`review-comment-thread ${o}`,children:[(0,N.jsxs)(`header`,{children:[(0,N.jsx)(`span`,{children:o===`outdated`?`Outdated · ${s}`:s}),(0,N.jsxs)(`span`,{className:`review-comment-actions`,children:[(0,N.jsx)(`button`,{type:`button`,disabled:t,onClick:()=>r(o===`resolved`?`open`:`resolved`),children:o===`resolved`?`REOPEN`:`RESOLVE`}),(0,N.jsx)(`button`,{type:`button`,"aria-label":`Delete comment on line ${e.line}`,disabled:t,onClick:n,children:(0,N.jsx)(a,{})})]})]}),(0,N.jsx)(`p`,{children:e.body})]})}function J(e,t){let n=(e instanceof Element?e:e?.parentElement)?.closest(`code[data-review-line][data-review-side]`)??null;return n&&t.contains(n)?n:null}function gt(e,t,n){let r=document.createRange();r.selectNodeContents(e);try{r.setEnd(t,n)}catch{return 0}return r.toString().length}function _t(e){let t=window.getSelection();if(!t||t.isCollapsed||!t.anchorNode||!t.focusNode)return null;let n=J(t.anchorNode,e),r=J(t.focusNode,e);if(!n||!r)return null;let i=n.dataset.reviewSide;if(i!==r.dataset.reviewSide||i!==`left`&&i!==`right`&&i!==`unified`)return null;let a=Number(n.dataset.reviewLine),o=Number(r.dataset.reviewLine);if(!Number.isInteger(a)||!Number.isInteger(o))return null;let s={character:gt(n,t.anchorNode,t.anchorOffset),line:a},c={character:gt(r,t.focusNode,t.focusOffset),line:o},l=s.line<c.line||s.line===c.line&&s.character<=c.character,u=l?s:c,d=l?c:s;return u.line===d.line&&u.character===d.character?null:{line:d.line,range:{end_character:d.character,end_line:d.line,start_character:u.character,start_line:u.line},side:i}}function Y(){let e=typeof window<`u`&&new URLSearchParams(window.location.search).get(`fixture`)===`1`,[t]=(0,E.useState)(()=>{let e=typeof window>`u`?``:window.location.search;return{requested:new URLSearchParams(e).has(`acpItem`),route:Fe(e)}}),n=t.route,[a]=(0,E.useState)(()=>Ve(typeof window>`u`?null:window.location)),d=!e&&!t.requested&&a.request&&(a.request.source===`working-copy`||a.request.head===`now`)?a.request:null,[f,p]=(0,E.useState)(()=>d||t.requested?null:a.request),[m,h]=(0,E.useState)(null),[g,_]=(0,E.useState)(`final`),[v,y]=(0,E.useState)(!!(d||n)),b=t.requested?!n:!!a.error,x=!e,S=f?.source===`working-copy`,ne=f?.source===`git-range`,[ie,C]=(0,E.useState)(()=>b?{[qe]:[]}:$e(f,e)),[w,T]=(0,E.useState)(t.requested?n?``:`ACP review target is invalid`:a.error??``),[_e,De]=(0,E.useState)(null),[D,Ae]=(0,E.useState)(()=>{let t=b?{[qe]:[]}:$e(f,e);return et({basePatchset:b?`Base`:Qe(f,e),catalog:t,comments:[],initialPatchset:b?qe:Ze(f,e),initiallyExpand:!x,reviewId:x?void 0:we})}),O=(0,E.useRef)(D),k=(0,E.useRef)(ie);k.current=ie;let[A,j]=(0,E.useState)(Je),[Ne,M]=(0,E.useState)(!1),[Ie,Le]=(0,E.useState)(!1),[Re,ze]=(0,E.useState)(``),[Be,Ue]=(0,E.useState)(``),[We,Ge]=(0,E.useState)(``),[Ke,P]=(0,E.useState)([]),[tt,F]=(0,E.useState)({}),[I,nt]=(0,E.useState)(null),[L,R]=(0,E.useState)(``),[z,ot]=(0,E.useState)(!1),[B,V]=(0,E.useState)(()=>new URLSearchParams(window.location.search).get(`comparison`)||``),[H,U]=(0,E.useState)(!1),st=(0,E.useRef)(null),W=x?D.reviewId??``:we,G=D.patchRange.patchset,ct=D.patchRange.basePatchset,K=oe(D,G),ut=new Set(K.expandedPaths),dt=D.diffMode,q=!!(m&&f?.source===`git-range`&&f.reviewId===m.reviewId&&f.head===m.head),J=q?m?.scope:f?.source===`working-copy`?f.scope:void 0,gt=J===`untracked`?`unified`:dt,Y=D.preferences,vt=f?{...f,context:Y.context,ignoreWhitespace:Y.ignoreWhitespace}:null,yt=(0,E.useRef)(vt);yt.current=vt;let X=q?{..._e??{workingTree:!0},head:void 0,workingTree:!0}:_e,Z=D.commentDraft,bt=D.commentDraft?.body??``,Q=ie[G]??[],xt=Q.reduce((e,t)=>e+t.added,0),St=Q.reduce((e,t)=>e+t.removed,0),Ct=Math.max(1,...Q.map(e=>e.added+e.removed)),$=e=>{let t=re(O.current,e,k.current);if(t.state!==O.current){O.current=t.state,Ae(t.state);for(let e of t.effects){if(e.type===`load-file-diff`){let t=yt.current;if(!t){$(Me(e,`review file diff source is unavailable`));continue}fe(t,e.path).then(t=>{let n=je(k.current,e,t,{reviewId:O.current.reviewId});k.current=n.catalog,C(n.catalog),$(n.action)}).catch(t=>$(Me(e,t)))}if(e.type===`save-reviewed-status`){let t=e.reviewId??W;le({...e,reviewId:t}).then(t=>$({patchset:e.patchset,paths:e.changes.map(e=>e.path),reviewedPaths:t.reviewedPaths,...e.reviewId?{reviewId:e.reviewId}:{},revision:t.revision,type:`commit-reviewed-status`})).catch(async n=>{let r=n instanceof be&&n.state?n.state:await xe(t,e.patchset).catch(()=>null);if(!r){let t=oe(O.current,e.patchset),n=new Set(t.reviewedPaths);for(let t of e.changes)t.reviewed?n.delete(t.path):n.add(t.path);r={reviewedPaths:[...n],revision:e.revision}}$({patchset:e.patchset,reviewedPaths:r.reviewedPaths,...e.reviewId?{reviewId:e.reviewId}:{},revision:r.revision,type:`restore-reviewed-status`}),ze(n instanceof Error?`Could not save Reviewed: ${n.message}`:`Could not save Reviewed status`)})}if(e.type===`save-comment`){let t=e.reviewId??W;me(t,e.comment).then(()=>$({id:e.comment.id,patchset:e.comment.patchset,pendingType:`save`,...e.reviewId?{reviewId:e.reviewId}:{},type:`commit-comment`})).catch(async n=>{$({comments:await Ce(t,e.comment.patchset).catch(()=>O.current.comments.filter(t=>t.id!==e.comment.id)),id:e.comment.id,patchset:e.comment.patchset,pendingType:`save`,...e.reviewId?{reviewId:e.reviewId}:{},type:`restore-comments`}),Ue(n instanceof Error?`Could not save comment: ${n.message}`:`Could not save comment`)})}if(e.type===`delete-comment`){let t=e.reviewId??W;ue(t,e.comment.patchset,e.comment.id).then(()=>$({id:e.comment.id,patchset:e.comment.patchset,pendingType:`delete`,...e.reviewId?{reviewId:e.reviewId}:{},type:`commit-comment`})).catch(async n=>{$({comments:await Ce(t,e.comment.patchset).catch(()=>[...O.current.comments,e.comment]),id:e.comment.id,patchset:e.comment.patchset,pendingType:`delete`,...e.reviewId?{reviewId:e.reviewId}:{},type:`restore-comments`}),Ue(n instanceof Error?`Could not delete comment: ${n.message}`:`Could not delete comment`)})}}}};(0,E.useEffect)(()=>(document.body.classList.add(`review-body`),()=>document.body.classList.remove(`review-body`)),[]),(0,E.useEffect)(()=>{if(!H)return;let e=e=>{st.current?.contains(e.target)||U(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[H]),(0,E.useEffect)(()=>{if(!d&&!n)return;let e=!0;return y(!0),(n?Se(n.agentId,n.itemIds):(()=>{let e=d;return ge(`root`in e&&typeof e.root==`string`?{root:e.root}:{agentId:e.agentId},e.source===`git-range`?e.base:`HEAD`,e.source===`working-copy`?{modifiedWithinDays:e.modifiedWithinDays,paths:e.paths,scope:e.scope}:void 0)})()).then(t=>{if(!e)return;let n=he(t,`final`),r=new URLSearchParams(window.location.search);r.delete(`agentId`),r.delete(`acpItem`),r.set(`root`,t.root),r.set(`base`,n.base),r.set(`head`,n.head),r.set(`reviewId`,t.reviewId),r.set(`comparison`,`last-turn`),window.history.replaceState(null,``,`${window.location.pathname}?${r.toString()}`),h(t),_(`final`),V(`last-turn`),p(n),T(``)}).catch(t=>{e&&T(t instanceof Error?t.message:`review capture failed`)}).finally(()=>{e&&y(!1)}),()=>{e=!1}},[n,d]),(0,E.useEffect)(()=>{if(d||n||f?.source!==`git-range`||!f.reviewId)return;let e=!0;return pe(f.reviewId).then(t=>{if(!e)return;let n=t.revisions.find(e=>e.head===f.head)??t;h(n),V(e=>e||`last-turn`),_(f.base===n.fixesBase&&n.fixesBase!==n.base?`fixes`:`final`)}).catch(()=>{}),()=>{e=!1}},[n,d,f]),(0,E.useEffect)(()=>{if(!f)return;let e=!0,t=Xe();return ve({...f,context:t.context,ignoreWhitespace:t.ignoreWhitespace,metadataOnly:!0}).then(async n=>{let[r,i]=await Promise.all([xe(n.reviewId,n.patchset).catch(()=>null),Ce(n.reviewId,n.patchset).catch(()=>[])]);if(!e)return;let a=ee(Oe(n),n.patchset,i.map(e=>e.path)),o=ke({comments:i,preferences:t,...r?{reviewedPaths:r.reviewedPaths}:{},snapshot:n});r&&(o=re(o,{patchset:n.patchset,reviewedPaths:r.reviewedPaths,reviewId:n.reviewId,revision:r.revision,type:`hydrate-reviewed-status`},a).state),O.current=o,k.current=a,De(n.comparison??null),C(a),Ae(o),T(``)}).catch(t=>{e&&T(t instanceof Error?t.message:`review diff request failed`)}),()=>{e=!1}},[f]),(0,E.useEffect)(()=>{if(!Re)return;let e=window.setTimeout(()=>ze(``),4e3);return()=>window.clearTimeout(e)},[Re]),(0,E.useEffect)(()=>{if(!Be)return;let e=window.setTimeout(()=>Ue(``),4e3);return()=>window.clearTimeout(e)},[Be]),(0,E.useEffect)(()=>{try{window.localStorage.setItem(Ye,JSON.stringify(Y))}catch{}},[D.preferences]),(0,E.useEffect)(()=>{if(x||!W||!k.current[G])return;let e=!0;return xe(W,G).then(t=>{e&&$({patchset:G,reviewedPaths:t.reviewedPaths,reviewId:W,revision:t.revision,type:`hydrate-reviewed-status`})}).catch(()=>{}),Ce(W,G).then(t=>{if(!e)return;let n=ee(k.current,G,t.map(e=>e.path));n!==k.current&&(k.current=n,C(n)),$({comments:t,patchset:G,reviewId:W,type:`hydrate-comments`})}).catch(()=>{}),()=>{e=!1}},[x,G,W]),(0,E.useEffect)(()=>{let e=()=>{let e=``;for(let t of document.querySelectorAll(`.review-file-change.expanded[data-file-path]`)){let n=t.querySelector(`.review-file-change-header`);if(!n)continue;let r=t.getBoundingClientRect(),i=n.getBoundingClientRect();i.top<=1&&r.bottom>i.bottom&&(e=t.dataset.filePath??``)}Ge(t=>t===e?t:e)};return e(),window.addEventListener(`scroll`,e,{passive:!0}),document.body.addEventListener(`scroll`,e,{passive:!0}),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`scroll`,e),document.body.removeEventListener(`scroll`,e),window.removeEventListener(`resize`,e)}},[G,K.expandedPaths.join(`\0`)]);let wt=!!K.pendingReview,Tt=!!K.pendingComment,Et=(e,t)=>{$({path:e,reviewed:t,type:`set-file-reviewed`})},Dt=e=>{$({patchset:e,type:`select-patchset`})},Ot=Q.length>0&&Q.every(e=>ut.has(e.path)),kt=e=>{$({path:e,type:`toggle-file-expanded`})},At=()=>{j(Y),M(!0)},jt=()=>{let e=Y,t=te(A),n=e.context!==t.context||e.ignoreWhitespace!==t.ignoreWhitespace;if($({preferences:t,type:`set-preferences`}),M(!1),n&&F({}),!x||!f||!n)return;let r=G,i=new Map(Q.map(e=>[e.path,e])),a=K.expandedPaths.filter(e=>{let t=i.get(e);return!!(t&&t.kind!==`unmodified`&&!t.binary&&!t.diffTooExpensive)});a.length&&(P(e=>[...new Set([...e,...a])]),He({...f,context:t.context,ignoreWhitespace:t.ignoreWhitespace},a).then(e=>{if(O.current.patchRange.patchset!==r)return;let t=k.current;for(let n of e.files)t=se(t,r,n);k.current=t,C(t);let n=e.errors[0];n&&T(n.message)}).finally(()=>P(e=>e.filter(e=>!a.includes(e)))))},Mt=()=>{navigator.clipboard&&navigator.clipboard.writeText(`34a15ae`).catch(()=>{}),Le(!0),window.setTimeout(()=>Le(!1),1200)},Nt=(e,t)=>{let n=yt.current;if(!n||Ke.includes(e))return;let r=G;P(t=>[...t,e]),fe({...n,context:t},e).then(e=>{let t=se(k.current,r,e);k.current=t,C(t)}).catch(e=>T(e instanceof Error?e.message:`review context request failed`)).finally(()=>P(t=>t.filter(t=>t!==e)))},Pt=(e,t,n,r)=>{let i=yt.current;if(t.expansion.pending||r.lines<1)return;let a=e=>{F(r=>{let i=r[t.key]??lt();return{...r,[t.key]:n===`below`?{...i,belowRows:[...e,...i.belowRows],error:void 0,pending:void 0}:{...i,aboveRows:[...i.aboveRows,...e],error:void 0,pending:void 0}}})},o=e=>{let n=e instanceof Error?e.message:`review context request failed`;F(e=>{let r=e[t.key]??lt();return{...e,[t.key]:{...r,error:n,pending:void 0}}})};if(F(e=>{let r=e[t.key]??lt();return{...e,[t.key]:{...r,error:void 0,pending:n}}}),!i){let e=t.availableRows.filter(e=>{let t=e.left?.line,n=e.right?.line;return t!==void 0&&n!==void 0&&t>=r.oldStart&&t<r.oldStart+r.lines&&n>=r.newStart&&n<r.newStart+r.lines});e.length===r.lines?a(e):o(Error(`review context is unavailable`));return}Te(i,e.path,r).then(e=>a(e.rows)).catch(o)},Ft=(e,t,n,r)=>{$({line:t,path:e,range:r,side:n,type:`start-comment`})},It=()=>{!Z||!bt.trim()||$({id:typeof crypto?.randomUUID==`function`?crypto.randomUUID():`comment-${Date.now()}-${Math.random().toString(36).slice(2)}`,type:`save-comment`})},Lt=(e,t)=>{W&&Ee(W,e.patchset,e.id,t).then(()=>Ce(W,e.patchset)).then(t=>$({comments:t,patchset:e.patchset,reviewId:W,type:`hydrate-comments`})).catch(e=>Ue(e instanceof Error?e.message:`review comment status failed`))},Rt=(e,t)=>{let n=he(e,t),r=new URLSearchParams(window.location.search);r.delete(`agentId`),r.set(`root`,e.root),r.set(`base`,n.base),r.set(`head`,n.head),r.set(`reviewId`,e.reviewId),r.set(`comparison`,`last-turn`),window.history.replaceState(null,``,`${window.location.pathname}?${r.toString()}`),h(e),_(t),V(`last-turn`),U(!1),p(n)},zt=f&&`root`in f&&f.root?{root:f.root}:f&&`agentId`in f&&f.agentId?{agentId:f.agentId}:m?{root:m.root}:null,Bt=()=>{let e=!H;U(e),!(!e||I||z||!zt)&&(ot(!0),R(``),de(zt).then(nt).catch(e=>R(e instanceof Error?e.message:`Comparison sources could not be loaded`)).finally(()=>ot(!1)))},Vt=e=>{if(!I)return;let t={base:e.base,head:e.head,metadataOnly:!0,root:I.root,source:`git-range`},n=new URLSearchParams(window.location.search);n.delete(`agentId`),n.delete(`reviewId`),n.delete(`path`),n.delete(`scope`),n.delete(`modifiedWithinDays`),n.set(`root`,I.root),n.set(`base`,e.base),n.set(`head`,e.head),n.set(`comparison`,e.id),window.history.replaceState(null,``,`${window.location.pathname}?${n.toString()}`),V(e.id),U(!1),_(`final`),p(t)},Ht=()=>{!m||v||(y(!0),ye(m.reviewId).then(e=>{Rt(e,e.number>1?`fixes`:`final`),T(``)}).catch(e=>T(e instanceof Error?e.message:`review refresh failed`)).finally(()=>y(!1)))},Ut=e=>{!m||e===g||Rt(m,e)},Wt=J,Gt=Wt===`tracked`?`Changes`:Wt===`untracked`?`Untracked`:`Files`,Kt=I?[I.unstaged,I.staged,...I.commits,...I.branches].find(e=>e.id===B):null,qt=q?`Last Turn`:Kt?.id.startsWith(`commit:`)?`Commit · ${Kt.label}`:Kt?.id.startsWith(`branch:`)?`Branch · ${Kt.label}`:Kt?.label??(S?`Working copy`:ne?`Changes`:Gt),Jt=B===`staged`?`Staged changes`:X?.workingTree?`Workspace changes`:X?.head?.message.split(`
2
2
  `)[0]||`Commit details`,Yt=X?.head?`Commit message`:B===`staged`?`Index summary`:`Change summary`,Xt=B===`staged`?`Staged changes are stored in the Git index and do not have a commit author or commit message yet.`:`Uncommitted workspace changes do not have a commit author or commit message yet.`,Zt=v?`Capturing an immutable workspace revision…`:f?S?Wt===`tracked`?`No tracked changes in this workspace.`:Wt===`untracked`?`No untracked files modified in the last ${f.modifiedWithinDays??3} days.`:`No uncommitted files in this workspace.`:`No changed files in this range.`:`Open a real review with: farming review <git-dir> <base> <head|now>`,Qt=b?`Could not load review target`:ne?`Could not load git range`:`Could not load working copy`;return(0,N.jsxs)(`main`,{className:`review-root`,"data-testid":`review-page`,children:[(0,N.jsxs)(`section`,{className:`review-files`,"aria-label":`Changed files`,children:[(0,N.jsxs)(`header`,{className:`review-files-toolbar`,children:[(0,N.jsxs)(`div`,{className:`review-patch-info`,children:[(0,N.jsxs)(`div`,{className:`review-source-control`,ref:st,children:[(0,N.jsxs)(`button`,{type:`button`,className:`review-source-trigger`,"aria-expanded":H,onClick:Bt,children:[(0,N.jsx)(`strong`,{children:qt}),(0,N.jsx)(i,{})]}),H?(0,N.jsxs)(`div`,{className:`review-source-menu`,role:`menu`,"aria-label":`Compare changes from`,children:[z?(0,N.jsx)(`p`,{children:`Loading comparisons…`}):null,L?(0,N.jsx)(`p`,{className:`error`,children:L}):null,I?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(`button`,{type:`button`,role:`menuitemradio`,"aria-checked":B===`unstaged`,disabled:!I.unstaged.available,onClick:()=>Vt(I.unstaged),children:[(0,N.jsx)(`span`,{children:`Unstaged`}),B===`unstaged`?(0,N.jsx)(l,{}):null]}),(0,N.jsxs)(`button`,{type:`button`,role:`menuitemradio`,"aria-checked":B===`staged`,disabled:!I.staged.available,onClick:()=>Vt(I.staged),children:[(0,N.jsx)(`span`,{children:`Staged`}),B===`staged`?(0,N.jsx)(l,{}):null]}),(0,N.jsxs)(`details`,{className:`review-source-submenu`,children:[(0,N.jsxs)(`summary`,{children:[`Commit `,(0,N.jsx)(u,{})]}),(0,N.jsx)(`div`,{children:I.commits.length?I.commits.map(e=>(0,N.jsxs)(`button`,{type:`button`,role:`menuitemradio`,"aria-checked":B===e.id,onClick:()=>Vt(e),children:[(0,N.jsx)(`span`,{children:e.label}),B===e.id?(0,N.jsx)(l,{}):null]},e.id)):(0,N.jsx)(`p`,{children:`No commits available`})})]}),(0,N.jsxs)(`details`,{className:`review-source-submenu`,children:[(0,N.jsxs)(`summary`,{children:[`Branch `,(0,N.jsx)(u,{})]}),(0,N.jsx)(`div`,{children:I.branches.length?I.branches.map(e=>(0,N.jsxs)(`button`,{type:`button`,role:`menuitemradio`,"aria-checked":B===e.id,onClick:()=>Vt(e),children:[(0,N.jsx)(`span`,{children:e.label}),B===e.id?(0,N.jsx)(l,{}):null]},e.id)):(0,N.jsx)(`p`,{children:`No other branches`})})]}),m?(0,N.jsxs)(`button`,{type:`button`,role:`menuitemradio`,"aria-checked":q,onClick:()=>Rt(m,g),children:[(0,N.jsx)(`span`,{children:`Last Turn`}),q?(0,N.jsx)(l,{}):null]}):null]}):null]}):null]}),(0,N.jsxs)(`span`,{className:`review-total-stats`,children:[(0,N.jsxs)(`b`,{children:[`+`,xt]}),(0,N.jsxs)(`i`,{children:[`−`,St]})]}),x?null:(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(`select`,{"aria-label":`Patch set`,value:G,onChange:e=>Dt(e.target.value),children:[(0,N.jsx)(`option`,{value:`Patchset 20`,children:`Patchset 20`}),(0,N.jsx)(`option`,{value:`Patchset 19`,children:`Patchset 19`})]}),(0,N.jsxs)(`button`,{type:`button`,className:`review-commit`,onClick:Mt,title:`Copy commit`,children:[Ie?`Copied`:`34a15ae`,(0,N.jsx)(c,{})]})]}),q?(0,N.jsxs)(`span`,{className:`review-revision-label`,children:[`Revision `,m?.number]}):null]}),(0,N.jsxs)(`div`,{className:`review-files-actions`,children:[q&&m?(0,N.jsxs)(N.Fragment,{children:[m.number>1?(0,N.jsx)(`button`,{type:`button`,className:g===`fixes`?`active`:``,onClick:()=>Ut(`fixes`),children:`FIXES SINCE REVIEW`}):null,(0,N.jsx)(`button`,{type:`button`,disabled:v,onClick:Ht,children:v?`CAPTURING…`:`REFRESH`}),(0,N.jsx)(`span`,{className:`review-toolbar-separator`})]}):null,(0,N.jsx)(`button`,{type:`button`,onClick:()=>$({expanded:!Ot,paths:Q.map(e=>e.path),type:`set-all-files-expanded`}),children:Ot?`COLLAPSE ALL`:`EXPAND ALL`}),(0,N.jsx)(`span`,{className:`review-toolbar-separator`}),J===`untracked`?null:(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`span`,{children:`Diff view:`}),(0,N.jsx)(`button`,{type:`button`,className:`review-icon-action ${dt===`split`?`active`:``}`,"aria-label":`Side-by-side diff`,title:`Side-by-side diff`,onClick:()=>$({mode:`split`,type:`set-diff-mode`}),children:(0,N.jsx)(s,{})}),(0,N.jsx)(`button`,{type:`button`,className:`review-icon-action ${dt===`unified`?`active`:``}`,"aria-label":`Unified diff`,title:`Unified diff`,onClick:()=>$({mode:`unified`,type:`set-diff-mode`}),children:(0,N.jsx)(o,{})})]}),(0,N.jsx)(`button`,{type:`button`,className:`review-icon-action`,"aria-label":`Diff preferences`,title:`Diff preferences`,onClick:At,children:(0,N.jsx)(r,{})})]}),Re||Be?(0,N.jsx)(`span`,{className:`review-review-error`,role:`status`,children:Re||Be}):null]}),x&&X?(0,N.jsxs)(`details`,{className:`review-commit-message`,children:[(0,N.jsxs)(`summary`,{children:[(0,N.jsx)(`span`,{children:Yt}),(0,N.jsx)(`strong`,{children:Jt}),(0,N.jsx)(u,{})]}),(0,N.jsx)(`div`,{children:X.head?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(`p`,{children:[(0,N.jsx)(`span`,{children:`Author`}),(0,N.jsx)(`strong`,{children:X.head.authorName}),X.head.authorEmail?` <${X.head.authorEmail}>`:``]}),X.head.authoredAt?(0,N.jsxs)(`p`,{children:[(0,N.jsx)(`span`,{children:`Date`}),new Date(X.head.authoredAt).toLocaleString()]}):null,(0,N.jsx)(`pre`,{children:X.head.message})]}):(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(`p`,{children:[(0,N.jsx)(`span`,{children:`Based on`}),(0,N.jsx)(`strong`,{children:X.base?.message.split(`
3
3
  `)[0]||ct})]}),X.base?(0,N.jsxs)(`p`,{children:[(0,N.jsx)(`span`,{children:`Base author`}),X.base.authorName,X.base.authorEmail?` <${X.base.authorEmail}>`:``]}):null,(0,N.jsx)(`pre`,{children:Xt})]})})]}):null,(0,N.jsxs)(`div`,{className:`review-files-list`,children:[w?(0,N.jsxs)(`p`,{className:`review-working-copy-message`,role:`alert`,children:[Qt,`: `,w]}):null,x&&!w&&Q.length===0?(0,N.jsx)(`p`,{className:`review-working-copy-message`,role:`status`,children:Zt}):null,Q.map(e=>{let t=Pe(D,e,{mutationPending:wt}),n=ce(D,t.commentPaths),r=n.filter(e=>e.status===`outdated`),a=t=>ae(e,t);return(0,N.jsxs)(`article`,{className:`review-file-change ${t.expanded?`expanded`:``} ${We===e.path?`reviewing`:``}`,"data-testid":`review-file-row`,"data-change-kind":e.kind,"data-file-path":e.path,children:[(0,N.jsxs)(`header`,{className:`review-file-change-header`,children:[(0,N.jsxs)(`button`,{type:`button`,className:`review-file-select`,onClick:()=>kt(e.path),children:[(0,N.jsx)(`span`,{className:`review-file-status`,children:t.changeLabel}),(0,N.jsxs)(`span`,{className:`review-file-paths`,children:[(0,N.jsx)(`span`,{className:`review-file-name`,children:e.path}),e.previousPath?(0,N.jsx)(`span`,{className:`review-file-previous-path`,title:`Previous path: ${e.previousPath}`,children:e.previousPath}):null]}),(0,N.jsx)(it,{file:e,maxChangeSize:Ct}),(0,N.jsx)(at,{file:e})]}),(0,N.jsx)(rt,{action:t.action,pending:t.pending,reviewed:t.reviewed,reviewedLabel:t.reviewedLabel,onToggle:()=>{t.action&&Et(e.path,t.action.nextReviewed)}}),(0,N.jsx)(`button`,{type:`button`,className:`review-file-expand`,"aria-label":t.expanded?`Collapse file diff`:`Expand file diff`,onClick:()=>kt(e.path),children:t.expanded?(0,N.jsx)(i,{}):(0,N.jsx)(u,{})})]}),t.expanded?(0,N.jsxs)(`section`,{className:`review-inline-diff ${gt} ${Y.fitToScreen?`fit-to-screen`:``}`,"aria-label":`Diff for ${e.path}`,children:[r.length?(0,N.jsx)(`div`,{className:`review-outdated-comments`,children:r.map(e=>(0,N.jsx)(ht,{comment:e,disabled:Tt,onDelete:()=>$({id:e.id,type:`delete-comment`}),onStatusChange:t=>Lt(e,t)},e.id))}):null,(0,N.jsxs)(`div`,{className:`review-diff-columns`,children:[(0,N.jsx)(`span`,{children:`File`}),gt===`split`?(0,N.jsx)(`span`,{children:`File`}):null]}),t.diffStatus!==`loaded`||t.diffLoadPending||t.diffLoadError?(0,N.jsx)(pt,{row:t}):(0,N.jsx)(N.Fragment,{children:(0,N.jsx)(`div`,{className:`review-diff-code`,style:{fontSize:`${Y.fontSize}px`,tabSize:Y.tabSize,minWidth:Y.fitToScreen?void 0:`${Math.round(Y.lineLength*Y.fontSize*.62)}px`},onClick:e=>{let t=window.getSelection();if(t&&!t.isCollapsed||!(e.target instanceof Element))return;let n=e.target.closest(`code[data-review-line][data-review-side]`);if(!n)return;let r=Number(n.dataset.reviewLine),i=n.dataset.reviewSide;!Number.isFinite(r)||i!==`left`&&i!==`right`&&i!==`unified`||Ft(a(i),r,i)},onMouseUp:e=>{let t=_t(e.currentTarget);t&&Ft(a(t.side),t.line,t.side,t.range)},children:(0,N.jsx)(ft,{contextKeyPrefix:`${W}:${G}`,contextGapExpansions:tt,file:e,mode:gt,preferences:Y,renderAttachment:(e,t)=>{let r=Z&&Z.path===a(Z.side)&&Z.line===e&&t.includes(Z.side)?Z:null,i=n.filter(n=>n.status!==`outdated`&&n.line===e&&t.includes(n.side)&&n.path===a(n.side));return!r&&i.length===0?null:(0,N.jsxs)(`div`,{className:`review-line-attachment`,"data-review-comment-line":e,children:[r?(0,N.jsx)(mt,{disabled:Tt,draft:bt,target:r,onCancel:()=>$({type:`cancel-comment`}),onDraftChange:e=>$({body:e,type:`update-comment-draft`}),onSave:It}):null,i.map(e=>(0,N.jsx)(ht,{comment:e,disabled:Tt,onDelete:()=>$({id:e.id,type:`delete-comment`}),onStatusChange:t=>Lt(e,t)},e.id))]})},onExpandContext:(t,n,r)=>Pt(e,t,n,r),onExpandSkippedContext:(t,n,r)=>Nt(e.path,r)})})})]}):null]},e.path)})]})]}),Ne?(0,N.jsx)(`div`,{className:`review-preferences-backdrop`,role:`presentation`,onMouseDown:()=>M(!1),children:(0,N.jsxs)(`section`,{className:`review-preferences`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`review-preferences-title`,onMouseDown:e=>e.stopPropagation(),children:[(0,N.jsx)(`header`,{children:(0,N.jsx)(`h2`,{id:`review-preferences-title`,children:`Diff Preferences`})}),(0,N.jsxs)(`div`,{className:`review-preferences-form`,children:[(0,N.jsxs)(`label`,{children:[`Context`,(0,N.jsxs)(`select`,{"aria-label":`Context`,value:A.context,onChange:e=>j(t=>({...t,context:Number(e.target.value)})),children:[(0,N.jsx)(`option`,{value:3,children:`3 lines`}),(0,N.jsx)(`option`,{value:10,children:`10 lines`}),(0,N.jsx)(`option`,{value:25,children:`25 lines`}),(0,N.jsx)(`option`,{value:100,children:`100 lines`})]})]}),(0,N.jsxs)(`label`,{className:`checkbox-row`,children:[`Fit to screen`,(0,N.jsx)(`input`,{"aria-label":`Fit to screen`,type:`checkbox`,checked:A.fitToScreen,onChange:e=>j(t=>({...t,fitToScreen:e.target.checked}))})]}),(0,N.jsxs)(`label`,{children:[`Diff width`,(0,N.jsx)(`input`,{"aria-label":`Diff width`,type:`number`,autoComplete:`off`,"data-form-type":`other`,min:40,max:240,value:A.lineLength,onChange:e=>j(t=>({...t,lineLength:Number(e.target.value)||t.lineLength}))})]}),(0,N.jsxs)(`label`,{children:[`Tab width`,(0,N.jsx)(`input`,{"aria-label":`Tab width`,type:`number`,autoComplete:`off`,"data-form-type":`other`,min:2,max:16,value:A.tabSize,onChange:e=>j(t=>({...t,tabSize:Number(e.target.value)||t.tabSize}))})]}),(0,N.jsxs)(`label`,{children:[`Font size`,(0,N.jsx)(`input`,{"aria-label":`Font size`,type:`number`,autoComplete:`off`,"data-form-type":`other`,min:10,max:20,value:A.fontSize,onChange:e=>j(t=>({...t,fontSize:Number(e.target.value)||t.fontSize}))})]}),(0,N.jsxs)(`label`,{className:`checkbox-row`,children:[`Intraline differences`,(0,N.jsx)(`input`,{"aria-label":`Intraline differences`,type:`checkbox`,checked:A.intralineDifference,onChange:e=>j(t=>({...t,intralineDifference:e.target.checked}))})]}),(0,N.jsxs)(`label`,{className:`checkbox-row`,children:[`Show tabs`,(0,N.jsx)(`input`,{"aria-label":`Show tabs`,type:`checkbox`,checked:A.showTabs,onChange:e=>j(t=>({...t,showTabs:e.target.checked}))})]}),(0,N.jsxs)(`label`,{className:`checkbox-row`,children:[`Show trailing whitespace`,(0,N.jsx)(`input`,{"aria-label":`Show trailing whitespace`,type:`checkbox`,checked:A.showTrailingWhitespace,onChange:e=>j(t=>({...t,showTrailingWhitespace:e.target.checked}))})]}),(0,N.jsxs)(`label`,{className:`checkbox-row`,children:[`Syntax highlighting`,(0,N.jsx)(`input`,{"aria-label":`Syntax highlighting`,type:`checkbox`,checked:A.syntaxHighlighting,onChange:e=>j(t=>({...t,syntaxHighlighting:e.target.checked}))})]}),(0,N.jsxs)(`label`,{children:[`Ignore Whitespace`,(0,N.jsxs)(`select`,{"aria-label":`Ignore Whitespace`,value:A.ignoreWhitespace,onChange:e=>j(t=>({...t,ignoreWhitespace:e.target.value})),children:[(0,N.jsx)(`option`,{value:`NONE`,children:`None`}),(0,N.jsx)(`option`,{value:`TRAILING`,children:`Trailing`}),(0,N.jsx)(`option`,{value:`LEADING_AND_TRAILING`,children:`Leading + trailing`}),(0,N.jsx)(`option`,{value:`ALL`,children:`All`})]})]})]}),(0,N.jsxs)(`footer`,{children:[(0,N.jsx)(`button`,{type:`button`,onClick:()=>M(!1),children:`CANCEL`}),(0,N.jsx)(`button`,{type:`button`,onClick:jt,children:`SAVE`})]})]})}):null]})}export{Y as ReviewPage,L as diffLanguageForPath};
@@ -1 +1 @@
1
- import{n as e}from"./chunk-5HE753X5-C8cXaouP.js";import{n as t}from"./chunk-Y2CYZVJY-Di0sYzi1.js";import{m as n}from"./src-WBW1QxJt.js";import"./chunk-WYO6CB5R-C2bGaS5r.js";import"./chunk-VAUOI2AC-B-W2_9Ot.js";import{n as r,r as i,t as a}from"./chunk-MOJQB5TN-CVMfwN_7.js";import{t as o}from"./chunk-JWPE2WC7-DSyBRaRG.js";import{t as s}from"./mermaid-parser.core-BQtepoLd.js";var c=e().RailroadAbnf.parser.LangiumParser,l=t(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=t(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=t(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=t(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=t(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=t(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=t(e=>{o(e,a),e.title&&a.setTitle(e.title),e.rules.map(e=>a.addRule(m(e)))},`populateDb`),g={parser:{parse:t(e=>{a.clear(),n.debug(`[ABNF Parser] Starting Langium parse`);let t=c.parse(e);if(t.lexerErrors.length>0||t.parserErrors.length>0)throw new s(t);let r=t.value;n.debug(`[ABNF Parser] Parsed rules:`,r.rules.length),h(r),n.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:a}},db:a,renderer:i,styles:r};export{g as diagram};
1
+ import{n as e}from"./chunk-5HE753X5-C8cXaouP.js";import{n as t}from"./chunk-Y2CYZVJY-Di0sYzi1.js";import{m as n}from"./src-WBW1QxJt.js";import"./chunk-WYO6CB5R-CUxMtfK2.js";import"./chunk-VAUOI2AC-UHNr_yhX.js";import{n as r,r as i,t as a}from"./chunk-MOJQB5TN-DAVH_p2a.js";import{t as o}from"./chunk-JWPE2WC7-DSyBRaRG.js";import{t as s}from"./mermaid-parser.core-BQtepoLd.js";var c=e().RailroadAbnf.parser.LangiumParser,l=t(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=t(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=t(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=t(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=t(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=t(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=t(e=>{o(e,a),e.title&&a.setTitle(e.title),e.rules.map(e=>a.addRule(m(e)))},`populateDb`),g={parser:{parse:t(e=>{a.clear(),n.debug(`[ABNF Parser] Starting Langium parse`);let t=c.parse(e);if(t.lexerErrors.length>0||t.parserErrors.length>0)throw new s(t);let r=t.value;n.debug(`[ABNF Parser] Parsed rules:`,r.rules.length),h(r),n.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:a}},db:a,renderer:i,styles:r};export{g as diagram};