plugin-git-manager 1.2.2 → 1.2.4

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 (76) hide show
  1. package/client-v2.d.ts +2 -0
  2. package/client-v2.js +1 -0
  3. package/dist/client/326.03f7202ae14b60ae.js +10 -0
  4. package/dist/client/434.afb45fa69887568e.js +10 -0
  5. package/dist/client/878.f99a81c2e6b4f602.js +10 -0
  6. package/dist/client/index.js +10 -1
  7. package/dist/client-v2/326.42b7b53651ffab3a.js +10 -0
  8. package/dist/client-v2/434.e65de282926677d6.js +10 -0
  9. package/dist/client-v2/878.06d6d1fe4fdb05f8.js +10 -0
  10. package/dist/client-v2/index.js +10 -0
  11. package/dist/externalVersion.js +16 -5
  12. package/dist/index.js +9 -0
  13. package/dist/locale/en-US.json +8 -1
  14. package/dist/locale/vi-VN.json +8 -1
  15. package/dist/server/actions/git-actions.js +43 -6
  16. package/dist/server/actions/gitlab-api.js +9 -0
  17. package/dist/server/actions/poller.js +9 -0
  18. package/dist/server/actions/review.js +9 -0
  19. package/dist/server/actions/role-permissions.js +145 -0
  20. package/dist/server/ai-tools.js +9 -0
  21. package/dist/server/collections/gitCodeReviews.js +9 -0
  22. package/dist/server/collections/gitRepositories.js +9 -0
  23. package/dist/server/collections/gitReviewFlows.js +9 -0
  24. package/dist/server/index.js +9 -0
  25. package/dist/server/migrations/20260508000000-add-auto-review-flow-id.js +9 -0
  26. package/dist/server/plugin.js +27 -1
  27. package/dist/server/poller.js +9 -0
  28. package/dist/server/utils/gitlab-url.js +9 -0
  29. package/dist/server/utils/redact.js +9 -0
  30. package/package.json +8 -4
  31. package/src/client/components/GitManagerSettings.tsx +1 -11
  32. package/src/client/components/RepositoryPermissions.tsx +130 -0
  33. package/src/client/index.tsx +36 -2
  34. package/src/client-v2/index.tsx +1 -0
  35. package/src/client-v2/plugin.tsx +32 -0
  36. package/src/locale/en-US.json +8 -1
  37. package/src/locale/vi-VN.json +8 -1
  38. package/src/server/__tests__/smoke.test.ts +17 -0
  39. package/src/server/actions/git-actions.ts +430 -430
  40. package/src/server/actions/role-permissions.ts +128 -0
  41. package/src/server/plugin.ts +46 -25
  42. package/dist/client/187.d5545b7cc8b90bfc.js +0 -1
  43. package/dist/client/228.7588a0707cb3694a.js +0 -1
  44. package/dist/client/ai-context.d.ts +0 -8
  45. package/dist/client/components/AIEmployeeSelect.d.ts +0 -13
  46. package/dist/client/components/CommitHistory.d.ts +0 -2
  47. package/dist/client/components/FileExplorer.d.ts +0 -2
  48. package/dist/client/components/GitManagerSettings.d.ts +0 -2
  49. package/dist/client/components/GitOperations.d.ts +0 -2
  50. package/dist/client/components/LLMModelSelect.d.ts +0 -10
  51. package/dist/client/components/LLMServiceSelect.d.ts +0 -9
  52. package/dist/client/components/MarkdownView.d.ts +0 -10
  53. package/dist/client/components/MergeRequests.d.ts +0 -2
  54. package/dist/client/components/PollingStatus.d.ts +0 -2
  55. package/dist/client/components/RepositoryConfig.d.ts +0 -2
  56. package/dist/client/components/ReviewFlows.d.ts +0 -2
  57. package/dist/client/components/ReviewHistory.d.ts +0 -4
  58. package/dist/client/components/RunReviewButton.d.ts +0 -31
  59. package/dist/client/context/GitManagerContext.d.ts +0 -26
  60. package/dist/client/index.d.ts +0 -5
  61. package/dist/client/locale.d.ts +0 -2
  62. package/dist/index.d.ts +0 -2
  63. package/dist/server/actions/git-actions.d.ts +0 -13
  64. package/dist/server/actions/gitlab-api.d.ts +0 -4
  65. package/dist/server/actions/poller.d.ts +0 -8
  66. package/dist/server/actions/review.d.ts +0 -40
  67. package/dist/server/ai-tools.d.ts +0 -10
  68. package/dist/server/collections/gitCodeReviews.d.ts +0 -2
  69. package/dist/server/collections/gitRepositories.d.ts +0 -2
  70. package/dist/server/collections/gitReviewFlows.d.ts +0 -2
  71. package/dist/server/index.d.ts +0 -2
  72. package/dist/server/migrations/20260508000000-add-auto-review-flow-id.d.ts +0 -6
  73. package/dist/server/plugin.d.ts +0 -12
  74. package/dist/server/poller.d.ts +0 -30
  75. package/dist/server/utils/gitlab-url.d.ts +0 -21
  76. package/dist/server/utils/redact.d.ts +0 -13
