@profoundlogic/coderflow-server 0.5.2 → 0.5.3

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 (166) 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.js +1 -1
  142. package/dist/web-ui/public/git-history-lazy-utils.js +1 -1
  143. package/dist/web-ui/public/git-history.js +1 -1
  144. package/dist/web-ui/public/git-status.js +1 -1
  145. package/dist/web-ui/public/index.html +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/task.js +1 -1
  161. package/dist/web-ui/public/teams.js +1 -1
  162. package/dist/web-ui/public/terminal.js +1 -1
  163. package/dist/web-ui/public/theme.js +1 -1
  164. package/dist/web-ui/public/users.js +1 -1
  165. package/dist/web-ui/public/variant-grouping.js +1 -1
  166. 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(_0xa70954,{minFiles:minFiles=DEFAULT_LAZY_RENDER_MIN_FILES,maxFiles:maxFiles=DEFAULT_LAZY_RENDER_MAX_FILES,serverMaxFiles:serverMaxFiles=null}={}){const _0x3a218d=getLazyRenderUpperBound({'maxFiles':maxFiles,'serverMaxFiles':serverMaxFiles});return _0xa70954>=minFiles&&_0xa70954<=_0x3a218d;}export function shouldAutoCollapseDiff(_0x5ab86f,{threshold:threshold=DEFAULT_AUTO_COLLAPSE_MIN_FILES}={}){return _0x5ab86f>=threshold;}export function getNextRenderedCount({renderedCount:_0x366636,totalFiles:_0x2c77c6,chunkSize:chunkSize=DEFAULT_LAZY_RENDER_CHUNK_SIZE}){return Math['min'](_0x366636+chunkSize,_0x2c77c6);}export function renderedCountForTarget({renderedCount:_0x727fa7,targetIndex:_0x4be55f,totalFiles:_0x493db3,chunkSize:chunkSize=DEFAULT_LAZY_RENDER_CHUNK_SIZE}){let _0xd92528=_0x727fa7;while(_0xd92528<=_0x4be55f&&_0xd92528<_0x493db3){_0xd92528=getNextRenderedCount({'renderedCount':_0xd92528,'totalFiles':_0x493db3,'chunkSize':chunkSize});}return _0xd92528;}export function getLazyLoadMoreText({filesLength:_0xca6426,renderedCount:_0x7753e6,chunkSize:_0x558399}){const _0x1e274b=Math['max'](0x0,_0xca6426-_0x7753e6),_0x5a5565=Math['min'](_0x558399,_0x1e274b);return'Load\x20'+_0x5a5565['toLocaleString']()+'\x20more\x20files\x20('+_0x7753e6['toLocaleString']()+'\x20/\x20'+_0xca6426['toLocaleString']()+')';}export function getFileNameFromDiffFile(_0x242fd2){return _0x242fd2?.['newPath']||_0x242fd2?.['oldPath']||'';}export function buildCollapsedStateUpdates({files:_0x4b367d,collapsed:_0x3be74a,storageKeyPrefix:_0x2163da,getStorageKey:_0xffc91c}){const _0x5523e6=[];for(const _0xbcf3c6 of _0x4b367d||[]){const _0x6a9abf=getFileNameFromDiffFile(_0xbcf3c6);if(!_0x6a9abf)continue;_0x5523e6['push']({'key':_0xffc91c(_0x2163da,_0x6a9abf),'value':String(_0x3be74a),'fileName':_0x6a9abf});}return _0x5523e6;}
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(_0x4b445f,{minFiles:minFiles=DEFAULT_LAZY_RENDER_MIN_FILES,maxFiles:maxFiles=DEFAULT_LAZY_RENDER_MAX_FILES,serverMaxFiles:serverMaxFiles=null}={}){const _0x1c6379=getLazyRenderUpperBound({'maxFiles':maxFiles,'serverMaxFiles':serverMaxFiles});return _0x4b445f>=minFiles&&_0x4b445f<=_0x1c6379;}export function shouldAutoCollapseDiff(_0x7ef0cf,{threshold:threshold=DEFAULT_AUTO_COLLAPSE_MIN_FILES}={}){return _0x7ef0cf>=threshold;}export function getNextRenderedCount({renderedCount:_0x3fa2fa,totalFiles:_0xd822f2,chunkSize:chunkSize=DEFAULT_LAZY_RENDER_CHUNK_SIZE}){return Math['min'](_0x3fa2fa+chunkSize,_0xd822f2);}export function renderedCountForTarget({renderedCount:_0x1a315a,targetIndex:_0x28fec4,totalFiles:_0x4e354d,chunkSize:chunkSize=DEFAULT_LAZY_RENDER_CHUNK_SIZE}){let _0x25ff72=_0x1a315a;while(_0x25ff72<=_0x28fec4&&_0x25ff72<_0x4e354d){_0x25ff72=getNextRenderedCount({'renderedCount':_0x25ff72,'totalFiles':_0x4e354d,'chunkSize':chunkSize});}return _0x25ff72;}export function getLazyLoadMoreText({filesLength:_0x30efc8,renderedCount:_0x1bcee9,chunkSize:_0x2003f4}){const _0x3fb9e3=Math['max'](0x0,_0x30efc8-_0x1bcee9),_0x3905d6=Math['min'](_0x2003f4,_0x3fb9e3);return'Load\x20'+_0x3905d6['toLocaleString']()+'\x20more\x20files\x20('+_0x1bcee9['toLocaleString']()+'\x20/\x20'+_0x30efc8['toLocaleString']()+')';}export function getFileNameFromDiffFile(_0x2ea4eb){return _0x2ea4eb?.['newPath']||_0x2ea4eb?.['oldPath']||'';}export function buildCollapsedStateUpdates({files:_0x770256,collapsed:_0x346fa4,storageKeyPrefix:_0xa097cf,getStorageKey:_0x4e8fd9}){const _0x50a676=[];for(const _0x32f48e of _0x770256||[]){const _0x2a9b8a=getFileNameFromDiffFile(_0x32f48e);if(!_0x2a9b8a)continue;_0x50a676['push']({'key':_0x4e8fd9(_0xa097cf,_0x2a9b8a),'value':String(_0x346fa4),'fileName':_0x2a9b8a});}return _0x50a676;}
@@ -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 _0xa24d27,shouldAutoCollapseDiff as _0xc4544b,getNextRenderedCount,renderedCountForTarget,getLazyLoadMoreText as _0x2f46ce,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 _0x340769=await checkAccess();await initializeAdminMenu(_0x340769),setupEventListeners(),initializeDiffViewToggle(),await loadEnvironments(),elements['loading']['hidden']=!![],elements['content']['hidden']=![];}catch(_0x270d89){console['error']('Git\x20history\x20initialization\x20error:',_0x270d89),elements['loading']['hidden']=!![],elements['error']['hidden']=![],elements['errorMessage']['textContent']=_0x270d89['message']||'Unknown\x20error';}}async function checkAccess(){try{const _0xb6970d=await API['getCurrentUser'](),_0xb7a992=_0xb6970d['hasEnvironmentGit']===!![];if(!_0xb7a992){Utils['showToast']('Access\x20denied:\x20Git\x20permissions\x20required','error'),setTimeout(()=>{window['location']['href']='index.html';},0x708);throw new Error('Access\x20denied');}return _0xb6970d;}catch(_0x2d226a){_0x2d226a['message']!=='Access\x20denied'&&(window['location']['href']='login.html');throw _0x2d226a;}}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',_0x78080a=>{const _0x35889e=_0x78080a['target']['closest']('.commit-item');if(!_0x35889e)return;selectCommit(_0x35889e['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',_0x2d96ee=>{!_0x2d96ee['target']['closest']('.file-nav-container')&&closeFileNav();}),elements['maximizeBtn']?.['addEventListener']('click',toggleMaximize),document['addEventListener']('keydown',handleKeyboardNavigation);}function handleKeyboardNavigation(_0x1466c9){if(_0x1466c9['target']['matches']('input,\x20select,\x20textarea'))return;const _0x28b7e3=Array['from'](elements['commitList']?.['querySelectorAll']('.commit-item')||[]);if(_0x28b7e3['length']===0x0)return;const _0x7d8bc6=_0x28b7e3['findIndex'](_0x58291b=>_0x58291b['classList']['contains']('selected'));switch(_0x1466c9['key']){case'j':case'ArrowDown':{_0x1466c9['preventDefault']();const _0x576150=_0x7d8bc6<_0x28b7e3['length']-0x1?_0x7d8bc6+0x1:_0x7d8bc6,_0x40018d=_0x28b7e3[_0x576150]?.['dataset']['hash'];_0x40018d&&(selectCommit(_0x40018d),_0x28b7e3[_0x576150]['scrollIntoView']({'block':'nearest','behavior':'smooth'}));break;}case'k':case'ArrowUp':{_0x1466c9['preventDefault']();const _0x3fd35c=_0x7d8bc6>0x0?_0x7d8bc6-0x1:0x0,_0x1ad52b=_0x28b7e3[_0x3fd35c]?.['dataset']['hash'];_0x1ad52b&&(selectCommit(_0x1ad52b),_0x28b7e3[_0x3fd35c]['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'/':{_0x1466c9['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 _0x3baa15=Array['from'](document['querySelectorAll']('.segmented-btn'));_0x3baa15['forEach'](_0x16b920=>{_0x16b920['classList']['toggle']('active',_0x16b920['dataset']['view']===state['diffView']),_0x16b920['addEventListener']('click',()=>{if(_0x16b920['dataset']['view']===state['diffView'])return;state['diffView']=_0x16b920['dataset']['view'],localStorage['setItem']('git-history-diff-view',state['diffView']),_0x3baa15['forEach'](_0x5afe62=>_0x5afe62['classList']['toggle']('active',_0x5afe62===_0x16b920)),renderCommitDiff();});});}async function loadEnvironments(){const _0x207995=await API['getEnvironments']();state['environments']=_0x207995['environments']||[],elements['envSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20environment</option>',state['environments']['forEach'](_0x3b3bac=>{const _0x420b4f=document['createElement']('option');_0x420b4f['value']=_0x3b3bac['name'],_0x420b4f['textContent']=_0x3b3bac['name'],elements['envSelect']['appendChild'](_0x420b4f);}),new CustomSelect(elements['envSelect'],{'searchable':!![]}),new CustomSelect(elements['repoSelect'],{'searchable':!![]}),new CustomSelect(elements['branchSelect'],{'searchable':!![]});const _0x48ea6a=_0x207995['default_environment']||state['environments'][0x0]?.['name']||'';_0x48ea6a&&(elements['envSelect']['value']=_0x48ea6a,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 _0x110ce3=await API['getEnvironment'](state['selectedEnvironment']);state['repos']=_0x110ce3['repos']||[],elements['repoSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20repository</option>',state['repos']['forEach'](_0x525c0a=>{const _0x3dad72=document['createElement']('option');_0x3dad72['value']=_0x525c0a['name'],_0x3dad72['textContent']=_0x525c0a['name'],elements['repoSelect']['appendChild'](_0x3dad72);}),elements['repoSelect']['disabled']=state['repos']['length']===0x0;const _0x366fd6=state['repos'][0x0]?.['name'];_0x366fd6&&(elements['repoSelect']['value']=_0x366fd6,elements['repoSelect']['dispatchEvent'](new Event('change')));}catch(_0x2a6ba5){Utils['showError'](_0x2a6ba5['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 _0x72924=state['selectedEnvironment']+':'+state['selectedRepo'],_0x2fc065=branchCache['get'](_0x72924),_0x27673a=Date['now']();let _0x2b13a0;_0x2fc065&&_0x27673a-_0x2fc065['timestamp']<BRANCH_CACHE_TTL_MS?_0x2b13a0=_0x2fc065:(_0x2b13a0=await API['getEnvironmentRepoBranches'](state['selectedEnvironment'],state['selectedRepo']),branchCache['set'](_0x72924,{..._0x2b13a0,'timestamp':_0x27673a}));state['branches']=_0x2b13a0['branches']||[],elements['branchSelect']['innerHTML']='';const _0x1a32ee=document['createElement']('option');_0x1a32ee['value']='',_0x1a32ee['textContent']=_0x2b13a0['defaultBranch']?_0x2b13a0['defaultBranch']+'\x20(default)':_0x2b13a0['currentBranch']?_0x2b13a0['currentBranch']+'\x20(current)':'Select\x20branch',elements['branchSelect']['appendChild'](_0x1a32ee);const _0x315942=_0x2b13a0['defaultBranch']||_0x2b13a0['currentBranch'];state['branches']['forEach'](_0x3c6b14=>{if(_0x3c6b14['name']===_0x315942)return;const _0x1bc07b=document['createElement']('option');_0x1bc07b['value']=_0x3c6b14['name'];let _0x550b8a=_0x3c6b14['name'];if(_0x3c6b14['isDefault'])_0x550b8a+='\x20(default)';if(_0x3c6b14['isCurrent'])_0x550b8a+='\x20(current)';_0x1bc07b['textContent']=_0x550b8a,elements['branchSelect']['appendChild'](_0x1bc07b);}),elements['branchSelect']['disabled']=state['branches']['length']===0x0,_0x2b13a0['currentBranch']&&(state['selectedBranch']=''),elements['branchSelect']['value']=state['selectedBranch'],queueMicrotask(()=>{elements['branchSelect']['dispatchEvent'](new Event('change'));});}catch(_0x344732){console['error']('Failed\x20to\x20load\x20branches:',_0x344732),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(_0x9b6a54={}){if(!state['selectedEnvironment']||!state['selectedRepo'])return;if(state['loadingHistory'])return;state['loadingHistory']=!![],elements['commitList']['innerHTML']=renderLoadingSkeletons(0x5),elements['commitCount']['textContent']='Loading\x20history...';try{const _0x1b31be={'limit':state['pagination']['limit'],'offset':state['pagination']['offset'],'search':state['pagination']['search']};state['selectedBranch']&&(_0x1b31be['branch']=state['selectedBranch']);const _0x34181b=await API['getEnvironmentRepoHistory'](state['selectedEnvironment'],state['selectedRepo'],_0x1b31be);state['commits']=_0x34181b['commits']||[],state['pagination']['hasMore']=_0x34181b['pagination']?.['hasMore']||![],state['dataSource']=_0x34181b['source']||'local',state['activeBranch']=_0x34181b['repo']?.['branch']||state['selectedBranch']||'';_0x34181b['repo']?.['branch']?(elements['branchName']['textContent']=_0x34181b['repo']['branch'],elements['branchPill']['hidden']=![]):elements['branchPill']['hidden']=!![];updateSourceIndicator(),renderCommitList();const _0x3a5fd7=_0x9b6a54['keepSelection']&&state['selectedCommit'],_0x4f7eee=state['commits']['some'](_0x2ab93e=>_0x2ab93e['hash']===state['selectedCommit']?.['hash']);if(_0x3a5fd7&&_0x4f7eee)highlightSelectedCommit();else state['commits']['length']>0x0?selectCommit(state['commits'][0x0]['hash'],{'silent':!![]}):resetCommitDetail();}catch(_0x304d43){Utils['showError'](_0x304d43['message']||'Failed\x20to\x20load\x20commit\x20history'),elements['commitList']['innerHTML']='',elements['commitCount']['textContent']='Unable\x20to\x20load\x20history.';}finally{state['loadingHistory']=![];}}function updateSourceIndicator(){let _0x227947=document['getElementById']('data-source-indicator');!_0x227947&&(_0x227947=document['createElement']('span'),_0x227947['id']='data-source-indicator',_0x227947['className']='source-indicator',elements['branchPill']?.['parentNode']?.['insertBefore'](_0x227947,elements['branchPill']['nextSibling'])),state['dataSource']==='remote'?(_0x227947['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',_0x227947['title']='Data\x20fetched\x20from\x20remote\x20Git\x20provider\x20(repository\x20not\x20cloned\x20locally)',_0x227947['hidden']=![]):_0x227947['hidden']=!![];}async function selectCommit(_0x2d1949,_0x408b31={}){if(!_0x2d1949)return;if(state['loadingCommit'])return;const _0xf7427c=state['commits']['find'](_0x133299=>_0x133299['hash']===_0x2d1949);if(!_0xf7427c)return;state['selectedCommit']=_0xf7427c,highlightSelectedCommit();if(_0x408b31['silent']){await loadCommitDetail(_0x2d1949);return;}await loadCommitDetail(_0x2d1949);}function highlightSelectedCommit(){const _0x1dee3b=elements['commitList']['querySelectorAll']('.commit-item');_0x1dee3b['forEach'](_0x426e5f=>{_0x426e5f['classList']['toggle']('selected',_0x426e5f['dataset']['hash']===state['selectedCommit']?.['hash']);});}async function loadCommitDetail(_0x4ae7f3){state['loadingCommit']=!![],elements['placeholder']['hidden']=!![],elements['detailPanel']['hidden']=![],elements['diffContainer']['innerHTML']='<div\x20class=\x22empty-state-card\x22>Loading\x20diff...</div>';try{const _0x2e292b=await API['getEnvironmentRepoCommit'](state['selectedEnvironment'],state['selectedRepo'],_0x4ae7f3);state['commitDetail']=_0x2e292b,renderCommitDetail();}catch(_0x48cd5d){Utils['showError'](_0x48cd5d['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 _0xb42a7e=state['pagination']['search']?'No\x20commits\x20match\x20\x22'+state['pagination']['search']+'\x22.':'No\x20commits\x20found.';elements['commitCount']['textContent']=_0xb42a7e,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'](_0xb42a7e)+'</p>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20',elements['prevBtn']['disabled']=!![],elements['nextBtn']['disabled']=!![];return;}const _0x28ef31=state['pagination']['offset']+0x1,_0x5c34ba=state['pagination']['offset']+state['commits']['length'],_0x531ffc=state['pagination']['search']?_0x28ef31+'-'+_0x5c34ba+'\x20matching\x20\x22'+state['pagination']['search']+'\x22':_0x28ef31+'-'+_0x5c34ba;elements['commitCount']['textContent']=_0x531ffc,state['commits']['forEach']((_0x5a7c3f,_0x2f3514)=>{const _0x1b576a=document['createElement']('li');_0x1b576a['className']='commit-item',_0x1b576a['dataset']['hash']=_0x5a7c3f['hash'],_0x1b576a['tabIndex']=0x0,_0x1b576a['setAttribute']('role','button'),_0x1b576a['setAttribute']('aria-label','Commit:\x20'+(_0x5a7c3f['message']||'No\x20message')+'\x20by\x20'+(_0x5a7c3f['author']||'Unknown')),_0x1b576a['style']['animationDelay']=_0x2f3514*0x19+'ms';const _0x1c529b=getAuthorInitials(_0x5a7c3f['author']),_0x583c09=getAvatarColor(_0x5a7c3f['author']||'Unknown'),_0x2812ee=detectCommitType(_0x5a7c3f['message']),_0x392c82=_0x2812ee?'<span\x20class=\x22commit-type-indicator\x20'+_0x2812ee+'\x22>'+_0x2812ee+'</span>':'';_0x1b576a['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22commit-message\x22>'+Utils['escapeHtml'](truncateMessage(_0x5a7c3f['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'+_0x583c09+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22author-avatar\x22>'+_0x1c529b+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+Utils['escapeHtml'](_0x5a7c3f['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'](_0x5a7c3f['date'])+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22commit-short-hash\x22>'+_0x5a7c3f['shortHash']+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x5a7c3f['isMerge']?'<span\x20class=\x22commit-tag\x22>Merge</span>':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+_0x392c82+'\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20',_0x1b576a['addEventListener']('keydown',_0x42ef35=>{(_0x42ef35['key']==='Enter'||_0x42ef35['key']==='\x20')&&(_0x42ef35['preventDefault'](),selectCommit(_0x5a7c3f['hash']));}),elements['commitList']['appendChild'](_0x1b576a);}),elements['prevBtn']['disabled']=state['pagination']['offset']===0x0,elements['nextBtn']['disabled']=!state['pagination']['hasMore'],highlightSelectedCommit();}function getAuthorInitials(_0x5d5e04){if(!_0x5d5e04)return'?';const _0x16660a=_0x5d5e04['trim']()['split'](/\s+/);if(_0x16660a['length']===0x1)return _0x16660a[0x0]['charAt'](0x0)['toUpperCase']();return(_0x16660a[0x0]['charAt'](0x0)+_0x16660a[_0x16660a['length']-0x1]['charAt'](0x0))['toUpperCase']();}function getAvatarColor(_0x162c09){let _0x3d00b6=0x0;for(let _0xe99f67=0x0;_0xe99f67<_0x162c09['length'];_0xe99f67++){_0x3d00b6=_0x162c09['charCodeAt'](_0xe99f67)+((_0x3d00b6<<0x5)-_0x3d00b6);}const _0x169786=Math['abs'](_0x3d00b6%0x168);return'hsl('+_0x169786+',\x2065%,\x2055%)';}function truncateMessage(_0xa9b5a1,_0x534720){if(!_0xa9b5a1)return'';const _0x18235d=_0xa9b5a1['split']('\x0a')[0x0];if(_0x18235d['length']<=_0x534720)return _0x18235d;return _0x18235d['substring'](0x0,_0x534720-0x3)+'...';}function asFiniteNumber(_0x3089e1){return Number['isFinite'](_0x3089e1)?_0x3089e1:null;}function formatFileCountLabel(_0x1f07b3,_0x180970={}){const _0x4a8515=Boolean(_0x180970['lowerBound']),_0x4b4efd=_0x4a8515?'at\x20least\x20':'';return''+_0x4b4efd+_0x1f07b3+'\x20file'+(_0x1f07b3===0x1?'':'s');}function formatBytes(_0x557e0c){if(!Number['isFinite'](_0x557e0c)||_0x557e0c<=0x0)return'';const _0xee5d11=_0x557e0c/(0x400*0x400);if(_0xee5d11>=0x1)return _0xee5d11['toFixed'](0x1)+'MB';const _0x2037f9=_0x557e0c/0x400;return Math['max'](0x1,Math['round'](_0x2037f9))+'KB';}function getEffectiveDiffStats(_0x152230,_0x1daac4){const _0x29f781=asFiniteNumber(_0x1daac4?.['changedFiles']),_0x4c0094=asFiniteNumber(_0x1daac4?.['changedFilesLowerBound']),_0x25ae21=asFiniteNumber(_0x1daac4?.['additions']),_0x805097=asFiniteNumber(_0x1daac4?.['deletions']);return{'files':_0x29f781??_0x4c0094??_0x152230['files'],'filesIsLowerBound':_0x29f781===null&&_0x4c0094!==null,'additions':_0x25ae21??_0x152230['additions'],'deletions':_0x805097??_0x152230['deletions']};}function getDiffNoticeText(_0x4d6528){if(!_0x4d6528?.['truncated'])return'';if(_0x4d6528['omitted']){const _0x3be790=asFiniteNumber(_0x4d6528['changedFiles']),_0x3c2812=asFiniteNumber(_0x4d6528['changedFilesLowerBound']),_0x325e1e=asFiniteNumber(_0x4d6528['maxFiles']);if(_0x3be790!==null&&_0x325e1e!==null)return'Diff\x20omitted\x20because\x20this\x20commit\x20changes\x20'+_0x3be790['toLocaleString']()+'\x20files\x20(limit\x20'+_0x325e1e['toLocaleString']()+').';if(_0x3c2812!==null&&_0x325e1e!==null)return'Diff\x20omitted\x20because\x20this\x20commit\x20changes\x20at\x20least\x20'+_0x3c2812['toLocaleString']()+'\x20files\x20(limit\x20'+_0x325e1e['toLocaleString']()+').';if(_0x3c2812!==null)return'Diff\x20omitted\x20because\x20this\x20commit\x20changes\x20at\x20least\x20'+_0x3c2812['toLocaleString']()+'\x20files.';return'Diff\x20omitted\x20for\x20this\x20large\x20commit\x20to\x20keep\x20Git\x20History\x20responsive.';}const _0x3948f=asFiniteNumber(_0x4d6528['maxBytes']);if(_0x3948f!==null)return'Showing\x20a\x20truncated\x20diff\x20preview\x20('+formatBytes(_0x3948f)+'\x20max)\x20to\x20keep\x20Git\x20History\x20responsive.';return'Showing\x20a\x20truncated\x20diff\x20preview\x20to\x20keep\x20Git\x20History\x20responsive.';}function shouldUseLazyRendering(_0x16644b,_0x3078fc=null){const _0x14111e=asFiniteNumber(_0x3078fc?.['maxFiles']);return _0xa24d27(_0x16644b,{'minFiles':LAZY_RENDER_MIN_FILES,'maxFiles':LAZY_RENDER_MAX_FILES,'serverMaxFiles':_0x14111e});}function shouldAutoCollapseDiff(_0x4e4748){return _0xc4544b(_0x4e4748,{'threshold':AUTO_COLLAPSE_MIN_FILES});}function getLazyLoadMoreText(_0x1cd4a2){if(!_0x1cd4a2)return'Load\x20more\x20files';return _0x2f46ce({'filesLength':_0x1cd4a2['files']['length'],'renderedCount':_0x1cd4a2['renderedCount'],'chunkSize':_0x1cd4a2['chunkSize']});}function ensureLazyDiffFileRendered(_0x40122c){if(!state['diffRender']?.['lazy'])return;const _0x3e45fc=renderedCountForTarget({'renderedCount':state['diffRender']['renderedCount'],'targetIndex':_0x40122c,'totalFiles':state['diffRender']['files']['length'],'chunkSize':state['diffRender']['chunkSize']});while(state['diffRender']['renderedCount']<_0x3e45fc){renderNextDiffChunk();}}function updateLazyLoadMoreControl(){const _0x47e0b8=state['diffRender'];if(!_0x47e0b8?.['lazy']||!elements['diffContainer'])return;const _0x5add17=elements['diffContainer']['querySelector']('.diff-load-more-control');if(!_0x5add17)return;if(_0x47e0b8['renderedCount']>=_0x47e0b8['files']['length']){_0x5add17['innerHTML']='<span\x20class=\x22diff-load-complete\x22>All\x20'+formatFileCountLabel(_0x47e0b8['files']['length'])+'\x20loaded</span>';return;}_0x5add17['innerHTML']='<button\x20class=\x22btn-ghost\x20btn-small\x20diff-load-more-btn\x22\x20type=\x22button\x22>'+getLazyLoadMoreText(_0x47e0b8)+'</button>';const _0x1e57d5=_0x5add17['querySelector']('.diff-load-more-btn');_0x1e57d5?.['addEventListener']('click',()=>{renderNextDiffChunk();});}function renderNextDiffChunk(){const _0x3bb125=state['diffRender'];if(!_0x3bb125?.['lazy']||!elements['diffContainer'])return;if(_0x3bb125['renderedCount']>=_0x3bb125['files']['length'])return;const _0x1952e4=elements['diffContainer']['querySelector']('.diff-files-host');if(!_0x1952e4)return;const _0x3c160b=_0x3bb125['renderedCount'],_0x4829fc=getNextRenderedCount({'renderedCount':_0x3c160b,'totalFiles':_0x3bb125['files']['length'],'chunkSize':_0x3bb125['chunkSize']}),_0x38c334=_0x3bb125['files']['slice'](_0x3c160b,_0x4829fc),_0x1010a1=state['diffView']==='split'?renderSplitDiff(_0x38c334,_0x3bb125['storageKeyPrefix'],_0x3c160b,{'defaultCollapsed':_0x3bb125['defaultCollapsed']}):renderUnifiedDiff(_0x38c334,_0x3bb125['storageKeyPrefix'],_0x3c160b,{'defaultCollapsed':_0x3bb125['defaultCollapsed']});_0x1952e4['insertAdjacentHTML']('beforeend',_0x1010a1),_0x3bb125['renderedCount']=_0x4829fc,bindDiffToggleHandlers(_0x3bb125['storageKeyPrefix']),updateLazyLoadMoreControl();}function renderCommitDetail(){if(!state['commitDetail']||!state['commitDetail']['commit']){resetCommitDetail();return;}const _0x3a5131=state['commitDetail']['commit'];elements['commitMessage']['textContent']=_0x3a5131['message']||'No\x20message',elements['commitAuthor']['textContent']=''+(_0x3a5131['author']||'Unknown')+(_0x3a5131['email']?'\x20('+_0x3a5131['email']+')':''),elements['commitDate']['textContent']=formatDate(_0x3a5131['date']),elements['commitHash']['textContent']=_0x3a5131['hash'];const _0x1d2167=isSelectedCommitRemoteSource();elements['revertBtn']&&(elements['revertBtn']['hidden']=![],elements['revertBtn']['textContent']=_0x1d2167?'Revert\x20via\x20task':'Revert\x20commit',elements['revertBtn']['title']=_0x1d2167?'Create\x20a\x20task\x20that\x20applies\x20this\x20revert\x20and\x20stages\x20the\x20changes\x20for\x20approval':'');if(elements['viewOnProviderBtn']){const _0x15ce8b=getProviderCommitUrl(_0x3a5131['hash']);_0x15ce8b&&_0x1d2167?(elements['viewOnProviderBtn']['hidden']=![],elements['viewOnProviderBtn']['href']=_0x15ce8b,elements['viewOnProviderBtn']['textContent']='View\x20on\x20'+getProviderDisplayName()):elements['viewOnProviderBtn']['hidden']=!![];}const _0x59675e=_0x3a5131['parents']||[];_0x59675e['length']>0x1?(elements['mergeControls']['hidden']=![],elements['mainlineSelect']['innerHTML']='',_0x59675e['forEach']((_0x2e8556,_0x1443dd)=>{const _0x2b292e=document['createElement']('option');_0x2b292e['value']=String(_0x1443dd+0x1),_0x2b292e['textContent']='Parent\x20'+(_0x1443dd+0x1)+'\x20-\x20'+_0x2e8556['slice'](0x0,0x7),elements['mainlineSelect']['appendChild'](_0x2b292e);})):elements['mergeControls']['hidden']=!![];const _0x477cb2=state['commitDetail']['diffMeta']||null,_0x123310=_0x477cb2?.['omitted']?[]:parsePatchContent(state['commitDetail']['diff']||'');state['commitDetail']['files']=_0x123310;const _0x4f78b5=calculateDiffStats(_0x123310),_0x40640b=getEffectiveDiffStats(_0x4f78b5,_0x477cb2);elements['diffStats']['innerHTML']='\x0a\x20\x20\x20\x20<span\x20class=\x22diff-stat-files\x22>'+formatFileCountLabel(_0x40640b['files'],{'lowerBound':_0x40640b['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>+'+_0x40640b['additions']['toLocaleString']()+'</span>\x0a\x20\x20\x20\x20<span\x20class=\x22diff-stat-del\x22>-'+_0x40640b['deletions']['toLocaleString']()+'</span>\x0a\x20\x20';elements['fileNavCount']&&(elements['fileNavCount']['textContent']=formatFileCountLabel(_0x40640b['files'],{'lowerBound':_0x40640b['filesIsLowerBound']}));if(elements['fileNavToggle']){const _0x3dbe5b=_0x123310['length']>0x0;elements['fileNavToggle']['disabled']=!_0x3dbe5b,elements['fileNavToggle']['setAttribute']('aria-disabled',String(!_0x3dbe5b)),elements['fileNavToggle']['title']=_0x3dbe5b?'Browse\x20changed\x20files':_0x477cb2?.['omitted']?'Diff\x20omitted\x20for\x20this\x20large\x20commit':'No\x20file\x20diff\x20to\x20browse',!_0x3dbe5b&&closeFileNav();}renderCommitDiff();}function renderCommitDiff(){if(!state['commitDetail']||!elements['diffContainer'])return;const _0x5c0205=state['commitDetail']['diffMeta']||null,_0x3aaf2c=getDiffNoticeText(_0x5c0205);state['diffRender']=null;if(_0x5c0205?.['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'](_0x3aaf2c||'Diff\x20omitted\x20for\x20this\x20large\x20commit.')+'</p>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20';return;}const _0x365df3=state['commitDetail']['files']||parsePatchContent(state['commitDetail']['diff']||'');if(_0x365df3['length']===0x0){if(_0x5c0205?.['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'](_0x3aaf2c||'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 _0x464fed='git-history-'+state['commitDetail']['commit']['hash'],_0x5903cd=_0x5c0205?.['truncated']?'<div\x20class=\x22diff-truncated-banner\x22>'+Utils['escapeHtml'](_0x3aaf2c)+'</div>':'',_0x1c3ece=shouldUseLazyRendering(_0x365df3['length'],_0x5c0205),_0x17ceff=shouldAutoCollapseDiff(_0x365df3['length']);if(_0x1c3ece){state['diffRender']={'lazy':!![],'files':_0x365df3,'storageKeyPrefix':_0x464fed,'renderedCount':0x0,'chunkSize':LAZY_RENDER_CHUNK_SIZE,'defaultCollapsed':_0x17ceff};const _0x38701c=_0x17ceff?'Large\x20commit\x20detected\x20('+_0x365df3['length']['toLocaleString']()+'\x20files).\x20Files\x20are\x20collapsed\x20by\x20default\x20and\x20rendered\x20in\x20chunks.':'Large\x20commit\x20detected\x20('+_0x365df3['length']['toLocaleString']()+'\x20files).\x20Rendering\x20files\x20in\x20chunks\x20for\x20better\x20responsiveness.';elements['diffContainer']['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20'+_0x5903cd+'\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22diff-large-commit-banner\x22>'+Utils['escapeHtml'](_0x38701c)+'</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 _0x4881bc=state['diffView']==='split'?renderSplitDiff(_0x365df3,_0x464fed,0x0,{'defaultCollapsed':_0x17ceff}):renderUnifiedDiff(_0x365df3,_0x464fed,0x0,{'defaultCollapsed':_0x17ceff});elements['diffContainer']['innerHTML']=''+_0x5903cd+_0x4881bc,bindDiffToggleHandlers(_0x464fed);}function resetCommitDetail(){state['selectedCommit']=null,state['commitDetail']=null,state['diffRender']=null,closeFileNav(),elements['placeholder']['hidden']=![],elements['detailPanel']['hidden']=!![];}function getSelectedRepoObject(){return state['repos']['find'](_0x1e6c96=>_0x1e6c96['name']===state['selectedRepo'])||null;}function getProviderDisplayName(){const _0x50d37e=getSelectedRepoObject(),_0x3e4d96=_0x50d37e?.['url']?.['toLowerCase']()||'';if(_0x3e4d96['includes']('github.com')||_0x3e4d96['includes']('github.'))return'GitHub';else{if(_0x3e4d96['includes']('gitlab.com')||_0x3e4d96['includes']('gitlab.'))return'GitLab';else{if(_0x3e4d96['includes']('bitbucket.org')||_0x3e4d96['includes']('bitbucket.'))return'Bitbucket';else{if(_0x3e4d96['includes']('dev.azure.com')||_0x3e4d96['includes']('visualstudio.com'))return'Azure\x20DevOps';}}}return'Provider';}function getProviderCommitUrl(_0x563d47){const _0x20b4cd=getSelectedRepoObject();if(!_0x20b4cd?.['url'])return null;let _0x421309=_0x20b4cd['url']['replace'](/\.git$/,'');_0x421309=_0x421309['replace'](/^(https?:\/\/)[^@]+@/,'$1');const _0x42d2c3=_0x421309['toLowerCase']();if(_0x42d2c3['includes']('gitlab.com')||_0x42d2c3['includes']('gitlab.'))return _0x421309+'/-/commit/'+_0x563d47;else{if(_0x42d2c3['includes']('bitbucket.org')||_0x42d2c3['includes']('bitbucket.'))return _0x421309+'/commits/'+_0x563d47;}return _0x421309+'/commit/'+_0x563d47;}function isSelectedCommitRemoteSource(){return state['commitDetail']?.['source']==='remote'||state['dataSource']==='remote';}function getSelectedBranchForRevertTask(){const _0x57b470=(state['selectedBranch']||'')['trim']();if(_0x57b470)return _0x57b470;const _0x87b5d2=(state['activeBranch']||'')['trim']();if(_0x87b5d2)return _0x87b5d2;const _0x3d31e3=(elements['branchName']?.['textContent']||'')['trim']();return _0x3d31e3||null;}function buildRemoteRevertTaskInstructions(_0x15ca9e,_0x223b95={}){const _0x187fe4=getSelectedBranchForRevertTask(),_0x47e57f=_0x223b95['mainline']||null,_0x39468c=Array['isArray'](_0x15ca9e['parents'])&&_0x15ca9e['parents']['length']>0x1,_0x1c74e1=_0x39468c?'git\x20revert\x20--no-commit\x20-m\x20'+(_0x47e57f||'1')+'\x20'+_0x15ca9e['hash']:'git\x20revert\x20--no-commit\x20'+_0x15ca9e['hash'],_0x1b1d50=['Please\x20revert\x20commit\x20'+_0x15ca9e['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).',_0x187fe4?'2.\x20Ensure\x20branch\x20\x22'+_0x187fe4+'\x22\x20is\x20checked\x20out\x20(fetch\x20first\x20if\x20needed).':'2.\x20Use\x20the\x20repository\x20branch\x20configured\x20for\x20this\x20environment.','3.\x20Run\x20`'+_0x1c74e1+'`.','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 _0x1b1d50['join']('\x0a');}function navigateToTask(_0x5034f6){const _0xa5053e='task.html?id='+encodeURIComponent(_0x5034f6),_0xdecc=localStorage['getItem'](OPEN_NEW_TAB_STORAGE_KEY)==='true';if(_0xdecc){const _0x4823c1=window['open'](_0xa5053e,'_blank');!_0x4823c1&&(window['location']['href']=_0xa5053e);return;}window['location']['href']=_0xa5053e;}async function createRemoteRevertTask(_0x56f1db,_0x1fb47c={}){const _0x5bd2dd=_0x56f1db['shortHash']||_0x56f1db['hash']['slice'](0x0,0x7),_0x16f59e=buildRemoteRevertTaskInstructions(_0x56f1db,_0x1fb47c),_0x53a412={'name':'Revert\x20'+_0x5bd2dd+'\x20in\x20'+state['selectedRepo'],'environment':state['selectedEnvironment'],'task_type':'manual','parameters':{'instructions':_0x16f59e}},_0x1257c=elements['revertBtn']?.['textContent']||'Revert\x20via\x20task';elements['revertBtn']&&(elements['revertBtn']['disabled']=!![],elements['revertBtn']['textContent']='Creating\x20task...');try{const _0x5acf8d=await API['createTask'](_0x53a412),_0xc7557f=_0x5acf8d?.['taskId'];if(!_0xc7557f)throw new Error('Task\x20created\x20but\x20no\x20task\x20ID\x20was\x20returned');Utils['showSuccess']('Revert\x20task\x20created'),navigateToTask(_0xc7557f);}catch(_0x54cc1f){if(_0x54cc1f?.['error']==='git_connections_required'&&Array['isArray'](_0x54cc1f['providers'])&&_0x54cc1f['providers']['length']>0x0){const _0x2c4321=_0x54cc1f['providers']['map'](_0x449c9e=>_0x449c9e['displayName']||_0x449c9e['provider']||_0x449c9e['name']||'provider')['join'](',\x20');throw new Error('Git\x20connection\x20required:\x20'+_0x2c4321+'.\x20Connect\x20account(s)\x20in\x20Settings\x20and\x20retry.');}throw _0x54cc1f;}finally{elements['revertBtn']&&(elements['revertBtn']['disabled']=![],elements['revertBtn']['textContent']=_0x1257c);}}function handleSearchInput(_0x2271c6){const _0x47f3a1=_0x2271c6['target']['value']['trim']();elements['clearSearchBtn']['hidden']=!_0x47f3a1,searchTimer&&clearTimeout(searchTimer),searchTimer=setTimeout(()=>{state['pagination']['search']=_0x47f3a1,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(_0x4f5b8e){const _0x276205=state['pagination']['offset']+_0x4f5b8e*state['pagination']['limit'];if(_0x276205<0x0)return;state['pagination']['offset']=_0x276205,loadHistory({'keepSelection':![]});}async function handleCopyHash(){if(!state['commitDetail']?.['commit']?.['hash'])return;const _0xd1d1c0=await Utils['copyToClipboard'](state['commitDetail']['commit']['hash']);if(_0xd1d1c0)Utils['showSuccess']('Commit\x20hash\x20copied');}async function handleRevertCommit(){if(!state['commitDetail']?.['commit']?.['hash'])return;const _0x591ccc=state['commitDetail']['commit'],_0x45f2ff=_0x591ccc['shortHash']||_0x591ccc['hash']['slice'](0x0,0x7),_0x4a38da={};_0x591ccc['parents']&&_0x591ccc['parents']['length']>0x1&&(_0x4a38da['mainline']=elements['mainlineSelect']['value']||'1');if(isSelectedCommitRemoteSource()){const _0x5bfab0=getSelectedBranchForRevertTask(),_0x977bf5=_0x4a38da['mainline']?'\x20using\x20mainline\x20parent\x20'+_0x4a38da['mainline']:'',_0x217a15=_0x5bfab0?'\x20on\x20branch\x20\x22'+_0x5bfab0+'\x22':'',_0x2a6a45='Create\x20a\x20revert\x20task\x20for\x20commit\x20'+_0x45f2ff+_0x217a15+_0x977bf5+'?\x20The\x20task\x20will\x20apply\x20the\x20revert\x20without\x20committing\x20so\x20it\x20can\x20be\x20approved\x20and\x20pushed\x20later.',_0x537c68=await ConfirmDialog['show']({'title':'Create\x20Revert\x20Task','message':_0x2a6a45,'confirmText':'Create\x20Task','cancelText':'Cancel','danger':!![]});if(!_0x537c68)return;try{await createRemoteRevertTask(_0x591ccc,_0x4a38da);}catch(_0x55c636){Utils['showError'](_0x55c636['message']||'Failed\x20to\x20create\x20revert\x20task');}return;}const _0x15d209='Revert\x20commit\x20'+_0x45f2ff+'?\x20This\x20will\x20create\x20a\x20new\x20commit\x20that\x20undoes\x20these\x20changes.',_0x59db36=await ConfirmDialog['show']({'title':'Revert\x20Commit','message':_0x15d209,'confirmText':'Revert','cancelText':'Cancel','danger':!![]});if(!_0x59db36)return;try{await API['revertEnvironmentRepoCommit'](state['selectedEnvironment'],state['selectedRepo'],_0x591ccc['hash'],_0x4a38da),Utils['showSuccess']('Commit\x20reverted'),state['pagination']['offset']=0x0,await loadHistory({'keepSelection':![]});}catch(_0x1454cc){Utils['showError'](_0x1454cc['message']||'Failed\x20to\x20revert\x20commit');}}function parsePatchContent(_0x2eae37){const _0x42ab94=[],_0x5ac834=_0x2eae37['split']('\x0a');let _0x14b421=null,_0x457524=null;for(const _0x458be3 of _0x5ac834){if(_0x458be3['startsWith']('diff\x20--git')){_0x14b421&&_0x457524&&_0x14b421['hunks']['push'](_0x457524);_0x14b421&&_0x42ab94['push'](_0x14b421);const _0x460175=_0x458be3['match'](/diff --git a\/(.+?) b\/(.+)/);_0x14b421={'oldPath':_0x460175?_0x460175[0x1]:'','newPath':_0x460175?_0x460175[0x2]:'','hunks':[],'isDeleted':![]},_0x457524=null;}else{if(_0x458be3['startsWith']('deleted\x20file\x20mode')&&_0x14b421)_0x14b421['isDeleted']=!![];else{if(_0x458be3['startsWith']('@@'))_0x457524&&_0x14b421&&_0x14b421['hunks']['push'](_0x457524),_0x457524={'header':_0x458be3,'lines':[]};else _0x457524&&_0x457524['lines']['push'](_0x458be3);}}}return _0x14b421&&_0x457524&&_0x14b421['hunks']['push'](_0x457524),_0x14b421&&_0x42ab94['push'](_0x14b421),_0x42ab94;}function parseHunkHeader(_0x81916b){const _0x18fd55=_0x81916b['match'](/@@ -(\d+),?\d* \+(\d+),?\d* @@/);if(_0x18fd55)return{'oldStart':parseInt(_0x18fd55[0x1],0xa),'newStart':parseInt(_0x18fd55[0x2],0xa)};return{'oldStart':0x1,'newStart':0x1};}function highlightDiffLine(_0x35b1dd,_0x4d6a9e){const _0x456629=window['hljs']||(typeof hljs!=='undefined'?hljs:null);if(_0x456629&&_0x4d6a9e)try{const _0x1ab508=_0x456629['getLanguage'](_0x4d6a9e)?_0x4d6a9e:null;if(_0x1ab508)return _0x456629['highlight'](_0x35b1dd,{'language':_0x1ab508})['value'];}catch(_0x490a40){console['error']('Diff\x20syntax\x20highlighting\x20error:',_0x490a40);}return Utils['escapeHtml'](_0x35b1dd);}function computeWordDiff(_0x193e38,_0x25130d){const _0xdbff34=_0x58eb0a=>{const _0x3ec5e7=[];let _0x5aba78='',_0x4b6ea8=![];for(let _0x18f664=0x0;_0x18f664<_0x58eb0a['length'];_0x18f664++){const _0x438768=_0x58eb0a[_0x18f664],_0x44c49f=/\s/['test'](_0x438768);if(_0x5aba78==='')_0x5aba78=_0x438768,_0x4b6ea8=_0x44c49f;else _0x44c49f===_0x4b6ea8?_0x5aba78+=_0x438768:(_0x3ec5e7['push'](_0x5aba78),_0x5aba78=_0x438768,_0x4b6ea8=_0x44c49f);}return _0x5aba78&&_0x3ec5e7['push'](_0x5aba78),_0x3ec5e7;},_0x409e4c=_0xdbff34(_0x193e38),_0x1c0511=_0xdbff34(_0x25130d),_0x1d76d1=_0x409e4c['length'],_0x24b90c=_0x1c0511['length'],_0x3285c2=Array(_0x1d76d1+0x1)['fill'](null)['map'](()=>Array(_0x24b90c+0x1)['fill'](0x0));for(let _0xa2703b=0x1;_0xa2703b<=_0x1d76d1;_0xa2703b++){for(let _0x50f5a5=0x1;_0x50f5a5<=_0x24b90c;_0x50f5a5++){_0x409e4c[_0xa2703b-0x1]===_0x1c0511[_0x50f5a5-0x1]?_0x3285c2[_0xa2703b][_0x50f5a5]=_0x3285c2[_0xa2703b-0x1][_0x50f5a5-0x1]+0x1:_0x3285c2[_0xa2703b][_0x50f5a5]=Math['max'](_0x3285c2[_0xa2703b-0x1][_0x50f5a5],_0x3285c2[_0xa2703b][_0x50f5a5-0x1]);}}const _0x39cb07={'old':[],'new':[]};let _0x4ccfb9=_0x1d76d1,_0x542011=_0x24b90c;const _0xdc8471=[],_0x3a35ca=[];while(_0x4ccfb9>0x0||_0x542011>0x0){if(_0x4ccfb9>0x0&&_0x542011>0x0&&_0x409e4c[_0x4ccfb9-0x1]===_0x1c0511[_0x542011-0x1])_0xdc8471['unshift']({'type':'equal','text':_0x409e4c[_0x4ccfb9-0x1]}),_0x3a35ca['unshift']({'type':'equal','text':_0x1c0511[_0x542011-0x1]}),_0x4ccfb9--,_0x542011--;else{if(_0x542011>0x0&&(_0x4ccfb9===0x0||_0x3285c2[_0x4ccfb9][_0x542011-0x1]>=_0x3285c2[_0x4ccfb9-0x1][_0x542011]))_0x3a35ca['unshift']({'type':'insert','text':_0x1c0511[_0x542011-0x1]}),_0x542011--;else _0x4ccfb9>0x0&&(_0xdc8471['unshift']({'type':'delete','text':_0x409e4c[_0x4ccfb9-0x1]}),_0x4ccfb9--);}}return _0x39cb07['old']=_0xdc8471,_0x39cb07['new']=_0x3a35ca,_0x39cb07;}function renderDiffLineWithWordHighlight(_0x386dc3,_0x4a23e4,_0x4395f4,_0x1a4cc9){if(!_0x4a23e4||_0x4a23e4['length']===0x0)return highlightDiffLine(_0x386dc3,_0x1a4cc9);let _0x207f45='';const _0x3ef1fe=_0x4395f4==='add'?'diff-word-add':'diff-word-remove',_0x3d4a48=_0x4395f4==='add'?'insert':'delete';for(const _0x1ce22f of _0x4a23e4){const _0x52724d=Utils['escapeHtml'](_0x1ce22f['text']);_0x1ce22f['type']===_0x3d4a48?_0x207f45+='<span\x20class=\x22'+_0x3ef1fe+'\x22>'+_0x52724d+'</span>':_0x207f45+=_0x52724d;}return _0x207f45;}function getFileLanguage(_0x39074d){const _0xfc36a4=_0x39074d['split']('.')['pop']()['toLowerCase'](),_0x146b18={'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 _0x146b18[_0xfc36a4]||null;}function calculateDiffStats(_0x21d18c){let _0x118097=0x0,_0x1f3874=0x0,_0x1d37e1=0x0;return _0x21d18c['forEach'](_0x2ddf69=>{let _0x493261=0x0,_0x199c58=0x0;_0x2ddf69['hunks']['forEach'](_0x45963c=>{_0x45963c['lines']['forEach'](_0x1b2002=>{if(_0x1b2002['startsWith']('+'))_0x493261+=0x1;else{if(_0x1b2002['startsWith']('-'))_0x199c58+=0x1;}});}),(_0x493261+_0x199c58>0x0||_0x2ddf69['isDeleted'])&&(_0x1d37e1+=0x1),_0x118097+=_0x493261,_0x1f3874+=_0x199c58;}),{'additions':_0x118097,'deletions':_0x1f3874,'files':_0x1d37e1};}function renderUnifiedDiff(_0x50ce94,_0x116af3,_0x523cf7=0x0,_0x3fb1fb={}){return _0x50ce94['map']((_0x479e39,_0x182f50)=>{const _0x4b17c1=_0x523cf7+_0x182f50,_0x10d097=_0x479e39['newPath']||_0x479e39['oldPath']||'unknown',_0x516c78='diff-'+_0x116af3+'-'+_0x4b17c1,_0x259eed=getFileLanguage(_0x10d097),{additions:_0x1b37da,deletions:_0x482496}=calculateDiffStats([_0x479e39]),_0xb94b2=getCollapsedState(_0x116af3,_0x10d097,_0x3fb1fb['defaultCollapsed']),_0x404674=getFileStatus(_0x479e39,_0x1b37da,_0x482496),_0x209bb0=_0x404674==='added'?'A':_0x404674==='deleted'?'D':'M',_0x3f349f=_0x479e39['hunks']['map'](_0x3845b6=>{const {oldStart:_0x3abee0,newStart:_0x1eb2e7}=parseHunkHeader(_0x3845b6['header']);let _0x201198=_0x3abee0,_0x40b28b=_0x1eb2e7;const _0x1b64f8=_0x3845b6['lines']['map'](_0x51cfef=>({'line':_0x51cfef,'type':_0x51cfef['startsWith']('+')?'add':_0x51cfef['startsWith']('-')?'remove':_0x51cfef['startsWith']('\x5c')?'meta':'context'}));let _0x1abb2e=0x0;while(_0x1abb2e<_0x1b64f8['length']){if(_0x1b64f8[_0x1abb2e]['type']==='remove'){let _0x29f88f=_0x1abb2e,_0x47161e=_0x1abb2e;while(_0x47161e<_0x1b64f8['length']&&_0x1b64f8[_0x47161e]['type']==='remove')_0x47161e++;let _0x4ac630=_0x47161e,_0xa9991d=_0x4ac630;while(_0xa9991d<_0x1b64f8['length']&&_0x1b64f8[_0xa9991d]['type']==='add')_0xa9991d++;const _0x5e032b=_0x47161e-_0x29f88f,_0x2ed70a=_0xa9991d-_0x4ac630,_0x5015bc=Math['min'](_0x5e032b,_0x2ed70a);for(let _0x3f837b=0x0;_0x3f837b<_0x5015bc;_0x3f837b++){const _0x27f9f9=_0x1b64f8[_0x29f88f+_0x3f837b]['line']['substring'](0x1),_0x2f10e4=_0x1b64f8[_0x4ac630+_0x3f837b]['line']['substring'](0x1),_0x4a3d67=computeWordDiff(_0x27f9f9,_0x2f10e4);_0x1b64f8[_0x29f88f+_0x3f837b]['wordDiff']=_0x4a3d67['old'],_0x1b64f8[_0x4ac630+_0x3f837b]['wordDiff']=_0x4a3d67['new'];}_0x1abb2e=_0xa9991d;}else _0x1abb2e++;}const _0x5788f2=_0x1b64f8['map'](_0x102eab=>{const _0x50ec41=_0x102eab['line'];if(_0x50ec41['startsWith']('+')){const _0x36eca7=_0x50ec41['substring'](0x1),_0x4d5300=_0x102eab['wordDiff']?renderDiffLineWithWordHighlight(_0x36eca7,_0x102eab['wordDiff'],'add',_0x259eed):highlightDiffLine(_0x36eca7,_0x259eed),_0x25dafb='<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>'+_0x40b28b+'</span><span\x20class=\x22diff-line-content\x22><span\x20class=\x22diff-prefix\x22>+</span>'+_0x4d5300+'</span></div>';return _0x40b28b+=0x1,_0x25dafb;}if(_0x50ec41['startsWith']('-')){const _0x45fd0e=_0x50ec41['substring'](0x1),_0x1bc6b9=_0x102eab['wordDiff']?renderDiffLineWithWordHighlight(_0x45fd0e,_0x102eab['wordDiff'],'remove',_0x259eed):highlightDiffLine(_0x45fd0e,_0x259eed),_0x3fb564='<div\x20class=\x22diff-line\x20diff-remove\x22><span\x20class=\x22diff-line-num\x20diff-line-num-old\x22>'+_0x201198+'</span><span\x20class=\x22diff-line-num\x20diff-line-num-new\x22></span><span\x20class=\x22diff-line-content\x22><span\x20class=\x22diff-prefix\x22>-</span>'+_0x1bc6b9+'</span></div>';return _0x201198+=0x1,_0x3fb564;}if(_0x50ec41['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'](_0x50ec41)+'</span></div>';const _0x5143ce=_0x50ec41['startsWith']('\x20')?_0x50ec41['substring'](0x1):_0x50ec41,_0x226dae=highlightDiffLine(_0x5143ce,_0x259eed),_0x308214='<div\x20class=\x22diff-line\x20diff-context\x22><span\x20class=\x22diff-line-num\x20diff-line-num-old\x22>'+_0x201198+'</span><span\x20class=\x22diff-line-num\x20diff-line-num-new\x22>'+_0x40b28b+'</span><span\x20class=\x22diff-line-content\x22>\x20'+_0x226dae+'</span></div>';return _0x201198+=0x1,_0x40b28b+=0x1,_0x308214;})['join']('');return'<div\x20class=\x22diff-hunk\x22><div\x20class=\x22diff-hunk-header\x22>'+Utils['escapeHtml'](_0x3845b6['header'])+'</div>'+_0x5788f2+'</div>';})['join'](''),_0x33a180=_0x3f349f||'<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-'+_0x516c78+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-header\x22\x20data-diff-id=\x22'+_0x516c78+'\x22\x20data-file-name=\x22'+Utils['escapeHtml'](_0x10d097)+'\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'+_0x404674+'\x22>'+_0x209bb0+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-diff-name\x22>'+Utils['escapeHtml'](_0x10d097)+'</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>+'+_0x1b37da+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22diff-del\x22>-'+_0x482496+'</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'+_0x516c78+'\x22\x20data-collapsed=\x22'+_0xb94b2+'\x22\x20type=\x22button\x22\x20aria-label=\x22'+(_0xb94b2?'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'+(_0xb94b2?'collapsed':'')+'\x22\x20id=\x22'+_0x516c78+'\x22>'+_0x33a180+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20';})['join']('');}function renderSplitDiff(_0x1f5c6a,_0xf12bfc,_0x19fc0b=0x0,_0x94222f={}){return _0x1f5c6a['map']((_0x26eca7,_0x2801aa)=>{const _0x2d31e9=_0x19fc0b+_0x2801aa,_0x35e67e=_0x26eca7['newPath']||_0x26eca7['oldPath']||'unknown',_0x230d7e='diff-'+_0xf12bfc+'-'+_0x2d31e9,_0x5a2544=getFileLanguage(_0x35e67e),{additions:_0x9f04bb,deletions:_0x4c4784}=calculateDiffStats([_0x26eca7]),_0x422196=getCollapsedState(_0xf12bfc,_0x35e67e,_0x94222f['defaultCollapsed']),_0x54f4b1=getFileStatus(_0x26eca7,_0x9f04bb,_0x4c4784),_0x30bafa=_0x54f4b1==='added'?'A':_0x54f4b1==='deleted'?'D':'M',_0x2e3fbf=_0x26eca7['hunks']['map'](_0x4b3cc8=>{const {oldStart:_0x367341,newStart:_0x3ba76f}=parseHunkHeader(_0x4b3cc8['header']);let _0x36a4fd=_0x367341,_0x2e6539=_0x3ba76f;const _0x1f8678=[],_0x542667=_0x4b3cc8['lines'];let _0x1fb74e=0x0;while(_0x1fb74e<_0x542667['length']){const _0x298148=_0x542667[_0x1fb74e];if(_0x298148['startsWith']('\x20')){const _0x1044a1=_0x298148['substring'](0x1);_0x1f8678['push'](renderSplitRow({'type':'context','lineNum':_0x36a4fd,'content':_0x1044a1},{'type':'context','lineNum':_0x2e6539,'content':_0x1044a1},_0x5a2544)),_0x36a4fd+=0x1,_0x2e6539+=0x1,_0x1fb74e+=0x1;continue;}if(_0x298148['startsWith']('-')){const _0x543e5b=[];while(_0x1fb74e<_0x542667['length']&&_0x542667[_0x1fb74e]['startsWith']('-')){_0x543e5b['push'](_0x542667[_0x1fb74e]['substring'](0x1)),_0x1fb74e+=0x1;}const _0x245a57=[];let _0x99ec8c=_0x1fb74e;while(_0x99ec8c<_0x542667['length']&&_0x542667[_0x99ec8c]['startsWith']('+')){_0x245a57['push'](_0x542667[_0x99ec8c]['substring'](0x1)),_0x99ec8c+=0x1;}const _0x45d9dd=Math['max'](_0x543e5b['length'],_0x245a57['length']);for(let _0x5e7a39=0x0;_0x5e7a39<_0x45d9dd;_0x5e7a39++){const _0x1a56b2=_0x543e5b[_0x5e7a39]?{'type':'remove','lineNum':_0x36a4fd++,'content':_0x543e5b[_0x5e7a39]}:{'type':'empty','lineNum':'','content':''},_0xcada1e=_0x245a57[_0x5e7a39]?{'type':'add','lineNum':_0x2e6539++,'content':_0x245a57[_0x5e7a39]}:{'type':'empty','lineNum':'','content':''};_0x1f8678['push'](renderSplitRow(_0x1a56b2,_0xcada1e,_0x5a2544));}_0x1fb74e=_0x99ec8c;continue;}if(_0x298148['startsWith']('+')){const _0x3cbdef=[];while(_0x1fb74e<_0x542667['length']&&_0x542667[_0x1fb74e]['startsWith']('+')){_0x3cbdef['push'](_0x542667[_0x1fb74e]['substring'](0x1)),_0x1fb74e+=0x1;}_0x3cbdef['forEach'](_0x5b8463=>{_0x1f8678['push'](renderSplitRow({'type':'empty','lineNum':'','content':''},{'type':'add','lineNum':_0x2e6539++,'content':_0x5b8463},_0x5a2544));});continue;}if(_0x298148['startsWith']('\x5c')){_0x1f8678['push'](renderSplitRow({'type':'meta','lineNum':'','content':_0x298148},{'type':'meta','lineNum':'','content':_0x298148},_0x5a2544)),_0x1fb74e+=0x1;continue;}_0x1fb74e+=0x1;}const _0x568e7e=_0x1f8678['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'](_0x4b3cc8['header'])+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22split-diff-table\x22>'+_0x568e7e+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20';})['join'](''),_0x4bba10=_0x2e3fbf||'<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-'+_0x230d7e+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-header\x22\x20data-diff-id=\x22'+_0x230d7e+'\x22\x20data-file-name=\x22'+Utils['escapeHtml'](_0x35e67e)+'\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'+_0x54f4b1+'\x22>'+_0x30bafa+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-diff-name\x22>'+Utils['escapeHtml'](_0x35e67e)+'</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>+'+_0x9f04bb+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22diff-del\x22>-'+_0x4c4784+'</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'+_0x230d7e+'\x22\x20data-collapsed=\x22'+_0x422196+'\x22\x20type=\x22button\x22\x20aria-label=\x22'+(_0x422196?'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'+(_0x422196?'collapsed':'')+'\x22\x20id=\x22'+_0x230d7e+'\x22>'+_0x4bba10+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20';})['join']('');}function renderSplitRow(_0x49e1b7,_0x186a88,_0x464421){return'\x0a\x20\x20\x20\x20<div\x20class=\x22split-diff-row\x22>\x0a\x20\x20\x20\x20\x20\x20'+renderSplitCell(_0x49e1b7,_0x464421)+'\x0a\x20\x20\x20\x20\x20\x20'+renderSplitCell(_0x186a88,_0x464421)+'\x0a\x20\x20\x20\x20</div>\x0a\x20\x20';}function renderSplitCell(_0x358d4f,_0x437bbc){const _0x89d4ed='split-'+_0x358d4f['type'],_0x4cd97b=_0x358d4f['lineNum']===0x0?'':_0x358d4f['lineNum'];let _0x3056d0='&nbsp;';if(_0x358d4f['type']==='meta')_0x3056d0=Utils['escapeHtml'](_0x358d4f['content']);else _0x358d4f['type']!=='empty'&&(_0x3056d0=highlightDiffLine(_0x358d4f['content'],_0x437bbc));return'\x0a\x20\x20\x20\x20<div\x20class=\x22split-diff-cell\x20'+_0x89d4ed+'\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22split-line-num\x22>'+_0x4cd97b+'</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22split-line-content\x22>'+_0x3056d0+'</span>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20';}function bindDiffToggleHandlers(_0x380bc3){const _0x4b831e=elements['diffContainer']['querySelectorAll']('.file-diff-header');_0x4b831e['forEach'](_0x37acc1=>{if(_0x37acc1['dataset']['bound']==='true')return;_0x37acc1['dataset']['bound']='true',_0x37acc1['addEventListener']('click',_0x5c01d9=>{if(_0x5c01d9['target']['closest']('.file-diff-toggle-btn'))return;const _0x3cc337=_0x37acc1['dataset']['diffId'];toggleDiff(_0x3cc337,_0x37acc1['dataset']['fileName'],_0x380bc3);});});const _0x53c050=elements['diffContainer']['querySelectorAll']('.file-diff-toggle-btn');_0x53c050['forEach'](_0x4f7d75=>{if(_0x4f7d75['dataset']['bound']==='true')return;_0x4f7d75['dataset']['bound']='true',_0x4f7d75['addEventListener']('click',_0x470aa2=>{_0x470aa2['stopPropagation']();const _0x2ffc3b=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x4f7d75['dataset']['diffId']+'\x22]'),_0x4c55f2=_0x2ffc3b?.['dataset']['fileName']||'';toggleDiff(_0x4f7d75['dataset']['diffId'],_0x4c55f2,_0x380bc3);});});}function toggleDiff(_0x35504f,_0x182db2,_0x5a7504){const _0x4b4285=document['getElementById'](_0x35504f),_0x514205=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x35504f+'\x22]'),_0x5052be=_0x514205?.['querySelector']('.file-diff-toggle-btn');if(!_0x4b4285)return;const _0x10c5e5=_0x4b4285['classList']['toggle']('collapsed');_0x5052be&&(_0x5052be['dataset']['collapsed']=String(_0x10c5e5),_0x5052be['setAttribute']('aria-label',_0x10c5e5?'Expand':'Collapse'));const _0x8e6f08=getStorageKey(_0x5a7504,_0x182db2);localStorage['setItem'](_0x8e6f08,String(_0x10c5e5));}function setAllDiffCollapsed(_0x1bb047){if(!state['commitDetail']?.['commit']?.['hash'])return;const _0x1ff8dc='git-history-'+state['commitDetail']['commit']['hash'];if(state['diffRender']?.['files']?.['length']){const _0x347f07=buildCollapsedStateUpdates({'files':state['diffRender']['files'],'collapsed':_0x1bb047,'storageKeyPrefix':_0x1ff8dc,'getStorageKey':getStorageKey});_0x347f07['forEach'](({key:_0x41a87e,value:_0x4b34c6})=>{localStorage['setItem'](_0x41a87e,_0x4b34c6);});}const _0x38c68c=elements['diffContainer']['querySelectorAll']('.file-diff-content');_0x38c68c['forEach'](_0x137864=>{_0x137864['classList']['toggle']('collapsed',_0x1bb047);const _0x49486c=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x137864['id']+'\x22]'),_0x47f814=_0x49486c?.['querySelector']('.file-diff-toggle-btn'),_0x15d22b=_0x49486c?.['dataset']['fileName']||'';_0x47f814&&(_0x47f814['dataset']['collapsed']=String(_0x1bb047),_0x47f814['setAttribute']('aria-label',_0x1bb047?'Expand':'Collapse')),_0x15d22b&&localStorage['setItem'](getStorageKey(_0x1ff8dc,_0x15d22b),String(_0x1bb047));});}function getStorageKey(_0x313f2f,_0x6f6d9b){return _0x313f2f+'-'+safeBase64(_0x6f6d9b);}function getCollapsedState(_0x4d4ade,_0x213fdf,_0x568287=![]){const _0x1873ce=localStorage['getItem'](getStorageKey(_0x4d4ade,_0x213fdf));if(_0x1873ce===null)return Boolean(_0x568287);return _0x1873ce==='true';}function safeBase64(_0x35c7af){try{return btoa(unescape(encodeURIComponent(_0x35c7af)));}catch(_0x4380f5){return btoa(_0x35c7af);}}function formatDate(_0xf91cff){if(!_0xf91cff)return'';const _0x4cc6e7=new Date(_0xf91cff);if(Number['isNaN'](_0x4cc6e7['getTime']()))return _0xf91cff;return _0x4cc6e7['toLocaleString']('en-US',{'month':'short','day':'numeric','year':'numeric','hour':'2-digit','minute':'2-digit'});}function renderLoadingSkeletons(_0x1fce41){return Array(_0x1fce41)['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(_0x29eab4){if(elements['fileNavToggle']?.['disabled'])return;_0x29eab4['stopPropagation']();const _0xfb5b20=elements['fileNavSidebar']?.['classList']['toggle']('open');_0xfb5b20&&renderFileNavList();}function closeFileNav(){elements['fileNavSidebar']?.['classList']['remove']('open');}function toggleMaximize(){if(!elements['gitHistoryBody'])return;const _0x23e3b7=elements['gitHistoryBody']['classList']['toggle']('maximized'),_0x1c2b64=elements['maximizeBtn']?.['querySelector']('.maximize-icon'),_0x2badb=elements['maximizeBtn']?.['querySelector']('.restore-icon');_0x1c2b64&&_0x2badb&&(_0x1c2b64['hidden']=_0x23e3b7,_0x2badb['hidden']=!_0x23e3b7),elements['maximizeBtn']&&(elements['maximizeBtn']['title']=_0x23e3b7?'Restore\x20diff\x20panel\x20(Esc\x20or\x20m)':'Maximize\x20diff\x20panel\x20(m)'),localStorage['setItem']('git-history-maximized',String(_0x23e3b7));}function renderFileNavList(){if(!state['commitDetail']?.['files']||!elements['fileNavList'])return;const _0x5261a8=state['commitDetail']['files'];elements['fileNavList']['innerHTML']=_0x5261a8['map']((_0x2c4962,_0x2c8d68)=>{const _0x3bdd1b=_0x2c4962['newPath']||_0x2c4962['oldPath']||'unknown',_0x522b21=_0x3bdd1b['split']('/')['pop'](),{additions:_0x1a4716,deletions:_0x5a4756}=calculateDiffStats([_0x2c4962]),_0x2f5b69=getFileStatus(_0x2c4962,_0x1a4716,_0x5a4756),_0x18a5e4=getStatusIcon(_0x2f5b69);return'\x0a\x20\x20\x20\x20\x20\x20<li\x20class=\x22file-nav-item\x22\x20data-file-idx=\x22'+_0x2c8d68+'\x22\x20data-file-name=\x22'+Utils['escapeHtml'](_0x3bdd1b)+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-nav-icon\x20'+_0x2f5b69+'\x22>'+_0x18a5e4+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-nav-name\x22\x20title=\x22'+Utils['escapeHtml'](_0x3bdd1b)+'\x22>'+Utils['escapeHtml'](_0x522b21)+'</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'+(_0x1a4716>0x0?'<span\x20class=\x22add\x22>+'+_0x1a4716+'</span>':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x5a4756>0x0?'<span\x20class=\x22del\x22>-'+_0x5a4756+'</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'](_0x38ad6d=>{_0x38ad6d['addEventListener']('click',()=>{const _0x2a747e=parseInt(_0x38ad6d['dataset']['fileIdx']||'0',0xa),_0x3516d9='git-history-'+state['commitDetail']['commit']['hash'],_0x4ff087='diff-'+_0x3516d9+'-'+_0x2a747e;ensureLazyDiffFileRendered(_0x2a747e);const _0x307c5b=document['getElementById'](_0x4ff087);if(_0x307c5b){if(_0x307c5b['classList']['contains']('collapsed')){const _0x452aaf=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x4ff087+'\x22]'),_0x12f77e=_0x452aaf?.['dataset']['fileName']||'';toggleDiff(_0x4ff087,_0x12f77e,_0x3516d9);}const _0x494e5e=_0x307c5b['closest']('.file-diff');_0x494e5e&&(_0x494e5e['scrollIntoView']({'behavior':'smooth','block':'start'}),_0x494e5e['classList']['add']('highlighted'),setTimeout(()=>_0x494e5e['classList']['remove']('highlighted'),0x5dc));}closeFileNav();});});}function getFileStatus(_0x3f5f08,_0x55947d,_0x545979){if(_0x3f5f08['isDeleted'])return'deleted';if(_0x55947d>0x0&&_0x545979===0x0)return'added';return'modified';}function getStatusIcon(_0x58347a){switch(_0x58347a){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(_0x1140b8){if(!_0x1140b8)return null;const _0x5a93a2=_0x1140b8['toLowerCase']();if(/^feat(\(|:|\s)/['test'](_0x5a93a2)||_0x5a93a2['includes']('add\x20')||_0x5a93a2['includes']('implement'))return'feat';if(/^fix(\(|:|\s)/['test'](_0x5a93a2)||_0x5a93a2['includes']('bug')||_0x5a93a2['includes']('patch'))return'fix';if(/^refactor(\(|:|\s)/['test'](_0x5a93a2)||_0x5a93a2['includes']('refactor')||_0x5a93a2['includes']('restructure'))return'refactor';if(/^docs?(\(|:|\s)/['test'](_0x5a93a2)||_0x5a93a2['includes']('readme')||_0x5a93a2['includes']('documentation'))return'docs';if(/^test(\(|:|\s)/['test'](_0x5a93a2)||_0x5a93a2['includes']('test'))return'test';if(/^chore(\(|:|\s)/['test'](_0x5a93a2)||_0x5a93a2['includes']('chore')||_0x5a93a2['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 _0x454985,shouldAutoCollapseDiff as _0x3a3614,getNextRenderedCount,renderedCountForTarget,getLazyLoadMoreText as _0x4f6428,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 _0x1184e9=await checkAccess();await initializeAdminMenu(_0x1184e9),setupEventListeners(),initializeDiffViewToggle(),await loadEnvironments(),elements['loading']['hidden']=!![],elements['content']['hidden']=![];}catch(_0x40e72d){console['error']('Git\x20history\x20initialization\x20error:',_0x40e72d),elements['loading']['hidden']=!![],elements['error']['hidden']=![],elements['errorMessage']['textContent']=_0x40e72d['message']||'Unknown\x20error';}}async function checkAccess(){try{const _0x4b3748=await API['getCurrentUser'](),_0x48187b=_0x4b3748['hasEnvironmentGit']===!![];if(!_0x48187b){Utils['showToast']('Access\x20denied:\x20Git\x20permissions\x20required','error'),setTimeout(()=>{window['location']['href']='index.html';},0x708);throw new Error('Access\x20denied');}return _0x4b3748;}catch(_0x140ac0){_0x140ac0['message']!=='Access\x20denied'&&(window['location']['href']='login.html');throw _0x140ac0;}}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',_0x5a2f43=>{const _0x162a90=_0x5a2f43['target']['closest']('.commit-item');if(!_0x162a90)return;selectCommit(_0x162a90['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',_0x56f179=>{!_0x56f179['target']['closest']('.file-nav-container')&&closeFileNav();}),elements['maximizeBtn']?.['addEventListener']('click',toggleMaximize),document['addEventListener']('keydown',handleKeyboardNavigation);}function handleKeyboardNavigation(_0x43d2a6){if(_0x43d2a6['target']['matches']('input,\x20select,\x20textarea'))return;const _0x520a4f=Array['from'](elements['commitList']?.['querySelectorAll']('.commit-item')||[]);if(_0x520a4f['length']===0x0)return;const _0x10ab39=_0x520a4f['findIndex'](_0x5a51bc=>_0x5a51bc['classList']['contains']('selected'));switch(_0x43d2a6['key']){case'j':case'ArrowDown':{_0x43d2a6['preventDefault']();const _0x57c9c1=_0x10ab39<_0x520a4f['length']-0x1?_0x10ab39+0x1:_0x10ab39,_0x15e95f=_0x520a4f[_0x57c9c1]?.['dataset']['hash'];_0x15e95f&&(selectCommit(_0x15e95f),_0x520a4f[_0x57c9c1]['scrollIntoView']({'block':'nearest','behavior':'smooth'}));break;}case'k':case'ArrowUp':{_0x43d2a6['preventDefault']();const _0x18ec9e=_0x10ab39>0x0?_0x10ab39-0x1:0x0,_0x1555fc=_0x520a4f[_0x18ec9e]?.['dataset']['hash'];_0x1555fc&&(selectCommit(_0x1555fc),_0x520a4f[_0x18ec9e]['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'/':{_0x43d2a6['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 _0x1b7123=Array['from'](document['querySelectorAll']('.segmented-btn'));_0x1b7123['forEach'](_0xac2646=>{_0xac2646['classList']['toggle']('active',_0xac2646['dataset']['view']===state['diffView']),_0xac2646['addEventListener']('click',()=>{if(_0xac2646['dataset']['view']===state['diffView'])return;state['diffView']=_0xac2646['dataset']['view'],localStorage['setItem']('git-history-diff-view',state['diffView']),_0x1b7123['forEach'](_0x52ca59=>_0x52ca59['classList']['toggle']('active',_0x52ca59===_0xac2646)),renderCommitDiff();});});}async function loadEnvironments(){const _0x374491=await API['getEnvironments']();state['environments']=_0x374491['environments']||[],elements['envSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20environment</option>',state['environments']['forEach'](_0x2f486d=>{const _0x209d99=document['createElement']('option');_0x209d99['value']=_0x2f486d['name'],_0x209d99['textContent']=_0x2f486d['name'],elements['envSelect']['appendChild'](_0x209d99);}),new CustomSelect(elements['envSelect'],{'searchable':!![]}),new CustomSelect(elements['repoSelect'],{'searchable':!![]}),new CustomSelect(elements['branchSelect'],{'searchable':!![]});const _0x12cd89=_0x374491['default_environment']||state['environments'][0x0]?.['name']||'';_0x12cd89&&(elements['envSelect']['value']=_0x12cd89,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 _0x27d96f=await API['getEnvironment'](state['selectedEnvironment']);state['repos']=_0x27d96f['repos']||[],elements['repoSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20repository</option>',state['repos']['forEach'](_0xb14eb3=>{const _0xc9beee=document['createElement']('option');_0xc9beee['value']=_0xb14eb3['name'],_0xc9beee['textContent']=_0xb14eb3['name'],elements['repoSelect']['appendChild'](_0xc9beee);}),elements['repoSelect']['disabled']=state['repos']['length']===0x0;const _0x526564=state['repos'][0x0]?.['name'];_0x526564&&(elements['repoSelect']['value']=_0x526564,elements['repoSelect']['dispatchEvent'](new Event('change')));}catch(_0x4787c3){Utils['showError'](_0x4787c3['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 _0x2b85a0=state['selectedEnvironment']+':'+state['selectedRepo'],_0x4d4cfb=branchCache['get'](_0x2b85a0),_0x4b661e=Date['now']();let _0x3367f8;_0x4d4cfb&&_0x4b661e-_0x4d4cfb['timestamp']<BRANCH_CACHE_TTL_MS?_0x3367f8=_0x4d4cfb:(_0x3367f8=await API['getEnvironmentRepoBranches'](state['selectedEnvironment'],state['selectedRepo']),branchCache['set'](_0x2b85a0,{..._0x3367f8,'timestamp':_0x4b661e}));state['branches']=_0x3367f8['branches']||[],elements['branchSelect']['innerHTML']='';const _0x3d2457=document['createElement']('option');_0x3d2457['value']='',_0x3d2457['textContent']=_0x3367f8['defaultBranch']?_0x3367f8['defaultBranch']+'\x20(default)':_0x3367f8['currentBranch']?_0x3367f8['currentBranch']+'\x20(current)':'Select\x20branch',elements['branchSelect']['appendChild'](_0x3d2457);const _0x2ee1cb=_0x3367f8['defaultBranch']||_0x3367f8['currentBranch'];state['branches']['forEach'](_0x103cfc=>{if(_0x103cfc['name']===_0x2ee1cb)return;const _0x4e7560=document['createElement']('option');_0x4e7560['value']=_0x103cfc['name'];let _0x2fcb53=_0x103cfc['name'];if(_0x103cfc['isDefault'])_0x2fcb53+='\x20(default)';if(_0x103cfc['isCurrent'])_0x2fcb53+='\x20(current)';_0x4e7560['textContent']=_0x2fcb53,elements['branchSelect']['appendChild'](_0x4e7560);}),elements['branchSelect']['disabled']=state['branches']['length']===0x0,_0x3367f8['currentBranch']&&(state['selectedBranch']=''),elements['branchSelect']['value']=state['selectedBranch'],queueMicrotask(()=>{elements['branchSelect']['dispatchEvent'](new Event('change'));});}catch(_0x32730f){console['error']('Failed\x20to\x20load\x20branches:',_0x32730f),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(_0x23c98e={}){if(!state['selectedEnvironment']||!state['selectedRepo'])return;if(state['loadingHistory'])return;state['loadingHistory']=!![],elements['commitList']['innerHTML']=renderLoadingSkeletons(0x5),elements['commitCount']['textContent']='Loading\x20history...';try{const _0x3b98db={'limit':state['pagination']['limit'],'offset':state['pagination']['offset'],'search':state['pagination']['search']};state['selectedBranch']&&(_0x3b98db['branch']=state['selectedBranch']);const _0x307bf1=await API['getEnvironmentRepoHistory'](state['selectedEnvironment'],state['selectedRepo'],_0x3b98db);state['commits']=_0x307bf1['commits']||[],state['pagination']['hasMore']=_0x307bf1['pagination']?.['hasMore']||![],state['dataSource']=_0x307bf1['source']||'local',state['activeBranch']=_0x307bf1['repo']?.['branch']||state['selectedBranch']||'';_0x307bf1['repo']?.['branch']?(elements['branchName']['textContent']=_0x307bf1['repo']['branch'],elements['branchPill']['hidden']=![]):elements['branchPill']['hidden']=!![];updateSourceIndicator(),renderCommitList();const _0x512691=_0x23c98e['keepSelection']&&state['selectedCommit'],_0xcf3007=state['commits']['some'](_0x27f702=>_0x27f702['hash']===state['selectedCommit']?.['hash']);if(_0x512691&&_0xcf3007)highlightSelectedCommit();else state['commits']['length']>0x0?selectCommit(state['commits'][0x0]['hash'],{'silent':!![]}):resetCommitDetail();}catch(_0x3e74ef){Utils['showError'](_0x3e74ef['message']||'Failed\x20to\x20load\x20commit\x20history'),elements['commitList']['innerHTML']='',elements['commitCount']['textContent']='Unable\x20to\x20load\x20history.';}finally{state['loadingHistory']=![];}}function updateSourceIndicator(){let _0x51c5c6=document['getElementById']('data-source-indicator');!_0x51c5c6&&(_0x51c5c6=document['createElement']('span'),_0x51c5c6['id']='data-source-indicator',_0x51c5c6['className']='source-indicator',elements['branchPill']?.['parentNode']?.['insertBefore'](_0x51c5c6,elements['branchPill']['nextSibling'])),state['dataSource']==='remote'?(_0x51c5c6['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',_0x51c5c6['title']='Data\x20fetched\x20from\x20remote\x20Git\x20provider\x20(repository\x20not\x20cloned\x20locally)',_0x51c5c6['hidden']=![]):_0x51c5c6['hidden']=!![];}async function selectCommit(_0x529121,_0x1ad6b0={}){if(!_0x529121)return;if(state['loadingCommit'])return;const _0x8bfdd4=state['commits']['find'](_0x47be37=>_0x47be37['hash']===_0x529121);if(!_0x8bfdd4)return;state['selectedCommit']=_0x8bfdd4,highlightSelectedCommit();if(_0x1ad6b0['silent']){await loadCommitDetail(_0x529121);return;}await loadCommitDetail(_0x529121);}function highlightSelectedCommit(){const _0x5e70ae=elements['commitList']['querySelectorAll']('.commit-item');_0x5e70ae['forEach'](_0x18c8bf=>{_0x18c8bf['classList']['toggle']('selected',_0x18c8bf['dataset']['hash']===state['selectedCommit']?.['hash']);});}async function loadCommitDetail(_0x48a589){state['loadingCommit']=!![],elements['placeholder']['hidden']=!![],elements['detailPanel']['hidden']=![],elements['diffContainer']['innerHTML']='<div\x20class=\x22empty-state-card\x22>Loading\x20diff...</div>';try{const _0x537c24=await API['getEnvironmentRepoCommit'](state['selectedEnvironment'],state['selectedRepo'],_0x48a589);state['commitDetail']=_0x537c24,renderCommitDetail();}catch(_0x4dd9f3){Utils['showError'](_0x4dd9f3['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 _0x1ff637=state['pagination']['search']?'No\x20commits\x20match\x20\x22'+state['pagination']['search']+'\x22.':'No\x20commits\x20found.';elements['commitCount']['textContent']=_0x1ff637,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'](_0x1ff637)+'</p>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20',elements['prevBtn']['disabled']=!![],elements['nextBtn']['disabled']=!![];return;}const _0x45e1c3=state['pagination']['offset']+0x1,_0x4b75e6=state['pagination']['offset']+state['commits']['length'],_0x3e4aa5=state['pagination']['search']?_0x45e1c3+'-'+_0x4b75e6+'\x20matching\x20\x22'+state['pagination']['search']+'\x22':_0x45e1c3+'-'+_0x4b75e6;elements['commitCount']['textContent']=_0x3e4aa5,state['commits']['forEach']((_0x21f23b,_0x18f526)=>{const _0x574136=document['createElement']('li');_0x574136['className']='commit-item',_0x574136['dataset']['hash']=_0x21f23b['hash'],_0x574136['tabIndex']=0x0,_0x574136['setAttribute']('role','button'),_0x574136['setAttribute']('aria-label','Commit:\x20'+(_0x21f23b['message']||'No\x20message')+'\x20by\x20'+(_0x21f23b['author']||'Unknown')),_0x574136['style']['animationDelay']=_0x18f526*0x19+'ms';const _0x5b85e7=getAuthorInitials(_0x21f23b['author']),_0x29d995=getAvatarColor(_0x21f23b['author']||'Unknown'),_0x45395f=detectCommitType(_0x21f23b['message']),_0x57e57e=_0x45395f?'<span\x20class=\x22commit-type-indicator\x20'+_0x45395f+'\x22>'+_0x45395f+'</span>':'';_0x574136['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22commit-message\x22>'+Utils['escapeHtml'](truncateMessage(_0x21f23b['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'+_0x29d995+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22author-avatar\x22>'+_0x5b85e7+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+Utils['escapeHtml'](_0x21f23b['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'](_0x21f23b['date'])+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22commit-short-hash\x22>'+_0x21f23b['shortHash']+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x21f23b['isMerge']?'<span\x20class=\x22commit-tag\x22>Merge</span>':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+_0x57e57e+'\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20',_0x574136['addEventListener']('keydown',_0x370f4f=>{(_0x370f4f['key']==='Enter'||_0x370f4f['key']==='\x20')&&(_0x370f4f['preventDefault'](),selectCommit(_0x21f23b['hash']));}),elements['commitList']['appendChild'](_0x574136);}),elements['prevBtn']['disabled']=state['pagination']['offset']===0x0,elements['nextBtn']['disabled']=!state['pagination']['hasMore'],highlightSelectedCommit();}function getAuthorInitials(_0x4487b4){if(!_0x4487b4)return'?';const _0x464a26=_0x4487b4['trim']()['split'](/\s+/);if(_0x464a26['length']===0x1)return _0x464a26[0x0]['charAt'](0x0)['toUpperCase']();return(_0x464a26[0x0]['charAt'](0x0)+_0x464a26[_0x464a26['length']-0x1]['charAt'](0x0))['toUpperCase']();}function getAvatarColor(_0x2809a8){let _0x364901=0x0;for(let _0x4bdf61=0x0;_0x4bdf61<_0x2809a8['length'];_0x4bdf61++){_0x364901=_0x2809a8['charCodeAt'](_0x4bdf61)+((_0x364901<<0x5)-_0x364901);}const _0x329576=Math['abs'](_0x364901%0x168);return'hsl('+_0x329576+',\x2065%,\x2055%)';}function truncateMessage(_0x215a15,_0x242531){if(!_0x215a15)return'';const _0x58ff5e=_0x215a15['split']('\x0a')[0x0];if(_0x58ff5e['length']<=_0x242531)return _0x58ff5e;return _0x58ff5e['substring'](0x0,_0x242531-0x3)+'...';}function asFiniteNumber(_0x3f9dd6){return Number['isFinite'](_0x3f9dd6)?_0x3f9dd6:null;}function formatFileCountLabel(_0x58e701,_0x2e33aa={}){const _0x58fcda=Boolean(_0x2e33aa['lowerBound']),_0x45f8d8=_0x58fcda?'at\x20least\x20':'';return''+_0x45f8d8+_0x58e701+'\x20file'+(_0x58e701===0x1?'':'s');}function formatBytes(_0x264443){if(!Number['isFinite'](_0x264443)||_0x264443<=0x0)return'';const _0x226eb6=_0x264443/(0x400*0x400);if(_0x226eb6>=0x1)return _0x226eb6['toFixed'](0x1)+'MB';const _0x3ceae0=_0x264443/0x400;return Math['max'](0x1,Math['round'](_0x3ceae0))+'KB';}function getEffectiveDiffStats(_0x58311b,_0x31e57b){const _0x8d5d51=asFiniteNumber(_0x31e57b?.['changedFiles']),_0x48f5bc=asFiniteNumber(_0x31e57b?.['changedFilesLowerBound']),_0x130017=asFiniteNumber(_0x31e57b?.['additions']),_0x49defa=asFiniteNumber(_0x31e57b?.['deletions']);return{'files':_0x8d5d51??_0x48f5bc??_0x58311b['files'],'filesIsLowerBound':_0x8d5d51===null&&_0x48f5bc!==null,'additions':_0x130017??_0x58311b['additions'],'deletions':_0x49defa??_0x58311b['deletions']};}function getDiffNoticeText(_0x40f1d1){if(!_0x40f1d1?.['truncated'])return'';if(_0x40f1d1['omitted']){const _0x225f20=asFiniteNumber(_0x40f1d1['changedFiles']),_0x1664a6=asFiniteNumber(_0x40f1d1['changedFilesLowerBound']),_0x19b6d6=asFiniteNumber(_0x40f1d1['maxFiles']);if(_0x225f20!==null&&_0x19b6d6!==null)return'Diff\x20omitted\x20because\x20this\x20commit\x20changes\x20'+_0x225f20['toLocaleString']()+'\x20files\x20(limit\x20'+_0x19b6d6['toLocaleString']()+').';if(_0x1664a6!==null&&_0x19b6d6!==null)return'Diff\x20omitted\x20because\x20this\x20commit\x20changes\x20at\x20least\x20'+_0x1664a6['toLocaleString']()+'\x20files\x20(limit\x20'+_0x19b6d6['toLocaleString']()+').';if(_0x1664a6!==null)return'Diff\x20omitted\x20because\x20this\x20commit\x20changes\x20at\x20least\x20'+_0x1664a6['toLocaleString']()+'\x20files.';return'Diff\x20omitted\x20for\x20this\x20large\x20commit\x20to\x20keep\x20Git\x20History\x20responsive.';}const _0x671728=asFiniteNumber(_0x40f1d1['maxBytes']);if(_0x671728!==null)return'Showing\x20a\x20truncated\x20diff\x20preview\x20('+formatBytes(_0x671728)+'\x20max)\x20to\x20keep\x20Git\x20History\x20responsive.';return'Showing\x20a\x20truncated\x20diff\x20preview\x20to\x20keep\x20Git\x20History\x20responsive.';}function shouldUseLazyRendering(_0x3a976e,_0x14258e=null){const _0x14bcba=asFiniteNumber(_0x14258e?.['maxFiles']);return _0x454985(_0x3a976e,{'minFiles':LAZY_RENDER_MIN_FILES,'maxFiles':LAZY_RENDER_MAX_FILES,'serverMaxFiles':_0x14bcba});}function shouldAutoCollapseDiff(_0x3a4389){return _0x3a3614(_0x3a4389,{'threshold':AUTO_COLLAPSE_MIN_FILES});}function getLazyLoadMoreText(_0x38f97f){if(!_0x38f97f)return'Load\x20more\x20files';return _0x4f6428({'filesLength':_0x38f97f['files']['length'],'renderedCount':_0x38f97f['renderedCount'],'chunkSize':_0x38f97f['chunkSize']});}function ensureLazyDiffFileRendered(_0x29bc92){if(!state['diffRender']?.['lazy'])return;const _0xc394f3=renderedCountForTarget({'renderedCount':state['diffRender']['renderedCount'],'targetIndex':_0x29bc92,'totalFiles':state['diffRender']['files']['length'],'chunkSize':state['diffRender']['chunkSize']});while(state['diffRender']['renderedCount']<_0xc394f3){renderNextDiffChunk();}}function updateLazyLoadMoreControl(){const _0x2dff25=state['diffRender'];if(!_0x2dff25?.['lazy']||!elements['diffContainer'])return;const _0x1fbad0=elements['diffContainer']['querySelector']('.diff-load-more-control');if(!_0x1fbad0)return;if(_0x2dff25['renderedCount']>=_0x2dff25['files']['length']){_0x1fbad0['innerHTML']='<span\x20class=\x22diff-load-complete\x22>All\x20'+formatFileCountLabel(_0x2dff25['files']['length'])+'\x20loaded</span>';return;}_0x1fbad0['innerHTML']='<button\x20class=\x22btn-ghost\x20btn-small\x20diff-load-more-btn\x22\x20type=\x22button\x22>'+getLazyLoadMoreText(_0x2dff25)+'</button>';const _0xd9f0f0=_0x1fbad0['querySelector']('.diff-load-more-btn');_0xd9f0f0?.['addEventListener']('click',()=>{renderNextDiffChunk();});}function renderNextDiffChunk(){const _0x23d234=state['diffRender'];if(!_0x23d234?.['lazy']||!elements['diffContainer'])return;if(_0x23d234['renderedCount']>=_0x23d234['files']['length'])return;const _0x5862eb=elements['diffContainer']['querySelector']('.diff-files-host');if(!_0x5862eb)return;const _0x37237d=_0x23d234['renderedCount'],_0x3519b9=getNextRenderedCount({'renderedCount':_0x37237d,'totalFiles':_0x23d234['files']['length'],'chunkSize':_0x23d234['chunkSize']}),_0x948c28=_0x23d234['files']['slice'](_0x37237d,_0x3519b9),_0x4b6c48=state['diffView']==='split'?renderSplitDiff(_0x948c28,_0x23d234['storageKeyPrefix'],_0x37237d,{'defaultCollapsed':_0x23d234['defaultCollapsed']}):renderUnifiedDiff(_0x948c28,_0x23d234['storageKeyPrefix'],_0x37237d,{'defaultCollapsed':_0x23d234['defaultCollapsed']});_0x5862eb['insertAdjacentHTML']('beforeend',_0x4b6c48),_0x23d234['renderedCount']=_0x3519b9,bindDiffToggleHandlers(_0x23d234['storageKeyPrefix']),updateLazyLoadMoreControl();}function renderCommitDetail(){if(!state['commitDetail']||!state['commitDetail']['commit']){resetCommitDetail();return;}const _0x563c5a=state['commitDetail']['commit'];elements['commitMessage']['textContent']=_0x563c5a['message']||'No\x20message',elements['commitAuthor']['textContent']=''+(_0x563c5a['author']||'Unknown')+(_0x563c5a['email']?'\x20('+_0x563c5a['email']+')':''),elements['commitDate']['textContent']=formatDate(_0x563c5a['date']),elements['commitHash']['textContent']=_0x563c5a['hash'];const _0xad4948=isSelectedCommitRemoteSource();elements['revertBtn']&&(elements['revertBtn']['hidden']=![],elements['revertBtn']['textContent']=_0xad4948?'Revert\x20via\x20task':'Revert\x20commit',elements['revertBtn']['title']=_0xad4948?'Create\x20a\x20task\x20that\x20applies\x20this\x20revert\x20and\x20stages\x20the\x20changes\x20for\x20approval':'');if(elements['viewOnProviderBtn']){const _0x1b95d1=getProviderCommitUrl(_0x563c5a['hash']);_0x1b95d1&&_0xad4948?(elements['viewOnProviderBtn']['hidden']=![],elements['viewOnProviderBtn']['href']=_0x1b95d1,elements['viewOnProviderBtn']['textContent']='View\x20on\x20'+getProviderDisplayName()):elements['viewOnProviderBtn']['hidden']=!![];}const _0x3aa947=_0x563c5a['parents']||[];_0x3aa947['length']>0x1?(elements['mergeControls']['hidden']=![],elements['mainlineSelect']['innerHTML']='',_0x3aa947['forEach']((_0x52a434,_0x3dc816)=>{const _0x1f9beb=document['createElement']('option');_0x1f9beb['value']=String(_0x3dc816+0x1),_0x1f9beb['textContent']='Parent\x20'+(_0x3dc816+0x1)+'\x20-\x20'+_0x52a434['slice'](0x0,0x7),elements['mainlineSelect']['appendChild'](_0x1f9beb);})):elements['mergeControls']['hidden']=!![];const _0x31d1fa=state['commitDetail']['diffMeta']||null,_0x591d80=_0x31d1fa?.['omitted']?[]:parsePatchContent(state['commitDetail']['diff']||'');state['commitDetail']['files']=_0x591d80;const _0x237230=calculateDiffStats(_0x591d80),_0x4e7f34=getEffectiveDiffStats(_0x237230,_0x31d1fa);elements['diffStats']['innerHTML']='\x0a\x20\x20\x20\x20<span\x20class=\x22diff-stat-files\x22>'+formatFileCountLabel(_0x4e7f34['files'],{'lowerBound':_0x4e7f34['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>+'+_0x4e7f34['additions']['toLocaleString']()+'</span>\x0a\x20\x20\x20\x20<span\x20class=\x22diff-stat-del\x22>-'+_0x4e7f34['deletions']['toLocaleString']()+'</span>\x0a\x20\x20';elements['fileNavCount']&&(elements['fileNavCount']['textContent']=formatFileCountLabel(_0x4e7f34['files'],{'lowerBound':_0x4e7f34['filesIsLowerBound']}));if(elements['fileNavToggle']){const _0x3ae4b8=_0x591d80['length']>0x0;elements['fileNavToggle']['disabled']=!_0x3ae4b8,elements['fileNavToggle']['setAttribute']('aria-disabled',String(!_0x3ae4b8)),elements['fileNavToggle']['title']=_0x3ae4b8?'Browse\x20changed\x20files':_0x31d1fa?.['omitted']?'Diff\x20omitted\x20for\x20this\x20large\x20commit':'No\x20file\x20diff\x20to\x20browse',!_0x3ae4b8&&closeFileNav();}renderCommitDiff();}function renderCommitDiff(){if(!state['commitDetail']||!elements['diffContainer'])return;const _0x12ca66=state['commitDetail']['diffMeta']||null,_0x1ee291=getDiffNoticeText(_0x12ca66);state['diffRender']=null;if(_0x12ca66?.['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'](_0x1ee291||'Diff\x20omitted\x20for\x20this\x20large\x20commit.')+'</p>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20';return;}const _0x555722=state['commitDetail']['files']||parsePatchContent(state['commitDetail']['diff']||'');if(_0x555722['length']===0x0){if(_0x12ca66?.['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'](_0x1ee291||'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 _0x5d9a64='git-history-'+state['commitDetail']['commit']['hash'],_0x5cec99=_0x12ca66?.['truncated']?'<div\x20class=\x22diff-truncated-banner\x22>'+Utils['escapeHtml'](_0x1ee291)+'</div>':'',_0x2ea4d7=shouldUseLazyRendering(_0x555722['length'],_0x12ca66),_0x963275=shouldAutoCollapseDiff(_0x555722['length']);if(_0x2ea4d7){state['diffRender']={'lazy':!![],'files':_0x555722,'storageKeyPrefix':_0x5d9a64,'renderedCount':0x0,'chunkSize':LAZY_RENDER_CHUNK_SIZE,'defaultCollapsed':_0x963275};const _0xa023d2=_0x963275?'Large\x20commit\x20detected\x20('+_0x555722['length']['toLocaleString']()+'\x20files).\x20Files\x20are\x20collapsed\x20by\x20default\x20and\x20rendered\x20in\x20chunks.':'Large\x20commit\x20detected\x20('+_0x555722['length']['toLocaleString']()+'\x20files).\x20Rendering\x20files\x20in\x20chunks\x20for\x20better\x20responsiveness.';elements['diffContainer']['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20'+_0x5cec99+'\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22diff-large-commit-banner\x22>'+Utils['escapeHtml'](_0xa023d2)+'</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 _0x128f46=state['diffView']==='split'?renderSplitDiff(_0x555722,_0x5d9a64,0x0,{'defaultCollapsed':_0x963275}):renderUnifiedDiff(_0x555722,_0x5d9a64,0x0,{'defaultCollapsed':_0x963275});elements['diffContainer']['innerHTML']=''+_0x5cec99+_0x128f46,bindDiffToggleHandlers(_0x5d9a64);}function resetCommitDetail(){state['selectedCommit']=null,state['commitDetail']=null,state['diffRender']=null,closeFileNav(),elements['placeholder']['hidden']=![],elements['detailPanel']['hidden']=!![];}function getSelectedRepoObject(){return state['repos']['find'](_0x2d0999=>_0x2d0999['name']===state['selectedRepo'])||null;}function getProviderDisplayName(){const _0x5907d7=getSelectedRepoObject(),_0x118d9a=_0x5907d7?.['url']?.['toLowerCase']()||'';if(_0x118d9a['includes']('github.com')||_0x118d9a['includes']('github.'))return'GitHub';else{if(_0x118d9a['includes']('gitlab.com')||_0x118d9a['includes']('gitlab.'))return'GitLab';else{if(_0x118d9a['includes']('bitbucket.org')||_0x118d9a['includes']('bitbucket.'))return'Bitbucket';else{if(_0x118d9a['includes']('dev.azure.com')||_0x118d9a['includes']('visualstudio.com'))return'Azure\x20DevOps';}}}return'Provider';}function getProviderCommitUrl(_0x1fbf80){const _0x150bef=getSelectedRepoObject();if(!_0x150bef?.['url'])return null;let _0x40bf8f=_0x150bef['url']['replace'](/\.git$/,'');_0x40bf8f=_0x40bf8f['replace'](/^(https?:\/\/)[^@]+@/,'$1');const _0xe26cd0=_0x40bf8f['toLowerCase']();if(_0xe26cd0['includes']('gitlab.com')||_0xe26cd0['includes']('gitlab.'))return _0x40bf8f+'/-/commit/'+_0x1fbf80;else{if(_0xe26cd0['includes']('bitbucket.org')||_0xe26cd0['includes']('bitbucket.'))return _0x40bf8f+'/commits/'+_0x1fbf80;}return _0x40bf8f+'/commit/'+_0x1fbf80;}function isSelectedCommitRemoteSource(){return state['commitDetail']?.['source']==='remote'||state['dataSource']==='remote';}function getSelectedBranchForRevertTask(){const _0x2a6eef=(state['selectedBranch']||'')['trim']();if(_0x2a6eef)return _0x2a6eef;const _0x2d1d52=(state['activeBranch']||'')['trim']();if(_0x2d1d52)return _0x2d1d52;const _0x45cb90=(elements['branchName']?.['textContent']||'')['trim']();return _0x45cb90||null;}function buildRemoteRevertTaskInstructions(_0x588694,_0xe79b6e={}){const _0x54bbc6=getSelectedBranchForRevertTask(),_0x2c2f54=_0xe79b6e['mainline']||null,_0x1e17f0=Array['isArray'](_0x588694['parents'])&&_0x588694['parents']['length']>0x1,_0x457bb6=_0x1e17f0?'git\x20revert\x20--no-commit\x20-m\x20'+(_0x2c2f54||'1')+'\x20'+_0x588694['hash']:'git\x20revert\x20--no-commit\x20'+_0x588694['hash'],_0x13634e=['Please\x20revert\x20commit\x20'+_0x588694['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).',_0x54bbc6?'2.\x20Ensure\x20branch\x20\x22'+_0x54bbc6+'\x22\x20is\x20checked\x20out\x20(fetch\x20first\x20if\x20needed).':'2.\x20Use\x20the\x20repository\x20branch\x20configured\x20for\x20this\x20environment.','3.\x20Run\x20`'+_0x457bb6+'`.','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 _0x13634e['join']('\x0a');}function navigateToTask(_0xc95284){const _0x13f7b3='task.html?id='+encodeURIComponent(_0xc95284),_0x5278a6=localStorage['getItem'](OPEN_NEW_TAB_STORAGE_KEY)==='true';if(_0x5278a6){const _0x2908db=window['open'](_0x13f7b3,'_blank');!_0x2908db&&(window['location']['href']=_0x13f7b3);return;}window['location']['href']=_0x13f7b3;}async function createRemoteRevertTask(_0x2045e3,_0x227806={}){const _0x1e3633=_0x2045e3['shortHash']||_0x2045e3['hash']['slice'](0x0,0x7),_0x19de52=buildRemoteRevertTaskInstructions(_0x2045e3,_0x227806),_0x49a2bf={'name':'Revert\x20'+_0x1e3633+'\x20in\x20'+state['selectedRepo'],'environment':state['selectedEnvironment'],'task_type':'manual','parameters':{'instructions':_0x19de52}},_0x821a5f=elements['revertBtn']?.['textContent']||'Revert\x20via\x20task';elements['revertBtn']&&(elements['revertBtn']['disabled']=!![],elements['revertBtn']['textContent']='Creating\x20task...');try{const _0x41b379=await API['createTask'](_0x49a2bf),_0x4e7daa=_0x41b379?.['taskId'];if(!_0x4e7daa)throw new Error('Task\x20created\x20but\x20no\x20task\x20ID\x20was\x20returned');Utils['showSuccess']('Revert\x20task\x20created'),navigateToTask(_0x4e7daa);}catch(_0xee835b){if(_0xee835b?.['error']==='git_connections_required'&&Array['isArray'](_0xee835b['providers'])&&_0xee835b['providers']['length']>0x0){const _0x248e06=_0xee835b['providers']['map'](_0x4967c9=>_0x4967c9['displayName']||_0x4967c9['provider']||_0x4967c9['name']||'provider')['join'](',\x20');throw new Error('Git\x20connection\x20required:\x20'+_0x248e06+'.\x20Connect\x20account(s)\x20in\x20Settings\x20and\x20retry.');}throw _0xee835b;}finally{elements['revertBtn']&&(elements['revertBtn']['disabled']=![],elements['revertBtn']['textContent']=_0x821a5f);}}function handleSearchInput(_0x1c5ab3){const _0x3aaf74=_0x1c5ab3['target']['value']['trim']();elements['clearSearchBtn']['hidden']=!_0x3aaf74,searchTimer&&clearTimeout(searchTimer),searchTimer=setTimeout(()=>{state['pagination']['search']=_0x3aaf74,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(_0x58fc26){const _0x1761f2=state['pagination']['offset']+_0x58fc26*state['pagination']['limit'];if(_0x1761f2<0x0)return;state['pagination']['offset']=_0x1761f2,loadHistory({'keepSelection':![]});}async function handleCopyHash(){if(!state['commitDetail']?.['commit']?.['hash'])return;const _0x13a1a8=await Utils['copyToClipboard'](state['commitDetail']['commit']['hash']);if(_0x13a1a8)Utils['showSuccess']('Commit\x20hash\x20copied');}async function handleRevertCommit(){if(!state['commitDetail']?.['commit']?.['hash'])return;const _0x24f133=state['commitDetail']['commit'],_0x143403=_0x24f133['shortHash']||_0x24f133['hash']['slice'](0x0,0x7),_0x39b628={};_0x24f133['parents']&&_0x24f133['parents']['length']>0x1&&(_0x39b628['mainline']=elements['mainlineSelect']['value']||'1');if(isSelectedCommitRemoteSource()){const _0x4d124d=getSelectedBranchForRevertTask(),_0x5b48eb=_0x39b628['mainline']?'\x20using\x20mainline\x20parent\x20'+_0x39b628['mainline']:'',_0x3e7b5b=_0x4d124d?'\x20on\x20branch\x20\x22'+_0x4d124d+'\x22':'',_0x283fac='Create\x20a\x20revert\x20task\x20for\x20commit\x20'+_0x143403+_0x3e7b5b+_0x5b48eb+'?\x20The\x20task\x20will\x20apply\x20the\x20revert\x20without\x20committing\x20so\x20it\x20can\x20be\x20approved\x20and\x20pushed\x20later.',_0x48f59d=await ConfirmDialog['show']({'title':'Create\x20Revert\x20Task','message':_0x283fac,'confirmText':'Create\x20Task','cancelText':'Cancel','danger':!![]});if(!_0x48f59d)return;try{await createRemoteRevertTask(_0x24f133,_0x39b628);}catch(_0x29130d){Utils['showError'](_0x29130d['message']||'Failed\x20to\x20create\x20revert\x20task');}return;}const _0x5bc183='Revert\x20commit\x20'+_0x143403+'?\x20This\x20will\x20create\x20a\x20new\x20commit\x20that\x20undoes\x20these\x20changes.',_0x210f98=await ConfirmDialog['show']({'title':'Revert\x20Commit','message':_0x5bc183,'confirmText':'Revert','cancelText':'Cancel','danger':!![]});if(!_0x210f98)return;try{await API['revertEnvironmentRepoCommit'](state['selectedEnvironment'],state['selectedRepo'],_0x24f133['hash'],_0x39b628),Utils['showSuccess']('Commit\x20reverted'),state['pagination']['offset']=0x0,await loadHistory({'keepSelection':![]});}catch(_0x47763e){Utils['showError'](_0x47763e['message']||'Failed\x20to\x20revert\x20commit');}}function parsePatchContent(_0x5b80b8){const _0x306481=[],_0x4b4270=_0x5b80b8['split']('\x0a');let _0x18f03b=null,_0x3b57c5=null;for(const _0x86a3a of _0x4b4270){if(_0x86a3a['startsWith']('diff\x20--git')){_0x18f03b&&_0x3b57c5&&_0x18f03b['hunks']['push'](_0x3b57c5);_0x18f03b&&_0x306481['push'](_0x18f03b);const _0xbfaad4=_0x86a3a['match'](/diff --git a\/(.+?) b\/(.+)/);_0x18f03b={'oldPath':_0xbfaad4?_0xbfaad4[0x1]:'','newPath':_0xbfaad4?_0xbfaad4[0x2]:'','hunks':[],'isDeleted':![]},_0x3b57c5=null;}else{if(_0x86a3a['startsWith']('deleted\x20file\x20mode')&&_0x18f03b)_0x18f03b['isDeleted']=!![];else{if(_0x86a3a['startsWith']('@@'))_0x3b57c5&&_0x18f03b&&_0x18f03b['hunks']['push'](_0x3b57c5),_0x3b57c5={'header':_0x86a3a,'lines':[]};else _0x3b57c5&&_0x3b57c5['lines']['push'](_0x86a3a);}}}return _0x18f03b&&_0x3b57c5&&_0x18f03b['hunks']['push'](_0x3b57c5),_0x18f03b&&_0x306481['push'](_0x18f03b),_0x306481;}function parseHunkHeader(_0xa69976){const _0xed976e=_0xa69976['match'](/@@ -(\d+),?\d* \+(\d+),?\d* @@/);if(_0xed976e)return{'oldStart':parseInt(_0xed976e[0x1],0xa),'newStart':parseInt(_0xed976e[0x2],0xa)};return{'oldStart':0x1,'newStart':0x1};}function highlightDiffLine(_0x3daaca,_0x2955ec){const _0x48dbb0=window['hljs']||(typeof hljs!=='undefined'?hljs:null);if(_0x48dbb0&&_0x2955ec)try{const _0x46e1c0=_0x48dbb0['getLanguage'](_0x2955ec)?_0x2955ec:null;if(_0x46e1c0)return _0x48dbb0['highlight'](_0x3daaca,{'language':_0x46e1c0})['value'];}catch(_0x5d5323){console['error']('Diff\x20syntax\x20highlighting\x20error:',_0x5d5323);}return Utils['escapeHtml'](_0x3daaca);}function computeWordDiff(_0x23d2bb,_0x48dac4){const _0x426f00=_0x38b1d7=>{const _0x57d62a=[];let _0x301905='',_0x4e0f65=![];for(let _0x9b5258=0x0;_0x9b5258<_0x38b1d7['length'];_0x9b5258++){const _0x2edcc0=_0x38b1d7[_0x9b5258],_0x571862=/\s/['test'](_0x2edcc0);if(_0x301905==='')_0x301905=_0x2edcc0,_0x4e0f65=_0x571862;else _0x571862===_0x4e0f65?_0x301905+=_0x2edcc0:(_0x57d62a['push'](_0x301905),_0x301905=_0x2edcc0,_0x4e0f65=_0x571862);}return _0x301905&&_0x57d62a['push'](_0x301905),_0x57d62a;},_0x4c0668=_0x426f00(_0x23d2bb),_0x1e60c7=_0x426f00(_0x48dac4),_0x2d9f84=_0x4c0668['length'],_0x4b3e2d=_0x1e60c7['length'],_0x6bc859=Array(_0x2d9f84+0x1)['fill'](null)['map'](()=>Array(_0x4b3e2d+0x1)['fill'](0x0));for(let _0x1ee455=0x1;_0x1ee455<=_0x2d9f84;_0x1ee455++){for(let _0x53ffcc=0x1;_0x53ffcc<=_0x4b3e2d;_0x53ffcc++){_0x4c0668[_0x1ee455-0x1]===_0x1e60c7[_0x53ffcc-0x1]?_0x6bc859[_0x1ee455][_0x53ffcc]=_0x6bc859[_0x1ee455-0x1][_0x53ffcc-0x1]+0x1:_0x6bc859[_0x1ee455][_0x53ffcc]=Math['max'](_0x6bc859[_0x1ee455-0x1][_0x53ffcc],_0x6bc859[_0x1ee455][_0x53ffcc-0x1]);}}const _0x3c4e68={'old':[],'new':[]};let _0x4cd0f7=_0x2d9f84,_0x5a6023=_0x4b3e2d;const _0x1bed6c=[],_0x5285e9=[];while(_0x4cd0f7>0x0||_0x5a6023>0x0){if(_0x4cd0f7>0x0&&_0x5a6023>0x0&&_0x4c0668[_0x4cd0f7-0x1]===_0x1e60c7[_0x5a6023-0x1])_0x1bed6c['unshift']({'type':'equal','text':_0x4c0668[_0x4cd0f7-0x1]}),_0x5285e9['unshift']({'type':'equal','text':_0x1e60c7[_0x5a6023-0x1]}),_0x4cd0f7--,_0x5a6023--;else{if(_0x5a6023>0x0&&(_0x4cd0f7===0x0||_0x6bc859[_0x4cd0f7][_0x5a6023-0x1]>=_0x6bc859[_0x4cd0f7-0x1][_0x5a6023]))_0x5285e9['unshift']({'type':'insert','text':_0x1e60c7[_0x5a6023-0x1]}),_0x5a6023--;else _0x4cd0f7>0x0&&(_0x1bed6c['unshift']({'type':'delete','text':_0x4c0668[_0x4cd0f7-0x1]}),_0x4cd0f7--);}}return _0x3c4e68['old']=_0x1bed6c,_0x3c4e68['new']=_0x5285e9,_0x3c4e68;}function renderDiffLineWithWordHighlight(_0x235b39,_0x44153f,_0x241239,_0x22bae9){if(!_0x44153f||_0x44153f['length']===0x0)return highlightDiffLine(_0x235b39,_0x22bae9);let _0x8f47aa='';const _0x141aba=_0x241239==='add'?'diff-word-add':'diff-word-remove',_0x2cdd62=_0x241239==='add'?'insert':'delete';for(const _0x53f067 of _0x44153f){const _0x2fee11=Utils['escapeHtml'](_0x53f067['text']);_0x53f067['type']===_0x2cdd62?_0x8f47aa+='<span\x20class=\x22'+_0x141aba+'\x22>'+_0x2fee11+'</span>':_0x8f47aa+=_0x2fee11;}return _0x8f47aa;}function getFileLanguage(_0x17761d){const _0x8f72ab=_0x17761d['split']('.')['pop']()['toLowerCase'](),_0x168e72={'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 _0x168e72[_0x8f72ab]||null;}function calculateDiffStats(_0x557608){let _0x10c52c=0x0,_0x298a4c=0x0,_0x189fe1=0x0;return _0x557608['forEach'](_0x5cc530=>{let _0x424c14=0x0,_0x426eca=0x0;_0x5cc530['hunks']['forEach'](_0x156a8a=>{_0x156a8a['lines']['forEach'](_0xe6f197=>{if(_0xe6f197['startsWith']('+'))_0x424c14+=0x1;else{if(_0xe6f197['startsWith']('-'))_0x426eca+=0x1;}});}),(_0x424c14+_0x426eca>0x0||_0x5cc530['isDeleted'])&&(_0x189fe1+=0x1),_0x10c52c+=_0x424c14,_0x298a4c+=_0x426eca;}),{'additions':_0x10c52c,'deletions':_0x298a4c,'files':_0x189fe1};}function renderUnifiedDiff(_0x3732e2,_0xf8f6b1,_0x5cfedb=0x0,_0x79e4e7={}){return _0x3732e2['map']((_0x37d5f3,_0x4c71a2)=>{const _0x3cfb4c=_0x5cfedb+_0x4c71a2,_0x383c5f=_0x37d5f3['newPath']||_0x37d5f3['oldPath']||'unknown',_0x1bea60='diff-'+_0xf8f6b1+'-'+_0x3cfb4c,_0x1d6b41=getFileLanguage(_0x383c5f),{additions:_0x267630,deletions:_0x3e8d6e}=calculateDiffStats([_0x37d5f3]),_0x4a20c8=getCollapsedState(_0xf8f6b1,_0x383c5f,_0x79e4e7['defaultCollapsed']),_0xc1437=getFileStatus(_0x37d5f3,_0x267630,_0x3e8d6e),_0x1285d1=_0xc1437==='added'?'A':_0xc1437==='deleted'?'D':'M',_0x411bf7=_0x37d5f3['hunks']['map'](_0x4661f5=>{const {oldStart:_0x562447,newStart:_0x241250}=parseHunkHeader(_0x4661f5['header']);let _0x33b0c0=_0x562447,_0x45473c=_0x241250;const _0x45059f=_0x4661f5['lines']['map'](_0x2c9a09=>({'line':_0x2c9a09,'type':_0x2c9a09['startsWith']('+')?'add':_0x2c9a09['startsWith']('-')?'remove':_0x2c9a09['startsWith']('\x5c')?'meta':'context'}));let _0x1e6a67=0x0;while(_0x1e6a67<_0x45059f['length']){if(_0x45059f[_0x1e6a67]['type']==='remove'){let _0x73e166=_0x1e6a67,_0x40ae37=_0x1e6a67;while(_0x40ae37<_0x45059f['length']&&_0x45059f[_0x40ae37]['type']==='remove')_0x40ae37++;let _0x2874d4=_0x40ae37,_0xfb0473=_0x2874d4;while(_0xfb0473<_0x45059f['length']&&_0x45059f[_0xfb0473]['type']==='add')_0xfb0473++;const _0x2fa040=_0x40ae37-_0x73e166,_0x407d3a=_0xfb0473-_0x2874d4,_0x1278d7=Math['min'](_0x2fa040,_0x407d3a);for(let _0x293404=0x0;_0x293404<_0x1278d7;_0x293404++){const _0x367a66=_0x45059f[_0x73e166+_0x293404]['line']['substring'](0x1),_0x116842=_0x45059f[_0x2874d4+_0x293404]['line']['substring'](0x1),_0x212e24=computeWordDiff(_0x367a66,_0x116842);_0x45059f[_0x73e166+_0x293404]['wordDiff']=_0x212e24['old'],_0x45059f[_0x2874d4+_0x293404]['wordDiff']=_0x212e24['new'];}_0x1e6a67=_0xfb0473;}else _0x1e6a67++;}const _0x482e5a=_0x45059f['map'](_0x4c1c2f=>{const _0x49d094=_0x4c1c2f['line'];if(_0x49d094['startsWith']('+')){const _0x42c431=_0x49d094['substring'](0x1),_0xd0348a=_0x4c1c2f['wordDiff']?renderDiffLineWithWordHighlight(_0x42c431,_0x4c1c2f['wordDiff'],'add',_0x1d6b41):highlightDiffLine(_0x42c431,_0x1d6b41),_0x20c84d='<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>'+_0x45473c+'</span><span\x20class=\x22diff-line-content\x22><span\x20class=\x22diff-prefix\x22>+</span>'+_0xd0348a+'</span></div>';return _0x45473c+=0x1,_0x20c84d;}if(_0x49d094['startsWith']('-')){const _0x196e0e=_0x49d094['substring'](0x1),_0x3a9f3f=_0x4c1c2f['wordDiff']?renderDiffLineWithWordHighlight(_0x196e0e,_0x4c1c2f['wordDiff'],'remove',_0x1d6b41):highlightDiffLine(_0x196e0e,_0x1d6b41),_0x1ac6f9='<div\x20class=\x22diff-line\x20diff-remove\x22><span\x20class=\x22diff-line-num\x20diff-line-num-old\x22>'+_0x33b0c0+'</span><span\x20class=\x22diff-line-num\x20diff-line-num-new\x22></span><span\x20class=\x22diff-line-content\x22><span\x20class=\x22diff-prefix\x22>-</span>'+_0x3a9f3f+'</span></div>';return _0x33b0c0+=0x1,_0x1ac6f9;}if(_0x49d094['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'](_0x49d094)+'</span></div>';const _0x1e644c=_0x49d094['startsWith']('\x20')?_0x49d094['substring'](0x1):_0x49d094,_0x5bb542=highlightDiffLine(_0x1e644c,_0x1d6b41),_0x526bba='<div\x20class=\x22diff-line\x20diff-context\x22><span\x20class=\x22diff-line-num\x20diff-line-num-old\x22>'+_0x33b0c0+'</span><span\x20class=\x22diff-line-num\x20diff-line-num-new\x22>'+_0x45473c+'</span><span\x20class=\x22diff-line-content\x22>\x20'+_0x5bb542+'</span></div>';return _0x33b0c0+=0x1,_0x45473c+=0x1,_0x526bba;})['join']('');return'<div\x20class=\x22diff-hunk\x22><div\x20class=\x22diff-hunk-header\x22>'+Utils['escapeHtml'](_0x4661f5['header'])+'</div>'+_0x482e5a+'</div>';})['join'](''),_0x38df11=_0x411bf7||'<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-'+_0x1bea60+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-header\x22\x20data-diff-id=\x22'+_0x1bea60+'\x22\x20data-file-name=\x22'+Utils['escapeHtml'](_0x383c5f)+'\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'+_0xc1437+'\x22>'+_0x1285d1+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-diff-name\x22>'+Utils['escapeHtml'](_0x383c5f)+'</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>+'+_0x267630+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22diff-del\x22>-'+_0x3e8d6e+'</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'+_0x1bea60+'\x22\x20data-collapsed=\x22'+_0x4a20c8+'\x22\x20type=\x22button\x22\x20aria-label=\x22'+(_0x4a20c8?'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'+(_0x4a20c8?'collapsed':'')+'\x22\x20id=\x22'+_0x1bea60+'\x22>'+_0x38df11+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20';})['join']('');}function renderSplitDiff(_0x13450c,_0x503db3,_0x52c534=0x0,_0x2e2442={}){return _0x13450c['map']((_0x4b59cf,_0x1c5913)=>{const _0x3bb758=_0x52c534+_0x1c5913,_0x46ecf3=_0x4b59cf['newPath']||_0x4b59cf['oldPath']||'unknown',_0x6418a5='diff-'+_0x503db3+'-'+_0x3bb758,_0x165e3b=getFileLanguage(_0x46ecf3),{additions:_0x3754b4,deletions:_0x393c26}=calculateDiffStats([_0x4b59cf]),_0x440461=getCollapsedState(_0x503db3,_0x46ecf3,_0x2e2442['defaultCollapsed']),_0x279032=getFileStatus(_0x4b59cf,_0x3754b4,_0x393c26),_0x7dd63=_0x279032==='added'?'A':_0x279032==='deleted'?'D':'M',_0x237e0f=_0x4b59cf['hunks']['map'](_0x3b2021=>{const {oldStart:_0x2022bf,newStart:_0x53086c}=parseHunkHeader(_0x3b2021['header']);let _0x44b168=_0x2022bf,_0x260e12=_0x53086c;const _0x203621=[],_0x367876=_0x3b2021['lines'];let _0xcb647e=0x0;while(_0xcb647e<_0x367876['length']){const _0x2b48d4=_0x367876[_0xcb647e];if(_0x2b48d4['startsWith']('\x20')){const _0x1c4579=_0x2b48d4['substring'](0x1);_0x203621['push'](renderSplitRow({'type':'context','lineNum':_0x44b168,'content':_0x1c4579},{'type':'context','lineNum':_0x260e12,'content':_0x1c4579},_0x165e3b)),_0x44b168+=0x1,_0x260e12+=0x1,_0xcb647e+=0x1;continue;}if(_0x2b48d4['startsWith']('-')){const _0x38241e=[];while(_0xcb647e<_0x367876['length']&&_0x367876[_0xcb647e]['startsWith']('-')){_0x38241e['push'](_0x367876[_0xcb647e]['substring'](0x1)),_0xcb647e+=0x1;}const _0x3bd39c=[];let _0x429e85=_0xcb647e;while(_0x429e85<_0x367876['length']&&_0x367876[_0x429e85]['startsWith']('+')){_0x3bd39c['push'](_0x367876[_0x429e85]['substring'](0x1)),_0x429e85+=0x1;}const _0x4ea6ce=Math['max'](_0x38241e['length'],_0x3bd39c['length']);for(let _0x5af2f4=0x0;_0x5af2f4<_0x4ea6ce;_0x5af2f4++){const _0x170c20=_0x38241e[_0x5af2f4]?{'type':'remove','lineNum':_0x44b168++,'content':_0x38241e[_0x5af2f4]}:{'type':'empty','lineNum':'','content':''},_0x3bbca5=_0x3bd39c[_0x5af2f4]?{'type':'add','lineNum':_0x260e12++,'content':_0x3bd39c[_0x5af2f4]}:{'type':'empty','lineNum':'','content':''};_0x203621['push'](renderSplitRow(_0x170c20,_0x3bbca5,_0x165e3b));}_0xcb647e=_0x429e85;continue;}if(_0x2b48d4['startsWith']('+')){const _0x1ecf95=[];while(_0xcb647e<_0x367876['length']&&_0x367876[_0xcb647e]['startsWith']('+')){_0x1ecf95['push'](_0x367876[_0xcb647e]['substring'](0x1)),_0xcb647e+=0x1;}_0x1ecf95['forEach'](_0x396f68=>{_0x203621['push'](renderSplitRow({'type':'empty','lineNum':'','content':''},{'type':'add','lineNum':_0x260e12++,'content':_0x396f68},_0x165e3b));});continue;}if(_0x2b48d4['startsWith']('\x5c')){_0x203621['push'](renderSplitRow({'type':'meta','lineNum':'','content':_0x2b48d4},{'type':'meta','lineNum':'','content':_0x2b48d4},_0x165e3b)),_0xcb647e+=0x1;continue;}_0xcb647e+=0x1;}const _0x6ee43=_0x203621['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'](_0x3b2021['header'])+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22split-diff-table\x22>'+_0x6ee43+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20';})['join'](''),_0x5b7b25=_0x237e0f||'<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-'+_0x6418a5+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-header\x22\x20data-diff-id=\x22'+_0x6418a5+'\x22\x20data-file-name=\x22'+Utils['escapeHtml'](_0x46ecf3)+'\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'+_0x279032+'\x22>'+_0x7dd63+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-diff-name\x22>'+Utils['escapeHtml'](_0x46ecf3)+'</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>+'+_0x3754b4+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22diff-del\x22>-'+_0x393c26+'</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'+_0x6418a5+'\x22\x20data-collapsed=\x22'+_0x440461+'\x22\x20type=\x22button\x22\x20aria-label=\x22'+(_0x440461?'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'+(_0x440461?'collapsed':'')+'\x22\x20id=\x22'+_0x6418a5+'\x22>'+_0x5b7b25+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20';})['join']('');}function renderSplitRow(_0x3cbac3,_0x4088b9,_0x43a88c){return'\x0a\x20\x20\x20\x20<div\x20class=\x22split-diff-row\x22>\x0a\x20\x20\x20\x20\x20\x20'+renderSplitCell(_0x3cbac3,_0x43a88c)+'\x0a\x20\x20\x20\x20\x20\x20'+renderSplitCell(_0x4088b9,_0x43a88c)+'\x0a\x20\x20\x20\x20</div>\x0a\x20\x20';}function renderSplitCell(_0x2dc2f8,_0xf674d8){const _0x409b1a='split-'+_0x2dc2f8['type'],_0x49a779=_0x2dc2f8['lineNum']===0x0?'':_0x2dc2f8['lineNum'];let _0x286be3='&nbsp;';if(_0x2dc2f8['type']==='meta')_0x286be3=Utils['escapeHtml'](_0x2dc2f8['content']);else _0x2dc2f8['type']!=='empty'&&(_0x286be3=highlightDiffLine(_0x2dc2f8['content'],_0xf674d8));return'\x0a\x20\x20\x20\x20<div\x20class=\x22split-diff-cell\x20'+_0x409b1a+'\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22split-line-num\x22>'+_0x49a779+'</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22split-line-content\x22>'+_0x286be3+'</span>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20';}function bindDiffToggleHandlers(_0x2160b2){const _0x181f38=elements['diffContainer']['querySelectorAll']('.file-diff-header');_0x181f38['forEach'](_0xdd105a=>{if(_0xdd105a['dataset']['bound']==='true')return;_0xdd105a['dataset']['bound']='true',_0xdd105a['addEventListener']('click',_0x1a0352=>{if(_0x1a0352['target']['closest']('.file-diff-toggle-btn'))return;const _0x2dc63d=_0xdd105a['dataset']['diffId'];toggleDiff(_0x2dc63d,_0xdd105a['dataset']['fileName'],_0x2160b2);});});const _0x15fc78=elements['diffContainer']['querySelectorAll']('.file-diff-toggle-btn');_0x15fc78['forEach'](_0x64c472=>{if(_0x64c472['dataset']['bound']==='true')return;_0x64c472['dataset']['bound']='true',_0x64c472['addEventListener']('click',_0x331e83=>{_0x331e83['stopPropagation']();const _0x250d5a=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x64c472['dataset']['diffId']+'\x22]'),_0xc6da97=_0x250d5a?.['dataset']['fileName']||'';toggleDiff(_0x64c472['dataset']['diffId'],_0xc6da97,_0x2160b2);});});}function toggleDiff(_0x59134a,_0x43dfec,_0xc9e1a5){const _0x3a40b8=document['getElementById'](_0x59134a),_0x3b6d8b=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x59134a+'\x22]'),_0x116955=_0x3b6d8b?.['querySelector']('.file-diff-toggle-btn');if(!_0x3a40b8)return;const _0x2a70f5=_0x3a40b8['classList']['toggle']('collapsed');_0x116955&&(_0x116955['dataset']['collapsed']=String(_0x2a70f5),_0x116955['setAttribute']('aria-label',_0x2a70f5?'Expand':'Collapse'));const _0x3ba6eb=getStorageKey(_0xc9e1a5,_0x43dfec);localStorage['setItem'](_0x3ba6eb,String(_0x2a70f5));}function setAllDiffCollapsed(_0x3792d7){if(!state['commitDetail']?.['commit']?.['hash'])return;const _0x39dd4d='git-history-'+state['commitDetail']['commit']['hash'];if(state['diffRender']?.['files']?.['length']){const _0x34d094=buildCollapsedStateUpdates({'files':state['diffRender']['files'],'collapsed':_0x3792d7,'storageKeyPrefix':_0x39dd4d,'getStorageKey':getStorageKey});_0x34d094['forEach'](({key:_0x729c67,value:_0x42e2df})=>{localStorage['setItem'](_0x729c67,_0x42e2df);});}const _0x51e3d3=elements['diffContainer']['querySelectorAll']('.file-diff-content');_0x51e3d3['forEach'](_0x5349a6=>{_0x5349a6['classList']['toggle']('collapsed',_0x3792d7);const _0x4b055d=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x5349a6['id']+'\x22]'),_0x1719d3=_0x4b055d?.['querySelector']('.file-diff-toggle-btn'),_0x1f1a52=_0x4b055d?.['dataset']['fileName']||'';_0x1719d3&&(_0x1719d3['dataset']['collapsed']=String(_0x3792d7),_0x1719d3['setAttribute']('aria-label',_0x3792d7?'Expand':'Collapse')),_0x1f1a52&&localStorage['setItem'](getStorageKey(_0x39dd4d,_0x1f1a52),String(_0x3792d7));});}function getStorageKey(_0x574d7b,_0x222824){return _0x574d7b+'-'+safeBase64(_0x222824);}function getCollapsedState(_0x1603fb,_0x3f7f23,_0x1ab779=![]){const _0x3c6f46=localStorage['getItem'](getStorageKey(_0x1603fb,_0x3f7f23));if(_0x3c6f46===null)return Boolean(_0x1ab779);return _0x3c6f46==='true';}function safeBase64(_0x1d7615){try{return btoa(unescape(encodeURIComponent(_0x1d7615)));}catch(_0x1e6791){return btoa(_0x1d7615);}}function formatDate(_0x723c17){if(!_0x723c17)return'';const _0x20c360=new Date(_0x723c17);if(Number['isNaN'](_0x20c360['getTime']()))return _0x723c17;return _0x20c360['toLocaleString']('en-US',{'month':'short','day':'numeric','year':'numeric','hour':'2-digit','minute':'2-digit'});}function renderLoadingSkeletons(_0x277a66){return Array(_0x277a66)['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(_0x76b963){if(elements['fileNavToggle']?.['disabled'])return;_0x76b963['stopPropagation']();const _0x355bc0=elements['fileNavSidebar']?.['classList']['toggle']('open');_0x355bc0&&renderFileNavList();}function closeFileNav(){elements['fileNavSidebar']?.['classList']['remove']('open');}function toggleMaximize(){if(!elements['gitHistoryBody'])return;const _0xfeed1=elements['gitHistoryBody']['classList']['toggle']('maximized'),_0x3fd024=elements['maximizeBtn']?.['querySelector']('.maximize-icon'),_0x3da558=elements['maximizeBtn']?.['querySelector']('.restore-icon');_0x3fd024&&_0x3da558&&(_0x3fd024['hidden']=_0xfeed1,_0x3da558['hidden']=!_0xfeed1),elements['maximizeBtn']&&(elements['maximizeBtn']['title']=_0xfeed1?'Restore\x20diff\x20panel\x20(Esc\x20or\x20m)':'Maximize\x20diff\x20panel\x20(m)'),localStorage['setItem']('git-history-maximized',String(_0xfeed1));}function renderFileNavList(){if(!state['commitDetail']?.['files']||!elements['fileNavList'])return;const _0x28a813=state['commitDetail']['files'];elements['fileNavList']['innerHTML']=_0x28a813['map']((_0x4da5d9,_0x317924)=>{const _0x48e50b=_0x4da5d9['newPath']||_0x4da5d9['oldPath']||'unknown',_0x14866f=_0x48e50b['split']('/')['pop'](),{additions:_0x2c21a3,deletions:_0x6711f}=calculateDiffStats([_0x4da5d9]),_0x555ef5=getFileStatus(_0x4da5d9,_0x2c21a3,_0x6711f),_0x1f9317=getStatusIcon(_0x555ef5);return'\x0a\x20\x20\x20\x20\x20\x20<li\x20class=\x22file-nav-item\x22\x20data-file-idx=\x22'+_0x317924+'\x22\x20data-file-name=\x22'+Utils['escapeHtml'](_0x48e50b)+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-nav-icon\x20'+_0x555ef5+'\x22>'+_0x1f9317+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-nav-name\x22\x20title=\x22'+Utils['escapeHtml'](_0x48e50b)+'\x22>'+Utils['escapeHtml'](_0x14866f)+'</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'+(_0x2c21a3>0x0?'<span\x20class=\x22add\x22>+'+_0x2c21a3+'</span>':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x6711f>0x0?'<span\x20class=\x22del\x22>-'+_0x6711f+'</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'](_0xa5b84c=>{_0xa5b84c['addEventListener']('click',()=>{const _0x19fd53=parseInt(_0xa5b84c['dataset']['fileIdx']||'0',0xa),_0x526180='git-history-'+state['commitDetail']['commit']['hash'],_0x261592='diff-'+_0x526180+'-'+_0x19fd53;ensureLazyDiffFileRendered(_0x19fd53);const _0x46036e=document['getElementById'](_0x261592);if(_0x46036e){if(_0x46036e['classList']['contains']('collapsed')){const _0x31adc6=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x261592+'\x22]'),_0x3174e9=_0x31adc6?.['dataset']['fileName']||'';toggleDiff(_0x261592,_0x3174e9,_0x526180);}const _0x668ca7=_0x46036e['closest']('.file-diff');_0x668ca7&&(_0x668ca7['scrollIntoView']({'behavior':'smooth','block':'start'}),_0x668ca7['classList']['add']('highlighted'),setTimeout(()=>_0x668ca7['classList']['remove']('highlighted'),0x5dc));}closeFileNav();});});}function getFileStatus(_0x15d907,_0x2ecebd,_0x29a0bf){if(_0x15d907['isDeleted'])return'deleted';if(_0x2ecebd>0x0&&_0x29a0bf===0x0)return'added';return'modified';}function getStatusIcon(_0x40d537){switch(_0x40d537){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(_0x599186){if(!_0x599186)return null;const _0x5df74d=_0x599186['toLowerCase']();if(/^feat(\(|:|\s)/['test'](_0x5df74d)||_0x5df74d['includes']('add\x20')||_0x5df74d['includes']('implement'))return'feat';if(/^fix(\(|:|\s)/['test'](_0x5df74d)||_0x5df74d['includes']('bug')||_0x5df74d['includes']('patch'))return'fix';if(/^refactor(\(|:|\s)/['test'](_0x5df74d)||_0x5df74d['includes']('refactor')||_0x5df74d['includes']('restructure'))return'refactor';if(/^docs?(\(|:|\s)/['test'](_0x5df74d)||_0x5df74d['includes']('readme')||_0x5df74d['includes']('documentation'))return'docs';if(/^test(\(|:|\s)/['test'](_0x5df74d)||_0x5df74d['includes']('test'))return'test';if(/^chore(\(|:|\s)/['test'](_0x5df74d)||_0x5df74d['includes']('chore')||_0x5df74d['includes']('update\x20dep'))return'chore';return null;}
@@ -1 +1 @@
1
- import{API,Utils}from'./app.js';export function updateGitStatusIndicator(_0x3caf18,_0x5384e6){const {statusIcon:_0x15c3fb,statusText:_0x46997f,branchText:_0x4a1975,authBadge:_0x1bbe6e,container:_0x202d16,commitBtn:_0x122c07,discardBtn:_0x40f42e}=_0x3caf18;if(_0x5384e6['hasUncommittedChanges']){_0x15c3fb['textContent']='⚠️',_0x46997f['textContent']='Uncommitted\x20changes';_0x202d16&&(_0x202d16['style']['cursor']='pointer',_0x202d16['title']='Click\x20to\x20view\x20uncommitted\x20changes');if(_0x122c07)_0x122c07['disabled']=![];if(_0x40f42e)_0x40f42e['disabled']=![];}else{if(_0x5384e6['ahead']>0x0){_0x15c3fb['textContent']='📤',_0x46997f['textContent']=_0x5384e6['ahead']+'\x20ahead';_0x202d16&&(_0x202d16['style']['cursor']='default',_0x202d16['title']='Repository\x20git\x20status');if(_0x122c07)_0x122c07['disabled']=!![];if(_0x40f42e)_0x40f42e['disabled']=!![];}else{if(_0x5384e6['behind']>0x0){_0x15c3fb['textContent']='📥',_0x46997f['textContent']=_0x5384e6['behind']+'\x20behind';_0x202d16&&(_0x202d16['style']['cursor']='default',_0x202d16['title']='Repository\x20git\x20status');if(_0x122c07)_0x122c07['disabled']=!![];if(_0x40f42e)_0x40f42e['disabled']=!![];}else{_0x15c3fb['textContent']='✓',_0x46997f['textContent']='Synced';_0x202d16&&(_0x202d16['style']['cursor']='default',_0x202d16['title']='Repository\x20git\x20status');if(_0x122c07)_0x122c07['disabled']=!![];if(_0x40f42e)_0x40f42e['disabled']=!![];}}}_0x4a1975&&(_0x4a1975['textContent']=_0x5384e6['branch']||'');if(_0x1bbe6e){const _0x17a183=_0x5384e6['setupRepoAuth']?.['mode'];_0x1bbe6e['classList']['remove']('auth-provider','auth-local','auth-user');if(_0x17a183==='provider')_0x1bbe6e['textContent']='App\x20Auth',_0x1bbe6e['classList']['add']('auth-provider'),_0x1bbe6e['title']=_0x5384e6['setupRepoAuth']?.['provider']?'Setup\x20repository\x20auth:\x20Git\x20Provider\x20app\x20('+_0x5384e6['setupRepoAuth']['provider']+')':'Setup\x20repository\x20auth:\x20Git\x20Provider\x20app';else _0x17a183==='user'?(_0x1bbe6e['textContent']='User\x20Auth',_0x1bbe6e['classList']['add']('auth-user'),_0x1bbe6e['title']=_0x5384e6['setupRepoAuth']?.['provider']?'Setup\x20repository\x20auth:\x20User\x20OAuth\x20('+_0x5384e6['setupRepoAuth']['provider']+')':'Setup\x20repository\x20auth:\x20User\x20OAuth'):(_0x1bbe6e['textContent']='Local\x20Auth',_0x1bbe6e['classList']['add']('auth-local'),_0x1bbe6e['title']='Setup\x20repository\x20auth:\x20Local\x20host\x20git\x20credentials');_0x1bbe6e['hidden']=![];}}export function showGitStatusError(_0x52fa00){const {statusIcon:_0x1812de,statusText:_0x583184,authBadge:_0x2da5dc}=_0x52fa00;_0x1812de['textContent']='❌',_0x583184['textContent']='Error',_0x2da5dc&&(_0x2da5dc['hidden']=!![]);}export function getFileStatusSymbol(_0x3af6f1){if(_0x3af6f1['includes']('M'))return'📝';if(_0x3af6f1['includes']('A'))return'➕';if(_0x3af6f1['includes']('D'))return'➖';return'📄';}export function renderChangedFilesList(_0x132ee6,_0x1f7fe3,_0x5f2a60='No\x20changes',_0x150356=![],_0x5d3d5e=null){if(!_0x1f7fe3||_0x1f7fe3['length']===0x0){_0x132ee6['innerHTML']='<li\x20class=\x22text-muted\x22>'+Utils['escapeHtml'](_0x5f2a60)+'</li>';return;}const _0x587e42=_0x5d3d5e?'\x20changed-file-clickable':'';_0x132ee6['innerHTML']=_0x1f7fe3['map'](_0x299c90=>{const _0x13cc58=getFileStatusSymbol(_0x299c90['status']);let _0x5ea27b=_0x299c90['filename'];return _0x150356&&_0x299c90['filename']['endsWith']('/')&&(_0x5ea27b=_0x299c90['filename']+'\x20(new\x20directory\x20with\x20contents)'),'<li\x20class=\x22changed-file-item'+_0x587e42+'\x22\x20data-filename=\x22'+Utils['escapeHtml'](_0x299c90['filename'])+'\x22>'+_0x13cc58+'\x20'+Utils['escapeHtml'](_0x5ea27b)+'</li>';})['join'](''),_0x5d3d5e&&_0x132ee6['querySelectorAll']('.changed-file-clickable')['forEach'](_0x5c0cba=>{_0x5c0cba['addEventListener']('click',()=>{_0x5d3d5e(_0x5c0cba['dataset']['filename'],_0x5c0cba);});});}export function showUncommittedChangesModal(_0x1d0476,_0x10f194,_0x208565,_0x3cea3d=null){renderChangedFilesList(_0x10f194,_0x208565,'No\x20uncommitted\x20changes',!![],_0x3cea3d),_0x1d0476['hidden']=![];}export function showCommitModal(_0x3a7eec,_0x15a375){const {userNameEl:_0xfc85c3,userEmailEl:_0x18cae3,filesListEl:_0xe381cd,messageEl:_0x5f2c51,pushCheckboxEl:_0x49e704,errorEl:_0x4cf8c6,user:_0x5c24b4,changedFiles:_0x4675c2}=_0x15a375;if(_0x4cf8c6)_0x4cf8c6['hidden']=!![];_0x5c24b4&&_0xfc85c3&&(_0xfc85c3['textContent']=_0x5c24b4['name']||_0x5c24b4['username']);_0x5c24b4&&_0x18cae3&&(_0x18cae3['textContent']=_0x5c24b4['email']||'');renderChangedFilesList(_0xe381cd,_0x4675c2,'No\x20changes\x20to\x20commit',![],_0x15a375['onFileClick']||null);if(_0x5f2c51)_0x5f2c51['value']='';if(_0x49e704)_0x49e704['checked']=!![];_0x3a7eec['hidden']=![];if(_0x5f2c51)_0x5f2c51['focus']();}export function showDiscardModal(_0x50a4f8,_0x238be5,_0x31b8b8,_0xd85d16=null){renderChangedFilesList(_0x238be5,_0x31b8b8,'No\x20changes\x20to\x20discard',![],_0xd85d16),_0x50a4f8['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(_0x3b3f48,_0x254faa){const {statusIcon:_0x478ec5,statusText:_0x267961,branchText:_0x1ded5f,authBadge:_0x55d3e3,container:_0x35d917,commitBtn:_0x3d7390,discardBtn:_0x177b23}=_0x3b3f48;if(_0x254faa['hasUncommittedChanges']){_0x478ec5['textContent']='⚠️',_0x267961['textContent']='Uncommitted\x20changes';_0x35d917&&(_0x35d917['style']['cursor']='pointer',_0x35d917['title']='Click\x20to\x20view\x20uncommitted\x20changes');if(_0x3d7390)_0x3d7390['disabled']=![];if(_0x177b23)_0x177b23['disabled']=![];}else{if(_0x254faa['ahead']>0x0){_0x478ec5['textContent']='📤',_0x267961['textContent']=_0x254faa['ahead']+'\x20ahead';_0x35d917&&(_0x35d917['style']['cursor']='default',_0x35d917['title']='Repository\x20git\x20status');if(_0x3d7390)_0x3d7390['disabled']=!![];if(_0x177b23)_0x177b23['disabled']=!![];}else{if(_0x254faa['behind']>0x0){_0x478ec5['textContent']='📥',_0x267961['textContent']=_0x254faa['behind']+'\x20behind';_0x35d917&&(_0x35d917['style']['cursor']='default',_0x35d917['title']='Repository\x20git\x20status');if(_0x3d7390)_0x3d7390['disabled']=!![];if(_0x177b23)_0x177b23['disabled']=!![];}else{_0x478ec5['textContent']='✓',_0x267961['textContent']='Synced';_0x35d917&&(_0x35d917['style']['cursor']='default',_0x35d917['title']='Repository\x20git\x20status');if(_0x3d7390)_0x3d7390['disabled']=!![];if(_0x177b23)_0x177b23['disabled']=!![];}}}_0x1ded5f&&(_0x1ded5f['textContent']=_0x254faa['branch']||'');if(_0x55d3e3){const _0x144042=_0x254faa['setupRepoAuth']?.['mode'];_0x55d3e3['classList']['remove']('auth-provider','auth-local','auth-user');if(_0x144042==='provider')_0x55d3e3['textContent']='App\x20Auth',_0x55d3e3['classList']['add']('auth-provider'),_0x55d3e3['title']=_0x254faa['setupRepoAuth']?.['provider']?'Setup\x20repository\x20auth:\x20Git\x20Provider\x20app\x20('+_0x254faa['setupRepoAuth']['provider']+')':'Setup\x20repository\x20auth:\x20Git\x20Provider\x20app';else _0x144042==='user'?(_0x55d3e3['textContent']='User\x20Auth',_0x55d3e3['classList']['add']('auth-user'),_0x55d3e3['title']=_0x254faa['setupRepoAuth']?.['provider']?'Setup\x20repository\x20auth:\x20User\x20OAuth\x20('+_0x254faa['setupRepoAuth']['provider']+')':'Setup\x20repository\x20auth:\x20User\x20OAuth'):(_0x55d3e3['textContent']='Local\x20Auth',_0x55d3e3['classList']['add']('auth-local'),_0x55d3e3['title']='Setup\x20repository\x20auth:\x20Local\x20host\x20git\x20credentials');_0x55d3e3['hidden']=![];}}export function showGitStatusError(_0x1fb612){const {statusIcon:_0x97cfe9,statusText:_0x328960,authBadge:_0x9ff6b}=_0x1fb612;_0x97cfe9['textContent']='❌',_0x328960['textContent']='Error',_0x9ff6b&&(_0x9ff6b['hidden']=!![]);}export function getFileStatusSymbol(_0x15652f){if(_0x15652f['includes']('M'))return'📝';if(_0x15652f['includes']('A'))return'➕';if(_0x15652f['includes']('D'))return'➖';return'📄';}export function renderChangedFilesList(_0x278aa4,_0x4655b8,_0x4d227a='No\x20changes',_0x10d7f3=![],_0x31c748=null){if(!_0x4655b8||_0x4655b8['length']===0x0){_0x278aa4['innerHTML']='<li\x20class=\x22text-muted\x22>'+Utils['escapeHtml'](_0x4d227a)+'</li>';return;}const _0x9e04a7=_0x31c748?'\x20changed-file-clickable':'';_0x278aa4['innerHTML']=_0x4655b8['map'](_0x2d17e4=>{const _0x556422=getFileStatusSymbol(_0x2d17e4['status']);let _0x136506=_0x2d17e4['filename'];return _0x10d7f3&&_0x2d17e4['filename']['endsWith']('/')&&(_0x136506=_0x2d17e4['filename']+'\x20(new\x20directory\x20with\x20contents)'),'<li\x20class=\x22changed-file-item'+_0x9e04a7+'\x22\x20data-filename=\x22'+Utils['escapeHtml'](_0x2d17e4['filename'])+'\x22>'+_0x556422+'\x20'+Utils['escapeHtml'](_0x136506)+'</li>';})['join'](''),_0x31c748&&_0x278aa4['querySelectorAll']('.changed-file-clickable')['forEach'](_0x3ddac5=>{_0x3ddac5['addEventListener']('click',()=>{_0x31c748(_0x3ddac5['dataset']['filename'],_0x3ddac5);});});}export function showUncommittedChangesModal(_0x2141ca,_0x3666ac,_0x30381f,_0x4ef2d4=null){renderChangedFilesList(_0x3666ac,_0x30381f,'No\x20uncommitted\x20changes',!![],_0x4ef2d4),_0x2141ca['hidden']=![];}export function showCommitModal(_0x532005,_0x12642f){const {userNameEl:_0x38dd98,userEmailEl:_0x523dda,filesListEl:_0x49a1ad,messageEl:_0x35353a,pushCheckboxEl:_0x49cb1b,errorEl:_0x1eed38,user:_0x23d77c,changedFiles:_0x488f10}=_0x12642f;if(_0x1eed38)_0x1eed38['hidden']=!![];_0x23d77c&&_0x38dd98&&(_0x38dd98['textContent']=_0x23d77c['name']||_0x23d77c['username']);_0x23d77c&&_0x523dda&&(_0x523dda['textContent']=_0x23d77c['email']||'');renderChangedFilesList(_0x49a1ad,_0x488f10,'No\x20changes\x20to\x20commit',![],_0x12642f['onFileClick']||null);if(_0x35353a)_0x35353a['value']='';if(_0x49cb1b)_0x49cb1b['checked']=!![];_0x532005['hidden']=![];if(_0x35353a)_0x35353a['focus']();}export function showDiscardModal(_0x2832f6,_0x1629a2,_0x44112e,_0x4b2fa6=null){renderChangedFilesList(_0x1629a2,_0x44112e,'No\x20changes\x20to\x20discard',![],_0x4b2fa6),_0x2832f6['hidden']=![];}export async function fetchGitStatus(){return await API['get']('/environments/git/status');}export async function fetchGitDiff(){return await API['get']('/environments/git/diff');}
@@ -34,7 +34,7 @@
34
34
  <script src="https://uicdn.toast.com/tui-image-editor/latest/tui-image-editor.js"></script>
35
35
  <script type="module" src="markdown-editor.js?v=1"></script>
36
36
  <script type="module" src="comments-widget.js?v=1"></script>
37
- <script type="module" src="index.js?v=84"></script>
37
+ <script type="module" src="index.js?v=85"></script>
38
38
  <!-- Dev QA shortcut: Ctrl+Shift+Q to launch current page in QA mode -->
39
39
  </head>
40
40
  <body>