@profoundlogic/coderflow-server 0.5.6 → 0.5.7

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 (167) hide show
  1. package/dist/coder-server.js +1 -1
  2. package/dist/config.js +1 -1
  3. package/dist/lib/agent-keepalive.js +1 -1
  4. package/dist/lib/agent-models.js +1 -1
  5. package/dist/lib/api-keys.js +1 -1
  6. package/dist/lib/apiKeys.js +1 -1
  7. package/dist/lib/app-server-ports.js +1 -1
  8. package/dist/lib/auto-judge.js +1 -1
  9. package/dist/lib/automation-service.js +1 -1
  10. package/dist/lib/basic-auth.js +1 -1
  11. package/dist/lib/bindings.js +1 -1
  12. package/dist/lib/build-history.js +1 -1
  13. package/dist/lib/build-output-service.js +1 -1
  14. package/dist/lib/build-scheduler.js +1 -1
  15. package/dist/lib/build-service.js +1 -1
  16. package/dist/lib/ca-certificates.js +1 -1
  17. package/dist/lib/claude-oauth-refresh.js +1 -1
  18. package/dist/lib/cli/build.js +1 -1
  19. package/dist/lib/cli/cleanup-users.js +1 -1
  20. package/dist/lib/cli/config-command.js +1 -1
  21. package/dist/lib/cli/config.js +1 -1
  22. package/dist/lib/cli/create-user.js +1 -1
  23. package/dist/lib/cli/grant-admin.js +1 -1
  24. package/dist/lib/cli/init.js +1 -1
  25. package/dist/lib/cli/jira.js +1 -1
  26. package/dist/lib/cli/license.js +1 -1
  27. package/dist/lib/cli/list-roles.js +1 -1
  28. package/dist/lib/cli/list-users.js +1 -1
  29. package/dist/lib/cli/server-manager.js +1 -1
  30. package/dist/lib/cli/set-password.js +1 -1
  31. package/dist/lib/config-migration.js +1 -1
  32. package/dist/lib/container-credential-sync.js +1 -1
  33. package/dist/lib/container-tokens.js +1 -1
  34. package/dist/lib/data-dir.js +1 -1
  35. package/dist/lib/deployment-history.js +1 -1
  36. package/dist/lib/deployment-service.js +1 -1
  37. package/dist/lib/docker-utils.js +1 -1
  38. package/dist/lib/email.js +1 -1
  39. package/dist/lib/emailTemplates.js +1 -1
  40. package/dist/lib/entitlement.js +1 -1
  41. package/dist/lib/external-connections.js +1 -1
  42. package/dist/lib/fetch-utils.js +1 -1
  43. package/dist/lib/git-commit-details-route.js +1 -1
  44. package/dist/lib/git-history-diff-guardrails.js +1 -1
  45. package/dist/lib/git-provider-service.js +1 -1
  46. package/dist/lib/git-provider-setup/github-setup-handler.js +1 -1
  47. package/dist/lib/git-provider-setup/index.js +1 -1
  48. package/dist/lib/git-provider-setup/setup-factory.js +1 -1
  49. package/dist/lib/git-provider-setup/setup-interface.js +1 -1
  50. package/dist/lib/git-providers/azure-devops-provider.js +1 -1
  51. package/dist/lib/git-providers/github-app-provider.js +1 -1
  52. package/dist/lib/git-providers/index.js +1 -1
  53. package/dist/lib/git-providers/provider-factory.js +1 -1
  54. package/dist/lib/git-providers/provider-interface.js +1 -1
  55. package/dist/lib/github-urls.js +1 -1
  56. package/dist/lib/group-objective-linking.js +1 -1
  57. package/dist/lib/ibmi-sync.js +1 -1
  58. package/dist/lib/jira-client.js +1 -1
  59. package/dist/lib/judge-blinding.js +1 -1
  60. package/dist/lib/logger.js +1 -1
  61. package/dist/lib/migration-to-scoped-rbac.js +1 -1
  62. package/dist/lib/model-fetcher.js +1 -1
  63. package/dist/lib/notifications.js +1 -1
  64. package/dist/lib/objective-context.js +1 -1
  65. package/dist/lib/oidc-auth.js +1 -1
  66. package/dist/lib/oidc-device-flow.js +1 -1
  67. package/dist/lib/passwordTokens.js +1 -1
  68. package/dist/lib/permission-resolver.js +1 -1
  69. package/dist/lib/pin-cascade.js +1 -1
  70. package/dist/lib/provider-accounts.js +1 -1
  71. package/dist/lib/provider-oauth.js +1 -1
  72. package/dist/lib/provider-profile.js +1 -1
  73. package/dist/lib/provider-token-refresh.js +1 -1
  74. package/dist/lib/rbac-user-state.js +1 -1
  75. package/dist/lib/request-url.js +1 -1
  76. package/dist/lib/rewind.js +1 -1
  77. package/dist/lib/role-definitions.js +1 -1
  78. package/dist/lib/roles.js +1 -1
  79. package/dist/lib/secrets.js +1 -1
  80. package/dist/lib/setup-repo-git-auth.js +1 -1
  81. package/dist/lib/state-capture.js +1 -1
  82. package/dist/lib/static-files.js +1 -1
  83. package/dist/lib/task-name-format.js +1 -1
  84. package/dist/lib/task-name-generator.js +1 -1
  85. package/dist/lib/task-source-metadata.js +1 -1
  86. package/dist/lib/teams.js +1 -1
  87. package/dist/lib/user-git-oauth.js +1 -1
  88. package/dist/lib/user-git-tokens.js +1 -1
  89. package/dist/lib/users.js +1 -1
  90. package/dist/middleware/requireAuth.js +1 -1
  91. package/dist/middleware/requireInit.js +1 -1
  92. package/dist/middleware/requirePermission.js +1 -1
  93. package/dist/package.json +1 -1
  94. package/dist/playwright.config.js +1 -1
  95. package/dist/routes/apiKeys.js +1 -1
  96. package/dist/routes/auth-oidc.js +1 -1
  97. package/dist/routes/auth.js +1 -1
  98. package/dist/routes/automations.js +1 -1
  99. package/dist/routes/bindings.js +1 -1
  100. package/dist/routes/build.js +1 -1
  101. package/dist/routes/containers.js +1 -1
  102. package/dist/routes/deploy-task.js +1 -1
  103. package/dist/routes/environment-management.js +1 -1
  104. package/dist/routes/environments.js +1 -1
  105. package/dist/routes/external-skills.js +1 -1
  106. package/dist/routes/git-credentials.js +1 -1
  107. package/dist/routes/git-oauth.js +1 -1
  108. package/dist/routes/git-provider-setup.js +1 -1
  109. package/dist/routes/health.js +1 -1
  110. package/dist/routes/jira.js +1 -1
  111. package/dist/routes/objective-management.js +1 -1
  112. package/dist/routes/password.js +1 -1
  113. package/dist/routes/prompt.js +1 -1
  114. package/dist/routes/provider-auth.js +1 -1
  115. package/dist/routes/qa.js +1 -1
  116. package/dist/routes/roles.js +1 -1
  117. package/dist/routes/settings.js +1 -1
  118. package/dist/routes/skill-management.js +1 -1
  119. package/dist/routes/skills.js +1 -1
  120. package/dist/routes/tasks.js +1 -1
  121. package/dist/routes/teams.js +1 -1
  122. package/dist/routes/templates.js +1 -1
  123. package/dist/routes/test-task.js +1 -1
  124. package/dist/routes/test.js +1 -1
  125. package/dist/routes/users.js +1 -1
  126. package/dist/routes/visualizations.js +1 -1
  127. package/dist/scripts/create-user.js +1 -1
  128. package/dist/scripts/migrate-config-to-data-dir.js +1 -1
  129. package/dist/start.js +1 -1
  130. package/dist/web-ui/public/activity-detail-modal.js +1 -1
  131. package/dist/web-ui/public/activity-feed.js +1 -1
  132. package/dist/web-ui/public/activity-formatters.js +1 -1
  133. package/dist/web-ui/public/agent-event-parser.js +1 -1
  134. package/dist/web-ui/public/app.js +1 -1
  135. package/dist/web-ui/public/approve-dialog.js +1 -1
  136. package/dist/web-ui/public/automation-links.js +1 -1
  137. package/dist/web-ui/public/automation-schedule.js +1 -1
  138. package/dist/web-ui/public/comments-widget.js +1 -1
  139. package/dist/web-ui/public/diff-utils.js +1 -1
  140. package/dist/web-ui/public/environments.js +1 -1
  141. package/dist/web-ui/public/feedback-widget.css +6 -4
  142. package/dist/web-ui/public/feedback-widget.js +1 -1
  143. package/dist/web-ui/public/git-history-lazy-utils.js +1 -1
  144. package/dist/web-ui/public/git-history.js +1 -1
  145. package/dist/web-ui/public/git-status.js +1 -1
  146. package/dist/web-ui/public/index.js +1 -1
  147. package/dist/web-ui/public/login.js +1 -1
  148. package/dist/web-ui/public/markdown-editor.js +1 -1
  149. package/dist/web-ui/public/markdown-file-editor.js +1 -1
  150. package/dist/web-ui/public/modal-maximize.js +1 -1
  151. package/dist/web-ui/public/notifications.js +1 -1
  152. package/dist/web-ui/public/pr-dialog.js +1 -1
  153. package/dist/web-ui/public/roles.js +1 -1
  154. package/dist/web-ui/public/server-health.js +1 -1
  155. package/dist/web-ui/public/settings.js +1 -1
  156. package/dist/web-ui/public/setup-password.js +1 -1
  157. package/dist/web-ui/public/skills.js +1 -1
  158. package/dist/web-ui/public/sse-client.js +1 -1
  159. package/dist/web-ui/public/sse-shared-worker.js +1 -1
  160. package/dist/web-ui/public/styles.css +34 -4
  161. package/dist/web-ui/public/task.js +1 -1
  162. package/dist/web-ui/public/teams.js +1 -1
  163. package/dist/web-ui/public/terminal.js +1 -1
  164. package/dist/web-ui/public/theme.js +1 -1
  165. package/dist/web-ui/public/users.js +1 -1
  166. package/dist/web-ui/public/variant-grouping.js +1 -1
  167. package/package.json +1 -1
