@profoundlogic/coderflow-server 0.4.2 → 0.4.5

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 (182) hide show
  1. package/README.md +1 -1
  2. package/dist/README.md +1 -1
  3. package/dist/base-image/entrypoint.sh +2 -1
  4. package/dist/coder-server.js +1 -1
  5. package/dist/config.js +1 -1
  6. package/dist/lib/agent-keepalive.js +1 -1
  7. package/dist/lib/agent-models.js +1 -1
  8. package/dist/lib/api-keys.js +1 -1
  9. package/dist/lib/apiKeys.js +1 -1
  10. package/dist/lib/app-server-ports.js +1 -1
  11. package/dist/lib/auto-judge.js +1 -1
  12. package/dist/lib/automation-service.js +1 -0
  13. package/dist/lib/basic-auth.js +1 -1
  14. package/dist/lib/bindings.js +1 -0
  15. package/dist/lib/build-history.js +1 -1
  16. package/dist/lib/build-output-service.js +1 -1
  17. package/dist/lib/build-scheduler.js +1 -1
  18. package/dist/lib/build-service.js +1 -1
  19. package/dist/lib/ca-certificates.js +1 -1
  20. package/dist/lib/claude-oauth-refresh.js +1 -1
  21. package/dist/lib/cli/build.js +1 -1
  22. package/dist/lib/cli/config-command.js +1 -1
  23. package/dist/lib/cli/config.js +1 -1
  24. package/dist/lib/cli/create-user.js +1 -1
  25. package/dist/lib/cli/init.js +1 -1
  26. package/dist/lib/cli/jira.js +1 -1
  27. package/dist/lib/cli/license.js +1 -1
  28. package/dist/lib/cli/server-manager.js +1 -1
  29. package/dist/lib/config-migration.js +1 -1
  30. package/dist/lib/container-credential-sync.js +1 -1
  31. package/dist/lib/container-tokens.js +1 -1
  32. package/dist/lib/data-dir.js +1 -1
  33. package/dist/lib/deployment-history.js +1 -1
  34. package/dist/lib/deployment-service.js +1 -1
  35. package/dist/lib/docker-utils.js +1 -1
  36. package/dist/lib/email.js +1 -1
  37. package/dist/lib/emailTemplates.js +1 -1
  38. package/dist/lib/entitlement.js +1 -1
  39. package/dist/lib/fetch-utils.js +1 -1
  40. package/dist/lib/git-askpass.sh +16 -0
  41. package/dist/lib/git-commit-details-route.js +1 -1
  42. package/dist/lib/git-history-diff-guardrails.js +1 -1
  43. package/dist/lib/git-provider-service.js +1 -1
  44. package/dist/lib/git-provider-setup/github-setup-handler.js +1 -1
  45. package/dist/lib/git-provider-setup/index.js +1 -1
  46. package/dist/lib/git-provider-setup/setup-factory.js +1 -1
  47. package/dist/lib/git-provider-setup/setup-interface.js +1 -1
  48. package/dist/lib/git-providers/azure-devops-provider.js +1 -1
  49. package/dist/lib/git-providers/github-app-provider.js +1 -1
  50. package/dist/lib/git-providers/index.js +1 -1
  51. package/dist/lib/git-providers/provider-factory.js +1 -1
  52. package/dist/lib/git-providers/provider-interface.js +1 -1
  53. package/dist/lib/github-urls.js +1 -1
  54. package/dist/lib/group-objective-linking.js +1 -1
  55. package/dist/lib/jira-client.js +1 -1
  56. package/dist/lib/judge-blinding.js +1 -1
  57. package/dist/lib/logger.js +1 -1
  58. package/dist/lib/migration-to-scoped-rbac.js +1 -0
  59. package/dist/lib/model-fetcher.js +1 -1
  60. package/dist/lib/notifications.js +1 -1
  61. package/dist/lib/objective-context.js +1 -1
  62. package/dist/lib/oidc-auth.js +1 -1
  63. package/dist/lib/oidc-device-flow.js +1 -1
  64. package/dist/lib/passwordTokens.js +1 -1
  65. package/dist/lib/permission-resolver.js +1 -0
  66. package/dist/lib/pin-cascade.js +1 -1
  67. package/dist/lib/provider-accounts.js +1 -1
  68. package/dist/lib/provider-oauth.js +1 -1
  69. package/dist/lib/provider-profile.js +1 -1
  70. package/dist/lib/provider-token-refresh.js +1 -1
  71. package/dist/lib/request-url.js +1 -1
  72. package/dist/lib/rewind.js +1 -1
  73. package/dist/lib/role-definitions.js +1 -0
  74. package/dist/lib/roles.js +1 -1
  75. package/dist/lib/secrets.js +1 -1
  76. package/dist/lib/setup-repo-git-auth.js +1 -1
  77. package/dist/lib/state-capture.js +1 -1
  78. package/dist/lib/static-files.js +1 -1
  79. package/dist/lib/task-name-format.js +1 -1
  80. package/dist/lib/task-name-generator.js +1 -1
  81. package/dist/lib/task-source-metadata.js +1 -0
  82. package/dist/lib/teams.js +1 -0
  83. package/dist/lib/user-git-oauth.js +1 -1
  84. package/dist/lib/user-git-tokens.js +1 -1
  85. package/dist/lib/users.js +1 -1
  86. package/dist/middleware/requireAuth.js +1 -1
  87. package/dist/middleware/requireInit.js +1 -1
  88. package/dist/middleware/requirePermission.js +1 -1
  89. package/dist/package-lock.json +211 -21
  90. package/dist/package.json +3 -1
  91. package/dist/playwright.config.js +1 -0
  92. package/dist/routes/apiKeys.js +1 -1
  93. package/dist/routes/auth-oidc.js +1 -1
  94. package/dist/routes/auth.js +1 -1
  95. package/dist/routes/automations.js +1 -0
  96. package/dist/routes/bindings.js +1 -0
  97. package/dist/routes/build.js +1 -1
  98. package/dist/routes/containers.js +1 -1
  99. package/dist/routes/deploy-task.js +1 -1
  100. package/dist/routes/environment-management.js +1 -1
  101. package/dist/routes/environments.js +1 -1
  102. package/dist/routes/external-skills.js +1 -1
  103. package/dist/routes/git-credentials.js +1 -1
  104. package/dist/routes/git-oauth.js +1 -1
  105. package/dist/routes/git-provider-setup.js +1 -1
  106. package/dist/routes/health.js +1 -1
  107. package/dist/routes/jira.js +1 -1
  108. package/dist/routes/objective-management.js +1 -1
  109. package/dist/routes/password.js +1 -1
  110. package/dist/routes/prompt.js +1 -1
  111. package/dist/routes/provider-auth.js +1 -1
  112. package/dist/routes/qa.js +1 -1
  113. package/dist/routes/roles.js +1 -0
  114. package/dist/routes/settings.js +1 -1
  115. package/dist/routes/skill-management.js +1 -1
  116. package/dist/routes/skills.js +1 -1
  117. package/dist/routes/tasks.js +1 -1
  118. package/dist/routes/teams.js +1 -0
  119. package/dist/routes/templates.js +1 -1
  120. package/dist/routes/test-task.js +1 -1
  121. package/dist/routes/test.js +1 -1
  122. package/dist/routes/users.js +1 -1
  123. package/dist/routes/visualizations.js +1 -1
  124. package/dist/scripts/create-user.js +1 -1
  125. package/dist/scripts/migrate-config-to-data-dir.js +1 -1
  126. package/dist/scripts/migrate-to-scoped-rbac.js +2 -0
  127. package/dist/start.js +1 -1
  128. package/dist/start.js.bak +1381 -0
  129. package/dist/web-ui/public/activity-detail-modal.js +1 -1
  130. package/dist/web-ui/public/activity-feed.js +1 -1
  131. package/dist/web-ui/public/activity-formatters.js +1 -1
  132. package/dist/web-ui/public/agent-event-parser.js +1 -1
  133. package/dist/web-ui/public/app.js +1 -1
  134. package/dist/web-ui/public/approve-dialog.js +1 -1
  135. package/dist/web-ui/public/automation-links.js +1 -0
  136. package/dist/web-ui/public/automation-schedule.js +1 -0
  137. package/dist/web-ui/public/comments-widget.js +1 -1
  138. package/dist/web-ui/public/diff-utils.js +1 -1
  139. package/dist/web-ui/public/docs/_sidebar.md +1 -0
  140. package/dist/web-ui/public/docs/admin/automations.md +75 -0
  141. package/dist/web-ui/public/docs/admin/git-providers.md +10 -5
  142. package/dist/web-ui/public/docs/admin/installation.md +1 -1
  143. package/dist/web-ui/public/docs/admin/users-and-roles.md +14 -4
  144. package/dist/web-ui/public/environments.css +253 -125
  145. package/dist/web-ui/public/environments.html +366 -2
  146. package/dist/web-ui/public/environments.js +1 -1
  147. package/dist/web-ui/public/feedback-widget.css +42 -0
  148. package/dist/web-ui/public/feedback-widget.js +1 -1
  149. package/dist/web-ui/public/git-history-lazy-utils.js +1 -1
  150. package/dist/web-ui/public/git-history.html +15 -0
  151. package/dist/web-ui/public/git-history.js +1 -1
  152. package/dist/web-ui/public/git-status.js +1 -1
  153. package/dist/web-ui/public/index.html +27 -0
  154. package/dist/web-ui/public/index.js +1 -1
  155. package/dist/web-ui/public/login.js +1 -1
  156. package/dist/web-ui/public/markdown-editor.js +1 -1
  157. package/dist/web-ui/public/markdown-file-editor.js +1 -1
  158. package/dist/web-ui/public/modal-maximize.js +1 -1
  159. package/dist/web-ui/public/notifications.js +1 -1
  160. package/dist/web-ui/public/pr-dialog.js +1 -1
  161. package/dist/web-ui/public/roles.html +247 -0
  162. package/dist/web-ui/public/roles.js +1 -0
  163. package/dist/web-ui/public/server-health.js +1 -1
  164. package/dist/web-ui/public/settings.html +84 -1
  165. package/dist/web-ui/public/settings.js +1 -1
  166. package/dist/web-ui/public/setup-password.js +1 -1
  167. package/dist/web-ui/public/skills.css +6 -0
  168. package/dist/web-ui/public/skills.html +35 -0
  169. package/dist/web-ui/public/skills.js +1 -1
  170. package/dist/web-ui/public/sse-client.js +1 -1
  171. package/dist/web-ui/public/sse-shared-worker.js +1 -1
  172. package/dist/web-ui/public/styles.css +278 -161
  173. package/dist/web-ui/public/task.html +33 -2
  174. package/dist/web-ui/public/task.js +1 -1
  175. package/dist/web-ui/public/teams.html +285 -0
  176. package/dist/web-ui/public/teams.js +1 -0
  177. package/dist/web-ui/public/terminal.js +1 -1
  178. package/dist/web-ui/public/theme.js +1 -1
  179. package/dist/web-ui/public/users.html +87 -29
  180. package/dist/web-ui/public/users.js +1 -1
  181. package/dist/web-ui/public/variant-grouping.js +1 -1
  182. package/package.json +7 -3
