plugin-git-manager 1.1.9 → 1.1.10

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 (35) hide show
  1. package/dist/client/187.08dd0bf4d0f68036.js +10 -0
  2. package/dist/client/components/RunReviewButton.d.ts +1 -1
  3. package/dist/client/context/GitManagerContext.d.ts +2 -0
  4. package/dist/client/index.js +1 -1
  5. package/dist/externalVersion.js +6 -4
  6. package/dist/locale/en-US.json +8 -1
  7. package/dist/server/actions/gitlab-api.js +14 -13
  8. package/dist/server/actions/review.js +13 -9
  9. package/dist/server/ai-tools.js +2 -0
  10. package/dist/server/collections/gitCodeReviews.d.ts +1 -1
  11. package/dist/server/collections/gitRepositories.d.ts +1 -1
  12. package/dist/server/collections/gitRepositories.js +12 -0
  13. package/dist/server/collections/gitReviewFlows.d.ts +1 -1
  14. package/dist/server/migrations/20260508000000-add-auto-review-flow-id.d.ts +6 -0
  15. package/dist/server/migrations/20260508000000-add-auto-review-flow-id.js +57 -0
  16. package/dist/server/plugin.d.ts +4 -0
  17. package/dist/server/plugin.js +38 -6
  18. package/dist/server/poller.js +3 -1
  19. package/package.json +1 -1
  20. package/src/client/components/CommitHistory.tsx +18 -3
  21. package/src/client/components/GitOperations.tsx +29 -16
  22. package/src/client/components/PollingStatus.tsx +27 -1
  23. package/src/client/components/RepositoryConfig.tsx +76 -3
  24. package/src/client/components/RunReviewButton.tsx +375 -278
  25. package/src/client/context/GitManagerContext.tsx +2 -0
  26. package/src/client/index.tsx +31 -31
  27. package/src/locale/en-US.json +8 -1
  28. package/src/server/actions/gitlab-api.ts +8 -4
  29. package/src/server/actions/review.ts +7 -3
  30. package/src/server/ai-tools.ts +1 -0
  31. package/src/server/collections/gitRepositories.ts +12 -0
  32. package/src/server/migrations/20260508000000-add-auto-review-flow-id.ts +29 -0
  33. package/src/server/plugin.ts +216 -180
  34. package/src/server/poller.ts +11 -2
  35. package/dist/client/187.eec7be93247463d7.js +0 -10
