@profoundlogic/coderflow-server 0.2.7 → 0.2.9

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 (146) hide show
  1. package/dist/coder-server.js +1 -1
  2. package/dist/config/cli-models.json +1 -0
  3. package/dist/config.js +1 -1
  4. package/dist/lib/agent-keepalive.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/basic-auth.js +1 -1
  10. package/dist/lib/build-history.js +1 -1
  11. package/dist/lib/build-output-service.js +1 -1
  12. package/dist/lib/build-scheduler.js +1 -1
  13. package/dist/lib/build-service.js +1 -1
  14. package/dist/lib/ca-certificates.js +1 -1
  15. package/dist/lib/claude-oauth-refresh.js +1 -1
  16. package/dist/lib/cli/build.js +1 -1
  17. package/dist/lib/cli/config-command.js +1 -1
  18. package/dist/lib/cli/config.js +1 -1
  19. package/dist/lib/cli/create-user.js +1 -1
  20. package/dist/lib/cli/init.js +1 -1
  21. package/dist/lib/cli/jira.js +1 -1
  22. package/dist/lib/cli/license.js +1 -1
  23. package/dist/lib/cli/server-manager.js +1 -1
  24. package/dist/lib/container-tokens.js +1 -1
  25. package/dist/lib/data-dir.js +1 -1
  26. package/dist/lib/deployment-history.js +1 -1
  27. package/dist/lib/deployment-service.js +1 -1
  28. package/dist/lib/docker-utils.js +1 -1
  29. package/dist/lib/email.js +1 -1
  30. package/dist/lib/emailTemplates.js +1 -1
  31. package/dist/lib/entitlement.js +1 -1
  32. package/dist/lib/fetch-utils.js +1 -1
  33. package/dist/lib/git-commit-details-route.js +1 -1
  34. package/dist/lib/git-history-diff-guardrails.js +1 -1
  35. package/dist/lib/git-provider-service.js +1 -1
  36. package/dist/lib/git-provider-setup/github-setup-handler.js +1 -1
  37. package/dist/lib/git-provider-setup/index.js +1 -1
  38. package/dist/lib/git-provider-setup/setup-factory.js +1 -1
  39. package/dist/lib/git-provider-setup/setup-interface.js +1 -1
  40. package/dist/lib/git-providers/azure-devops-provider.js +1 -1
  41. package/dist/lib/git-providers/github-app-provider.js +1 -1
  42. package/dist/lib/git-providers/index.js +1 -1
  43. package/dist/lib/git-providers/provider-factory.js +1 -1
  44. package/dist/lib/git-providers/provider-interface.js +1 -1
  45. package/dist/lib/github-urls.js +1 -1
  46. package/dist/lib/group-objective-linking.js +1 -1
  47. package/dist/lib/jira-client.js +1 -1
  48. package/dist/lib/judge-blinding.js +1 -1
  49. package/dist/lib/logger.js +1 -1
  50. package/dist/lib/model-fetcher.js +1 -1
  51. package/dist/lib/notifications.js +1 -1
  52. package/dist/lib/oidc-auth.js +1 -1
  53. package/dist/lib/oidc-device-flow.js +1 -1
  54. package/dist/lib/passwordTokens.js +1 -1
  55. package/dist/lib/pin-cascade.js +1 -1
  56. package/dist/lib/provider-accounts.js +1 -1
  57. package/dist/lib/provider-oauth.js +1 -1
  58. package/dist/lib/provider-profile.js +1 -1
  59. package/dist/lib/provider-token-refresh.js +1 -1
  60. package/dist/lib/request-url.js +1 -1
  61. package/dist/lib/rewind.js +1 -1
  62. package/dist/lib/roles.js +1 -1
  63. package/dist/lib/secrets.js +1 -1
  64. package/dist/lib/setup-repo-git-auth.js +1 -1
  65. package/dist/lib/state-capture.js +1 -1
  66. package/dist/lib/static-files.js +1 -1
  67. package/dist/lib/task-name-generator.js +1 -1
  68. package/dist/lib/user-git-oauth.js +1 -1
  69. package/dist/lib/user-git-tokens.js +1 -1
  70. package/dist/lib/users.js +1 -1
  71. package/dist/middleware/requireAuth.js +1 -1
  72. package/dist/middleware/requireInit.js +1 -1
  73. package/dist/middleware/requirePermission.js +1 -1
  74. package/dist/package.json +1 -1
  75. package/dist/routes/apiKeys.js +1 -1
  76. package/dist/routes/auth-oidc.js +1 -1
  77. package/dist/routes/auth.js +1 -1
  78. package/dist/routes/build.js +1 -1
  79. package/dist/routes/containers.js +1 -1
  80. package/dist/routes/deploy-task.js +1 -1
  81. package/dist/routes/environment-management.js +1 -1
  82. package/dist/routes/environments.js +1 -1
  83. package/dist/routes/external-skills.js +1 -1
  84. package/dist/routes/git-credentials.js +1 -1
  85. package/dist/routes/git-oauth.js +1 -1
  86. package/dist/routes/git-provider-setup.js +1 -1
  87. package/dist/routes/health.js +1 -1
  88. package/dist/routes/jira.js +1 -1
  89. package/dist/routes/objective-management.js +1 -1
  90. package/dist/routes/password.js +1 -1
  91. package/dist/routes/prompt.js +1 -1
  92. package/dist/routes/provider-auth.js +1 -1
  93. package/dist/routes/qa.js +1 -1
  94. package/dist/routes/settings.js +1 -1
  95. package/dist/routes/skill-management.js +1 -1
  96. package/dist/routes/skills.js +1 -1
  97. package/dist/routes/tasks.js +1 -1
  98. package/dist/routes/templates.js +1 -1
  99. package/dist/routes/test-task.js +1 -1
  100. package/dist/routes/test.js +1 -1
  101. package/dist/routes/users.js +1 -1
  102. package/dist/routes/visualizations.js +1 -1
  103. package/dist/scripts/create-user.js +1 -1
  104. package/dist/shipped-skills/skill-editor/SKILL.md +124 -231
  105. package/dist/start.js +1 -1
  106. package/dist/web-ui/public/activity-detail-modal.js +1 -1
  107. package/dist/web-ui/public/activity-feed.js +1 -1
  108. package/dist/web-ui/public/activity-formatters.js +1 -1
  109. package/dist/web-ui/public/agent-event-parser.js +1 -1
  110. package/dist/web-ui/public/app.js +1 -1
  111. package/dist/web-ui/public/approve-dialog.js +1 -1
  112. package/dist/web-ui/public/comments-widget.js +1 -1
  113. package/dist/web-ui/public/diff-utils.js +1 -1
  114. package/dist/web-ui/public/environments.css +81 -1
  115. package/dist/web-ui/public/environments.html +8 -3
  116. package/dist/web-ui/public/environments.js +1 -1
  117. package/dist/web-ui/public/feedback-widget.css +28 -0
  118. package/dist/web-ui/public/feedback-widget.js +1 -1
  119. package/dist/web-ui/public/git-history-lazy-utils.js +1 -1
  120. package/dist/web-ui/public/git-history.html +1 -1
  121. package/dist/web-ui/public/git-history.js +1 -1
  122. package/dist/web-ui/public/git-status.js +1 -1
  123. package/dist/web-ui/public/index.js +1 -1
  124. package/dist/web-ui/public/login.js +1 -1
  125. package/dist/web-ui/public/markdown-editor.js +1 -1
  126. package/dist/web-ui/public/markdown-file-editor.js +1 -1
  127. package/dist/web-ui/public/modal-maximize.js +1 -1
  128. package/dist/web-ui/public/notifications.js +1 -1
  129. package/dist/web-ui/public/server-health.js +1 -1
  130. package/dist/web-ui/public/settings.css +1 -0
  131. package/dist/web-ui/public/settings.html +5 -5
  132. package/dist/web-ui/public/settings.js +1 -1
  133. package/dist/web-ui/public/setup-password.js +1 -1
  134. package/dist/web-ui/public/skills.css +110 -3
  135. package/dist/web-ui/public/skills.html +7 -4
  136. package/dist/web-ui/public/skills.js +1 -1
  137. package/dist/web-ui/public/sse-client.js +1 -1
  138. package/dist/web-ui/public/sse-shared-worker.js +1 -1
  139. package/dist/web-ui/public/styles.css +137 -1
  140. package/dist/web-ui/public/task.html +22 -1
  141. package/dist/web-ui/public/task.js +1 -1
  142. package/dist/web-ui/public/terminal.js +1 -1
  143. package/dist/web-ui/public/theme.js +1 -1
  144. package/dist/web-ui/public/users.js +1 -1
  145. package/dist/web-ui/public/variant-grouping.js +1 -1
  146. package/package.json +1 -1