@@ -0,0 +1,10 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ "use strict";(self.webpackChunkplugin_git_manager_client_v2=self.webpackChunkplugin_git_manager_client_v2||[]).push([["878"],{205:function(e,t,r){r.d(t,{GitManagerSettings:function(){return e3}});var n=r(155),l=r.n(n),a=r(59),o=r(375),i=r(602),c=r(342),u=r(578);function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function d(e,t,r,n,l,a,o){try{var i=e[a](o),c=i.value}catch(e){r(e);return}i.done?t(c):Promise.resolve(c).then(n,l)}function m(e){return function(){var t=this,r=arguments;return new Promise(function(n,l){var a=e.apply(t,r);function o(e){d(a,n,l,o,i,"next",e)}function i(e){d(a,n,l,o,i,"throw",e)}o(void 0)})}}function p(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}function f(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function y(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,l=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(r=l.next()).done)&&(a.push(r.value),!t||a.length!==t);o=!0);}catch(e){i=!0,n=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw n}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return s(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return s(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function g(e,t){var r,n,l,a={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(r)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(a=0)),a;)try{if(r=1,n&&(l=2&u[0]?n.return:u[0]?n.throw||((l=n.return)&&l.call(n),0):n.next)&&!(l=l.call(n,u[1])).done)return l;switch(n=0,l&&(u=[2&u[0],l.value]),u[0]){case 0:case 1:l=u;break;case 4:return a.label++,{value:u[1],done:!1};case 5:a.label++,n=u[1],u=[0];continue;case 7:u=a.ops.pop(),a.trys.pop();continue;default:if(!(l=(l=a.trys).length>0&&l[l.length-1])&&(6===u[0]||2===u[0])){a=0;continue}if(3===u[0]&&(!l||u[1]>l[0]&&u[1]<l[3])){a.label=u[1];break}if(6===u[0]&&a.label<l[1]){a.label=l[1],l=u;break}if(l&&a.label<l[2]){a.label=l[2],a.ops.push(u);break}l[2]&&a.ops.pop(),a.trys.pop();continue}u=t.call(e,a)}catch(e){u=[6,e],n=0}finally{r=l=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var h=a.Typography.Text,v=a.Input.Search,b=a.theme.useToken,E={ts:l().createElement(o.CodeOutlined,{style:{color:"#3178c6"}}),tsx:l().createElement(o.CodeOutlined,{style:{color:"#3178c6"}}),js:l().createElement(o.CodeOutlined,{style:{color:"#f7df1e"}}),jsx:l().createElement(o.CodeOutlined,{style:{color:"#f7df1e"}}),json:l().createElement(o.CodeOutlined,{style:{color:"#5b5b5b"}}),md:l().createElement(o.FileMarkdownOutlined,{style:{color:"#083fa1"}}),html:l().createElement(o.Html5Outlined,{style:{color:"#e34c26"}}),css:l().createElement(o.FileTextOutlined,{style:{color:"#563d7c"}}),py:l().createElement(o.CodeOutlined,{style:{color:"#3572A5"}}),png:l().createElement(o.FileImageOutlined,{style:{color:"#a85e32"}}),jpg:l().createElement(o.FileImageOutlined,{style:{color:"#a85e32"}}),svg:l().createElement(o.FileImageOutlined,{style:{color:"#ffb13b"}})},w=function(){var e,t=(0,u.k)(),r=b().token,s=(0,c.useAPIClient)(),d=(0,i.B)(),w=d.selectedRepo,S=d.branches,k=d.currentBranch,I=d.refreshBranches,x=y((0,n.useState)([]),2),C=x[0],O=x[1],A=y((0,n.useState)(!1),2),T=A[0],R=A[1],z=y((0,n.useState)(null),2),B=z[0],P=z[1],j=y((0,n.useState)(null),2),F=j[0],M=j[1],D=y((0,n.useState)("HEAD"),2),L=D[0],q=D[1],N=y((0,n.useState)(""),2),U=N[0],H=N[1],W=y((0,n.useState)(""),2),_=W[0],G=W[1],$=y((0,n.useState)(!1),2),K=$[0],V=$[1],J=(0,n.useCallback)(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:L;return m(function(){var r,n;return g(this,function(a){switch(a.label){case 0:if(!w)return[2,[]];a.label=1;case 1:return a.trys.push([1,3,,4]),[4,s.request({url:"gitManager:fileTree",params:{repositoryId:w.id,ref:t,treePath:e}})];case 2:return[2,(Array.isArray(n=(null==(r=a.sent().data)?void 0:r.data)||r||[])?n:Array.isArray(null==n?void 0:n.data)?n.data:[]).map(function(e){return{key:e.path,title:l().createElement(h,{style:{fontSize:13}},e.name,"blob"===e.type&&e.size>0&&l().createElement(h,{type:"secondary",style:{fontSize:11,marginLeft:8}},e.size>1024?"".concat((e.size/1024).toFixed(1),"KB"):"".concat(e.size,"B"))),icon:function(e,t){if("tree"!==t){var r;return E[(null==(r=e.split(".").pop())?void 0:r.toLowerCase())||""]||l().createElement(o.FileOutlined,null)}}(e.name,e.type),isLeaf:"blob"===e.type,filePath:e.path,fileType:e.type}})];case 3:return console.warn("Failed to load file tree:",a.sent()),[2,[]];case 4:return[2]}})})()},[s,w,L]),Q=(0,n.useCallback)(function(){return m(function(){return g(this,function(e){switch(e.label){case 0:R(!0),e.label=1;case 1:return e.trys.push([1,,3,4]),[4,J("",L)];case 2:return O(e.sent()),[3,4];case 3:return R(!1),[7];case 4:return[2]}})})()},[J,L]);(0,n.useEffect)(function(){(null==w?void 0:w.status)==="connected"?(I(),P(null),M(null)):O([])},[w]),(0,n.useEffect)(function(){k&&"HEAD"===L&&q(k)},[k]),(0,n.useEffect)(function(){(null==w?void 0:w.status)==="connected"&&Q()},[L,w]);var X=(0,n.useRef)();if((0,n.useEffect)(function(){return X.current=setTimeout(function(){return G(U)},300),function(){return clearTimeout(X.current)}},[U]),!w)return l().createElement(a.Empty,{description:t("No repository selected")});if("connected"!==w.status)return l().createElement(a.Empty,{description:t("Repository not cloned yet")});var Y=_?function e(t,r){return t.map(function(t){if(t.children){var n=e(t.children,r);if(n.length>0)return f(p({},t),{children:n})}return(t.filePath||"").toLowerCase().includes(r)?t:null}).filter(Boolean)}(C,_.toLowerCase()):C;return l().createElement("div",{style:{display:"flex",height:"calc(100vh - 280px)",gap:0}},l().createElement("div",{style:{width:320,minWidth:280,borderRight:"1px solid ".concat(r.colorBorderSecondary),display:"flex",flexDirection:"column",background:r.colorBgContainer}},l().createElement("div",{style:{padding:"8px 12px",borderBottom:"1px solid ".concat(r.colorBorderSecondary)}},l().createElement(a.Space,{direction:"vertical",style:{width:"100%"},size:6},l().createElement(a.Select,{size:"small",style:{width:"100%"},value:L,onChange:function(e){q(e),P(null),M(null)},options:S.map(function(e){return{label:e,value:e}}),placeholder:"Branch"}),l().createElement(v,{size:"small",placeholder:"Filter files...",allowClear:!0,onChange:function(e){return H(e.target.value)}}))),l().createElement("div",{style:{flex:1,overflow:"auto",padding:"4px 0"}},T?l().createElement("div",{style:{textAlign:"center",padding:40}},l().createElement(a.Spin,null)):l().createElement(a.Tree,{showIcon:!0,treeData:Y,loadData:function(e){return m(function(){var t;return g(this,function(r){switch(r.label){case 0:if(e.children)return[2];return[4,J(e.filePath,L)];case 1:return t=r.sent(),O(function(r){return function e(t,r,n){return t.map(function(t){return t.key===r?f(p({},t),{children:n}):t.children?f(p({},t),{children:e(t.children,r,n)}):t})}(r,e.key,t)}),[2]}})})()},onSelect:function(e,t){return m(function(){var e,r,n,l;return g(this,function(a){switch(a.label){case 0:if(!(e=t.node).isLeaf)return[2];V(!0),M(e.filePath),a.label=1;case 1:return a.trys.push([1,3,4,5]),[4,s.request({url:"gitManager:fileContent",params:{repositoryId:w.id,ref:L,filePath:e.filePath}})];case 2:return P((null==(l=(null==(n=a.sent().data)||null==(r=n.data)?void 0:r.data)||(null==n?void 0:n.data))?void 0:l.content)||""),[3,5];case 3:return a.sent(),P("// Failed to load file content"),[3,5];case 4:return V(!1),[7];case 5:return[2]}})})()},selectedKeys:F?[F]:[],style:{fontSize:13},blockNode:!0}))),l().createElement("div",{style:{flex:1,display:"flex",flexDirection:"column",background:r.colorBgLayout}},F?l().createElement(l().Fragment,null,l().createElement("div",{style:{padding:"6px 16px",borderBottom:"1px solid ".concat(r.colorBorderSecondary),background:r.colorBgContainer,display:"flex",alignItems:"center",gap:8}},l().createElement(a.Breadcrumb,{items:F.split("/").map(function(e,t,r){return{title:t===r.length-1?l().createElement(h,{strong:!0},e):e}})}),l().createElement(h,{type:"secondary",style:{marginLeft:"auto",fontSize:12}},{ts:"typescript",tsx:"typescript",js:"javascript",jsx:"javascript",json:"json",md:"markdown",html:"html",css:"css",scss:"scss",py:"python",sh:"bash",yml:"yaml",yaml:"yaml",sql:"sql",xml:"xml",java:"java",go:"go",rs:"rust",rb:"ruby"}[(null==(e=F.split(".").pop())?void 0:e.toLowerCase())||""]||"text")),l().createElement("div",{style:{flex:1,overflow:"auto"}},K?l().createElement("div",{style:{textAlign:"center",padding:40}},l().createElement(a.Spin,null)):l().createElement("pre",{style:{margin:0,padding:16,fontSize:13,lineHeight:1.6,fontFamily:"'JetBrains Mono', 'Fira Code', 'Cascadia Code', Consolas, monospace",whiteSpace:"pre-wrap",wordBreak:"break-all",background:r.colorBgContainer,minHeight:"100%"}},(B||"").split("\n").map(function(e,t){return l().createElement("div",{key:t,style:{display:"flex"}},l().createElement("span",{style:{display:"inline-block",width:50,textAlign:"right",paddingRight:16,color:r.colorTextQuaternary,userSelect:"none",flexShrink:0}},t+1),l().createElement("span",{style:{flex:1}},e||" "))})))):l().createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",height:"100%"}},l().createElement(h,{type:"secondary"},"Select a file to view its content"))))},S=r(75);function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function I(e,t,r,n,l,a,o){try{var i=e[a](o),c=i.value}catch(e){r(e);return}i.done?t(c):Promise.resolve(c).then(n,l)}function x(e){return function(){var t=this,r=arguments;return new Promise(function(n,l){var a=e.apply(t,r);function o(e){I(a,n,l,o,i,"next",e)}function i(e){I(a,n,l,o,i,"throw",e)}o(void 0)})}}function C(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,l=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(r=l.next()).done)&&(a.push(r.value),!t||a.length!==t);o=!0);}catch(e){i=!0,n=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw n}}return a}}(e,t)||O(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function O(e,t){if(e){if("string"==typeof e)return k(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return k(e,t)}}function A(e,t){var r,n,l,a={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(r)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(a=0)),a;)try{if(r=1,n&&(l=2&u[0]?n.return:u[0]?n.throw||((l=n.return)&&l.call(n),0):n.next)&&!(l=l.call(n,u[1])).done)return l;switch(n=0,l&&(u=[2&u[0],l.value]),u[0]){case 0:case 1:l=u;break;case 4:return a.label++,{value:u[1],done:!1};case 5:a.label++,n=u[1],u=[0];continue;case 7:u=a.ops.pop(),a.trys.pop();continue;default:if(!(l=(l=a.trys).length>0&&l[l.length-1])&&(6===u[0]||2===u[0])){a=0;continue}if(3===u[0]&&(!l||u[1]>l[0]&&u[1]<l[3])){a.label=u[1];break}if(6===u[0]&&a.label<l[1]){a.label=l[1],l=u;break}if(l&&a.label<l[2]){a.label=l[2],a.ops.push(u);break}l[2]&&a.ops.pop(),a.trys.pop();continue}u=t.call(e,a)}catch(e){u=[6,e],n=0}finally{r=l=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var T=function(e){var t,r,i=e.target,s=e.size,d=e.type,m=e.onTriggered,p=(0,u.k)(),f=(0,c.useAPIClient)(),y=(null==(t=S.useAIConfigRepository)?void 0:t.call(S))||{},g=((null==(r=S.useChatBoxActions)?void 0:r.call(S))||{}).triggerTask,h=C((0,n.useState)(!1),2),v=h[0],b=h[1],E=C((0,n.useState)([]),2),w=E[0],I=E[1],T=C((0,n.useState)(!1),2),R=T[0],z=T[1],B=C((0,n.useState)(!1),2),P=B[0],j=B[1],F=C((0,n.useState)(null),2),M=F[0],D=F[1],L=C(a.Form.useForm(),1)[0],q=(0,n.useCallback)(function(){var e=!1,t={repositoryId:i.repositoryId,targetType:i.type};return"mr"===i.type&&(t.mrIid=i.mrIid),"commit"===i.type&&(t.commitSha=i.commitSha),"branch"===i.type&&(t.branch=i.branch),f.request({url:"gitCodeReviews:list",params:{pageSize:1,sort:["-id"],filter:t}}).then(function(t){if(!e){var r;D(((null==t||null==(r=t.data)?void 0:r.data)||[])[0]||null)}}).catch(function(){}),function(){e=!0}},[f,i]);(0,n.useEffect)(function(){return q()},[q]);var N=(0,n.useCallback)(function(){return x(function(){var e,t;return A(this,function(r){switch(r.label){case 0:return[4,f.request({url:"gitReviewFlows:list",params:{pageSize:100,filter:{enabled:!0,$or:[{repositoryId:i.repositoryId},{repositoryId:null}]}}})];case 1:return I(t=(null==(e=r.sent().data)?void 0:e.data)||[]),[2,t]}})})()},[f,i.repositoryId]),U=(0,n.useCallback)(function(e){var t,r=e.find(function(e){return e.repositoryId===i.repositoryId});return null!=(t=null!=r?r:e[0])?t:null},[i.repositoryId]);(0,n.useEffect)(function(){if(v){var e=!1;return N().then(function(t){if(!e){var r=U(t);(null==r?void 0:r.id)&&L.setFieldValue("flowId",r.id)}}).catch(function(){}),function(){e=!0}}},[v,N,U,L]);var H=function(){var e=i.title||_();return"mr"===i.type?{type:"git-merge-request",uid:"".concat(i.repositoryId,":").concat(i.mrIid),title:e,content:{repositoryId:i.repositoryId,mrIid:i.mrIid,title:e}}:"commit"===i.type?{type:"git-commit",uid:"".concat(i.repositoryId,":").concat(i.commitSha),title:e,content:{repositoryId:i.repositoryId,commitSha:i.commitSha,title:e}}:{type:"git-repository",uid:String(i.repositoryId),title:e,content:{repositoryId:i.repositoryId,branch:i.branch,title:e}}},W=function(){return x(function(){var e,t,r,n,l,o;return A(this,function(c){switch(c.label){case 0:if(!g||!(null==y?void 0:y.getAIEmployees))return a.message.warning(p("AI plugin is not available")),[2];j(!0),c.label=1;case 1:if(c.trys.push([1,9,10,11]),!w.length)return[3,2];return t=w,[3,4];case 2:return[4,N()];case 3:t=c.sent(),c.label=4;case 4:if(!(null==(r=U(t))?void 0:r.aiEmployeeUsername))return a.message.warning(p("No matching flow available")),[2];if(!(null==(e=y.aiEmployees)?void 0:e.length))return[3,5];return n=y.aiEmployees,[3,7];case 5:return[4,y.getAIEmployees()];case 6:n=c.sent(),c.label=7;case 7:if(!(l=n.find(function(e){return e.username===r.aiEmployeeUsername})))return a.message.warning(p("AI employee not found")),[2];return[4,g({aiEmployee:l,tasks:[{title:"".concat(r.name,": ").concat(_()),message:{user:"mr"===i.type?"Please review merge request !".concat(i.mrIid," (").concat(i.title||"untitled","). Use the attached Git merge request context and the available git tools when you need more detail."):"commit"===i.type?"Please review commit ".concat(i.commitSha," (").concat(i.title||"untitled","). Use the attached Git commit context and the available git tools when you need more detail."):"Please help me inspect branch ".concat(i.branch,". Use the attached Git repository context and the available git tools when you need more detail."),system:r.instructions||void 0,workContext:[H()]},model:r.llmService&&r.model?{llmService:r.llmService,model:r.model}:null,autoSend:!1}]})];case 8:return c.sent(),[3,11];case 9:return o=c.sent(),a.message.error((null==o?void 0:o.message)||p("Failed to open AI chat")),[3,11];case 10:return j(!1),[7];case 11:return[2]}})})()},_=function(){return"mr"===i.type?"MR !".concat(i.mrIid):"commit"===i.type?"Commit ".concat(String(i.commitSha).slice(0,7)):"Branch ".concat(i.branch)},G=M&&M.headSha&&M.latestSha&&M.headSha!==M.latestSha,$=!!M&&"pending"!==M.status,K=$?G?p("Re-review (new commits)"):p("Re-run review"):p("Code Review"),V=$?o.ReloadOutlined:o.RobotOutlined,J=(0,n.useMemo)(function(){var e;return[{key:"run",icon:l().createElement(o.ThunderboltOutlined,null),label:$?p("Re-run automated review"):p("Run automated review"),onClick:function(){return b(!0)}}].concat(function(e){if(Array.isArray(e))return k(e)}(e=M?[{key:"view",icon:l().createElement(o.RobotOutlined,null),label:p("Status: ".concat(M.status))+" - "+p("View in Review History tab"),onClick:function(){a.message.info(p('Please switch to the "Review History" tab to see the details.'))}}]:[])||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||O(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[{key:"chat",icon:l().createElement(o.MessageOutlined,null),label:p("Ask AI Employee"),onClick:W,disabled:P}])},[$,M,P,W]);return l().createElement(l().Fragment,null,l().createElement(a.Dropdown,{menu:{items:J},placement:"bottomRight",trigger:["click"]},l().createElement(a.Button,{size:void 0===s?"small":s,type:G?"primary":void 0===d?"default":d,icon:l().createElement(V,null),danger:!!G,loading:P},K)),l().createElement(a.Modal,{title:l().createElement(a.Space,null,l().createElement(o.RobotOutlined,null),l().createElement("span",null,$?p("Re-run code review"):p("Run code review")),l().createElement("span",{style:{color:"#999",fontSize:12,fontWeight:400}},_())),open:v,onCancel:function(){return b(!1)},onOk:function(){return x(function(){var e,t,r,n,l,o,c,u,s,d,y;return A(this,function(g){switch(g.label){case 0:return g.trys.push([0,3,4,5]),[4,L.validateFields()];case 1:return r=g.sent(),z(!0),n={repositoryId:i.repositoryId,targetType:i.type,flowId:r.flowId,extraInstructions:r.extraInstructions||void 0},"mr"===i.type&&(n.mrIid=i.mrIid),"commit"===i.type&&(n.commitSha=i.commitSha),"branch"===i.type&&(n.branch=i.branch),[4,f.request({url:"gitManager:triggerReview",method:"post",data:n})];case 2:return o=null==(l=g.sent())||null==(t=l.data)||null==(e=t.data)?void 0:e.reviewId,a.message.success(p("Review started")),b(!1),L.resetFields(),q(),null==m||m(o),[3,5];case 3:if(null==(c=g.sent())?void 0:c.errorFields)return[2];return a.message.error((null==c||null==(y=c.response)||null==(d=y.data)||null==(s=d.errors)||null==(u=s[0])?void 0:u.message)||(null==c?void 0:c.message)||p("Failed to trigger review")),[3,5];case 4:return z(!1),[7];case 5:return[2]}})})()},okText:$?p("Re-run"):p("Start Review"),confirmLoading:R,destroyOnClose:!0},$&&l().createElement(a.Alert,{type:G?"warning":"info",showIcon:!0,style:{marginBottom:12},message:G?p("New commits detected since last review. Re-running will overwrite the existing review."):p("A review already exists for this target. Re-running will overwrite it."),description:l().createElement(a.Space,{size:8,wrap:!0,style:{fontSize:12}},(null==M?void 0:M.headSha)&&l().createElement("span",null,p("Reviewed at"),":\xa0",l().createElement(a.Tag,{style:{fontFamily:"monospace"}},String(M.headSha).slice(0,7))),G&&(null==M?void 0:M.latestSha)&&l().createElement("span",null,p("Latest"),":\xa0",l().createElement(a.Tag,{color:"orange",style:{fontFamily:"monospace"}},String(M.latestSha).slice(0,7))))}),l().createElement(a.Form,{form:L,layout:"vertical"},l().createElement(a.Form.Item,{name:"flowId",label:p("Review Flow"),rules:[{required:!0,message:p("Please select a review flow")}],extra:0===w.length?l().createElement(a.Tooltip,{title:p("Create a review flow in the Review Flows tab first")},l().createElement("span",{style:{color:"#faad14"}},p("No enabled flow found for this repository"))):null},l().createElement(a.Select,{options:w.map(function(e){return{value:e.id,label:"".concat(e.name).concat(e.aiEmployeeUsername?" — @".concat(e.aiEmployeeUsername):"").concat(null==e.repositoryId?" (".concat(p("global"),")"):"")}}),placeholder:p("Select a review flow")})),l().createElement(a.Form.Item,{name:"extraInstructions",label:p("Extra instructions (optional)")},l().createElement(a.Input.TextArea,{rows:4,placeholder:p("e.g. Focus on security issues in authentication")})))))};function R(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function z(e,t,r,n,l,a,o){try{var i=e[a](o),c=i.value}catch(e){r(e);return}i.done?t(c):Promise.resolve(c).then(n,l)}function B(e){return function(){var t=this,r=arguments;return new Promise(function(n,l){var a=e.apply(t,r);function o(e){z(a,n,l,o,i,"next",e)}function i(e){z(a,n,l,o,i,"throw",e)}o(void 0)})}}function P(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,l=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(r=l.next()).done)&&(a.push(r.value),!t||a.length!==t);o=!0);}catch(e){i=!0,n=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw n}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return R(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return R(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function j(e,t){var r,n,l,a={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(r)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(a=0)),a;)try{if(r=1,n&&(l=2&u[0]?n.return:u[0]?n.throw||((l=n.return)&&l.call(n),0):n.next)&&!(l=l.call(n,u[1])).done)return l;switch(n=0,l&&(u=[2&u[0],l.value]),u[0]){case 0:case 1:l=u;break;case 4:return a.label++,{value:u[1],done:!1};case 5:a.label++,n=u[1],u=[0];continue;case 7:u=a.ops.pop(),a.trys.pop();continue;default:if(!(l=(l=a.trys).length>0&&l[l.length-1])&&(6===u[0]||2===u[0])){a=0;continue}if(3===u[0]&&(!l||u[1]>l[0]&&u[1]<l[3])){a.label=u[1];break}if(6===u[0]&&a.label<l[1]){a.label=l[1],l=u;break}if(l&&a.label<l[2]){a.label=l[2],a.ops.push(u);break}l[2]&&a.ops.pop(),a.trys.pop();continue}u=t.call(e,a)}catch(e){u=[6,e],n=0}finally{r=l=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var F=a.Typography.Text,M=a.theme.useToken,D={A:{color:"green",icon:l().createElement(o.PlusCircleOutlined,null),label:"Added"},M:{color:"blue",icon:l().createElement(o.EditOutlined,null),label:"Modified"},D:{color:"red",icon:l().createElement(o.DeleteOutlined,null),label:"Deleted"},R:{color:"orange",icon:l().createElement(o.EditOutlined,null),label:"Renamed"}},L=function(){var e,t,r=(0,u.k)(),s=M().token,d=(0,c.useAPIClient)(),m=(0,i.B)(),p=m.selectedRepo,f=m.branches,y=m.currentBranch,g=P((0,n.useState)([]),2),h=g[0],v=g[1],b=P((0,n.useState)(!1),2),E=b[0],w=b[1],S=P((0,n.useState)(null),2),k=S[0],I=S[1],x=P((0,n.useState)(null),2),C=x[0],O=x[1],A=P((0,n.useState)(!1),2),R=A[0],z=A[1],L=P((0,n.useState)(null),2),U=L[0],H=L[1],W=P((0,n.useState)(null),2),_=W[0],G=W[1],$=P((0,n.useState)(""),2),K=$[0],V=$[1],J=(0,n.useCallback)(function(){return B(function(){var e,t,r;return j(this,function(n){switch(n.label){case 0:if(!p)return[2];w(!0),n.label=1;case 1:return n.trys.push([1,3,4,5]),[4,d.request({url:"gitManager:log",params:{repositoryId:p.id,maxCount:100}})];case 2:return v((null==(r=(null==(t=n.sent().data)||null==(e=t.data)?void 0:e.data)||(null==t?void 0:t.data))?void 0:r.all)||[]),[3,5];case 3:return console.warn("Failed to load commit history:",n.sent()),v([]),[3,5];case 4:return w(!1),[7];case 5:return[2]}})})()},[d,p]);(0,n.useEffect)(function(){(null==p?void 0:p.status)==="connected"?J():v([])},[p]);var Q=h.filter(function(e){var t=K.trim().toLowerCase();return!t||String(e.message||e.subject||e.body||"").toLowerCase().includes(t)}),X=function(e){return B(function(){var t,r;return j(this,function(n){switch(n.label){case 0:I(e),z(!0),H(null),G(null),n.label=1;case 1:return n.trys.push([1,3,4,5]),[4,d.request({url:"gitManager:commitDetail",params:{repositoryId:p.id,commitHash:e.hash}})];case 2:return O((null==(r=n.sent().data)||null==(t=r.data)?void 0:t.data)||(null==r?void 0:r.data)),[3,5];case 3:return n.sent(),O(null),[3,5];case 4:return z(!1),[7];case 5:return[2]}})})()};if(!p)return l().createElement(a.Empty,{description:r("No repository selected")});if("connected"!==p.status)return l().createElement(a.Empty,{description:r("Repository not cloned yet")});var Y=[{title:"",key:"graph",width:40,render:function(e,t,r){return l().createElement("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",height:"100%"}},l().createElement("div",{style:{width:10,height:10,borderRadius:"50%",background:0===r?s.colorPrimary:s.colorBorder,border:"2px solid ".concat(0===r?s.colorPrimary:s.colorBorder),zIndex:1}}))}},{title:r("Message"),dataIndex:"message",key:"message",render:function(e,t){return l().createElement("div",null,l().createElement(F,{strong:!0,style:{fontSize:13}},e),l().createElement("div",{style:{marginTop:2}},l().createElement(F,{type:"secondary",style:{fontSize:12}},l().createElement(o.UserOutlined,{style:{marginRight:4}}),t.author_name,l().createElement("span",{style:{margin:"0 8px"}},"\xb7"),l().createElement(o.ClockCircleOutlined,{style:{marginRight:4}}),N(t.date))))}},{title:"Hash",dataIndex:"hash",key:"hash",width:100,render:function(e){return l().createElement(F,{code:!0,copyable:!0,style:{fontSize:12}},null==e?void 0:e.substring(0,7))}},{title:"",key:"action",width:80,render:function(e,t){return l().createElement(a.Button,{size:"small",icon:l().createElement(o.DiffOutlined,null),onClick:function(){return X(t)}},"Detail")}}];return l().createElement("div",null,l().createElement("div",{style:{marginBottom:12,display:"flex",alignItems:"center",gap:12}},l().createElement(o.BranchesOutlined,null),l().createElement(a.Select,{size:"small",style:{width:200},value:y,options:f.map(function(e){return{label:e,value:e}}),disabled:!0}),l().createElement(a.Input.Search,{allowClear:!0,size:"small",style:{width:280},placeholder:r("Search commit title or message"),value:K,onChange:function(e){return V(e.target.value)}}),l().createElement(F,{type:"secondary"},Q.length," commits")),E?l().createElement(a.Spin,null):l().createElement(a.Table,{dataSource:Q,columns:Y,rowKey:"hash",size:"small",pagination:{pageSize:30,showSizeChanger:!0},onRow:function(e){return{style:{cursor:"pointer"},onClick:function(){return X(e)}}}}),l().createElement(a.Drawer,{title:k?l().createElement("div",null,l().createElement(F,{strong:!0},k.message),l().createElement("div",null,l().createElement(F,{type:"secondary",style:{fontSize:12}},null==(e=k.hash)?void 0:e.substring(0,7)," \xb7 ",k.author_name," \xb7 ",N(k.date)))):"Commit Detail",open:!!k,onClose:function(){I(null),O(null),H(null),G(null)},width:800,extra:k&&p?l().createElement(T,{target:{type:"commit",repositoryId:p.id,commitSha:k.hash,title:k.message},size:"small"}):null},R?l().createElement(a.Spin,null):C?l().createElement("div",null,l().createElement(F,{strong:!0},"Changed Files (",(null==(t=C.files)?void 0:t.length)||0,")"),l().createElement(a.List,{size:"small",style:{marginTop:8},dataSource:C.files||[],renderItem:function(e){var t=D[e.status]||D.M,r=_===e.file;return l().createElement(a.List.Item,{style:{cursor:"pointer",background:r?s.colorPrimaryBg:void 0,padding:"6px 12px",borderRadius:4},onClick:function(){var t,r;return t=k.hash,r=e.file,B(function(){var e,n;return j(this,function(l){switch(l.label){case 0:G(r),l.label=1;case 1:return l.trys.push([1,3,,4]),[4,d.request({url:"gitManager:diff",params:{repositoryId:p.id,commitHash:t,file:r}})];case 2:return H((null==(n=l.sent().data)||null==(e=n.data)?void 0:e.data)||(null==n?void 0:n.data)||""),[3,4];case 3:return l.sent(),H("// Failed to load diff"),[3,4];case 4:return[2]}})})()}},l().createElement(a.Space,null,l().createElement(a.Tag,{color:t.color,style:{minWidth:70,textAlign:"center"}},t.icon," ",t.label),l().createElement(F,{style:{fontSize:13}},e.file)))}}),null!==U&&l().createElement("div",{style:{marginTop:16}},l().createElement(F,{strong:!0,style:{display:"block",marginBottom:8}},l().createElement(o.FileTextOutlined,null)," ",_),l().createElement(q,{content:U}))):null))},q=(0,n.memo)(function(e){var t=e.content,r=M().token,n=t.split("\n");return l().createElement("div",{style:{fontFamily:"'JetBrains Mono', 'Fira Code', Consolas, monospace",fontSize:12,lineHeight:1.5,border:"1px solid ".concat(r.colorBorderSecondary),borderRadius:6,overflow:"auto",maxHeight:500}},n.map(function(e,t){var n="transparent",a=r.colorText;return e.startsWith("+")&&!e.startsWith("+++")?(n="rgba(46, 160, 67, 0.12)",a="#2ea043"):e.startsWith("-")&&!e.startsWith("---")?(n="rgba(248, 81, 73, 0.12)",a="#f85149"):e.startsWith("@@")?(n="rgba(56, 139, 253, 0.08)",a="#388bfd"):(e.startsWith("diff")||e.startsWith("index"))&&(a=r.colorTextSecondary),l().createElement("div",{key:t,style:{padding:"0 12px",background:n,color:a,whiteSpace:"pre",minHeight:20}},l().createElement("span",{style:{display:"inline-block",width:40,color:r.colorTextQuaternary,userSelect:"none",textAlign:"right",marginRight:12}},t+1),e)}))});function N(e){if(!e)return"";var t=new Date(e),r=new Date().getTime()-t.getTime(),n=r/36e5;return n<1?"".concat(Math.round(r/6e4),"m ago"):n<24?"".concat(Math.round(n),"h ago"):n<168?"".concat(Math.round(n/24),"d ago"):t.toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"})}function U(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function H(e,t,r,n,l,a,o){try{var i=e[a](o),c=i.value}catch(e){r(e);return}i.done?t(c):Promise.resolve(c).then(n,l)}function W(e){return function(){var t=this,r=arguments;return new Promise(function(n,l){var a=e.apply(t,r);function o(e){H(a,n,l,o,i,"next",e)}function i(e){H(a,n,l,o,i,"throw",e)}o(void 0)})}}function _(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,l=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(r=l.next()).done)&&(a.push(r.value),!t||a.length!==t);o=!0);}catch(e){i=!0,n=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw n}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return U(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return U(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function G(e,t){var r,n,l,a={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(r)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(a=0)),a;)try{if(r=1,n&&(l=2&u[0]?n.return:u[0]?n.throw||((l=n.return)&&l.call(n),0):n.next)&&!(l=l.call(n,u[1])).done)return l;switch(n=0,l&&(u=[2&u[0],l.value]),u[0]){case 0:case 1:l=u;break;case 4:return a.label++,{value:u[1],done:!1};case 5:a.label++,n=u[1],u=[0];continue;case 7:u=a.ops.pop(),a.trys.pop();continue;default:if(!(l=(l=a.trys).length>0&&l[l.length-1])&&(6===u[0]||2===u[0])){a=0;continue}if(3===u[0]&&(!l||u[1]>l[0]&&u[1]<l[3])){a.label=u[1];break}if(6===u[0]&&a.label<l[1]){a.label=l[1],l=u;break}if(l&&a.label<l[2]){a.label=l[2],a.ops.push(u);break}l[2]&&a.ops.pop(),a.trys.pop();continue}u=t.call(e,a)}catch(e){u=[6,e],n=0}finally{r=l=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var $=a.Typography.Text;a.Typography.Paragraph,a.Typography.Title;var K=a.theme.useToken,V={opened:{color:"blue",icon:l().createElement(o.MergeOutlined,null),label:"Open"},merged:{color:"purple",icon:l().createElement(o.CheckCircleOutlined,null),label:"Merged"},closed:{color:"red",icon:l().createElement(o.CloseCircleOutlined,null),label:"Closed"}},J=function(){var e,t,r=(0,u.k)(),s=K().token,d=(0,c.useAPIClient)(),m=(0,i.B)().selectedRepo,p=_((0,n.useState)([]),2),f=p[0],y=p[1],g=_((0,n.useState)(!1),2),h=g[0],v=g[1],b=_((0,n.useState)("opened"),2),E=b[0],w=b[1],S=_((0,n.useState)(""),2),k=S[0],I=S[1],x=_((0,n.useState)({page:1,perPage:20,total:0,totalPages:0}),2),C=x[0],O=x[1],A=_((0,n.useState)(null),2),R=A[0],z=A[1],B=_((0,n.useState)(null),2),P=B[0],j=B[1],F=_((0,n.useState)(!1),2),M=F[0],D=F[1],L=_((0,n.useState)([]),2),q=L[0],N=L[1],U=_((0,n.useState)(!1),2);U[0],U[1];var H=(0,n.useCallback)(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;return W(function(){var t,r;return G(this,function(n){switch(n.label){case 0:if(!m)return[2];v(!0),n.label=1;case 1:return n.trys.push([1,3,4,5]),[4,d.request({url:"gitManager:mergeRequests",params:{repositoryId:m.id,state:E,search:k||void 0,page:e,perPage:20}})];case 2:return y((null==(r=(null==(t=n.sent().data)?void 0:t.data)||t)?void 0:r.data)||[]),(null==r?void 0:r.pagination)&&O(r.pagination),[3,5];case 3:return n.sent(),y([]),[3,5];case 4:return v(!1),[7];case 5:return[2]}})})()},[d,m,E,k]);(0,n.useEffect)(function(){(null==m?void 0:m.status)==="connected"?H(1):y([])},[m,E]);var J=function(e){return W(function(){var t,r,n,l,a,o,i,c,u,s;return G(this,function(p){switch(p.label){case 0:z(e),D(!0),N([]),p.label=1;case 1:return p.trys.push([1,3,4,5]),[4,Promise.all([d.request({url:"gitManager:mergeRequestDetail",params:{repositoryId:m.id,mrIid:e.iid}}),d.request({url:"gitManager:mergeRequestNotes",params:{repositoryId:m.id,mrIid:e.iid}})])];case 2:return c=(i=_.apply(void 0,[p.sent(),2]))[0],u=i[1],j((null==c||null==(r=c.data)||null==(t=r.data)?void 0:t.data)||(null==c||null==(n=c.data)?void 0:n.data)),N(Array.isArray(s=(null==u||null==(a=u.data)||null==(l=a.data)?void 0:l.data)||(null==u||null==(o=u.data)?void 0:o.data))?s:[]),[3,5];case 3:return p.sent(),j(null),[3,5];case 4:return D(!1),[7];case 5:return[2]}})})()};if(!m)return l().createElement(a.Empty,{description:r("No repository selected")});if("connected"!==m.status)return l().createElement(a.Empty,{description:r("Repository not cloned yet")});var X=[{title:"",key:"state_icon",width:40,render:function(e,t){var r=V[t.state]||V.opened;return l().createElement(a.Tooltip,{title:r.label},l().createElement("span",{style:{color:s["color".concat("blue"===r.color?"Primary":"purple"===r.color?"PurpleText":"Error")]||r.color,fontSize:16}},r.icon))}},{title:r("Title"),key:"title",render:function(e,t){var n,i;return l().createElement("div",null,l().createElement("div",{style:{display:"flex",alignItems:"center",gap:6}},t.draft&&l().createElement(a.Tag,{color:"default",style:{fontSize:11,lineHeight:"16px"}},"DRAFT"),l().createElement($,{strong:!0,style:{fontSize:13}},t.title),t.hasConflicts&&l().createElement(a.Tooltip,{title:r("Has conflicts")},l().createElement(o.ExclamationCircleOutlined,{style:{color:s.colorWarning}}))),l().createElement("div",{style:{marginTop:2}},l().createElement($,{type:"secondary",style:{fontSize:12}},"!",t.iid,l().createElement("span",{style:{margin:"0 6px"}},"\xb7"),l().createElement(o.UserOutlined,{style:{marginRight:3}}),(null==(n=t.author)?void 0:n.name)||(null==(i=t.author)?void 0:i.username)||"Unknown",l().createElement("span",{style:{margin:"0 6px"}},"\xb7"),l().createElement(o.ClockCircleOutlined,{style:{marginRight:3}}),et(t.updatedAt))))}},{title:"",key:"branches",width:250,render:function(e,t){return l().createElement("div",{style:{fontSize:12}},l().createElement(a.Tag,{color:"blue",style:{fontSize:11}},l().createElement(o.BranchesOutlined,null)," ",t.sourceBranch),l().createElement("span",{style:{margin:"0 4px",color:s.colorTextSecondary}},"→"),l().createElement(a.Tag,{color:"green",style:{fontSize:11}},l().createElement(o.BranchesOutlined,null)," ",t.targetBranch))}},{title:"",key:"labels",width:180,render:function(e,t){var r;return l().createElement(a.Space,{size:2,wrap:!0},(t.labels||[]).slice(0,3).map(function(e){return l().createElement(a.Tag,{key:e,style:{fontSize:11}},e)}),(null==(r=t.labels)?void 0:r.length)>3&&l().createElement($,{type:"secondary",style:{fontSize:11}},"+",t.labels.length-3))}},{title:"",key:"meta",width:120,render:function(e,t){var r;return l().createElement(a.Space,{size:12},t.userNotesCount>0&&l().createElement(a.Tooltip,{title:"".concat(t.userNotesCount," comments")},l().createElement(a.Badge,{count:t.userNotesCount,size:"small",color:s.colorTextSecondary},l().createElement(o.CommentOutlined,{style:{fontSize:14,color:s.colorTextSecondary}}))),(null==(r=t.assignees)?void 0:r.length)>0&&l().createElement(a.Avatar.Group,{size:"small",max:{count:2}},t.assignees.map(function(e){var t;return l().createElement(a.Tooltip,{key:e.username,title:e.name},l().createElement(a.Avatar,{size:"small",src:e.avatarUrl},null==(t=e.name)?void 0:t[0]))})))}},{title:"",key:"actions",width:160,render:function(e,t){return l().createElement(a.Space,{onClick:function(e){return e.stopPropagation()}},l().createElement(T,{target:{type:"mr",repositoryId:m.id,mrIid:t.iid,title:t.title},size:"small"}),l().createElement(a.Tooltip,{title:r("View Details")},l().createElement(a.Button,{size:"small",icon:l().createElement(o.FileTextOutlined,null),onClick:function(e){e.stopPropagation(),J(t)}})),l().createElement(a.Tooltip,{title:r("Open in GitLab")},l().createElement(a.Button,{size:"small",icon:l().createElement(o.ExportOutlined,null),onClick:function(e){e.stopPropagation(),window.open(t.webUrl,"_blank")}})))}}];return l().createElement("div",null,l().createElement("div",{style:{marginBottom:12,display:"flex",alignItems:"center",gap:12,flexWrap:"wrap"}},l().createElement(a.Select,{size:"small",style:{width:140},value:E,onChange:function(e){return w(e)},options:[{label:"\uD83D\uDFE2 ".concat(r("Open")),value:"opened"},{label:"\uD83D\uDFE3 ".concat(r("Merged")),value:"merged"},{label:"\uD83D\uDD34 ".concat(r("Closed")),value:"closed"},{label:"\uD83D\uDCCB ".concat(r("All")),value:"all"}]}),l().createElement(a.Input.Search,{size:"small",style:{width:260},placeholder:r("Search merge requests..."),value:k,onChange:function(e){return I(e.target.value)},onSearch:function(){H(1)},allowClear:!0}),l().createElement(a.Button,{size:"small",icon:l().createElement(o.ReloadOutlined,null),onClick:function(){return H(1)}},r("Refresh")),l().createElement($,{type:"secondary",style:{fontSize:12}},null!=C.total?"".concat(C.total," ").concat(r("total")):"")),h?l().createElement(a.Spin,null):l().createElement(a.Table,{dataSource:f,columns:X,rowKey:"iid",size:"small",pagination:{current:C.page,pageSize:C.perPage,total:C.total||void 0,onChange:function(e){return H(e)},showSizeChanger:!1},onRow:function(e){return{style:{cursor:"pointer"},onClick:function(){return J(e)}}}}),l().createElement(a.Drawer,{title:R?l().createElement("div",null,l().createElement("div",{style:{display:"flex",alignItems:"center",gap:8}},(e=V[R.state]||V.opened,l().createElement(a.Tag,{color:e.color},e.icon," ",e.label)),R.draft&&l().createElement(a.Tag,null,"DRAFT"),l().createElement($,{strong:!0,style:{fontSize:15}},"!",R.iid)),l().createElement($,{strong:!0,style:{fontSize:16,display:"block",marginTop:4}},R.title)):r("Merge Request"),open:!!R,onClose:function(){z(null),j(null),N([])},width:900,extra:R&&l().createElement(a.Space,null,l().createElement(T,{target:{type:"mr",repositoryId:m.id,mrIid:R.iid,title:R.title},size:"small"}),l().createElement(a.Button,{type:"link",icon:l().createElement(o.ExportOutlined,null),onClick:function(){return window.open(R.webUrl,"_blank")}},r("Open in GitLab")))},M?l().createElement(a.Spin,null):P?l().createElement(a.Tabs,{defaultActiveKey:"overview",items:[{key:"overview",label:r("Overview"),children:l().createElement(Q,{mr:P})},{key:"changes",label:"".concat(r("Changes")," (").concat((null==(t=P.changes)?void 0:t.length)||0,")"),children:l().createElement(Y,{changes:P.changes||[]})},{key:"comments",label:l().createElement(a.Badge,{count:q.length,size:"small",offset:[6,0]},r("Comments")),children:l().createElement(Z,{notes:q})}]}):null))},Q=function(e){var t,r,n,i,c=e.mr,s=(0,u.k)(),d=K().token;return l().createElement("div",null,l().createElement("div",{style:{padding:"12px 16px",background:d.colorBgLayout,borderRadius:8,marginBottom:16,display:"flex",alignItems:"center",gap:8}},l().createElement(a.Tag,{color:"blue"},l().createElement(o.BranchesOutlined,null)," ",c.sourceBranch),l().createElement("span",{style:{color:d.colorTextSecondary,fontSize:16}},"→"),l().createElement(a.Tag,{color:"green"},l().createElement(o.BranchesOutlined,null)," ",c.targetBranch),c.hasConflicts&&l().createElement(a.Tag,{color:"warning",icon:l().createElement(o.ExclamationCircleOutlined,null)},s("Has conflicts"))),c.description&&l().createElement("div",{style:{marginBottom:16}},l().createElement($,{strong:!0},s("Description")),l().createElement("div",{style:{marginTop:8,padding:"12px 16px",background:d.colorBgLayout,borderRadius:8,whiteSpace:"pre-wrap",wordBreak:"break-word",fontSize:13,lineHeight:1.6}},c.description)),l().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"12px 24px",fontSize:13}},l().createElement(X,{label:s("Author"),value:c.author&&l().createElement(a.Space,{size:6},l().createElement(a.Avatar,{size:"small",src:c.author.avatarUrl},null==(t=c.author.name)?void 0:t[0]),l().createElement($,null,c.author.name),l().createElement($,{type:"secondary"},"@",c.author.username))}),l().createElement(X,{label:s("Assignees"),value:(null==(r=c.assignees)?void 0:r.length)>0?l().createElement(a.Space,{size:4,wrap:!0},c.assignees.map(function(e){var t;return l().createElement(a.Tooltip,{key:e.username,title:e.name},l().createElement(a.Tag,{icon:l().createElement(a.Avatar,{size:14,src:e.avatarUrl},null==(t=e.name)?void 0:t[0])},e.name))})):l().createElement($,{type:"secondary"},"—")}),l().createElement(X,{label:s("Reviewers"),value:(null==(n=c.reviewers)?void 0:n.length)>0?l().createElement(a.Space,{size:4,wrap:!0},c.reviewers.map(function(e){return l().createElement(a.Tag,{key:e.username},e.name)})):l().createElement($,{type:"secondary"},"—")}),l().createElement(X,{label:s("Labels"),value:(null==(i=c.labels)?void 0:i.length)>0?l().createElement(a.Space,{size:4,wrap:!0},c.labels.map(function(e){return l().createElement(a.Tag,{key:e},e)})):l().createElement($,{type:"secondary"},"—")}),l().createElement(X,{label:s("Created"),value:l().createElement($,null,er(c.createdAt))}),l().createElement(X,{label:s("Updated"),value:l().createElement($,null,er(c.updatedAt))}),c.mergedBy&&l().createElement(X,{label:s("Merged by"),value:l().createElement($,null,c.mergedBy.name," — ",er(c.mergedAt))}),c.closedBy&&l().createElement(X,{label:s("Closed by"),value:l().createElement($,null,c.closedBy.name," — ",er(c.closedAt))})))},X=function(e){var t=e.label,r=e.value;return l().createElement("div",null,l().createElement($,{type:"secondary",style:{fontSize:12,display:"block",marginBottom:2}},t),l().createElement("div",null,r))},Y=function(e){var t=e.changes,r=K().token,o=(0,u.k)(),i=_((0,n.useState)(null),2),c=i[0],s=i[1];return t.length?l().createElement("div",null,t.map(function(e,t){var n=e.newPath||e.oldPath,o=c===n,i=null;return i=e.newFile?l().createElement(a.Tag,{color:"green"},"NEW"):e.deletedFile?l().createElement(a.Tag,{color:"red"},"DEL"):e.renamedFile?l().createElement(a.Tag,{color:"orange"},"RENAMED"):l().createElement(a.Tag,{color:"blue"},"MOD"),l().createElement("div",{key:t,style:{marginBottom:8}},l().createElement("div",{style:{padding:"6px 12px",background:o?r.colorPrimaryBg:r.colorBgLayout,borderRadius:6,cursor:"pointer",display:"flex",alignItems:"center",gap:8},onClick:function(){return s(o?null:n)}},i,l().createElement($,{style:{fontSize:13,fontFamily:"monospace"}},n),e.renamedFile&&e.oldPath!==e.newPath&&l().createElement($,{type:"secondary",style:{fontSize:11}},"(← ",e.oldPath,")")),o&&e.diff&&l().createElement(ee,{content:e.diff}))})):l().createElement(a.Empty,{description:o("No changes")})},Z=function(e){var t=e.notes,r=K().token,n=(0,u.k)();return t.length?l().createElement("div",null,t.map(function(e){var t,o,i,c,u;return l().createElement("div",{key:e.id,style:{padding:"12px 16px",marginBottom:12,background:r.colorBgLayout,borderRadius:8,borderLeft:"3px solid ".concat(e.resolved?r.colorSuccess:r.colorBorderSecondary)}},l().createElement("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:8}},l().createElement(a.Avatar,{size:"small",src:null==(t=e.author)?void 0:t.avatarUrl},null==(i=e.author)||null==(o=i.name)?void 0:o[0]),l().createElement($,{strong:!0,style:{fontSize:13}},null==(c=e.author)?void 0:c.name),l().createElement($,{type:"secondary",style:{fontSize:12}},"@",null==(u=e.author)?void 0:u.username),l().createElement($,{type:"secondary",style:{fontSize:11,marginLeft:"auto"}},et(e.createdAt)),e.resolvable&&l().createElement(a.Tag,{color:e.resolved?"success":"default",style:{fontSize:11}},e.resolved?n("Resolved"):n("Unresolved"))),l().createElement("div",{style:{whiteSpace:"pre-wrap",wordBreak:"break-word",fontSize:13,lineHeight:1.6}},e.body))})):l().createElement(a.Empty,{description:n("No comments")})},ee=(0,n.memo)(function(e){var t=e.content,r=K().token,n=t.split("\n");return l().createElement("div",{style:{fontFamily:"'JetBrains Mono', 'Fira Code', Consolas, monospace",fontSize:12,lineHeight:1.5,border:"1px solid ".concat(r.colorBorderSecondary),borderRadius:6,overflow:"auto",maxHeight:400,margin:"4px 0"}},n.map(function(e,t){var n="transparent",a=r.colorText;return e.startsWith("+")&&!e.startsWith("+++")?(n="rgba(46, 160, 67, 0.12)",a="#2ea043"):e.startsWith("-")&&!e.startsWith("---")?(n="rgba(248, 81, 73, 0.12)",a="#f85149"):e.startsWith("@@")?(n="rgba(56, 139, 253, 0.08)",a="#388bfd"):(e.startsWith("diff")||e.startsWith("index"))&&(a=r.colorTextSecondary),l().createElement("div",{key:t,style:{padding:"0 12px",background:n,color:a,whiteSpace:"pre",minHeight:20}},l().createElement("span",{style:{display:"inline-block",width:40,color:r.colorTextQuaternary,userSelect:"none",textAlign:"right",marginRight:12}},t+1),e)}))});function et(e){if(!e)return"";var t=new Date(e),r=new Date().getTime()-t.getTime(),n=r/36e5;return n<1?"".concat(Math.round(r/6e4),"m ago"):n<24?"".concat(Math.round(n),"h ago"):n<168?"".concat(Math.round(n/24),"d ago"):t.toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"})}function er(e){return e?new Date(e).toLocaleString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):""}function en(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function el(e,t,r,n,l,a,o){try{var i=e[a](o),c=i.value}catch(e){r(e);return}i.done?t(c):Promise.resolve(c).then(n,l)}function ea(e){return function(){var t=this,r=arguments;return new Promise(function(n,l){var a=e.apply(t,r);function o(e){el(a,n,l,o,i,"next",e)}function i(e){el(a,n,l,o,i,"throw",e)}o(void 0)})}}function eo(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,l=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(r=l.next()).done)&&(a.push(r.value),!t||a.length!==t);o=!0);}catch(e){i=!0,n=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw n}}return a}}(e,t)||ec(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ei(e){return function(e){if(Array.isArray(e))return en(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||ec(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ec(e,t){if(e){if("string"==typeof e)return en(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return en(e,t)}}function eu(e,t){var r,n,l,a={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(r)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(a=0)),a;)try{if(r=1,n&&(l=2&u[0]?n.return:u[0]?n.throw||((l=n.return)&&l.call(n),0):n.next)&&!(l=l.call(n,u[1])).done)return l;switch(n=0,l&&(u=[2&u[0],l.value]),u[0]){case 0:case 1:l=u;break;case 4:return a.label++,{value:u[1],done:!1};case 5:a.label++,n=u[1],u=[0];continue;case 7:u=a.ops.pop(),a.trys.pop();continue;default:if(!(l=(l=a.trys).length>0&&l[l.length-1])&&(6===u[0]||2===u[0])){a=0;continue}if(3===u[0]&&(!l||u[1]>l[0]&&u[1]<l[3])){a.label=u[1];break}if(6===u[0]&&a.label<l[1]){a.label=l[1],l=u;break}if(l&&a.label<l[2]){a.label=l[2],a.ops.push(u);break}l[2]&&a.ops.pop(),a.trys.pop();continue}u=t.call(e,a)}catch(e){u=[6,e],n=0}finally{r=l=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var es=a.Typography.Text,ed=a.theme.useToken,em={not_added:{color:"green",icon:l().createElement(o.FileAddOutlined,null),label:"New"},modified:{color:"blue",icon:l().createElement(o.EditOutlined,null),label:"Modified"},deleted:{color:"red",icon:l().createElement(o.DeleteOutlined,null),label:"Deleted"},renamed:{color:"orange",icon:l().createElement(o.EditOutlined,null),label:"Renamed"},conflicted:{color:"red",icon:l().createElement(o.WarningOutlined,null),label:"Conflict"},created:{color:"green",icon:l().createElement(o.FileAddOutlined,null),label:"Created"}},ep=function(){var e,t,r,s,d,m,p=(0,u.k)(),f=ed().token,y=(0,c.useAPIClient)(),g=(0,i.B)(),h=g.selectedRepo,v=g.refreshRepos,b=eo((0,n.useState)(null),2),E=b[0],w=b[1],S=eo((0,n.useState)(null),2),k=S[0],I=S[1],x=eo((0,n.useState)(null),2),C=x[0],O=x[1],A=(0,n.useCallback)(function(){return ea(function(){var e,t;return eu(this,function(r){switch(r.label){case 0:if(!h||"connected"!==h.status)return I(null),[2];w("status"),r.label=1;case 1:return r.trys.push([1,3,4,5]),[4,y.request({url:"gitManager:status",method:"post",params:{repositoryId:h.id}})];case 2:return I((null==(t=r.sent().data)||null==(e=t.data)?void 0:e.data)||(null==t?void 0:t.data)),[3,5];case 3:return console.warn("Failed to load git status:",r.sent()),I(null),[3,5];case 4:return w(null),[7];case 5:return[2]}})})()},[y,h]);(0,n.useEffect)(function(){A()},[A]);var T=(0,n.useCallback)(function(e){return ea(function(){var t,r,n,l,o,i,c,u,s;return eu(this,function(d){switch(d.label){case 0:if(!h)return[2];w(e),O(null),d.label=1;case 1:return d.trys.push([1,6,7,8]),[4,y.request({url:"gitManager:".concat(e),method:"post",params:{repositoryId:h.id}})];case 2:if(r=d.sent().data,O({action:e,success:!0,message:p("{{action}} completed successfully",{action:e})}),a.message.success(p("{{action}} completed",{action:e})),n=(null==r||null==(t=r.data)?void 0:t.data)||(null==r?void 0:r.data),"status"===e&&I(n),"fetch"!==e&&"pull"!==e)return[3,4];return[4,A()];case 3:d.sent(),d.label=4;case 4:return[4,v()];case 5:return d.sent(),[3,8];case 6:return s=(null==(l=d.sent())||null==(u=l.response)||null==(c=u.data)||null==(i=c.errors)||null==(o=i[0])?void 0:o.message)||p("{{action}} failed",{action:e}),O({action:e,success:!1,message:s}),a.message.error(s),[3,8];case 7:return w(null),[7];case 8:return[2]}})})()},[y,h,v,A]);if(!h)return l().createElement(a.Empty,{description:p("No repository selected")});if("connected"!==h.status)return l().createElement(a.Empty,{description:p("Repository not cloned yet")});var R=k?ei((null==(e=k.not_added)?void 0:e.map(function(e){return{file:e,status:"not_added"}}))||[]).concat(ei((null==(t=k.modified)?void 0:t.map(function(e){return{file:e,status:"modified"}}))||[]),ei((null==(r=k.deleted)?void 0:r.map(function(e){return{file:e,status:"deleted"}}))||[]),ei((null==(s=k.renamed)?void 0:s.map(function(e){return{file:"string"==typeof e?e:e.to,status:"renamed"}}))||[]),ei((null==(d=k.conflicted)?void 0:d.map(function(e){return{file:e,status:"conflicted"}}))||[]),ei((null==(m=k.created)?void 0:m.map(function(e){return{file:e,status:"created"}}))||[])):[];return l().createElement("div",null,l().createElement(a.Space,{size:"middle",wrap:!0,style:{marginBottom:24}},l().createElement(a.Button,{size:"large",icon:l().createElement(o.SyncOutlined,null),loading:"fetch"===E,onClick:function(){return T("fetch")}},p("Fetch")),l().createElement(a.Button,{size:"large",type:"primary",icon:l().createElement(o.CloudDownloadOutlined,null),loading:"pull"===E,onClick:function(){return T("pull")}},p("Pull")),l().createElement(a.Button,{size:"large",icon:l().createElement(o.BranchesOutlined,null),loading:"status"===E,onClick:A},p("Status"))),C&&l().createElement(a.Card,{size:"small",style:{marginBottom:16,borderColor:C.success?f.colorSuccessBorder:f.colorErrorBorder}},l().createElement(a.Space,null,C.success?l().createElement(o.CheckCircleOutlined,{style:{color:f.colorSuccess}}):l().createElement(o.WarningOutlined,{style:{color:f.colorError}}),l().createElement(es,{strong:!0},C.action),l().createElement(es,null,C.message))),k&&l().createElement(a.Card,{title:p("Working Directory Status"),size:"small"},l().createElement(a.Descriptions,{column:3,size:"small",style:{marginBottom:16}},l().createElement(a.Descriptions.Item,{label:"Branch"},l().createElement(a.Tag,{icon:l().createElement(o.BranchesOutlined,null),color:"blue"},k.current)),l().createElement(a.Descriptions.Item,{label:"Tracking"},l().createElement(es,null,k.tracking||"N/A")),l().createElement(a.Descriptions.Item,{label:"Changes"},l().createElement(a.Space,null,k.ahead>0&&l().createElement(a.Badge,{count:"".concat(k.ahead," ahead"),style:{backgroundColor:f.colorPrimary}}),k.behind>0&&l().createElement(a.Badge,{count:"".concat(k.behind," behind"),style:{backgroundColor:f.colorWarning}}),0===k.ahead&&0===k.behind&&l().createElement(a.Tag,{color:"green",icon:l().createElement(o.CheckCircleOutlined,null)},"Up to date")))),R.length>0?l().createElement(l().Fragment,null,l().createElement(es,{strong:!0,style:{display:"block",marginBottom:8}},R.length," changed file(s)"),l().createElement(a.List,{size:"small",dataSource:R,renderItem:function(e){var t=em[e.status]||{color:"default",icon:l().createElement(o.QuestionCircleOutlined,null),label:e.status};return l().createElement(a.List.Item,{style:{padding:"4px 0"}},l().createElement(a.Space,null,l().createElement(a.Tag,{color:t.color,style:{minWidth:80,textAlign:"center"}},t.icon," ",t.label),l().createElement(es,{code:!0,style:{fontSize:13}},e.file)))}})):l().createElement(es,{type:"secondary"},"Working directory clean")))};function ef(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function ey(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,l=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(r=l.next()).done)&&(a.push(r.value),!t||a.length!==t);o=!0);}catch(e){i=!0,n=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw n}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ef(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return ef(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var eg=function(e){var t=e.value,r=e.onChange,o=e.allowClear,i=e.size,u=e.style,s=e.placeholder,d=(0,c.useAPIClient)(),m=ey((0,n.useState)([]),2),p=m[0],f=m[1],y=ey((0,n.useState)(!1),2),g=y[0],h=y[1];return(0,n.useEffect)(function(){var e=!1;return h(!0),d.request({url:"aiEmployees:listByUser"}).then(function(t){if(!e){var r,n=(null==t||null==(r=t.data)?void 0:r.data)||[];f(Array.isArray(n)?n:[])}}).catch(function(){}).finally(function(){e||h(!1)}),function(){e=!0}},[d]),l().createElement(a.Select,{value:t,onChange:r,allowClear:void 0===o||o,loading:g,size:i,style:u,placeholder:s||"Select AI employee",options:p.map(function(e){return{value:e.username,label:"".concat(e.nickname||e.username," (@").concat(e.username,")")}}),showSearch:!0,optionFilterProp:"label"})};function eh(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function ev(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,l=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(r=l.next()).done)&&(a.push(r.value),!t||a.length!==t);o=!0);}catch(e){i=!0,n=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw n}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return eh(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return eh(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var eb=function(e){var t=e.value,r=e.onChange,o=e.allowClear,i=e.size,u=e.style,s=e.placeholder,d=(0,c.useAPIClient)(),m=ev((0,n.useState)([]),2),p=m[0],f=m[1],y=ev((0,n.useState)(!1),2),g=y[0],h=y[1];return(0,n.useEffect)(function(){var e=!1;return h(!0),d.request({url:"ai:listAllEnabledModels"}).then(function(t){if(!e){var r,n=(null==t||null==(r=t.data)?void 0:r.data)||[];f(Array.isArray(n)?n:[])}}).catch(function(){}).finally(function(){e||h(!1)}),function(){e=!0}},[d]),l().createElement(a.Select,{value:t,onChange:r,allowClear:void 0===o||o,loading:g,size:i,style:u,placeholder:s||"Select LLM Service",options:p.map(function(e){return{value:e.llmService,label:e.llmServiceTitle||e.llmService}}),showSearch:!0,optionFilterProp:"label"})};function eE(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function ew(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,l=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(r=l.next()).done)&&(a.push(r.value),!t||a.length!==t);o=!0);}catch(e){i=!0,n=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw n}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return eE(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return eE(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var eS=function(e){var t=e.llmService,r=e.value,o=e.onChange,i=e.allowClear,u=e.size,s=e.style,d=e.placeholder,m=(0,c.useAPIClient)(),p=ew((0,n.useState)([]),2),f=p[0],y=p[1],g=ew((0,n.useState)(!1),2),h=g[0],v=g[1];return(0,n.useEffect)(function(){var e=!1;return t?(v(!0),m.request({url:"ai:listModels",params:{llmService:t}}).then(function(t){if(!e){var r,n=(null==t||null==(r=t.data)?void 0:r.data)||[];y(Array.isArray(n)?n:[])}}).catch(function(){e||y([])}).finally(function(){e||v(!1)}),function(){e=!0}):void y([])},[m,t]),l().createElement(a.Select,{value:r,onChange:o,allowClear:void 0===i||i,loading:h,size:u,style:s,placeholder:d||"Select LLM Model",options:f.map(function(e){return{value:e.id,label:e.id}}),showSearch:!0,optionFilterProp:"label",disabled:!t})};function ek(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function eI(e,t,r,n,l,a,o){try{var i=e[a](o),c=i.value}catch(e){r(e);return}i.done?t(c):Promise.resolve(c).then(n,l)}function ex(e){return function(){var t=this,r=arguments;return new Promise(function(n,l){var a=e.apply(t,r);function o(e){eI(a,n,l,o,i,"next",e)}function i(e){eI(a,n,l,o,i,"throw",e)}o(void 0)})}}function eC(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,l=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(r=l.next()).done)&&(a.push(r.value),!t||a.length!==t);o=!0);}catch(e){i=!0,n=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw n}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ek(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return ek(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function eO(e,t){var r,n,l,a={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(r)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(a=0)),a;)try{if(r=1,n&&(l=2&u[0]?n.return:u[0]?n.throw||((l=n.return)&&l.call(n),0):n.next)&&!(l=l.call(n,u[1])).done)return l;switch(n=0,l&&(u=[2&u[0],l.value]),u[0]){case 0:case 1:l=u;break;case 4:return a.label++,{value:u[1],done:!1};case 5:a.label++,n=u[1],u=[0];continue;case 7:u=a.ops.pop(),a.trys.pop();continue;default:if(!(l=(l=a.trys).length>0&&l[l.length-1])&&(6===u[0]||2===u[0])){a=0;continue}if(3===u[0]&&(!l||u[1]>l[0]&&u[1]<l[3])){a.label=u[1];break}if(6===u[0]&&a.label<l[1]){a.label=l[1],l=u;break}if(l&&a.label<l[2]){a.label=l[2],a.ops.push(u);break}l[2]&&a.ops.pop(),a.trys.pop();continue}u=t.call(e,a)}catch(e){u=[6,e],n=0}finally{r=l=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var eA={manual:"Manual",onMergeRequestCreated:"On MR Created",both:"Both"},eT={auto:"Auto",manual:"Manual",disabled:"Disabled"},eR=function(){var e=(0,u.k)(),t=(0,c.useAPIClient)(),r=(0,i.B)().repos,s=eC((0,n.useState)([]),2),d=s[0],m=s[1],p=eC((0,n.useState)(!1),2),f=p[0],y=p[1],g=eC((0,n.useState)(null),2),h=g[0],v=g[1],b=eC((0,n.useState)(!1),2),E=b[0],w=b[1],S=eC(a.Form.useForm(),1)[0],k=(0,n.useCallback)(function(){return ex(function(){var e;return eO(this,function(r){switch(r.label){case 0:y(!0),r.label=1;case 1:return r.trys.push([1,,3,4]),[4,t.request({url:"gitReviewFlows:list",params:{pageSize:100}})];case 2:return m((null==(e=r.sent().data)?void 0:e.data)||[]),[3,4];case 3:return y(!1),[7];case 4:return[2]}})})()},[t]);(0,n.useEffect)(function(){k()},[k]);var I=function(e){v(e),S.setFieldsValue(e),w(!0)},x=[{title:e("Name"),dataIndex:"name",render:function(t,r){return l().createElement(a.Space,null,l().createElement("span",{style:{fontWeight:500}},t),!r.enabled&&l().createElement(a.Tag,{color:"default"},e("Disabled")))}},{title:e("Repository"),dataIndex:"repositoryId",render:function(t){if(null==t)return l().createElement(a.Tag,{color:"purple"},e("Global"));var n=r.find(function(e){return e.id===t});return n?l().createElement(a.Space,{size:4},l().createElement(o.BranchesOutlined,null),n.name):"#".concat(t)}},{title:e("AI Employee"),dataIndex:"aiEmployeeUsername",render:function(e){return e?l().createElement(a.Tag,{color:"blue"},"@",e):l().createElement("span",{style:{color:"#999"}},"—")}},{title:e("Trigger"),dataIndex:"triggerMode",render:function(t){return l().createElement(a.Tag,null,e(eA[t]||t))}},{title:e("Post"),dataIndex:"postMode",render:function(t){return l().createElement(a.Tag,{color:"auto"===t?"green":"manual"===t?"orange":"default"},e(eT[t]||t))}},{title:"",key:"actions",width:100,render:function(r,n){return l().createElement(a.Space,null,l().createElement(a.Tooltip,{title:e("Edit")},l().createElement(a.Button,{size:"small",icon:l().createElement(o.EditOutlined,null),onClick:function(){return I(n)}})),l().createElement(a.Popconfirm,{title:e("Delete this flow?"),onConfirm:function(){var r;return r=n.id,ex(function(){var n;return eO(this,function(l){switch(l.label){case 0:return l.trys.push([0,2,,3]),[4,t.request({url:"gitReviewFlows:destroy",method:"post",params:{filterByTk:r}})];case 1:return l.sent(),a.message.success(e("Flow deleted")),k(),[3,3];case 2:return n=l.sent(),a.message.error((null==n?void 0:n.message)||e("Failed to delete")),[3,3];case 3:return[2]}})})()}},l().createElement(a.Button,{size:"small",danger:!0,icon:l().createElement(o.DeleteOutlined,null)})))}}];return l().createElement("div",null,l().createElement("div",{style:{marginBottom:12,display:"flex",justifyContent:"space-between"}},l().createElement(a.Button,{type:"primary",icon:l().createElement(o.PlusOutlined,null),onClick:function(){v(null),S.resetFields(),S.setFieldsValue({enabled:!0,triggerMode:"manual",postMode:"manual",instructions:"Please review the code changes with a focus on:\n1. Best Practices & Style:\n - C#/VB.NET: Follow standard naming conventions (PascalCase for methods/properties, camelCase for fields). Ensure proper use of async/await (avoid .Result/.Wait()). Use LINQ efficiently.\n - JS/TS: Use strict equality (===), prefer const/let. Ensure TypeScript types are explicit and avoid 'any'.\n2. Performance: Watch out for N+1 queries, unnecessary loops, and memory leaks.\n3. Security: Identify potential SQL injections, XSS vulnerabilities, and improper data validation.\n4. Maintainability: Check for readability, SOLID principles, and DRY. Ensure meaningful naming.\n5. Error Handling: Verify that exceptions are properly caught, handled, and logged."}),w(!0)}},e("Add Review Flow")),l().createElement(a.Button,{onClick:k,loading:f},e("Refresh"))),l().createElement(a.Table,{size:"small",rowKey:"id",loading:f,dataSource:d,columns:x,locale:{emptyText:l().createElement(a.Empty,{description:e("No review flows yet")})},pagination:{pageSize:20}}),l().createElement(a.Modal,{title:(null==h?void 0:h.id)?e("Edit Review Flow"):e("Add Review Flow"),open:E,onCancel:function(){w(!1),v(null),S.resetFields()},onOk:function(){return ex(function(){var r,n,l,o,i,c;return eO(this,function(u){switch(u.label){case 0:return u.trys.push([0,6,,7]),[4,S.validateFields()];case 1:if((void 0===(r=u.sent()).repositoryId||""===r.repositoryId)&&(r.repositoryId=null),!(null==h?void 0:h.id))return[3,3];return[4,t.request({url:"gitReviewFlows:update",method:"post",params:{filterByTk:h.id},data:r})];case 2:return u.sent(),a.message.success(e("Flow updated")),[3,5];case 3:return[4,t.request({url:"gitReviewFlows:create",method:"post",data:r})];case 4:u.sent(),a.message.success(e("Flow created")),u.label=5;case 5:return w(!1),v(null),S.resetFields(),k(),[3,7];case 6:if(null==(n=u.sent())?void 0:n.errorFields)return[2];return a.message.error((null==n||null==(c=n.response)||null==(i=c.data)||null==(o=i.errors)||null==(l=o[0])?void 0:l.message)||(null==n?void 0:n.message)||e("Failed to save")),[3,7];case 7:return[2]}})})()},width:640,destroyOnClose:!0},l().createElement(a.Form,{form:S,layout:"vertical"},l().createElement(a.Form.Item,{name:"name",label:e("Name"),rules:[{required:!0}]},l().createElement(a.Input,{placeholder:e("e.g. Default review flow")})),l().createElement(a.Form.Item,{name:"repositoryId",label:e("Repository"),extra:e("Leave empty to apply to all repositories")},l().createElement(a.Select,{allowClear:!0,placeholder:e("All repositories (global)"),options:r.map(function(e){return{value:e.id,label:e.name}})})),l().createElement(a.Form.Item,{name:"aiEmployeeUsername",label:e("AI Employee"),rules:[{required:!0}]},l().createElement(eg,{placeholder:e("Select an AI employee")})),l().createElement(a.Space.Compact,{style:{width:"100%"}},l().createElement(a.Form.Item,{name:"llmService",label:e("LLM Service (optional)"),style:{flex:1,marginRight:8}},l().createElement(eb,{placeholder:e("Override flow LLM service")})),l().createElement(a.Form.Item,{noStyle:!0,shouldUpdate:function(e,t){return e.llmService!==t.llmService}},function(t){var r=(0,t.getFieldValue)("llmService");return l().createElement(a.Form.Item,{name:"model",label:e("Model (optional)"),style:{flex:1}},r?l().createElement(eS,{llmService:r,placeholder:e("Override LLM model")}):l().createElement(a.Input,{placeholder:e("Select an LLM service first"),disabled:!0}))})),l().createElement(a.Form.Item,{name:"triggerMode",label:e("Trigger Mode"),rules:[{required:!0}],extra:e("Auto modes require enabling Auto Review on the repository")},l().createElement(a.Select,{options:[{value:"manual",label:e("Manual")},{value:"onMergeRequestCreated",label:e("On Merge Request Created")},{value:"both",label:e("Both")}]})),l().createElement(a.Form.Item,{name:"postMode",label:e("Post Mode"),rules:[{required:!0}]},l().createElement(a.Select,{options:[{value:"auto",label:e("Auto post to MR")},{value:"manual",label:e("Manual approval before posting")},{value:"disabled",label:e("Do not post")}]})),l().createElement(a.Form.Item,{name:"branchFilter",label:e("Branch Filter (regex, optional)")},l().createElement(a.Input,{placeholder:"^(feature|hotfix)/.*$"})),l().createElement(a.Form.Item,{name:"instructions",label:e("Additional Instructions (optional)")},l().createElement(a.Input.TextArea,{rows:8,placeholder:e("Extra guidance appended to every review prompt")})),l().createElement(a.Form.Item,{name:"enabled",label:e("Enabled"),valuePropName:"checked"},l().createElement(a.Switch,null)))))},ez=r(405),eB=a.theme.useToken,eP=function(e){var t=e.content,r=e.maxHeight,n=eB().token;return t?l().createElement("div",{style:{fontSize:13,lineHeight:1.65,color:n.colorText,maxHeight:r,overflow:r?"auto":void 0}},l().createElement(ez.oz,{components:{code:function(e){var t,r,a=e.inline,o=e.children,i=function(e,t){if(null==e)return{};var r,n,l,a={};if("u">typeof Reflect&&Reflect.ownKeys){for(l=0,r=Reflect.ownKeys(Object(e));l<r.length;l++)n=r[l],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n]);return a}if(a=function(e,t){if(null==e)return{};var r,n,l={},a=Object.getOwnPropertyNames(e);for(n=0;n<a.length;n++)r=a[n],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(l[r]=e[r]);return l}(e,t),Object.getOwnPropertySymbols)for(l=0,r=Object.getOwnPropertySymbols(e);l<r.length;l++)n=r[l],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n]);return a}(e,["inline","children"]),c=String(o).replace(/\n$/,"");return a?l().createElement("code",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({},i),r=r={style:{background:n.colorBgLayout,padding:"1px 6px",borderRadius:4,fontSize:12,fontFamily:"'JetBrains Mono', 'Fira Code', Consolas, monospace"}},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t),c):l().createElement("pre",{style:{background:n.colorBgLayout,padding:"10px 14px",borderRadius:6,overflowX:"auto",fontSize:12,fontFamily:"'JetBrains Mono', 'Fira Code', Consolas, monospace"}},l().createElement("code",null,c))},blockquote:function(e){var t=e.children;return l().createElement("blockquote",{style:{borderLeft:"3px solid ".concat(n.colorBorder),paddingLeft:12,color:n.colorTextSecondary,margin:"8px 0"}},t)}}},t)):null};function ej(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function eF(e,t,r,n,l,a,o){try{var i=e[a](o),c=i.value}catch(e){r(e);return}i.done?t(c):Promise.resolve(c).then(n,l)}function eM(e){return function(){var t=this,r=arguments;return new Promise(function(n,l){var a=e.apply(t,r);function o(e){eF(a,n,l,o,i,"next",e)}function i(e){eF(a,n,l,o,i,"throw",e)}o(void 0)})}}function eD(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,l=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(r=l.next()).done)&&(a.push(r.value),!t||a.length!==t);o=!0);}catch(e){i=!0,n=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw n}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ej(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return ej(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function eL(e,t){var r,n,l,a={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(r)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(a=0)),a;)try{if(r=1,n&&(l=2&u[0]?n.return:u[0]?n.throw||((l=n.return)&&l.call(n),0):n.next)&&!(l=l.call(n,u[1])).done)return l;switch(n=0,l&&(u=[2&u[0],l.value]),u[0]){case 0:case 1:l=u;break;case 4:return a.label++,{value:u[1],done:!1};case 5:a.label++,n=u[1],u=[0];continue;case 7:u=a.ops.pop(),a.trys.pop();continue;default:if(!(l=(l=a.trys).length>0&&l[l.length-1])&&(6===u[0]||2===u[0])){a=0;continue}if(3===u[0]&&(!l||u[1]>l[0]&&u[1]<l[3])){a.label=u[1];break}if(6===u[0]&&a.label<l[1]){a.label=l[1],l=u;break}if(l&&a.label<l[2]){a.label=l[2],a.ops.push(u);break}l[2]&&a.ops.pop(),a.trys.pop();continue}u=t.call(e,a)}catch(e){u=[6,e],n=0}finally{r=l=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var eq=a.Typography.Text;a.Typography.Title,a.Typography.Paragraph;var eN=a.theme.useToken,eU={pending:"default",running:"blue",completed:"green",failed:"red"},eH={pending_approval:"orange",approved:"cyan",posted:"green",post_failed:"red",skipped:"default",rejected:"red"},eW=function(e){var t=e.initialFilter,r=(0,u.k)();eN().token;var s=(0,c.useAPIClient)(),d=(0,i.B)().repos,m=eD((0,n.useState)([]),2),p=m[0],f=m[1],y=eD((0,n.useState)(!1),2),g=y[0],h=y[1],v=eD((0,n.useState)("all"),2),b=v[0],E=v[1],w=eD((0,n.useState)("pending_approval"===(void 0===t?"all":t)?"pending_approval":"all"),2),S=w[0],k=w[1],I=eD((0,n.useState)("all"),2),x=I[0],C=I[1],O=eD((0,n.useState)(null),2),A=O[0],T=O[1],R=eD((0,n.useState)(!1),2),z=R[0],B=R[1],P=eD((0,n.useState)(""),2),j=P[0],F=P[1],M=(0,n.useCallback)(function(){return eM(function(){var e,t;return eL(this,function(r){switch(r.label){case 0:h(!0),r.label=1;case 1:return r.trys.push([1,,3,4]),e={},"all"!==b&&(e.status=b),"all"!==S&&(e.postStatus=S),"all"!==x&&(e.triggeredBy=x),[4,s.request({url:"gitCodeReviews:list",params:{pageSize:50,sort:["-id"],filter:Object.keys(e).length?e:void 0}})];case 2:return f((null==(t=r.sent().data)?void 0:t.data)||[]),[3,4];case 3:return h(!1),[7];case 4:return[2]}})})()},[s,b,S,x]);(0,n.useEffect)(function(){M()},[M]),(0,n.useEffect)(function(){if(p.some(function(e){return"running"===e.status||"pending"===e.status})){var e=setInterval(M,4e3);return function(){return clearInterval(e)}}},[p,M]);var D=(0,n.useCallback)(function(e){return eM(function(){var t,r;return eL(this,function(n){switch(n.label){case 0:return[4,s.request({url:"gitCodeReviews:get",params:{filterByTk:e}})];case 1:return(r=null==(t=n.sent().data)?void 0:t.data)&&(f(function(t){return t.map(function(t){return t.id===e?r:t})}),(null==A?void 0:A.id)===e&&T(r)),[2]}})})()},[s,A]),L=(0,n.useMemo)(function(){var e={};return d.forEach(function(t){return e[t.id]=t}),e},[d]),q=[{title:r("Target"),key:"target",render:function(e,t){var r=L[t.repositoryId],n=(null==r?void 0:r.name)||"#".concat(t.repositoryId);return"mr"===t.targetType?l().createElement(a.Space,{size:4},l().createElement(eq,{strong:!0},n),l().createElement(eq,{type:"secondary"},"!",t.mrIid)):"commit"===t.targetType?l().createElement(a.Space,{size:4},l().createElement(eq,{strong:!0},n),l().createElement(eq,{type:"secondary",style:{fontFamily:"monospace"}},String(t.commitSha||"").slice(0,7))):l().createElement(a.Space,{size:4},l().createElement(eq,{strong:!0},n),l().createElement(eq,{type:"secondary"},t.branch))}},{title:r("Type"),dataIndex:"targetType",width:80,render:function(e){return l().createElement(a.Tag,null,r(e.toUpperCase()))}},{title:r("Status"),dataIndex:"status",width:120,render:function(e){var t=eU[e]||"default",n="running"===e?l().createElement(o.ClockCircleOutlined,{spin:!0}):null;return l().createElement(a.Tag,{color:t,icon:n},r(e))}},{title:r("Post Status"),dataIndex:"postStatus",width:140,render:function(e){return l().createElement(a.Tag,{color:eH[e]||"default"},r(e))}},{title:r("Commit"),key:"sha",width:140,render:function(e,t){var n=t.headSha,o=t.latestSha;return n?l().createElement(a.Space,{size:4},l().createElement(a.Tag,{style:{fontFamily:"monospace",fontSize:11}},String(n).slice(0,7)),n&&o&&n!==o&&l().createElement(a.Tooltip,{title:"".concat(r("New commits"),": ").concat(String(o).slice(0,7))},l().createElement(a.Tag,{color:"orange",style:{fontSize:11}},r("new")))):l().createElement(eq,{type:"secondary"},"—")}},{title:r("Trigger"),dataIndex:"triggeredBy",width:90,render:function(e){return l().createElement(a.Tag,{color:"poll"===e?"geekblue":"default",style:{fontSize:11}},"poll"===e?r("Polling"):r("Manual"))}},{title:r("Duration"),dataIndex:"durationMs",width:90,render:function(e){return e?"".concat((e/1e3).toFixed(1),"s"):"—"}},{title:r("Created"),dataIndex:"createdAt",width:160,render:function(e){return e?new Date(e).toLocaleString():""}},{title:"",key:"actions",width:60,render:function(e,t){return l().createElement(a.Tooltip,{title:r("View")},l().createElement(a.Button,{size:"small",icon:l().createElement(o.FileTextOutlined,null),onClick:function(){T(t),B(!1),F(t.reviewMarkdown||"")}}))}}];return l().createElement("div",null,l().createElement(a.Space,{style:{marginBottom:12},wrap:!0},l().createElement(a.Select,{size:"small",style:{width:140},value:b,onChange:E,options:[{value:"all",label:r("All statuses")},{value:"pending",label:r("pending")},{value:"running",label:r("running")},{value:"completed",label:r("completed")},{value:"failed",label:r("failed")}]}),l().createElement(a.Select,{size:"small",style:{width:180},value:S,onChange:k,options:[{value:"all",label:r("All post statuses")},{value:"pending_approval",label:r("pending_approval")},{value:"approved",label:r("approved")},{value:"posted",label:r("posted")},{value:"post_failed",label:r("post_failed")},{value:"skipped",label:r("skipped")},{value:"rejected",label:r("rejected")}]}),l().createElement(a.Select,{size:"small",style:{width:130},value:x,onChange:C,options:[{value:"all",label:r("All triggers")},{value:"manual",label:r("Manual")},{value:"poll",label:r("Polling")}]}),l().createElement(a.Button,{size:"small",icon:l().createElement(o.ReloadOutlined,null),onClick:M},r("Refresh"))),l().createElement(a.Table,{size:"small",rowKey:"id",loading:g,dataSource:p,columns:q,locale:{emptyText:l().createElement(a.Empty,{description:r("No reviews yet")})},pagination:{pageSize:20},onRow:function(e){return{style:{cursor:"pointer"},onClick:function(){T(e),B(!1),F(e.reviewMarkdown||"")}}}}),l().createElement(a.Drawer,{title:A?l().createElement(a.Space,null,l().createElement(o.RobotOutlined,null),l().createElement("span",null,r("Code Review")),l().createElement(a.Tag,{color:eU[A.status]},r(A.status)),l().createElement(a.Tag,{color:eH[A.postStatus]},r(A.postStatus))):r("Code Review"),open:!!A,onClose:function(){T(null),B(!1)},width:840,extra:A&&l().createElement(a.Space,null,l().createElement(a.Button,{size:"small",icon:l().createElement(o.ReloadOutlined,null),onClick:function(){return D(A.id)}},r("Refresh")),"mr"===A.targetType&&l().createElement(a.Button,{size:"small",icon:l().createElement(o.ExportOutlined,null),onClick:function(){var e,t=L[A.repositoryId],r=null==t||null==(e=t.repoUrl)?void 0:e.replace(/\.git$/,"");r&&A.mrIid&&window.open("".concat(r,"/-/merge_requests/").concat(A.mrIid),"_blank")}},r("Open MR")))},A&&l().createElement(e_,{review:A,editing:z,editedMarkdown:j,onEdit:function(){return B(!0)},onCancelEdit:function(){B(!1),F(A.reviewMarkdown||"")},onChangeMarkdown:F,onApprove:function(e){return eM(function(){var t,n,l,o,i;return eL(this,function(c){switch(c.label){case 0:if(!A)return[2];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,s.request({url:"gitManager:reviewApprovePost",method:"post",data:{reviewId:A.id,editedMarkdown:e}})];case 2:return c.sent(),a.message.success(r("Review posted to merge request")),B(!1),D(A.id),M(),[3,4];case 3:return t=c.sent(),a.message.error((null==t||null==(i=t.response)||null==(o=i.data)||null==(l=o.errors)||null==(n=l[0])?void 0:n.message)||(null==t?void 0:t.message)||r("Failed to post review")),[3,4];case 4:return[2]}})})()},onReject:function(){return eM(function(){var e;return eL(this,function(t){switch(t.label){case 0:if(!A)return[2];t.label=1;case 1:return t.trys.push([1,3,,4]),[4,s.request({url:"gitManager:reviewReject",method:"post",data:{reviewId:A.id}})];case 2:return t.sent(),a.message.success(r("Review rejected")),D(A.id),M(),[3,4];case 3:return e=t.sent(),a.message.error((null==e?void 0:e.message)||r("Failed to reject")),[3,4];case 4:return[2]}})})()}})))},e_=function(e){var t=e.review,r=e.editing,n=e.editedMarkdown,i=e.onEdit,c=e.onCancelEdit,s=e.onChangeMarkdown,d=e.onApprove,m=e.onReject,p=(0,u.k)(),f=eN().token,y="completed"===t.status&&"mr"===t.targetType&&("pending_approval"===t.postStatus||"approved"===t.postStatus||"post_failed"===t.postStatus);return l().createElement("div",null,"running"===t.status&&l().createElement(a.Alert,{type:"info",showIcon:!0,message:p("Review in progress…"),description:p("The AI employee is analyzing the code. This page will refresh automatically."),style:{marginBottom:16}}),"failed"===t.status&&l().createElement(a.Alert,{type:"error",showIcon:!0,message:p("Review failed"),description:l().createElement("pre",{style:{whiteSpace:"pre-wrap",margin:0}},t.error),style:{marginBottom:16}}),"completed"===t.status&&"post_failed"===t.postStatus&&t.error&&l().createElement(a.Alert,{type:"error",showIcon:!0,message:p("Post Failed"),description:l().createElement("pre",{style:{whiteSpace:"pre-wrap",margin:0}},t.error),style:{marginBottom:16}}),y&&l().createElement(a.Space,{style:{marginBottom:16},wrap:!0},r?l().createElement(l().Fragment,null,l().createElement(a.Button,{type:"primary",icon:l().createElement(o.CheckOutlined,null),onClick:function(){return d(n)}},p("Save & Post")),l().createElement(a.Button,{onClick:c},p("Cancel"))):l().createElement(l().Fragment,null,l().createElement(a.Button,{type:"primary",icon:l().createElement(o.CheckOutlined,null),onClick:function(){return d(t.reviewMarkdown)}},p("Approve & Post")),l().createElement(a.Button,{icon:l().createElement(o.EditOutlined,null),onClick:i},p("Edit & Post")),l().createElement(a.Popconfirm,{title:p("Reject this review?"),onConfirm:m},l().createElement(a.Button,{danger:!0,icon:l().createElement(o.CloseOutlined,null)},p("Reject"))))),l().createElement(a.Tabs,{defaultActiveKey:"content",items:[{key:"content",label:p("Review Content"),children:r?l().createElement(a.Input.TextArea,{value:n,onChange:function(e){return s(e.target.value)},autoSize:{minRows:16,maxRows:40},style:{fontFamily:"'JetBrains Mono', 'Fira Code', Consolas, monospace",fontSize:13}}):t.reviewMarkdown?l().createElement("div",{style:{background:f.colorBgLayout,padding:16,borderRadius:8,maxHeight:"70vh",overflowY:"auto"}},l().createElement(eP,{content:t.reviewMarkdown})):l().createElement(a.Empty,{description:p("No content yet")})},{key:"metadata",label:p("Metadata"),children:l().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"8px 16px",fontSize:13}},l().createElement(eG,{label:p("Status"),value:t.status}),l().createElement(eG,{label:p("Post Status"),value:t.postStatus}),l().createElement(eG,{label:p("Trigger Type"),value:t.targetType}),l().createElement(eG,{label:p("Triggered By"),value:t.triggeredBy}),l().createElement(eG,{label:p("Reviewed SHA"),value:t.headSha||"—"}),l().createElement(eG,{label:p("Latest SHA"),value:t.latestSha||"—"}),l().createElement(eG,{label:p("Started At"),value:t.startedAt&&new Date(t.startedAt).toLocaleString()}),l().createElement(eG,{label:p("Finished At"),value:t.finishedAt&&new Date(t.finishedAt).toLocaleString()}),l().createElement(eG,{label:p("Duration"),value:t.durationMs?"".concat((t.durationMs/1e3).toFixed(1),"s"):"—"}),l().createElement(eG,{label:p("Posted Note ID"),value:t.postedNoteId||"—"}),l().createElement(eG,{label:p("Approved By"),value:t.approvedBy||"—"}),l().createElement(eG,{label:p("Approved At"),value:t.approvedAt&&new Date(t.approvedAt).toLocaleString()}),l().createElement(eG,{label:p("Session ID"),value:t.sessionId||"—"}),l().createElement(eG,{label:p("Flow ID"),value:t.flowId||"—"}))}]}))},eG=function(e){var t=e.label,r=e.value;return l().createElement("div",null,l().createElement(eq,{type:"secondary",style:{fontSize:12,display:"block"}},t),l().createElement("div",{style:{wordBreak:"break-all"}},r||"—"))};function e$(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function eK(e,t,r,n,l,a,o){try{var i=e[a](o),c=i.value}catch(e){r(e);return}i.done?t(c):Promise.resolve(c).then(n,l)}function eV(e){return function(){var t=this,r=arguments;return new Promise(function(n,l){var a=e.apply(t,r);function o(e){eK(a,n,l,o,i,"next",e)}function i(e){eK(a,n,l,o,i,"throw",e)}o(void 0)})}}function eJ(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,l=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(r=l.next()).done)&&(a.push(r.value),!t||a.length!==t);o=!0);}catch(e){i=!0,n=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw n}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return e$(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return e$(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function eQ(e,t){var r,n,l,a={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(r)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(a=0)),a;)try{if(r=1,n&&(l=2&u[0]?n.return:u[0]?n.throw||((l=n.return)&&l.call(n),0):n.next)&&!(l=l.call(n,u[1])).done)return l;switch(n=0,l&&(u=[2&u[0],l.value]),u[0]){case 0:case 1:l=u;break;case 4:return a.label++,{value:u[1],done:!1};case 5:a.label++,n=u[1],u=[0];continue;case 7:u=a.ops.pop(),a.trys.pop();continue;default:if(!(l=(l=a.trys).length>0&&l[l.length-1])&&(6===u[0]||2===u[0])){a=0;continue}if(3===u[0]&&(!l||u[1]>l[0]&&u[1]<l[3])){a.label=u[1];break}if(6===u[0]&&a.label<l[1]){a.label=l[1],l=u;break}if(l&&a.label<l[2]){a.label=l[2],a.ops.push(u);break}l[2]&&a.ops.pop(),a.trys.pop();continue}u=t.call(e,a)}catch(e){u=[6,e],n=0}finally{r=l=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var eX=a.Typography.Text,eY=a.theme.useToken,eZ=function(){var e=(0,u.k)();eY().token;var t=(0,c.useAPIClient)(),r=(0,i.B)(),s=r.repos,d=r.refreshRepos,m=eJ((0,n.useState)(null),2),p=m[0],f=m[1],y=eJ((0,n.useState)(!1),2),g=y[0],h=y[1],v=eJ((0,n.useState)(null),2),b=v[0],E=v[1],w=eJ((0,n.useState)([]),2),S=w[0],k=w[1],I=(0,n.useCallback)(function(){return eV(function(){var e,r,n,l;return eQ(this,function(a){switch(a.label){case 0:h(!0),a.label=1;case 1:return a.trys.push([1,,4,5]),[4,Promise.all([t.request({url:"gitManager:pollerStatus"}),t.request({url:"gitReviewFlows:list",params:{pageSize:100,filter:{enabled:!0,triggerMode:{$in:["onMergeRequestCreated","both"]}}}})])];case 2:return n=(r=eJ.apply(void 0,[a.sent(),2]))[0].data,l=r[1],f((null==n?void 0:n.data)||null),k((null==l||null==(e=l.data)?void 0:e.data)||[]),[4,d()];case 3:return a.sent(),[3,5];case 4:return h(!1),[7];case 5:return[2]}})})()},[t,d]);(0,n.useEffect)(function(){I()},[I]);var x=s.filter(function(e){return e.autoReview});return l().createElement("div",null,l().createElement(a.Card,{size:"small",style:{marginBottom:16},title:l().createElement(a.Space,null,l().createElement(o.ClockCircleOutlined,null),e("Polling Status")),extra:l().createElement(a.Space,null,l().createElement(a.Button,{size:"small",type:"primary",icon:l().createElement(o.ThunderboltOutlined,null),onClick:function(){return eV(function(){var r,n,l,o,i,c,u,s,d;return eQ(this,function(m){switch(m.label){case 0:E("all"),m.label=1;case 1:return m.trys.push([1,3,4,5]),[4,t.request({url:"gitManager:pollNow",method:"post"})];case 2:return o=(null==(l=m.sent().data)?void 0:l.data)||{},a.message.success(e("Polled {{scanned}} MRs, triggered {{triggered}} reviews",{scanned:null!=(r=o.scanned)?r:0,triggered:null!=(n=o.triggered)?n:0})),I(),[3,5];case 3:return i=m.sent(),a.message.error((null==i||null==(d=i.response)||null==(s=d.data)||null==(u=s.errors)||null==(c=u[0])?void 0:c.message)||(null==i?void 0:i.message)||e("Failed")),[3,5];case 4:return E(null),[7];case 5:return[2]}})})()},loading:"all"===b,disabled:0===x.length},e("Poll Now (All)")),l().createElement(a.Button,{size:"small",icon:l().createElement(o.ReloadOutlined,null),onClick:I,loading:g},e("Refresh")))},l().createElement(a.Space,{direction:"vertical",size:4,style:{width:"100%"}},l().createElement(a.Space,null,l().createElement(eX,{type:"secondary"},e("Background poller"),":"),l().createElement(a.Tag,{color:(null==p?void 0:p.running)?"green":"default"},(null==p?void 0:p.running)?e("Running"):e("Stopped")),(null==p?void 0:p.polling)&&l().createElement(a.Tag,{color:"blue"},e("Polling now…"))),l().createElement(a.Space,null,l().createElement(eX,{type:"secondary"},e("Interval"),":"),l().createElement(eX,null,(null==p?void 0:p.intervalSec)?"".concat(p.intervalSec,"s"):"—")),l().createElement(a.Space,null,l().createElement(eX,{type:"secondary"},e("Last tick"),":"),l().createElement(eX,null,(null==p?void 0:p.lastTickAt)?new Date(p.lastTickAt).toLocaleString():e("Never"))),(null==p?void 0:p.lastError)&&l().createElement(a.Space,null,l().createElement(eX,{type:"secondary"},e("Last error"),":"),l().createElement(eX,{type:"danger",style:{fontSize:12}},p.lastError)))),l().createElement(a.Card,{size:"small",title:l().createElement(a.Space,null,l().createElement(o.RobotOutlined,null),e("Auto-Review Repositories")),extra:l().createElement(eX,{type:"secondary",style:{fontSize:12}},e("Toggle Auto Review on the Repositories tab to enable polling"))},0===x.length?l().createElement(a.Empty,{description:e("No repositories have Auto Review enabled")}):l().createElement(a.Table,{size:"small",rowKey:"id",dataSource:x,pagination:!1,columns:[{title:e("Repository Name"),dataIndex:"name"},{title:e("Primary Auto Flow"),dataIndex:"autoReviewFlowId",width:220,render:function(t,r){var n=S.find(function(e){return Number(e.id)===Number(t)}),o=S.find(function(e){return e.repositoryId===r.id||null==e.repositoryId});return n?l().createElement(a.Tag,{color:"blue"},n.name):o?l().createElement(a.Tag,{color:"default"},e("Fallback"),": ",o.name):l().createElement(a.Tag,{color:"red"},e("No matching flow available"))}},{title:e("Last Polled At"),dataIndex:"lastPolledAt",width:200,render:function(t){return t?new Date(t).toLocaleString():e("Never")}},{title:"",key:"actions",width:120,render:function(r,n){return l().createElement(a.Tooltip,{title:e("Poll this repository now")},l().createElement(a.Button,{size:"small",icon:l().createElement(o.ThunderboltOutlined,null),onClick:function(){var r;return r=n.id,eV(function(){var n,l,o,i,c,u,s,d,m;return eQ(this,function(p){switch(p.label){case 0:E(r),p.label=1;case 1:return p.trys.push([1,3,4,5]),[4,t.request({url:"gitManager:pollNow",method:"post",data:{repositoryId:r}})];case 2:return i=(null==(o=p.sent().data)?void 0:o.data)||{},a.message.success(e("Polled {{scanned}} MRs, triggered {{triggered}} reviews",{scanned:null!=(n=i.scanned)?n:0,triggered:null!=(l=i.triggered)?l:0})),I(),[3,5];case 3:return c=p.sent(),a.message.error((null==c||null==(m=c.response)||null==(d=m.data)||null==(s=d.errors)||null==(u=s[0])?void 0:u.message)||(null==c?void 0:c.message)||e("Failed")),[3,5];case 4:return E(null),[7];case 5:return[2]}})})()},loading:b===n.id},e("Poll Now")))}}]})))},e0=a.Typography.Text,e1=a.theme.useToken,e2=function(){var e=(0,u.k)(),t=e1().token,r=(0,i.B)(),c=r.repos,s=r.selectedRepo,d=r.setSelectedRepo,m=r.refreshRepos;return(0,n.useEffect)(function(){m()},[]),l().createElement("div",{style:{height:"100%"}},l().createElement("div",{style:{padding:"12px 0",marginBottom:16,display:"flex",alignItems:"center",gap:12,borderBottom:"1px solid ".concat(t.colorBorderSecondary)}},l().createElement(o.DatabaseOutlined,{style:{fontSize:16}}),l().createElement(e0,{strong:!0},"Repository:"),l().createElement(a.Select,{style:{minWidth:250},placeholder:e("Select a repository"),value:null==s?void 0:s.id,onChange:function(e){d(c.find(function(t){return t.id===e})||null)},options:c.map(function(t){return{label:l().createElement(a.Space,null,t.name,l().createElement(a.Tag,{color:"connected"===t.status?"green":"default",style:{fontSize:11}},"connected"===t.status?e("Connected"):e("Disconnected"))),value:t.id}}),allowClear:!0,onClear:function(){return d(null)}}),s&&l().createElement(e0,{type:"secondary",style:{fontSize:12}},s.repoUrl)),l().createElement(a.Tabs,{type:"card",defaultActiveKey:"explorer",destroyInactiveTabPane:!0,items:[{key:"explorer",label:l().createElement("span",null,l().createElement(o.FolderOutlined,null)," ",e("File Explorer")),children:l().createElement(w,null)},{key:"history",label:l().createElement("span",null,l().createElement(o.HistoryOutlined,null)," ",e("History")),children:l().createElement(L,null)},{key:"merge-requests",label:l().createElement("span",null,l().createElement(o.MergeOutlined,null)," ",e("Merge Requests")),children:l().createElement(J,null)},{key:"operations",label:l().createElement("span",null,l().createElement(o.ToolOutlined,null)," ",e("Operations")),children:l().createElement(ep,null)},{key:"review-flows",label:l().createElement("span",null,l().createElement(o.RobotOutlined,null)," ",e("Review Flows")),children:l().createElement(eR,null)},{key:"review-history",label:l().createElement("span",null,l().createElement(o.AuditOutlined,null)," ",e("Review History")),children:l().createElement(eW,null)},{key:"polling",label:l().createElement("span",null,l().createElement(o.ClockCircleOutlined,null)," ",e("Polling")),children:l().createElement(eZ,null)}]}))},e3=function(){return l().createElement(i.N,null,l().createElement(e2,null))}},602:function(e,t,r){r.d(t,{B:function(){return m},N:function(){return p}});var n=r(155),l=r.n(n),a=r(342);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function i(e,t,r,n,l,a,o){try{var i=e[a](o),c=i.value}catch(e){r(e);return}i.done?t(c):Promise.resolve(c).then(n,l)}function c(e){return function(){var t=this,r=arguments;return new Promise(function(n,l){var a=e.apply(t,r);function o(e){i(a,n,l,o,c,"next",e)}function c(e){i(a,n,l,o,c,"throw",e)}o(void 0)})}}function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,l=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(r=l.next()).done)&&(a.push(r.value),!t||a.length!==t);o=!0);}catch(e){i=!0,n=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw n}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return o(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e,t){var r,n,l,a={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:c(0)}),i(o,"throw",{value:c(1)}),i(o,"return",{value:c(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function c(i){return function(c){var u=[i,c];if(r)throw TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(a=0)),a;)try{if(r=1,n&&(l=2&u[0]?n.return:u[0]?n.throw||((l=n.return)&&l.call(n),0):n.next)&&!(l=l.call(n,u[1])).done)return l;switch(n=0,l&&(u=[2&u[0],l.value]),u[0]){case 0:case 1:l=u;break;case 4:return a.label++,{value:u[1],done:!1};case 5:a.label++,n=u[1],u=[0];continue;case 7:u=a.ops.pop(),a.trys.pop();continue;default:if(!(l=(l=a.trys).length>0&&l[l.length-1])&&(6===u[0]||2===u[0])){a=0;continue}if(3===u[0]&&(!l||u[1]>l[0]&&u[1]<l[3])){a.label=u[1];break}if(6===u[0]&&a.label<l[1]){a.label=l[1],l=u;break}if(l&&a.label<l[2]){a.label=l[2],a.ops.push(u);break}l[2]&&a.ops.pop(),a.trys.pop();continue}u=t.call(e,a)}catch(e){u=[6,e],n=0}finally{r=l=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var d=(0,n.createContext)(null);function m(){return(0,n.useContext)(d)}var p=function(e){var t=e.children,r=(0,a.useAPIClient)(),o=u((0,n.useState)([]),2),i=o[0],m=o[1],p=u((0,n.useState)(null),2),f=p[0],y=p[1],g=u((0,n.useState)(!1),2),h=g[0],v=g[1],b=u((0,n.useState)([]),2),E=b[0],w=b[1],S=u((0,n.useState)(""),2),k=S[0],I=S[1],x=(0,n.useRef)(f);x.current=f;var C=(0,n.useCallback)(function(){return c(function(){var e,t,n,l;return s(this,function(a){switch(a.label){case 0:if(!(e=x.current)||"connected"!==e.status)return w([]),I(""),[2];a.label=1;case 1:return a.trys.push([1,3,,4]),[4,r.request({url:"gitManager:branches",params:{repositoryId:e.id}})];case 2:return(l=(null==(n=a.sent().data)||null==(t=n.data)?void 0:t.data)||(null==n?void 0:n.data))&&(w(l.all||[]),I(l.current||"")),[3,4];case 3:return a.sent(),w([]),I(""),[3,4];case 4:return[2]}})})()},[r]),O=(0,n.useCallback)(function(){return c(function(){var e,t,n,l;return s(this,function(a){switch(a.label){case 0:v(!0),a.label=1;case 1:return a.trys.push([1,,3,4]),[4,r.request({url:"gitRepositories:list",params:{pageSize:100}})];case 2:return m(t=(null==(e=a.sent().data)?void 0:e.data)||[]),(n=x.current)&&(l=t.find(function(e){return e.id===n.id}))&&y(l),[3,4];case 3:return v(!1),[7];case 4:return[2]}})})()},[r]);return l().createElement(d.Provider,{value:{repos:i,selectedRepo:f,loading:h,branches:E,currentBranch:k,setSelectedRepo:y,refreshRepos:O,refreshBranches:C}},t)}},578:function(e,t,r){r.d(t,{k:function(){return l}});var n=r(342);function l(){var e=(0,n.useApp)();return function(t,r){return e.i18n.t(t,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({ns:["plugin-git-manager","client"]},r))}}}}]);
@@ -0,0 +1,10 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@nocobase/client-v2"),require("react"),require("antd"),require("@nocobase/client"),require("@ant-design/icons"),require("@nocobase/plugin-ai/client")):"function"==typeof define&&define.amd?define("plugin-git-manager/client-v2",["@nocobase/client-v2","react","antd","@nocobase/client","@ant-design/icons","@nocobase/plugin-ai/client"],t):"object"==typeof exports?exports["plugin-git-manager/client-v2"]=t(require("@nocobase/client-v2"),require("react"),require("antd"),require("@nocobase/client"),require("@ant-design/icons"),require("@nocobase/plugin-ai/client")):e["plugin-git-manager/client-v2"]=t(e["@nocobase/client-v2"],e.react,e.antd,e["@nocobase/client"],e["@ant-design/icons"],e["@nocobase/plugin-ai/client"])}(self,function(e,t,n,r,o,i){return function(){"use strict";var a,u,c,l={375:function(e){e.exports=o},342:function(e){e.exports=r},485:function(t){t.exports=e},75:function(e){e.exports=i},59:function(e){e.exports=n},155:function(e){e.exports=t}},p={};function s(e){var t=p[e];if(void 0!==t)return t.exports;var n=p[e]={exports:{}};return l[e].call(n.exports,n,n.exports,s),n.exports}s.m=l,s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,{a:t}),t},s.d=function(e,t){for(var n in t)s.o(t,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},s.f={},s.e=function(e){return Promise.all(Object.keys(s.f).reduce(function(t,n){return s.f[n](e,t),t},[]))},s.u=function(e){return""+e+"."+({326:"42b7b53651ffab3a",434:"e65de282926677d6",878:"06d6d1fe4fdb05f8"})[e]+".js"},s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},f={},s.l=function(e,t,n,r){if(f[e])return void f[e].push(t);if(void 0!==n)for(var o,i,a=document.getElementsByTagName("script"),u=0;u<a.length;u++){var c=a[u];if(c.getAttribute("src")==e||c.getAttribute("data-rspack")=="plugin-git-manager/client-v2:"+n){o=c;break}}o||(i=!0,(o=document.createElement("script")).timeout=120,s.nc&&o.setAttribute("nonce",s.nc),o.setAttribute("data-rspack","plugin-git-manager/client-v2:"+n),o.src=e),f[e]=[t];var l=function(t,n){o.onerror=o.onload=null,clearTimeout(p);var r=f[e];if(delete f[e],o.parentNode&&o.parentNode.removeChild(o),r&&r.forEach(function(e){return e(n)}),t)return t(n)},p=setTimeout(l.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=l.bind(null,o.onerror),o.onload=l.bind(null,o.onload),i&&document.head.appendChild(o)},s.r=function(e){"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.g.importScripts&&(g=s.g.location+"");var f,g,d=s.g.document;if(!g&&d&&(d.currentScript&&"SCRIPT"===d.currentScript.tagName.toUpperCase()&&(g=d.currentScript.src),!g)){var b=d.getElementsByTagName("script");if(b.length)for(var h=b.length-1;h>-1&&(!g||!/^http(s?):/.test(g));)g=b[h--].src}if(!g)throw Error("Automatic publicPath is not supported in this browser");s.p=g.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a={889:0},s.f.j=function(e,t){var n=s.o(a,e)?a[e]:void 0;if(0!==n)if(n)t.push(n[2]);else{var r=new Promise(function(t,r){n=a[e]=[t,r]});t.push(n[2]=r);var o=s.p+s.u(e),i=Error();s.l(o,function(t){if(s.o(a,e)&&(0!==(n=a[e])&&(a[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;i.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",i.name="ChunkLoadError",i.type=r,i.request=o,n[1](i)}},"chunk-"+e,e)}},u=function(e,t){var n,r,o=t[0],i=t[1],u=t[2],c=0;if(o.some(function(e){return 0!==a[e]})){for(n in i)s.o(i,n)&&(s.m[n]=i[n]);u&&u(s)}for(e&&e(t);c<o.length;c++)r=o[c],s.o(a,r)&&a[r]&&a[r][0](),a[r]=0},(c=self.webpackChunkplugin_git_manager_client_v2=self.webpackChunkplugin_git_manager_client_v2||[]).forEach(u.bind(null,0)),c.push=u.bind(null,c.push.bind(c));var v={};return!function(){var e="",t="u">typeof document?document.currentScript:null;if(t&&t.src&&(e=t.src.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/")),!e){var n=window.__webpack_public_path__||"";n&&("/"!==n.charAt(n.length-1)&&(n+="/"),e=n+"static/plugins/plugin-git-manager/dist/client-v2/")}if(!e){var r=window.__nocobase_modern_client_prefix__||"v",o="/"+(r=String(r).replace(/^\/+|\/+$/g,"")||"v")+"/";if(!(e=window.__nocobase_public_path__||"")&&window.location&&window.location.pathname){var i=window.location.pathname||"/",a=i.indexOf(o);e=a>=0?i.slice(0,a+1):"/"}e&&(e=e.replace(RegExp("/"+r+"/?$"),"/")),e||(e="/"),"/"!==e.charAt(e.length-1)&&(e+="/"),e+="static/plugins/plugin-git-manager/dist/client-v2/"}s.p=e}(),!function(){s.r(v),s.d(v,{default:function(){return u}});var e=s(485);function t(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){n(e);return}u.done?t(c):Promise.resolve(c).then(r,o)}function n(e,t,r){return(n=a()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var i=new(Function.bind.apply(e,r));return n&&o(i,n.prototype),i}).apply(null,arguments)}s(155);function r(e){return(r=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function o(e,t){return(o=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function i(e){var t="function"==typeof Map?new Map:void 0;return(i=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,i)}function i(){return n(e,arguments,r(this).constructor)}return i.prototype=Object.create(e.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}),o(i,e)})(e)}function a(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(a=function(){return!!e})()}var u=function(e){var n;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function i(){var e,t;if(!(this instanceof i))throw TypeError("Cannot call a class as a function");return e=i,t=arguments,e=r(e),function(e,t){var n;if(t&&("object"==((n=t)&&"u">typeof Symbol&&n.constructor===Symbol?"symbol":typeof n)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,a()?Reflect.construct(e,t||[],r(this).constructor):e.apply(this,t))}return i.prototype=Object.create(e&&e.prototype,{constructor:{value:i,writable:!0,configurable:!0}}),e&&o(i,e),n=[{key:"load",value:function(){var e;return(e=function(){return function(e,t){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),u=Object.defineProperty;return u(a,"next",{value:c(0)}),u(a,"throw",{value:c(1)}),u(a,"return",{value:c(2)}),"function"==typeof Symbol&&u(a,Symbol.iterator,{value:function(){return this}}),a;function c(u){return function(c){var l=[u,c];if(n)throw TypeError("Generator is already executing.");for(;a&&(a=0,l[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return i.label++,{value:l[1],done:!1};case 5:i.label++,r=l[1],l=[0];continue;case 7:l=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){i=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){i.label=l[1];break}if(6===l[0]&&i.label<o[1]){i.label=o[1],o=l;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(l);break}o[2]&&i.ops.pop(),i.trys.pop();continue}l=t.call(e,i)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}(this,function(e){return this.pluginSettingsManager.addMenuItem({key:"git-manager",title:this.t("Git Manager"),icon:"BranchesOutlined"}),this.pluginSettingsManager.addPageTabItem({menuKey:"git-manager",key:"repositories",title:this.t("Repositories"),aclSnippet:"pm.plugin-git-manager.repositories",componentLoader:function(){return s.e("434").then(s.bind(s,33)).then(function(e){return{default:e.RepositoryConfig}})}}),this.pluginSettingsManager.addPageTabItem({menuKey:"git-manager",key:"manage",title:this.t("Manage"),aclSnippet:"pm.plugin-git-manager.manage",componentLoader:function(){return Promise.all([s.e("326"),s.e("878")]).then(s.bind(s,205)).then(function(e){return{default:e.GitManagerSettings}})}}),[2]})},function(){var n=this,r=arguments;return new Promise(function(o,i){var a=e.apply(n,r);function u(e){t(a,o,i,u,c,"next",e)}function c(e){t(a,o,i,u,c,"throw",e)}u(void 0)})}).call(this)}}],function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(i.prototype,n),i}(i(e.Plugin))}(),v}()});
@@ -1,12 +1,23 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
1
10
  module.exports = {
2
11
  "react": "18.2.0",
3
12
  "antd": "5.24.2",
4
13
  "@ant-design/icons": "5.6.1",
5
- "@nocobase/client": "2.0.55",
6
- "@nocobase/server": "2.0.55",
14
+ "@nocobase/client": "2.1.6",
15
+ "@nocobase/plugin-acl": "2.1.6",
16
+ "@nocobase/client-v2": "2.1.6",
17
+ "@nocobase/server": "2.1.6",
7
18
  "sequelize": "6.35.2",
8
19
  "dayjs": "1.11.13",
9
- "@nocobase/plugin-ai": "2.0.55",
10
- "@nocobase/actions": "2.0.55",
11
- "@nocobase/database": "2.0.55"
20
+ "@nocobase/plugin-ai": "2.1.6",
21
+ "@nocobase/actions": "2.1.6",
22
+ "@nocobase/database": "2.1.6"
12
23
  };
package/dist/index.js CHANGED
@@ -1,3 +1,12 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
1
10
  var __create = Object.create;
2
11
  var __defProp = Object.defineProperty;
3
12
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -186,5 +186,12 @@
186
186
  "Only flows with automatic trigger modes are shown": "Only flows with automatic trigger modes are shown",
187
187
  "Fallback": "Fallback",
188
188
  "AI employee not found": "AI employee not found",
189
- "Failed to open AI chat": "Failed to open AI chat"
189
+ "Failed to open AI chat": "Failed to open AI chat",
190
+ "Manage": "Manage",
191
+ "Repository Permissions": "Repository Permissions",
192
+ "Read (List, Browse Files, View History)": "Read (List, Browse Files, View History)",
193
+ "Write (Clone, Pull, Push, Review)": "Write (Clone, Pull, Push, Review)",
194
+ "Configure access permissions for each repository for the role {{roleName}}": "Configure access permissions for each repository for the role {{roleName}}",
195
+ "Failed to load repository permissions": "Failed to load repository permissions",
196
+ "Failed to update permissions": "Failed to update permissions"
190
197
  }
@@ -179,5 +179,12 @@
179
179
  "new": "mới",
180
180
  "Reviewed SHA": "SHA đã đánh giá",
181
181
  "Latest SHA": "SHA mới nhất",
182
- "All triggers": "Tất cả nguồn"
182
+ "All triggers": "Tất cả nguồn",
183
+ "Manage": "Quản lý",
184
+ "Repository Permissions": "Phân quyền kho mã nguồn",
185
+ "Read (List, Browse Files, View History)": "Đọc (Xem danh sách, Duyệt tệp, Xem lịch sử)",
186
+ "Write (Clone, Pull, Push, Review)": "Ghi (Sao chép, Kéo về, Đẩy lên, Đánh giá)",
187
+ "Configure access permissions for each repository for the role {{roleName}}": "Cấu hình quyền truy cập cho từng kho mã nguồn đối với vai trò {{roleName}}",
188
+ "Failed to load repository permissions": "Không thể tải phân quyền kho mã nguồn",
189
+ "Failed to update permissions": "Cập nhật phân quyền thất bại"
183
190
  }
@@ -1,3 +1,12 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
1
10
  var __create = Object.create;
2
11
  var __defProp = Object.defineProperty;
3
12
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -44,12 +53,16 @@ module.exports = __toCommonJS(git_actions_exports);
44
53
  var import_simple_git = __toESM(require("simple-git"));
45
54
  var path = __toESM(require("path"));
46
55
  var fs = __toESM(require("fs"));
56
+ var import_child_process = require("child_process");
47
57
  var import_redact = require("../utils/redact");
48
- const REF_PATTERN = /^(?!-)[a-zA-Z0-9._\-\/]+$/;
58
+ const REF_PATTERN = /^(?!-)[a-zA-Z0-9._/-]+$/;
49
59
  const repoLocks = /* @__PURE__ */ new Map();
60
+ const GIT_BINARY = process.env.GIT_BINARY_PATH || process.env.GIT_EXECUTABLE || "git";
61
+ let gitAvailabilityChecked = false;
50
62
  function acquireLock(key) {
51
63
  const prev = repoLocks.get(key) || Promise.resolve();
52
- let release;
64
+ let release = () => {
65
+ };
53
66
  const next = new Promise((resolve) => {
54
67
  release = resolve;
55
68
  });
@@ -113,11 +126,30 @@ function getAuthUrl(repoUrl, pat, username) {
113
126
  url.password = pat.trim();
114
127
  return url.toString();
115
128
  }
129
+ function getGitMissingMessage() {
130
+ return `Git executable "${GIT_BINARY}" was not found on the server. Install git in the app/worker container, or set GIT_BINARY_PATH to the absolute git binary path.`;
131
+ }
132
+ function assertGitAvailable(ctx) {
133
+ if (gitAvailabilityChecked) return;
134
+ const check = (0, import_child_process.spawnSync)(GIT_BINARY, ["--version"], { stdio: "ignore" });
135
+ if (check.error || check.status !== 0) {
136
+ ctx.throw(503, getGitMissingMessage());
137
+ }
138
+ gitAvailabilityChecked = true;
139
+ }
140
+ function isMissingGitError(error) {
141
+ const message = (error == null ? void 0 : error.message) || String(error);
142
+ return (error == null ? void 0 : error.code) === "ENOENT" || /spawn .*git.*ENOENT/i.test(message);
143
+ }
144
+ function createGit(baseDir) {
145
+ return (0, import_simple_git.default)({ baseDir, binary: GIT_BINARY });
146
+ }
116
147
  function getGit(ctx, localPath) {
117
148
  if (!fs.existsSync(localPath)) {
118
149
  ctx.throw(400, "Repository directory does not exist. Please clone the repository first.");
119
150
  }
120
- return (0, import_simple_git.default)(localPath);
151
+ assertGitAvailable(ctx);
152
+ return createGit(localPath);
121
153
  }
122
154
  async function getRepo(ctx) {
123
155
  const { repositoryId } = ctx.action.params;
@@ -154,9 +186,10 @@ async function clone(ctx, next) {
154
186
  fs.mkdirSync(path.dirname(localPath), { recursive: true });
155
187
  }
156
188
  const authUrl = getAuthUrl(repoUrl, pat, username);
189
+ assertGitAvailable(ctx);
157
190
  try {
158
- await (0, import_simple_git.default)().clone(authUrl, localPath, ["--branch", defaultBranch]);
159
- await (0, import_simple_git.default)(localPath).remote(["set-url", "origin", repoUrl]);
191
+ await createGit().clone(authUrl, localPath, ["--branch", defaultBranch]);
192
+ await createGit(localPath).remote(["set-url", "origin", repoUrl]);
160
193
  await ctx.db.getRepository("gitRepositories").update({
161
194
  filterByTk: repo.get("id"),
162
195
  values: { status: "connected" }
@@ -167,6 +200,9 @@ async function clone(ctx, next) {
167
200
  filterByTk: repo.get("id"),
168
201
  values: { status: "error" }
169
202
  });
203
+ if (isMissingGitError(err)) {
204
+ ctx.throw(503, getGitMissingMessage());
205
+ }
170
206
  throw (0, import_redact.redactError)(err);
171
207
  }
172
208
  await next();
@@ -276,7 +312,8 @@ async function fileTree(ctx, next) {
276
312
  const match = line.match(/^(\d+)\s+(blob|tree)\s+([a-f0-9]+)\s+(-|\d+)\t(.+)$/);
277
313
  if (!match) return null;
278
314
  const fullPath = match[5];
279
- const name = fullPath.includes("/") ? fullPath.split("/").pop() : fullPath;
315
+ const parts = fullPath.split("/");
316
+ const name = fullPath.includes("/") ? parts[parts.length - 1] : fullPath;
280
317
  return {
281
318
  mode: match[1],
282
319
  type: match[2],
@@ -1,3 +1,12 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
1
10
  var __defProp = Object.defineProperty;
2
11
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
12
  var __getOwnPropNames = Object.getOwnPropertyNames;
@@ -1,3 +1,12 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
1
10
  var __defProp = Object.defineProperty;
2
11
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
12
  var __getOwnPropNames = Object.getOwnPropertyNames;
@@ -1,3 +1,12 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
1
10
  var __defProp = Object.defineProperty;
2
11
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
12
  var __getOwnPropNames = Object.getOwnPropertyNames;