@@ -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=self.webpackChunkplugin_git_manager||[]).push([["187"],{922:function(e,t,n){n.r(t),n.d(t,{GitManagerSettings:function(){return to}});var r=n(156),l=n.n(r),a=n(721),o=n(482),i=n(772);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function u(e,t,n,r,l,a,o){try{var i=e[a](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,l)}function s(e){return function(){var t=this,n=arguments;return new Promise(function(r,l){var a=e.apply(t,n);function o(e){u(a,r,l,o,i,"next",e)}function i(e){u(a,r,l,o,i,"throw",e)}o(void 0)})}}function d(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return c(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 m(e,t){var n,r,l,a,o={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){var c=[a,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(l=2&c[0]?r.return:c[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,c[1])).done)return l;switch(r=0,l&&(c=[2&c[0],l.value]),c[0]){case 0:case 1:l=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(l=(l=o.trys).length>0&&l[l.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!l||c[1]>l[0]&&c[1]<l[3])){o.label=c[1];break}if(6===c[0]&&o.label<l[1]){o.label=l[1],l=c;break}if(l&&o.label<l[2]){o.label=l[2],o.ops.push(c);break}l[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=l=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var p=(0,r.createContext)(null);function f(){return(0,r.useContext)(p)}var y=function(e){var t=e.children,n=(0,i.useAPIClient)(),a=d((0,r.useState)([]),2),o=a[0],c=a[1],u=d((0,r.useState)(null),2),f=u[0],y=u[1],h=d((0,r.useState)(!1),2),g=h[0],v=h[1],b=d((0,r.useState)([]),2),E=b[0],w=b[1],S=d((0,r.useState)(""),2),k=S[0],C=S[1],I=(0,r.useRef)(f);I.current=f;var x=(0,r.useCallback)(s(function(){var e,t,r,l;return m(this,function(a){switch(a.label){case 0:if(!(e=I.current)||"connected"!==e.status)return w([]),C(""),[2];a.label=1;case 1:return a.trys.push([1,3,,4]),[4,n.request({url:"gitManager:branches",params:{repositoryId:e.id}})];case 2:return(l=(null==(r=a.sent().data)||null==(t=r.data)?void 0:t.data)||(null==r?void 0:r.data))&&(w(l.all||[]),C(l.current||"")),[3,4];case 3:return a.sent(),w([]),C(""),[3,4];case 4:return[2]}})}),[n]),O=(0,r.useCallback)(s(function(){var e,t,r,l;return m(this,function(a){switch(a.label){case 0:v(!0),a.label=1;case 1:return a.trys.push([1,,3,4]),[4,n.request({url:"gitRepositories:list",params:{pageSize:100}})];case 2:return c(t=(null==(e=a.sent().data)?void 0:e.data)||[]),(r=I.current)&&(l=t.find(function(e){return e.id===r.id}))&&y(l),[3,4];case 3:return v(!1),[7];case 4:return[2]}})}),[n]);return l().createElement(p.Provider,{value:{repos:o,selectedRepo:f,loading:g,branches:E,currentBranch:k,setSelectedRepo:y,refreshRepos:O,refreshBranches:x}},t)};function h(){var e=(0,i.useApp)();return function(t,n){return e.i18n.t(t,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({ns:["plugin-git-manager","client"]},n))}}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function v(e,t,n,r,l,a,o){try{var i=e[a](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,l)}function b(e){return function(){var t=this,n=arguments;return new Promise(function(r,l){var a=e.apply(t,n);function o(e){v(a,r,l,o,i,"next",e)}function i(e){v(a,r,l,o,i,"throw",e)}o(void 0)})}}function E(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return g(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return g(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 w(e,t){var n,r,l,a,o={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){var c=[a,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(l=2&c[0]?r.return:c[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,c[1])).done)return l;switch(r=0,l&&(c=[2&c[0],l.value]),c[0]){case 0:case 1:l=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(l=(l=o.trys).length>0&&l[l.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!l||c[1]>l[0]&&c[1]<l[3])){o.label=c[1];break}if(6===c[0]&&o.label<l[1]){o.label=l[1],l=c;break}if(l&&o.label<l[2]){o.label=l[2],o.ops.push(c);break}l[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=l=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var S=function(){var e,t,n,c=h(),u=(0,i.useAPIClient)(),s=f(),d=s.repos,m=s.refreshRepos,p=s.selectedRepo,y=s.setSelectedRepo,g=E((0,r.useState)(!1),2),v=g[0],S=g[1],k=E((0,r.useState)(null),2),C=k[0],I=k[1],x=E(a.Form.useForm(),1)[0],O=E((0,r.useState)(null),2),A=O[0],T=O[1],R=E((0,r.useState)([]),2),P=R[0],z=R[1],B=(0,r.useCallback)(b(function(){var e;return w(this,function(t){switch(t.label){case 0:return[4,u.request({url:"gitReviewFlows:list",params:{pageSize:100,filter:{enabled:!0,triggerMode:{$in:["onMergeRequestCreated","both"]}}}})];case 1:return z((null==(e=t.sent().data)?void 0:e.data)||[]),[2]}})}),[u]);(0,r.useEffect)(function(){B().catch(function(){})},[B]);var F=function(e){return P.filter(function(t){return t.repositoryId===e||null==t.repositoryId}).map(function(e){return{value:e.id,label:"".concat(e.name).concat(null==e.repositoryId?" (".concat(c("global"),")"):"")}})},j=(e=b(function(){var e,t;return w(this,function(n){switch(n.label){case 0:return[4,x.validateFields()];case 1:e=n.sent(),C&&(!e.pat||"••••••••"===e.pat)&&delete e.pat,n.label=2;case 2:if(n.trys.push([2,8,,9]),!C)return[3,4];return[4,u.request({url:"gitRepositories:update",method:"post",params:{filterByTk:C.id},data:e})];case 3:return n.sent(),a.message.success(c("Repository updated")),[3,6];case 4:return[4,u.request({url:"gitRepositories:create",method:"post",data:e})];case 5:n.sent(),a.message.success(c("Repository added")),n.label=6;case 6:return S(!1),I(null),x.resetFields(),[4,m()];case 7:return n.sent(),[3,9];case 8:return t=n.sent(),a.message.error((null==t?void 0:t.message)||c("Failed to save")),[3,9];case 9:return[2]}})}),function(){return e.apply(this,arguments)}),M=(t=b(function(e){return w(this,function(t){switch(t.label){case 0:return[4,u.request({url:"gitRepositories:destroy",method:"post",params:{filterByTk:e}})];case 1:return t.sent(),(null==p?void 0:p.id)===e&&y(null),a.message.success(c("Deleted")),[4,m()];case 2:return t.sent(),[2]}})}),function(e){return t.apply(this,arguments)}),D=(n=b(function(e){var t,n,r,l,o;return w(this,function(i){switch(i.label){case 0:T("clone-".concat(e.id)),i.label=1;case 1:return i.trys.push([1,4,5,6]),[4,u.request({url:"gitManager:clone",method:"post",params:{repositoryId:e.id}})];case 2:return i.sent(),a.message.success(c("Clone successful")),[4,m()];case 3:return i.sent(),[3,6];case 4:return t=i.sent(),a.message.error((null==t||null==(o=t.response)||null==(l=o.data)||null==(r=l.errors)||null==(n=r[0])?void 0:n.message)||c("Clone failed")),[3,6];case 5:return T(null),[7];case 6:return[2]}})}),function(e){return n.apply(this,arguments)}),q=[{title:c("Repository Name"),dataIndex:"name",key:"name",render:function(e,t){return l().createElement("a",{onClick:function(){return y(t)}},e)}},{title:c("Repository URL"),dataIndex:"repoUrl",key:"repoUrl",ellipsis:!0},{title:c("Local Path"),dataIndex:"localPath",key:"localPath",ellipsis:!0},{title:c("Default Branch"),dataIndex:"defaultBranch",key:"defaultBranch",width:120},{title:l().createElement(a.Tooltip,{title:c("Auto-poll new merge requests every 5 minutes")},l().createElement(a.Space,{size:4},l().createElement(o.RobotOutlined,null),c("Auto Review"))),dataIndex:"autoReview",key:"autoReview",width:110,render:function(e,t){var n;return l().createElement(a.Switch,{size:"small",checked:!!e,onChange:(n=b(function(e){var n,r,l,o;return w(this,function(i){switch(i.label){case 0:return i.trys.push([0,3,,4]),r=F(t.id),[4,u.request({url:"gitRepositories:update",method:"post",params:{filterByTk:t.id},data:{autoReview:e,autoReviewFlowId:e&&!t.autoReviewFlowId?null!=(l=null==(n=r[0])?void 0:n.value)?l:null:t.autoReviewFlowId}})];case 1:return i.sent(),[4,m()];case 2:return i.sent(),[3,4];case 3:return o=i.sent(),a.message.error((null==o?void 0:o.message)||c("Failed to save")),[3,4];case 4:return[2]}})}),function(e){return n.apply(this,arguments)})})}},{title:c("Primary Auto Flow"),dataIndex:"autoReviewFlowId",key:"autoReviewFlowId",width:220,render:function(e,t){var n,r=F(t.id);return l().createElement(a.Select,{allowClear:!0,size:"small",style:{width:"100%"},disabled:!t.autoReview,placeholder:c("Select a flow"),value:e||void 0,options:r,notFoundContent:c("No matching flow available"),onChange:(n=b(function(e){var n;return w(this,function(r){switch(r.label){case 0:return r.trys.push([0,3,,4]),[4,u.request({url:"gitRepositories:update",method:"post",params:{filterByTk:t.id},data:{autoReviewFlowId:e||null}})];case 1:return r.sent(),[4,m()];case 2:return r.sent(),[3,4];case 3:return n=r.sent(),a.message.error((null==n?void 0:n.message)||c("Failed to save")),[3,4];case 4:return[2]}})}),function(e){return n.apply(this,arguments)})})}},{title:c("Status"),dataIndex:"status",key:"status",width:120,render:function(e){var t={connected:{color:"green",label:c("Connected")},error:{color:"red",label:c("Error")}}[e]||{color:"default",label:c("Disconnected")};return l().createElement(a.Tag,{color:t.color},t.label)}},{title:"",key:"actions",width:200,render:function(e,t){return l().createElement(a.Space,{size:"small"},"connected"!==t.status&&l().createElement(a.Button,{size:"small",icon:l().createElement(o.LinkOutlined,null),loading:A==="clone-".concat(t.id),onClick:function(){return D(t)}},c("Clone")),l().createElement(a.Button,{size:"small",onClick:function(){var e,n;I(t),x.setFieldsValue((e=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({},t),n=n={pat:""},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e)),S(!0)}},c("Edit")),l().createElement(a.Popconfirm,{title:c("Delete this repository?"),onConfirm:function(){return M(t.id)}},l().createElement(a.Button,{size:"small",danger:!0,icon:l().createElement(o.DeleteOutlined,null)})))}}];return l().createElement("div",null,l().createElement("div",{style:{marginBottom:16}},l().createElement(a.Button,{type:"primary",icon:l().createElement(o.PlusOutlined,null),onClick:function(){I(null),x.resetFields(),S(!0)}},c("Add Repository"))),l().createElement(a.Table,{dataSource:d,columns:q,rowKey:"id",size:"small",pagination:!1,rowClassName:function(e){return(null==p?void 0:p.id)===e.id?"ant-table-row-selected":""}}),l().createElement(a.Modal,{title:C?c("Edit Repository"):c("Add Repository"),open:v,onOk:j,onCancel:function(){S(!1),I(null)},width:520},l().createElement(a.Form,{form:x,layout:"vertical",initialValues:{defaultBranch:"main"}},l().createElement(a.Form.Item,{name:"name",label:c("Repository Name"),rules:[{required:!0}]},l().createElement(a.Input,{placeholder:"my-project"})),l().createElement(a.Form.Item,{name:"repoUrl",label:c("Repository URL"),rules:[{required:!0}]},l().createElement(a.Input,{placeholder:"https://gitlab.com/user/repo.git"})),l().createElement(a.Form.Item,{name:"username",label:c("Username"),rules:[{required:!0}],extra:c("GitLab username for PAT authentication")},l().createElement(a.Input,{placeholder:"gitlab-username"})),l().createElement(a.Form.Item,{name:"localPath",label:c("Local Path"),rules:[{required:!0}]},l().createElement(a.Input,{placeholder:"my-project"})),l().createElement(a.Form.Item,{name:"pat",label:c("Personal Access Token"),rules:C?[]:[{required:!0}]},l().createElement(a.Input.Password,{placeholder:C?"Leave empty to keep current":"ghp_xxxx..."})),l().createElement(a.Form.Item,{name:"defaultBranch",label:c("Default Branch")},l().createElement(a.Input,{placeholder:"main"})),l().createElement(a.Form.Item,{name:"autoReviewFlowId",label:c("Primary Auto Review Flow"),extra:c("Only flows with automatic trigger modes are shown")},l().createElement(a.Select,{allowClear:!0,placeholder:c("Select a flow"),options:F(null==C?void 0:C.id),notFoundContent:c("No matching flow available")})))))};function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function C(e,t,n,r,l,a,o){try{var i=e[a](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,l)}function I(e){return function(){var t=this,n=arguments;return new Promise(function(r,l){var a=e.apply(t,n);function o(e){C(a,r,l,o,i,"next",e)}function i(e){C(a,r,l,o,i,"throw",e)}o(void 0)})}}function x(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function A(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return k(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return k(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 T(e,t){var n,r,l,a,o={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){var c=[a,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(l=2&c[0]?r.return:c[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,c[1])).done)return l;switch(r=0,l&&(c=[2&c[0],l.value]),c[0]){case 0:case 1:l=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(l=(l=o.trys).length>0&&l[l.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!l||c[1]>l[0]&&c[1]<l[3])){o.label=c[1];break}if(6===c[0]&&o.label<l[1]){o.label=l[1],l=c;break}if(l&&o.label<l[2]){o.label=l[2],o.ops.push(c);break}l[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=l=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var R=a.Typography.Text,P=a.Input.Search,z=a.theme.useToken,B={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"}})},F=function(){var e,t,n,c=h(),u=z().token,s=(0,i.useAPIClient)(),d=f(),m=d.selectedRepo,p=d.branches,y=d.currentBranch,g=d.refreshBranches,v=A((0,r.useState)([]),2),b=v[0],E=v[1],w=A((0,r.useState)(!1),2),S=w[0],k=w[1],C=A((0,r.useState)(null),2),F=C[0],j=C[1],M=A((0,r.useState)(null),2),D=M[0],q=M[1],L=A((0,r.useState)("HEAD"),2),U=L[0],N=L[1],H=A((0,r.useState)(""),2),W=H[0],_=H[1],G=A((0,r.useState)(""),2),$=G[0],K=G[1],V=A((0,r.useState)(!1),2),J=V[0],Q=V[1],X=(0,r.useCallback)(I(function(){var e,t,n,r,a=arguments;return T(this,function(i){switch(i.label){case 0:if(e=a.length>0&&void 0!==a[0]?a[0]:"",t=a.length>1&&void 0!==a[1]?a[1]:U,!m)return[2,[]];return[4,s.request({url:"gitManager:fileTree",params:{repositoryId:m.id,ref:t,treePath:e}})];case 1:return[2,(Array.isArray(r=(null==(n=i.sent().data)?void 0:n.data)||n||[])?r:Array.isArray(null==r?void 0:r.data)?r.data:[]).map(function(e){return{key:e.path,title:l().createElement(R,{style:{fontSize:13}},e.name,"blob"===e.type&&e.size>0&&l().createElement(R,{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 n;return B[(null==(n=e.split(".").pop())?void 0:n.toLowerCase())||""]||l().createElement(o.FileOutlined,null)}}(e.name,e.type),isLeaf:"blob"===e.type,filePath:e.path,fileType:e.type}})]}})}),[s,m,U]),Y=(0,r.useCallback)(I(function(){return T(this,function(e){switch(e.label){case 0:k(!0),e.label=1;case 1:return e.trys.push([1,,3,4]),[4,X("",U)];case 2:return E(e.sent()),[3,4];case 3:return k(!1),[7];case 4:return[2]}})}),[X,U]);(0,r.useEffect)(function(){(null==m?void 0:m.status)==="connected"?(g(),j(null),q(null)):E([])},[m]),(0,r.useEffect)(function(){y&&"HEAD"===U&&N(y)},[y]),(0,r.useEffect)(function(){(null==m?void 0:m.status)==="connected"&&Y()},[U,m]);var Z=(e=I(function(e){var t;return T(this,function(n){switch(n.label){case 0:if(e.children)return[2];return[4,X(e.filePath,U)];case 1:return t=n.sent(),E(function(n){return function e(t,n,r){return t.map(function(t){return t.key===n?O(x({},t),{children:r}):t.children?O(x({},t),{children:e(t.children,n,r)}):t})}(n,e.key,t)}),[2]}})}),function(t){return e.apply(this,arguments)}),ee=(t=I(function(e,t){var n,r,l,a;return T(this,function(e){switch(e.label){case 0:if(!(n=t.node).isLeaf)return[2];Q(!0),q(n.filePath),e.label=1;case 1:return e.trys.push([1,3,4,5]),[4,s.request({url:"gitManager:fileContent",params:{repositoryId:m.id,ref:U,filePath:n.filePath}})];case 2:return j((null==(a=(null==(l=e.sent().data)||null==(r=l.data)?void 0:r.data)||(null==l?void 0:l.data))?void 0:a.content)||""),[3,5];case 3:return e.sent(),j("// Failed to load file content"),[3,5];case 4:return Q(!1),[7];case 5:return[2]}})}),function(e,n){return t.apply(this,arguments)}),et=(0,r.useRef)();if((0,r.useEffect)(function(){return et.current=setTimeout(function(){return K(W)},300),function(){return clearTimeout(et.current)}},[W]),!m)return l().createElement(a.Empty,{description:c("No repository selected")});if("connected"!==m.status)return l().createElement(a.Empty,{description:c("Repository not cloned yet")});var en=$?function e(t,n){return t.map(function(t){if(t.children){var r=e(t.children,n);if(r.length>0)return O(x({},t),{children:r})}return(t.filePath||"").toLowerCase().includes(n)?t:null}).filter(Boolean)}(b,$.toLowerCase()):b;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(u.colorBorderSecondary),display:"flex",flexDirection:"column",background:u.colorBgContainer}},l().createElement("div",{style:{padding:"8px 12px",borderBottom:"1px solid ".concat(u.colorBorderSecondary)}},l().createElement(a.Space,{direction:"vertical",style:{width:"100%"},size:6},l().createElement(a.Select,{size:"small",style:{width:"100%"},value:U,onChange:function(e){N(e),j(null),q(null)},options:p.map(function(e){return{label:e,value:e}}),placeholder:"Branch"}),l().createElement(P,{size:"small",placeholder:"Filter files...",allowClear:!0,onChange:function(e){return _(e.target.value)}}))),l().createElement("div",{style:{flex:1,overflow:"auto",padding:"4px 0"}},S?l().createElement("div",{style:{textAlign:"center",padding:40}},l().createElement(a.Spin,null)):l().createElement(a.Tree,{showIcon:!0,treeData:en,loadData:Z,onSelect:ee,selectedKeys:D?[D]:[],style:{fontSize:13},blockNode:!0}))),l().createElement("div",{style:{flex:1,display:"flex",flexDirection:"column",background:u.colorBgLayout}},D?l().createElement(l().Fragment,null,l().createElement("div",{style:{padding:"6px 16px",borderBottom:"1px solid ".concat(u.colorBorderSecondary),background:u.colorBgContainer,display:"flex",alignItems:"center",gap:8}},l().createElement(a.Breadcrumb,{items:D.split("/").map(function(e,t,n){return{title:t===n.length-1?l().createElement(R,{strong:!0},e):e}})}),l().createElement(R,{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==(n=D.split(".").pop())?void 0:n.toLowerCase())||""]||"text")),l().createElement("div",{style:{flex:1,overflow:"auto"}},J?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:u.colorBgContainer,minHeight:"100%"}},(F||"").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:u.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(R,{type:"secondary"},"Select a file to view its content"))))},j=n(645);function M(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function D(e,t,n,r,l,a,o){try{var i=e[a](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,l)}function q(e){return function(){var t=this,n=arguments;return new Promise(function(r,l){var a=e.apply(t,n);function o(e){D(a,r,l,o,i,"next",e)}function i(e){D(a,r,l,o,i,"throw",e)}o(void 0)})}}function L(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||U(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 U(e,t){if(e){if("string"==typeof e)return M(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return M(e,t)}}function N(e,t){var n,r,l,a,o={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){var c=[a,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(l=2&c[0]?r.return:c[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,c[1])).done)return l;switch(r=0,l&&(c=[2&c[0],l.value]),c[0]){case 0:case 1:l=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(l=(l=o.trys).length>0&&l[l.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!l||c[1]>l[0]&&c[1]<l[3])){o.label=c[1];break}if(6===c[0]&&o.label<l[1]){o.label=l[1],l=c;break}if(l&&o.label<l[2]){o.label=l[2],o.ops.push(c);break}l[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=l=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var H=function(e){var t,n,c,u,s=e.target,d=e.size,m=e.type,p=e.onTriggered,f=h(),y=(0,i.useAPIClient)(),g=(null==(c=j.useAIConfigRepository)?void 0:c.call(j))||{},v=((null==(u=j.useChatBoxActions)?void 0:u.call(j))||{}).triggerTask,b=L((0,r.useState)(!1),2),E=b[0],w=b[1],S=L((0,r.useState)([]),2),k=S[0],C=S[1],I=L((0,r.useState)(!1),2),x=I[0],O=I[1],A=L((0,r.useState)(!1),2),T=A[0],R=A[1],P=L((0,r.useState)(null),2),z=P[0],B=P[1],F=L(a.Form.useForm(),1)[0],D=(0,r.useCallback)(function(){var e=!1,t={repositoryId:s.repositoryId,targetType:s.type};return"mr"===s.type&&(t.mrIid=s.mrIid),"commit"===s.type&&(t.commitSha=s.commitSha),"branch"===s.type&&(t.branch=s.branch),y.request({url:"gitCodeReviews:list",params:{pageSize:1,sort:["-id"],filter:t}}).then(function(t){if(!e){var n;B(((null==t||null==(n=t.data)?void 0:n.data)||[])[0]||null)}}).catch(function(){}),function(){e=!0}},[y,s]);(0,r.useEffect)(function(){return D()},[D]);var H=(0,r.useCallback)(q(function(){var e,t;return N(this,function(n){switch(n.label){case 0:return[4,y.request({url:"gitReviewFlows:list",params:{pageSize:100,filter:{enabled:!0,$or:[{repositoryId:s.repositoryId},{repositoryId:null}]}}})];case 1:return C(t=(null==(e=n.sent().data)?void 0:e.data)||[]),[2,t]}})}),[y,s.repositoryId]),W=(0,r.useCallback)(function(e){var t,n=e.find(function(e){return e.repositoryId===s.repositoryId});return null!=(t=null!=n?n:e[0])?t:null},[s.repositoryId]);(0,r.useEffect)(function(){if(E){var e=!1;return H().then(function(t){if(!e){var n=W(t);(null==n?void 0:n.id)&&F.setFieldValue("flowId",n.id)}}).catch(function(){}),function(){e=!0}}},[E,H,W,F]);var _=(t=q(function(){var e,t,n,r,l,o,i,c,u,d,m;return N(this,function(h){switch(h.label){case 0:return h.trys.push([0,3,4,5]),[4,F.validateFields()];case 1:return n=h.sent(),O(!0),r={repositoryId:s.repositoryId,targetType:s.type,flowId:n.flowId,extraInstructions:n.extraInstructions||void 0},"mr"===s.type&&(r.mrIid=s.mrIid),"commit"===s.type&&(r.commitSha=s.commitSha),"branch"===s.type&&(r.branch=s.branch),[4,y.request({url:"gitManager:triggerReview",method:"post",data:r})];case 2:return o=null==(l=h.sent())||null==(t=l.data)||null==(e=t.data)?void 0:e.reviewId,a.message.success(f("Review started")),w(!1),F.resetFields(),D(),null==p||p(o),[3,5];case 3:if(null==(i=h.sent())?void 0:i.errorFields)return[2];return a.message.error((null==i||null==(m=i.response)||null==(d=m.data)||null==(u=d.errors)||null==(c=u[0])?void 0:c.message)||(null==i?void 0:i.message)||f("Failed to trigger review")),[3,5];case 4:return O(!1),[7];case 5:return[2]}})}),function(){return t.apply(this,arguments)}),G=function(){var e=s.title||K();return"mr"===s.type?{type:"git-merge-request",uid:"".concat(s.repositoryId,":").concat(s.mrIid),title:e,content:{repositoryId:s.repositoryId,mrIid:s.mrIid,title:e}}:"commit"===s.type?{type:"git-commit",uid:"".concat(s.repositoryId,":").concat(s.commitSha),title:e,content:{repositoryId:s.repositoryId,commitSha:s.commitSha,title:e}}:{type:"git-repository",uid:String(s.repositoryId),title:e,content:{repositoryId:s.repositoryId,branch:s.branch,title:e}}},$=(n=q(function(){var e,t,n,r,l,o;return N(this,function(i){switch(i.label){case 0:if(!v||!(null==g?void 0:g.getAIEmployees))return a.message.warning(f("AI plugin is not available")),[2];R(!0),i.label=1;case 1:if(i.trys.push([1,9,10,11]),!k.length)return[3,2];return t=k,[3,4];case 2:return[4,H()];case 3:t=i.sent(),i.label=4;case 4:if(!(null==(n=W(t))?void 0:n.aiEmployeeUsername))return a.message.warning(f("No matching flow available")),[2];if(!(null==(e=g.aiEmployees)?void 0:e.length))return[3,5];return r=g.aiEmployees,[3,7];case 5:return[4,g.getAIEmployees()];case 6:r=i.sent(),i.label=7;case 7:if(!(l=r.find(function(e){return e.username===n.aiEmployeeUsername})))return a.message.warning(f("AI employee not found")),[2];return[4,v({aiEmployee:l,tasks:[{title:"".concat(n.name,": ").concat(K()),message:{user:"mr"===s.type?"Please review merge request !".concat(s.mrIid," (").concat(s.title||"untitled","). Use the attached Git merge request context and the available git tools when you need more detail."):"commit"===s.type?"Please review commit ".concat(s.commitSha," (").concat(s.title||"untitled","). Use the attached Git commit context and the available git tools when you need more detail."):"Please help me inspect branch ".concat(s.branch,". Use the attached Git repository context and the available git tools when you need more detail."),system:n.instructions||void 0,workContext:[G()]},model:n.llmService&&n.model?{llmService:n.llmService,model:n.model}:null,autoSend:!1}]})];case 8:return i.sent(),[3,11];case 9:return o=i.sent(),a.message.error((null==o?void 0:o.message)||f("Failed to open AI chat")),[3,11];case 10:return R(!1),[7];case 11:return[2]}})}),function(){return n.apply(this,arguments)}),K=function(){return"mr"===s.type?"MR !".concat(s.mrIid):"commit"===s.type?"Commit ".concat(String(s.commitSha).slice(0,7)):"Branch ".concat(s.branch)},V=z&&z.headSha&&z.latestSha&&z.headSha!==z.latestSha,J=!!z&&"pending"!==z.status,Q=J?V?f("Re-review (new commits)"):f("Re-run review"):f("Code Review"),X=J?o.ReloadOutlined:o.RobotOutlined,Y=(0,r.useMemo)(function(){var e;return[{key:"run",icon:l().createElement(o.ThunderboltOutlined,null),label:J?f("Re-run automated review"):f("Run automated review"),onClick:function(){return w(!0)}}].concat(function(e){if(Array.isArray(e))return M(e)}(e=z?[{key:"view",icon:l().createElement(o.RobotOutlined,null),label:f("Status: ".concat(z.status))+" - "+f("View in Review History tab"),onClick:function(){a.message.info(f('Please switch to the "Review History" tab to see the details.'))}}]:[])||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||U(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:f("Ask AI Employee"),onClick:$,disabled:T}])},[J,z,T,$]);return l().createElement(l().Fragment,null,l().createElement(a.Dropdown,{menu:{items:Y},placement:"bottomRight",trigger:["click"]},l().createElement(a.Button,{size:void 0===d?"small":d,type:V?"primary":void 0===m?"default":m,icon:l().createElement(X,null),danger:!!V,loading:T},Q)),l().createElement(a.Modal,{title:l().createElement(a.Space,null,l().createElement(o.RobotOutlined,null),l().createElement("span",null,J?f("Re-run code review"):f("Run code review")),l().createElement("span",{style:{color:"#999",fontSize:12,fontWeight:400}},K())),open:E,onCancel:function(){return w(!1)},onOk:_,okText:J?f("Re-run"):f("Start Review"),confirmLoading:x,destroyOnClose:!0},J&&l().createElement(a.Alert,{type:V?"warning":"info",showIcon:!0,style:{marginBottom:12},message:V?f("New commits detected since last review. Re-running will overwrite the existing review."):f("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==z?void 0:z.headSha)&&l().createElement("span",null,f("Reviewed at"),":\xa0",l().createElement(a.Tag,{style:{fontFamily:"monospace"}},String(z.headSha).slice(0,7))),V&&(null==z?void 0:z.latestSha)&&l().createElement("span",null,f("Latest"),":\xa0",l().createElement(a.Tag,{color:"orange",style:{fontFamily:"monospace"}},String(z.latestSha).slice(0,7))))}),l().createElement(a.Form,{form:F,layout:"vertical"},l().createElement(a.Form.Item,{name:"flowId",label:f("Review Flow"),rules:[{required:!0,message:f("Please select a review flow")}],extra:0===k.length?l().createElement(a.Tooltip,{title:f("Create a review flow in the Review Flows tab first")},l().createElement("span",{style:{color:"#faad14"}},f("No enabled flow found for this repository"))):null},l().createElement(a.Select,{options:k.map(function(e){return{value:e.id,label:"".concat(e.name).concat(e.aiEmployeeUsername?" — @".concat(e.aiEmployeeUsername):"").concat(null==e.repositoryId?" (".concat(f("global"),")"):"")}}),placeholder:f("Select a review flow")})),l().createElement(a.Form.Item,{name:"extraInstructions",label:f("Extra instructions (optional)")},l().createElement(a.Input.TextArea,{rows:4,placeholder:f("e.g. Focus on security issues in authentication")})))))};function W(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function _(e,t,n,r,l,a,o){try{var i=e[a](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,l)}function G(e){return function(){var t=this,n=arguments;return new Promise(function(r,l){var a=e.apply(t,n);function o(e){_(a,r,l,o,i,"next",e)}function i(e){_(a,r,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 n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return W(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return W(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 K(e,t){var n,r,l,a,o={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){var c=[a,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(l=2&c[0]?r.return:c[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,c[1])).done)return l;switch(r=0,l&&(c=[2&c[0],l.value]),c[0]){case 0:case 1:l=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(l=(l=o.trys).length>0&&l[l.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!l||c[1]>l[0]&&c[1]<l[3])){o.label=c[1];break}if(6===c[0]&&o.label<l[1]){o.label=l[1],l=c;break}if(l&&o.label<l[2]){o.label=l[2],o.ops.push(c);break}l[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=l=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var V=a.Typography.Text,J=a.theme.useToken,Q={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"}},X=function(){var e,t,n,c,u=h(),s=J().token,d=(0,i.useAPIClient)(),m=f(),p=m.selectedRepo,y=m.branches,g=m.currentBranch,v=$((0,r.useState)([]),2),b=v[0],E=v[1],w=$((0,r.useState)(!1),2),S=w[0],k=w[1],C=$((0,r.useState)(null),2),I=C[0],x=C[1],O=$((0,r.useState)(null),2),A=O[0],T=O[1],R=$((0,r.useState)(!1),2),P=R[0],z=R[1],B=$((0,r.useState)(null),2),F=B[0],j=B[1],M=$((0,r.useState)(null),2),D=M[0],q=M[1],L=$((0,r.useState)(""),2),U=L[0],N=L[1],W=(0,r.useCallback)(G(function(){var e,t,n;return K(this,function(r){switch(r.label){case 0:if(!p)return[2];k(!0),r.label=1;case 1:return r.trys.push([1,,3,4]),[4,d.request({url:"gitManager:log",params:{repositoryId:p.id,maxCount:100}})];case 2:return E((null==(n=(null==(t=r.sent().data)||null==(e=t.data)?void 0:e.data)||(null==t?void 0:t.data))?void 0:n.all)||[]),[3,4];case 3:return k(!1),[7];case 4:return[2]}})}),[d,p]);(0,r.useEffect)(function(){(null==p?void 0:p.status)==="connected"?W():E([])},[p]);var _=b.filter(function(e){var t=U.trim().toLowerCase();return!t||String(e.message||e.subject||e.body||"").toLowerCase().includes(t)}),X=(e=G(function(e){var t,n;return K(this,function(r){switch(r.label){case 0:x(e),z(!0),j(null),q(null),r.label=1;case 1:return r.trys.push([1,3,4,5]),[4,d.request({url:"gitManager:commitDetail",params:{repositoryId:p.id,commitHash:e.hash}})];case 2:return T((null==(n=r.sent().data)||null==(t=n.data)?void 0:t.data)||(null==n?void 0:n.data)),[3,5];case 3:return r.sent(),T(null),[3,5];case 4:return z(!1),[7];case 5:return[2]}})}),function(t){return e.apply(this,arguments)}),ee=(t=G(function(e,t){var n,r;return K(this,function(l){switch(l.label){case 0:q(t),l.label=1;case 1:return l.trys.push([1,3,,4]),[4,d.request({url:"gitManager:diff",params:{repositoryId:p.id,commitHash:e,file:t}})];case 2:return j((null==(r=l.sent().data)||null==(n=r.data)?void 0:n.data)||(null==r?void 0:r.data)||""),[3,4];case 3:return l.sent(),j("// Failed to load diff"),[3,4];case 4:return[2]}})}),function(e,n){return t.apply(this,arguments)});if(!p)return l().createElement(a.Empty,{description:u("No repository selected")});if("connected"!==p.status)return l().createElement(a.Empty,{description:u("Repository not cloned yet")});var et=[{title:"",key:"graph",width:40,render:function(e,t,n){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===n?s.colorPrimary:s.colorBorder,border:"2px solid ".concat(0===n?s.colorPrimary:s.colorBorder),zIndex:1}}))}},{title:u("Message"),dataIndex:"message",key:"message",render:function(e,t){return l().createElement("div",null,l().createElement(V,{strong:!0,style:{fontSize:13}},e),l().createElement("div",{style:{marginTop:2}},l().createElement(V,{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}}),Z(t.date))))}},{title:"Hash",dataIndex:"hash",key:"hash",width:100,render:function(e){return l().createElement(V,{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:g,options:y.map(function(e){return{label:e,value:e}}),disabled:!0}),l().createElement(a.Input.Search,{allowClear:!0,size:"small",style:{width:280},placeholder:u("Search commit title or message"),value:U,onChange:function(e){return N(e.target.value)}}),l().createElement(V,{type:"secondary"},_.length," commits")),S?l().createElement(a.Spin,null):l().createElement(a.Table,{dataSource:_,columns:et,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:I?l().createElement("div",null,l().createElement(V,{strong:!0},I.message),l().createElement("div",null,l().createElement(V,{type:"secondary",style:{fontSize:12}},null==(n=I.hash)?void 0:n.substring(0,7)," \xb7 ",I.author_name," \xb7 ",Z(I.date)))):"Commit Detail",open:!!I,onClose:function(){x(null),T(null),j(null),q(null)},width:800,extra:I&&p?l().createElement(H,{target:{type:"commit",repositoryId:p.id,commitSha:I.hash,title:I.message},size:"small"}):null},P?l().createElement(a.Spin,null):A?l().createElement("div",null,l().createElement(V,{strong:!0},"Changed Files (",(null==(c=A.files)?void 0:c.length)||0,")"),l().createElement(a.List,{size:"small",style:{marginTop:8},dataSource:A.files||[],renderItem:function(e){var t=Q[e.status]||Q.M,n=D===e.file;return l().createElement(a.List.Item,{style:{cursor:"pointer",background:n?s.colorPrimaryBg:void 0,padding:"6px 12px",borderRadius:4},onClick:function(){return ee(I.hash,e.file)}},l().createElement(a.Space,null,l().createElement(a.Tag,{color:t.color,style:{minWidth:70,textAlign:"center"}},t.icon," ",t.label),l().createElement(V,{style:{fontSize:13}},e.file)))}}),null!==F&&l().createElement("div",{style:{marginTop:16}},l().createElement(V,{strong:!0,style:{display:"block",marginBottom:8}},l().createElement(o.FileTextOutlined,null)," ",D),l().createElement(Y,{content:F}))):null))},Y=(0,r.memo)(function(e){var t=e.content,n=J().token,r=t.split("\n");return l().createElement("div",{style:{fontFamily:"'JetBrains Mono', 'Fira Code', Consolas, monospace",fontSize:12,lineHeight:1.5,border:"1px solid ".concat(n.colorBorderSecondary),borderRadius:6,overflow:"auto",maxHeight:500}},r.map(function(e,t){var r="transparent",a=n.colorText;return e.startsWith("+")&&!e.startsWith("+++")?(r="rgba(46, 160, 67, 0.12)",a="#2ea043"):e.startsWith("-")&&!e.startsWith("---")?(r="rgba(248, 81, 73, 0.12)",a="#f85149"):e.startsWith("@@")?(r="rgba(56, 139, 253, 0.08)",a="#388bfd"):(e.startsWith("diff")||e.startsWith("index"))&&(a=n.colorTextSecondary),l().createElement("div",{key:t,style:{padding:"0 12px",background:r,color:a,whiteSpace:"pre",minHeight:20}},l().createElement("span",{style:{display:"inline-block",width:40,color:n.colorTextQuaternary,userSelect:"none",textAlign:"right",marginRight:12}},t+1),e)}))});function Z(e){if(!e)return"";var t=new Date(e),n=new Date().getTime()-t.getTime(),r=n/36e5;return r<1?"".concat(Math.round(n/6e4),"m ago"):r<24?"".concat(Math.round(r),"h ago"):r<168?"".concat(Math.round(r/24),"d ago"):t.toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"})}function ee(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function et(e,t,n,r,l,a,o){try{var i=e[a](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,l)}function en(e){return function(){var t=this,n=arguments;return new Promise(function(r,l){var a=e.apply(t,n);function o(e){et(a,r,l,o,i,"next",e)}function i(e){et(a,r,l,o,i,"throw",e)}o(void 0)})}}function er(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ee(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))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.")}()}function el(e,t){var n,r,l,a,o={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){var c=[a,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(l=2&c[0]?r.return:c[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,c[1])).done)return l;switch(r=0,l&&(c=[2&c[0],l.value]),c[0]){case 0:case 1:l=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(l=(l=o.trys).length>0&&l[l.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!l||c[1]>l[0]&&c[1]<l[3])){o.label=c[1];break}if(6===c[0]&&o.label<l[1]){o.label=l[1],l=c;break}if(l&&o.label<l[2]){o.label=l[2],o.ops.push(c);break}l[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=l=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var ea=a.Typography.Text;a.Typography.Paragraph,a.Typography.Title;var eo=a.theme.useToken,ei={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"}},ec=function(){var e,t,n,c=h(),u=eo().token,s=(0,i.useAPIClient)(),d=f().selectedRepo,m=er((0,r.useState)([]),2),p=m[0],y=m[1],g=er((0,r.useState)(!1),2),v=g[0],b=g[1],E=er((0,r.useState)("opened"),2),w=E[0],S=E[1],k=er((0,r.useState)(""),2),C=k[0],I=k[1],x=er((0,r.useState)({page:1,perPage:20,total:0,totalPages:0}),2),O=x[0],A=x[1],T=er((0,r.useState)(null),2),R=T[0],P=T[1],z=er((0,r.useState)(null),2),B=z[0],F=z[1],j=er((0,r.useState)(!1),2),M=j[0],D=j[1],q=er((0,r.useState)([]),2),L=q[0],U=q[1],N=er((0,r.useState)(!1),2);N[0],N[1];var W=(0,r.useCallback)(en(function(){var e,t,n,r=arguments;return el(this,function(l){switch(l.label){case 0:if(e=r.length>0&&void 0!==r[0]?r[0]:1,!d)return[2];b(!0),l.label=1;case 1:return l.trys.push([1,3,4,5]),[4,s.request({url:"gitManager:mergeRequests",params:{repositoryId:d.id,state:w,search:C||void 0,page:e,perPage:20}})];case 2:return y((null==(n=(null==(t=l.sent().data)?void 0:t.data)||t)?void 0:n.data)||[]),(null==n?void 0:n.pagination)&&A(n.pagination),[3,5];case 3:return l.sent(),y([]),[3,5];case 4:return b(!1),[7];case 5:return[2]}})}),[s,d,w,C]);(0,r.useEffect)(function(){(null==d?void 0:d.status)==="connected"?W(1):y([])},[d,w]);var _=(e=en(function(e){var t,n,r,l,a,o,i,c,u,m;return el(this,function(p){switch(p.label){case 0:P(e),D(!0),U([]),p.label=1;case 1:return p.trys.push([1,3,4,5]),[4,Promise.all([s.request({url:"gitManager:mergeRequestDetail",params:{repositoryId:d.id,mrIid:e.iid}}),s.request({url:"gitManager:mergeRequestNotes",params:{repositoryId:d.id,mrIid:e.iid}})])];case 2:return c=(i=er.apply(void 0,[p.sent(),2]))[0],u=i[1],F((null==c||null==(n=c.data)||null==(t=n.data)?void 0:t.data)||(null==c||null==(r=c.data)?void 0:r.data)),U(Array.isArray(m=(null==u||null==(a=u.data)||null==(l=a.data)?void 0:l.data)||(null==u||null==(o=u.data)?void 0:o.data))?m:[]),[3,5];case 3:return p.sent(),F(null),[3,5];case 4:return D(!1),[7];case 5:return[2]}})}),function(t){return e.apply(this,arguments)});if(!d)return l().createElement(a.Empty,{description:c("No repository selected")});if("connected"!==d.status)return l().createElement(a.Empty,{description:c("Repository not cloned yet")});var G=[{title:"",key:"state_icon",width:40,render:function(e,t){var n=ei[t.state]||ei.opened;return l().createElement(a.Tooltip,{title:n.label},l().createElement("span",{style:{color:u["color".concat("blue"===n.color?"Primary":"purple"===n.color?"PurpleText":"Error")]||n.color,fontSize:16}},n.icon))}},{title:c("Title"),key:"title",render:function(e,t){var n,r;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(ea,{strong:!0,style:{fontSize:13}},t.title),t.hasConflicts&&l().createElement(a.Tooltip,{title:c("Has conflicts")},l().createElement(o.ExclamationCircleOutlined,{style:{color:u.colorWarning}}))),l().createElement("div",{style:{marginTop:2}},l().createElement(ea,{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==(r=t.author)?void 0:r.username)||"Unknown",l().createElement("span",{style:{margin:"0 6px"}},"\xb7"),l().createElement(o.ClockCircleOutlined,{style:{marginRight:3}}),ef(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:u.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 n;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==(n=t.labels)?void 0:n.length)>3&&l().createElement(ea,{type:"secondary",style:{fontSize:11}},"+",t.labels.length-3))}},{title:"",key:"meta",width:120,render:function(e,t){var n;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:u.colorTextSecondary},l().createElement(o.CommentOutlined,{style:{fontSize:14,color:u.colorTextSecondary}}))),(null==(n=t.assignees)?void 0:n.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(H,{target:{type:"mr",repositoryId:d.id,mrIid:t.iid,title:t.title},size:"small"}),l().createElement(a.Tooltip,{title:c("View Details")},l().createElement(a.Button,{size:"small",icon:l().createElement(o.FileTextOutlined,null),onClick:function(e){e.stopPropagation(),_(t)}})),l().createElement(a.Tooltip,{title:c("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:w,onChange:function(e){return S(e)},options:[{label:"\uD83D\uDFE2 ".concat(c("Open")),value:"opened"},{label:"\uD83D\uDFE3 ".concat(c("Merged")),value:"merged"},{label:"\uD83D\uDD34 ".concat(c("Closed")),value:"closed"},{label:"\uD83D\uDCCB ".concat(c("All")),value:"all"}]}),l().createElement(a.Input.Search,{size:"small",style:{width:260},placeholder:c("Search merge requests..."),value:C,onChange:function(e){return I(e.target.value)},onSearch:function(){W(1)},allowClear:!0}),l().createElement(a.Button,{size:"small",icon:l().createElement(o.ReloadOutlined,null),onClick:function(){return W(1)}},c("Refresh")),l().createElement(ea,{type:"secondary",style:{fontSize:12}},null!=O.total?"".concat(O.total," ").concat(c("total")):"")),v?l().createElement(a.Spin,null):l().createElement(a.Table,{dataSource:p,columns:G,rowKey:"iid",size:"small",pagination:{current:O.page,pageSize:O.perPage,total:O.total||void 0,onChange:function(e){return W(e)},showSizeChanger:!1},onRow:function(e){return{style:{cursor:"pointer"},onClick:function(){return _(e)}}}}),l().createElement(a.Drawer,{title:R?l().createElement("div",null,l().createElement("div",{style:{display:"flex",alignItems:"center",gap:8}},(t=ei[R.state]||ei.opened,l().createElement(a.Tag,{color:t.color},t.icon," ",t.label)),R.draft&&l().createElement(a.Tag,null,"DRAFT"),l().createElement(ea,{strong:!0,style:{fontSize:15}},"!",R.iid)),l().createElement(ea,{strong:!0,style:{fontSize:16,display:"block",marginTop:4}},R.title)):c("Merge Request"),open:!!R,onClose:function(){P(null),F(null),U([])},width:900,extra:R&&l().createElement(a.Space,null,l().createElement(H,{target:{type:"mr",repositoryId:d.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")}},c("Open in GitLab")))},M?l().createElement(a.Spin,null):B?l().createElement(a.Tabs,{defaultActiveKey:"overview",items:[{key:"overview",label:c("Overview"),children:l().createElement(eu,{mr:B})},{key:"changes",label:"".concat(c("Changes")," (").concat((null==(n=B.changes)?void 0:n.length)||0,")"),children:l().createElement(ed,{changes:B.changes||[]})},{key:"comments",label:l().createElement(a.Badge,{count:L.length,size:"small",offset:[6,0]},c("Comments")),children:l().createElement(em,{notes:L})}]}):null))},eu=function(e){var t,n,r,i,c=e.mr,u=h(),s=eo().token;return l().createElement("div",null,l().createElement("div",{style:{padding:"12px 16px",background:s.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:s.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)},u("Has conflicts"))),c.description&&l().createElement("div",{style:{marginBottom:16}},l().createElement(ea,{strong:!0},u("Description")),l().createElement("div",{style:{marginTop:8,padding:"12px 16px",background:s.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(es,{label:u("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(ea,null,c.author.name),l().createElement(ea,{type:"secondary"},"@",c.author.username))}),l().createElement(es,{label:u("Assignees"),value:(null==(n=c.assignees)?void 0:n.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(ea,{type:"secondary"},"—")}),l().createElement(es,{label:u("Reviewers"),value:(null==(r=c.reviewers)?void 0:r.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(ea,{type:"secondary"},"—")}),l().createElement(es,{label:u("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(ea,{type:"secondary"},"—")}),l().createElement(es,{label:u("Created"),value:l().createElement(ea,null,ey(c.createdAt))}),l().createElement(es,{label:u("Updated"),value:l().createElement(ea,null,ey(c.updatedAt))}),c.mergedBy&&l().createElement(es,{label:u("Merged by"),value:l().createElement(ea,null,c.mergedBy.name," — ",ey(c.mergedAt))}),c.closedBy&&l().createElement(es,{label:u("Closed by"),value:l().createElement(ea,null,c.closedBy.name," — ",ey(c.closedAt))})))},es=function(e){var t=e.label,n=e.value;return l().createElement("div",null,l().createElement(ea,{type:"secondary",style:{fontSize:12,display:"block",marginBottom:2}},t),l().createElement("div",null,n))},ed=function(e){var t=e.changes,n=eo().token,o=h(),i=er((0,r.useState)(null),2),c=i[0],u=i[1];return t.length?l().createElement("div",null,t.map(function(e,t){var r=e.newPath||e.oldPath,o=c===r,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?n.colorPrimaryBg:n.colorBgLayout,borderRadius:6,cursor:"pointer",display:"flex",alignItems:"center",gap:8},onClick:function(){return u(o?null:r)}},i,l().createElement(ea,{style:{fontSize:13,fontFamily:"monospace"}},r),e.renamedFile&&e.oldPath!==e.newPath&&l().createElement(ea,{type:"secondary",style:{fontSize:11}},"(← ",e.oldPath,")")),o&&e.diff&&l().createElement(ep,{content:e.diff}))})):l().createElement(a.Empty,{description:o("No changes")})},em=function(e){var t=e.notes,n=eo().token,r=h();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:n.colorBgLayout,borderRadius:8,borderLeft:"3px solid ".concat(e.resolved?n.colorSuccess:n.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(ea,{strong:!0,style:{fontSize:13}},null==(c=e.author)?void 0:c.name),l().createElement(ea,{type:"secondary",style:{fontSize:12}},"@",null==(u=e.author)?void 0:u.username),l().createElement(ea,{type:"secondary",style:{fontSize:11,marginLeft:"auto"}},ef(e.createdAt)),e.resolvable&&l().createElement(a.Tag,{color:e.resolved?"success":"default",style:{fontSize:11}},e.resolved?r("Resolved"):r("Unresolved"))),l().createElement("div",{style:{whiteSpace:"pre-wrap",wordBreak:"break-word",fontSize:13,lineHeight:1.6}},e.body))})):l().createElement(a.Empty,{description:r("No comments")})},ep=(0,r.memo)(function(e){var t=e.content,n=eo().token,r=t.split("\n");return l().createElement("div",{style:{fontFamily:"'JetBrains Mono', 'Fira Code', Consolas, monospace",fontSize:12,lineHeight:1.5,border:"1px solid ".concat(n.colorBorderSecondary),borderRadius:6,overflow:"auto",maxHeight:400,margin:"4px 0"}},r.map(function(e,t){var r="transparent",a=n.colorText;return e.startsWith("+")&&!e.startsWith("+++")?(r="rgba(46, 160, 67, 0.12)",a="#2ea043"):e.startsWith("-")&&!e.startsWith("---")?(r="rgba(248, 81, 73, 0.12)",a="#f85149"):e.startsWith("@@")?(r="rgba(56, 139, 253, 0.08)",a="#388bfd"):(e.startsWith("diff")||e.startsWith("index"))&&(a=n.colorTextSecondary),l().createElement("div",{key:t,style:{padding:"0 12px",background:r,color:a,whiteSpace:"pre",minHeight:20}},l().createElement("span",{style:{display:"inline-block",width:40,color:n.colorTextQuaternary,userSelect:"none",textAlign:"right",marginRight:12}},t+1),e)}))});function ef(e){if(!e)return"";var t=new Date(e),n=new Date().getTime()-t.getTime(),r=n/36e5;return r<1?"".concat(Math.round(n/6e4),"m ago"):r<24?"".concat(Math.round(r),"h ago"):r<168?"".concat(Math.round(r/24),"d ago"):t.toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"})}function ey(e){return e?new Date(e).toLocaleString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):""}function eh(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function eg(e,t,n,r,l,a,o){try{var i=e[a](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,l)}function ev(e){return function(){var t=this,n=arguments;return new Promise(function(r,l){var a=e.apply(t,n);function o(e){eg(a,r,l,o,i,"next",e)}function i(e){eg(a,r,l,o,i,"throw",e)}o(void 0)})}}function eb(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||ew(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 eE(e){return function(e){if(Array.isArray(e))return eh(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||ew(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 ew(e,t){if(e){if("string"==typeof e)return eh(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return eh(e,t)}}function eS(e,t){var n,r,l,a,o={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){var c=[a,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(l=2&c[0]?r.return:c[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,c[1])).done)return l;switch(r=0,l&&(c=[2&c[0],l.value]),c[0]){case 0:case 1:l=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(l=(l=o.trys).length>0&&l[l.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!l||c[1]>l[0]&&c[1]<l[3])){o.label=c[1];break}if(6===c[0]&&o.label<l[1]){o.label=l[1],l=c;break}if(l&&o.label<l[2]){o.label=l[2],o.ops.push(c);break}l[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=l=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var ek=a.Typography.Text,eC=a.theme.useToken,eI={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"}},ex=function(){var e,t,n,c,u,s,d,m=h(),p=eC().token,y=(0,i.useAPIClient)(),g=f(),v=g.selectedRepo,b=g.refreshRepos,E=eb((0,r.useState)(null),2),w=E[0],S=E[1],k=eb((0,r.useState)(null),2),C=k[0],I=k[1],x=eb((0,r.useState)(null),2),O=x[0],A=x[1],T=(0,r.useCallback)(ev(function(){var e,t;return eS(this,function(n){switch(n.label){case 0:if(!v||"connected"!==v.status)return I(null),[2];S("status"),n.label=1;case 1:return n.trys.push([1,,3,4]),[4,y.request({url:"gitManager:status",method:"post",params:{repositoryId:v.id}})];case 2:return I((null==(t=n.sent().data)||null==(e=t.data)?void 0:e.data)||(null==t?void 0:t.data)),[3,4];case 3:return S(null),[7];case 4:return[2]}})}),[y,v]);(0,r.useEffect)(function(){T()},[T]);var R=(0,r.useCallback)((e=ev(function(e){var t,n,r,l,o,i,c,u,s;return eS(this,function(d){switch(d.label){case 0:if(!v)return[2];S(e),A(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:v.id}})];case 2:if(n=d.sent().data,A({action:e,success:!0,message:m("{{action}} completed successfully",{action:e})}),a.message.success(m("{{action}} completed",{action:e})),r=(null==n||null==(t=n.data)?void 0:t.data)||(null==n?void 0:n.data),"status"===e&&I(r),"fetch"!==e&&"pull"!==e)return[3,4];return[4,T()];case 3:d.sent(),d.label=4;case 4:return[4,b()];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)||m("{{action}} failed",{action:e}),A({action:e,success:!1,message:s}),a.message.error(s),[3,8];case 7:return S(null),[7];case 8:return[2]}})}),function(t){return e.apply(this,arguments)}),[y,v,b,T]);if(!v)return l().createElement(a.Empty,{description:m("No repository selected")});if("connected"!==v.status)return l().createElement(a.Empty,{description:m("Repository not cloned yet")});var P=C?eE((null==(t=C.not_added)?void 0:t.map(function(e){return{file:e,status:"not_added"}}))||[]).concat(eE((null==(n=C.modified)?void 0:n.map(function(e){return{file:e,status:"modified"}}))||[]),eE((null==(c=C.deleted)?void 0:c.map(function(e){return{file:e,status:"deleted"}}))||[]),eE((null==(u=C.renamed)?void 0:u.map(function(e){return{file:"string"==typeof e?e:e.to,status:"renamed"}}))||[]),eE((null==(s=C.conflicted)?void 0:s.map(function(e){return{file:e,status:"conflicted"}}))||[]),eE((null==(d=C.created)?void 0:d.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"===w,onClick:function(){return R("fetch")}},m("Fetch")),l().createElement(a.Button,{size:"large",type:"primary",icon:l().createElement(o.CloudDownloadOutlined,null),loading:"pull"===w,onClick:function(){return R("pull")}},m("Pull")),l().createElement(a.Button,{size:"large",icon:l().createElement(o.BranchesOutlined,null),loading:"status"===w,onClick:T},m("Status"))),O&&l().createElement(a.Card,{size:"small",style:{marginBottom:16,borderColor:O.success?p.colorSuccessBorder:p.colorErrorBorder}},l().createElement(a.Space,null,O.success?l().createElement(o.CheckCircleOutlined,{style:{color:p.colorSuccess}}):l().createElement(o.WarningOutlined,{style:{color:p.colorError}}),l().createElement(ek,{strong:!0},O.action),l().createElement(ek,null,O.message))),C&&l().createElement(a.Card,{title:m("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"},C.current)),l().createElement(a.Descriptions.Item,{label:"Tracking"},l().createElement(ek,null,C.tracking||"N/A")),l().createElement(a.Descriptions.Item,{label:"Changes"},l().createElement(a.Space,null,C.ahead>0&&l().createElement(a.Badge,{count:"".concat(C.ahead," ahead"),style:{backgroundColor:p.colorPrimary}}),C.behind>0&&l().createElement(a.Badge,{count:"".concat(C.behind," behind"),style:{backgroundColor:p.colorWarning}}),0===C.ahead&&0===C.behind&&l().createElement(a.Tag,{color:"green",icon:l().createElement(o.CheckCircleOutlined,null)},"Up to date")))),P.length>0?l().createElement(l().Fragment,null,l().createElement(ek,{strong:!0,style:{display:"block",marginBottom:8}},P.length," changed file(s)"),l().createElement(a.List,{size:"small",dataSource:P,renderItem:function(e){var t=eI[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(ek,{code:!0,style:{fontSize:13}},e.file)))}})):l().createElement(ek,{type:"secondary"},"Working directory clean")))};function eO(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function eA(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return eO(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return eO(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 eT=function(e){var t=e.value,n=e.onChange,o=e.allowClear,c=e.size,u=e.style,s=e.placeholder,d=(0,i.useAPIClient)(),m=eA((0,r.useState)([]),2),p=m[0],f=m[1],y=eA((0,r.useState)(!1),2),h=y[0],g=y[1];return(0,r.useEffect)(function(){var e=!1;return g(!0),d.request({url:"aiEmployees:listByUser"}).then(function(t){if(!e){var n,r=(null==t||null==(n=t.data)?void 0:n.data)||[];f(Array.isArray(r)?r:[])}}).catch(function(){}).finally(function(){e||g(!1)}),function(){e=!0}},[d]),l().createElement(a.Select,{value:t,onChange:n,allowClear:void 0===o||o,loading:h,size:c,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 eR(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function eP(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return eR(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return eR(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 ez=function(e){var t=e.value,n=e.onChange,o=e.allowClear,c=e.size,u=e.style,s=e.placeholder,d=(0,i.useAPIClient)(),m=eP((0,r.useState)([]),2),p=m[0],f=m[1],y=eP((0,r.useState)(!1),2),h=y[0],g=y[1];return(0,r.useEffect)(function(){var e=!1;return g(!0),d.request({url:"ai:listAllEnabledModels"}).then(function(t){if(!e){var n,r=(null==t||null==(n=t.data)?void 0:n.data)||[];f(Array.isArray(r)?r:[])}}).catch(function(){}).finally(function(){e||g(!1)}),function(){e=!0}},[d]),l().createElement(a.Select,{value:t,onChange:n,allowClear:void 0===o||o,loading:h,size:c,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 eB(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function eF(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return eB(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return eB(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 ej=function(e){var t=e.llmService,n=e.value,o=e.onChange,c=e.allowClear,u=e.size,s=e.style,d=e.placeholder,m=(0,i.useAPIClient)(),p=eF((0,r.useState)([]),2),f=p[0],y=p[1],h=eF((0,r.useState)(!1),2),g=h[0],v=h[1];return(0,r.useEffect)(function(){var e=!1;return t?(v(!0),m.request({url:"ai:listModels",params:{llmService:t}}).then(function(t){if(!e){var n,r=(null==t||null==(n=t.data)?void 0:n.data)||[];y(Array.isArray(r)?r:[])}}).catch(function(){e||y([])}).finally(function(){e||v(!1)}),function(){e=!0}):void y([])},[m,t]),l().createElement(a.Select,{value:n,onChange:o,allowClear:void 0===c||c,loading:g,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 eM(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function eD(e,t,n,r,l,a,o){try{var i=e[a](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,l)}function eq(e){return function(){var t=this,n=arguments;return new Promise(function(r,l){var a=e.apply(t,n);function o(e){eD(a,r,l,o,i,"next",e)}function i(e){eD(a,r,l,o,i,"throw",e)}o(void 0)})}}function eL(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return eM(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return eM(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 eU(e,t){var n,r,l,a,o={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){var c=[a,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(l=2&c[0]?r.return:c[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,c[1])).done)return l;switch(r=0,l&&(c=[2&c[0],l.value]),c[0]){case 0:case 1:l=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(l=(l=o.trys).length>0&&l[l.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!l||c[1]>l[0]&&c[1]<l[3])){o.label=c[1];break}if(6===c[0]&&o.label<l[1]){o.label=l[1],l=c;break}if(l&&o.label<l[2]){o.label=l[2],o.ops.push(c);break}l[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=l=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var eN={manual:"Manual",onMergeRequestCreated:"On MR Created",both:"Both"},eH={auto:"Auto",manual:"Manual",disabled:"Disabled"},eW=function(){var e,t,n=h(),c=(0,i.useAPIClient)(),u=f().repos,s=eL((0,r.useState)([]),2),d=s[0],m=s[1],p=eL((0,r.useState)(!1),2),y=p[0],g=p[1],v=eL((0,r.useState)(null),2),b=v[0],E=v[1],w=eL((0,r.useState)(!1),2),S=w[0],k=w[1],C=eL(a.Form.useForm(),1)[0],I=(0,r.useCallback)(eq(function(){var e;return eU(this,function(t){switch(t.label){case 0:g(!0),t.label=1;case 1:return t.trys.push([1,,3,4]),[4,c.request({url:"gitReviewFlows:list",params:{pageSize:100}})];case 2:return m((null==(e=t.sent().data)?void 0:e.data)||[]),[3,4];case 3:return g(!1),[7];case 4:return[2]}})}),[c]);(0,r.useEffect)(function(){I()},[I]);var x=(e=eq(function(){var e,t,r,l,o,i;return eU(this,function(u){switch(u.label){case 0:return u.trys.push([0,6,,7]),[4,C.validateFields()];case 1:if((void 0===(e=u.sent()).repositoryId||""===e.repositoryId)&&(e.repositoryId=null),!(null==b?void 0:b.id))return[3,3];return[4,c.request({url:"gitReviewFlows:update",method:"post",params:{filterByTk:b.id},data:e})];case 2:return u.sent(),a.message.success(n("Flow updated")),[3,5];case 3:return[4,c.request({url:"gitReviewFlows:create",method:"post",data:e})];case 4:u.sent(),a.message.success(n("Flow created")),u.label=5;case 5:return k(!1),E(null),C.resetFields(),I(),[3,7];case 6:if(null==(t=u.sent())?void 0:t.errorFields)return[2];return a.message.error((null==t||null==(i=t.response)||null==(o=i.data)||null==(l=o.errors)||null==(r=l[0])?void 0:r.message)||(null==t?void 0:t.message)||n("Failed to save")),[3,7];case 7:return[2]}})}),function(){return e.apply(this,arguments)}),O=(t=eq(function(e){var t;return eU(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,c.request({url:"gitReviewFlows:destroy",method:"post",params:{filterByTk:e}})];case 1:return r.sent(),a.message.success(n("Flow deleted")),I(),[3,3];case 2:return t=r.sent(),a.message.error((null==t?void 0:t.message)||n("Failed to delete")),[3,3];case 3:return[2]}})}),function(e){return t.apply(this,arguments)}),A=function(e){E(e),C.setFieldsValue(e),k(!0)},T=[{title:n("Name"),dataIndex:"name",render:function(e,t){return l().createElement(a.Space,null,l().createElement("span",{style:{fontWeight:500}},e),!t.enabled&&l().createElement(a.Tag,{color:"default"},n("Disabled")))}},{title:n("Repository"),dataIndex:"repositoryId",render:function(e){if(null==e)return l().createElement(a.Tag,{color:"purple"},n("Global"));var t=u.find(function(t){return t.id===e});return t?l().createElement(a.Space,{size:4},l().createElement(o.BranchesOutlined,null),t.name):"#".concat(e)}},{title:n("AI Employee"),dataIndex:"aiEmployeeUsername",render:function(e){return e?l().createElement(a.Tag,{color:"blue"},"@",e):l().createElement("span",{style:{color:"#999"}},"—")}},{title:n("Trigger"),dataIndex:"triggerMode",render:function(e){return l().createElement(a.Tag,null,n(eN[e]||e))}},{title:n("Post"),dataIndex:"postMode",render:function(e){return l().createElement(a.Tag,{color:"auto"===e?"green":"manual"===e?"orange":"default"},n(eH[e]||e))}},{title:"",key:"actions",width:100,render:function(e,t){return l().createElement(a.Space,null,l().createElement(a.Tooltip,{title:n("Edit")},l().createElement(a.Button,{size:"small",icon:l().createElement(o.EditOutlined,null),onClick:function(){return A(t)}})),l().createElement(a.Popconfirm,{title:n("Delete this flow?"),onConfirm:function(){return O(t.id)}},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(){E(null),C.resetFields(),C.setFieldsValue({enabled:!0,triggerMode:"manual",postMode:"manual"}),k(!0)}},n("Add Review Flow")),l().createElement(a.Button,{onClick:I,loading:y},n("Refresh"))),l().createElement(a.Table,{size:"small",rowKey:"id",loading:y,dataSource:d,columns:T,locale:{emptyText:l().createElement(a.Empty,{description:n("No review flows yet")})},pagination:{pageSize:20}}),l().createElement(a.Modal,{title:(null==b?void 0:b.id)?n("Edit Review Flow"):n("Add Review Flow"),open:S,onCancel:function(){k(!1),E(null),C.resetFields()},onOk:x,width:640,destroyOnClose:!0},l().createElement(a.Form,{form:C,layout:"vertical"},l().createElement(a.Form.Item,{name:"name",label:n("Name"),rules:[{required:!0}]},l().createElement(a.Input,{placeholder:n("e.g. Default review flow")})),l().createElement(a.Form.Item,{name:"repositoryId",label:n("Repository"),extra:n("Leave empty to apply to all repositories")},l().createElement(a.Select,{allowClear:!0,placeholder:n("All repositories (global)"),options:u.map(function(e){return{value:e.id,label:e.name}})})),l().createElement(a.Form.Item,{name:"aiEmployeeUsername",label:n("AI Employee"),rules:[{required:!0}]},l().createElement(eT,{placeholder:n("Select an AI employee")})),l().createElement(a.Space.Compact,{style:{width:"100%"}},l().createElement(a.Form.Item,{name:"llmService",label:n("LLM Service (optional)"),style:{flex:1,marginRight:8}},l().createElement(ez,{placeholder:n("Override flow LLM service")})),l().createElement(a.Form.Item,{noStyle:!0,shouldUpdate:function(e,t){return e.llmService!==t.llmService}},function(e){var t=(0,e.getFieldValue)("llmService");return l().createElement(a.Form.Item,{name:"model",label:n("Model (optional)"),style:{flex:1}},t?l().createElement(ej,{llmService:t,placeholder:n("Override LLM model")}):l().createElement(a.Input,{placeholder:n("Select an LLM service first"),disabled:!0}))})),l().createElement(a.Form.Item,{name:"triggerMode",label:n("Trigger Mode"),rules:[{required:!0}],extra:n("Auto modes require enabling Auto Review on the repository")},l().createElement(a.Select,{options:[{value:"manual",label:n("Manual")},{value:"onMergeRequestCreated",label:n("On Merge Request Created")},{value:"both",label:n("Both")}]})),l().createElement(a.Form.Item,{name:"postMode",label:n("Post Mode"),rules:[{required:!0}]},l().createElement(a.Select,{options:[{value:"auto",label:n("Auto post to MR")},{value:"manual",label:n("Manual approval before posting")},{value:"disabled",label:n("Do not post")}]})),l().createElement(a.Form.Item,{name:"branchFilter",label:n("Branch Filter (regex, optional)")},l().createElement(a.Input,{placeholder:"^(feature|hotfix)/.*$"})),l().createElement(a.Form.Item,{name:"instructions",label:n("Additional Instructions (optional)")},l().createElement(a.Input.TextArea,{rows:4,placeholder:n("Extra guidance appended to every review prompt")})),l().createElement(a.Form.Item,{name:"enabled",label:n("Enabled"),valuePropName:"checked"},l().createElement(a.Switch,null)))))},e_=n(457),eG=a.theme.useToken,e$=function(e){var t=e.content,n=e.maxHeight,r=eG().token;return t?l().createElement("div",{style:{fontSize:13,lineHeight:1.65,color:r.colorText,maxHeight:n,overflow:n?"auto":void 0}},l().createElement(e_.UG,{components:{code:function(e){var t,n,a=e.inline,o=e.children,i=function(e,t){if(null==e)return{};var n,r,l=function(e,t){if(null==e)return{};var n,r,l={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}(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 n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({},i),n=n={style:{background:r.colorBgLayout,padding:"1px 6px",borderRadius:4,fontSize:12,fontFamily:"'JetBrains Mono', 'Fira Code', Consolas, monospace"}},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t),c):l().createElement("pre",{style:{background:r.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(r.colorBorder),paddingLeft:12,color:r.colorTextSecondary,margin:"8px 0"}},t)}}},t)):null};function eK(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function eV(e,t,n,r,l,a,o){try{var i=e[a](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,l)}function eJ(e){return function(){var t=this,n=arguments;return new Promise(function(r,l){var a=e.apply(t,n);function o(e){eV(a,r,l,o,i,"next",e)}function i(e){eV(a,r,l,o,i,"throw",e)}o(void 0)})}}function eQ(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return eK(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))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 eX(e,t){var n,r,l,a,o={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){var c=[a,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(l=2&c[0]?r.return:c[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,c[1])).done)return l;switch(r=0,l&&(c=[2&c[0],l.value]),c[0]){case 0:case 1:l=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(l=(l=o.trys).length>0&&l[l.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!l||c[1]>l[0]&&c[1]<l[3])){o.label=c[1];break}if(6===c[0]&&o.label<l[1]){o.label=l[1],l=c;break}if(l&&o.label<l[2]){o.label=l[2],o.ops.push(c);break}l[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=l=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var eY=a.Typography.Text;a.Typography.Title,a.Typography.Paragraph;var eZ=a.theme.useToken,e0={pending:"default",running:"blue",completed:"green",failed:"red"},e1={pending_approval:"orange",approved:"cyan",posted:"green",skipped:"default",rejected:"red"},e2=function(e){var t,n,c,u=e.initialFilter,s=h();eZ().token;var d=(0,i.useAPIClient)(),m=f().repos,p=eQ((0,r.useState)([]),2),y=p[0],g=p[1],v=eQ((0,r.useState)(!1),2),b=v[0],E=v[1],w=eQ((0,r.useState)("all"),2),S=w[0],k=w[1],C=eQ((0,r.useState)("pending_approval"===(void 0===u?"all":u)?"pending_approval":"all"),2),I=C[0],x=C[1],O=eQ((0,r.useState)("all"),2),A=O[0],T=O[1],R=eQ((0,r.useState)(null),2),P=R[0],z=R[1],B=eQ((0,r.useState)(!1),2),F=B[0],j=B[1],M=eQ((0,r.useState)(""),2),D=M[0],q=M[1],L=(0,r.useCallback)(eJ(function(){var e,t;return eX(this,function(n){switch(n.label){case 0:E(!0),n.label=1;case 1:return n.trys.push([1,,3,4]),e={},"all"!==S&&(e.status=S),"all"!==I&&(e.postStatus=I),"all"!==A&&(e.triggeredBy=A),[4,d.request({url:"gitCodeReviews:list",params:{pageSize:50,sort:["-id"],filter:Object.keys(e).length?e:void 0}})];case 2:return g((null==(t=n.sent().data)?void 0:t.data)||[]),[3,4];case 3:return E(!1),[7];case 4:return[2]}})}),[d,S,I,A]);(0,r.useEffect)(function(){L()},[L]),(0,r.useEffect)(function(){if(y.some(function(e){return"running"===e.status||"pending"===e.status})){var e=setInterval(L,4e3);return function(){return clearInterval(e)}}},[y,L]);var U=(0,r.useCallback)((t=eJ(function(e){var t,n;return eX(this,function(r){switch(r.label){case 0:return[4,d.request({url:"gitCodeReviews:get",params:{filterByTk:e}})];case 1:return(n=null==(t=r.sent().data)?void 0:t.data)&&(g(function(t){return t.map(function(t){return t.id===e?n:t})}),(null==P?void 0:P.id)===e&&z(n)),[2]}})}),function(e){return t.apply(this,arguments)}),[d,P]),N=(n=eJ(function(e){var t,n,r,l,o;return eX(this,function(i){switch(i.label){case 0:if(!P)return[2];i.label=1;case 1:return i.trys.push([1,3,,4]),[4,d.request({url:"gitManager:reviewApprovePost",method:"post",data:{reviewId:P.id,editedMarkdown:e}})];case 2:return i.sent(),a.message.success(s("Review posted to merge request")),j(!1),U(P.id),L(),[3,4];case 3:return t=i.sent(),a.message.error((null==t||null==(o=t.response)||null==(l=o.data)||null==(r=l.errors)||null==(n=r[0])?void 0:n.message)||(null==t?void 0:t.message)||s("Failed to post review")),[3,4];case 4:return[2]}})}),function(e){return n.apply(this,arguments)}),H=(c=eJ(function(){var e;return eX(this,function(t){switch(t.label){case 0:if(!P)return[2];t.label=1;case 1:return t.trys.push([1,3,,4]),[4,d.request({url:"gitManager:reviewReject",method:"post",data:{reviewId:P.id}})];case 2:return t.sent(),a.message.success(s("Review rejected")),U(P.id),L(),[3,4];case 3:return e=t.sent(),a.message.error((null==e?void 0:e.message)||s("Failed to reject")),[3,4];case 4:return[2]}})}),function(){return c.apply(this,arguments)}),W=(0,r.useMemo)(function(){var e={};return m.forEach(function(t){return e[t.id]=t}),e},[m]),_=[{title:s("Target"),key:"target",render:function(e,t){var n=W[t.repositoryId],r=(null==n?void 0:n.name)||"#".concat(t.repositoryId);return"mr"===t.targetType?l().createElement(a.Space,{size:4},l().createElement(eY,{strong:!0},r),l().createElement(eY,{type:"secondary"},"!",t.mrIid)):"commit"===t.targetType?l().createElement(a.Space,{size:4},l().createElement(eY,{strong:!0},r),l().createElement(eY,{type:"secondary",style:{fontFamily:"monospace"}},String(t.commitSha||"").slice(0,7))):l().createElement(a.Space,{size:4},l().createElement(eY,{strong:!0},r),l().createElement(eY,{type:"secondary"},t.branch))}},{title:s("Type"),dataIndex:"targetType",width:80,render:function(e){return l().createElement(a.Tag,null,s(e.toUpperCase()))}},{title:s("Status"),dataIndex:"status",width:120,render:function(e){var t=e0[e]||"default",n="running"===e?l().createElement(o.ClockCircleOutlined,{spin:!0}):null;return l().createElement(a.Tag,{color:t,icon:n},s(e))}},{title:s("Post Status"),dataIndex:"postStatus",width:140,render:function(e){return l().createElement(a.Tag,{color:e1[e]||"default"},s(e))}},{title:s("Commit"),key:"sha",width:140,render:function(e,t){var n=t.headSha,r=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&&r&&n!==r&&l().createElement(a.Tooltip,{title:"".concat(s("New commits"),": ").concat(String(r).slice(0,7))},l().createElement(a.Tag,{color:"orange",style:{fontSize:11}},s("new")))):l().createElement(eY,{type:"secondary"},"—")}},{title:s("Trigger"),dataIndex:"triggeredBy",width:90,render:function(e){return l().createElement(a.Tag,{color:"poll"===e?"geekblue":"default",style:{fontSize:11}},"poll"===e?s("Polling"):s("Manual"))}},{title:s("Duration"),dataIndex:"durationMs",width:90,render:function(e){return e?"".concat((e/1e3).toFixed(1),"s"):"—"}},{title:s("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:s("View")},l().createElement(a.Button,{size:"small",icon:l().createElement(o.FileTextOutlined,null),onClick:function(){z(t),j(!1),q(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:S,onChange:k,options:[{value:"all",label:s("All statuses")},{value:"pending",label:s("pending")},{value:"running",label:s("running")},{value:"completed",label:s("completed")},{value:"failed",label:s("failed")}]}),l().createElement(a.Select,{size:"small",style:{width:180},value:I,onChange:x,options:[{value:"all",label:s("All post statuses")},{value:"pending_approval",label:s("pending_approval")},{value:"approved",label:s("approved")},{value:"posted",label:s("posted")},{value:"skipped",label:s("skipped")},{value:"rejected",label:s("rejected")}]}),l().createElement(a.Select,{size:"small",style:{width:130},value:A,onChange:T,options:[{value:"all",label:s("All triggers")},{value:"manual",label:s("Manual")},{value:"poll",label:s("Polling")}]}),l().createElement(a.Button,{size:"small",icon:l().createElement(o.ReloadOutlined,null),onClick:L},s("Refresh"))),l().createElement(a.Table,{size:"small",rowKey:"id",loading:b,dataSource:y,columns:_,locale:{emptyText:l().createElement(a.Empty,{description:s("No reviews yet")})},pagination:{pageSize:20},onRow:function(e){return{style:{cursor:"pointer"},onClick:function(){z(e),j(!1),q(e.reviewMarkdown||"")}}}}),l().createElement(a.Drawer,{title:P?l().createElement(a.Space,null,l().createElement(o.RobotOutlined,null),l().createElement("span",null,s("Code Review")),l().createElement(a.Tag,{color:e0[P.status]},s(P.status)),l().createElement(a.Tag,{color:e1[P.postStatus]},s(P.postStatus))):s("Code Review"),open:!!P,onClose:function(){z(null),j(!1)},width:840,extra:P&&l().createElement(a.Space,null,l().createElement(a.Button,{size:"small",icon:l().createElement(o.ReloadOutlined,null),onClick:function(){return U(P.id)}},s("Refresh")),"mr"===P.targetType&&l().createElement(a.Button,{size:"small",icon:l().createElement(o.ExportOutlined,null),onClick:function(){var e,t=W[P.repositoryId],n=null==t||null==(e=t.repoUrl)?void 0:e.replace(/\.git$/,"");n&&P.mrIid&&window.open("".concat(n,"/-/merge_requests/").concat(P.mrIid),"_blank")}},s("Open MR")))},P&&l().createElement(e3,{review:P,editing:F,editedMarkdown:D,onEdit:function(){return j(!0)},onCancelEdit:function(){j(!1),q(P.reviewMarkdown||"")},onChangeMarkdown:q,onApprove:N,onReject:H})))},e3=function(e){var t=e.review,n=e.editing,r=e.editedMarkdown,i=e.onEdit,c=e.onCancelEdit,u=e.onChangeMarkdown,s=e.onApprove,d=e.onReject,m=h(),p=eZ().token,f="completed"===t.status&&"mr"===t.targetType&&("pending_approval"===t.postStatus||"approved"===t.postStatus);return l().createElement("div",null,"running"===t.status&&l().createElement(a.Alert,{type:"info",showIcon:!0,message:m("Review in progress…"),description:m("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:m("Review failed"),description:l().createElement("pre",{style:{whiteSpace:"pre-wrap",margin:0}},t.error),style:{marginBottom:16}}),f&&l().createElement(a.Space,{style:{marginBottom:16},wrap:!0},n?l().createElement(l().Fragment,null,l().createElement(a.Button,{type:"primary",icon:l().createElement(o.CheckOutlined,null),onClick:function(){return s(r)}},m("Save & Post")),l().createElement(a.Button,{onClick:c},m("Cancel"))):l().createElement(l().Fragment,null,l().createElement(a.Button,{type:"primary",icon:l().createElement(o.CheckOutlined,null),onClick:function(){return s(t.reviewMarkdown)}},m("Approve & Post")),l().createElement(a.Button,{icon:l().createElement(o.EditOutlined,null),onClick:i},m("Edit & Post")),l().createElement(a.Popconfirm,{title:m("Reject this review?"),onConfirm:d},l().createElement(a.Button,{danger:!0,icon:l().createElement(o.CloseOutlined,null)},m("Reject"))))),l().createElement(a.Tabs,{defaultActiveKey:"content",items:[{key:"content",label:m("Review Content"),children:n?l().createElement(a.Input.TextArea,{value:r,onChange:function(e){return u(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:p.colorBgLayout,padding:16,borderRadius:8,maxHeight:"70vh",overflowY:"auto"}},l().createElement(e$,{content:t.reviewMarkdown})):l().createElement(a.Empty,{description:m("No content yet")})},{key:"metadata",label:m("Metadata"),children:l().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"8px 16px",fontSize:13}},l().createElement(e4,{label:m("Status"),value:t.status}),l().createElement(e4,{label:m("Post Status"),value:t.postStatus}),l().createElement(e4,{label:m("Trigger Type"),value:t.targetType}),l().createElement(e4,{label:m("Triggered By"),value:t.triggeredBy}),l().createElement(e4,{label:m("Reviewed SHA"),value:t.headSha||"—"}),l().createElement(e4,{label:m("Latest SHA"),value:t.latestSha||"—"}),l().createElement(e4,{label:m("Started At"),value:t.startedAt&&new Date(t.startedAt).toLocaleString()}),l().createElement(e4,{label:m("Finished At"),value:t.finishedAt&&new Date(t.finishedAt).toLocaleString()}),l().createElement(e4,{label:m("Duration"),value:t.durationMs?"".concat((t.durationMs/1e3).toFixed(1),"s"):"—"}),l().createElement(e4,{label:m("Posted Note ID"),value:t.postedNoteId||"—"}),l().createElement(e4,{label:m("Approved By"),value:t.approvedBy||"—"}),l().createElement(e4,{label:m("Approved At"),value:t.approvedAt&&new Date(t.approvedAt).toLocaleString()}),l().createElement(e4,{label:m("Session ID"),value:t.sessionId||"—"}),l().createElement(e4,{label:m("Flow ID"),value:t.flowId||"—"}))}]}))},e4=function(e){var t=e.label,n=e.value;return l().createElement("div",null,l().createElement(eY,{type:"secondary",style:{fontSize:12,display:"block"}},t),l().createElement("div",{style:{wordBreak:"break-all"}},n||"—"))};function e6(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function e5(e,t,n,r,l,a,o){try{var i=e[a](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,l)}function e8(e){return function(){var t=this,n=arguments;return new Promise(function(r,l){var a=e.apply(t,n);function o(e){e5(a,r,l,o,i,"next",e)}function i(e){e5(a,r,l,o,i,"throw",e)}o(void 0)})}}function e7(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return e6(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return e6(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 e9(e,t){var n,r,l,a,o={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){var c=[a,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(l=2&c[0]?r.return:c[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,c[1])).done)return l;switch(r=0,l&&(c=[2&c[0],l.value]),c[0]){case 0:case 1:l=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(l=(l=o.trys).length>0&&l[l.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!l||c[1]>l[0]&&c[1]<l[3])){o.label=c[1];break}if(6===c[0]&&o.label<l[1]){o.label=l[1],l=c;break}if(l&&o.label<l[2]){o.label=l[2],o.ops.push(c);break}l[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=l=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var te=a.Typography.Text,tt=a.theme.useToken,tn=function(){var e,t,n=h();tt().token;var c=(0,i.useAPIClient)(),u=f(),s=u.repos,d=u.refreshRepos,m=e7((0,r.useState)(null),2),p=m[0],y=m[1],g=e7((0,r.useState)(!1),2),v=g[0],b=g[1],E=e7((0,r.useState)(null),2),w=E[0],S=E[1],k=e7((0,r.useState)([]),2),C=k[0],I=k[1],x=(0,r.useCallback)(e8(function(){var e,t,n,r;return e9(this,function(l){switch(l.label){case 0:b(!0),l.label=1;case 1:return l.trys.push([1,,4,5]),[4,Promise.all([c.request({url:"gitManager:pollerStatus"}),c.request({url:"gitReviewFlows:list",params:{pageSize:100,filter:{enabled:!0,triggerMode:{$in:["onMergeRequestCreated","both"]}}}})])];case 2:return n=(t=e7.apply(void 0,[l.sent(),2]))[0].data,r=t[1],y((null==n?void 0:n.data)||null),I((null==r||null==(e=r.data)?void 0:e.data)||[]),[4,d()];case 3:return l.sent(),[3,5];case 4:return b(!1),[7];case 5:return[2]}})}),[c,d]);(0,r.useEffect)(function(){x()},[x]);var O=(e=e8(function(){var e,t,r,l,o,i,u,s,d;return e9(this,function(m){switch(m.label){case 0:S("all"),m.label=1;case 1:return m.trys.push([1,3,4,5]),[4,c.request({url:"gitManager:pollNow",method:"post"})];case 2:return t=(null==(e=m.sent().data)?void 0:e.data)||{},a.message.success(n("Polled {{scanned}} MRs, triggered {{triggered}} reviews",{scanned:null!=(r=t.scanned)?r:0,triggered:null!=(l=t.triggered)?l:0})),x(),[3,5];case 3:return o=m.sent(),a.message.error((null==o||null==(d=o.response)||null==(s=d.data)||null==(u=s.errors)||null==(i=u[0])?void 0:i.message)||(null==o?void 0:o.message)||n("Failed")),[3,5];case 4:return S(null),[7];case 5:return[2]}})}),function(){return e.apply(this,arguments)}),A=(t=e8(function(e){var t,r,l,o,i,u,s,d,m;return e9(this,function(p){switch(p.label){case 0:S(e),p.label=1;case 1:return p.trys.push([1,3,4,5]),[4,c.request({url:"gitManager:pollNow",method:"post",data:{repositoryId:e}})];case 2:return r=(null==(t=p.sent().data)?void 0:t.data)||{},a.message.success(n("Polled {{scanned}} MRs, triggered {{triggered}} reviews",{scanned:null!=(l=r.scanned)?l:0,triggered:null!=(o=r.triggered)?o:0})),x(),[3,5];case 3:return i=p.sent(),a.message.error((null==i||null==(m=i.response)||null==(d=m.data)||null==(s=d.errors)||null==(u=s[0])?void 0:u.message)||(null==i?void 0:i.message)||n("Failed")),[3,5];case 4:return S(null),[7];case 5:return[2]}})}),function(e){return t.apply(this,arguments)}),T=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),n("Polling Status")),extra:l().createElement(a.Space,null,l().createElement(a.Button,{size:"small",type:"primary",icon:l().createElement(o.ThunderboltOutlined,null),onClick:O,loading:"all"===w,disabled:0===T.length},n("Poll Now (All)")),l().createElement(a.Button,{size:"small",icon:l().createElement(o.ReloadOutlined,null),onClick:x,loading:v},n("Refresh")))},l().createElement(a.Space,{direction:"vertical",size:4,style:{width:"100%"}},l().createElement(a.Space,null,l().createElement(te,{type:"secondary"},n("Background poller"),":"),l().createElement(a.Tag,{color:(null==p?void 0:p.running)?"green":"default"},(null==p?void 0:p.running)?n("Running"):n("Stopped")),(null==p?void 0:p.polling)&&l().createElement(a.Tag,{color:"blue"},n("Polling now…"))),l().createElement(a.Space,null,l().createElement(te,{type:"secondary"},n("Interval"),":"),l().createElement(te,null,(null==p?void 0:p.intervalSec)?"".concat(p.intervalSec,"s"):"—")),l().createElement(a.Space,null,l().createElement(te,{type:"secondary"},n("Last tick"),":"),l().createElement(te,null,(null==p?void 0:p.lastTickAt)?new Date(p.lastTickAt).toLocaleString():n("Never"))),(null==p?void 0:p.lastError)&&l().createElement(a.Space,null,l().createElement(te,{type:"secondary"},n("Last error"),":"),l().createElement(te,{type:"danger",style:{fontSize:12}},p.lastError)))),l().createElement(a.Card,{size:"small",title:l().createElement(a.Space,null,l().createElement(o.RobotOutlined,null),n("Auto-Review Repositories")),extra:l().createElement(te,{type:"secondary",style:{fontSize:12}},n("Toggle Auto Review on the Repositories tab to enable polling"))},0===T.length?l().createElement(a.Empty,{description:n("No repositories have Auto Review enabled")}):l().createElement(a.Table,{size:"small",rowKey:"id",dataSource:T,pagination:!1,columns:[{title:n("Repository Name"),dataIndex:"name"},{title:n("Primary Auto Flow"),dataIndex:"autoReviewFlowId",width:220,render:function(e,t){var r=C.find(function(t){return Number(t.id)===Number(e)}),o=C.find(function(e){return e.repositoryId===t.id||null==e.repositoryId});return r?l().createElement(a.Tag,{color:"blue"},r.name):o?l().createElement(a.Tag,{color:"default"},n("Fallback"),": ",o.name):l().createElement(a.Tag,{color:"red"},n("No matching flow available"))}},{title:n("Last Polled At"),dataIndex:"lastPolledAt",width:200,render:function(e){return e?new Date(e).toLocaleString():n("Never")}},{title:"",key:"actions",width:120,render:function(e,t){return l().createElement(a.Tooltip,{title:n("Poll this repository now")},l().createElement(a.Button,{size:"small",icon:l().createElement(o.ThunderboltOutlined,null),onClick:function(){return A(t.id)},loading:w===t.id},n("Poll Now")))}}]})))},tr=a.Typography.Text,tl=a.theme.useToken,ta=function(){var e=h(),t=tl().token,n=f(),i=n.repos,c=n.selectedRepo,u=n.setSelectedRepo,s=n.refreshRepos;return(0,r.useEffect)(function(){s()},[]),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(tr,{strong:!0},"Repository:"),l().createElement(a.Select,{style:{minWidth:250},placeholder:e("Select a repository"),value:null==c?void 0:c.id,onChange:function(e){u(i.find(function(t){return t.id===e})||null)},options:i.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 u(null)}}),c&&l().createElement(tr,{type:"secondary",style:{fontSize:12}},c.repoUrl)),l().createElement(a.Tabs,{type:"card",defaultActiveKey:"repos",destroyInactiveTabPane:!0,items:[{key:"repos",label:l().createElement("span",null,l().createElement(o.DatabaseOutlined,null)," ",e("Repositories")),children:l().createElement(S,null)},{key:"explorer",label:l().createElement("span",null,l().createElement(o.FolderOutlined,null)," ",e("File Explorer")),children:l().createElement(F,null)},{key:"history",label:l().createElement("span",null,l().createElement(o.HistoryOutlined,null)," ",e("History")),children:l().createElement(X,null)},{key:"merge-requests",label:l().createElement("span",null,l().createElement(o.MergeOutlined,null)," ",e("Merge Requests")),children:l().createElement(ec,null)},{key:"operations",label:l().createElement("span",null,l().createElement(o.ToolOutlined,null)," ",e("Operations")),children:l().createElement(ex,null)},{key:"review-flows",label:l().createElement("span",null,l().createElement(o.RobotOutlined,null)," ",e("Review Flows")),children:l().createElement(eW,null)},{key:"review-history",label:l().createElement("span",null,l().createElement(o.AuditOutlined,null)," ",e("Review History")),children:l().createElement(e2,null)},{key:"polling",label:l().createElement("span",null,l().createElement(o.ClockCircleOutlined,null)," ",e("Polling")),children:l().createElement(tn,null)}]}))},to=function(){return l().createElement(y,null,l().createElement(ta,null))}}}]);
@@ -19,7 +19,7 @@ type Target = {
19
19
  * Button that lets the user kick off a code review for a given target.
20
20
  * Two paths:
21
21
  * - "Run review" → POST gitManager:triggerReview (server-side, async)
22
- * - "Open chat" → call useChatBoxActions().triggerTask if plugin-ai is loaded,
22
+ * - "Open chat" → call (aiClient as any).useChatBoxActions?.() || {}.triggerTask if plugin-ai is loaded,
23
23
  * so the user can chat with the AI employee using the same context.
24
24
  */
25
25
  export declare const RunReviewButton: React.FC<{
@@ -6,6 +6,8 @@ interface Repository {
6
6
  localPath: string;
7
7
  defaultBranch: string;
8
8
  status: string;
9
+ autoReview?: boolean;
10
+ autoReviewFlowId?: number | null;
9
11
  }
10
12
  interface GitManagerContextType {
11
13
  repos: Repository[];
@@ -7,4 +7,4 @@
7
7
  * For more information, please refer to: https://www.nocobase.com/agreement.
8
8
  */
9
9
 
10
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@nocobase/client"),require("react"),require("@ant-design/icons"),require("antd")):"function"==typeof define&&define.amd?define("plugin-git-manager",["@nocobase/client","react","@ant-design/icons","antd"],t):"object"==typeof exports?exports["plugin-git-manager"]=t(require("@nocobase/client"),require("react"),require("@ant-design/icons"),require("antd")):e["plugin-git-manager"]=t(e["@nocobase/client"],e.react,e["@ant-design/icons"],e.antd)}(self,function(e,t,n,r){return function(){var o,i,u,a,l,c,s={41:function(e){e.exports=function(e,t){return"undefined"!=typeof __deoptimization_sideEffect__&&__deoptimization_sideEffect__(e,t),t}},482:function(e){"use strict";e.exports=n},772:function(t){"use strict";t.exports=e},721:function(e){"use strict";e.exports=r},156:function(e){"use strict";e.exports=t}},f={};function p(e){var t=f[e];if(void 0!==t)return t.exports;var n=f[e]={exports:{}};return s[e].call(n.exports,n,n.exports,p),n.exports}p.m=s,p.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return p.d(t,{a:t}),t},p.d=function(e,t){for(var n in t)p.o(t,n)&&!p.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},p.f={},p.e=function(e){return Promise.all(Object.keys(p.f).reduce(function(t,n){return p.f[n](e,t),t},[]))},p.u=function(e){return""+e+"."+({187:"eec7be93247463d7",228:"7588a0707cb3694a"})[e]+".js"},p.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),p.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o={},i="plugin-git-manager:",p.l=function(e,t,n,r){if(o[e])return void o[e].push(t);if(void 0!==n)for(var u,a,l=document.getElementsByTagName("script"),c=0;c<l.length;c++){var s=l[c];if(s.getAttribute("src")==e||s.getAttribute("data-webpack")==i+n){u=s;break}}u||(a=!0,(u=document.createElement("script")).charset="utf-8",u.timeout=120,p.nc&&u.setAttribute("nonce",p.nc),u.setAttribute("data-webpack",i+n),u.src=e),o[e]=[t];var f=function(t,n){u.onerror=u.onload=null,clearTimeout(d);var r=o[e];if(delete o[e],u.parentNode&&u.parentNode.removeChild(u),r&&r.forEach(function(e){return e(n)}),t)return t(n)},d=setTimeout(f.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=f.bind(null,u.onerror),u.onload=f.bind(null,u.onload),a&&document.head.appendChild(u)},p.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(u=window.__webpack_public_path__||"/").endsWith("/")||(u+="/"),p.p=u+"static/plugins/plugin-git-manager/dist/client/",a={909:0},p.f.j=function(e,t){var n=p.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=p.p+p.u(e),i=Error();p.l(o,function(t){if(p.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)}},l=function(e,t){var n,r,o=t[0],i=t[1],u=t[2],l=0;if(o.some(function(e){return 0!==a[e]})){for(n in i)p.o(i,n)&&(p.m[n]=i[n]);u&&u(p)}for(e&&e(t);l<o.length;l++)r=o[l],p.o(a,r)&&a[r]&&a[r][0](),a[r]=0},(c=self.webpackChunkplugin_git_manager=self.webpackChunkplugin_git_manager||[]).forEach(l.bind(null,0)),c.push=l.bind(null,c.push.bind(c));var d={};return!function(){"use strict";p.r(d),p.d(d,{PluginGitManagerClient:function(){return j},default:function(){return k}});var e,t,n,r=p(772),o=p(156),i=p.n(o),u=p(721),a=p(482);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function c(e,t,n,r,o,i,u){try{var a=e[i](u),l=a.value}catch(e){n(e);return}a.done?t(l):Promise.resolve(l).then(r,o)}function s(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function u(e){c(i,r,o,u,a,"next",e)}function a(e){c(i,r,o,u,a,"throw",e)}u(void 0)})}}function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],u=!0,a=!1;try{for(o=o.call(e);!(u=(n=o.next()).done)&&(i.push(n.value),!t||i.length!==t);u=!0);}catch(e){a=!0,r=e}finally{try{u||null==o.return||o.return()}finally{if(a)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return l(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 m(e,t){var n,r,o,i,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){var l=[i,a];if(n)throw TypeError("Generator is already executing.");for(;u;)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 u.label++,{value:l[1],done:!1};case 5:u.label++,r=l[1],l=[0];continue;case 7:l=u.ops.pop(),u.trys.pop();continue;default:if(!(o=(o=u.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){u=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){u.label=l[1];break}if(6===l[0]&&u.label<o[1]){u.label=o[1],o=l;break}if(o&&u.label<o[2]){u.label=o[2],u.ops.push(l);break}o[2]&&u.ops.pop(),u.trys.pop();continue}l=t.call(e,u)}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}}}}var g={name:"git-repository",menu:{icon:i().createElement(a.BranchesOutlined,null),Component:function(){return i().createElement("span",null,"Git Repository")}},tag:{Component:function(e){var t=e.item;return i().createElement(u.Space,{size:4},i().createElement(a.BranchesOutlined,null),i().createElement("span",null,(null==t?void 0:t.title)||"Repo #".concat(null==t?void 0:t.uid)))}},getContent:(e=s(function(e,t){var n,r,o,i;return m(this,function(u){switch(u.label){case 0:return n=t.uid,[4,e.apiClient.request({url:"gitRepositories:get",params:{filterByTk:n}})];case 1:if(!(i=null==(o=u.sent())||null==(r=o.data)?void 0:r.data))return[2,null];return[2,{type:"git-repository",repositoryId:i.id,name:i.name,repoUrl:i.repoUrl,defaultBranch:i.defaultBranch,status:i.status}]}})}),function(t,n){return e.apply(this,arguments)})},y={name:"git-merge-request",menu:{icon:i().createElement(a.MergeOutlined,null),Component:function(){return i().createElement("span",null,"Git Merge Request")}},tag:{Component:function(e){var t=e.item;return i().createElement(u.Space,{size:4},i().createElement(a.MergeOutlined,null),i().createElement("span",null,(null==t?void 0:t.title)||"MR ".concat(null==t?void 0:t.uid)))}},getContent:(t=s(function(e,t){var n,r,o,i,u,a,l,c;return m(this,function(s){switch(s.label){case 0:if(o=(r=f(String(t.uid||"").split(":"),2))[0],i=r[1],u=Number(o),a=Number(i),!u||!a)return[2,null];return[4,e.apiClient.request({url:"gitManager:mergeRequestDetail",params:{repositoryId:u,mrIid:a}})];case 1:return c=null==(l=s.sent())||null==(n=l.data)?void 0:n.data,[2,{type:"git-merge-request",repositoryId:u,mrIid:a,title:null==c?void 0:c.title,sourceBranch:null==c?void 0:c.sourceBranch,targetBranch:null==c?void 0:c.targetBranch,author:null==c?void 0:c.author,changes:null==c?void 0:c.changes,description:null==c?void 0:c.description,webUrl:null==c?void 0:c.webUrl}]}})}),function(e,n){return t.apply(this,arguments)})},b={name:"git-commit",menu:{icon:i().createElement(a.NodeIndexOutlined,null),Component:function(){return i().createElement("span",null,"Git Commit")}},tag:{Component:function(e){var t=e.item;return i().createElement(u.Space,{size:4},i().createElement(a.NodeIndexOutlined,null),i().createElement("span",null,(null==t?void 0:t.title)||"Commit ".concat(null==t?void 0:t.uid)))}},getContent:(n=s(function(e,t){var n,r,o,i,u,a,l;return m(this,function(c){switch(c.label){case 0:if(o=(r=f(String(t.uid||"").split(":"),2))[0],i=r[1],!(u=Number(o))||!i)return[2,null];return[4,e.apiClient.request({url:"gitManager:commitDetail",params:{repositoryId:u,commitHash:i}})];case 1:return l=null==(a=c.sent())||null==(n=a.data)?void 0:n.data,[2,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({type:"git-commit",repositoryId:u,commitSha:i},l)]}})}),function(e,t){return n.apply(this,arguments)})},h=p(41);function v(e,t,n,r,o,i,u){try{var a=e[i](u),l=a.value}catch(e){n(e);return}a.done?t(l):Promise.resolve(l).then(r,o)}function w(e,t,n){return(w=E()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&_(o,n.prototype),o}).apply(null,arguments)}function O(e){return(O=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function _(e,t){return(_=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function x(e){var t="function"==typeof Map?new Map:void 0;return(x=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,n)}function n(){return w(e,arguments,O(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),_(n,e)})(e)}function E(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(E=function(){return!!e})()}var S=i().lazy(function(){return h("imported_7nc0nn_component",Promise.all([p.e("228"),p.e("187")]).then(p.bind(p,922))).then(function(e){return{default:e.GitManagerSettings}})}),j=function(e){var t;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function n(){var e,t;if(!(this instanceof n))throw TypeError("Cannot call a class as a function");return e=n,t=arguments,e=O(e),function(e,t){var n;if(t&&("object"==((n=t)&&"undefined"!=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,E()?Reflect.construct(e,t||[],O(this).constructor):e.apply(this,t))}return n.prototype=Object.create(e&&e.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),e&&_(n,e),t=[{key:"load",value:function(){var e,t=this;return(e=function(){var e;return function(e,t){var n,r,o,i,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){var l=[i,a];if(n)throw TypeError("Generator is already executing.");for(;u;)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 u.label++,{value:l[1],done:!1};case 5:u.label++,r=l[1],l=[0];continue;case 7:l=u.ops.pop(),u.trys.pop();continue;default:if(!(o=(o=u.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){u=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){u.label=l[1];break}if(6===l[0]&&u.label<o[1]){u.label=o[1],o=l;break}if(o&&u.label<o[2]){u.label=o[2],u.ops.push(l);break}o[2]&&u.ops.pop(),u.trys.pop();continue}l=t.call(e,u)}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(n){return t.app.pluginSettingsManager.add("git-manager",{title:t.t("Git Manager"),icon:"BranchesOutlined",Component:S,aclSnippet:"pm.plugin-git-manager"}),(null==(e=t.app.aiManager)?void 0:e.registerWorkContext)&&(e.registerWorkContext("git-repository",g),e.registerWorkContext("git-merge-request",y),e.registerWorkContext("git-commit",b)),[2]})},function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function u(e){v(i,r,o,u,a,"next",e)}function a(e){v(i,r,o,u,a,"throw",e)}u(void 0)})})()}}],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)}}(n.prototype,t),n}(x(r.Plugin)),k=j}(),d}()});
10
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@nocobase/plugin-ai/client"),require("@nocobase/client"),require("react"),require("@ant-design/icons"),require("antd")):"function"==typeof define&&define.amd?define("plugin-git-manager",["@nocobase/plugin-ai/client","@nocobase/client","react","@ant-design/icons","antd"],t):"object"==typeof exports?exports["plugin-git-manager"]=t(require("@nocobase/plugin-ai/client"),require("@nocobase/client"),require("react"),require("@ant-design/icons"),require("antd")):e["plugin-git-manager"]=t(e["@nocobase/plugin-ai/client"],e["@nocobase/client"],e.react,e["@ant-design/icons"],e.antd)}(self,function(e,t,n,r,o){return function(){var i,u,a,l,c,s,f={41:function(e){e.exports=function(e,t){return"undefined"!=typeof __deoptimization_sideEffect__&&__deoptimization_sideEffect__(e,t),t}},482:function(e){"use strict";e.exports=r},772:function(e){"use strict";e.exports=t},645:function(t){"use strict";t.exports=e},721:function(e){"use strict";e.exports=o},156:function(e){"use strict";e.exports=n}},p={};function d(e){var t=p[e];if(void 0!==t)return t.exports;var n=p[e]={exports:{}};return f[e].call(n.exports,n,n.exports,d),n.exports}d.m=f,d.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return d.d(t,{a:t}),t},d.d=function(e,t){for(var n in t)d.o(t,n)&&!d.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},d.f={},d.e=function(e){return Promise.all(Object.keys(d.f).reduce(function(t,n){return d.f[n](e,t),t},[]))},d.u=function(e){return""+e+"."+({187:"08dd0bf4d0f68036",228:"7588a0707cb3694a"})[e]+".js"},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i={},u="plugin-git-manager:",d.l=function(e,t,n,r){if(i[e])return void i[e].push(t);if(void 0!==n)for(var o,a,l=document.getElementsByTagName("script"),c=0;c<l.length;c++){var s=l[c];if(s.getAttribute("src")==e||s.getAttribute("data-webpack")==u+n){o=s;break}}o||(a=!0,(o=document.createElement("script")).charset="utf-8",o.timeout=120,d.nc&&o.setAttribute("nonce",d.nc),o.setAttribute("data-webpack",u+n),o.src=e),i[e]=[t];var f=function(t,n){o.onerror=o.onload=null,clearTimeout(p);var r=i[e];if(delete i[e],o.parentNode&&o.parentNode.removeChild(o),r&&r.forEach(function(e){return e(n)}),t)return t(n)},p=setTimeout(f.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=f.bind(null,o.onerror),o.onload=f.bind(null,o.onload),a&&document.head.appendChild(o)},d.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(a=window.__webpack_public_path__||"/").endsWith("/")||(a+="/"),d.p=a+"static/plugins/plugin-git-manager/dist/client/",l={909:0},d.f.j=function(e,t){var n=d.o(l,e)?l[e]:void 0;if(0!==n)if(n)t.push(n[2]);else{var r=new Promise(function(t,r){n=l[e]=[t,r]});t.push(n[2]=r);var o=d.p+d.u(e),i=Error();d.l(o,function(t){if(d.o(l,e)&&(0!==(n=l[e])&&(l[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)}},c=function(e,t){var n,r,o=t[0],i=t[1],u=t[2],a=0;if(o.some(function(e){return 0!==l[e]})){for(n in i)d.o(i,n)&&(d.m[n]=i[n]);u&&u(d)}for(e&&e(t);a<o.length;a++)r=o[a],d.o(l,r)&&l[r]&&l[r][0](),l[r]=0},(s=self.webpackChunkplugin_git_manager=self.webpackChunkplugin_git_manager||[]).forEach(c.bind(null,0)),s.push=c.bind(null,s.push.bind(s));var m={};return!function(){"use strict";d.r(m),d.d(m,{PluginGitManagerClient:function(){return j},default:function(){return k}});var e,t,n,r=d(772),o=d(156),i=d.n(o),u=d(721),a=d(482);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function c(e,t,n,r,o,i,u){try{var a=e[i](u),l=a.value}catch(e){n(e);return}a.done?t(l):Promise.resolve(l).then(r,o)}function s(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function u(e){c(i,r,o,u,a,"next",e)}function a(e){c(i,r,o,u,a,"throw",e)}u(void 0)})}}function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],u=!0,a=!1;try{for(o=o.call(e);!(u=(n=o.next()).done)&&(i.push(n.value),!t||i.length!==t);u=!0);}catch(e){a=!0,r=e}finally{try{u||null==o.return||o.return()}finally{if(a)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return l(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 p(e,t){var n,r,o,i,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){var l=[i,a];if(n)throw TypeError("Generator is already executing.");for(;u;)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 u.label++,{value:l[1],done:!1};case 5:u.label++,r=l[1],l=[0];continue;case 7:l=u.ops.pop(),u.trys.pop();continue;default:if(!(o=(o=u.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){u=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){u.label=l[1];break}if(6===l[0]&&u.label<o[1]){u.label=o[1],o=l;break}if(o&&u.label<o[2]){u.label=o[2],u.ops.push(l);break}o[2]&&u.ops.pop(),u.trys.pop();continue}l=t.call(e,u)}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}}}}var g={name:"git-repository",menu:{icon:i().createElement(a.BranchesOutlined,null),Component:function(){return i().createElement("span",null,"Git Repository")}},tag:{Component:function(e){var t=e.item;return i().createElement(u.Space,{size:4},i().createElement(a.BranchesOutlined,null),i().createElement("span",null,(null==t?void 0:t.title)||"Repo #".concat(null==t?void 0:t.uid)))}},getContent:(e=s(function(e,t){var n,r,o,i;return p(this,function(u){switch(u.label){case 0:return n=t.uid,[4,e.apiClient.request({url:"gitRepositories:get",params:{filterByTk:n}})];case 1:if(!(i=null==(o=u.sent())||null==(r=o.data)?void 0:r.data))return[2,null];return[2,{type:"git-repository",repositoryId:i.id,name:i.name,repoUrl:i.repoUrl,defaultBranch:i.defaultBranch,status:i.status}]}})}),function(t,n){return e.apply(this,arguments)})},b={name:"git-merge-request",menu:{icon:i().createElement(a.MergeOutlined,null),Component:function(){return i().createElement("span",null,"Git Merge Request")}},tag:{Component:function(e){var t=e.item;return i().createElement(u.Space,{size:4},i().createElement(a.MergeOutlined,null),i().createElement("span",null,(null==t?void 0:t.title)||"MR ".concat(null==t?void 0:t.uid)))}},getContent:(t=s(function(e,t){var n,r,o,i,u,a,l,c;return p(this,function(s){switch(s.label){case 0:if(o=(r=f(String(t.uid||"").split(":"),2))[0],i=r[1],u=Number(o),a=Number(i),!u||!a)return[2,null];return[4,e.apiClient.request({url:"gitManager:mergeRequestDetail",params:{repositoryId:u,mrIid:a}})];case 1:return c=null==(l=s.sent())||null==(n=l.data)?void 0:n.data,[2,{type:"git-merge-request",repositoryId:u,mrIid:a,title:null==c?void 0:c.title,sourceBranch:null==c?void 0:c.sourceBranch,targetBranch:null==c?void 0:c.targetBranch,author:null==c?void 0:c.author,changes:null==c?void 0:c.changes,description:null==c?void 0:c.description,webUrl:null==c?void 0:c.webUrl}]}})}),function(e,n){return t.apply(this,arguments)})},y={name:"git-commit",menu:{icon:i().createElement(a.NodeIndexOutlined,null),Component:function(){return i().createElement("span",null,"Git Commit")}},tag:{Component:function(e){var t=e.item;return i().createElement(u.Space,{size:4},i().createElement(a.NodeIndexOutlined,null),i().createElement("span",null,(null==t?void 0:t.title)||"Commit ".concat(null==t?void 0:t.uid)))}},getContent:(n=s(function(e,t){var n,r,o,i,u,a,l;return p(this,function(c){switch(c.label){case 0:if(o=(r=f(String(t.uid||"").split(":"),2))[0],i=r[1],!(u=Number(o))||!i)return[2,null];return[4,e.apiClient.request({url:"gitManager:commitDetail",params:{repositoryId:u,commitHash:i}})];case 1:return l=null==(a=c.sent())||null==(n=a.data)?void 0:n.data,[2,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({type:"git-commit",repositoryId:u,commitSha:i},l)]}})}),function(e,t){return n.apply(this,arguments)})},h=d(41);function v(e,t,n,r,o,i,u){try{var a=e[i](u),l=a.value}catch(e){n(e);return}a.done?t(l):Promise.resolve(l).then(r,o)}function w(e,t,n){return(w=E()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&_(o,n.prototype),o}).apply(null,arguments)}function O(e){return(O=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function _(e,t){return(_=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function x(e){var t="function"==typeof Map?new Map:void 0;return(x=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,n)}function n(){return w(e,arguments,O(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),_(n,e)})(e)}function E(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(E=function(){return!!e})()}var S=i().lazy(function(){return h("imported_7nc0nn_component",Promise.all([d.e("228"),d.e("187")]).then(d.bind(d,922))).then(function(e){return{default:e.GitManagerSettings}})}),j=function(e){var t;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function n(){var e,t;if(!(this instanceof n))throw TypeError("Cannot call a class as a function");return e=n,t=arguments,e=O(e),function(e,t){var n;if(t&&("object"==((n=t)&&"undefined"!=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,E()?Reflect.construct(e,t||[],O(this).constructor):e.apply(this,t))}return n.prototype=Object.create(e&&e.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),e&&_(n,e),t=[{key:"load",value:function(){var e,t=this;return(e=function(){var e;return function(e,t){var n,r,o,i,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){var l=[i,a];if(n)throw TypeError("Generator is already executing.");for(;u;)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 u.label++,{value:l[1],done:!1};case 5:u.label++,r=l[1],l=[0];continue;case 7:l=u.ops.pop(),u.trys.pop();continue;default:if(!(o=(o=u.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){u=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){u.label=l[1];break}if(6===l[0]&&u.label<o[1]){u.label=o[1],o=l;break}if(o&&u.label<o[2]){u.label=o[2],u.ops.push(l);break}o[2]&&u.ops.pop(),u.trys.pop();continue}l=t.call(e,u)}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(n){return t.app.pluginSettingsManager.add("git-manager",{title:t.t("Git Manager"),icon:"BranchesOutlined",Component:S,aclSnippet:"pm.plugin-git-manager"}),(null==(e=t.app.aiManager)?void 0:e.registerWorkContext)&&(e.registerWorkContext("git-repository",g),e.registerWorkContext("git-merge-request",b),e.registerWorkContext("git-commit",y)),[2]})},function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function u(e){v(i,r,o,u,a,"next",e)}function a(e){v(i,r,o,u,a,"throw",e)}u(void 0)})})()}}],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)}}(n.prototype,t),n}(x(r.Plugin)),k=j}(),m}()});
@@ -11,9 +11,11 @@ module.exports = {
11
11
  "react": "18.2.0",
12
12
  "antd": "5.24.2",
13
13
  "@ant-design/icons": "5.6.1",
14
- "@nocobase/client": "2.0.47",
15
- "@nocobase/server": "2.0.47",
14
+ "@nocobase/client": "2.0.49",
15
+ "@nocobase/server": "2.0.49",
16
+ "sequelize": "6.35.2",
16
17
  "dayjs": "1.11.13",
17
- "@nocobase/actions": "2.0.47",
18
- "@nocobase/database": "2.0.47"
18
+ "@nocobase/plugin-ai": "2.0.49",
19
+ "@nocobase/actions": "2.0.49",
20
+ "@nocobase/database": "2.0.49"
19
21
  };
@@ -177,5 +177,12 @@
177
177
  "new": "new",
178
178
  "Reviewed SHA": "Reviewed SHA",
179
179
  "Latest SHA": "Latest SHA",
180
- "All triggers": "All triggers"
180
+ "All triggers": "All triggers",
181
+ "Search commit title or message": "Search commit title or message",
182
+ "Primary Auto Flow": "Primary Auto Flow",
183
+ "Primary Auto Review Flow": "Primary Auto Review Flow",
184
+ "Only flows with automatic trigger modes are shown": "Only flows with automatic trigger modes are shown",
185
+ "Fallback": "Fallback",
186
+ "AI employee not found": "AI employee not found",
187
+ "Failed to open AI chat": "Failed to open AI chat"
181
188
  }
@@ -32,6 +32,10 @@ __export(gitlab_api_exports, {
32
32
  });
33
33
  module.exports = __toCommonJS(gitlab_api_exports);
34
34
  var import_gitlab_url = require("../utils/gitlab-url");
35
+ function getActionParams(ctx) {
36
+ var _a, _b;
37
+ return { ...ctx.action.params, ...(_a = ctx.action.params) == null ? void 0 : _a.values, ...((_b = ctx.request) == null ? void 0 : _b.body) || {} };
38
+ }
35
39
  async function gitlabFetch(apiBase, endpoint, pat, params) {
36
40
  const url = new URL(`${apiBase}${endpoint}`);
37
41
  if (params) {
@@ -57,8 +61,7 @@ async function gitlabFetch(apiBase, endpoint, pat, params) {
57
61
  return { data, totalPages: totalPages ? parseInt(totalPages, 10) : null, total: total ? parseInt(total, 10) : null };
58
62
  }
59
63
  async function getRepoApiContext(ctx) {
60
- var _a;
61
- const params = { ...ctx.action.params, ...(_a = ctx.action.params) == null ? void 0 : _a.values, ...ctx.request.body || {} };
64
+ const params = getActionParams(ctx);
62
65
  const { repositoryId } = params;
63
66
  const repo = await ctx.db.getRepository("gitRepositories").findOne({
64
67
  filterByTk: repositoryId
@@ -105,9 +108,8 @@ async function githubFetch(endpoint, pat, params) {
105
108
  return { data, totalPages, total: null };
106
109
  }
107
110
  async function mergeRequests(ctx, next) {
108
- var _a;
109
111
  const { pat, apiBase, encodedProject, projectPath, isGitHub } = await getRepoApiContext(ctx);
110
- const params = { ...ctx.action.params, ...(_a = ctx.action.params) == null ? void 0 : _a.values, ...ctx.request.body || {} };
112
+ const params = getActionParams(ctx);
111
113
  const {
112
114
  state = "opened",
113
115
  search,
@@ -138,14 +140,14 @@ async function mergeRequests(ctx, next) {
138
140
  result.total = null;
139
141
  }
140
142
  items = pullRequests.map((pr) => {
141
- var _a2, _b;
143
+ var _a, _b;
142
144
  return {
143
145
  id: pr.id,
144
146
  iid: pr.number,
145
147
  title: pr.title,
146
148
  description: pr.body,
147
149
  state: pr.state === "open" ? "opened" : pr.merged_at ? "merged" : "closed",
148
- sourceBranch: (_a2 = pr.head) == null ? void 0 : _a2.ref,
150
+ sourceBranch: (_a = pr.head) == null ? void 0 : _a.ref,
149
151
  targetBranch: (_b = pr.base) == null ? void 0 : _b.ref,
150
152
  author: pr.user ? { name: pr.user.login, username: pr.user.login, avatarUrl: pr.user.avatar_url } : null,
151
153
  assignees: (pr.assignees || []).map((a) => ({ name: a.login, username: a.login, avatarUrl: a.avatar_url })),
@@ -215,9 +217,9 @@ async function mergeRequests(ctx, next) {
215
217
  await next();
216
218
  }
217
219
  async function mergeRequestDetail(ctx, next) {
218
- var _a, _b, _c, _d;
220
+ var _a, _b, _c;
219
221
  const { pat, apiBase, encodedProject, projectPath, isGitHub } = await getRepoApiContext(ctx);
220
- const params = { ...ctx.action.params, ...(_a = ctx.action.params) == null ? void 0 : _a.values, ...ctx.request.body || {} };
222
+ const params = getActionParams(ctx);
221
223
  const { mrIid } = params;
222
224
  if (!mrIid) {
223
225
  ctx.throw(400, "mrIid is required");
@@ -243,8 +245,8 @@ async function mergeRequestDetail(ctx, next) {
243
245
  title: pr.title,
244
246
  description: pr.body,
245
247
  state: pr.state === "open" ? "opened" : pr.merged_at ? "merged" : "closed",
246
- sourceBranch: (_b = pr.head) == null ? void 0 : _b.ref,
247
- targetBranch: (_c = pr.base) == null ? void 0 : _c.ref,
248
+ sourceBranch: (_a = pr.head) == null ? void 0 : _a.ref,
249
+ targetBranch: (_b = pr.base) == null ? void 0 : _b.ref,
248
250
  author: pr.user ? { name: pr.user.login, username: pr.user.login, avatarUrl: pr.user.avatar_url } : null,
249
251
  assignees: (pr.assignees || []).map((a) => ({ name: a.login, username: a.login, avatarUrl: a.avatar_url })),
250
252
  reviewers: (pr.requested_reviewers || []).map((r) => ({ name: r.login, username: r.login, avatarUrl: r.avatar_url })),
@@ -276,7 +278,7 @@ async function mergeRequestDetail(ctx, next) {
276
278
  gitlabFetch(apiBase, `/projects/${encodedProject}/merge_requests/${mrIid}/changes`, pat).catch(() => ({ data: {} }))
277
279
  ]);
278
280
  const mr = mrResult.data;
279
- const changes = (((_d = changesResult.data) == null ? void 0 : _d.changes) || []).map((c) => ({
281
+ const changes = (((_c = changesResult.data) == null ? void 0 : _c.changes) || []).map((c) => ({
280
282
  oldPath: c.old_path,
281
283
  newPath: c.new_path,
282
284
  newFile: c.new_file,
@@ -318,9 +320,8 @@ async function mergeRequestDetail(ctx, next) {
318
320
  await next();
319
321
  }
320
322
  async function mergeRequestNotes(ctx, next) {
321
- var _a;
322
323
  const { pat, apiBase, encodedProject, projectPath, isGitHub } = await getRepoApiContext(ctx);
323
- const params = { ...ctx.action.params, ...(_a = ctx.action.params) == null ? void 0 : _a.values, ...ctx.request.body || {} };
324
+ const params = getActionParams(ctx);
324
325
  const { mrIid, page = 1, perPage = 50 } = params;
325
326
  if (!mrIid) {
326
327
  ctx.throw(400, "mrIid is required");
@@ -37,6 +37,10 @@ __export(review_exports, {
37
37
  module.exports = __toCommonJS(review_exports);
38
38
  var import_gitlab_url = require("../utils/gitlab-url");
39
39
  var import_redact = require("../utils/redact");
40
+ function getActionParams(ctx) {
41
+ var _a, _b;
42
+ return { ...ctx.action.params, ...(_a = ctx.action.params) == null ? void 0 : _a.values, ...((_b = ctx.request) == null ? void 0 : _b.body) || {} };
43
+ }
40
44
  function targetKey(args) {
41
45
  if (args.targetType === "mr") return `${args.repositoryId}:mr:${args.mrIid}`;
42
46
  if (args.targetType === "commit") return `${args.repositoryId}:commit:${args.commitSha}`;
@@ -48,8 +52,8 @@ async function withTriggerLock(app, key, fn) {
48
52
  return app.lockManager.runExclusive(lockKey, fn, TRIGGER_LOCK_TTL_MS);
49
53
  }
50
54
  async function triggerReview(ctx, next) {
51
- var _a, _b, _c;
52
- const params = { ...ctx.action.params, ...(_a = ctx.action.params) == null ? void 0 : _a.values, ...ctx.request.body || {} };
55
+ var _a, _b;
56
+ const params = getActionParams(ctx);
53
57
  const {
54
58
  flowId,
55
59
  repositoryId,
@@ -65,7 +69,7 @@ async function triggerReview(ctx, next) {
65
69
  if (targetType === "mr" && !mrIid) ctx.throw(400, "mrIid is required for MR review");
66
70
  if (targetType === "commit" && !commitSha) ctx.throw(400, "commitSha is required for commit review");
67
71
  if (targetType === "branch" && !branch) ctx.throw(400, "branch is required for branch review");
68
- const userId = (_c = (_b = ctx.state) == null ? void 0 : _b.currentUser) == null ? void 0 : _c.id;
72
+ const userId = (_b = (_a = ctx.state) == null ? void 0 : _a.currentUser) == null ? void 0 : _b.id;
69
73
  try {
70
74
  const reviewId = await triggerReviewInternal(ctx.app, {
71
75
  flowId,
@@ -183,8 +187,8 @@ async function triggerReviewInternalLocked(app, args) {
183
187
  return reviewId;
184
188
  }
185
189
  async function reviewApprovePost(ctx, next) {
186
- var _a, _b, _c;
187
- const params = { ...ctx.action.params, ...(_a = ctx.action.params) == null ? void 0 : _a.values, ...ctx.request.body || {} };
190
+ var _a, _b;
191
+ const params = getActionParams(ctx);
188
192
  const { reviewId, editedMarkdown } = params;
189
193
  if (!reviewId) ctx.throw(400, "reviewId is required");
190
194
  const reviewsRepo = ctx.db.getRepository("gitCodeReviews");
@@ -199,7 +203,7 @@ async function reviewApprovePost(ctx, next) {
199
203
  });
200
204
  if (!repo) ctx.throw(404, "Repository not found");
201
205
  const noteId = await postNoteToGitLab(repo, Number(review.get("mrIid")), markdown);
202
- const userId = (_c = (_b = ctx.state) == null ? void 0 : _b.currentUser) == null ? void 0 : _c.id;
206
+ const userId = (_b = (_a = ctx.state) == null ? void 0 : _a.currentUser) == null ? void 0 : _b.id;
203
207
  await reviewsRepo.update({
204
208
  filterByTk: reviewId,
205
209
  values: {
@@ -214,14 +218,14 @@ async function reviewApprovePost(ctx, next) {
214
218
  await next();
215
219
  }
216
220
  async function reviewReject(ctx, next) {
217
- var _a, _b, _c;
218
- const params = { ...ctx.action.params, ...(_a = ctx.action.params) == null ? void 0 : _a.values, ...ctx.request.body || {} };
221
+ var _a, _b;
222
+ const params = getActionParams(ctx);
219
223
  const { reviewId, reason } = params;
220
224
  if (!reviewId) ctx.throw(400, "reviewId is required");
221
225
  const reviewsRepo = ctx.db.getRepository("gitCodeReviews");
222
226
  const review = await reviewsRepo.findOne({ filterByTk: reviewId });
223
227
  if (!review) ctx.throw(404, "Review not found");
224
- const userId = (_c = (_b = ctx.state) == null ? void 0 : _b.currentUser) == null ? void 0 : _c.id;
228
+ const userId = (_b = (_a = ctx.state) == null ? void 0 : _a.currentUser) == null ? void 0 : _b.id;
225
229
  await reviewsRepo.update({
226
230
  filterByTk: reviewId,
227
231
  values: {
@@ -97,12 +97,14 @@ function registerGitReviewAiTools(app) {
97
97
  return obj;
98
98
  };
99
99
  const runResourceAction = async (ctx, handler, params, gate) => {
100
+ var _a2;
100
101
  enforceAcl(ctx, gate.resource, gate.action, params);
101
102
  const synthCtx = {
102
103
  ...ctx,
103
104
  app: ctx.app,
104
105
  db: ctx.db,
105
106
  action: { params },
107
+ request: { ...ctx.request || {}, body: ((_a2 = ctx.request) == null ? void 0 : _a2.body) || {} },
106
108
  throw: (status, message) => {
107
109
  const err = new Error(message);
108
110
  err.status = status;
@@ -1,2 +1,2 @@
1
- declare const _default: import("@nocobase/database").CollectionOptions;
1
+ declare const _default: any;
2
2
  export default _default;