@@ -1 +1 @@
1
- const _0x188e17=_0x415e;(function(_0x251b30,_0x587f66){const _0x410fba=_0x415e,_0x114b98=_0x251b30();while(!![]){try{const _0x18d1dc=parseInt(_0x410fba(0x1b6))/0x1+parseInt(_0x410fba(0x1a2))/0x2+parseInt(_0x410fba(0x1bf))/0x3+-parseInt(_0x410fba(0x1ae))/0x4*(parseInt(_0x410fba(0x1c8))/0x5)+parseInt(_0x410fba(0x1b9))/0x6+parseInt(_0x410fba(0x1b4))/0x7*(-parseInt(_0x410fba(0x1c3))/0x8)+-parseInt(_0x410fba(0x19c))/0x9;if(_0x18d1dc===_0x587f66)break;else _0x114b98['push'](_0x114b98['shift']());}catch(_0x5946ac){_0x114b98['push'](_0x114b98['shift']());}}}(_0x5234,0xf1567));import{initTheme,mountThemeToggle}from'./theme.js';initTheme();function _0x415e(_0x2fdd0b,_0x5b5f6f){_0x2fdd0b=_0x2fdd0b-0x19b;const _0x523433=_0x5234();let _0x415eea=_0x523433[_0x2fdd0b];if(_0x415e['CXdrOb']===undefined){var _0x1decb9=function(_0x50a0b0){const _0x31f2e3='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1115ef='',_0x3f05b1='';for(let _0x4d35c5=0x0,_0x2e63f6,_0x1a328b,_0x32a3b3=0x0;_0x1a328b=_0x50a0b0['charAt'](_0x32a3b3++);~_0x1a328b&&(_0x2e63f6=_0x4d35c5%0x4?_0x2e63f6*0x40+_0x1a328b:_0x1a328b,_0x4d35c5++%0x4)?_0x1115ef+=String['fromCharCode'](0xff&_0x2e63f6>>(-0x2*_0x4d35c5&0x6)):0x0){_0x1a328b=_0x31f2e3['indexOf'](_0x1a328b);}for(let _0x1f820e=0x0,_0x5cd5c9=_0x1115ef['length'];_0x1f820e<_0x5cd5c9;_0x1f820e++){_0x3f05b1+='%'+('00'+_0x1115ef['charCodeAt'](_0x1f820e)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3f05b1);};_0x415e['KyeAMd']=_0x1decb9,_0x415e['uIdAdI']={},_0x415e['CXdrOb']=!![];}const _0x503c1e=_0x523433[0x0],_0x58b8d0=_0x2fdd0b+_0x503c1e,_0x93b63c=_0x415e['uIdAdI'][_0x58b8d0];return!_0x93b63c?(_0x415eea=_0x415e['KyeAMd'](_0x415eea),_0x415e['uIdAdI'][_0x58b8d0]=_0x415eea):_0x415eea=_0x93b63c,_0x415eea;}const urlParams=new URLSearchParams(window[_0x188e17(0x1de)][_0x188e17(0x1b2)]),token=urlParams[_0x188e17(0x1c0)](_0x188e17(0x1da)),loadingEl=document[_0x188e17(0x1ad)](_0x188e17(0x1c9)),setupContentEl=document[_0x188e17(0x1ad)]('setup-content'),setupFormEl=document[_0x188e17(0x1ad)](_0x188e17(0x1af)),setupMessageEl=document[_0x188e17(0x1ad)](_0x188e17(0x1a0)),userUsernameEl=document[_0x188e17(0x1ad)]('user-username'),userNameEl=document[_0x188e17(0x1ad)](_0x188e17(0x1bb)),passwordInput=document[_0x188e17(0x1ad)](_0x188e17(0x1cc)),confirmPasswordInput=document['getElementById'](_0x188e17(0x1b1)),submitButton=setupFormEl?.['querySelector'](_0x188e17(0x19f));function showMessage(_0x1115ef,_0x3f05b1='error'){const _0x11e0c0=_0x188e17;setupMessageEl[_0x11e0c0(0x1aa)]=_0x1115ef,setupMessageEl[_0x11e0c0(0x1d2)]='setup-message\x20'+_0x3f05b1+_0x11e0c0(0x1a7);}function hideMessage(){const _0x165056=_0x188e17;setupMessageEl[_0x165056(0x1d2)]='setup-message';}function showError(_0x4d35c5){const _0x5822d1=_0x188e17;loadingEl['classList'][_0x5822d1(0x1db)](_0x5822d1(0x1dc)),setupContentEl[_0x5822d1(0x1a6)]['display']=_0x5822d1(0x1d3),document['getElementById'](_0x5822d1(0x1bc))['style']['display']=_0x5822d1(0x1c6),setupFormEl[_0x5822d1(0x1a6)][_0x5822d1(0x1d9)]=_0x5822d1(0x1c6),showMessage(_0x4d35c5,'error');}async function validateToken(){const _0xe7f587=_0x188e17;if(!token){showError(_0xe7f587(0x1d8));return;}try{const _0x2e63f6=await fetch(_0xe7f587(0x1b7)+encodeURIComponent(token)),_0x1a328b=await _0x2e63f6[_0xe7f587(0x1c7)]();if(!_0x1a328b[_0xe7f587(0x1c5)]){showError(_0x1a328b[_0xe7f587(0x1ce)]||_0xe7f587(0x1b5));return;}loadingEl[_0xe7f587(0x1a9)]['remove'](_0xe7f587(0x1dc)),setupContentEl['style']['display']=_0xe7f587(0x1d3),userUsernameEl[_0xe7f587(0x1aa)]=_0x1a328b[_0xe7f587(0x1ba)]['username'],userNameEl[_0xe7f587(0x1aa)]=_0x1a328b[_0xe7f587(0x1ba)][_0xe7f587(0x1d4)];const _0x32a3b3=document[_0xe7f587(0x1c2)](_0xe7f587(0x1ab));_0x1a328b[_0xe7f587(0x1dd)]===_0xe7f587(0x1a1)?_0x32a3b3[_0xe7f587(0x1aa)]=_0xe7f587(0x1be):_0x32a3b3[_0xe7f587(0x1aa)]='Create\x20a\x20secure\x20password\x20for\x20your\x20account',passwordInput['focus']();}catch(_0x1f820e){console['error'](_0xe7f587(0x1b8),_0x1f820e),showError(_0xe7f587(0x1d0));}}async function handleSubmit(_0x5cd5c9){const _0x50dadc=_0x188e17;_0x5cd5c9[_0x50dadc(0x19d)](),hideMessage();const _0x201682=passwordInput[_0x50dadc(0x1c1)],_0x387c60=confirmPasswordInput['value'];if(_0x201682!==_0x387c60){showMessage(_0x50dadc(0x1a3),'error'),confirmPasswordInput[_0x50dadc(0x1cb)]();return;}if(_0x201682[_0x50dadc(0x19b)]<0x8){showMessage(_0x50dadc(0x1bd),_0x50dadc(0x1ce)),passwordInput[_0x50dadc(0x1cb)]();return;}submitButton[_0x50dadc(0x1ca)]=!![],submitButton[_0x50dadc(0x1aa)]=_0x50dadc(0x19e);try{const _0x35bc56=await fetch(_0x50dadc(0x1a8),{'method':'POST','headers':{'Content-Type':_0x50dadc(0x1d6)},'body':JSON['stringify']({'token':token,'password':_0x201682})}),_0xa2054=await _0x35bc56[_0x50dadc(0x1c7)]();if(!_0x35bc56['ok'])throw new Error(_0xa2054[_0x50dadc(0x1ce)]||_0x50dadc(0x1a5));showMessage(_0x50dadc(0x1cf),_0x50dadc(0x1ac)),setupFormEl[_0x50dadc(0x1a1)](),setTimeout(()=>{const _0x3e99a1=_0x50dadc;window[_0x3e99a1(0x1de)][_0x3e99a1(0x1d5)]=_0x3e99a1(0x1cd);},0x7d0);}catch(_0x36e03c){console['error'](_0x50dadc(0x1a4),_0x36e03c),showMessage(_0x36e03c[_0x50dadc(0x1c4)]||'Failed\x20to\x20set\x20password.\x20Please\x20try\x20again.',_0x50dadc(0x1ce)),submitButton['disabled']=![],submitButton['textContent']=_0x50dadc(0x1b0);}}function _0x5234(){const _0x378957=['Bg9HzgLUzW','zgLZywjSzwq','zM9JDxm','CgfZC3DVCMq','l2XVz2LUlMH0BwW','zxjYB3i','ugfZC3DVCMqGC2v0ihn1y2nLC3nMDwXSEseGuMvKAxjLy3rPBMCGDg8GBg9NAw4UlI4','rMfPBgvKihrVihzHBgLKyxrLihrVA2vUlIbqBgvHC2uGDhj5igfNywLUig9YignVBNrHy3qGEw91CIbHzg1PBMLZDhjHDg9YlG','C3vIBwL0','y2XHC3noyw1L','yMXVy2S','BMfTzq','AhjLzG','yxbWBgLJyxrPB24VANnVBG','ywrKrxzLBNrmAxn0zw5LCG','tM8GDg9Rzw4GChjVDMLKzwqUifbSzwfZzsbJAgvJAYb0AguGBgLUAYb5B3uGCMvJzwL2zwqU','zgLZCgXHEq','Dg9Rzw4','CMvTB3zL','DMLZAwjSzq','DhLWzq','Bg9JyxrPB24','BgvUz3rO','mZKZotCWnxPsqNnrzW','ChjLDMvUDerLzMf1Bhq','u2v0DgLUzYbWyxnZD29Yzc4UlG','yNv0Dg9Uw3r5Cgu9iNn1yM1PDcjD','C2v0DxaTBwvZC2fNzq','CMvZzxq','nti3ndKWwffnwKTv','ugfZC3DVCMrZigrVig5VDcbTyxrJAa','rMfPBgvKihrVihnLDcbWyxnZD29YzdO','rMfPBgvKihrVihnLDcbWyxnZD29Yza','C3r5Bgu','ihzPC2LIBgu','l3bHC3n3B3jKl3nLDhvW','y2XHC3nmAxn0','Dgv4DenVBNrLBNq','lNnLDhvWlwHLywrLCIbW','C3vJy2vZCW','z2v0rwXLBwvUDej5swq','ndeXotjuyM1svLe','C2v0DxaTzM9YBq','u2v0ifbHC3n3B3jK','y29UzMLYBs1WyxnZD29Yza','C2vHCMnO','re9nq29UDgvUDeXVywrLza','mJHNy3PbALC','sw52ywXPzcbVCIbLEhbPCMvKihrVA2vUlIbqBgvHC2uGCMvXDwvZDcbHig5LDYbWyxnZD29YzcbZzxr1CcbSAw5RlG','mtG5ndyZneXSD1zgqG','l3bHC3n3B3jKl3zHBgLKyxrLlxrVA2vUp3rVA2vUpq','rMfPBgvKihrVihzHBgLKyxrLihrVA2vUoG','mte0nJe0mtz3EgXZsum','DxnLCG','DxnLCI1Uyw1L','DxnLCI1PBMzV','ugfZC3DVCMqGBxvZDcbIzsbHDcbSzwfZDca4ignOyxjHy3rLCNmGBg9UzW','uMvZzxqGEw91CIbWyxnZD29Yza','nJq5mde3vKrdCwn3','z2v0','DMfSDwu','CxvLCNLtzwXLy3rVCG','mZeWmty4ogHVCLnqyW','BwvZC2fNzq','DMfSAwq','BM9Uzq','ANnVBG','nJm1wMXJu1LU'];_0x5234=function(){return _0x378957;};return _0x5234();}setupFormEl&&setupFormEl[_0x188e17(0x1d7)](_0x188e17(0x1d1),handleSubmit);validateToken(),document[_0x188e17(0x1d7)](_0x188e17(0x1b3),()=>{mountThemeToggle();});
1
+ const _0x17d934=_0x1d0e;(function(_0x35b2da,_0x3c9f22){const _0x5ceb7f=_0x1d0e,_0x1fdac6=_0x35b2da();while(!![]){try{const _0x57bc48=-parseInt(_0x5ceb7f(0x139))/0x1+-parseInt(_0x5ceb7f(0x125))/0x2*(parseInt(_0x5ceb7f(0x141))/0x3)+-parseInt(_0x5ceb7f(0x138))/0x4*(-parseInt(_0x5ceb7f(0x148))/0x5)+parseInt(_0x5ceb7f(0x12b))/0x6+parseInt(_0x5ceb7f(0x14b))/0x7+parseInt(_0x5ceb7f(0x14c))/0x8+-parseInt(_0x5ceb7f(0x111))/0x9*(parseInt(_0x5ceb7f(0x135))/0xa);if(_0x57bc48===_0x3c9f22)break;else _0x1fdac6['push'](_0x1fdac6['shift']());}catch(_0x382a22){_0x1fdac6['push'](_0x1fdac6['shift']());}}}(_0x3e36,0xe0465));import{initTheme,mountThemeToggle}from'./theme.js';initTheme();const urlParams=new URLSearchParams(window[_0x17d934(0x14a)][_0x17d934(0x114)]),token=urlParams[_0x17d934(0x143)](_0x17d934(0x118)),loadingEl=document[_0x17d934(0x14f)](_0x17d934(0x129)),setupContentEl=document['getElementById'](_0x17d934(0x11b)),setupFormEl=document[_0x17d934(0x14f)]('setup-form'),setupMessageEl=document[_0x17d934(0x14f)]('setup-message'),userUsernameEl=document[_0x17d934(0x14f)](_0x17d934(0x12e)),userNameEl=document[_0x17d934(0x14f)](_0x17d934(0x144)),passwordInput=document[_0x17d934(0x14f)]('password'),confirmPasswordInput=document[_0x17d934(0x14f)](_0x17d934(0x13d)),submitButton=setupFormEl?.[_0x17d934(0x145)](_0x17d934(0x11f));function _0x1d0e(_0x5dfd07,_0x1003fc){_0x5dfd07=_0x5dfd07-0x110;const _0x3e361a=_0x3e36();let _0x1d0eca=_0x3e361a[_0x5dfd07];if(_0x1d0e['RXHvWz']===undefined){var _0x24ef58=function(_0x2df069){const _0x55b0a1='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1cf4a8='',_0x2289cc='';for(let _0x59405e=0x0,_0x32478d,_0x26d4ea,_0x578eae=0x0;_0x26d4ea=_0x2df069['charAt'](_0x578eae++);~_0x26d4ea&&(_0x32478d=_0x59405e%0x4?_0x32478d*0x40+_0x26d4ea:_0x26d4ea,_0x59405e++%0x4)?_0x1cf4a8+=String['fromCharCode'](0xff&_0x32478d>>(-0x2*_0x59405e&0x6)):0x0){_0x26d4ea=_0x55b0a1['indexOf'](_0x26d4ea);}for(let _0x17bdd1=0x0,_0xec4909=_0x1cf4a8['length'];_0x17bdd1<_0xec4909;_0x17bdd1++){_0x2289cc+='%'+('00'+_0x1cf4a8['charCodeAt'](_0x17bdd1)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2289cc);};_0x1d0e['nvUzjJ']=_0x24ef58,_0x1d0e['yXrFRR']={},_0x1d0e['RXHvWz']=!![];}const _0x449de4=_0x3e361a[0x0],_0x18e11b=_0x5dfd07+_0x449de4,_0x4aa8c7=_0x1d0e['yXrFRR'][_0x18e11b];return!_0x4aa8c7?(_0x1d0eca=_0x1d0e['nvUzjJ'](_0x1d0eca),_0x1d0e['yXrFRR'][_0x18e11b]=_0x1d0eca):_0x1d0eca=_0x4aa8c7,_0x1d0eca;}function showMessage(_0x1cf4a8,_0x2289cc=_0x17d934(0x13a)){const _0x31b246=_0x17d934;setupMessageEl['textContent']=_0x1cf4a8,setupMessageEl['className']=_0x31b246(0x119)+_0x2289cc+_0x31b246(0x11c);}function hideMessage(){const _0x2c66f2=_0x17d934;setupMessageEl[_0x2c66f2(0x14d)]=_0x2c66f2(0x140);}function showError(_0x59405e){const _0x2f7ff5=_0x17d934;loadingEl['classList'][_0x2f7ff5(0x12f)](_0x2f7ff5(0x110)),setupContentEl[_0x2f7ff5(0x146)]['display']=_0x2f7ff5(0x14e),document[_0x2f7ff5(0x14f)](_0x2f7ff5(0x11e))[_0x2f7ff5(0x146)][_0x2f7ff5(0x117)]=_0x2f7ff5(0x126),setupFormEl[_0x2f7ff5(0x146)][_0x2f7ff5(0x117)]=_0x2f7ff5(0x126),showMessage(_0x59405e,_0x2f7ff5(0x13a));}async function validateToken(){const _0x244cec=_0x17d934;if(!token){showError(_0x244cec(0x147));return;}try{const _0x32478d=await fetch(_0x244cec(0x13b)+encodeURIComponent(token)),_0x26d4ea=await _0x32478d[_0x244cec(0x13c)]();if(!_0x26d4ea['valid']){showError(_0x26d4ea[_0x244cec(0x13a)]||_0x244cec(0x149));return;}loadingEl[_0x244cec(0x12c)][_0x244cec(0x12f)](_0x244cec(0x110)),setupContentEl[_0x244cec(0x146)]['display']=_0x244cec(0x14e),userUsernameEl[_0x244cec(0x113)]=_0x26d4ea[_0x244cec(0x123)][_0x244cec(0x150)],userNameEl[_0x244cec(0x113)]=_0x26d4ea[_0x244cec(0x123)]['name'];const _0x578eae=document[_0x244cec(0x145)](_0x244cec(0x121));_0x26d4ea['type']===_0x244cec(0x12d)?_0x578eae[_0x244cec(0x113)]=_0x244cec(0x151):_0x578eae[_0x244cec(0x113)]=_0x244cec(0x115),passwordInput[_0x244cec(0x13f)]();}catch(_0x17bdd1){console['error'](_0x244cec(0x142),_0x17bdd1),showError(_0x244cec(0x128));}}async function handleSubmit(_0xec4909){const _0x51f3bc=_0x17d934;_0xec4909['preventDefault'](),hideMessage();const _0x58b0c6=passwordInput['value'],_0x3ccdc7=confirmPasswordInput['value'];if(_0x58b0c6!==_0x3ccdc7){showMessage(_0x51f3bc(0x131),_0x51f3bc(0x13a)),confirmPasswordInput[_0x51f3bc(0x13f)]();return;}if(_0x58b0c6[_0x51f3bc(0x124)]<0x8){showMessage(_0x51f3bc(0x13e),_0x51f3bc(0x13a)),passwordInput[_0x51f3bc(0x13f)]();return;}submitButton[_0x51f3bc(0x120)]=!![],submitButton[_0x51f3bc(0x113)]=_0x51f3bc(0x11a);try{const _0x40585d=await fetch('/password/setup',{'method':_0x51f3bc(0x11d),'headers':{'Content-Type':_0x51f3bc(0x122)},'body':JSON[_0x51f3bc(0x127)]({'token':token,'password':_0x58b0c6})}),_0x1b5127=await _0x40585d[_0x51f3bc(0x13c)]();if(!_0x40585d['ok'])throw new Error(_0x1b5127['error']||_0x51f3bc(0x130));showMessage(_0x51f3bc(0x132),'success'),setupFormEl[_0x51f3bc(0x12d)](),setTimeout(()=>{const _0x3a32b4=_0x51f3bc;window[_0x3a32b4(0x14a)][_0x3a32b4(0x134)]='/login.html';},0x7d0);}catch(_0x2e14e6){console[_0x51f3bc(0x13a)](_0x51f3bc(0x112),_0x2e14e6),showMessage(_0x2e14e6[_0x51f3bc(0x136)]||'Failed\x20to\x20set\x20password.\x20Please\x20try\x20again.','error'),submitButton[_0x51f3bc(0x120)]=![],submitButton[_0x51f3bc(0x113)]=_0x51f3bc(0x12a);}}function _0x3e36(){const _0x9bff84=['re9nq29UDgvUDeXVywrLza','zgLZCgXHEq','Dg9Rzw4','C2v0DxaTBwvZC2fNzsa','u2v0DgLUzYbWyxnZD29Yzc4UlG','C2v0DxaTy29UDgvUDa','ihzPC2LIBgu','ue9tva','DxnLCI1PBMzV','yNv0Dg9Uw3r5Cgu9iNn1yM1PDcjD','zgLZywjSzwq','lNnLDhvWlwHLywrLCIbW','yxbWBgLJyxrPB24VANnVBG','DxnLCG','BgvUz3rO','mtHtzfvmEMm','BM9Uzq','C3rYAw5NAwz5','rMfPBgvKihrVihzHBgLKyxrLihrVA2vUlIbqBgvHC2uGDhj5igfNywLUig9YignVBNrHy3qGEw91CIbHzg1PBMLZDhjHDg9YlG','Bg9HzgLUzW','u2v0ifbHC3n3B3jK','mZyWmte0meD4zLnRsW','y2XHC3nmAxn0','CMvZzxq','DxnLCI11C2vYBMfTzq','CMvTB3zL','rMfPBgvKihrVihnLDcbWyxnZD29Yza','ugfZC3DVCMrZigrVig5VDcbTyxrJAa','ugfZC3DVCMqGC2v0ihn1y2nLC3nMDwXSEseGuMvKAxjLy3rPBMCGDg8GBg9NAw4UlI4','ywrKrxzLBNrmAxn0zw5LCG','AhjLzG','mtbUCw9nCfO','BwvZC2fNzq','C3vIBwL0','ndq3nK1rzxriBW','mJC1nZe5swPJqKv3','zxjYB3i','l3bHC3n3B3jKl3zHBgLKyxrLlxrVA2vUp3rVA2vUpq','ANnVBG','y29UzMLYBs1WyxnZD29Yza','ugfZC3DVCMqGBxvZDcbIzsbHDcbSzwfZDca4ignOyxjHy3rLCNmGBg9UzW','zM9JDxm','C2v0DxaTBwvZC2fNzq','mZyWnZm1t29PCMHf','rMfPBgvKihrVihzHBgLKyxrLihrVA2vUoG','z2v0','DxnLCI1Uyw1L','CxvLCNLtzwXLy3rVCG','C3r5Bgu','tM8GDg9Rzw4GChjVDMLKzwqUifbSzwfZzsbJAgvJAYb0AguGBgLUAYb5B3uGCMvJzwL2zwqU','ndK4nxvLv1HPwG','sw52ywXPzcbVCIbLEhbPCMvKihrVA2vUlIbqBgvHC2uGCMvXDwvZDcbHig5LDYbWyxnZD29YzcbZzxr1CcbSAw5RlG','Bg9JyxrPB24','mtiYmJy5mhzZsLvuCW','nduWmte3nLD2z3nVwq','y2XHC3noyw1L','yMXVy2S','z2v0rwXLBwvUDej5swq','DxnLCM5HBwu','uMvZzxqGEw91CIbWyxnZD29Yza','DMLZAwjSzq','mtu4otm3m1rsuwnLwa','rMfPBgvKihrVihnLDcbWyxnZD29YzdO','Dgv4DenVBNrLBNq','C2vHCMnO','q3jLyxrLigeGC2vJDxjLihbHC3n3B3jKigzVCIb5B3vYigfJy291BNq'];_0x3e36=function(){return _0x9bff84;};return _0x3e36();}setupFormEl&&setupFormEl[_0x17d934(0x133)](_0x17d934(0x137),handleSubmit);validateToken(),document[_0x17d934(0x133)](_0x17d934(0x116),()=>{mountThemeToggle();});
@@ -1126,11 +1126,12 @@
1126
1126
  list-style: none;
1127
1127
  padding: 0;
1128
1128
  margin: 0;
1129
- max-height: 200px;
1129
+ max-height: 60vh;
1130
+ overflow-x: hidden;
1130
1131
  overflow-y: auto;
1131
1132
  }
1132
1133
 
1133
- .modified-files-list li {
1134
+ .modified-files-list > li.changed-file-item {
1134
1135
  padding: 8px 12px;
1135
1136
  background: var(--color-surface-muted);
1136
1137
  border-radius: var(--radius-small);
@@ -1140,7 +1141,7 @@
1140
1141
  margin-bottom: 6px;
1141
1142
  }
1142
1143
 
1143
- .modified-files-list li::before {
1144
+ .modified-files-list > li.changed-file-item::before {
1144
1145
  content: '●';
1145
1146
  color: var(--color-warning);
1146
1147
  margin-right: 8px;
@@ -1970,3 +1971,109 @@
1970
1971
  color: #8b5cf6;
1971
1972
  border: 1px solid rgba(139, 92, 246, 0.3);
1972
1973
  }
1974
+
1975
+ /* Uncommitted changes / commit / discard modal sizing */
1976
+ #uncommitted-changes-modal .modal-content,
1977
+ #commit-modal .modal-content,
1978
+ #discard-modal .modal-content {
1979
+ overflow: hidden;
1980
+ max-width: 750px;
1981
+ }
1982
+
1983
+ #uncommitted-changes-modal .modal-body,
1984
+ #commit-modal .modal-body,
1985
+ #discard-modal .modal-body {
1986
+ overflow-x: hidden;
1987
+ overflow-y: auto;
1988
+ }
1989
+
1990
+ /* Clickable changed files */
1991
+ .changed-file-clickable {
1992
+ cursor: pointer;
1993
+ transition: background 0.15s ease;
1994
+ border-radius: var(--radius-small, 4px);
1995
+ }
1996
+
1997
+ .changed-file-clickable:hover {
1998
+ background: rgba(99, 102, 241, 0.08);
1999
+ }
2000
+
2001
+ .changed-file-clickable.diff-expanded {
2002
+ background: rgba(99, 102, 241, 0.1);
2003
+ border-left: 3px solid var(--color-accent, #6366f1);
2004
+ font-weight: 600;
2005
+ }
2006
+
2007
+ /* Hide the bullet when file is expanded to show diff */
2008
+ .modified-files-list > li.changed-file-item.diff-expanded::before {
2009
+ color: var(--color-accent, #6366f1);
2010
+ }
2011
+
2012
+ /* Inline diff panel below a file in the list */
2013
+ .inline-file-diff {
2014
+ list-style: none;
2015
+ padding: 0;
2016
+ margin: 4px 0 8px 0;
2017
+ border-radius: var(--radius-small, 4px);
2018
+ overflow: hidden;
2019
+ background: none;
2020
+ }
2021
+
2022
+ .inline-file-diff::before {
2023
+ content: none;
2024
+ }
2025
+
2026
+ /* Hide the redundant file header - filename is already shown in the list item */
2027
+ .inline-file-diff .file-diff-header {
2028
+ display: none;
2029
+ }
2030
+
2031
+ /* Always show diff content in inline context (header with toggle is hidden) */
2032
+ .inline-file-diff .file-diff-content.collapsed {
2033
+ max-height: none;
2034
+ overflow: auto;
2035
+ }
2036
+
2037
+ .inline-file-diff .file-diff {
2038
+ margin-top: 0;
2039
+ border-radius: var(--radius-small, 4px);
2040
+ border: 1px solid var(--color-border, #e2e8f0);
2041
+ overflow: hidden;
2042
+ }
2043
+
2044
+ .inline-file-diff .file-diff-content {
2045
+ max-height: 350px;
2046
+ overflow: auto;
2047
+ }
2048
+
2049
+ /* Ensure diff content doesn't cause horizontal overflow on the modal */
2050
+ .inline-file-diff .diff-line {
2051
+ min-width: 0;
2052
+ }
2053
+
2054
+ .inline-file-diff .diff-line-content {
2055
+ overflow-wrap: break-word;
2056
+ word-break: break-all;
2057
+ white-space: pre-wrap;
2058
+ }
2059
+
2060
+ .inline-file-diff-loading {
2061
+ padding: 12px;
2062
+ color: var(--color-text-muted);
2063
+ font-style: italic;
2064
+ font-size: 13px;
2065
+ background: none;
2066
+ }
2067
+
2068
+ .inline-file-diff-loading::before {
2069
+ content: none;
2070
+ }
2071
+
2072
+ .inline-diff-empty {
2073
+ padding: 12px;
2074
+ color: var(--color-text-muted);
2075
+ font-style: italic;
2076
+ font-size: 13px;
2077
+ background: var(--color-surface-muted, #f5f5f5);
2078
+ border-radius: var(--radius-small, 4px);
2079
+ }
@@ -30,7 +30,7 @@
30
30
  <script type="module" src="markdown-editor.js?v=1"></script>
31
31
  <script src="markdown-file-editor.js?v=1"></script>
32
32
  <script type="module" src="app.js?v=67"></script>
33
- <script type="module" src="skills.js?v=4"></script>
33
+ <script type="module" src="skills.js?v=5"></script>
34
34
  <!-- Dev QA shortcut: Ctrl+Shift+Q to launch current page in QA mode -->
35
35
  </head>
36
36
  <body>
@@ -132,6 +132,9 @@
132
132
  <button class="dropdown-item" id="repo-pull-btn">
133
133
  <span>🔄</span> Pull from Git
134
134
  </button>
135
+ <button class="dropdown-item" id="repo-push-btn" hidden>
136
+ <span>📤</span> Push to Git
137
+ </button>
135
138
  <button class="dropdown-item" id="repo-commit-btn" disabled>
136
139
  <span>📤</span> Commit & Push...
137
140
  </button>
@@ -518,7 +521,7 @@
518
521
  <!-- Discard Modal -->
519
522
  <div id="discard-modal" class="modal" hidden>
520
523
  <div class="modal-overlay"></div>
521
- <div class="modal-content">
524
+ <div class="modal-content modal-large">
522
525
  <div class="modal-header">
523
526
  <h2>⚠️ Discard Changes</h2>
524
527
  <button type="button" class="modal-close" aria-label="Close" id="close-discard-modal">&times;</button>
@@ -576,13 +579,13 @@
576
579
  <!-- Uncommitted Changes Modal -->
577
580
  <div id="uncommitted-changes-modal" class="modal" hidden>
578
581
  <div class="modal-overlay"></div>
579
- <div class="modal-content">
582
+ <div class="modal-content modal-large">
580
583
  <div class="modal-header">
581
584
  <h2>Uncommitted Changes</h2>
582
585
  <button type="button" class="modal-close" aria-label="Close" id="close-uncommitted-modal">&times;</button>
583
586
  </div>
584
587
  <div class="modal-body">
585
- <p class="text-muted" style="margin-bottom: 12px;">The following files have uncommitted changes:</p>
588
+ <p class="text-muted" style="margin-bottom: 12px;">The following files have uncommitted changes. Click a file to view its diff.</p>
586
589
  <ul id="uncommitted-files-list" class="modified-files-list"></ul>
587
590
  </div>
588
591
  <div class="modal-actions">