@@ -1 +1 @@
1
- export const DEFAULT_LAZY_RENDER_MIN_FILES=0xc8;export const DEFAULT_LAZY_RENDER_MAX_FILES=0x3e7;export const DEFAULT_LAZY_RENDER_CHUNK_SIZE=0x28;export const DEFAULT_AUTO_COLLAPSE_MIN_FILES=0xc8;export function getLazyRenderUpperBound({maxFiles:maxFiles=DEFAULT_LAZY_RENDER_MAX_FILES,serverMaxFiles:serverMaxFiles=null}={}){if(!Number['isFinite'](serverMaxFiles))return maxFiles;return Math['min'](maxFiles,serverMaxFiles);}export function shouldUseLazyRendering(_0x1afbd9,{minFiles:minFiles=DEFAULT_LAZY_RENDER_MIN_FILES,maxFiles:maxFiles=DEFAULT_LAZY_RENDER_MAX_FILES,serverMaxFiles:serverMaxFiles=null}={}){const _0x3901d4=getLazyRenderUpperBound({'maxFiles':maxFiles,'serverMaxFiles':serverMaxFiles});return _0x1afbd9>=minFiles&&_0x1afbd9<=_0x3901d4;}export function shouldAutoCollapseDiff(_0x46a73a,{threshold:threshold=DEFAULT_AUTO_COLLAPSE_MIN_FILES}={}){return _0x46a73a>=threshold;}export function getNextRenderedCount({renderedCount:_0x741bb0,totalFiles:_0x5e781a,chunkSize:chunkSize=DEFAULT_LAZY_RENDER_CHUNK_SIZE}){return Math['min'](_0x741bb0+chunkSize,_0x5e781a);}export function renderedCountForTarget({renderedCount:_0x1e46bb,targetIndex:_0x1426ae,totalFiles:_0x50445c,chunkSize:chunkSize=DEFAULT_LAZY_RENDER_CHUNK_SIZE}){let _0x13b4a7=_0x1e46bb;while(_0x13b4a7<=_0x1426ae&&_0x13b4a7<_0x50445c){_0x13b4a7=getNextRenderedCount({'renderedCount':_0x13b4a7,'totalFiles':_0x50445c,'chunkSize':chunkSize});}return _0x13b4a7;}export function getLazyLoadMoreText({filesLength:_0x13314d,renderedCount:_0x12b79e,chunkSize:_0x21a8bd}){const _0x248e9e=Math['max'](0x0,_0x13314d-_0x12b79e),_0x23a7d0=Math['min'](_0x21a8bd,_0x248e9e);return'Load\x20'+_0x23a7d0['toLocaleString']()+'\x20more\x20files\x20('+_0x12b79e['toLocaleString']()+'\x20/\x20'+_0x13314d['toLocaleString']()+')';}export function getFileNameFromDiffFile(_0x34e577){return _0x34e577?.['newPath']||_0x34e577?.['oldPath']||'';}export function buildCollapsedStateUpdates({files:_0x1dc965,collapsed:_0x536aa8,storageKeyPrefix:_0x5631d8,getStorageKey:_0x5b7eaf}){const _0x5afd59=[];for(const _0x512d9f of _0x1dc965||[]){const _0x4e0b47=getFileNameFromDiffFile(_0x512d9f);if(!_0x4e0b47)continue;_0x5afd59['push']({'key':_0x5b7eaf(_0x5631d8,_0x4e0b47),'value':String(_0x536aa8),'fileName':_0x4e0b47});}return _0x5afd59;}
1
+ export const DEFAULT_LAZY_RENDER_MIN_FILES=0xc8;export const DEFAULT_LAZY_RENDER_MAX_FILES=0x3e7;export const DEFAULT_LAZY_RENDER_CHUNK_SIZE=0x28;export const DEFAULT_AUTO_COLLAPSE_MIN_FILES=0xc8;export function getLazyRenderUpperBound({maxFiles:maxFiles=DEFAULT_LAZY_RENDER_MAX_FILES,serverMaxFiles:serverMaxFiles=null}={}){if(!Number['isFinite'](serverMaxFiles))return maxFiles;return Math['min'](maxFiles,serverMaxFiles);}export function shouldUseLazyRendering(_0x225b0d,{minFiles:minFiles=DEFAULT_LAZY_RENDER_MIN_FILES,maxFiles:maxFiles=DEFAULT_LAZY_RENDER_MAX_FILES,serverMaxFiles:serverMaxFiles=null}={}){const _0x4ff3a2=getLazyRenderUpperBound({'maxFiles':maxFiles,'serverMaxFiles':serverMaxFiles});return _0x225b0d>=minFiles&&_0x225b0d<=_0x4ff3a2;}export function shouldAutoCollapseDiff(_0x4e65c1,{threshold:threshold=DEFAULT_AUTO_COLLAPSE_MIN_FILES}={}){return _0x4e65c1>=threshold;}export function getNextRenderedCount({renderedCount:_0x6da813,totalFiles:_0x47469b,chunkSize:chunkSize=DEFAULT_LAZY_RENDER_CHUNK_SIZE}){return Math['min'](_0x6da813+chunkSize,_0x47469b);}export function renderedCountForTarget({renderedCount:_0x60a626,targetIndex:_0x111576,totalFiles:_0xa98230,chunkSize:chunkSize=DEFAULT_LAZY_RENDER_CHUNK_SIZE}){let _0x49aed3=_0x60a626;while(_0x49aed3<=_0x111576&&_0x49aed3<_0xa98230){_0x49aed3=getNextRenderedCount({'renderedCount':_0x49aed3,'totalFiles':_0xa98230,'chunkSize':chunkSize});}return _0x49aed3;}export function getLazyLoadMoreText({filesLength:_0x45e664,renderedCount:_0x4a4e6a,chunkSize:_0x18e9f0}){const _0x282dc8=Math['max'](0x0,_0x45e664-_0x4a4e6a),_0x3ed491=Math['min'](_0x18e9f0,_0x282dc8);return'Load\x20'+_0x3ed491['toLocaleString']()+'\x20more\x20files\x20('+_0x4a4e6a['toLocaleString']()+'\x20/\x20'+_0x45e664['toLocaleString']()+')';}export function getFileNameFromDiffFile(_0x1b1da1){return _0x1b1da1?.['newPath']||_0x1b1da1?.['oldPath']||'';}export function buildCollapsedStateUpdates({files:_0x354cc8,collapsed:_0x500c25,storageKeyPrefix:_0x5e4925,getStorageKey:_0x5c3615}){const _0xe9f94c=[];for(const _0x5b361f of _0x354cc8||[]){const _0x5f0b64=getFileNameFromDiffFile(_0x5b361f);if(!_0x5f0b64)continue;_0xe9f94c['push']({'key':_0x5c3615(_0x5e4925,_0x5f0b64),'value':String(_0x500c25),'fileName':_0x5f0b64});}return _0xe9f94c;}
@@ -1 +1 @@
1
- import{API,Utils,CustomSelect,ConfirmDialog,initializeAdminMenu}from'./app.js';import{initTheme,mountThemeToggle}from'./theme.js';import{DEFAULT_LAZY_RENDER_MIN_FILES,DEFAULT_LAZY_RENDER_MAX_FILES,DEFAULT_LAZY_RENDER_CHUNK_SIZE,DEFAULT_AUTO_COLLAPSE_MIN_FILES,shouldUseLazyRendering as _0x2d873d,shouldAutoCollapseDiff as _0x1e6d1f,getNextRenderedCount,renderedCountForTarget,getLazyLoadMoreText as _0x58f660,buildCollapsedStateUpdates}from'./git-history-lazy-utils.js';const state={'environments':[],'repos':[],'branches':[],'selectedEnvironment':'','selectedRepo':'','selectedBranch':'','commits':[],'selectedCommit':null,'commitDetail':null,'activeBranch':'','diffView':localStorage['getItem']('git-history-diff-view')||'unified','pagination':{'limit':0x19,'offset':0x0,'hasMore':![],'search':''},'loadingHistory':![],'loadingCommit':![],'loadingBranches':![],'dataSource':'local','diffRender':null},elements={},SEARCH_DEBOUNCE_MS=0x12c,LAZY_RENDER_MIN_FILES=DEFAULT_LAZY_RENDER_MIN_FILES,LAZY_RENDER_MAX_FILES=DEFAULT_LAZY_RENDER_MAX_FILES,LAZY_RENDER_CHUNK_SIZE=DEFAULT_LAZY_RENDER_CHUNK_SIZE,AUTO_COLLAPSE_MIN_FILES=DEFAULT_AUTO_COLLAPSE_MIN_FILES;let searchTimer=null;const OPEN_NEW_TAB_STORAGE_KEY='open-tasks-in-new-tab',branchCache=new Map(),BRANCH_CACHE_TTL_MS=0x5*0x3c*0x3e8;document['addEventListener']('DOMContentLoaded',initialize);async function initialize(){try{initTheme(),mountThemeToggle(),ConfirmDialog['init'](),Object['assign'](elements,{'loading':document['getElementById']('git-history-loading'),'error':document['getElementById']('git-history-error'),'errorMessage':document['getElementById']('git-history-error-message'),'retryBtn':document['getElementById']('retry-git-history-btn'),'content':document['getElementById']('git-history-content'),'envSelect':document['getElementById']('env-select'),'repoSelect':document['getElementById']('repo-select'),'branchSelect':document['getElementById']('branch-select'),'commitList':document['getElementById']('commit-list'),'commitCount':document['getElementById']('commit-count'),'prevBtn':document['getElementById']('prev-page-btn'),'nextBtn':document['getElementById']('next-page-btn'),'searchInput':document['getElementById']('commit-search'),'clearSearchBtn':document['getElementById']('clear-search-btn'),'branchPill':document['getElementById']('repo-branch-pill'),'branchName':document['getElementById']('repo-branch-name'),'placeholder':document['getElementById']('commit-placeholder'),'detailPanel':document['getElementById']('commit-detail'),'commitMessage':document['getElementById']('commit-message'),'commitAuthor':document['getElementById']('commit-author'),'commitDate':document['getElementById']('commit-date'),'commitHash':document['getElementById']('commit-hash'),'copyHashBtn':document['getElementById']('copy-hash-btn'),'viewOnProviderBtn':document['getElementById']('view-on-provider-btn'),'revertBtn':document['getElementById']('revert-btn'),'diffStats':document['getElementById']('diff-stats'),'diffContainer':document['getElementById']('commit-diff'),'expandAllBtn':document['getElementById']('expand-all-btn'),'collapseAllBtn':document['getElementById']('collapse-all-btn'),'mergeControls':document['getElementById']('merge-controls'),'mainlineSelect':document['getElementById']('mainline-select'),'fileNavToggle':document['getElementById']('file-nav-toggle'),'fileNavSidebar':document['getElementById']('file-nav-sidebar'),'fileNavList':document['getElementById']('file-nav-list'),'fileNavClose':document['getElementById']('file-nav-close'),'fileNavCount':document['getElementById']('file-nav-count'),'maximizeBtn':document['getElementById']('maximize-diff-btn'),'gitHistoryBody':document['querySelector']('.git-history-body')});const _0x4a625d=await checkAccess();await initializeAdminMenu(_0x4a625d),setupEventListeners(),initializeDiffViewToggle(),await loadEnvironments(),elements['loading']['hidden']=!![],elements['content']['hidden']=![];}catch(_0x1dbe46){console['error']('Git\x20history\x20initialization\x20error:',_0x1dbe46),elements['loading']['hidden']=!![],elements['error']['hidden']=![],elements['errorMessage']['textContent']=_0x1dbe46['message']||'Unknown\x20error';}}async function checkAccess(){try{const _0x50e7ad=await API['getCurrentUser'](),_0x54c2b5=_0x50e7ad['hasEnvironmentGit']===!![];if(!_0x54c2b5){Utils['showToast']('Access\x20denied:\x20Git\x20permissions\x20required','error'),setTimeout(()=>{window['location']['href']='index.html';},0x708);throw new Error('Access\x20denied');}return _0x50e7ad;}catch(_0x43030e){_0x43030e['message']!=='Access\x20denied'&&(window['location']['href']='login.html');throw _0x43030e;}}function setupEventListeners(){elements['retryBtn']?.['addEventListener']('click',()=>window['location']['reload']()),elements['envSelect']?.['addEventListener']('change',handleEnvironmentChange),elements['repoSelect']?.['addEventListener']('change',handleRepoChange),elements['branchSelect']?.['addEventListener']('change',handleBranchChange),elements['prevBtn']?.['addEventListener']('click',()=>changePage(-0x1)),elements['nextBtn']?.['addEventListener']('click',()=>changePage(0x1)),elements['searchInput']?.['addEventListener']('input',handleSearchInput),elements['clearSearchBtn']?.['addEventListener']('click',clearSearch),elements['commitList']?.['addEventListener']('click',_0x2b58ae=>{const _0xfdd615=_0x2b58ae['target']['closest']('.commit-item');if(!_0xfdd615)return;selectCommit(_0xfdd615['dataset']['hash']);}),elements['copyHashBtn']?.['addEventListener']('click',handleCopyHash),elements['revertBtn']?.['addEventListener']('click',handleRevertCommit),elements['expandAllBtn']?.['addEventListener']('click',()=>setAllDiffCollapsed(![])),elements['collapseAllBtn']?.['addEventListener']('click',()=>setAllDiffCollapsed(!![])),elements['fileNavToggle']?.['addEventListener']('click',toggleFileNav),elements['fileNavClose']?.['addEventListener']('click',closeFileNav),document['addEventListener']('click',_0x2bca20=>{!_0x2bca20['target']['closest']('.file-nav-container')&&closeFileNav();}),elements['maximizeBtn']?.['addEventListener']('click',toggleMaximize),document['addEventListener']('keydown',handleKeyboardNavigation);}function handleKeyboardNavigation(_0x22c1e2){if(_0x22c1e2['target']['matches']('input,\x20select,\x20textarea'))return;const _0x40292d=Array['from'](elements['commitList']?.['querySelectorAll']('.commit-item')||[]);if(_0x40292d['length']===0x0)return;const _0xa9ae8d=_0x40292d['findIndex'](_0x5a454f=>_0x5a454f['classList']['contains']('selected'));switch(_0x22c1e2['key']){case'j':case'ArrowDown':{_0x22c1e2['preventDefault']();const _0x1d201e=_0xa9ae8d<_0x40292d['length']-0x1?_0xa9ae8d+0x1:_0xa9ae8d,_0x3317d9=_0x40292d[_0x1d201e]?.['dataset']['hash'];_0x3317d9&&(selectCommit(_0x3317d9),_0x40292d[_0x1d201e]['scrollIntoView']({'block':'nearest','behavior':'smooth'}));break;}case'k':case'ArrowUp':{_0x22c1e2['preventDefault']();const _0x1d5532=_0xa9ae8d>0x0?_0xa9ae8d-0x1:0x0,_0x5e99e2=_0x40292d[_0x1d5532]?.['dataset']['hash'];_0x5e99e2&&(selectCommit(_0x5e99e2),_0x40292d[_0x1d5532]['scrollIntoView']({'block':'nearest','behavior':'smooth'}));break;}case'Enter':{state['selectedCommit']&&elements['diffContainer']?.['focus']();break;}case'c':{state['commitDetail']?.['commit']?.['hash']&&handleCopyHash();break;}case'e':{setAllDiffCollapsed(![]);break;}case'w':{setAllDiffCollapsed(!![]);break;}case'/':{_0x22c1e2['preventDefault'](),elements['searchInput']?.['focus']();break;}case'Escape':{if(elements['gitHistoryBody']?.['classList']['contains']('maximized'))toggleMaximize();else document['activeElement']===elements['searchInput']&&elements['searchInput']['blur']();break;}case'm':{state['commitDetail']&&toggleMaximize();break;}}}function initializeDiffViewToggle(){const _0x320609=Array['from'](document['querySelectorAll']('.segmented-btn'));_0x320609['forEach'](_0x2119ca=>{_0x2119ca['classList']['toggle']('active',_0x2119ca['dataset']['view']===state['diffView']),_0x2119ca['addEventListener']('click',()=>{if(_0x2119ca['dataset']['view']===state['diffView'])return;state['diffView']=_0x2119ca['dataset']['view'],localStorage['setItem']('git-history-diff-view',state['diffView']),_0x320609['forEach'](_0x5ef7df=>_0x5ef7df['classList']['toggle']('active',_0x5ef7df===_0x2119ca)),renderCommitDiff();});});}async function loadEnvironments(){const _0x5c1496=await API['getEnvironments']();state['environments']=_0x5c1496['environments']||[],elements['envSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20environment</option>',state['environments']['forEach'](_0x47473a=>{const _0x51ea12=document['createElement']('option');_0x51ea12['value']=_0x47473a['name'],_0x51ea12['textContent']=_0x47473a['name'],elements['envSelect']['appendChild'](_0x51ea12);}),new CustomSelect(elements['envSelect'],{'searchable':!![]}),new CustomSelect(elements['repoSelect'],{'searchable':!![]}),new CustomSelect(elements['branchSelect'],{'searchable':!![]});const _0x36880e=_0x5c1496['default_environment']||state['environments'][0x0]?.['name']||'';_0x36880e&&(elements['envSelect']['value']=_0x36880e,elements['envSelect']['dispatchEvent'](new Event('change')));}async function handleEnvironmentChange(){state['selectedEnvironment']=elements['envSelect']['value'],state['selectedRepo']='',state['selectedBranch']='',state['activeBranch']='',state['repos']=[],state['branches']=[],elements['repoSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20repository</option>',elements['repoSelect']['disabled']=!![],elements['branchSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20branch</option>',elements['branchSelect']['disabled']=!![],elements['branchPill']['hidden']=!![],elements['commitList']['innerHTML']='',elements['commitCount']['textContent']='Select\x20a\x20repository\x20to\x20load\x20history.',resetCommitDetail();if(!state['selectedEnvironment'])return;try{const _0x4a4555=await API['getEnvironment'](state['selectedEnvironment']);state['repos']=_0x4a4555['repos']||[],elements['repoSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20repository</option>',state['repos']['forEach'](_0x39d9b8=>{const _0x17d19e=document['createElement']('option');_0x17d19e['value']=_0x39d9b8['name'],_0x17d19e['textContent']=_0x39d9b8['name'],elements['repoSelect']['appendChild'](_0x17d19e);}),elements['repoSelect']['disabled']=state['repos']['length']===0x0;const _0x35b70f=state['repos'][0x0]?.['name'];_0x35b70f&&(elements['repoSelect']['value']=_0x35b70f,elements['repoSelect']['dispatchEvent'](new Event('change')));}catch(_0x1bf923){Utils['showError'](_0x1bf923['message']||'Failed\x20to\x20load\x20repositories');}}async function handleRepoChange(){state['selectedRepo']=elements['repoSelect']['value'],state['selectedBranch']='',state['activeBranch']='',state['branches']=[],state['pagination']['offset']=0x0,state['pagination']['search']='',elements['searchInput']['value']='',elements['clearSearchBtn']['hidden']=!![],elements['branchSelect']['innerHTML']='<option\x20value=\x22\x22>Loading\x20branches...</option>',elements['branchSelect']['disabled']=!![],resetCommitDetail();if(!state['selectedRepo']){elements['commitList']['innerHTML']='',elements['commitCount']['textContent']='Select\x20a\x20repository\x20to\x20load\x20history.',elements['branchPill']['hidden']=!![],elements['branchSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20branch</option>';return;}await loadBranches(),loadHistory();}async function loadBranches(){if(!state['selectedEnvironment']||!state['selectedRepo'])return;if(state['loadingBranches'])return;state['loadingBranches']=!![];try{const _0x196737=state['selectedEnvironment']+':'+state['selectedRepo'],_0x203db9=branchCache['get'](_0x196737),_0x137c43=Date['now']();let _0x49528d;_0x203db9&&_0x137c43-_0x203db9['timestamp']<BRANCH_CACHE_TTL_MS?_0x49528d=_0x203db9:(_0x49528d=await API['getEnvironmentRepoBranches'](state['selectedEnvironment'],state['selectedRepo']),branchCache['set'](_0x196737,{..._0x49528d,'timestamp':_0x137c43}));state['branches']=_0x49528d['branches']||[],elements['branchSelect']['innerHTML']='';const _0x13a82f=document['createElement']('option');_0x13a82f['value']='',_0x13a82f['textContent']=_0x49528d['defaultBranch']?_0x49528d['defaultBranch']+'\x20(default)':_0x49528d['currentBranch']?_0x49528d['currentBranch']+'\x20(current)':'Select\x20branch',elements['branchSelect']['appendChild'](_0x13a82f);const _0x3f4d5e=_0x49528d['defaultBranch']||_0x49528d['currentBranch'];state['branches']['forEach'](_0x183f0d=>{if(_0x183f0d['name']===_0x3f4d5e)return;const _0x40770b=document['createElement']('option');_0x40770b['value']=_0x183f0d['name'];let _0x11ec19=_0x183f0d['name'];if(_0x183f0d['isDefault'])_0x11ec19+='\x20(default)';if(_0x183f0d['isCurrent'])_0x11ec19+='\x20(current)';_0x40770b['textContent']=_0x11ec19,elements['branchSelect']['appendChild'](_0x40770b);}),elements['branchSelect']['disabled']=state['branches']['length']===0x0,_0x49528d['currentBranch']&&(state['selectedBranch']=''),elements['branchSelect']['value']=state['selectedBranch'],queueMicrotask(()=>{elements['branchSelect']['dispatchEvent'](new Event('change'));});}catch(_0x9597b6){console['error']('Failed\x20to\x20load\x20branches:',_0x9597b6),elements['branchSelect']['innerHTML']='<option\x20value=\x22\x22>Branch\x20loading\x20failed</option>',elements['branchSelect']['disabled']=!![];}finally{state['loadingBranches']=![];}}function handleBranchChange(){state['selectedBranch']=elements['branchSelect']['value'],state['pagination']['offset']=0x0,resetCommitDetail(),loadHistory();}async function loadHistory(_0x477cd2={}){if(!state['selectedEnvironment']||!state['selectedRepo'])return;if(state['loadingHistory'])return;state['loadingHistory']=!![],elements['commitList']['innerHTML']=renderLoadingSkeletons(0x5),elements['commitCount']['textContent']='Loading\x20history...';try{const _0x4384e1={'limit':state['pagination']['limit'],'offset':state['pagination']['offset'],'search':state['pagination']['search']};state['selectedBranch']&&(_0x4384e1['branch']=state['selectedBranch']);const _0x149204=await API['getEnvironmentRepoHistory'](state['selectedEnvironment'],state['selectedRepo'],_0x4384e1);state['commits']=_0x149204['commits']||[],state['pagination']['hasMore']=_0x149204['pagination']?.['hasMore']||![],state['dataSource']=_0x149204['source']||'local',state['activeBranch']=_0x149204['repo']?.['branch']||state['selectedBranch']||'';_0x149204['repo']?.['branch']?(elements['branchName']['textContent']=_0x149204['repo']['branch'],elements['branchPill']['hidden']=![]):elements['branchPill']['hidden']=!![];updateSourceIndicator(),renderCommitList();const _0x380aea=_0x477cd2['keepSelection']&&state['selectedCommit'],_0x5c734a=state['commits']['some'](_0x12f486=>_0x12f486['hash']===state['selectedCommit']?.['hash']);if(_0x380aea&&_0x5c734a)highlightSelectedCommit();else state['commits']['length']>0x0?selectCommit(state['commits'][0x0]['hash'],{'silent':!![]}):resetCommitDetail();}catch(_0x430fcb){Utils['showError'](_0x430fcb['message']||'Failed\x20to\x20load\x20commit\x20history'),elements['commitList']['innerHTML']='',elements['commitCount']['textContent']='Unable\x20to\x20load\x20history.';}finally{state['loadingHistory']=![];}}function updateSourceIndicator(){let _0x3803cb=document['getElementById']('data-source-indicator');!_0x3803cb&&(_0x3803cb=document['createElement']('span'),_0x3803cb['id']='data-source-indicator',_0x3803cb['className']='source-indicator',elements['branchPill']?.['parentNode']?.['insertBefore'](_0x3803cb,elements['branchPill']['nextSibling'])),state['dataSource']==='remote'?(_0x3803cb['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20<svg\x20class=\x22source-icon\x22\x20width=\x2214\x22\x20height=\x2214\x22\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22\x20stroke-linecap=\x22round\x22\x20stroke-linejoin=\x22round\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<circle\x20cx=\x2212\x22\x20cy=\x2212\x22\x20r=\x2210\x22></circle>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\x222\x22\x20y1=\x2212\x22\x20x2=\x2222\x22\x20y2=\x2212\x22></line>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\x22M12\x202a15.3\x2015.3\x200\x200\x201\x204\x2010\x2015.3\x2015.3\x200\x200\x201-4\x2010\x2015.3\x2015.3\x200\x200\x201-4-10\x2015.3\x2015.3\x200\x200\x201\x204-10z\x22></path>\x0a\x20\x20\x20\x20\x20\x20</svg>\x0a\x20\x20\x20\x20\x20\x20Remote\x0a\x20\x20\x20\x20',_0x3803cb['title']='Data\x20fetched\x20from\x20remote\x20Git\x20provider\x20(repository\x20not\x20cloned\x20locally)',_0x3803cb['hidden']=![]):_0x3803cb['hidden']=!![];}async function selectCommit(_0x15231b,_0x3cb8bf={}){if(!_0x15231b)return;if(state['loadingCommit'])return;const _0x23582a=state['commits']['find'](_0x2fd2a2=>_0x2fd2a2['hash']===_0x15231b);if(!_0x23582a)return;state['selectedCommit']=_0x23582a,highlightSelectedCommit();if(_0x3cb8bf['silent']){await loadCommitDetail(_0x15231b);return;}await loadCommitDetail(_0x15231b);}function highlightSelectedCommit(){const _0x26af1b=elements['commitList']['querySelectorAll']('.commit-item');_0x26af1b['forEach'](_0x3f0c47=>{_0x3f0c47['classList']['toggle']('selected',_0x3f0c47['dataset']['hash']===state['selectedCommit']?.['hash']);});}async function loadCommitDetail(_0x29f572){state['loadingCommit']=!![],elements['placeholder']['hidden']=!![],elements['detailPanel']['hidden']=![],elements['diffContainer']['innerHTML']='<div\x20class=\x22empty-state-card\x22>Loading\x20diff...</div>';try{const _0xeffe9=await API['getEnvironmentRepoCommit'](state['selectedEnvironment'],state['selectedRepo'],_0x29f572);state['commitDetail']=_0xeffe9,renderCommitDetail();}catch(_0x471f65){Utils['showError'](_0x471f65['message']||'Failed\x20to\x20load\x20commit\x20details'),elements['diffContainer']['innerHTML']='<div\x20class=\x22empty-state-card\x22>Unable\x20to\x20load\x20diff.</div>';}finally{state['loadingCommit']=![];}}function renderCommitList(){elements['commitList']['innerHTML']='';if(state['commits']['length']===0x0){const _0x4356ab=state['pagination']['search']?'No\x20commits\x20match\x20\x22'+state['pagination']['search']+'\x22.':'No\x20commits\x20found.';elements['commitCount']['textContent']=_0x4356ab,elements['commitList']['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20<li\x20class=\x22commit-list-empty\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22empty-state-icon\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<svg\x20width=\x2224\x22\x20height=\x2224\x22\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22\x20stroke-linecap=\x22round\x22\x20stroke-linejoin=\x22round\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<circle\x20cx=\x2212\x22\x20cy=\x2212\x22\x20r=\x2210\x22></circle>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\x2212\x22\x20y1=\x228\x22\x20x2=\x2212\x22\x20y2=\x2212\x22></line>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\x2212\x22\x20y1=\x2216\x22\x20x2=\x2212.01\x22\x20y2=\x2216\x22></line>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</svg>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>'+Utils['escapeHtml'](_0x4356ab)+'</p>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20',elements['prevBtn']['disabled']=!![],elements['nextBtn']['disabled']=!![];return;}const _0x2f7bbb=state['pagination']['offset']+0x1,_0x4d0bca=state['pagination']['offset']+state['commits']['length'],_0x32d8b3=state['pagination']['search']?_0x2f7bbb+'-'+_0x4d0bca+'\x20matching\x20\x22'+state['pagination']['search']+'\x22':_0x2f7bbb+'-'+_0x4d0bca;elements['commitCount']['textContent']=_0x32d8b3,state['commits']['forEach']((_0x50082c,_0x15b06d)=>{const _0x572661=document['createElement']('li');_0x572661['className']='commit-item',_0x572661['dataset']['hash']=_0x50082c['hash'],_0x572661['tabIndex']=0x0,_0x572661['setAttribute']('role','button'),_0x572661['setAttribute']('aria-label','Commit:\x20'+(_0x50082c['message']||'No\x20message')+'\x20by\x20'+(_0x50082c['author']||'Unknown')),_0x572661['style']['animationDelay']=_0x15b06d*0x19+'ms';const _0x200b71=getAuthorInitials(_0x50082c['author']),_0x54ee72=getAvatarColor(_0x50082c['author']||'Unknown'),_0x132507=detectCommitType(_0x50082c['message']),_0x32faac=_0x132507?'<span\x20class=\x22commit-type-indicator\x20'+_0x132507+'\x22>'+_0x132507+'</span>':'';_0x572661['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22commit-message\x22>'+Utils['escapeHtml'](truncateMessage(_0x50082c['message']||'No\x20message',0x50))+'</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22commit-meta-row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22commit-author-chip\x22\x20style=\x22--avatar-color:\x20'+_0x54ee72+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22author-avatar\x22>'+_0x200b71+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+Utils['escapeHtml'](_0x50082c['author']||'Unknown')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22commit-time\x22>'+Utils['formatRelativeTime'](_0x50082c['date'])+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22commit-short-hash\x22>'+_0x50082c['shortHash']+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x50082c['isMerge']?'<span\x20class=\x22commit-tag\x22>Merge</span>':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+_0x32faac+'\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20',_0x572661['addEventListener']('keydown',_0x52828f=>{(_0x52828f['key']==='Enter'||_0x52828f['key']==='\x20')&&(_0x52828f['preventDefault'](),selectCommit(_0x50082c['hash']));}),elements['commitList']['appendChild'](_0x572661);}),elements['prevBtn']['disabled']=state['pagination']['offset']===0x0,elements['nextBtn']['disabled']=!state['pagination']['hasMore'],highlightSelectedCommit();}function getAuthorInitials(_0x32d2b2){if(!_0x32d2b2)return'?';const _0x9936cc=_0x32d2b2['trim']()['split'](/\s+/);if(_0x9936cc['length']===0x1)return _0x9936cc[0x0]['charAt'](0x0)['toUpperCase']();return(_0x9936cc[0x0]['charAt'](0x0)+_0x9936cc[_0x9936cc['length']-0x1]['charAt'](0x0))['toUpperCase']();}function getAvatarColor(_0x1d3e1c){let _0x36f889=0x0;for(let _0x1257d8=0x0;_0x1257d8<_0x1d3e1c['length'];_0x1257d8++){_0x36f889=_0x1d3e1c['charCodeAt'](_0x1257d8)+((_0x36f889<<0x5)-_0x36f889);}const _0x58a60d=Math['abs'](_0x36f889%0x168);return'hsl('+_0x58a60d+',\x2065%,\x2055%)';}function truncateMessage(_0x5be1c9,_0x569509){if(!_0x5be1c9)return'';const _0x2bed44=_0x5be1c9['split']('\x0a')[0x0];if(_0x2bed44['length']<=_0x569509)return _0x2bed44;return _0x2bed44['substring'](0x0,_0x569509-0x3)+'...';}function asFiniteNumber(_0x2e7ad2){return Number['isFinite'](_0x2e7ad2)?_0x2e7ad2:null;}function formatFileCountLabel(_0x2b51a1,_0x141891={}){const _0x4899d8=Boolean(_0x141891['lowerBound']),_0x269557=_0x4899d8?'at\x20least\x20':'';return''+_0x269557+_0x2b51a1+'\x20file'+(_0x2b51a1===0x1?'':'s');}function formatBytes(_0x3f1bfb){if(!Number['isFinite'](_0x3f1bfb)||_0x3f1bfb<=0x0)return'';const _0x28b1fc=_0x3f1bfb/(0x400*0x400);if(_0x28b1fc>=0x1)return _0x28b1fc['toFixed'](0x1)+'MB';const _0x408654=_0x3f1bfb/0x400;return Math['max'](0x1,Math['round'](_0x408654))+'KB';}function getEffectiveDiffStats(_0x5658ab,_0x41a14e){const _0x159cb2=asFiniteNumber(_0x41a14e?.['changedFiles']),_0x287fb9=asFiniteNumber(_0x41a14e?.['changedFilesLowerBound']),_0x38bd7b=asFiniteNumber(_0x41a14e?.['additions']),_0x1c6889=asFiniteNumber(_0x41a14e?.['deletions']);return{'files':_0x159cb2??_0x287fb9??_0x5658ab['files'],'filesIsLowerBound':_0x159cb2===null&&_0x287fb9!==null,'additions':_0x38bd7b??_0x5658ab['additions'],'deletions':_0x1c6889??_0x5658ab['deletions']};}function getDiffNoticeText(_0x2ab9c){if(!_0x2ab9c?.['truncated'])return'';if(_0x2ab9c['omitted']){const _0x51d058=asFiniteNumber(_0x2ab9c['changedFiles']),_0xe7ba04=asFiniteNumber(_0x2ab9c['changedFilesLowerBound']),_0x56938f=asFiniteNumber(_0x2ab9c['maxFiles']);if(_0x51d058!==null&&_0x56938f!==null)return'Diff\x20omitted\x20because\x20this\x20commit\x20changes\x20'+_0x51d058['toLocaleString']()+'\x20files\x20(limit\x20'+_0x56938f['toLocaleString']()+').';if(_0xe7ba04!==null&&_0x56938f!==null)return'Diff\x20omitted\x20because\x20this\x20commit\x20changes\x20at\x20least\x20'+_0xe7ba04['toLocaleString']()+'\x20files\x20(limit\x20'+_0x56938f['toLocaleString']()+').';if(_0xe7ba04!==null)return'Diff\x20omitted\x20because\x20this\x20commit\x20changes\x20at\x20least\x20'+_0xe7ba04['toLocaleString']()+'\x20files.';return'Diff\x20omitted\x20for\x20this\x20large\x20commit\x20to\x20keep\x20Git\x20History\x20responsive.';}const _0x47f636=asFiniteNumber(_0x2ab9c['maxBytes']);if(_0x47f636!==null)return'Showing\x20a\x20truncated\x20diff\x20preview\x20('+formatBytes(_0x47f636)+'\x20max)\x20to\x20keep\x20Git\x20History\x20responsive.';return'Showing\x20a\x20truncated\x20diff\x20preview\x20to\x20keep\x20Git\x20History\x20responsive.';}function shouldUseLazyRendering(_0x34bbc3,_0x515841=null){const _0x4dd2e1=asFiniteNumber(_0x515841?.['maxFiles']);return _0x2d873d(_0x34bbc3,{'minFiles':LAZY_RENDER_MIN_FILES,'maxFiles':LAZY_RENDER_MAX_FILES,'serverMaxFiles':_0x4dd2e1});}function shouldAutoCollapseDiff(_0x413f27){return _0x1e6d1f(_0x413f27,{'threshold':AUTO_COLLAPSE_MIN_FILES});}function getLazyLoadMoreText(_0x52158){if(!_0x52158)return'Load\x20more\x20files';return _0x58f660({'filesLength':_0x52158['files']['length'],'renderedCount':_0x52158['renderedCount'],'chunkSize':_0x52158['chunkSize']});}function ensureLazyDiffFileRendered(_0x2f0e04){if(!state['diffRender']?.['lazy'])return;const _0x108f3e=renderedCountForTarget({'renderedCount':state['diffRender']['renderedCount'],'targetIndex':_0x2f0e04,'totalFiles':state['diffRender']['files']['length'],'chunkSize':state['diffRender']['chunkSize']});while(state['diffRender']['renderedCount']<_0x108f3e){renderNextDiffChunk();}}function updateLazyLoadMoreControl(){const _0x84efb3=state['diffRender'];if(!_0x84efb3?.['lazy']||!elements['diffContainer'])return;const _0x16808f=elements['diffContainer']['querySelector']('.diff-load-more-control');if(!_0x16808f)return;if(_0x84efb3['renderedCount']>=_0x84efb3['files']['length']){_0x16808f['innerHTML']='<span\x20class=\x22diff-load-complete\x22>All\x20'+formatFileCountLabel(_0x84efb3['files']['length'])+'\x20loaded</span>';return;}_0x16808f['innerHTML']='<button\x20class=\x22btn-ghost\x20btn-small\x20diff-load-more-btn\x22\x20type=\x22button\x22>'+getLazyLoadMoreText(_0x84efb3)+'</button>';const _0x54245f=_0x16808f['querySelector']('.diff-load-more-btn');_0x54245f?.['addEventListener']('click',()=>{renderNextDiffChunk();});}function renderNextDiffChunk(){const _0x5456cd=state['diffRender'];if(!_0x5456cd?.['lazy']||!elements['diffContainer'])return;if(_0x5456cd['renderedCount']>=_0x5456cd['files']['length'])return;const _0x1e7dc0=elements['diffContainer']['querySelector']('.diff-files-host');if(!_0x1e7dc0)return;const _0x5d24f0=_0x5456cd['renderedCount'],_0x288f1b=getNextRenderedCount({'renderedCount':_0x5d24f0,'totalFiles':_0x5456cd['files']['length'],'chunkSize':_0x5456cd['chunkSize']}),_0x24c8cc=_0x5456cd['files']['slice'](_0x5d24f0,_0x288f1b),_0x38e072=state['diffView']==='split'?renderSplitDiff(_0x24c8cc,_0x5456cd['storageKeyPrefix'],_0x5d24f0,{'defaultCollapsed':_0x5456cd['defaultCollapsed']}):renderUnifiedDiff(_0x24c8cc,_0x5456cd['storageKeyPrefix'],_0x5d24f0,{'defaultCollapsed':_0x5456cd['defaultCollapsed']});_0x1e7dc0['insertAdjacentHTML']('beforeend',_0x38e072),_0x5456cd['renderedCount']=_0x288f1b,bindDiffToggleHandlers(_0x5456cd['storageKeyPrefix']),updateLazyLoadMoreControl();}function renderCommitDetail(){if(!state['commitDetail']||!state['commitDetail']['commit']){resetCommitDetail();return;}const _0x1cacd4=state['commitDetail']['commit'];elements['commitMessage']['textContent']=_0x1cacd4['message']||'No\x20message',elements['commitAuthor']['textContent']=''+(_0x1cacd4['author']||'Unknown')+(_0x1cacd4['email']?'\x20('+_0x1cacd4['email']+')':''),elements['commitDate']['textContent']=formatDate(_0x1cacd4['date']),elements['commitHash']['textContent']=_0x1cacd4['hash'];const _0x54a52e=isSelectedCommitRemoteSource();elements['revertBtn']&&(elements['revertBtn']['hidden']=![],elements['revertBtn']['textContent']=_0x54a52e?'Revert\x20via\x20task':'Revert\x20commit',elements['revertBtn']['title']=_0x54a52e?'Create\x20a\x20task\x20that\x20applies\x20this\x20revert\x20and\x20stages\x20the\x20changes\x20for\x20approval':'');if(elements['viewOnProviderBtn']){const _0x5e53d6=getProviderCommitUrl(_0x1cacd4['hash']);_0x5e53d6&&_0x54a52e?(elements['viewOnProviderBtn']['hidden']=![],elements['viewOnProviderBtn']['href']=_0x5e53d6,elements['viewOnProviderBtn']['textContent']='View\x20on\x20'+getProviderDisplayName()):elements['viewOnProviderBtn']['hidden']=!![];}const _0xf1143=_0x1cacd4['parents']||[];_0xf1143['length']>0x1?(elements['mergeControls']['hidden']=![],elements['mainlineSelect']['innerHTML']='',_0xf1143['forEach']((_0xa6bf91,_0x37f264)=>{const _0x4af61f=document['createElement']('option');_0x4af61f['value']=String(_0x37f264+0x1),_0x4af61f['textContent']='Parent\x20'+(_0x37f264+0x1)+'\x20-\x20'+_0xa6bf91['slice'](0x0,0x7),elements['mainlineSelect']['appendChild'](_0x4af61f);})):elements['mergeControls']['hidden']=!![];const _0x5ed391=state['commitDetail']['diffMeta']||null,_0x328490=_0x5ed391?.['omitted']?[]:parsePatchContent(state['commitDetail']['diff']||'');state['commitDetail']['files']=_0x328490;const _0x396565=calculateDiffStats(_0x328490),_0x5c3e8b=getEffectiveDiffStats(_0x396565,_0x5ed391);elements['diffStats']['innerHTML']='\x0a\x20\x20\x20\x20<span\x20class=\x22diff-stat-files\x22>'+formatFileCountLabel(_0x5c3e8b['files'],{'lowerBound':_0x5c3e8b['filesIsLowerBound']})+'</span>\x0a\x20\x20\x20\x20<span\x20class=\x22diff-stat-separator\x22>|</span>\x0a\x20\x20\x20\x20<span\x20class=\x22diff-stat-add\x22>+'+_0x5c3e8b['additions']['toLocaleString']()+'</span>\x0a\x20\x20\x20\x20<span\x20class=\x22diff-stat-del\x22>-'+_0x5c3e8b['deletions']['toLocaleString']()+'</span>\x0a\x20\x20';elements['fileNavCount']&&(elements['fileNavCount']['textContent']=formatFileCountLabel(_0x5c3e8b['files'],{'lowerBound':_0x5c3e8b['filesIsLowerBound']}));if(elements['fileNavToggle']){const _0x3025a9=_0x328490['length']>0x0;elements['fileNavToggle']['disabled']=!_0x3025a9,elements['fileNavToggle']['setAttribute']('aria-disabled',String(!_0x3025a9)),elements['fileNavToggle']['title']=_0x3025a9?'Browse\x20changed\x20files':_0x5ed391?.['omitted']?'Diff\x20omitted\x20for\x20this\x20large\x20commit':'No\x20file\x20diff\x20to\x20browse',!_0x3025a9&&closeFileNav();}renderCommitDiff();}function renderCommitDiff(){if(!state['commitDetail']||!elements['diffContainer'])return;const _0x30a988=state['commitDetail']['diffMeta']||null,_0x592eff=getDiffNoticeText(_0x30a988);state['diffRender']=null;if(_0x30a988?.['omitted']){elements['diffContainer']['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22empty-state-card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<h2>Diff\x20Omitted</h2>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p\x20class=\x22text-muted\x22>'+Utils['escapeHtml'](_0x592eff||'Diff\x20omitted\x20for\x20this\x20large\x20commit.')+'</p>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20';return;}const _0x54b2d3=state['commitDetail']['files']||parsePatchContent(state['commitDetail']['diff']||'');if(_0x54b2d3['length']===0x0){if(_0x30a988?.['truncated']){elements['diffContainer']['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22empty-state-card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<h2>Diff\x20Truncated</h2>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<p\x20class=\x22text-muted\x22>'+Utils['escapeHtml'](_0x592eff||'Diff\x20output\x20is\x20truncated.')+'</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20';return;}elements['diffContainer']['innerHTML']='<div\x20class=\x22empty-state-card\x22>No\x20changes\x20in\x20this\x20commit.</div>';return;}const _0x3fa41e='git-history-'+state['commitDetail']['commit']['hash'],_0x489d31=_0x30a988?.['truncated']?'<div\x20class=\x22diff-truncated-banner\x22>'+Utils['escapeHtml'](_0x592eff)+'</div>':'',_0x250a8a=shouldUseLazyRendering(_0x54b2d3['length'],_0x30a988),_0x204eb9=shouldAutoCollapseDiff(_0x54b2d3['length']);if(_0x250a8a){state['diffRender']={'lazy':!![],'files':_0x54b2d3,'storageKeyPrefix':_0x3fa41e,'renderedCount':0x0,'chunkSize':LAZY_RENDER_CHUNK_SIZE,'defaultCollapsed':_0x204eb9};const _0x3f9f65=_0x204eb9?'Large\x20commit\x20detected\x20('+_0x54b2d3['length']['toLocaleString']()+'\x20files).\x20Files\x20are\x20collapsed\x20by\x20default\x20and\x20rendered\x20in\x20chunks.':'Large\x20commit\x20detected\x20('+_0x54b2d3['length']['toLocaleString']()+'\x20files).\x20Rendering\x20files\x20in\x20chunks\x20for\x20better\x20responsiveness.';elements['diffContainer']['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20'+_0x489d31+'\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22diff-large-commit-banner\x22>'+Utils['escapeHtml'](_0x3f9f65)+'</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22diff-files-host\x22></div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22diff-load-more-control\x22></div>\x0a\x20\x20\x20\x20',renderNextDiffChunk();return;}const _0x2b9ffc=state['diffView']==='split'?renderSplitDiff(_0x54b2d3,_0x3fa41e,0x0,{'defaultCollapsed':_0x204eb9}):renderUnifiedDiff(_0x54b2d3,_0x3fa41e,0x0,{'defaultCollapsed':_0x204eb9});elements['diffContainer']['innerHTML']=''+_0x489d31+_0x2b9ffc,bindDiffToggleHandlers(_0x3fa41e);}function resetCommitDetail(){state['selectedCommit']=null,state['commitDetail']=null,state['diffRender']=null,closeFileNav(),elements['placeholder']['hidden']=![],elements['detailPanel']['hidden']=!![];}function getSelectedRepoObject(){return state['repos']['find'](_0x21a2ee=>_0x21a2ee['name']===state['selectedRepo'])||null;}function getProviderDisplayName(){const _0x46a40d=getSelectedRepoObject(),_0xdca6ab=_0x46a40d?.['url']?.['toLowerCase']()||'';if(_0xdca6ab['includes']('github.com')||_0xdca6ab['includes']('github.'))return'GitHub';else{if(_0xdca6ab['includes']('gitlab.com')||_0xdca6ab['includes']('gitlab.'))return'GitLab';else{if(_0xdca6ab['includes']('bitbucket.org')||_0xdca6ab['includes']('bitbucket.'))return'Bitbucket';else{if(_0xdca6ab['includes']('dev.azure.com')||_0xdca6ab['includes']('visualstudio.com'))return'Azure\x20DevOps';}}}return'Provider';}function getProviderCommitUrl(_0x38f45a){const _0x279405=getSelectedRepoObject();if(!_0x279405?.['url'])return null;let _0x46da4d=_0x279405['url']['replace'](/\.git$/,'');_0x46da4d=_0x46da4d['replace'](/^(https?:\/\/)[^@]+@/,'$1');const _0x2b3767=_0x46da4d['toLowerCase']();if(_0x2b3767['includes']('gitlab.com')||_0x2b3767['includes']('gitlab.'))return _0x46da4d+'/-/commit/'+_0x38f45a;else{if(_0x2b3767['includes']('bitbucket.org')||_0x2b3767['includes']('bitbucket.'))return _0x46da4d+'/commits/'+_0x38f45a;}return _0x46da4d+'/commit/'+_0x38f45a;}function isSelectedCommitRemoteSource(){return state['commitDetail']?.['source']==='remote'||state['dataSource']==='remote';}function getSelectedBranchForRevertTask(){const _0x567d92=(state['selectedBranch']||'')['trim']();if(_0x567d92)return _0x567d92;const _0x55380c=(state['activeBranch']||'')['trim']();if(_0x55380c)return _0x55380c;const _0x773455=(elements['branchName']?.['textContent']||'')['trim']();return _0x773455||null;}function buildRemoteRevertTaskInstructions(_0x4fd064,_0x1bfdc5={}){const _0x3b5d16=getSelectedBranchForRevertTask(),_0x30e60e=_0x1bfdc5['mainline']||null,_0x4ff803=Array['isArray'](_0x4fd064['parents'])&&_0x4fd064['parents']['length']>0x1,_0x2a74c1=_0x4ff803?'git\x20revert\x20--no-commit\x20-m\x20'+(_0x30e60e||'1')+'\x20'+_0x4fd064['hash']:'git\x20revert\x20--no-commit\x20'+_0x4fd064['hash'],_0x1e0db2=['Please\x20revert\x20commit\x20'+_0x4fd064['hash']+'\x20in\x20repository\x20\x22'+state['selectedRepo']+'\x22\x20for\x20environment\x20\x22'+state['selectedEnvironment']+'\x22.','','Requirements:','1.\x20Open\x20repository\x20\x22'+state['selectedRepo']+'\x22\x20(typically\x20under\x20/workspace).',_0x3b5d16?'2.\x20Ensure\x20branch\x20\x22'+_0x3b5d16+'\x22\x20is\x20checked\x20out\x20(fetch\x20first\x20if\x20needed).':'2.\x20Use\x20the\x20repository\x20branch\x20configured\x20for\x20this\x20environment.','3.\x20Run\x20`'+_0x2a74c1+'`.','4.\x20If\x20there\x20are\x20conflicts,\x20resolve\x20them\x20and\x20stage\x20the\x20resolved\x20files.','5.\x20Ensure\x20all\x20revert\x20changes\x20are\x20staged\x20(`git\x20add\x20-A`\x20as\x20needed).','6.\x20Do\x20NOT\x20run\x20`git\x20commit`\x20and\x20do\x20NOT\x20push.','7.\x20In\x20your\x20final\x20response,\x20report\x20success/failure\x20and\x20summarize\x20changed\x20files\x20and\x20conflicts.'];return _0x1e0db2['join']('\x0a');}function navigateToTask(_0x14162c){const _0xc9e176='task.html?id='+encodeURIComponent(_0x14162c),_0x1aa3e4=localStorage['getItem'](OPEN_NEW_TAB_STORAGE_KEY)==='true';if(_0x1aa3e4){const _0x5f1986=window['open'](_0xc9e176,'_blank');!_0x5f1986&&(window['location']['href']=_0xc9e176);return;}window['location']['href']=_0xc9e176;}async function createRemoteRevertTask(_0x4dbb44,_0xafa58a={}){const _0x122664=_0x4dbb44['shortHash']||_0x4dbb44['hash']['slice'](0x0,0x7),_0x406ba7=buildRemoteRevertTaskInstructions(_0x4dbb44,_0xafa58a),_0x545583={'name':'Revert\x20'+_0x122664+'\x20in\x20'+state['selectedRepo'],'environment':state['selectedEnvironment'],'task_type':'manual','parameters':{'instructions':_0x406ba7}},_0xc354ff=elements['revertBtn']?.['textContent']||'Revert\x20via\x20task';elements['revertBtn']&&(elements['revertBtn']['disabled']=!![],elements['revertBtn']['textContent']='Creating\x20task...');try{const _0x2a08b4=await API['createTask'](_0x545583),_0x5e1771=_0x2a08b4?.['taskId'];if(!_0x5e1771)throw new Error('Task\x20created\x20but\x20no\x20task\x20ID\x20was\x20returned');Utils['showSuccess']('Revert\x20task\x20created'),navigateToTask(_0x5e1771);}catch(_0x45ae07){if(_0x45ae07?.['error']==='git_connections_required'&&Array['isArray'](_0x45ae07['providers'])&&_0x45ae07['providers']['length']>0x0){const _0x340013=_0x45ae07['providers']['map'](_0x2c9ed8=>_0x2c9ed8['displayName']||_0x2c9ed8['provider']||_0x2c9ed8['name']||'provider')['join'](',\x20');throw new Error('Git\x20connection\x20required:\x20'+_0x340013+'.\x20Connect\x20account(s)\x20in\x20Settings\x20and\x20retry.');}throw _0x45ae07;}finally{elements['revertBtn']&&(elements['revertBtn']['disabled']=![],elements['revertBtn']['textContent']=_0xc354ff);}}function handleSearchInput(_0x13fb1b){const _0x32cd33=_0x13fb1b['target']['value']['trim']();elements['clearSearchBtn']['hidden']=!_0x32cd33,searchTimer&&clearTimeout(searchTimer),searchTimer=setTimeout(()=>{state['pagination']['search']=_0x32cd33,state['pagination']['offset']=0x0,loadHistory();},SEARCH_DEBOUNCE_MS);}function clearSearch(){elements['searchInput']['value']='',elements['clearSearchBtn']['hidden']=!![],state['pagination']['search']='',state['pagination']['offset']=0x0,loadHistory();}function changePage(_0x159386){const _0x361aaa=state['pagination']['offset']+_0x159386*state['pagination']['limit'];if(_0x361aaa<0x0)return;state['pagination']['offset']=_0x361aaa,loadHistory({'keepSelection':![]});}async function handleCopyHash(){if(!state['commitDetail']?.['commit']?.['hash'])return;const _0x2493ae=await Utils['copyToClipboard'](state['commitDetail']['commit']['hash']);if(_0x2493ae)Utils['showSuccess']('Commit\x20hash\x20copied');}async function handleRevertCommit(){if(!state['commitDetail']?.['commit']?.['hash'])return;const _0x367627=state['commitDetail']['commit'],_0xc71512=_0x367627['shortHash']||_0x367627['hash']['slice'](0x0,0x7),_0x56a7f6={};_0x367627['parents']&&_0x367627['parents']['length']>0x1&&(_0x56a7f6['mainline']=elements['mainlineSelect']['value']||'1');if(isSelectedCommitRemoteSource()){const _0x56c39e=getSelectedBranchForRevertTask(),_0x2db95d=_0x56a7f6['mainline']?'\x20using\x20mainline\x20parent\x20'+_0x56a7f6['mainline']:'',_0x16fd48=_0x56c39e?'\x20on\x20branch\x20\x22'+_0x56c39e+'\x22':'',_0x546e67='Create\x20a\x20revert\x20task\x20for\x20commit\x20'+_0xc71512+_0x16fd48+_0x2db95d+'?\x20The\x20task\x20will\x20apply\x20the\x20revert\x20without\x20committing\x20so\x20it\x20can\x20be\x20approved\x20and\x20pushed\x20later.',_0x34619e=await ConfirmDialog['show']({'title':'Create\x20Revert\x20Task','message':_0x546e67,'confirmText':'Create\x20Task','cancelText':'Cancel','danger':!![]});if(!_0x34619e)return;try{await createRemoteRevertTask(_0x367627,_0x56a7f6);}catch(_0x36f7b2){Utils['showError'](_0x36f7b2['message']||'Failed\x20to\x20create\x20revert\x20task');}return;}const _0x1b72be='Revert\x20commit\x20'+_0xc71512+'?\x20This\x20will\x20create\x20a\x20new\x20commit\x20that\x20undoes\x20these\x20changes.',_0x1f76b3=await ConfirmDialog['show']({'title':'Revert\x20Commit','message':_0x1b72be,'confirmText':'Revert','cancelText':'Cancel','danger':!![]});if(!_0x1f76b3)return;try{await API['revertEnvironmentRepoCommit'](state['selectedEnvironment'],state['selectedRepo'],_0x367627['hash'],_0x56a7f6),Utils['showSuccess']('Commit\x20reverted'),state['pagination']['offset']=0x0,await loadHistory({'keepSelection':![]});}catch(_0x823f88){Utils['showError'](_0x823f88['message']||'Failed\x20to\x20revert\x20commit');}}function parsePatchContent(_0x4ea03e){const _0x2318f9=[],_0x59b372=_0x4ea03e['split']('\x0a');let _0x3e532b=null,_0x3c11a2=null;for(const _0x2fb42a of _0x59b372){if(_0x2fb42a['startsWith']('diff\x20--git')){_0x3e532b&&_0x3c11a2&&_0x3e532b['hunks']['push'](_0x3c11a2);_0x3e532b&&_0x2318f9['push'](_0x3e532b);const _0xd9f244=_0x2fb42a['match'](/diff --git a\/(.+?) b\/(.+)/);_0x3e532b={'oldPath':_0xd9f244?_0xd9f244[0x1]:'','newPath':_0xd9f244?_0xd9f244[0x2]:'','hunks':[],'isDeleted':![]},_0x3c11a2=null;}else{if(_0x2fb42a['startsWith']('deleted\x20file\x20mode')&&_0x3e532b)_0x3e532b['isDeleted']=!![];else{if(_0x2fb42a['startsWith']('@@'))_0x3c11a2&&_0x3e532b&&_0x3e532b['hunks']['push'](_0x3c11a2),_0x3c11a2={'header':_0x2fb42a,'lines':[]};else _0x3c11a2&&_0x3c11a2['lines']['push'](_0x2fb42a);}}}return _0x3e532b&&_0x3c11a2&&_0x3e532b['hunks']['push'](_0x3c11a2),_0x3e532b&&_0x2318f9['push'](_0x3e532b),_0x2318f9;}function parseHunkHeader(_0x374503){const _0x167cc7=_0x374503['match'](/@@ -(\d+),?\d* \+(\d+),?\d* @@/);if(_0x167cc7)return{'oldStart':parseInt(_0x167cc7[0x1],0xa),'newStart':parseInt(_0x167cc7[0x2],0xa)};return{'oldStart':0x1,'newStart':0x1};}function highlightDiffLine(_0x1c5fbd,_0x1eca6c){const _0x2a279d=window['hljs']||(typeof hljs!=='undefined'?hljs:null);if(_0x2a279d&&_0x1eca6c)try{const _0x83d09f=_0x2a279d['getLanguage'](_0x1eca6c)?_0x1eca6c:null;if(_0x83d09f)return _0x2a279d['highlight'](_0x1c5fbd,{'language':_0x83d09f})['value'];}catch(_0x53242c){console['error']('Diff\x20syntax\x20highlighting\x20error:',_0x53242c);}return Utils['escapeHtml'](_0x1c5fbd);}function computeWordDiff(_0x4feaae,_0x1e76a4){const _0x343a2f=_0x33ada8=>{const _0x32f767=[];let _0x3302a2='',_0x51f258=![];for(let _0x424bd2=0x0;_0x424bd2<_0x33ada8['length'];_0x424bd2++){const _0x1e12d0=_0x33ada8[_0x424bd2],_0xb659d3=/\s/['test'](_0x1e12d0);if(_0x3302a2==='')_0x3302a2=_0x1e12d0,_0x51f258=_0xb659d3;else _0xb659d3===_0x51f258?_0x3302a2+=_0x1e12d0:(_0x32f767['push'](_0x3302a2),_0x3302a2=_0x1e12d0,_0x51f258=_0xb659d3);}return _0x3302a2&&_0x32f767['push'](_0x3302a2),_0x32f767;},_0x468a89=_0x343a2f(_0x4feaae),_0x272a69=_0x343a2f(_0x1e76a4),_0x275c12=_0x468a89['length'],_0x296710=_0x272a69['length'],_0xfd36e2=Array(_0x275c12+0x1)['fill'](null)['map'](()=>Array(_0x296710+0x1)['fill'](0x0));for(let _0x51dc59=0x1;_0x51dc59<=_0x275c12;_0x51dc59++){for(let _0x2d95a0=0x1;_0x2d95a0<=_0x296710;_0x2d95a0++){_0x468a89[_0x51dc59-0x1]===_0x272a69[_0x2d95a0-0x1]?_0xfd36e2[_0x51dc59][_0x2d95a0]=_0xfd36e2[_0x51dc59-0x1][_0x2d95a0-0x1]+0x1:_0xfd36e2[_0x51dc59][_0x2d95a0]=Math['max'](_0xfd36e2[_0x51dc59-0x1][_0x2d95a0],_0xfd36e2[_0x51dc59][_0x2d95a0-0x1]);}}const _0x1b8eed={'old':[],'new':[]};let _0x21d06d=_0x275c12,_0xd6f23a=_0x296710;const _0x420a15=[],_0x49242f=[];while(_0x21d06d>0x0||_0xd6f23a>0x0){if(_0x21d06d>0x0&&_0xd6f23a>0x0&&_0x468a89[_0x21d06d-0x1]===_0x272a69[_0xd6f23a-0x1])_0x420a15['unshift']({'type':'equal','text':_0x468a89[_0x21d06d-0x1]}),_0x49242f['unshift']({'type':'equal','text':_0x272a69[_0xd6f23a-0x1]}),_0x21d06d--,_0xd6f23a--;else{if(_0xd6f23a>0x0&&(_0x21d06d===0x0||_0xfd36e2[_0x21d06d][_0xd6f23a-0x1]>=_0xfd36e2[_0x21d06d-0x1][_0xd6f23a]))_0x49242f['unshift']({'type':'insert','text':_0x272a69[_0xd6f23a-0x1]}),_0xd6f23a--;else _0x21d06d>0x0&&(_0x420a15['unshift']({'type':'delete','text':_0x468a89[_0x21d06d-0x1]}),_0x21d06d--);}}return _0x1b8eed['old']=_0x420a15,_0x1b8eed['new']=_0x49242f,_0x1b8eed;}function renderDiffLineWithWordHighlight(_0x2ece4d,_0x56cda8,_0x54c3c4,_0x4da351){if(!_0x56cda8||_0x56cda8['length']===0x0)return highlightDiffLine(_0x2ece4d,_0x4da351);let _0x30f93d='';const _0x3aa618=_0x54c3c4==='add'?'diff-word-add':'diff-word-remove',_0x365f4c=_0x54c3c4==='add'?'insert':'delete';for(const _0x2f43cf of _0x56cda8){const _0x31aef5=Utils['escapeHtml'](_0x2f43cf['text']);_0x2f43cf['type']===_0x365f4c?_0x30f93d+='<span\x20class=\x22'+_0x3aa618+'\x22>'+_0x31aef5+'</span>':_0x30f93d+=_0x31aef5;}return _0x30f93d;}function getFileLanguage(_0x4a1771){const _0x4284cc=_0x4a1771['split']('.')['pop']()['toLowerCase'](),_0x41f3b1={'js':'javascript','jsx':'javascript','ts':'typescript','tsx':'typescript','py':'python','java':'java','c':'c','cpp':'cpp','cs':'csharp','go':'go','rs':'rust','php':'php','rb':'ruby','html':'xml','css':'css','json':'json','yml':'yaml','yaml':'yaml','md':'markdown','sh':'bash','bash':'bash'};return _0x41f3b1[_0x4284cc]||null;}function calculateDiffStats(_0x38ba6c){let _0x5c5824=0x0,_0x553dc1=0x0,_0x92e414=0x0;return _0x38ba6c['forEach'](_0x23da4e=>{let _0x22a403=0x0,_0x192dab=0x0;_0x23da4e['hunks']['forEach'](_0x231818=>{_0x231818['lines']['forEach'](_0x3555cb=>{if(_0x3555cb['startsWith']('+'))_0x22a403+=0x1;else{if(_0x3555cb['startsWith']('-'))_0x192dab+=0x1;}});}),(_0x22a403+_0x192dab>0x0||_0x23da4e['isDeleted'])&&(_0x92e414+=0x1),_0x5c5824+=_0x22a403,_0x553dc1+=_0x192dab;}),{'additions':_0x5c5824,'deletions':_0x553dc1,'files':_0x92e414};}function renderUnifiedDiff(_0x485dc9,_0xf2e514,_0x1b6db3=0x0,_0x10430b={}){return _0x485dc9['map']((_0xb84a20,_0x3cc6b7)=>{const _0x5a0f5d=_0x1b6db3+_0x3cc6b7,_0x18bb93=_0xb84a20['newPath']||_0xb84a20['oldPath']||'unknown',_0x40757e='diff-'+_0xf2e514+'-'+_0x5a0f5d,_0x2be5cc=getFileLanguage(_0x18bb93),{additions:_0x5727f7,deletions:_0x466aab}=calculateDiffStats([_0xb84a20]),_0x5e19a3=getCollapsedState(_0xf2e514,_0x18bb93,_0x10430b['defaultCollapsed']),_0xd9b9d6=getFileStatus(_0xb84a20,_0x5727f7,_0x466aab),_0x2fb1c6=_0xd9b9d6==='added'?'A':_0xd9b9d6==='deleted'?'D':'M',_0x501ecf=_0xb84a20['hunks']['map'](_0x510a63=>{const {oldStart:_0x157d72,newStart:_0x19b141}=parseHunkHeader(_0x510a63['header']);let _0x417fdd=_0x157d72,_0x3adfe8=_0x19b141;const _0x2717b2=_0x510a63['lines']['map'](_0x5104d5=>({'line':_0x5104d5,'type':_0x5104d5['startsWith']('+')?'add':_0x5104d5['startsWith']('-')?'remove':_0x5104d5['startsWith']('\x5c')?'meta':'context'}));let _0x204eea=0x0;while(_0x204eea<_0x2717b2['length']){if(_0x2717b2[_0x204eea]['type']==='remove'){let _0x4e5d71=_0x204eea,_0x3d0014=_0x204eea;while(_0x3d0014<_0x2717b2['length']&&_0x2717b2[_0x3d0014]['type']==='remove')_0x3d0014++;let _0x1506a2=_0x3d0014,_0x794986=_0x1506a2;while(_0x794986<_0x2717b2['length']&&_0x2717b2[_0x794986]['type']==='add')_0x794986++;const _0x2888bf=_0x3d0014-_0x4e5d71,_0x3878b3=_0x794986-_0x1506a2,_0x43cc26=Math['min'](_0x2888bf,_0x3878b3);for(let _0x2487f3=0x0;_0x2487f3<_0x43cc26;_0x2487f3++){const _0x5f0770=_0x2717b2[_0x4e5d71+_0x2487f3]['line']['substring'](0x1),_0x5023f0=_0x2717b2[_0x1506a2+_0x2487f3]['line']['substring'](0x1),_0x249a6c=computeWordDiff(_0x5f0770,_0x5023f0);_0x2717b2[_0x4e5d71+_0x2487f3]['wordDiff']=_0x249a6c['old'],_0x2717b2[_0x1506a2+_0x2487f3]['wordDiff']=_0x249a6c['new'];}_0x204eea=_0x794986;}else _0x204eea++;}const _0x1b5f17=_0x2717b2['map'](_0xd4df42=>{const _0x48eebb=_0xd4df42['line'];if(_0x48eebb['startsWith']('+')){const _0x2d025b=_0x48eebb['substring'](0x1),_0x1f436c=_0xd4df42['wordDiff']?renderDiffLineWithWordHighlight(_0x2d025b,_0xd4df42['wordDiff'],'add',_0x2be5cc):highlightDiffLine(_0x2d025b,_0x2be5cc),_0x49a29e='<div\x20class=\x22diff-line\x20diff-add\x22><span\x20class=\x22diff-line-num\x20diff-line-num-old\x22></span><span\x20class=\x22diff-line-num\x20diff-line-num-new\x22>'+_0x3adfe8+'</span><span\x20class=\x22diff-line-content\x22><span\x20class=\x22diff-prefix\x22>+</span>'+_0x1f436c+'</span></div>';return _0x3adfe8+=0x1,_0x49a29e;}if(_0x48eebb['startsWith']('-')){const _0x24d84f=_0x48eebb['substring'](0x1),_0x39655c=_0xd4df42['wordDiff']?renderDiffLineWithWordHighlight(_0x24d84f,_0xd4df42['wordDiff'],'remove',_0x2be5cc):highlightDiffLine(_0x24d84f,_0x2be5cc),_0x303bf3='<div\x20class=\x22diff-line\x20diff-remove\x22><span\x20class=\x22diff-line-num\x20diff-line-num-old\x22>'+_0x417fdd+'</span><span\x20class=\x22diff-line-num\x20diff-line-num-new\x22></span><span\x20class=\x22diff-line-content\x22><span\x20class=\x22diff-prefix\x22>-</span>'+_0x39655c+'</span></div>';return _0x417fdd+=0x1,_0x303bf3;}if(_0x48eebb['startsWith']('\x5c'))return'<div\x20class=\x22diff-line\x20diff-meta\x22><span\x20class=\x22diff-line-num\x20diff-line-num-old\x22></span><span\x20class=\x22diff-line-num\x20diff-line-num-new\x22></span><span\x20class=\x22diff-line-content\x22>'+Utils['escapeHtml'](_0x48eebb)+'</span></div>';const _0xe70af7=_0x48eebb['startsWith']('\x20')?_0x48eebb['substring'](0x1):_0x48eebb,_0x2a271a=highlightDiffLine(_0xe70af7,_0x2be5cc),_0x48f9d2='<div\x20class=\x22diff-line\x20diff-context\x22><span\x20class=\x22diff-line-num\x20diff-line-num-old\x22>'+_0x417fdd+'</span><span\x20class=\x22diff-line-num\x20diff-line-num-new\x22>'+_0x3adfe8+'</span><span\x20class=\x22diff-line-content\x22>\x20'+_0x2a271a+'</span></div>';return _0x417fdd+=0x1,_0x3adfe8+=0x1,_0x48f9d2;})['join']('');return'<div\x20class=\x22diff-hunk\x22><div\x20class=\x22diff-hunk-header\x22>'+Utils['escapeHtml'](_0x510a63['header'])+'</div>'+_0x1b5f17+'</div>';})['join'](''),_0x4dc7c7=_0x501ecf||'<div\x20class=\x22diff-hunk\x22><div\x20class=\x22diff-hunk-header\x22>No\x20textual\x20diff\x20available</div></div>';return'\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff\x22\x20id=\x22file-'+_0x40757e+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-header\x22\x20data-diff-id=\x22'+_0x40757e+'\x22\x20data-file-name=\x22'+Utils['escapeHtml'](_0x18bb93)+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-title\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-status-badge\x20'+_0xd9b9d6+'\x22>'+_0x2fb1c6+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-diff-name\x22>'+Utils['escapeHtml'](_0x18bb93)+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-diff-stat\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22diff-add\x22>+'+_0x5727f7+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22diff-del\x22>-'+_0x466aab+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22file-diff-toggle-btn\x22\x20data-diff-id=\x22'+_0x40757e+'\x22\x20data-collapsed=\x22'+_0x5e19a3+'\x22\x20type=\x22button\x22\x20aria-label=\x22'+(_0x5e19a3?'Expand':'Collapse')+'\x22></button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-content\x20'+(_0x5e19a3?'collapsed':'')+'\x22\x20id=\x22'+_0x40757e+'\x22>'+_0x4dc7c7+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20';})['join']('');}function renderSplitDiff(_0x50fba1,_0x5da56d,_0x4aa082=0x0,_0x4383ff={}){return _0x50fba1['map']((_0x26c584,_0x29ab0d)=>{const _0x52814b=_0x4aa082+_0x29ab0d,_0x16723e=_0x26c584['newPath']||_0x26c584['oldPath']||'unknown',_0x3905ca='diff-'+_0x5da56d+'-'+_0x52814b,_0x6cf17a=getFileLanguage(_0x16723e),{additions:_0x57cd8f,deletions:_0x2df4ac}=calculateDiffStats([_0x26c584]),_0x120a5a=getCollapsedState(_0x5da56d,_0x16723e,_0x4383ff['defaultCollapsed']),_0x4cfe14=getFileStatus(_0x26c584,_0x57cd8f,_0x2df4ac),_0x1b995b=_0x4cfe14==='added'?'A':_0x4cfe14==='deleted'?'D':'M',_0x15032b=_0x26c584['hunks']['map'](_0x3d303f=>{const {oldStart:_0x2d2e80,newStart:_0x2b1e8b}=parseHunkHeader(_0x3d303f['header']);let _0x9cd542=_0x2d2e80,_0x4b1a90=_0x2b1e8b;const _0xa22a3c=[],_0x29f2a3=_0x3d303f['lines'];let _0x3cc1d4=0x0;while(_0x3cc1d4<_0x29f2a3['length']){const _0x4fb1ab=_0x29f2a3[_0x3cc1d4];if(_0x4fb1ab['startsWith']('\x20')){const _0x4f7a37=_0x4fb1ab['substring'](0x1);_0xa22a3c['push'](renderSplitRow({'type':'context','lineNum':_0x9cd542,'content':_0x4f7a37},{'type':'context','lineNum':_0x4b1a90,'content':_0x4f7a37},_0x6cf17a)),_0x9cd542+=0x1,_0x4b1a90+=0x1,_0x3cc1d4+=0x1;continue;}if(_0x4fb1ab['startsWith']('-')){const _0x5b2508=[];while(_0x3cc1d4<_0x29f2a3['length']&&_0x29f2a3[_0x3cc1d4]['startsWith']('-')){_0x5b2508['push'](_0x29f2a3[_0x3cc1d4]['substring'](0x1)),_0x3cc1d4+=0x1;}const _0x1c1db5=[];let _0x58027a=_0x3cc1d4;while(_0x58027a<_0x29f2a3['length']&&_0x29f2a3[_0x58027a]['startsWith']('+')){_0x1c1db5['push'](_0x29f2a3[_0x58027a]['substring'](0x1)),_0x58027a+=0x1;}const _0x36101d=Math['max'](_0x5b2508['length'],_0x1c1db5['length']);for(let _0x1bf572=0x0;_0x1bf572<_0x36101d;_0x1bf572++){const _0x5c7569=_0x5b2508[_0x1bf572]?{'type':'remove','lineNum':_0x9cd542++,'content':_0x5b2508[_0x1bf572]}:{'type':'empty','lineNum':'','content':''},_0x2390ff=_0x1c1db5[_0x1bf572]?{'type':'add','lineNum':_0x4b1a90++,'content':_0x1c1db5[_0x1bf572]}:{'type':'empty','lineNum':'','content':''};_0xa22a3c['push'](renderSplitRow(_0x5c7569,_0x2390ff,_0x6cf17a));}_0x3cc1d4=_0x58027a;continue;}if(_0x4fb1ab['startsWith']('+')){const _0x2dd80b=[];while(_0x3cc1d4<_0x29f2a3['length']&&_0x29f2a3[_0x3cc1d4]['startsWith']('+')){_0x2dd80b['push'](_0x29f2a3[_0x3cc1d4]['substring'](0x1)),_0x3cc1d4+=0x1;}_0x2dd80b['forEach'](_0x5c6630=>{_0xa22a3c['push'](renderSplitRow({'type':'empty','lineNum':'','content':''},{'type':'add','lineNum':_0x4b1a90++,'content':_0x5c6630},_0x6cf17a));});continue;}if(_0x4fb1ab['startsWith']('\x5c')){_0xa22a3c['push'](renderSplitRow({'type':'meta','lineNum':'','content':_0x4fb1ab},{'type':'meta','lineNum':'','content':_0x4fb1ab},_0x6cf17a)),_0x3cc1d4+=0x1;continue;}_0x3cc1d4+=0x1;}const _0x4ce8f7=_0xa22a3c['join']('')||'<div\x20class=\x22diff-hunk\x22>No\x20textual\x20diff\x20available</div>';return'\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22diff-hunk\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22diff-hunk-header\x22>'+Utils['escapeHtml'](_0x3d303f['header'])+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22split-diff-table\x22>'+_0x4ce8f7+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20';})['join'](''),_0xd13af7=_0x15032b||'<div\x20class=\x22diff-hunk\x22><div\x20class=\x22diff-hunk-header\x22>No\x20textual\x20diff\x20available</div></div>';return'\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff\x22\x20id=\x22file-'+_0x3905ca+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-header\x22\x20data-diff-id=\x22'+_0x3905ca+'\x22\x20data-file-name=\x22'+Utils['escapeHtml'](_0x16723e)+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-title\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-status-badge\x20'+_0x4cfe14+'\x22>'+_0x1b995b+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-diff-name\x22>'+Utils['escapeHtml'](_0x16723e)+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-diff-stat\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22diff-add\x22>+'+_0x57cd8f+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22diff-del\x22>-'+_0x2df4ac+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22file-diff-toggle-btn\x22\x20data-diff-id=\x22'+_0x3905ca+'\x22\x20data-collapsed=\x22'+_0x120a5a+'\x22\x20type=\x22button\x22\x20aria-label=\x22'+(_0x120a5a?'Expand':'Collapse')+'\x22></button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-content\x20'+(_0x120a5a?'collapsed':'')+'\x22\x20id=\x22'+_0x3905ca+'\x22>'+_0xd13af7+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20';})['join']('');}function renderSplitRow(_0x2a99dc,_0x472af0,_0x5dfe3a){return'\x0a\x20\x20\x20\x20<div\x20class=\x22split-diff-row\x22>\x0a\x20\x20\x20\x20\x20\x20'+renderSplitCell(_0x2a99dc,_0x5dfe3a)+'\x0a\x20\x20\x20\x20\x20\x20'+renderSplitCell(_0x472af0,_0x5dfe3a)+'\x0a\x20\x20\x20\x20</div>\x0a\x20\x20';}function renderSplitCell(_0x548747,_0x1183b6){const _0x57360d='split-'+_0x548747['type'],_0x399adf=_0x548747['lineNum']===0x0?'':_0x548747['lineNum'];let _0x16fc02='&nbsp;';if(_0x548747['type']==='meta')_0x16fc02=Utils['escapeHtml'](_0x548747['content']);else _0x548747['type']!=='empty'&&(_0x16fc02=highlightDiffLine(_0x548747['content'],_0x1183b6));return'\x0a\x20\x20\x20\x20<div\x20class=\x22split-diff-cell\x20'+_0x57360d+'\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22split-line-num\x22>'+_0x399adf+'</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22split-line-content\x22>'+_0x16fc02+'</span>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20';}function bindDiffToggleHandlers(_0x4000e3){const _0x24d90d=elements['diffContainer']['querySelectorAll']('.file-diff-header');_0x24d90d['forEach'](_0xac0207=>{if(_0xac0207['dataset']['bound']==='true')return;_0xac0207['dataset']['bound']='true',_0xac0207['addEventListener']('click',_0x1de005=>{if(_0x1de005['target']['closest']('.file-diff-toggle-btn'))return;const _0x53d736=_0xac0207['dataset']['diffId'];toggleDiff(_0x53d736,_0xac0207['dataset']['fileName'],_0x4000e3);});});const _0x278927=elements['diffContainer']['querySelectorAll']('.file-diff-toggle-btn');_0x278927['forEach'](_0x432b54=>{if(_0x432b54['dataset']['bound']==='true')return;_0x432b54['dataset']['bound']='true',_0x432b54['addEventListener']('click',_0xf757a1=>{_0xf757a1['stopPropagation']();const _0x95ccd2=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x432b54['dataset']['diffId']+'\x22]'),_0x47b7db=_0x95ccd2?.['dataset']['fileName']||'';toggleDiff(_0x432b54['dataset']['diffId'],_0x47b7db,_0x4000e3);});});}function toggleDiff(_0x5e75d8,_0x4254ae,_0x12e0c3){const _0x18f007=document['getElementById'](_0x5e75d8),_0x3f5db7=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x5e75d8+'\x22]'),_0x56339b=_0x3f5db7?.['querySelector']('.file-diff-toggle-btn');if(!_0x18f007)return;const _0x2084b2=_0x18f007['classList']['toggle']('collapsed');_0x56339b&&(_0x56339b['dataset']['collapsed']=String(_0x2084b2),_0x56339b['setAttribute']('aria-label',_0x2084b2?'Expand':'Collapse'));const _0x44a630=getStorageKey(_0x12e0c3,_0x4254ae);localStorage['setItem'](_0x44a630,String(_0x2084b2));}function setAllDiffCollapsed(_0x504b21){if(!state['commitDetail']?.['commit']?.['hash'])return;const _0x18f92a='git-history-'+state['commitDetail']['commit']['hash'];if(state['diffRender']?.['files']?.['length']){const _0x769d51=buildCollapsedStateUpdates({'files':state['diffRender']['files'],'collapsed':_0x504b21,'storageKeyPrefix':_0x18f92a,'getStorageKey':getStorageKey});_0x769d51['forEach'](({key:_0x1c30b7,value:_0x1f953})=>{localStorage['setItem'](_0x1c30b7,_0x1f953);});}const _0x4f9858=elements['diffContainer']['querySelectorAll']('.file-diff-content');_0x4f9858['forEach'](_0x45ae77=>{_0x45ae77['classList']['toggle']('collapsed',_0x504b21);const _0x36aef0=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x45ae77['id']+'\x22]'),_0x3d3b46=_0x36aef0?.['querySelector']('.file-diff-toggle-btn'),_0x529298=_0x36aef0?.['dataset']['fileName']||'';_0x3d3b46&&(_0x3d3b46['dataset']['collapsed']=String(_0x504b21),_0x3d3b46['setAttribute']('aria-label',_0x504b21?'Expand':'Collapse')),_0x529298&&localStorage['setItem'](getStorageKey(_0x18f92a,_0x529298),String(_0x504b21));});}function getStorageKey(_0x51927d,_0x145349){return _0x51927d+'-'+safeBase64(_0x145349);}function getCollapsedState(_0x52d26a,_0x562960,_0x18beba=![]){const _0x4d3c77=localStorage['getItem'](getStorageKey(_0x52d26a,_0x562960));if(_0x4d3c77===null)return Boolean(_0x18beba);return _0x4d3c77==='true';}function safeBase64(_0x289833){try{return btoa(unescape(encodeURIComponent(_0x289833)));}catch(_0x880d){return btoa(_0x289833);}}function formatDate(_0x15292d){if(!_0x15292d)return'';const _0x12c79c=new Date(_0x15292d);if(Number['isNaN'](_0x12c79c['getTime']()))return _0x15292d;return _0x12c79c['toLocaleString']('en-US',{'month':'short','day':'numeric','year':'numeric','hour':'2-digit','minute':'2-digit'});}function renderLoadingSkeletons(_0x281182){return Array(_0x281182)['fill'](0x0)['map'](()=>'\x0a\x20\x20\x20\x20<li\x20class=\x22commit-item\x20commit-item-skeleton\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22skeleton\x20skeleton-message\x22></div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22skeleton-meta\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22skeleton\x20skeleton-avatar\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22skeleton\x20skeleton-text\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22skeleton\x20skeleton-text-short\x22></div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</li>\x0a\x20\x20')['join']('');}function toggleFileNav(_0x3c57c9){if(elements['fileNavToggle']?.['disabled'])return;_0x3c57c9['stopPropagation']();const _0x17223c=elements['fileNavSidebar']?.['classList']['toggle']('open');_0x17223c&&renderFileNavList();}function closeFileNav(){elements['fileNavSidebar']?.['classList']['remove']('open');}function toggleMaximize(){if(!elements['gitHistoryBody'])return;const _0x1ab25d=elements['gitHistoryBody']['classList']['toggle']('maximized'),_0xdc8b1d=elements['maximizeBtn']?.['querySelector']('.maximize-icon'),_0x285a37=elements['maximizeBtn']?.['querySelector']('.restore-icon');_0xdc8b1d&&_0x285a37&&(_0xdc8b1d['hidden']=_0x1ab25d,_0x285a37['hidden']=!_0x1ab25d),elements['maximizeBtn']&&(elements['maximizeBtn']['title']=_0x1ab25d?'Restore\x20diff\x20panel\x20(Esc\x20or\x20m)':'Maximize\x20diff\x20panel\x20(m)'),localStorage['setItem']('git-history-maximized',String(_0x1ab25d));}function renderFileNavList(){if(!state['commitDetail']?.['files']||!elements['fileNavList'])return;const _0x4c1698=state['commitDetail']['files'];elements['fileNavList']['innerHTML']=_0x4c1698['map']((_0x3ba4f0,_0x4398bb)=>{const _0x16189a=_0x3ba4f0['newPath']||_0x3ba4f0['oldPath']||'unknown',_0x5027f8=_0x16189a['split']('/')['pop'](),{additions:_0xd6ca,deletions:_0x450b7e}=calculateDiffStats([_0x3ba4f0]),_0x38308d=getFileStatus(_0x3ba4f0,_0xd6ca,_0x450b7e),_0x3bd045=getStatusIcon(_0x38308d);return'\x0a\x20\x20\x20\x20\x20\x20<li\x20class=\x22file-nav-item\x22\x20data-file-idx=\x22'+_0x4398bb+'\x22\x20data-file-name=\x22'+Utils['escapeHtml'](_0x16189a)+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-nav-icon\x20'+_0x38308d+'\x22>'+_0x3bd045+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-nav-name\x22\x20title=\x22'+Utils['escapeHtml'](_0x16189a)+'\x22>'+Utils['escapeHtml'](_0x5027f8)+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-nav-stats\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0xd6ca>0x0?'<span\x20class=\x22add\x22>+'+_0xd6ca+'</span>':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x450b7e>0x0?'<span\x20class=\x22del\x22>-'+_0x450b7e+'</span>':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20';})['join'](''),elements['fileNavList']['querySelectorAll']('.file-nav-item')['forEach'](_0x2bd3a0=>{_0x2bd3a0['addEventListener']('click',()=>{const _0x2b149a=parseInt(_0x2bd3a0['dataset']['fileIdx']||'0',0xa),_0x1f73dc='git-history-'+state['commitDetail']['commit']['hash'],_0x494005='diff-'+_0x1f73dc+'-'+_0x2b149a;ensureLazyDiffFileRendered(_0x2b149a);const _0x3eee4e=document['getElementById'](_0x494005);if(_0x3eee4e){if(_0x3eee4e['classList']['contains']('collapsed')){const _0x53e2c9=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x494005+'\x22]'),_0x5ae237=_0x53e2c9?.['dataset']['fileName']||'';toggleDiff(_0x494005,_0x5ae237,_0x1f73dc);}const _0x49a0d1=_0x3eee4e['closest']('.file-diff');_0x49a0d1&&(_0x49a0d1['scrollIntoView']({'behavior':'smooth','block':'start'}),_0x49a0d1['classList']['add']('highlighted'),setTimeout(()=>_0x49a0d1['classList']['remove']('highlighted'),0x5dc));}closeFileNav();});});}function getFileStatus(_0x555053,_0x524c6e,_0xba2240){if(_0x555053['isDeleted'])return'deleted';if(_0x524c6e>0x0&&_0xba2240===0x0)return'added';return'modified';}function getStatusIcon(_0x2d33b3){switch(_0x2d33b3){case'added':return'<svg\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22><line\x20x1=\x2212\x22\x20y1=\x225\x22\x20x2=\x2212\x22\x20y2=\x2219\x22/><line\x20x1=\x225\x22\x20y1=\x2212\x22\x20x2=\x2219\x22\x20y2=\x2212\x22/></svg>';case'deleted':return'<svg\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22><line\x20x1=\x225\x22\x20y1=\x2212\x22\x20x2=\x2219\x22\x20y2=\x2212\x22/></svg>';default:return'<svg\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22><path\x20d=\x22M11\x204H4a2\x202\x200\x200\x200-2\x202v14a2\x202\x200\x200\x200\x202\x202h14a2\x202\x200\x200\x200\x202-2v-7\x22/><path\x20d=\x22M18.5\x202.5a2.121\x202.121\x200\x200\x201\x203\x203L12\x2015l-4\x201\x201-4\x209.5-9.5z\x22/></svg>';}}function detectCommitType(_0x88fd2e){if(!_0x88fd2e)return null;const _0x3734e5=_0x88fd2e['toLowerCase']();if(/^feat(\(|:|\s)/['test'](_0x3734e5)||_0x3734e5['includes']('add\x20')||_0x3734e5['includes']('implement'))return'feat';if(/^fix(\(|:|\s)/['test'](_0x3734e5)||_0x3734e5['includes']('bug')||_0x3734e5['includes']('patch'))return'fix';if(/^refactor(\(|:|\s)/['test'](_0x3734e5)||_0x3734e5['includes']('refactor')||_0x3734e5['includes']('restructure'))return'refactor';if(/^docs?(\(|:|\s)/['test'](_0x3734e5)||_0x3734e5['includes']('readme')||_0x3734e5['includes']('documentation'))return'docs';if(/^test(\(|:|\s)/['test'](_0x3734e5)||_0x3734e5['includes']('test'))return'test';if(/^chore(\(|:|\s)/['test'](_0x3734e5)||_0x3734e5['includes']('chore')||_0x3734e5['includes']('update\x20dep'))return'chore';return null;}
1
+ import{API,Utils,CustomSelect,ConfirmDialog,initializeAdminMenu}from'./app.js';import{initTheme,mountThemeToggle}from'./theme.js';import{DEFAULT_LAZY_RENDER_MIN_FILES,DEFAULT_LAZY_RENDER_MAX_FILES,DEFAULT_LAZY_RENDER_CHUNK_SIZE,DEFAULT_AUTO_COLLAPSE_MIN_FILES,shouldUseLazyRendering as _0x22c53b,shouldAutoCollapseDiff as _0x2b38fb,getNextRenderedCount,renderedCountForTarget,getLazyLoadMoreText as _0x44d342,buildCollapsedStateUpdates}from'./git-history-lazy-utils.js';const state={'environments':[],'repos':[],'branches':[],'selectedEnvironment':'','selectedRepo':'','selectedBranch':'','commits':[],'selectedCommit':null,'commitDetail':null,'activeBranch':'','diffView':localStorage['getItem']('git-history-diff-view')||'unified','pagination':{'limit':0x19,'offset':0x0,'hasMore':![],'search':''},'loadingHistory':![],'loadingCommit':![],'loadingBranches':![],'dataSource':'local','diffRender':null},elements={},SEARCH_DEBOUNCE_MS=0x12c,LAZY_RENDER_MIN_FILES=DEFAULT_LAZY_RENDER_MIN_FILES,LAZY_RENDER_MAX_FILES=DEFAULT_LAZY_RENDER_MAX_FILES,LAZY_RENDER_CHUNK_SIZE=DEFAULT_LAZY_RENDER_CHUNK_SIZE,AUTO_COLLAPSE_MIN_FILES=DEFAULT_AUTO_COLLAPSE_MIN_FILES;let searchTimer=null;const OPEN_NEW_TAB_STORAGE_KEY='open-tasks-in-new-tab',branchCache=new Map(),BRANCH_CACHE_TTL_MS=0x5*0x3c*0x3e8;document['addEventListener']('DOMContentLoaded',initialize);async function initialize(){try{initTheme(),mountThemeToggle(),ConfirmDialog['init'](),Object['assign'](elements,{'loading':document['getElementById']('git-history-loading'),'error':document['getElementById']('git-history-error'),'errorMessage':document['getElementById']('git-history-error-message'),'retryBtn':document['getElementById']('retry-git-history-btn'),'content':document['getElementById']('git-history-content'),'envSelect':document['getElementById']('env-select'),'repoSelect':document['getElementById']('repo-select'),'branchSelect':document['getElementById']('branch-select'),'commitList':document['getElementById']('commit-list'),'commitCount':document['getElementById']('commit-count'),'prevBtn':document['getElementById']('prev-page-btn'),'nextBtn':document['getElementById']('next-page-btn'),'searchInput':document['getElementById']('commit-search'),'clearSearchBtn':document['getElementById']('clear-search-btn'),'branchPill':document['getElementById']('repo-branch-pill'),'branchName':document['getElementById']('repo-branch-name'),'placeholder':document['getElementById']('commit-placeholder'),'detailPanel':document['getElementById']('commit-detail'),'commitMessage':document['getElementById']('commit-message'),'commitAuthor':document['getElementById']('commit-author'),'commitDate':document['getElementById']('commit-date'),'commitHash':document['getElementById']('commit-hash'),'copyHashBtn':document['getElementById']('copy-hash-btn'),'viewOnProviderBtn':document['getElementById']('view-on-provider-btn'),'revertBtn':document['getElementById']('revert-btn'),'diffStats':document['getElementById']('diff-stats'),'diffContainer':document['getElementById']('commit-diff'),'expandAllBtn':document['getElementById']('expand-all-btn'),'collapseAllBtn':document['getElementById']('collapse-all-btn'),'mergeControls':document['getElementById']('merge-controls'),'mainlineSelect':document['getElementById']('mainline-select'),'fileNavToggle':document['getElementById']('file-nav-toggle'),'fileNavSidebar':document['getElementById']('file-nav-sidebar'),'fileNavList':document['getElementById']('file-nav-list'),'fileNavClose':document['getElementById']('file-nav-close'),'fileNavCount':document['getElementById']('file-nav-count'),'maximizeBtn':document['getElementById']('maximize-diff-btn'),'gitHistoryBody':document['querySelector']('.git-history-body')});const _0x4e855b=await checkAccess();await initializeAdminMenu(_0x4e855b),setupEventListeners(),initializeDiffViewToggle(),await loadEnvironments(),elements['loading']['hidden']=!![],elements['content']['hidden']=![];}catch(_0x1c942d){console['error']('Git\x20history\x20initialization\x20error:',_0x1c942d),elements['loading']['hidden']=!![],elements['error']['hidden']=![],elements['errorMessage']['textContent']=_0x1c942d['message']||'Unknown\x20error';}}async function checkAccess(){try{const _0x3ebba9=await API['getCurrentUser'](),_0x427635=_0x3ebba9['hasEnvironmentGit']===!![];if(!_0x427635){Utils['showToast']('Access\x20denied:\x20Git\x20permissions\x20required','error'),setTimeout(()=>{window['location']['href']='index.html';},0x708);throw new Error('Access\x20denied');}return _0x3ebba9;}catch(_0x562a18){_0x562a18['message']!=='Access\x20denied'&&(window['location']['href']='login.html');throw _0x562a18;}}function setupEventListeners(){elements['retryBtn']?.['addEventListener']('click',()=>window['location']['reload']()),elements['envSelect']?.['addEventListener']('change',handleEnvironmentChange),elements['repoSelect']?.['addEventListener']('change',handleRepoChange),elements['branchSelect']?.['addEventListener']('change',handleBranchChange),elements['prevBtn']?.['addEventListener']('click',()=>changePage(-0x1)),elements['nextBtn']?.['addEventListener']('click',()=>changePage(0x1)),elements['searchInput']?.['addEventListener']('input',handleSearchInput),elements['clearSearchBtn']?.['addEventListener']('click',clearSearch),elements['commitList']?.['addEventListener']('click',_0x286df0=>{const _0x552284=_0x286df0['target']['closest']('.commit-item');if(!_0x552284)return;selectCommit(_0x552284['dataset']['hash']);}),elements['copyHashBtn']?.['addEventListener']('click',handleCopyHash),elements['revertBtn']?.['addEventListener']('click',handleRevertCommit),elements['expandAllBtn']?.['addEventListener']('click',()=>setAllDiffCollapsed(![])),elements['collapseAllBtn']?.['addEventListener']('click',()=>setAllDiffCollapsed(!![])),elements['fileNavToggle']?.['addEventListener']('click',toggleFileNav),elements['fileNavClose']?.['addEventListener']('click',closeFileNav),document['addEventListener']('click',_0x20c6f5=>{!_0x20c6f5['target']['closest']('.file-nav-container')&&closeFileNav();}),elements['maximizeBtn']?.['addEventListener']('click',toggleMaximize),document['addEventListener']('keydown',handleKeyboardNavigation);}function handleKeyboardNavigation(_0xeded7b){if(_0xeded7b['target']['matches']('input,\x20select,\x20textarea'))return;const _0x79edbd=Array['from'](elements['commitList']?.['querySelectorAll']('.commit-item')||[]);if(_0x79edbd['length']===0x0)return;const _0x155b40=_0x79edbd['findIndex'](_0x55fb4c=>_0x55fb4c['classList']['contains']('selected'));switch(_0xeded7b['key']){case'j':case'ArrowDown':{_0xeded7b['preventDefault']();const _0x1cab1b=_0x155b40<_0x79edbd['length']-0x1?_0x155b40+0x1:_0x155b40,_0x4818ec=_0x79edbd[_0x1cab1b]?.['dataset']['hash'];_0x4818ec&&(selectCommit(_0x4818ec),_0x79edbd[_0x1cab1b]['scrollIntoView']({'block':'nearest','behavior':'smooth'}));break;}case'k':case'ArrowUp':{_0xeded7b['preventDefault']();const _0xceed20=_0x155b40>0x0?_0x155b40-0x1:0x0,_0x63ea3d=_0x79edbd[_0xceed20]?.['dataset']['hash'];_0x63ea3d&&(selectCommit(_0x63ea3d),_0x79edbd[_0xceed20]['scrollIntoView']({'block':'nearest','behavior':'smooth'}));break;}case'Enter':{state['selectedCommit']&&elements['diffContainer']?.['focus']();break;}case'c':{state['commitDetail']?.['commit']?.['hash']&&handleCopyHash();break;}case'e':{setAllDiffCollapsed(![]);break;}case'w':{setAllDiffCollapsed(!![]);break;}case'/':{_0xeded7b['preventDefault'](),elements['searchInput']?.['focus']();break;}case'Escape':{if(elements['gitHistoryBody']?.['classList']['contains']('maximized'))toggleMaximize();else document['activeElement']===elements['searchInput']&&elements['searchInput']['blur']();break;}case'm':{state['commitDetail']&&toggleMaximize();break;}}}function initializeDiffViewToggle(){const _0x156525=Array['from'](document['querySelectorAll']('.segmented-btn'));_0x156525['forEach'](_0x45dc21=>{_0x45dc21['classList']['toggle']('active',_0x45dc21['dataset']['view']===state['diffView']),_0x45dc21['addEventListener']('click',()=>{if(_0x45dc21['dataset']['view']===state['diffView'])return;state['diffView']=_0x45dc21['dataset']['view'],localStorage['setItem']('git-history-diff-view',state['diffView']),_0x156525['forEach'](_0x1a9dfd=>_0x1a9dfd['classList']['toggle']('active',_0x1a9dfd===_0x45dc21)),renderCommitDiff();});});}async function loadEnvironments(){const _0x365656=await API['getEnvironments']();state['environments']=_0x365656['environments']||[],elements['envSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20environment</option>',state['environments']['forEach'](_0xdf8bb5=>{const _0x2382b2=document['createElement']('option');_0x2382b2['value']=_0xdf8bb5['name'],_0x2382b2['textContent']=_0xdf8bb5['name'],elements['envSelect']['appendChild'](_0x2382b2);}),new CustomSelect(elements['envSelect'],{'searchable':!![]}),new CustomSelect(elements['repoSelect'],{'searchable':!![]}),new CustomSelect(elements['branchSelect'],{'searchable':!![]});const _0x52d8a6=_0x365656['default_environment']||state['environments'][0x0]?.['name']||'';_0x52d8a6&&(elements['envSelect']['value']=_0x52d8a6,elements['envSelect']['dispatchEvent'](new Event('change')));}async function handleEnvironmentChange(){state['selectedEnvironment']=elements['envSelect']['value'],state['selectedRepo']='',state['selectedBranch']='',state['activeBranch']='',state['repos']=[],state['branches']=[],elements['repoSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20repository</option>',elements['repoSelect']['disabled']=!![],elements['branchSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20branch</option>',elements['branchSelect']['disabled']=!![],elements['branchPill']['hidden']=!![],elements['commitList']['innerHTML']='',elements['commitCount']['textContent']='Select\x20a\x20repository\x20to\x20load\x20history.',resetCommitDetail();if(!state['selectedEnvironment'])return;try{const _0x2db420=await API['getEnvironment'](state['selectedEnvironment']);state['repos']=_0x2db420['repos']||[],elements['repoSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20repository</option>',state['repos']['forEach'](_0x2920f7=>{const _0x17d6f7=document['createElement']('option');_0x17d6f7['value']=_0x2920f7['name'],_0x17d6f7['textContent']=_0x2920f7['name'],elements['repoSelect']['appendChild'](_0x17d6f7);}),elements['repoSelect']['disabled']=state['repos']['length']===0x0;const _0x40be7e=state['repos'][0x0]?.['name'];_0x40be7e&&(elements['repoSelect']['value']=_0x40be7e,elements['repoSelect']['dispatchEvent'](new Event('change')));}catch(_0x54a18a){Utils['showError'](_0x54a18a['message']||'Failed\x20to\x20load\x20repositories');}}async function handleRepoChange(){state['selectedRepo']=elements['repoSelect']['value'],state['selectedBranch']='',state['activeBranch']='',state['branches']=[],state['pagination']['offset']=0x0,state['pagination']['search']='',elements['searchInput']['value']='',elements['clearSearchBtn']['hidden']=!![],elements['branchSelect']['innerHTML']='<option\x20value=\x22\x22>Loading\x20branches...</option>',elements['branchSelect']['disabled']=!![],resetCommitDetail();if(!state['selectedRepo']){elements['commitList']['innerHTML']='',elements['commitCount']['textContent']='Select\x20a\x20repository\x20to\x20load\x20history.',elements['branchPill']['hidden']=!![],elements['branchSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20branch</option>';return;}await loadBranches(),loadHistory();}async function loadBranches(){if(!state['selectedEnvironment']||!state['selectedRepo'])return;if(state['loadingBranches'])return;state['loadingBranches']=!![];try{const _0x4c1599=state['selectedEnvironment']+':'+state['selectedRepo'],_0x55942b=branchCache['get'](_0x4c1599),_0x1bcdaa=Date['now']();let _0x27f626;_0x55942b&&_0x1bcdaa-_0x55942b['timestamp']<BRANCH_CACHE_TTL_MS?_0x27f626=_0x55942b:(_0x27f626=await API['getEnvironmentRepoBranches'](state['selectedEnvironment'],state['selectedRepo']),branchCache['set'](_0x4c1599,{..._0x27f626,'timestamp':_0x1bcdaa}));state['branches']=_0x27f626['branches']||[],elements['branchSelect']['innerHTML']='';const _0x3b7835=document['createElement']('option');_0x3b7835['value']='',_0x3b7835['textContent']=_0x27f626['defaultBranch']?_0x27f626['defaultBranch']+'\x20(default)':_0x27f626['currentBranch']?_0x27f626['currentBranch']+'\x20(current)':'Select\x20branch',elements['branchSelect']['appendChild'](_0x3b7835);const _0x238df6=_0x27f626['defaultBranch']||_0x27f626['currentBranch'];state['branches']['forEach'](_0x57d45b=>{if(_0x57d45b['name']===_0x238df6)return;const _0x4bd62b=document['createElement']('option');_0x4bd62b['value']=_0x57d45b['name'];let _0x4e14de=_0x57d45b['name'];if(_0x57d45b['isDefault'])_0x4e14de+='\x20(default)';if(_0x57d45b['isCurrent'])_0x4e14de+='\x20(current)';_0x4bd62b['textContent']=_0x4e14de,elements['branchSelect']['appendChild'](_0x4bd62b);}),elements['branchSelect']['disabled']=state['branches']['length']===0x0,_0x27f626['currentBranch']&&(state['selectedBranch']=''),elements['branchSelect']['value']=state['selectedBranch'],queueMicrotask(()=>{elements['branchSelect']['dispatchEvent'](new Event('change'));});}catch(_0x48b62a){console['error']('Failed\x20to\x20load\x20branches:',_0x48b62a),elements['branchSelect']['innerHTML']='<option\x20value=\x22\x22>Branch\x20loading\x20failed</option>',elements['branchSelect']['disabled']=!![];}finally{state['loadingBranches']=![];}}function handleBranchChange(){state['selectedBranch']=elements['branchSelect']['value'],state['pagination']['offset']=0x0,resetCommitDetail(),loadHistory();}async function loadHistory(_0x5321a8={}){if(!state['selectedEnvironment']||!state['selectedRepo'])return;if(state['loadingHistory'])return;state['loadingHistory']=!![],elements['commitList']['innerHTML']=renderLoadingSkeletons(0x5),elements['commitCount']['textContent']='Loading\x20history...';try{const _0xb2d7d0={'limit':state['pagination']['limit'],'offset':state['pagination']['offset'],'search':state['pagination']['search']};state['selectedBranch']&&(_0xb2d7d0['branch']=state['selectedBranch']);const _0x3ea1bd=await API['getEnvironmentRepoHistory'](state['selectedEnvironment'],state['selectedRepo'],_0xb2d7d0);state['commits']=_0x3ea1bd['commits']||[],state['pagination']['hasMore']=_0x3ea1bd['pagination']?.['hasMore']||![],state['dataSource']=_0x3ea1bd['source']||'local',state['activeBranch']=_0x3ea1bd['repo']?.['branch']||state['selectedBranch']||'';_0x3ea1bd['repo']?.['branch']?(elements['branchName']['textContent']=_0x3ea1bd['repo']['branch'],elements['branchPill']['hidden']=![]):elements['branchPill']['hidden']=!![];updateSourceIndicator(),renderCommitList();const _0xac6ba2=_0x5321a8['keepSelection']&&state['selectedCommit'],_0x4361e5=state['commits']['some'](_0x21b03a=>_0x21b03a['hash']===state['selectedCommit']?.['hash']);if(_0xac6ba2&&_0x4361e5)highlightSelectedCommit();else state['commits']['length']>0x0?selectCommit(state['commits'][0x0]['hash'],{'silent':!![]}):resetCommitDetail();}catch(_0x3f5ded){Utils['showError'](_0x3f5ded['message']||'Failed\x20to\x20load\x20commit\x20history'),elements['commitList']['innerHTML']='',elements['commitCount']['textContent']='Unable\x20to\x20load\x20history.';}finally{state['loadingHistory']=![];}}function updateSourceIndicator(){let _0x1d9626=document['getElementById']('data-source-indicator');!_0x1d9626&&(_0x1d9626=document['createElement']('span'),_0x1d9626['id']='data-source-indicator',_0x1d9626['className']='source-indicator',elements['branchPill']?.['parentNode']?.['insertBefore'](_0x1d9626,elements['branchPill']['nextSibling'])),state['dataSource']==='remote'?(_0x1d9626['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20<svg\x20class=\x22source-icon\x22\x20width=\x2214\x22\x20height=\x2214\x22\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22\x20stroke-linecap=\x22round\x22\x20stroke-linejoin=\x22round\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<circle\x20cx=\x2212\x22\x20cy=\x2212\x22\x20r=\x2210\x22></circle>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\x222\x22\x20y1=\x2212\x22\x20x2=\x2222\x22\x20y2=\x2212\x22></line>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\x22M12\x202a15.3\x2015.3\x200\x200\x201\x204\x2010\x2015.3\x2015.3\x200\x200\x201-4\x2010\x2015.3\x2015.3\x200\x200\x201-4-10\x2015.3\x2015.3\x200\x200\x201\x204-10z\x22></path>\x0a\x20\x20\x20\x20\x20\x20</svg>\x0a\x20\x20\x20\x20\x20\x20Remote\x0a\x20\x20\x20\x20',_0x1d9626['title']='Data\x20fetched\x20from\x20remote\x20Git\x20provider\x20(repository\x20not\x20cloned\x20locally)',_0x1d9626['hidden']=![]):_0x1d9626['hidden']=!![];}async function selectCommit(_0x42dc74,_0x3bec66={}){if(!_0x42dc74)return;if(state['loadingCommit'])return;const _0x3262ad=state['commits']['find'](_0x2957b9=>_0x2957b9['hash']===_0x42dc74);if(!_0x3262ad)return;state['selectedCommit']=_0x3262ad,highlightSelectedCommit();if(_0x3bec66['silent']){await loadCommitDetail(_0x42dc74);return;}await loadCommitDetail(_0x42dc74);}function highlightSelectedCommit(){const _0x3b50fc=elements['commitList']['querySelectorAll']('.commit-item');_0x3b50fc['forEach'](_0x10da25=>{_0x10da25['classList']['toggle']('selected',_0x10da25['dataset']['hash']===state['selectedCommit']?.['hash']);});}async function loadCommitDetail(_0x11e76b){state['loadingCommit']=!![],elements['placeholder']['hidden']=!![],elements['detailPanel']['hidden']=![],elements['diffContainer']['innerHTML']='<div\x20class=\x22empty-state-card\x22>Loading\x20diff...</div>';try{const _0x1e6fd1=await API['getEnvironmentRepoCommit'](state['selectedEnvironment'],state['selectedRepo'],_0x11e76b);state['commitDetail']=_0x1e6fd1,renderCommitDetail();}catch(_0xaa1e52){Utils['showError'](_0xaa1e52['message']||'Failed\x20to\x20load\x20commit\x20details'),elements['diffContainer']['innerHTML']='<div\x20class=\x22empty-state-card\x22>Unable\x20to\x20load\x20diff.</div>';}finally{state['loadingCommit']=![];}}function renderCommitList(){elements['commitList']['innerHTML']='';if(state['commits']['length']===0x0){const _0x132c1c=state['pagination']['search']?'No\x20commits\x20match\x20\x22'+state['pagination']['search']+'\x22.':'No\x20commits\x20found.';elements['commitCount']['textContent']=_0x132c1c,elements['commitList']['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20<li\x20class=\x22commit-list-empty\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22empty-state-icon\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<svg\x20width=\x2224\x22\x20height=\x2224\x22\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22\x20stroke-linecap=\x22round\x22\x20stroke-linejoin=\x22round\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<circle\x20cx=\x2212\x22\x20cy=\x2212\x22\x20r=\x2210\x22></circle>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\x2212\x22\x20y1=\x228\x22\x20x2=\x2212\x22\x20y2=\x2212\x22></line>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\x2212\x22\x20y1=\x2216\x22\x20x2=\x2212.01\x22\x20y2=\x2216\x22></line>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</svg>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>'+Utils['escapeHtml'](_0x132c1c)+'</p>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20',elements['prevBtn']['disabled']=!![],elements['nextBtn']['disabled']=!![];return;}const _0x24a4f8=state['pagination']['offset']+0x1,_0x2a0155=state['pagination']['offset']+state['commits']['length'],_0x123b1b=state['pagination']['search']?_0x24a4f8+'-'+_0x2a0155+'\x20matching\x20\x22'+state['pagination']['search']+'\x22':_0x24a4f8+'-'+_0x2a0155;elements['commitCount']['textContent']=_0x123b1b,state['commits']['forEach']((_0xbc769e,_0x4c58ac)=>{const _0x32f303=document['createElement']('li');_0x32f303['className']='commit-item',_0x32f303['dataset']['hash']=_0xbc769e['hash'],_0x32f303['tabIndex']=0x0,_0x32f303['setAttribute']('role','button'),_0x32f303['setAttribute']('aria-label','Commit:\x20'+(_0xbc769e['message']||'No\x20message')+'\x20by\x20'+(_0xbc769e['author']||'Unknown')),_0x32f303['style']['animationDelay']=_0x4c58ac*0x19+'ms';const _0x542d2f=getAuthorInitials(_0xbc769e['author']),_0x391e21=getAvatarColor(_0xbc769e['author']||'Unknown'),_0x90c1a=detectCommitType(_0xbc769e['message']),_0x36f1dc=_0x90c1a?'<span\x20class=\x22commit-type-indicator\x20'+_0x90c1a+'\x22>'+_0x90c1a+'</span>':'';_0x32f303['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22commit-message\x22>'+Utils['escapeHtml'](truncateMessage(_0xbc769e['message']||'No\x20message',0x50))+'</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22commit-meta-row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22commit-author-chip\x22\x20style=\x22--avatar-color:\x20'+_0x391e21+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22author-avatar\x22>'+_0x542d2f+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+Utils['escapeHtml'](_0xbc769e['author']||'Unknown')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22commit-time\x22>'+Utils['formatRelativeTime'](_0xbc769e['date'])+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22commit-short-hash\x22>'+_0xbc769e['shortHash']+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+(_0xbc769e['isMerge']?'<span\x20class=\x22commit-tag\x22>Merge</span>':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+_0x36f1dc+'\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20',_0x32f303['addEventListener']('keydown',_0x1c5ce2=>{(_0x1c5ce2['key']==='Enter'||_0x1c5ce2['key']==='\x20')&&(_0x1c5ce2['preventDefault'](),selectCommit(_0xbc769e['hash']));}),elements['commitList']['appendChild'](_0x32f303);}),elements['prevBtn']['disabled']=state['pagination']['offset']===0x0,elements['nextBtn']['disabled']=!state['pagination']['hasMore'],highlightSelectedCommit();}function getAuthorInitials(_0xa1eecc){if(!_0xa1eecc)return'?';const _0x350748=_0xa1eecc['trim']()['split'](/\s+/);if(_0x350748['length']===0x1)return _0x350748[0x0]['charAt'](0x0)['toUpperCase']();return(_0x350748[0x0]['charAt'](0x0)+_0x350748[_0x350748['length']-0x1]['charAt'](0x0))['toUpperCase']();}function getAvatarColor(_0x3fd1fd){let _0x1224f3=0x0;for(let _0x1d84ba=0x0;_0x1d84ba<_0x3fd1fd['length'];_0x1d84ba++){_0x1224f3=_0x3fd1fd['charCodeAt'](_0x1d84ba)+((_0x1224f3<<0x5)-_0x1224f3);}const _0xa1a31e=Math['abs'](_0x1224f3%0x168);return'hsl('+_0xa1a31e+',\x2065%,\x2055%)';}function truncateMessage(_0x2c1ddd,_0x2d7dea){if(!_0x2c1ddd)return'';const _0x2c4908=_0x2c1ddd['split']('\x0a')[0x0];if(_0x2c4908['length']<=_0x2d7dea)return _0x2c4908;return _0x2c4908['substring'](0x0,_0x2d7dea-0x3)+'...';}function asFiniteNumber(_0x568e88){return Number['isFinite'](_0x568e88)?_0x568e88:null;}function formatFileCountLabel(_0x250591,_0x12b1b3={}){const _0x364b8f=Boolean(_0x12b1b3['lowerBound']),_0x6fc59b=_0x364b8f?'at\x20least\x20':'';return''+_0x6fc59b+_0x250591+'\x20file'+(_0x250591===0x1?'':'s');}function formatBytes(_0x1a7970){if(!Number['isFinite'](_0x1a7970)||_0x1a7970<=0x0)return'';const _0x4e56dd=_0x1a7970/(0x400*0x400);if(_0x4e56dd>=0x1)return _0x4e56dd['toFixed'](0x1)+'MB';const _0x59eb76=_0x1a7970/0x400;return Math['max'](0x1,Math['round'](_0x59eb76))+'KB';}function getEffectiveDiffStats(_0x5bd6bb,_0x3253ba){const _0x5b6d90=asFiniteNumber(_0x3253ba?.['changedFiles']),_0x2fca4f=asFiniteNumber(_0x3253ba?.['changedFilesLowerBound']),_0x590592=asFiniteNumber(_0x3253ba?.['additions']),_0x27548f=asFiniteNumber(_0x3253ba?.['deletions']);return{'files':_0x5b6d90??_0x2fca4f??_0x5bd6bb['files'],'filesIsLowerBound':_0x5b6d90===null&&_0x2fca4f!==null,'additions':_0x590592??_0x5bd6bb['additions'],'deletions':_0x27548f??_0x5bd6bb['deletions']};}function getDiffNoticeText(_0x19c710){if(!_0x19c710?.['truncated'])return'';if(_0x19c710['omitted']){const _0x9fe982=asFiniteNumber(_0x19c710['changedFiles']),_0x44ec0c=asFiniteNumber(_0x19c710['changedFilesLowerBound']),_0x35952f=asFiniteNumber(_0x19c710['maxFiles']);if(_0x9fe982!==null&&_0x35952f!==null)return'Diff\x20omitted\x20because\x20this\x20commit\x20changes\x20'+_0x9fe982['toLocaleString']()+'\x20files\x20(limit\x20'+_0x35952f['toLocaleString']()+').';if(_0x44ec0c!==null&&_0x35952f!==null)return'Diff\x20omitted\x20because\x20this\x20commit\x20changes\x20at\x20least\x20'+_0x44ec0c['toLocaleString']()+'\x20files\x20(limit\x20'+_0x35952f['toLocaleString']()+').';if(_0x44ec0c!==null)return'Diff\x20omitted\x20because\x20this\x20commit\x20changes\x20at\x20least\x20'+_0x44ec0c['toLocaleString']()+'\x20files.';return'Diff\x20omitted\x20for\x20this\x20large\x20commit\x20to\x20keep\x20Git\x20History\x20responsive.';}const _0x2d097f=asFiniteNumber(_0x19c710['maxBytes']);if(_0x2d097f!==null)return'Showing\x20a\x20truncated\x20diff\x20preview\x20('+formatBytes(_0x2d097f)+'\x20max)\x20to\x20keep\x20Git\x20History\x20responsive.';return'Showing\x20a\x20truncated\x20diff\x20preview\x20to\x20keep\x20Git\x20History\x20responsive.';}function shouldUseLazyRendering(_0x29398b,_0x27fcdc=null){const _0x51a463=asFiniteNumber(_0x27fcdc?.['maxFiles']);return _0x22c53b(_0x29398b,{'minFiles':LAZY_RENDER_MIN_FILES,'maxFiles':LAZY_RENDER_MAX_FILES,'serverMaxFiles':_0x51a463});}function shouldAutoCollapseDiff(_0x4f7e82){return _0x2b38fb(_0x4f7e82,{'threshold':AUTO_COLLAPSE_MIN_FILES});}function getLazyLoadMoreText(_0x2506f3){if(!_0x2506f3)return'Load\x20more\x20files';return _0x44d342({'filesLength':_0x2506f3['files']['length'],'renderedCount':_0x2506f3['renderedCount'],'chunkSize':_0x2506f3['chunkSize']});}function ensureLazyDiffFileRendered(_0x1d4225){if(!state['diffRender']?.['lazy'])return;const _0x1ab18f=renderedCountForTarget({'renderedCount':state['diffRender']['renderedCount'],'targetIndex':_0x1d4225,'totalFiles':state['diffRender']['files']['length'],'chunkSize':state['diffRender']['chunkSize']});while(state['diffRender']['renderedCount']<_0x1ab18f){renderNextDiffChunk();}}function updateLazyLoadMoreControl(){const _0x2746c3=state['diffRender'];if(!_0x2746c3?.['lazy']||!elements['diffContainer'])return;const _0x43d28f=elements['diffContainer']['querySelector']('.diff-load-more-control');if(!_0x43d28f)return;if(_0x2746c3['renderedCount']>=_0x2746c3['files']['length']){_0x43d28f['innerHTML']='<span\x20class=\x22diff-load-complete\x22>All\x20'+formatFileCountLabel(_0x2746c3['files']['length'])+'\x20loaded</span>';return;}_0x43d28f['innerHTML']='<button\x20class=\x22btn-ghost\x20btn-small\x20diff-load-more-btn\x22\x20type=\x22button\x22>'+getLazyLoadMoreText(_0x2746c3)+'</button>';const _0x31e99e=_0x43d28f['querySelector']('.diff-load-more-btn');_0x31e99e?.['addEventListener']('click',()=>{renderNextDiffChunk();});}function renderNextDiffChunk(){const _0x3c73de=state['diffRender'];if(!_0x3c73de?.['lazy']||!elements['diffContainer'])return;if(_0x3c73de['renderedCount']>=_0x3c73de['files']['length'])return;const _0x10b962=elements['diffContainer']['querySelector']('.diff-files-host');if(!_0x10b962)return;const _0x359acb=_0x3c73de['renderedCount'],_0x2f3b34=getNextRenderedCount({'renderedCount':_0x359acb,'totalFiles':_0x3c73de['files']['length'],'chunkSize':_0x3c73de['chunkSize']}),_0x20d2cd=_0x3c73de['files']['slice'](_0x359acb,_0x2f3b34),_0x4ac3ac=state['diffView']==='split'?renderSplitDiff(_0x20d2cd,_0x3c73de['storageKeyPrefix'],_0x359acb,{'defaultCollapsed':_0x3c73de['defaultCollapsed']}):renderUnifiedDiff(_0x20d2cd,_0x3c73de['storageKeyPrefix'],_0x359acb,{'defaultCollapsed':_0x3c73de['defaultCollapsed']});_0x10b962['insertAdjacentHTML']('beforeend',_0x4ac3ac),_0x3c73de['renderedCount']=_0x2f3b34,bindDiffToggleHandlers(_0x3c73de['storageKeyPrefix']),updateLazyLoadMoreControl();}function renderCommitDetail(){if(!state['commitDetail']||!state['commitDetail']['commit']){resetCommitDetail();return;}const _0x45a3c6=state['commitDetail']['commit'];elements['commitMessage']['textContent']=_0x45a3c6['message']||'No\x20message',elements['commitAuthor']['textContent']=''+(_0x45a3c6['author']||'Unknown')+(_0x45a3c6['email']?'\x20('+_0x45a3c6['email']+')':''),elements['commitDate']['textContent']=formatDate(_0x45a3c6['date']),elements['commitHash']['textContent']=_0x45a3c6['hash'];const _0x2aaaba=isSelectedCommitRemoteSource();elements['revertBtn']&&(elements['revertBtn']['hidden']=![],elements['revertBtn']['textContent']=_0x2aaaba?'Revert\x20via\x20task':'Revert\x20commit',elements['revertBtn']['title']=_0x2aaaba?'Create\x20a\x20task\x20that\x20applies\x20this\x20revert\x20and\x20stages\x20the\x20changes\x20for\x20approval':'');if(elements['viewOnProviderBtn']){const _0x53594c=getProviderCommitUrl(_0x45a3c6['hash']);_0x53594c&&_0x2aaaba?(elements['viewOnProviderBtn']['hidden']=![],elements['viewOnProviderBtn']['href']=_0x53594c,elements['viewOnProviderBtn']['textContent']='View\x20on\x20'+getProviderDisplayName()):elements['viewOnProviderBtn']['hidden']=!![];}const _0x4adbce=_0x45a3c6['parents']||[];_0x4adbce['length']>0x1?(elements['mergeControls']['hidden']=![],elements['mainlineSelect']['innerHTML']='',_0x4adbce['forEach']((_0xc81c23,_0x566e20)=>{const _0x2bca35=document['createElement']('option');_0x2bca35['value']=String(_0x566e20+0x1),_0x2bca35['textContent']='Parent\x20'+(_0x566e20+0x1)+'\x20-\x20'+_0xc81c23['slice'](0x0,0x7),elements['mainlineSelect']['appendChild'](_0x2bca35);})):elements['mergeControls']['hidden']=!![];const _0x54da62=state['commitDetail']['diffMeta']||null,_0x1396c6=_0x54da62?.['omitted']?[]:parsePatchContent(state['commitDetail']['diff']||'');state['commitDetail']['files']=_0x1396c6;const _0x8f77d8=calculateDiffStats(_0x1396c6),_0x3d6b28=getEffectiveDiffStats(_0x8f77d8,_0x54da62);elements['diffStats']['innerHTML']='\x0a\x20\x20\x20\x20<span\x20class=\x22diff-stat-files\x22>'+formatFileCountLabel(_0x3d6b28['files'],{'lowerBound':_0x3d6b28['filesIsLowerBound']})+'</span>\x0a\x20\x20\x20\x20<span\x20class=\x22diff-stat-separator\x22>|</span>\x0a\x20\x20\x20\x20<span\x20class=\x22diff-stat-add\x22>+'+_0x3d6b28['additions']['toLocaleString']()+'</span>\x0a\x20\x20\x20\x20<span\x20class=\x22diff-stat-del\x22>-'+_0x3d6b28['deletions']['toLocaleString']()+'</span>\x0a\x20\x20';elements['fileNavCount']&&(elements['fileNavCount']['textContent']=formatFileCountLabel(_0x3d6b28['files'],{'lowerBound':_0x3d6b28['filesIsLowerBound']}));if(elements['fileNavToggle']){const _0x1af04b=_0x1396c6['length']>0x0;elements['fileNavToggle']['disabled']=!_0x1af04b,elements['fileNavToggle']['setAttribute']('aria-disabled',String(!_0x1af04b)),elements['fileNavToggle']['title']=_0x1af04b?'Browse\x20changed\x20files':_0x54da62?.['omitted']?'Diff\x20omitted\x20for\x20this\x20large\x20commit':'No\x20file\x20diff\x20to\x20browse',!_0x1af04b&&closeFileNav();}renderCommitDiff();}function renderCommitDiff(){if(!state['commitDetail']||!elements['diffContainer'])return;const _0x200efe=state['commitDetail']['diffMeta']||null,_0x2f56cd=getDiffNoticeText(_0x200efe);state['diffRender']=null;if(_0x200efe?.['omitted']){elements['diffContainer']['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22empty-state-card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<h2>Diff\x20Omitted</h2>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p\x20class=\x22text-muted\x22>'+Utils['escapeHtml'](_0x2f56cd||'Diff\x20omitted\x20for\x20this\x20large\x20commit.')+'</p>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20';return;}const _0x49c5fd=state['commitDetail']['files']||parsePatchContent(state['commitDetail']['diff']||'');if(_0x49c5fd['length']===0x0){if(_0x200efe?.['truncated']){elements['diffContainer']['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22empty-state-card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<h2>Diff\x20Truncated</h2>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<p\x20class=\x22text-muted\x22>'+Utils['escapeHtml'](_0x2f56cd||'Diff\x20output\x20is\x20truncated.')+'</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20';return;}elements['diffContainer']['innerHTML']='<div\x20class=\x22empty-state-card\x22>No\x20changes\x20in\x20this\x20commit.</div>';return;}const _0xe380f6='git-history-'+state['commitDetail']['commit']['hash'],_0x2714dc=_0x200efe?.['truncated']?'<div\x20class=\x22diff-truncated-banner\x22>'+Utils['escapeHtml'](_0x2f56cd)+'</div>':'',_0x94285=shouldUseLazyRendering(_0x49c5fd['length'],_0x200efe),_0x14299e=shouldAutoCollapseDiff(_0x49c5fd['length']);if(_0x94285){state['diffRender']={'lazy':!![],'files':_0x49c5fd,'storageKeyPrefix':_0xe380f6,'renderedCount':0x0,'chunkSize':LAZY_RENDER_CHUNK_SIZE,'defaultCollapsed':_0x14299e};const _0x465197=_0x14299e?'Large\x20commit\x20detected\x20('+_0x49c5fd['length']['toLocaleString']()+'\x20files).\x20Files\x20are\x20collapsed\x20by\x20default\x20and\x20rendered\x20in\x20chunks.':'Large\x20commit\x20detected\x20('+_0x49c5fd['length']['toLocaleString']()+'\x20files).\x20Rendering\x20files\x20in\x20chunks\x20for\x20better\x20responsiveness.';elements['diffContainer']['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20'+_0x2714dc+'\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22diff-large-commit-banner\x22>'+Utils['escapeHtml'](_0x465197)+'</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22diff-files-host\x22></div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22diff-load-more-control\x22></div>\x0a\x20\x20\x20\x20',renderNextDiffChunk();return;}const _0x1ffcef=state['diffView']==='split'?renderSplitDiff(_0x49c5fd,_0xe380f6,0x0,{'defaultCollapsed':_0x14299e}):renderUnifiedDiff(_0x49c5fd,_0xe380f6,0x0,{'defaultCollapsed':_0x14299e});elements['diffContainer']['innerHTML']=''+_0x2714dc+_0x1ffcef,bindDiffToggleHandlers(_0xe380f6);}function resetCommitDetail(){state['selectedCommit']=null,state['commitDetail']=null,state['diffRender']=null,closeFileNav(),elements['placeholder']['hidden']=![],elements['detailPanel']['hidden']=!![];}function getSelectedRepoObject(){return state['repos']['find'](_0x503f7b=>_0x503f7b['name']===state['selectedRepo'])||null;}function getProviderDisplayName(){const _0x100ca8=getSelectedRepoObject(),_0xd6a887=_0x100ca8?.['url']?.['toLowerCase']()||'';if(_0xd6a887['includes']('github.com')||_0xd6a887['includes']('github.'))return'GitHub';else{if(_0xd6a887['includes']('gitlab.com')||_0xd6a887['includes']('gitlab.'))return'GitLab';else{if(_0xd6a887['includes']('bitbucket.org')||_0xd6a887['includes']('bitbucket.'))return'Bitbucket';else{if(_0xd6a887['includes']('dev.azure.com')||_0xd6a887['includes']('visualstudio.com'))return'Azure\x20DevOps';}}}return'Provider';}function getProviderCommitUrl(_0x48a22b){const _0x5f3999=getSelectedRepoObject();if(!_0x5f3999?.['url'])return null;let _0x2ae96b=_0x5f3999['url']['replace'](/\.git$/,'');_0x2ae96b=_0x2ae96b['replace'](/^(https?:\/\/)[^@]+@/,'$1');const _0x886a6a=_0x2ae96b['toLowerCase']();if(_0x886a6a['includes']('gitlab.com')||_0x886a6a['includes']('gitlab.'))return _0x2ae96b+'/-/commit/'+_0x48a22b;else{if(_0x886a6a['includes']('bitbucket.org')||_0x886a6a['includes']('bitbucket.'))return _0x2ae96b+'/commits/'+_0x48a22b;}return _0x2ae96b+'/commit/'+_0x48a22b;}function isSelectedCommitRemoteSource(){return state['commitDetail']?.['source']==='remote'||state['dataSource']==='remote';}function getSelectedBranchForRevertTask(){const _0x12c853=(state['selectedBranch']||'')['trim']();if(_0x12c853)return _0x12c853;const _0x1ba514=(state['activeBranch']||'')['trim']();if(_0x1ba514)return _0x1ba514;const _0x3d8eb6=(elements['branchName']?.['textContent']||'')['trim']();return _0x3d8eb6||null;}function buildRemoteRevertTaskInstructions(_0x284d28,_0x2819e1={}){const _0x1b0639=getSelectedBranchForRevertTask(),_0x38e759=_0x2819e1['mainline']||null,_0x4b707c=Array['isArray'](_0x284d28['parents'])&&_0x284d28['parents']['length']>0x1,_0x824d4f=_0x4b707c?'git\x20revert\x20--no-commit\x20-m\x20'+(_0x38e759||'1')+'\x20'+_0x284d28['hash']:'git\x20revert\x20--no-commit\x20'+_0x284d28['hash'],_0x5d487e=['Please\x20revert\x20commit\x20'+_0x284d28['hash']+'\x20in\x20repository\x20\x22'+state['selectedRepo']+'\x22\x20for\x20environment\x20\x22'+state['selectedEnvironment']+'\x22.','','Requirements:','1.\x20Open\x20repository\x20\x22'+state['selectedRepo']+'\x22\x20(typically\x20under\x20/workspace).',_0x1b0639?'2.\x20Ensure\x20branch\x20\x22'+_0x1b0639+'\x22\x20is\x20checked\x20out\x20(fetch\x20first\x20if\x20needed).':'2.\x20Use\x20the\x20repository\x20branch\x20configured\x20for\x20this\x20environment.','3.\x20Run\x20`'+_0x824d4f+'`.','4.\x20If\x20there\x20are\x20conflicts,\x20resolve\x20them\x20and\x20stage\x20the\x20resolved\x20files.','5.\x20Ensure\x20all\x20revert\x20changes\x20are\x20staged\x20(`git\x20add\x20-A`\x20as\x20needed).','6.\x20Do\x20NOT\x20run\x20`git\x20commit`\x20and\x20do\x20NOT\x20push.','7.\x20In\x20your\x20final\x20response,\x20report\x20success/failure\x20and\x20summarize\x20changed\x20files\x20and\x20conflicts.'];return _0x5d487e['join']('\x0a');}function navigateToTask(_0x41a556){const _0x4d0a75='task.html?id='+encodeURIComponent(_0x41a556),_0x571a39=localStorage['getItem'](OPEN_NEW_TAB_STORAGE_KEY)==='true';if(_0x571a39){const _0x34ef01=window['open'](_0x4d0a75,'_blank');!_0x34ef01&&(window['location']['href']=_0x4d0a75);return;}window['location']['href']=_0x4d0a75;}async function createRemoteRevertTask(_0x151be1,_0x3425d0={}){const _0x4b29d7=_0x151be1['shortHash']||_0x151be1['hash']['slice'](0x0,0x7),_0x39a705=buildRemoteRevertTaskInstructions(_0x151be1,_0x3425d0),_0x7f3fe0={'name':'Revert\x20'+_0x4b29d7+'\x20in\x20'+state['selectedRepo'],'environment':state['selectedEnvironment'],'task_type':'manual','parameters':{'instructions':_0x39a705}},_0x4e3cb7=elements['revertBtn']?.['textContent']||'Revert\x20via\x20task';elements['revertBtn']&&(elements['revertBtn']['disabled']=!![],elements['revertBtn']['textContent']='Creating\x20task...');try{const _0x3e898d=await API['createTask'](_0x7f3fe0),_0x4f23c8=_0x3e898d?.['taskId'];if(!_0x4f23c8)throw new Error('Task\x20created\x20but\x20no\x20task\x20ID\x20was\x20returned');Utils['showSuccess']('Revert\x20task\x20created'),navigateToTask(_0x4f23c8);}catch(_0x339c8d){if(_0x339c8d?.['error']==='git_connections_required'&&Array['isArray'](_0x339c8d['providers'])&&_0x339c8d['providers']['length']>0x0){const _0x479dca=_0x339c8d['providers']['map'](_0x359666=>_0x359666['displayName']||_0x359666['provider']||_0x359666['name']||'provider')['join'](',\x20');throw new Error('Git\x20connection\x20required:\x20'+_0x479dca+'.\x20Connect\x20account(s)\x20in\x20Settings\x20and\x20retry.');}throw _0x339c8d;}finally{elements['revertBtn']&&(elements['revertBtn']['disabled']=![],elements['revertBtn']['textContent']=_0x4e3cb7);}}function handleSearchInput(_0xe496b6){const _0x3f3138=_0xe496b6['target']['value']['trim']();elements['clearSearchBtn']['hidden']=!_0x3f3138,searchTimer&&clearTimeout(searchTimer),searchTimer=setTimeout(()=>{state['pagination']['search']=_0x3f3138,state['pagination']['offset']=0x0,loadHistory();},SEARCH_DEBOUNCE_MS);}function clearSearch(){elements['searchInput']['value']='',elements['clearSearchBtn']['hidden']=!![],state['pagination']['search']='',state['pagination']['offset']=0x0,loadHistory();}function changePage(_0x5338d2){const _0x52c91a=state['pagination']['offset']+_0x5338d2*state['pagination']['limit'];if(_0x52c91a<0x0)return;state['pagination']['offset']=_0x52c91a,loadHistory({'keepSelection':![]});}async function handleCopyHash(){if(!state['commitDetail']?.['commit']?.['hash'])return;const _0x409ea6=await Utils['copyToClipboard'](state['commitDetail']['commit']['hash']);if(_0x409ea6)Utils['showSuccess']('Commit\x20hash\x20copied');}async function handleRevertCommit(){if(!state['commitDetail']?.['commit']?.['hash'])return;const _0xd55152=state['commitDetail']['commit'],_0xc9d5ed=_0xd55152['shortHash']||_0xd55152['hash']['slice'](0x0,0x7),_0x180fd7={};_0xd55152['parents']&&_0xd55152['parents']['length']>0x1&&(_0x180fd7['mainline']=elements['mainlineSelect']['value']||'1');if(isSelectedCommitRemoteSource()){const _0x21fb71=getSelectedBranchForRevertTask(),_0x275500=_0x180fd7['mainline']?'\x20using\x20mainline\x20parent\x20'+_0x180fd7['mainline']:'',_0x1ca88e=_0x21fb71?'\x20on\x20branch\x20\x22'+_0x21fb71+'\x22':'',_0x4f12b6='Create\x20a\x20revert\x20task\x20for\x20commit\x20'+_0xc9d5ed+_0x1ca88e+_0x275500+'?\x20The\x20task\x20will\x20apply\x20the\x20revert\x20without\x20committing\x20so\x20it\x20can\x20be\x20approved\x20and\x20pushed\x20later.',_0x1f6d9d=await ConfirmDialog['show']({'title':'Create\x20Revert\x20Task','message':_0x4f12b6,'confirmText':'Create\x20Task','cancelText':'Cancel','danger':!![]});if(!_0x1f6d9d)return;try{await createRemoteRevertTask(_0xd55152,_0x180fd7);}catch(_0x11ad35){Utils['showError'](_0x11ad35['message']||'Failed\x20to\x20create\x20revert\x20task');}return;}const _0x56ae33='Revert\x20commit\x20'+_0xc9d5ed+'?\x20This\x20will\x20create\x20a\x20new\x20commit\x20that\x20undoes\x20these\x20changes.',_0x52863e=await ConfirmDialog['show']({'title':'Revert\x20Commit','message':_0x56ae33,'confirmText':'Revert','cancelText':'Cancel','danger':!![]});if(!_0x52863e)return;try{await API['revertEnvironmentRepoCommit'](state['selectedEnvironment'],state['selectedRepo'],_0xd55152['hash'],_0x180fd7),Utils['showSuccess']('Commit\x20reverted'),state['pagination']['offset']=0x0,await loadHistory({'keepSelection':![]});}catch(_0x2d1508){Utils['showError'](_0x2d1508['message']||'Failed\x20to\x20revert\x20commit');}}function parsePatchContent(_0x5273e3){const _0x59e752=[],_0x2e8806=_0x5273e3['split']('\x0a');let _0x449a0d=null,_0x4efdf8=null;for(const _0x37bf95 of _0x2e8806){if(_0x37bf95['startsWith']('diff\x20--git')){_0x449a0d&&_0x4efdf8&&_0x449a0d['hunks']['push'](_0x4efdf8);_0x449a0d&&_0x59e752['push'](_0x449a0d);const _0x119a0a=_0x37bf95['match'](/diff --git a\/(.+?) b\/(.+)/);_0x449a0d={'oldPath':_0x119a0a?_0x119a0a[0x1]:'','newPath':_0x119a0a?_0x119a0a[0x2]:'','hunks':[],'isDeleted':![]},_0x4efdf8=null;}else{if(_0x37bf95['startsWith']('deleted\x20file\x20mode')&&_0x449a0d)_0x449a0d['isDeleted']=!![];else{if(_0x37bf95['startsWith']('@@'))_0x4efdf8&&_0x449a0d&&_0x449a0d['hunks']['push'](_0x4efdf8),_0x4efdf8={'header':_0x37bf95,'lines':[]};else _0x4efdf8&&_0x4efdf8['lines']['push'](_0x37bf95);}}}return _0x449a0d&&_0x4efdf8&&_0x449a0d['hunks']['push'](_0x4efdf8),_0x449a0d&&_0x59e752['push'](_0x449a0d),_0x59e752;}function parseHunkHeader(_0x5362b1){const _0x5c4e01=_0x5362b1['match'](/@@ -(\d+),?\d* \+(\d+),?\d* @@/);if(_0x5c4e01)return{'oldStart':parseInt(_0x5c4e01[0x1],0xa),'newStart':parseInt(_0x5c4e01[0x2],0xa)};return{'oldStart':0x1,'newStart':0x1};}function highlightDiffLine(_0x5eb285,_0x40a911){const _0x22598f=window['hljs']||(typeof hljs!=='undefined'?hljs:null);if(_0x22598f&&_0x40a911)try{const _0xc7db61=_0x22598f['getLanguage'](_0x40a911)?_0x40a911:null;if(_0xc7db61)return _0x22598f['highlight'](_0x5eb285,{'language':_0xc7db61})['value'];}catch(_0x380f0b){console['error']('Diff\x20syntax\x20highlighting\x20error:',_0x380f0b);}return Utils['escapeHtml'](_0x5eb285);}function computeWordDiff(_0x1a040e,_0x45cc38){const _0x58bebf=_0x2aead6=>{const _0x1c904c=[];let _0x482548='',_0x351021=![];for(let _0x2934e4=0x0;_0x2934e4<_0x2aead6['length'];_0x2934e4++){const _0x471d20=_0x2aead6[_0x2934e4],_0x3fbf26=/\s/['test'](_0x471d20);if(_0x482548==='')_0x482548=_0x471d20,_0x351021=_0x3fbf26;else _0x3fbf26===_0x351021?_0x482548+=_0x471d20:(_0x1c904c['push'](_0x482548),_0x482548=_0x471d20,_0x351021=_0x3fbf26);}return _0x482548&&_0x1c904c['push'](_0x482548),_0x1c904c;},_0x53c5c3=_0x58bebf(_0x1a040e),_0x3dcb05=_0x58bebf(_0x45cc38),_0x383d49=_0x53c5c3['length'],_0xf5e6=_0x3dcb05['length'],_0x4bff01=Array(_0x383d49+0x1)['fill'](null)['map'](()=>Array(_0xf5e6+0x1)['fill'](0x0));for(let _0xf1b4e1=0x1;_0xf1b4e1<=_0x383d49;_0xf1b4e1++){for(let _0x252e2a=0x1;_0x252e2a<=_0xf5e6;_0x252e2a++){_0x53c5c3[_0xf1b4e1-0x1]===_0x3dcb05[_0x252e2a-0x1]?_0x4bff01[_0xf1b4e1][_0x252e2a]=_0x4bff01[_0xf1b4e1-0x1][_0x252e2a-0x1]+0x1:_0x4bff01[_0xf1b4e1][_0x252e2a]=Math['max'](_0x4bff01[_0xf1b4e1-0x1][_0x252e2a],_0x4bff01[_0xf1b4e1][_0x252e2a-0x1]);}}const _0x124c88={'old':[],'new':[]};let _0x230ec3=_0x383d49,_0x47abaf=_0xf5e6;const _0x5e9864=[],_0x11a17a=[];while(_0x230ec3>0x0||_0x47abaf>0x0){if(_0x230ec3>0x0&&_0x47abaf>0x0&&_0x53c5c3[_0x230ec3-0x1]===_0x3dcb05[_0x47abaf-0x1])_0x5e9864['unshift']({'type':'equal','text':_0x53c5c3[_0x230ec3-0x1]}),_0x11a17a['unshift']({'type':'equal','text':_0x3dcb05[_0x47abaf-0x1]}),_0x230ec3--,_0x47abaf--;else{if(_0x47abaf>0x0&&(_0x230ec3===0x0||_0x4bff01[_0x230ec3][_0x47abaf-0x1]>=_0x4bff01[_0x230ec3-0x1][_0x47abaf]))_0x11a17a['unshift']({'type':'insert','text':_0x3dcb05[_0x47abaf-0x1]}),_0x47abaf--;else _0x230ec3>0x0&&(_0x5e9864['unshift']({'type':'delete','text':_0x53c5c3[_0x230ec3-0x1]}),_0x230ec3--);}}return _0x124c88['old']=_0x5e9864,_0x124c88['new']=_0x11a17a,_0x124c88;}function renderDiffLineWithWordHighlight(_0x6eb6f0,_0x79eea4,_0x121eeb,_0x14e335){if(!_0x79eea4||_0x79eea4['length']===0x0)return highlightDiffLine(_0x6eb6f0,_0x14e335);let _0x3d539c='';const _0x4e2ae5=_0x121eeb==='add'?'diff-word-add':'diff-word-remove',_0xe4c9ab=_0x121eeb==='add'?'insert':'delete';for(const _0x28e523 of _0x79eea4){const _0x234ac2=Utils['escapeHtml'](_0x28e523['text']);_0x28e523['type']===_0xe4c9ab?_0x3d539c+='<span\x20class=\x22'+_0x4e2ae5+'\x22>'+_0x234ac2+'</span>':_0x3d539c+=_0x234ac2;}return _0x3d539c;}function getFileLanguage(_0x5685e3){const _0x4c749e=_0x5685e3['split']('.')['pop']()['toLowerCase'](),_0x33d9a5={'js':'javascript','jsx':'javascript','ts':'typescript','tsx':'typescript','py':'python','java':'java','c':'c','cpp':'cpp','cs':'csharp','go':'go','rs':'rust','php':'php','rb':'ruby','html':'xml','css':'css','json':'json','yml':'yaml','yaml':'yaml','md':'markdown','sh':'bash','bash':'bash'};return _0x33d9a5[_0x4c749e]||null;}function calculateDiffStats(_0x3e2b86){let _0x2a0e63=0x0,_0x3a0372=0x0,_0x59e9e9=0x0;return _0x3e2b86['forEach'](_0xac5b7=>{let _0xf42399=0x0,_0x261fad=0x0;_0xac5b7['hunks']['forEach'](_0x31598a=>{_0x31598a['lines']['forEach'](_0x4a53a7=>{if(_0x4a53a7['startsWith']('+'))_0xf42399+=0x1;else{if(_0x4a53a7['startsWith']('-'))_0x261fad+=0x1;}});}),(_0xf42399+_0x261fad>0x0||_0xac5b7['isDeleted'])&&(_0x59e9e9+=0x1),_0x2a0e63+=_0xf42399,_0x3a0372+=_0x261fad;}),{'additions':_0x2a0e63,'deletions':_0x3a0372,'files':_0x59e9e9};}function renderUnifiedDiff(_0x5a4716,_0x51b220,_0x19b2b1=0x0,_0x1ca884={}){return _0x5a4716['map']((_0x22fcaa,_0x10f505)=>{const _0x211789=_0x19b2b1+_0x10f505,_0x3c25a2=_0x22fcaa['newPath']||_0x22fcaa['oldPath']||'unknown',_0xafa8cf='diff-'+_0x51b220+'-'+_0x211789,_0x30bb76=getFileLanguage(_0x3c25a2),{additions:_0x17047b,deletions:_0x207337}=calculateDiffStats([_0x22fcaa]),_0x497680=getCollapsedState(_0x51b220,_0x3c25a2,_0x1ca884['defaultCollapsed']),_0x276bc9=getFileStatus(_0x22fcaa,_0x17047b,_0x207337),_0x447a36=_0x276bc9==='added'?'A':_0x276bc9==='deleted'?'D':'M',_0x2e87a0=_0x22fcaa['hunks']['map'](_0x443810=>{const {oldStart:_0x4d88b5,newStart:_0x2c092d}=parseHunkHeader(_0x443810['header']);let _0x2e219d=_0x4d88b5,_0x532fef=_0x2c092d;const _0x26e2a2=_0x443810['lines']['map'](_0x25ef23=>({'line':_0x25ef23,'type':_0x25ef23['startsWith']('+')?'add':_0x25ef23['startsWith']('-')?'remove':_0x25ef23['startsWith']('\x5c')?'meta':'context'}));let _0x1d7da0=0x0;while(_0x1d7da0<_0x26e2a2['length']){if(_0x26e2a2[_0x1d7da0]['type']==='remove'){let _0x4c2f80=_0x1d7da0,_0x2ad22f=_0x1d7da0;while(_0x2ad22f<_0x26e2a2['length']&&_0x26e2a2[_0x2ad22f]['type']==='remove')_0x2ad22f++;let _0x4db544=_0x2ad22f,_0x283156=_0x4db544;while(_0x283156<_0x26e2a2['length']&&_0x26e2a2[_0x283156]['type']==='add')_0x283156++;const _0xfca239=_0x2ad22f-_0x4c2f80,_0x24da92=_0x283156-_0x4db544,_0x47e484=Math['min'](_0xfca239,_0x24da92);for(let _0x4e8c64=0x0;_0x4e8c64<_0x47e484;_0x4e8c64++){const _0x43651e=_0x26e2a2[_0x4c2f80+_0x4e8c64]['line']['substring'](0x1),_0x3f72ac=_0x26e2a2[_0x4db544+_0x4e8c64]['line']['substring'](0x1),_0x16f24f=computeWordDiff(_0x43651e,_0x3f72ac);_0x26e2a2[_0x4c2f80+_0x4e8c64]['wordDiff']=_0x16f24f['old'],_0x26e2a2[_0x4db544+_0x4e8c64]['wordDiff']=_0x16f24f['new'];}_0x1d7da0=_0x283156;}else _0x1d7da0++;}const _0x4e109f=_0x26e2a2['map'](_0x46a40a=>{const _0x43d136=_0x46a40a['line'];if(_0x43d136['startsWith']('+')){const _0x380e75=_0x43d136['substring'](0x1),_0x251ac5=_0x46a40a['wordDiff']?renderDiffLineWithWordHighlight(_0x380e75,_0x46a40a['wordDiff'],'add',_0x30bb76):highlightDiffLine(_0x380e75,_0x30bb76),_0x5d8375='<div\x20class=\x22diff-line\x20diff-add\x22><span\x20class=\x22diff-line-num\x20diff-line-num-old\x22></span><span\x20class=\x22diff-line-num\x20diff-line-num-new\x22>'+_0x532fef+'</span><span\x20class=\x22diff-line-content\x22><span\x20class=\x22diff-prefix\x22>+</span>'+_0x251ac5+'</span></div>';return _0x532fef+=0x1,_0x5d8375;}if(_0x43d136['startsWith']('-')){const _0x34fd44=_0x43d136['substring'](0x1),_0x2fc452=_0x46a40a['wordDiff']?renderDiffLineWithWordHighlight(_0x34fd44,_0x46a40a['wordDiff'],'remove',_0x30bb76):highlightDiffLine(_0x34fd44,_0x30bb76),_0x257892='<div\x20class=\x22diff-line\x20diff-remove\x22><span\x20class=\x22diff-line-num\x20diff-line-num-old\x22>'+_0x2e219d+'</span><span\x20class=\x22diff-line-num\x20diff-line-num-new\x22></span><span\x20class=\x22diff-line-content\x22><span\x20class=\x22diff-prefix\x22>-</span>'+_0x2fc452+'</span></div>';return _0x2e219d+=0x1,_0x257892;}if(_0x43d136['startsWith']('\x5c'))return'<div\x20class=\x22diff-line\x20diff-meta\x22><span\x20class=\x22diff-line-num\x20diff-line-num-old\x22></span><span\x20class=\x22diff-line-num\x20diff-line-num-new\x22></span><span\x20class=\x22diff-line-content\x22>'+Utils['escapeHtml'](_0x43d136)+'</span></div>';const _0x277906=_0x43d136['startsWith']('\x20')?_0x43d136['substring'](0x1):_0x43d136,_0xdf7e8f=highlightDiffLine(_0x277906,_0x30bb76),_0x45406a='<div\x20class=\x22diff-line\x20diff-context\x22><span\x20class=\x22diff-line-num\x20diff-line-num-old\x22>'+_0x2e219d+'</span><span\x20class=\x22diff-line-num\x20diff-line-num-new\x22>'+_0x532fef+'</span><span\x20class=\x22diff-line-content\x22>\x20'+_0xdf7e8f+'</span></div>';return _0x2e219d+=0x1,_0x532fef+=0x1,_0x45406a;})['join']('');return'<div\x20class=\x22diff-hunk\x22><div\x20class=\x22diff-hunk-header\x22>'+Utils['escapeHtml'](_0x443810['header'])+'</div>'+_0x4e109f+'</div>';})['join'](''),_0xa848fe=_0x2e87a0||'<div\x20class=\x22diff-hunk\x22><div\x20class=\x22diff-hunk-header\x22>No\x20textual\x20diff\x20available</div></div>';return'\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff\x22\x20id=\x22file-'+_0xafa8cf+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-header\x22\x20data-diff-id=\x22'+_0xafa8cf+'\x22\x20data-file-name=\x22'+Utils['escapeHtml'](_0x3c25a2)+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-title\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-status-badge\x20'+_0x276bc9+'\x22>'+_0x447a36+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-diff-name\x22>'+Utils['escapeHtml'](_0x3c25a2)+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-diff-stat\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22diff-add\x22>+'+_0x17047b+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22diff-del\x22>-'+_0x207337+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22file-diff-toggle-btn\x22\x20data-diff-id=\x22'+_0xafa8cf+'\x22\x20data-collapsed=\x22'+_0x497680+'\x22\x20type=\x22button\x22\x20aria-label=\x22'+(_0x497680?'Expand':'Collapse')+'\x22></button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-content\x20'+(_0x497680?'collapsed':'')+'\x22\x20id=\x22'+_0xafa8cf+'\x22>'+_0xa848fe+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20';})['join']('');}function renderSplitDiff(_0x16cc0c,_0x550ba4,_0x255234=0x0,_0x350201={}){return _0x16cc0c['map']((_0x2c23c7,_0x5a816c)=>{const _0x4a7af0=_0x255234+_0x5a816c,_0x30dc07=_0x2c23c7['newPath']||_0x2c23c7['oldPath']||'unknown',_0x298483='diff-'+_0x550ba4+'-'+_0x4a7af0,_0x438f40=getFileLanguage(_0x30dc07),{additions:_0x3539e9,deletions:_0x16e2df}=calculateDiffStats([_0x2c23c7]),_0x32cebd=getCollapsedState(_0x550ba4,_0x30dc07,_0x350201['defaultCollapsed']),_0x446761=getFileStatus(_0x2c23c7,_0x3539e9,_0x16e2df),_0x203d9c=_0x446761==='added'?'A':_0x446761==='deleted'?'D':'M',_0x140fff=_0x2c23c7['hunks']['map'](_0x4442af=>{const {oldStart:_0x454595,newStart:_0x5ae8bf}=parseHunkHeader(_0x4442af['header']);let _0x505928=_0x454595,_0x37a33a=_0x5ae8bf;const _0x4d8963=[],_0x4dae89=_0x4442af['lines'];let _0x27dc97=0x0;while(_0x27dc97<_0x4dae89['length']){const _0x493e5a=_0x4dae89[_0x27dc97];if(_0x493e5a['startsWith']('\x20')){const _0x7c67b8=_0x493e5a['substring'](0x1);_0x4d8963['push'](renderSplitRow({'type':'context','lineNum':_0x505928,'content':_0x7c67b8},{'type':'context','lineNum':_0x37a33a,'content':_0x7c67b8},_0x438f40)),_0x505928+=0x1,_0x37a33a+=0x1,_0x27dc97+=0x1;continue;}if(_0x493e5a['startsWith']('-')){const _0x2f4abc=[];while(_0x27dc97<_0x4dae89['length']&&_0x4dae89[_0x27dc97]['startsWith']('-')){_0x2f4abc['push'](_0x4dae89[_0x27dc97]['substring'](0x1)),_0x27dc97+=0x1;}const _0x15da0a=[];let _0x30467d=_0x27dc97;while(_0x30467d<_0x4dae89['length']&&_0x4dae89[_0x30467d]['startsWith']('+')){_0x15da0a['push'](_0x4dae89[_0x30467d]['substring'](0x1)),_0x30467d+=0x1;}const _0x5857bb=Math['max'](_0x2f4abc['length'],_0x15da0a['length']);for(let _0x49c4ad=0x0;_0x49c4ad<_0x5857bb;_0x49c4ad++){const _0x49fe79=_0x2f4abc[_0x49c4ad]?{'type':'remove','lineNum':_0x505928++,'content':_0x2f4abc[_0x49c4ad]}:{'type':'empty','lineNum':'','content':''},_0x14e60a=_0x15da0a[_0x49c4ad]?{'type':'add','lineNum':_0x37a33a++,'content':_0x15da0a[_0x49c4ad]}:{'type':'empty','lineNum':'','content':''};_0x4d8963['push'](renderSplitRow(_0x49fe79,_0x14e60a,_0x438f40));}_0x27dc97=_0x30467d;continue;}if(_0x493e5a['startsWith']('+')){const _0x16e728=[];while(_0x27dc97<_0x4dae89['length']&&_0x4dae89[_0x27dc97]['startsWith']('+')){_0x16e728['push'](_0x4dae89[_0x27dc97]['substring'](0x1)),_0x27dc97+=0x1;}_0x16e728['forEach'](_0x3975c1=>{_0x4d8963['push'](renderSplitRow({'type':'empty','lineNum':'','content':''},{'type':'add','lineNum':_0x37a33a++,'content':_0x3975c1},_0x438f40));});continue;}if(_0x493e5a['startsWith']('\x5c')){_0x4d8963['push'](renderSplitRow({'type':'meta','lineNum':'','content':_0x493e5a},{'type':'meta','lineNum':'','content':_0x493e5a},_0x438f40)),_0x27dc97+=0x1;continue;}_0x27dc97+=0x1;}const _0x2596cc=_0x4d8963['join']('')||'<div\x20class=\x22diff-hunk\x22>No\x20textual\x20diff\x20available</div>';return'\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22diff-hunk\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22diff-hunk-header\x22>'+Utils['escapeHtml'](_0x4442af['header'])+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22split-diff-table\x22>'+_0x2596cc+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20';})['join'](''),_0x70f71b=_0x140fff||'<div\x20class=\x22diff-hunk\x22><div\x20class=\x22diff-hunk-header\x22>No\x20textual\x20diff\x20available</div></div>';return'\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff\x22\x20id=\x22file-'+_0x298483+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-header\x22\x20data-diff-id=\x22'+_0x298483+'\x22\x20data-file-name=\x22'+Utils['escapeHtml'](_0x30dc07)+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-title\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-status-badge\x20'+_0x446761+'\x22>'+_0x203d9c+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-diff-name\x22>'+Utils['escapeHtml'](_0x30dc07)+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-diff-stat\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22diff-add\x22>+'+_0x3539e9+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22diff-del\x22>-'+_0x16e2df+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22file-diff-toggle-btn\x22\x20data-diff-id=\x22'+_0x298483+'\x22\x20data-collapsed=\x22'+_0x32cebd+'\x22\x20type=\x22button\x22\x20aria-label=\x22'+(_0x32cebd?'Expand':'Collapse')+'\x22></button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-content\x20'+(_0x32cebd?'collapsed':'')+'\x22\x20id=\x22'+_0x298483+'\x22>'+_0x70f71b+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20';})['join']('');}function renderSplitRow(_0x4b3a6b,_0x46751c,_0xc86813){return'\x0a\x20\x20\x20\x20<div\x20class=\x22split-diff-row\x22>\x0a\x20\x20\x20\x20\x20\x20'+renderSplitCell(_0x4b3a6b,_0xc86813)+'\x0a\x20\x20\x20\x20\x20\x20'+renderSplitCell(_0x46751c,_0xc86813)+'\x0a\x20\x20\x20\x20</div>\x0a\x20\x20';}function renderSplitCell(_0x1b2e84,_0x4d7c52){const _0x2a8105='split-'+_0x1b2e84['type'],_0x18cfd6=_0x1b2e84['lineNum']===0x0?'':_0x1b2e84['lineNum'];let _0x377ba5='&nbsp;';if(_0x1b2e84['type']==='meta')_0x377ba5=Utils['escapeHtml'](_0x1b2e84['content']);else _0x1b2e84['type']!=='empty'&&(_0x377ba5=highlightDiffLine(_0x1b2e84['content'],_0x4d7c52));return'\x0a\x20\x20\x20\x20<div\x20class=\x22split-diff-cell\x20'+_0x2a8105+'\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22split-line-num\x22>'+_0x18cfd6+'</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22split-line-content\x22>'+_0x377ba5+'</span>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20';}function bindDiffToggleHandlers(_0x16e1bf){const _0xfcb4cd=elements['diffContainer']['querySelectorAll']('.file-diff-header');_0xfcb4cd['forEach'](_0x18ad63=>{if(_0x18ad63['dataset']['bound']==='true')return;_0x18ad63['dataset']['bound']='true',_0x18ad63['addEventListener']('click',_0x39e7f6=>{if(_0x39e7f6['target']['closest']('.file-diff-toggle-btn'))return;const _0x32c8f7=_0x18ad63['dataset']['diffId'];toggleDiff(_0x32c8f7,_0x18ad63['dataset']['fileName'],_0x16e1bf);});});const _0x172111=elements['diffContainer']['querySelectorAll']('.file-diff-toggle-btn');_0x172111['forEach'](_0x8090cb=>{if(_0x8090cb['dataset']['bound']==='true')return;_0x8090cb['dataset']['bound']='true',_0x8090cb['addEventListener']('click',_0x1e18ac=>{_0x1e18ac['stopPropagation']();const _0x9dc1be=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x8090cb['dataset']['diffId']+'\x22]'),_0x43eff4=_0x9dc1be?.['dataset']['fileName']||'';toggleDiff(_0x8090cb['dataset']['diffId'],_0x43eff4,_0x16e1bf);});});}function toggleDiff(_0x97b3b7,_0x1c2813,_0x294c47){const _0x5b08bb=document['getElementById'](_0x97b3b7),_0x51e034=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x97b3b7+'\x22]'),_0x5c8f63=_0x51e034?.['querySelector']('.file-diff-toggle-btn');if(!_0x5b08bb)return;const _0x44ee27=_0x5b08bb['classList']['toggle']('collapsed');_0x5c8f63&&(_0x5c8f63['dataset']['collapsed']=String(_0x44ee27),_0x5c8f63['setAttribute']('aria-label',_0x44ee27?'Expand':'Collapse'));const _0x54dc4=getStorageKey(_0x294c47,_0x1c2813);localStorage['setItem'](_0x54dc4,String(_0x44ee27));}function setAllDiffCollapsed(_0x438b05){if(!state['commitDetail']?.['commit']?.['hash'])return;const _0x3229a6='git-history-'+state['commitDetail']['commit']['hash'];if(state['diffRender']?.['files']?.['length']){const _0x5168d0=buildCollapsedStateUpdates({'files':state['diffRender']['files'],'collapsed':_0x438b05,'storageKeyPrefix':_0x3229a6,'getStorageKey':getStorageKey});_0x5168d0['forEach'](({key:_0x1e0e40,value:_0x3a51e})=>{localStorage['setItem'](_0x1e0e40,_0x3a51e);});}const _0x2cfc06=elements['diffContainer']['querySelectorAll']('.file-diff-content');_0x2cfc06['forEach'](_0xddd980=>{_0xddd980['classList']['toggle']('collapsed',_0x438b05);const _0xbb7e7=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0xddd980['id']+'\x22]'),_0x908a51=_0xbb7e7?.['querySelector']('.file-diff-toggle-btn'),_0x45b19e=_0xbb7e7?.['dataset']['fileName']||'';_0x908a51&&(_0x908a51['dataset']['collapsed']=String(_0x438b05),_0x908a51['setAttribute']('aria-label',_0x438b05?'Expand':'Collapse')),_0x45b19e&&localStorage['setItem'](getStorageKey(_0x3229a6,_0x45b19e),String(_0x438b05));});}function getStorageKey(_0x145e90,_0x3234b4){return _0x145e90+'-'+safeBase64(_0x3234b4);}function getCollapsedState(_0x37b5c0,_0x32cd57,_0x2684ae=![]){const _0x4cabb6=localStorage['getItem'](getStorageKey(_0x37b5c0,_0x32cd57));if(_0x4cabb6===null)return Boolean(_0x2684ae);return _0x4cabb6==='true';}function safeBase64(_0x360e5e){try{return btoa(unescape(encodeURIComponent(_0x360e5e)));}catch(_0x40d0df){return btoa(_0x360e5e);}}function formatDate(_0x3b8224){if(!_0x3b8224)return'';const _0x3adc38=new Date(_0x3b8224);if(Number['isNaN'](_0x3adc38['getTime']()))return _0x3b8224;return _0x3adc38['toLocaleString']('en-US',{'month':'short','day':'numeric','year':'numeric','hour':'2-digit','minute':'2-digit'});}function renderLoadingSkeletons(_0x1ae16a){return Array(_0x1ae16a)['fill'](0x0)['map'](()=>'\x0a\x20\x20\x20\x20<li\x20class=\x22commit-item\x20commit-item-skeleton\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22skeleton\x20skeleton-message\x22></div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22skeleton-meta\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22skeleton\x20skeleton-avatar\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22skeleton\x20skeleton-text\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22skeleton\x20skeleton-text-short\x22></div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</li>\x0a\x20\x20')['join']('');}function toggleFileNav(_0x1736d4){if(elements['fileNavToggle']?.['disabled'])return;_0x1736d4['stopPropagation']();const _0x423758=elements['fileNavSidebar']?.['classList']['toggle']('open');_0x423758&&renderFileNavList();}function closeFileNav(){elements['fileNavSidebar']?.['classList']['remove']('open');}function toggleMaximize(){if(!elements['gitHistoryBody'])return;const _0x1da55c=elements['gitHistoryBody']['classList']['toggle']('maximized'),_0x104a4c=elements['maximizeBtn']?.['querySelector']('.maximize-icon'),_0x2d9b88=elements['maximizeBtn']?.['querySelector']('.restore-icon');_0x104a4c&&_0x2d9b88&&(_0x104a4c['hidden']=_0x1da55c,_0x2d9b88['hidden']=!_0x1da55c),elements['maximizeBtn']&&(elements['maximizeBtn']['title']=_0x1da55c?'Restore\x20diff\x20panel\x20(Esc\x20or\x20m)':'Maximize\x20diff\x20panel\x20(m)'),localStorage['setItem']('git-history-maximized',String(_0x1da55c));}function renderFileNavList(){if(!state['commitDetail']?.['files']||!elements['fileNavList'])return;const _0x14cb3a=state['commitDetail']['files'];elements['fileNavList']['innerHTML']=_0x14cb3a['map']((_0x1c3fcc,_0x3d4ca5)=>{const _0x49be3d=_0x1c3fcc['newPath']||_0x1c3fcc['oldPath']||'unknown',_0x310358=_0x49be3d['split']('/')['pop'](),{additions:_0x3dbc0a,deletions:_0x2d6159}=calculateDiffStats([_0x1c3fcc]),_0x437e84=getFileStatus(_0x1c3fcc,_0x3dbc0a,_0x2d6159),_0x3f3ec9=getStatusIcon(_0x437e84);return'\x0a\x20\x20\x20\x20\x20\x20<li\x20class=\x22file-nav-item\x22\x20data-file-idx=\x22'+_0x3d4ca5+'\x22\x20data-file-name=\x22'+Utils['escapeHtml'](_0x49be3d)+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-nav-icon\x20'+_0x437e84+'\x22>'+_0x3f3ec9+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-nav-name\x22\x20title=\x22'+Utils['escapeHtml'](_0x49be3d)+'\x22>'+Utils['escapeHtml'](_0x310358)+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-nav-stats\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x3dbc0a>0x0?'<span\x20class=\x22add\x22>+'+_0x3dbc0a+'</span>':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x2d6159>0x0?'<span\x20class=\x22del\x22>-'+_0x2d6159+'</span>':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20';})['join'](''),elements['fileNavList']['querySelectorAll']('.file-nav-item')['forEach'](_0x494a58=>{_0x494a58['addEventListener']('click',()=>{const _0xd1f8c3=parseInt(_0x494a58['dataset']['fileIdx']||'0',0xa),_0x538d0c='git-history-'+state['commitDetail']['commit']['hash'],_0x15ca19='diff-'+_0x538d0c+'-'+_0xd1f8c3;ensureLazyDiffFileRendered(_0xd1f8c3);const _0x10e5a3=document['getElementById'](_0x15ca19);if(_0x10e5a3){if(_0x10e5a3['classList']['contains']('collapsed')){const _0x3a8f02=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x15ca19+'\x22]'),_0x4ad273=_0x3a8f02?.['dataset']['fileName']||'';toggleDiff(_0x15ca19,_0x4ad273,_0x538d0c);}const _0xd8357d=_0x10e5a3['closest']('.file-diff');_0xd8357d&&(_0xd8357d['scrollIntoView']({'behavior':'smooth','block':'start'}),_0xd8357d['classList']['add']('highlighted'),setTimeout(()=>_0xd8357d['classList']['remove']('highlighted'),0x5dc));}closeFileNav();});});}function getFileStatus(_0x493c6b,_0x103f6b,_0x348c3c){if(_0x493c6b['isDeleted'])return'deleted';if(_0x103f6b>0x0&&_0x348c3c===0x0)return'added';return'modified';}function getStatusIcon(_0x53e6b5){switch(_0x53e6b5){case'added':return'<svg\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22><line\x20x1=\x2212\x22\x20y1=\x225\x22\x20x2=\x2212\x22\x20y2=\x2219\x22/><line\x20x1=\x225\x22\x20y1=\x2212\x22\x20x2=\x2219\x22\x20y2=\x2212\x22/></svg>';case'deleted':return'<svg\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22><line\x20x1=\x225\x22\x20y1=\x2212\x22\x20x2=\x2219\x22\x20y2=\x2212\x22/></svg>';default:return'<svg\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22><path\x20d=\x22M11\x204H4a2\x202\x200\x200\x200-2\x202v14a2\x202\x200\x200\x200\x202\x202h14a2\x202\x200\x200\x200\x202-2v-7\x22/><path\x20d=\x22M18.5\x202.5a2.121\x202.121\x200\x200\x201\x203\x203L12\x2015l-4\x201\x201-4\x209.5-9.5z\x22/></svg>';}}function detectCommitType(_0x510693){if(!_0x510693)return null;const _0x173f04=_0x510693['toLowerCase']();if(/^feat(\(|:|\s)/['test'](_0x173f04)||_0x173f04['includes']('add\x20')||_0x173f04['includes']('implement'))return'feat';if(/^fix(\(|:|\s)/['test'](_0x173f04)||_0x173f04['includes']('bug')||_0x173f04['includes']('patch'))return'fix';if(/^refactor(\(|:|\s)/['test'](_0x173f04)||_0x173f04['includes']('refactor')||_0x173f04['includes']('restructure'))return'refactor';if(/^docs?(\(|:|\s)/['test'](_0x173f04)||_0x173f04['includes']('readme')||_0x173f04['includes']('documentation'))return'docs';if(/^test(\(|:|\s)/['test'](_0x173f04)||_0x173f04['includes']('test'))return'test';if(/^chore(\(|:|\s)/['test'](_0x173f04)||_0x173f04['includes']('chore')||_0x173f04['includes']('update\x20dep'))return'chore';return null;}
@@ -1 +1 @@
1
- import{API,Utils}from'./app.js';export function updateGitStatusIndicator(_0x1244e4,_0x201097){const {statusIcon:_0x8fc251,statusText:_0x1629b6,branchText:_0x2de7d8,authBadge:_0x1eeb33,container:_0x29be13,commitBtn:_0x1f2a27,discardBtn:_0x5518a1}=_0x1244e4;if(_0x201097['hasUncommittedChanges']){_0x8fc251['textContent']='⚠️',_0x1629b6['textContent']='Uncommitted\x20changes';_0x29be13&&(_0x29be13['style']['cursor']='pointer',_0x29be13['title']='Click\x20to\x20view\x20uncommitted\x20changes');if(_0x1f2a27)_0x1f2a27['disabled']=![];if(_0x5518a1)_0x5518a1['disabled']=![];}else{if(_0x201097['ahead']>0x0){_0x8fc251['textContent']='📤',_0x1629b6['textContent']=_0x201097['ahead']+'\x20ahead';_0x29be13&&(_0x29be13['style']['cursor']='default',_0x29be13['title']='Repository\x20git\x20status');if(_0x1f2a27)_0x1f2a27['disabled']=!![];if(_0x5518a1)_0x5518a1['disabled']=!![];}else{if(_0x201097['behind']>0x0){_0x8fc251['textContent']='📥',_0x1629b6['textContent']=_0x201097['behind']+'\x20behind';_0x29be13&&(_0x29be13['style']['cursor']='default',_0x29be13['title']='Repository\x20git\x20status');if(_0x1f2a27)_0x1f2a27['disabled']=!![];if(_0x5518a1)_0x5518a1['disabled']=!![];}else{_0x8fc251['textContent']='✓',_0x1629b6['textContent']='Synced';_0x29be13&&(_0x29be13['style']['cursor']='default',_0x29be13['title']='Repository\x20git\x20status');if(_0x1f2a27)_0x1f2a27['disabled']=!![];if(_0x5518a1)_0x5518a1['disabled']=!![];}}}_0x2de7d8&&(_0x2de7d8['textContent']=_0x201097['branch']||'');if(_0x1eeb33){const _0xd8f61a=_0x201097['setupRepoAuth']?.['mode'];_0x1eeb33['classList']['remove']('auth-provider','auth-local','auth-user');if(_0xd8f61a==='provider')_0x1eeb33['textContent']='App\x20Auth',_0x1eeb33['classList']['add']('auth-provider'),_0x1eeb33['title']=_0x201097['setupRepoAuth']?.['provider']?'Setup\x20repository\x20auth:\x20Git\x20Provider\x20app\x20('+_0x201097['setupRepoAuth']['provider']+')':'Setup\x20repository\x20auth:\x20Git\x20Provider\x20app';else _0xd8f61a==='user'?(_0x1eeb33['textContent']='User\x20Auth',_0x1eeb33['classList']['add']('auth-user'),_0x1eeb33['title']=_0x201097['setupRepoAuth']?.['provider']?'Setup\x20repository\x20auth:\x20User\x20OAuth\x20('+_0x201097['setupRepoAuth']['provider']+')':'Setup\x20repository\x20auth:\x20User\x20OAuth'):(_0x1eeb33['textContent']='Local\x20Auth',_0x1eeb33['classList']['add']('auth-local'),_0x1eeb33['title']='Setup\x20repository\x20auth:\x20Local\x20host\x20git\x20credentials');_0x1eeb33['hidden']=![];}}export function showGitStatusError(_0x149eee){const {statusIcon:_0x247d71,statusText:_0x80eb16,authBadge:_0x1d15d5}=_0x149eee;_0x247d71['textContent']='❌',_0x80eb16['textContent']='Error',_0x1d15d5&&(_0x1d15d5['hidden']=!![]);}export function getFileStatusSymbol(_0x17b1d6){if(_0x17b1d6['includes']('M'))return'📝';if(_0x17b1d6['includes']('A'))return'➕';if(_0x17b1d6['includes']('D'))return'➖';return'📄';}export function renderChangedFilesList(_0xafae6f,_0x1f777b,_0x32c8ec='No\x20changes',_0x3708f0=![],_0x29f46f=null){if(!_0x1f777b||_0x1f777b['length']===0x0){_0xafae6f['innerHTML']='<li\x20class=\x22text-muted\x22>'+Utils['escapeHtml'](_0x32c8ec)+'</li>';return;}const _0x2a855a=_0x29f46f?'\x20changed-file-clickable':'';_0xafae6f['innerHTML']=_0x1f777b['map'](_0x55b4fc=>{const _0x3624a7=getFileStatusSymbol(_0x55b4fc['status']);let _0x4ff4de=_0x55b4fc['filename'];return _0x3708f0&&_0x55b4fc['filename']['endsWith']('/')&&(_0x4ff4de=_0x55b4fc['filename']+'\x20(new\x20directory\x20with\x20contents)'),'<li\x20class=\x22changed-file-item'+_0x2a855a+'\x22\x20data-filename=\x22'+Utils['escapeHtml'](_0x55b4fc['filename'])+'\x22>'+_0x3624a7+'\x20'+Utils['escapeHtml'](_0x4ff4de)+'</li>';})['join'](''),_0x29f46f&&_0xafae6f['querySelectorAll']('.changed-file-clickable')['forEach'](_0x593913=>{_0x593913['addEventListener']('click',()=>{_0x29f46f(_0x593913['dataset']['filename'],_0x593913);});});}export function showUncommittedChangesModal(_0x395595,_0x10c3e8,_0x46678a,_0x5c60b8=null){renderChangedFilesList(_0x10c3e8,_0x46678a,'No\x20uncommitted\x20changes',!![],_0x5c60b8),_0x395595['hidden']=![];}export function showCommitModal(_0x22e9b4,_0x1ccadc){const {userNameEl:_0x3158ec,userEmailEl:_0x1e3366,filesListEl:_0x4f894d,messageEl:_0x1359ce,pushCheckboxEl:_0x1a5c61,errorEl:_0x4d3e5f,user:_0x36d2ff,changedFiles:_0xf0276f}=_0x1ccadc;if(_0x4d3e5f)_0x4d3e5f['hidden']=!![];_0x36d2ff&&_0x3158ec&&(_0x3158ec['textContent']=_0x36d2ff['name']||_0x36d2ff['username']);_0x36d2ff&&_0x1e3366&&(_0x1e3366['textContent']=_0x36d2ff['email']||'');renderChangedFilesList(_0x4f894d,_0xf0276f,'No\x20changes\x20to\x20commit',![],_0x1ccadc['onFileClick']||null);if(_0x1359ce)_0x1359ce['value']='';if(_0x1a5c61)_0x1a5c61['checked']=!![];_0x22e9b4['hidden']=![];if(_0x1359ce)_0x1359ce['focus']();}export function showDiscardModal(_0x3d1a1f,_0xff8712,_0x563e73,_0x3a4d69=null){renderChangedFilesList(_0xff8712,_0x563e73,'No\x20changes\x20to\x20discard',![],_0x3a4d69),_0x3d1a1f['hidden']=![];}export async function fetchGitStatus(){return await API['get']('/environments/git/status');}export async function fetchGitDiff(){return await API['get']('/environments/git/diff');}
1
+ import{API,Utils}from'./app.js';export function updateGitStatusIndicator(_0x559285,_0x434d25){const {statusIcon:_0x1912bb,statusText:_0x1215ff,branchText:_0x591fd4,authBadge:_0x1778f1,container:_0x2254f1,commitBtn:_0x450571,discardBtn:_0x53011c}=_0x559285;if(_0x434d25['hasUncommittedChanges']){_0x1912bb['textContent']='⚠️',_0x1215ff['textContent']='Uncommitted\x20changes';_0x2254f1&&(_0x2254f1['style']['cursor']='pointer',_0x2254f1['title']='Click\x20to\x20view\x20uncommitted\x20changes');if(_0x450571)_0x450571['disabled']=![];if(_0x53011c)_0x53011c['disabled']=![];}else{if(_0x434d25['ahead']>0x0){_0x1912bb['textContent']='📤',_0x1215ff['textContent']=_0x434d25['ahead']+'\x20ahead';_0x2254f1&&(_0x2254f1['style']['cursor']='default',_0x2254f1['title']='Repository\x20git\x20status');if(_0x450571)_0x450571['disabled']=!![];if(_0x53011c)_0x53011c['disabled']=!![];}else{if(_0x434d25['behind']>0x0){_0x1912bb['textContent']='📥',_0x1215ff['textContent']=_0x434d25['behind']+'\x20behind';_0x2254f1&&(_0x2254f1['style']['cursor']='default',_0x2254f1['title']='Repository\x20git\x20status');if(_0x450571)_0x450571['disabled']=!![];if(_0x53011c)_0x53011c['disabled']=!![];}else{_0x1912bb['textContent']='✓',_0x1215ff['textContent']='Synced';_0x2254f1&&(_0x2254f1['style']['cursor']='default',_0x2254f1['title']='Repository\x20git\x20status');if(_0x450571)_0x450571['disabled']=!![];if(_0x53011c)_0x53011c['disabled']=!![];}}}_0x591fd4&&(_0x591fd4['textContent']=_0x434d25['branch']||'');if(_0x1778f1){const _0x834cf6=_0x434d25['setupRepoAuth']?.['mode'];_0x1778f1['classList']['remove']('auth-provider','auth-local','auth-user');if(_0x834cf6==='provider')_0x1778f1['textContent']='App\x20Auth',_0x1778f1['classList']['add']('auth-provider'),_0x1778f1['title']=_0x434d25['setupRepoAuth']?.['provider']?'Setup\x20repository\x20auth:\x20Git\x20Provider\x20app\x20('+_0x434d25['setupRepoAuth']['provider']+')':'Setup\x20repository\x20auth:\x20Git\x20Provider\x20app';else _0x834cf6==='user'?(_0x1778f1['textContent']='User\x20Auth',_0x1778f1['classList']['add']('auth-user'),_0x1778f1['title']=_0x434d25['setupRepoAuth']?.['provider']?'Setup\x20repository\x20auth:\x20User\x20OAuth\x20('+_0x434d25['setupRepoAuth']['provider']+')':'Setup\x20repository\x20auth:\x20User\x20OAuth'):(_0x1778f1['textContent']='Local\x20Auth',_0x1778f1['classList']['add']('auth-local'),_0x1778f1['title']='Setup\x20repository\x20auth:\x20Local\x20host\x20git\x20credentials');_0x1778f1['hidden']=![];}}export function showGitStatusError(_0x1446f2){const {statusIcon:_0x10b32a,statusText:_0x30a176,authBadge:_0xe6444}=_0x1446f2;_0x10b32a['textContent']='❌',_0x30a176['textContent']='Error',_0xe6444&&(_0xe6444['hidden']=!![]);}export function getFileStatusSymbol(_0x103368){if(_0x103368['includes']('M'))return'📝';if(_0x103368['includes']('A'))return'➕';if(_0x103368['includes']('D'))return'➖';return'📄';}export function renderChangedFilesList(_0xc2e82,_0x2c6d80,_0x3a258b='No\x20changes',_0x5a6845=![],_0xc18be5=null){if(!_0x2c6d80||_0x2c6d80['length']===0x0){_0xc2e82['innerHTML']='<li\x20class=\x22text-muted\x22>'+Utils['escapeHtml'](_0x3a258b)+'</li>';return;}const _0x41ab84=_0xc18be5?'\x20changed-file-clickable':'';_0xc2e82['innerHTML']=_0x2c6d80['map'](_0x4f6414=>{const _0x8a94=getFileStatusSymbol(_0x4f6414['status']);let _0x578638=_0x4f6414['filename'];return _0x5a6845&&_0x4f6414['filename']['endsWith']('/')&&(_0x578638=_0x4f6414['filename']+'\x20(new\x20directory\x20with\x20contents)'),'<li\x20class=\x22changed-file-item'+_0x41ab84+'\x22\x20data-filename=\x22'+Utils['escapeHtml'](_0x4f6414['filename'])+'\x22>'+_0x8a94+'\x20'+Utils['escapeHtml'](_0x578638)+'</li>';})['join'](''),_0xc18be5&&_0xc2e82['querySelectorAll']('.changed-file-clickable')['forEach'](_0x2711bd=>{_0x2711bd['addEventListener']('click',()=>{_0xc18be5(_0x2711bd['dataset']['filename'],_0x2711bd);});});}export function showUncommittedChangesModal(_0x17d1bc,_0x31210d,_0x3ee7b0,_0x588b43=null){renderChangedFilesList(_0x31210d,_0x3ee7b0,'No\x20uncommitted\x20changes',!![],_0x588b43),_0x17d1bc['hidden']=![];}export function showCommitModal(_0x4f27e8,_0x294670){const {userNameEl:_0xcb7581,userEmailEl:_0x2ef065,filesListEl:_0x2f440e,messageEl:_0xfa7355,pushCheckboxEl:_0x14cab8,errorEl:_0x435234,user:_0x240540,changedFiles:_0x3cdd8b}=_0x294670;if(_0x435234)_0x435234['hidden']=!![];_0x240540&&_0xcb7581&&(_0xcb7581['textContent']=_0x240540['name']||_0x240540['username']);_0x240540&&_0x2ef065&&(_0x2ef065['textContent']=_0x240540['email']||'');renderChangedFilesList(_0x2f440e,_0x3cdd8b,'No\x20changes\x20to\x20commit',![],_0x294670['onFileClick']||null);if(_0xfa7355)_0xfa7355['value']='';if(_0x14cab8)_0x14cab8['checked']=!![];_0x4f27e8['hidden']=![];if(_0xfa7355)_0xfa7355['focus']();}export function showDiscardModal(_0x268be1,_0x98696e,_0x4e3336,_0x5945b1=null){renderChangedFilesList(_0x98696e,_0x4e3336,'No\x20changes\x20to\x20discard',![],_0x5945b1),_0x268be1['hidden']=![];}export async function fetchGitStatus(){return await API['get']('/environments/git/status');}export async function fetchGitDiff(){return await API['get']('/environments/git/diff');}