@@ -1 +1 @@
1
- const _0x13f34b=_0x5844;function _0x3770(){const _0x36223d=['Dg9Rzw4','DxnLCG','mtuXntLztg1yDwG','Bg9JyxrPB24','DxnLCI1Uyw1L','BwvZC2fNzq','z2v0rwXLBwvUDej5swq','ugfZC3DVCMqGBxvZDcbIzsbHDcbSzwfZDca4ignOyxjHy3rLCNmGBg9UzW','ogDtqKrkDq','C2v0DxaTBwvZC2fNzsa','C2v0DxaTBwvZC2fNzq','mZy1nZC1mMflu0Tgwq','l2XVz2LUlMH0BwW','DMLZAwjSzq','mJC3mJq2oej3A1r2qG','CMvZzxq','rMfPBgvKihrVihzHBgLKyxrLihrVA2vUlIbqBgvHC2uGDhj5igfNywLUig9YignVBNrHy3qGEw91CIbHzg1PBMLZDhjHDg9YlG','CgfZC3DVCMq','lNnLDhvWlwHLywrLCIbW','rMfPBgvKihrVihnLDcbWyxnZD29Yzc4GugXLyxnLihrYEsbHz2fPBI4','C2v0DxaTy29UDgvUDa','y2XHC3nmAxn0','mta1odC4nZLTwxfTsKq','rMfPBgvKihrVihnLDcbWyxnZD29YzdO','C3vJy2vZCW','CxvLCNLtzwXLy3rVCG','DMfSDwu','ywrKrxzLBNrmAxn0zw5LCG','BM9Uzq','q3jLyxrLigeGC2vJDxjLihbHC3n3B3jKigzVCIb5B3vYigfJy291BNq','DxnLCI11C2vYBMfTzq','l3bHC3n3B3jKl3nLDhvW','re9nq29UDgvUDeXVywrLza','Dgv4DenVBNrLBNq','zgLZCgXHEq','nJK4mdy0nKfisuXRuq','BMfTzq','yMXVy2S','ihzPC2LIBgu','tM8GDg9Rzw4GChjVDMLKzwqUifbSzwfZzsbJAgvJAYb0AguGBgLUAYb5B3uGCMvJzwL2zwqU','y2XHC3noyw1L','nxPwAgDbAa','BgvUz3rO','C3rYAw5NAwz5','u2v0ifbHC3n3B3jK','uMvZzxqGEw91CIbWyxnZD29Yza','yNv0Dg9Uw3r5Cgu9iNn1yM1PDcjD','C2vHCMnO','yxbWBgLJyxrPB24VANnVBG','C2v0DxaTzM9YBq','DMfSAwq','zxjYB3i','y29UzMLYBs1WyxnZD29Yza','CMvTB3zL','DxnLCM5HBwu','mJGYmJGYmZbgC0rLzKK','nJCWnJe4mKXKDfnZzW','ue9tva','mtqYCuTABwnS','Bg9HzgLUzW','C3r5Bgu','z2v0','zgLZywjSzwq','C3vIBwL0','ugfZC3DVCMqGC2v0ihn1y2nLC3nMDwXSEseGuMvKAxjLy3rPBMCGDg8GBg9NAw4UlI4','zM9JDxm'];_0x3770=function(){return _0x36223d;};return _0x3770();}(function(_0x5576cc,_0x306f74){const _0x174c8a=_0x5844,_0x1748de=_0x5576cc();while(!![]){try{const _0x3605ec=-parseInt(_0x174c8a(0x1cb))/0x1*(-parseInt(_0x174c8a(0x1c1))/0x2)+parseInt(_0x174c8a(0x1d7))/0x3+-parseInt(_0x174c8a(0x1d4))/0x4+parseInt(_0x174c8a(0x1b0))/0x5*(-parseInt(_0x174c8a(0x1aa))/0x6)+-parseInt(_0x174c8a(0x1bf))/0x7*(parseInt(_0x174c8a(0x1d1))/0x8)+-parseInt(_0x174c8a(0x19d))/0x9+parseInt(_0x174c8a(0x1be))/0xa;if(_0x3605ec===_0x306f74)break;else _0x1748de['push'](_0x1748de['shift']());}catch(_0x4521a3){_0x1748de['push'](_0x1748de['shift']());}}}(_0x3770,0x95274));import{initTheme,mountThemeToggle}from'./theme.js';initTheme();const urlParams=new URLSearchParams(window[_0x13f34b(0x1cc)][_0x13f34b(0x1b6)]),token=urlParams[_0x13f34b(0x1c4)](_0x13f34b(0x1c9)),loadingEl=document[_0x13f34b(0x1cf)](_0x13f34b(0x1c2)),setupContentEl=document[_0x13f34b(0x1cf)](_0x13f34b(0x19b)),setupFormEl=document[_0x13f34b(0x1cf)](_0x13f34b(0x1b8)),setupMessageEl=document[_0x13f34b(0x1cf)](_0x13f34b(0x1d3)),userUsernameEl=document[_0x13f34b(0x1cf)](_0x13f34b(0x1a5)),userNameEl=document['getElementById'](_0x13f34b(0x1cd)),passwordInput=document[_0x13f34b(0x1cf)](_0x13f34b(0x1da)),confirmPasswordInput=document['getElementById'](_0x13f34b(0x1bb)),submitButton=setupFormEl?.[_0x13f34b(0x1a0)](_0x13f34b(0x1b5));function showMessage(_0x4bf7d1,_0x16f6f1=_0x13f34b(0x1ba)){const _0xf6522b=_0x13f34b;setupMessageEl[_0xf6522b(0x1a8)]=_0x4bf7d1,setupMessageEl[_0xf6522b(0x1af)]=_0xf6522b(0x1d2)+_0x16f6f1+_0xf6522b(0x1ad);}function _0x5844(_0x38addc,_0xd18097){_0x38addc=_0x38addc-0x199;const _0x3770a7=_0x3770();let _0x5844ac=_0x3770a7[_0x38addc];if(_0x5844['cLeIYU']===undefined){var _0x53d48e=function(_0xbcf373){const _0x1e339b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4bf7d1='',_0x16f6f1='';for(let _0x18bee6=0x0,_0x5d47c5,_0x370b51,_0x143aca=0x0;_0x370b51=_0xbcf373['charAt'](_0x143aca++);~_0x370b51&&(_0x5d47c5=_0x18bee6%0x4?_0x5d47c5*0x40+_0x370b51:_0x370b51,_0x18bee6++%0x4)?_0x4bf7d1+=String['fromCharCode'](0xff&_0x5d47c5>>(-0x2*_0x18bee6&0x6)):0x0){_0x370b51=_0x1e339b['indexOf'](_0x370b51);}for(let _0x14e86a=0x0,_0x3952af=_0x4bf7d1['length'];_0x14e86a<_0x3952af;_0x14e86a++){_0x16f6f1+='%'+('00'+_0x4bf7d1['charCodeAt'](_0x14e86a)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x16f6f1);};_0x5844['ybepGe']=_0x53d48e,_0x5844['WebihT']={},_0x5844['cLeIYU']=!![];}const _0x3343ce=_0x3770a7[0x0],_0x3cacc3=_0x38addc+_0x3343ce,_0x354e00=_0x5844['WebihT'][_0x3cacc3];return!_0x354e00?(_0x5844ac=_0x5844['ybepGe'](_0x5844ac),_0x5844['WebihT'][_0x3cacc3]=_0x5844ac):_0x5844ac=_0x354e00,_0x5844ac;}function hideMessage(){setupMessageEl['className']='setup-message';}function showError(_0x18bee6){const _0x2723a9=_0x13f34b;loadingEl[_0x2723a9(0x19c)][_0x2723a9(0x1bc)]('visible'),setupContentEl[_0x2723a9(0x1c3)][_0x2723a9(0x1a9)]='block',document[_0x2723a9(0x1cf)]('user-info')[_0x2723a9(0x1c3)][_0x2723a9(0x1a9)]=_0x2723a9(0x1a3),setupFormEl[_0x2723a9(0x1c3)]['display']='none',showMessage(_0x18bee6,_0x2723a9(0x1ba));}async function validateToken(){const _0x1b7851=_0x13f34b;if(!token){showError(_0x1b7851(0x1ae));return;}try{const _0x5d47c5=await fetch('/password/validate-token?token='+encodeURIComponent(token)),_0x370b51=await _0x5d47c5['json']();if(!_0x370b51[_0x1b7851(0x1b9)]){showError(_0x370b51[_0x1b7851(0x1ba)]||'Invalid\x20or\x20expired\x20token.\x20Please\x20request\x20a\x20new\x20password\x20setup\x20link.');return;}loadingEl[_0x1b7851(0x19c)]['remove'](_0x1b7851(0x1d6)),setupContentEl[_0x1b7851(0x1c3)][_0x1b7851(0x1a9)]=_0x1b7851(0x1ac),userUsernameEl[_0x1b7851(0x1a8)]=_0x370b51[_0x1b7851(0x1ca)][_0x1b7851(0x1bd)],userNameEl[_0x1b7851(0x1a8)]=_0x370b51['user'][_0x1b7851(0x1ab)];const _0x143aca=document[_0x1b7851(0x1a0)](_0x1b7851(0x199));_0x370b51['type']===_0x1b7851(0x1d8)?_0x143aca[_0x1b7851(0x1a8)]=_0x1b7851(0x1b4):_0x143aca[_0x1b7851(0x1a8)]=_0x1b7851(0x1a4),passwordInput[_0x1b7851(0x1c8)]();}catch(_0x14e86a){console['error']('Failed\x20to\x20validate\x20token:',_0x14e86a),showError(_0x1b7851(0x1d9));}}async function handleSubmit(_0x3952af){const _0x1cfe65=_0x13f34b;_0x3952af['preventDefault'](),hideMessage();const _0x426659=passwordInput['value'],_0x28d01c=confirmPasswordInput[_0x1cfe65(0x1a1)];if(_0x426659!==_0x28d01c){showMessage('Passwords\x20do\x20not\x20match',_0x1cfe65(0x1ba)),confirmPasswordInput[_0x1cfe65(0x1c8)]();return;}if(_0x426659[_0x1cfe65(0x1b1)]<0x8){showMessage(_0x1cfe65(0x1d0),'error'),passwordInput[_0x1cfe65(0x1c8)]();return;}submitButton[_0x1cfe65(0x1c5)]=!![],submitButton[_0x1cfe65(0x1a8)]='Setting\x20password...';try{const _0x10cb1b=await fetch(_0x1cfe65(0x1a6),{'method':_0x1cfe65(0x1c0),'headers':{'Content-Type':_0x1cfe65(0x1b7)},'body':JSON[_0x1cfe65(0x1b2)]({'token':token,'password':_0x426659})}),_0x533d1f=await _0x10cb1b['json']();if(!_0x10cb1b['ok'])throw new Error(_0x533d1f['error']||'Failed\x20to\x20set\x20password');showMessage(_0x1cfe65(0x1c7),_0x1cfe65(0x19f)),setupFormEl[_0x1cfe65(0x1d8)](),setTimeout(()=>{const _0x3b3920=_0x1cfe65;window[_0x3b3920(0x1cc)]['href']=_0x3b3920(0x1d5);},0x7d0);}catch(_0x4fea65){console[_0x1cfe65(0x1ba)](_0x1cfe65(0x19e),_0x4fea65),showMessage(_0x4fea65[_0x1cfe65(0x1ce)]||_0x1cfe65(0x19a),_0x1cfe65(0x1ba)),submitButton[_0x1cfe65(0x1c5)]=![],submitButton[_0x1cfe65(0x1a8)]=_0x1cfe65(0x1b3);}}setupFormEl&&setupFormEl[_0x13f34b(0x1a2)](_0x13f34b(0x1c6),handleSubmit);validateToken(),document['addEventListener'](_0x13f34b(0x1a7),()=>{mountThemeToggle();});
1
+ const _0x1791de=_0x1cbb;(function(_0x330bca,_0x35b4e8){const _0x5b2713=_0x1cbb,_0x50d358=_0x330bca();while(!![]){try{const _0x19e574=parseInt(_0x5b2713(0x20e))/0x1*(-parseInt(_0x5b2713(0x206))/0x2)+parseInt(_0x5b2713(0x203))/0x3+parseInt(_0x5b2713(0x1f1))/0x4*(parseInt(_0x5b2713(0x1f5))/0x5)+-parseInt(_0x5b2713(0x205))/0x6+-parseInt(_0x5b2713(0x1e7))/0x7+-parseInt(_0x5b2713(0x202))/0x8*(-parseInt(_0x5b2713(0x1f9))/0x9)+parseInt(_0x5b2713(0x208))/0xa*(parseInt(_0x5b2713(0x20b))/0xb);if(_0x19e574===_0x35b4e8)break;else _0x50d358['push'](_0x50d358['shift']());}catch(_0x55cc76){_0x50d358['push'](_0x50d358['shift']());}}}(_0x3c58,0x4bc15));function _0x1cbb(_0x3ae6b1,_0x2348b2){_0x3ae6b1=_0x3ae6b1-0x1d8;const _0x3c5859=_0x3c58();let _0x1cbb6b=_0x3c5859[_0x3ae6b1];if(_0x1cbb['TxIYAK']===undefined){var _0x18df9a=function(_0x3c02a3){const _0x3fa92a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1c5d68='',_0x1c2c7d='';for(let _0x2ca304=0x0,_0x2d44c6,_0x2d7760,_0x26ea1e=0x0;_0x2d7760=_0x3c02a3['charAt'](_0x26ea1e++);~_0x2d7760&&(_0x2d44c6=_0x2ca304%0x4?_0x2d44c6*0x40+_0x2d7760:_0x2d7760,_0x2ca304++%0x4)?_0x1c5d68+=String['fromCharCode'](0xff&_0x2d44c6>>(-0x2*_0x2ca304&0x6)):0x0){_0x2d7760=_0x3fa92a['indexOf'](_0x2d7760);}for(let _0x568d5d=0x0,_0x5d9a35=_0x1c5d68['length'];_0x568d5d<_0x5d9a35;_0x568d5d++){_0x1c2c7d+='%'+('00'+_0x1c5d68['charCodeAt'](_0x568d5d)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1c2c7d);};_0x1cbb['xxjupG']=_0x18df9a,_0x1cbb['qbWSmm']={},_0x1cbb['TxIYAK']=!![];}const _0x19faca=_0x3c5859[0x0],_0x174827=_0x3ae6b1+_0x19faca,_0x1d3103=_0x1cbb['qbWSmm'][_0x174827];return!_0x1d3103?(_0x1cbb6b=_0x1cbb['xxjupG'](_0x1cbb6b),_0x1cbb['qbWSmm'][_0x174827]=_0x1cbb6b):_0x1cbb6b=_0x1d3103,_0x1cbb6b;}import{initTheme,mountThemeToggle}from'./theme.js';initTheme();function _0x3c58(){const _0x5dd6d0=['DxnLCM5HBwu','C3vJy2vZCW','DMfSDwu','ANnVBG','re9nq29UDgvUDeXVywrLza','C2v0DxaTy29UDgvUDa','DxnLCG','Dgv4DenVBNrLBNq','sw52ywXPzcbVCIbLEhbPCMvKihrVA2vUlIbqBgvHC2uGCMvXDwvZDcbHig5LDYbWyxnZD29YzcbZzxr1CcbSAw5RlG','Bg9JyxrPB24','Bg9HzgLUzW','yMXVy2S','q3jLyxrLigeGC2vJDxjLihbHC3n3B3jKigzVCIb5B3vYigfJy291BNq','z2v0rwXLBwvUDej5swq','u2v0DgLUzYbWyxnZD29Yzc4UlG','C3rYAw5NAwz5','CgfZC3DVCMq','CMvTB3zL','C2v0DxaTBwvZC2fNzsa','rMfPBgvKihrVihzHBgLKyxrLihrVA2vUoG','DxnLCI1PBMzV','AhjLzG','zM9JDxm','mZi4nJq5m2jTyvPnza','DMLZAwjSzq','ugfZC3DVCMrZigrVig5VDcbTyxrJAa','CxvLCNLtzwXLy3rVCG','BwvZC2fNzq','yxbWBgLJyxrPB24VANnVBG','ihzPC2LIBgu','l2XVz2LUlMH0BwW','CMvZzxq','ywrKrxzLBNrmAxn0zw5LCG','nJqYmJHtvNP4sMK','C2vHCMnO','rMfPBgvKihrVihnLDcbWyxnZD29YzdO','lNnLDhvWlwHLywrLCIbW','mtKWzNzLwvbe','rMfPBgvKihrVihnLDcbWyxnZD29Yzc4GugXLyxnLihrYEsbHz2fPBI4','C3r5Bgu','zxjYB3i','mZm1n2zRrLjJyW','ue9tva','z2v0','DMfSAwq','y2XHC3nmAxn0','y2XHC3noyw1L','ugfZC3DVCMqGC2v0ihn1y2nLC3nMDwXSEseGuMvKAxjLy3rPBMCGDg8GBg9NAw4UlI4','BMfTzq','zgLZywjSzwq','nte0ng9ky1flDG','ntCWmJK0rvHbwNjh','zgLZCgXHEq','mtCZmZe2nLDuvKrUBG','mZK5mtCYAwnjz21W','C3vIBwL0','nZeYodCWr1HQrLPo','C2v0DxaTBwvZC2fNzq','BM9Uzq','nJzjwKrNuLO','rMfPBgvKihrVihnLDcbWyxnZD29Yza','BgvUz3rO','mKXNqvbJua'];_0x3c58=function(){return _0x5dd6d0;};return _0x3c58();}const urlParams=new URLSearchParams(window[_0x1791de(0x1d9)][_0x1791de(0x1f2)]),token=urlParams[_0x1791de(0x1fb)]('token'),loadingEl=document[_0x1791de(0x1dd)](_0x1791de(0x1da)),setupContentEl=document[_0x1791de(0x1dd)](_0x1791de(0x214)),setupFormEl=document[_0x1791de(0x1dd)]('setup-form'),setupMessageEl=document['getElementById'](_0x1791de(0x209)),userUsernameEl=document['getElementById']('user-username'),userNameEl=document['getElementById']('user-name'),passwordInput=document[_0x1791de(0x1dd)](_0x1791de(0x1e0)),confirmPasswordInput=document[_0x1791de(0x1dd)]('confirm-password'),submitButton=setupFormEl?.[_0x1791de(0x1ea)]('button[type=\x22submit\x22]');function showMessage(_0x1c5d68,_0x1c2c7d='error'){const _0x548f6d=_0x1791de;setupMessageEl[_0x548f6d(0x216)]=_0x1c5d68,setupMessageEl[_0x548f6d(0x1fe)]=_0x548f6d(0x1e2)+_0x1c2c7d+_0x548f6d(0x1ed);}function hideMessage(){const _0x1aa41a=_0x1791de;setupMessageEl['className']=_0x1aa41a(0x209);}function showError(_0x2ca304){const _0x13400a=_0x1791de;loadingEl['classList'][_0x13400a(0x1e1)](_0x13400a(0x1e8)),setupContentEl[_0x13400a(0x1f7)][_0x13400a(0x204)]=_0x13400a(0x1db),document[_0x13400a(0x1dd)](_0x13400a(0x1e4))['style'][_0x13400a(0x204)]=_0x13400a(0x20a),setupFormEl['style'][_0x13400a(0x204)]='none',showMessage(_0x2ca304,_0x13400a(0x1f8));}async function validateToken(){const _0x55db98=_0x1791de;if(!token){showError('No\x20token\x20provided.\x20Please\x20check\x20the\x20link\x20you\x20received.');return;}try{const _0x2d44c6=await fetch('/password/validate-token?token='+encodeURIComponent(token)),_0x2d7760=await _0x2d44c6[_0x55db98(0x212)]();if(!_0x2d7760[_0x55db98(0x1fc)]){showError(_0x2d7760[_0x55db98(0x1f8)]||_0x55db98(0x1d8));return;}loadingEl[_0x55db98(0x1fd)][_0x55db98(0x1e1)]('visible'),setupContentEl[_0x55db98(0x1f7)][_0x55db98(0x204)]=_0x55db98(0x1db),userUsernameEl[_0x55db98(0x216)]=_0x2d7760['user'][_0x55db98(0x20f)],userNameEl['textContent']=_0x2d7760[_0x55db98(0x215)][_0x55db98(0x200)];const _0x26ea1e=document[_0x55db98(0x1ea)](_0x55db98(0x1f4));_0x2d7760['type']===_0x55db98(0x1ef)?_0x26ea1e[_0x55db98(0x216)]='Reset\x20your\x20password':_0x26ea1e[_0x55db98(0x216)]=_0x55db98(0x1dc),passwordInput[_0x55db98(0x1e6)]();}catch(_0x568d5d){console[_0x55db98(0x1f8)](_0x55db98(0x1e3),_0x568d5d),showError('Failed\x20to\x20validate\x20token.\x20Please\x20try\x20again\x20or\x20contact\x20your\x20administrator.');}}async function handleSubmit(_0x5d9a35){const _0x3047d9=_0x1791de;_0x5d9a35['preventDefault'](),hideMessage();const _0x4d2e25=passwordInput[_0x3047d9(0x211)],_0x3efe0b=confirmPasswordInput[_0x3047d9(0x211)];if(_0x4d2e25!==_0x3efe0b){showMessage(_0x3047d9(0x1e9),_0x3047d9(0x1f8)),confirmPasswordInput[_0x3047d9(0x1e6)]();return;}if(_0x4d2e25[_0x3047d9(0x20d)]<0x8){showMessage('Password\x20must\x20be\x20at\x20least\x208\x20characters\x20long',_0x3047d9(0x1f8)),passwordInput[_0x3047d9(0x1e6)]();return;}submitButton[_0x3047d9(0x201)]=!![],submitButton[_0x3047d9(0x216)]=_0x3047d9(0x1de);try{const _0x1d34b6=await fetch('/password/setup',{'method':_0x3047d9(0x1fa),'headers':{'Content-Type':_0x3047d9(0x1ec)},'body':JSON[_0x3047d9(0x1df)]({'token':token,'password':_0x4d2e25})}),_0x5e3831=await _0x1d34b6['json']();if(!_0x1d34b6['ok'])throw new Error(_0x5e3831['error']||_0x3047d9(0x20c));showMessage(_0x3047d9(0x1ff),_0x3047d9(0x210)),setupFormEl[_0x3047d9(0x1ef)](),setTimeout(()=>{const _0x18c6df=_0x3047d9;window[_0x18c6df(0x1d9)][_0x18c6df(0x1e5)]=_0x18c6df(0x1ee);},0x7d0);}catch(_0x342e40){console[_0x3047d9(0x1f8)](_0x3047d9(0x1f3),_0x342e40),showMessage(_0x342e40[_0x3047d9(0x1eb)]||_0x3047d9(0x1f6),'error'),submitButton[_0x3047d9(0x201)]=![],submitButton[_0x3047d9(0x216)]='Set\x20Password';}}setupFormEl&&setupFormEl['addEventListener'](_0x1791de(0x207),handleSubmit);validateToken(),document[_0x1791de(0x1f0)](_0x1791de(0x213),()=>{mountThemeToggle();});
@@ -768,6 +768,12 @@
768
768
  color: #0f766e;
769
769
  }
770
770
 
771
+ .repo-auth-mode-badge.auth-user {
772
+ background: rgba(59, 130, 246, 0.12);
773
+ border-color: rgba(59, 130, 246, 0.35);
774
+ color: #1d4ed8;
775
+ }
776
+
771
777
  /* ============================================================
772
778
  EMPTY STATE
773
779
  ============================================================ */
@@ -67,6 +67,15 @@
67
67
  </svg>
68
68
  <span class="option-text">Users</span>
69
69
  </button>
70
+ <button type="button" class="dropdown-item admin-menu-item" onclick="window.location.href='teams.html'">
71
+ <svg class="option-icon icon-teams" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
72
+ <path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path>
73
+ <circle cx="9" cy="7" r="4"></circle>
74
+ <path d="M23 21v-2a4 4 0 0 0-3-3.87"></path>
75
+ <path d="M16 3.13a4 4 0 0 1 0 7.75"></path>
76
+ </svg>
77
+ <span class="option-text">Teams</span>
78
+ </button>
70
79
  <button type="button" class="dropdown-item admin-menu-item" onclick="window.location.href='environments.html'">
71
80
  <svg class="option-icon icon-environments" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
72
81
  <circle cx="12" cy="12" r="10"></circle>
@@ -75,6 +84,12 @@
75
84
  </svg>
76
85
  <span class="option-text">Environments</span>
77
86
  </button>
87
+ <button type="button" class="dropdown-item admin-menu-item" onclick="window.location.href='roles.html'">
88
+ <svg class="option-icon icon-roles" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
89
+ <path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path>
90
+ </svg>
91
+ <span class="option-text">Roles</span>
92
+ </button>
78
93
  <button type="button" class="dropdown-item admin-menu-item" onclick="window.location.href='settings.html'">
79
94
  <svg class="option-icon icon-server-settings" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
80
95
  <line x1="4" y1="21" x2="4" y2="14"></line>
@@ -835,5 +850,25 @@
835
850
  </div>
836
851
  </div>
837
852
  </div>
853
+
854
+ <!-- Git Connections Required Modal -->
855
+ <div id="git-connections-required-modal" class="modal" hidden>
856
+ <div class="modal-overlay"></div>
857
+ <div class="modal-content">
858
+ <div class="modal-header">
859
+ <h2 id="git-connections-title">Git Connection Required</h2>
860
+ <button type="button" class="modal-close" aria-label="Close">&times;</button>
861
+ </div>
862
+ <div class="modal-body">
863
+ <p class="git-connections-intro">Connect your account to the following Git provider to continue:</p>
864
+ <div id="git-connections-required-list" class="git-connections-required-list">
865
+ <!-- Provider cards will be populated here -->
866
+ </div>
867
+ </div>
868
+ <div class="modal-actions">
869
+ <button type="button" class="btn-secondary" id="git-connections-close-btn">Cancel</button>
870
+ </div>
871
+ </div>
872
+ </div>
838
873
  </body>
839
874
  </html>