@profoundlogic/coderflow-server 0.2.8 → 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 (143) 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.js +1 -1
  118. package/dist/web-ui/public/git-history-lazy-utils.js +1 -1
  119. package/dist/web-ui/public/git-history.html +1 -1
  120. package/dist/web-ui/public/git-history.js +1 -1
  121. package/dist/web-ui/public/git-status.js +1 -1
  122. package/dist/web-ui/public/index.js +1 -1
  123. package/dist/web-ui/public/login.js +1 -1
  124. package/dist/web-ui/public/markdown-editor.js +1 -1
  125. package/dist/web-ui/public/markdown-file-editor.js +1 -1
  126. package/dist/web-ui/public/modal-maximize.js +1 -1
  127. package/dist/web-ui/public/notifications.js +1 -1
  128. package/dist/web-ui/public/server-health.js +1 -1
  129. package/dist/web-ui/public/settings.js +1 -1
  130. package/dist/web-ui/public/setup-password.js +1 -1
  131. package/dist/web-ui/public/skills.css +110 -3
  132. package/dist/web-ui/public/skills.html +7 -4
  133. package/dist/web-ui/public/skills.js +1 -1
  134. package/dist/web-ui/public/sse-client.js +1 -1
  135. package/dist/web-ui/public/sse-shared-worker.js +1 -1
  136. package/dist/web-ui/public/styles.css +128 -1
  137. package/dist/web-ui/public/task.html +22 -1
  138. package/dist/web-ui/public/task.js +1 -1
  139. package/dist/web-ui/public/terminal.js +1 -1
  140. package/dist/web-ui/public/theme.js +1 -1
  141. package/dist/web-ui/public/users.js +1 -1
  142. package/dist/web-ui/public/variant-grouping.js +1 -1
  143. package/package.json +1 -1
@@ -1 +1 @@
1
- const _0x451177=_0xf238;(function(_0x2c6a03,_0x240a36){const _0x338224=_0xf238,_0x3eb2ba=_0x2c6a03();while(!![]){try{const _0x1ba515=-parseInt(_0x338224(0x1fe))/0x1*(-parseInt(_0x338224(0x1e6))/0x2)+parseInt(_0x338224(0x1e1))/0x3*(-parseInt(_0x338224(0x1fa))/0x4)+-parseInt(_0x338224(0x209))/0x5*(parseInt(_0x338224(0x1fb))/0x6)+parseInt(_0x338224(0x1d9))/0x7*(-parseInt(_0x338224(0x206))/0x8)+-parseInt(_0x338224(0x1f5))/0x9+parseInt(_0x338224(0x1d6))/0xa+parseInt(_0x338224(0x1da))/0xb;if(_0x1ba515===_0x240a36)break;else _0x3eb2ba['push'](_0x3eb2ba['shift']());}catch(_0x293f30){_0x3eb2ba['push'](_0x3eb2ba['shift']());}}}(_0x18e3,0x6a3f4));const ports=new Set();let eventSource=null,currentUserId=null,reconnectTimeout=null,reconnectAttempts=0x0;function _0x18e3(){const _0x194442=['zxjYB3i','ywn0AxzPDhK','BwvZC2fNzq','zM9YrwfJAa','nJC5mJC1meDZyKDyCW','CMvJB25Uzwn0vgLTzw91Da','y2XVC2u','w1ntrsbxB3jRzxjDie5LDYbWB3j0ignVBM5Ly3rLzc4Gvg90ywWGCg9YDhm6ia','C3vIC2nYAwjLzfbVCNrZ','mJiZnLPkA1zita','mtm4mZm2CgrXq1js','BwLU','w1ntrsbxB3jRzxjDifvUA25VD24Gywn0Aw9UoG','mte0ndbMtxngv28','DgfZAZPJB25Uzwn0zwq','DgfZAZPLCNjVCG','zxzLBNrtB3vYy2u','BgvUz3rO','C3vIC2nYAwjLvgfZAW','zgf0yq','zgvSzxrL','nJi0mJrYyMrIwwK','CMvJB25Uzwn0qxr0zw1WDhm','Bg9N','mtaWzxDwruLz','w1ntrsbxB3jRzxjDie5Vig1VCMuGy29UBMvJDgvKihbVCNrZlcbJBg9ZAw5Nifntrq','l3rHC2TZlW','CxvLDwuTCg9ZAxrPB24','C2L6zq','Cg9YDhm','CMvHzhLtDgf0zq','w1ntrsbxB3jRzxjDifbVCNqGzgLZy29UBMvJDgvKlIbuB3rHBcbWB3j0CZOG','BxmGkgf0DgvTChqG','D2fYBG','Cg9ZDe1LC3nHz2u','w1ntrsbxB3jRzxjDifnJAgvKDwXPBMCGDgfZAYbZDhjLyw0GCMvJB25Uzwn0igzVCIa','B25TzxnZywDLzxjYB3i','igLUia','C3rYAw5NAwz5','yxbWlxnLCNzLCI1ZDgf0Dxm','y29UBMvJDgvK','B3bLBG','nJy5oty1mgjKu3vOBq','C3vTBwfYEq','w1ntrsbxB3jRzxjDifbVCNqGBwvZC2fNzsbLCNjVCJO','ndqXAfnKEenQ','mtG4nZK3ntf4rKTLzwy','w1ntrsbxB3jRzxjDienVBM5Ly3rPB24GzxjYB3i6','C3rHDhvZ','Cg93','DgfZAZO','p3vZzxjjzd0','z2v0','mtK4m2Tjt1ngEq','y29TCgXLDgu','ywrK','t1bftG','BMv3lxrHC2S','mJjwq1brt20','C2v0','q0Xpu0ve','ywrKrxzLBNrmAxn0zw5LCG','y2HHBMDLzc1MAwXLCW','AgfZ','q29UBMvJDgLVBIbLCNjVCG','B25JB25Uzwn0','l3rHC2TZl3vWzgf0zxm','C25HChnOB3q','Bwv0ywrHDge'];_0x18e3=function(){return _0x194442;};return _0x18e3();}const MAX_RECONNECT_DELAY=0x7530,taskStreams=new Map(),TASK_STREAM_EVENTS=[_0x451177(0x1f2),'logs',_0x451177(0x1f0),_0x451177(0x1d7),_0x451177(0x1ea),_0x451177(0x1d3),_0x451177(0x1e2)];function connect(_0x238a83){const _0x15ad91=_0x451177;eventSource&&currentUserId!==_0x238a83&&(eventSource[_0x15ad91(0x1f7)](),eventSource=null);if(eventSource&&eventSource[_0x15ad91(0x1ca)]!==EventSource[_0x15ad91(0x1e8)])return;currentUserId=_0x238a83;const _0x2e84fb=_0x238a83&&_0x238a83!=='me'?_0x15ad91(0x1df)+_0x238a83:'';try{eventSource=new EventSource(_0x15ad91(0x1ee)+_0x2e84fb),eventSource[_0x15ad91(0x1e9)](_0x15ad91(0x1ef),_0x1dd259=>{const _0x59fe99=_0x15ad91;broadcast({'type':_0x59fe99(0x1ef),'data':_0x1dd259[_0x59fe99(0x204)]}),reconnectAttempts=0x0;}),eventSource[_0x15ad91(0x1e9)](_0x15ad91(0x1f2),_0x4b7eaf=>{const _0x3d9045=_0x15ad91;broadcast({'type':_0x3d9045(0x1f2),'data':_0x4b7eaf[_0x3d9045(0x204)]});}),eventSource['addEventListener']('status',_0x585304=>{const _0x36bbfc=_0x15ad91;broadcast({'type':_0x36bbfc(0x1dc),'data':_0x585304[_0x36bbfc(0x204)]});}),eventSource[_0x15ad91(0x1e9)](_0x15ad91(0x1e5),_0x21da2a=>{const _0x5b23b7=_0x15ad91;broadcast({'type':'new-task','data':_0x21da2a[_0x5b23b7(0x204)]});}),eventSource[_0x15ad91(0x1e9)](_0x15ad91(0x1c7),_0x55e2e8=>{const _0x27a816=_0x15ad91;broadcast({'type':_0x27a816(0x1c7),'data':_0x55e2e8['data']});}),eventSource[_0x15ad91(0x1e9)](_0x15ad91(0x1d5),()=>{const _0x15a3aa=_0x15ad91;broadcast({'type':_0x15a3aa(0x1d4)}),reconnectAttempts=0x0;}),eventSource['addEventListener'](_0x15ad91(0x1f1),_0x62ef1=>{const _0x517e5b=_0x15ad91;console[_0x517e5b(0x1f1)](_0x517e5b(0x1db),_0x62ef1),broadcast({'type':_0x517e5b(0x1f1),'error':_0x517e5b(0x1ec)}),eventSource&&(eventSource[_0x517e5b(0x1f7)](),eventSource=null),scheduleReconnect();});}catch(_0x139537){console['error']('[SSE\x20Worker]\x20Failed\x20to\x20create\x20EventSource:',_0x139537),broadcast({'type':_0x15ad91(0x1f1),'error':_0x139537[_0x15ad91(0x1f3)]}),scheduleReconnect();}}function scheduleReconnect(){const _0x223b49=_0x451177;reconnectTimeout&&clearTimeout(reconnectTimeout);if(ports['size']===0x0)return;const _0x373f3d=Math[_0x223b49(0x1fc)](0x3e8*Math[_0x223b49(0x1dd)](0x2,reconnectAttempts),MAX_RECONNECT_DELAY);reconnectAttempts++,console[_0x223b49(0x208)]('[SSE\x20Worker]\x20Scheduling\x20reconnect\x20in\x20'+_0x373f3d+_0x223b49(0x1cc)+reconnectAttempts+')'),reconnectTimeout=setTimeout(()=>{const _0x812def=_0x223b49;ports[_0x812def(0x1c8)]>0x0&&connect(currentUserId);},_0x373f3d);}function broadcast(_0x5b2d61){const _0x268826=_0x451177,_0x3e9dba=[];ports['forEach'](_0x42c2af=>{try{_0x42c2af['postMessage'](_0x5b2d61);}catch(_0x5e7abc){console['warn']('[SSE\x20Worker]\x20Failed\x20to\x20send\x20to\x20port,\x20removing:',_0x5e7abc),_0x3e9dba['push'](_0x42c2af);}}),_0x3e9dba[_0x268826(0x202)]>0x0&&cleanUpDeadPorts(_0x3e9dba),ports[_0x268826(0x1c8)]===0x0&&eventSource&&(console[_0x268826(0x208)](_0x268826(0x1c5)),eventSource[_0x268826(0x1f7)](),eventSource=null,reconnectTimeout&&(clearTimeout(reconnectTimeout),reconnectTimeout=null));}function subscribeTask(_0x759f6f,_0x989b28){const _0x2e2301=_0x451177;let _0x4ba00f=taskStreams['get'](_0x989b28);!_0x4ba00f&&(_0x4ba00f={'eventSource':null,'reconnectTimeout':null,'reconnectAttempts':0x0,'subscribedPorts':new Set()},taskStreams[_0x2e2301(0x1e7)](_0x989b28,_0x4ba00f));_0x4ba00f[_0x2e2301(0x1f9)][_0x2e2301(0x1e3)](_0x759f6f);if(!_0x4ba00f[_0x2e2301(0x201)]||_0x4ba00f[_0x2e2301(0x201)][_0x2e2301(0x1ca)]===EventSource['CLOSED'])connectTaskStream(_0x989b28);else{if(_0x4ba00f['eventSource'][_0x2e2301(0x1ca)]===EventSource[_0x2e2301(0x1e4)])try{_0x759f6f[_0x2e2301(0x1ce)]({'type':_0x2e2301(0x1ff),'taskId':_0x989b28});}catch(_0x2acd09){}}}function unsubscribeTask(_0x6198b5,_0x1a0728){const _0x336b6f=_0x451177,_0xc87fb0=taskStreams['get'](_0x1a0728);if(!_0xc87fb0)return;_0xc87fb0[_0x336b6f(0x1f9)][_0x336b6f(0x205)](_0x6198b5),_0xc87fb0['subscribedPorts'][_0x336b6f(0x1c8)]===0x0&&deferredCloseTaskStream(_0x1a0728);}function connectTaskStream(_0x595b55){const _0xcb19b5=_0x451177,_0x9f1adf=taskStreams['get'](_0x595b55);if(!_0x9f1adf)return;_0x9f1adf['eventSource']&&(_0x9f1adf['eventSource']['close'](),_0x9f1adf[_0xcb19b5(0x201)]=null);try{_0x9f1adf['eventSource']=new EventSource(_0xcb19b5(0x1c6)+_0x595b55+'/stream');for(const _0x347ebd of TASK_STREAM_EVENTS){_0x9f1adf['eventSource']['addEventListener'](_0x347ebd,_0x1d3e00=>{const _0x4397b5=_0xcb19b5;broadcastToTask(_0x595b55,_0x4397b5(0x1de)+_0x347ebd,_0x1d3e00['data']),_0x9f1adf[_0x4397b5(0x207)]=0x0;});}_0x9f1adf[_0xcb19b5(0x201)][_0xcb19b5(0x1e9)]('open',()=>{const _0x441493=_0xcb19b5;broadcastToTask(_0x595b55,_0x441493(0x1ff),'{}'),_0x9f1adf['reconnectAttempts']=0x0;}),_0x9f1adf[_0xcb19b5(0x201)][_0xcb19b5(0x1e9)](_0xcb19b5(0x1f1),()=>{const _0x548618=_0xcb19b5;broadcastToTask(_0x595b55,_0x548618(0x200),JSON[_0x548618(0x1d2)]({'error':_0x548618(0x1ec)})),_0x9f1adf['eventSource']&&(_0x9f1adf[_0x548618(0x201)]['close'](),_0x9f1adf[_0x548618(0x201)]=null),scheduleTaskReconnect(_0x595b55);});}catch(_0x49ec56){console[_0xcb19b5(0x1f1)]('[SSE\x20Worker]\x20Failed\x20to\x20create\x20task\x20EventSource\x20for\x20'+_0x595b55+':',_0x49ec56),broadcastToTask(_0x595b55,_0xcb19b5(0x200),JSON[_0xcb19b5(0x1d2)]({'error':_0x49ec56[_0xcb19b5(0x1f3)]})),scheduleTaskReconnect(_0x595b55);}}function broadcastToTask(_0x2c084d,_0x4e2084,_0x1db7b3){const _0x2133e9=_0x451177,_0x2642a0=taskStreams[_0x2133e9(0x1e0)](_0x2c084d);if(!_0x2642a0)return;const _0xeba88a=[];_0x2642a0[_0x2133e9(0x1f9)][_0x2133e9(0x1f4)](_0x413ada=>{const _0x3d1eb3=_0x2133e9;try{_0x413ada[_0x3d1eb3(0x1ce)]({'type':_0x4e2084,'taskId':_0x2c084d,'data':_0x1db7b3});}catch(_0x14398d){_0xeba88a['push'](_0x413ada);}}),_0xeba88a[_0x2133e9(0x202)]>0x0&&(_0xeba88a[_0x2133e9(0x1f4)](_0x2fcab9=>_0x2642a0[_0x2133e9(0x1f9)][_0x2133e9(0x205)](_0x2fcab9)),cleanUpDeadPorts(_0xeba88a),_0x2642a0['subscribedPorts'][_0x2133e9(0x1c8)]===0x0&&closeTaskStream(_0x2c084d));}function closeTaskStream(_0x2ee0d9){const _0x15ef01=_0x451177,_0x1c0de9=taskStreams['get'](_0x2ee0d9);if(!_0x1c0de9)return;_0x1c0de9[_0x15ef01(0x201)]&&_0x1c0de9[_0x15ef01(0x201)][_0x15ef01(0x1f7)](),_0x1c0de9[_0x15ef01(0x1f6)]&&clearTimeout(_0x1c0de9['reconnectTimeout']),taskStreams[_0x15ef01(0x205)](_0x2ee0d9);}function deferredCloseTaskStream(_0x354fee){setTimeout(()=>{const _0x4f01e8=_0xf238,_0x519e97=taskStreams['get'](_0x354fee);_0x519e97&&_0x519e97[_0x4f01e8(0x1f9)][_0x4f01e8(0x1c8)]===0x0&&closeTaskStream(_0x354fee);},0x0);}function scheduleTaskReconnect(_0x4b9eb9){const _0x23dac7=_0x451177,_0x2287cb=taskStreams['get'](_0x4b9eb9);if(!_0x2287cb||_0x2287cb[_0x23dac7(0x1f9)][_0x23dac7(0x1c8)]===0x0)return;_0x2287cb[_0x23dac7(0x1f6)]&&clearTimeout(_0x2287cb[_0x23dac7(0x1f6)]);const _0x121b02=Math['min'](0x3e8*Math[_0x23dac7(0x1dd)](0x2,_0x2287cb['reconnectAttempts']),MAX_RECONNECT_DELAY);_0x2287cb[_0x23dac7(0x207)]++,console['log'](_0x23dac7(0x1cf)+_0x4b9eb9+_0x23dac7(0x1d1)+_0x121b02+'ms'),_0x2287cb[_0x23dac7(0x1f6)]=setTimeout(()=>{const _0x76cc98=_0x23dac7;_0x2287cb[_0x76cc98(0x1f9)][_0x76cc98(0x1c8)]>0x0&&connectTaskStream(_0x4b9eb9);},_0x121b02);}function cleanUpDeadPorts(_0x45c41d){const _0x481099=_0x451177;for(const _0x3c86e0 of _0x45c41d){ports[_0x481099(0x205)](_0x3c86e0),taskStreams['forEach']((_0x3ca0e0,_0x583f87)=>{const _0x140d95=_0x481099;_0x3ca0e0[_0x140d95(0x1f9)][_0x140d95(0x205)](_0x3c86e0),_0x3ca0e0['subscribedPorts'][_0x140d95(0x1c8)]===0x0&&closeTaskStream(_0x583f87);});}}function _0xf238(_0x5ca8f0,_0x307e78){_0x5ca8f0=_0x5ca8f0-0x1c5;const _0x18e353=_0x18e3();let _0xf238c9=_0x18e353[_0x5ca8f0];if(_0xf238['sENtwo']===undefined){var _0x325a95=function(_0x26c372){const _0x26c4c2='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x238a83='',_0x2e84fb='';for(let _0x1dd259=0x0,_0x4b7eaf,_0x585304,_0x21da2a=0x0;_0x585304=_0x26c372['charAt'](_0x21da2a++);~_0x585304&&(_0x4b7eaf=_0x1dd259%0x4?_0x4b7eaf*0x40+_0x585304:_0x585304,_0x1dd259++%0x4)?_0x238a83+=String['fromCharCode'](0xff&_0x4b7eaf>>(-0x2*_0x1dd259&0x6)):0x0){_0x585304=_0x26c4c2['indexOf'](_0x585304);}for(let _0x55e2e8=0x0,_0x62ef1=_0x238a83['length'];_0x55e2e8<_0x62ef1;_0x55e2e8++){_0x2e84fb+='%'+('00'+_0x238a83['charCodeAt'](_0x55e2e8)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2e84fb);};_0xf238['jNyJPX']=_0x325a95,_0xf238['AaDlBo']={},_0xf238['sENtwo']=!![];}const _0x4035f2=_0x18e353[0x0],_0x39ab75=_0x5ca8f0+_0x4035f2,_0x59ea15=_0xf238['AaDlBo'][_0x39ab75];return!_0x59ea15?(_0xf238c9=_0xf238['jNyJPX'](_0xf238c9),_0xf238['AaDlBo'][_0x39ab75]=_0xf238c9):_0xf238c9=_0x59ea15,_0xf238c9;}function removePortFromAllTasks(_0x10a144){const _0x236a64=_0x451177;taskStreams[_0x236a64(0x1f4)]((_0x13229c,_0x13cbb0)=>{const _0x51957f=_0x236a64;_0x13229c[_0x51957f(0x1f9)][_0x51957f(0x1eb)](_0x10a144)&&(_0x13229c[_0x51957f(0x1f9)][_0x51957f(0x205)](_0x10a144),_0x13229c['subscribedPorts'][_0x51957f(0x1c8)]===0x0&&closeTaskStream(_0x13cbb0));});}self[_0x451177(0x1ed)]=function(_0x2927dc){const _0x5649cb=_0x451177,_0x110983=_0x2927dc[_0x5649cb(0x1c9)][0x0];ports['add'](_0x110983),console[_0x5649cb(0x208)](_0x5649cb(0x1f8)+ports['size']),_0x110983['onmessage']=function(_0x39325a){const _0x582ace=_0x5649cb,{action:_0x2ddeed,userId:_0x33b605,taskId:_0x59c0eb}=_0x39325a[_0x582ace(0x204)];switch(_0x2ddeed){case'connect':connect(_0x33b605);eventSource&&eventSource[_0x582ace(0x1ca)]===EventSource['OPEN']&&_0x110983[_0x582ace(0x1ce)]({'type':_0x582ace(0x1d4)});break;case'disconnect':ports[_0x582ace(0x205)](_0x110983),removePortFromAllTasks(_0x110983),console[_0x582ace(0x208)](_0x582ace(0x1cb)+ports[_0x582ace(0x1c8)]);ports[_0x582ace(0x1c8)]===0x0&&eventSource&&(eventSource[_0x582ace(0x1f7)](),eventSource=null,reconnectTimeout&&(clearTimeout(reconnectTimeout),reconnectTimeout=null));break;case'changeFilter':_0x33b605!==currentUserId&&connect(_0x33b605);break;case _0x582ace(0x203):subscribeTask(_0x110983,_0x59c0eb);break;case'unsubscribeTask':unsubscribeTask(_0x110983,_0x59c0eb);break;default:console[_0x582ace(0x1cd)](_0x582ace(0x1fd),_0x2ddeed);}},_0x110983[_0x5649cb(0x1d0)]=function(_0x1efcf7){const _0x22b2b6=_0x5649cb;console[_0x22b2b6(0x1f1)](_0x22b2b6(0x1d8),_0x1efcf7),ports[_0x22b2b6(0x205)](_0x110983),removePortFromAllTasks(_0x110983);},_0x110983['start']();};
1
+ const _0x50de1e=_0x38e5;(function(_0x438e5d,_0x31f913){const _0x1d17cd=_0x38e5,_0x111fd2=_0x438e5d();while(!![]){try{const _0x272596=-parseInt(_0x1d17cd(0xa1))/0x1*(-parseInt(_0x1d17cd(0x8b))/0x2)+-parseInt(_0x1d17cd(0x91))/0x3*(parseInt(_0x1d17cd(0x80))/0x4)+-parseInt(_0x1d17cd(0xa3))/0x5*(parseInt(_0x1d17cd(0xa4))/0x6)+-parseInt(_0x1d17cd(0xc5))/0x7*(parseInt(_0x1d17cd(0x89))/0x8)+parseInt(_0x1d17cd(0xb3))/0x9+parseInt(_0x1d17cd(0x8a))/0xa+-parseInt(_0x1d17cd(0xb4))/0xb*(-parseInt(_0x1d17cd(0x99))/0xc);if(_0x272596===_0x31f913)break;else _0x111fd2['push'](_0x111fd2['shift']());}catch(_0x2abf79){_0x111fd2['push'](_0x111fd2['shift']());}}}(_0x4acb,0xabad4));const ports=new Set();let eventSource=null,currentUserId=null,reconnectTimeout=null,reconnectAttempts=0x0;const MAX_RECONNECT_DELAY=0x7530,taskStreams=new Map(),TASK_STREAM_EVENTS=[_0x50de1e(0xac),_0x50de1e(0x84),'metadata',_0x50de1e(0x9c),'changed-files',_0x50de1e(0xb2),'complete'];function connect(_0x4c7af0){const _0x126e05=_0x50de1e;eventSource&&currentUserId!==_0x4c7af0&&(eventSource[_0x126e05(0xab)](),eventSource=null);if(eventSource&&eventSource['readyState']!==EventSource[_0x126e05(0x95)])return;currentUserId=_0x4c7af0;const _0x3bfa5c=_0x4c7af0&&_0x4c7af0!=='me'?_0x126e05(0xbc)+_0x4c7af0:'';try{eventSource=new EventSource('/tasks/updates'+_0x3bfa5c),eventSource[_0x126e05(0xbd)](_0x126e05(0xb9),_0x25b932=>{const _0x1ecaea=_0x126e05;broadcast({'type':'snapshot','data':_0x25b932[_0x1ecaea(0x85)]}),reconnectAttempts=0x0;}),eventSource[_0x126e05(0xbd)](_0x126e05(0xac),_0x3784a7=>{const _0x290a55=_0x126e05;broadcast({'type':_0x290a55(0xac),'data':_0x3784a7[_0x290a55(0x85)]});}),eventSource[_0x126e05(0xbd)]('status',_0x2fe1ea=>{const _0x70bca1=_0x126e05;broadcast({'type':_0x70bca1(0xa9),'data':_0x2fe1ea[_0x70bca1(0x85)]});}),eventSource['addEventListener']('new-task',_0x506061=>{const _0x284c11=_0x126e05;broadcast({'type':_0x284c11(0xbf),'data':_0x506061['data']});}),eventSource[_0x126e05(0xbd)](_0x126e05(0x87),_0x157cd9=>{const _0x3e665d=_0x126e05;broadcast({'type':_0x3e665d(0x87),'data':_0x157cd9[_0x3e665d(0x85)]});}),eventSource[_0x126e05(0xbd)](_0x126e05(0xb8),()=>{const _0x3df09d=_0x126e05;broadcast({'type':_0x3df09d(0x8f)}),reconnectAttempts=0x0;}),eventSource[_0x126e05(0xbd)](_0x126e05(0x81),_0x356753=>{const _0x48a662=_0x126e05;console[_0x48a662(0x81)](_0x48a662(0xa5),_0x356753),broadcast({'type':'error','error':_0x48a662(0xc0)}),eventSource&&(eventSource[_0x48a662(0xab)](),eventSource=null),scheduleReconnect();});}catch(_0x18530c){console[_0x126e05(0x81)](_0x126e05(0x8e),_0x18530c),broadcast({'type':'error','error':_0x18530c['message']}),scheduleReconnect();}}function scheduleReconnect(){const _0x53bb51=_0x50de1e;reconnectTimeout&&clearTimeout(reconnectTimeout);if(ports['size']===0x0)return;const _0x414e73=Math[_0x53bb51(0xa6)](0x3e8*Math['pow'](0x2,reconnectAttempts),MAX_RECONNECT_DELAY);reconnectAttempts++,console[_0x53bb51(0x9e)](_0x53bb51(0x92)+_0x414e73+_0x53bb51(0xb0)+reconnectAttempts+')'),reconnectTimeout=setTimeout(()=>{ports['size']>0x0&&connect(currentUserId);},_0x414e73);}function broadcast(_0x407d9e){const _0x1d0966=_0x50de1e,_0x132a91=[];ports[_0x1d0966(0xc3)](_0x4a2662=>{const _0xf74d41=_0x1d0966;try{_0x4a2662['postMessage'](_0x407d9e);}catch(_0x291b8e){console[_0xf74d41(0xc2)](_0xf74d41(0xc6),_0x291b8e),_0x132a91[_0xf74d41(0xbb)](_0x4a2662);}}),_0x132a91['length']>0x0&&cleanUpDeadPorts(_0x132a91),ports[_0x1d0966(0xb5)]===0x0&&eventSource&&(console[_0x1d0966(0x9e)]('[SSE\x20Worker]\x20No\x20more\x20connected\x20ports,\x20closing\x20SSE'),eventSource[_0x1d0966(0xab)](),eventSource=null,reconnectTimeout&&(clearTimeout(reconnectTimeout),reconnectTimeout=null));}function subscribeTask(_0x2400db,_0x2c2f18){const _0x8dbe2a=_0x50de1e;let _0x4c3574=taskStreams['get'](_0x2c2f18);!_0x4c3574&&(_0x4c3574={'eventSource':null,'reconnectTimeout':null,'reconnectAttempts':0x0,'subscribedPorts':new Set()},taskStreams['set'](_0x2c2f18,_0x4c3574));_0x4c3574[_0x8dbe2a(0xaf)][_0x8dbe2a(0x96)](_0x2400db);if(!_0x4c3574[_0x8dbe2a(0xbe)]||_0x4c3574[_0x8dbe2a(0xbe)]['readyState']===EventSource['CLOSED'])connectTaskStream(_0x2c2f18);else{if(_0x4c3574[_0x8dbe2a(0xbe)][_0x8dbe2a(0xae)]===EventSource[_0x8dbe2a(0x97)])try{_0x2400db[_0x8dbe2a(0x9b)]({'type':'task:connected','taskId':_0x2c2f18});}catch(_0x13a0e3){}}}function unsubscribeTask(_0xdb2c52,_0x37ba46){const _0x6a9daf=_0x50de1e,_0x3d336f=taskStreams[_0x6a9daf(0x86)](_0x37ba46);if(!_0x3d336f)return;_0x3d336f[_0x6a9daf(0xaf)][_0x6a9daf(0xb6)](_0xdb2c52),_0x3d336f['subscribedPorts'][_0x6a9daf(0xb5)]===0x0&&deferredCloseTaskStream(_0x37ba46);}function _0x4acb(){const _0x4e5c5f=['BMv3lxrHC2S','q29UBMvJDgLVBIbLCNjVCG','C3rYAw5NAwz5','D2fYBG','zM9YrwfJAa','DgfZAZPLCNjVCG','mZv2EMr2DxG','w1ntrsbxB3jRzxjDiezHAwXLzcb0BYbZzw5KihrVihbVCNqSihjLBw92Aw5NoG','mtyWmtuYvxH1vLfN','zxjYB3i','CMvJB25Uzwn0qxr0zw1WDhm','DgfZAZPJB25Uzwn0zwq','Bg9NCW','zgf0yq','z2v0','CxvLDwuTCg9ZAxrPB24','Dw5ZDwjZy3jPyMvuyxnR','mtG1nZGZmM9tsvnjAW','mtmWmdaZmtbJuwjmtfm','mtmZmdrdCvjdBhK','l3n0CMvHBq','C3rHCNq','w1ntrsbxB3jRzxjDiezHAwXLzcb0BYbJCMvHDguGrxzLBNrtB3vYy2u6','y29UBMvJDgvK','y29UBMvJDa','mta1yLHOvgrT','w1ntrsbxB3jRzxjDifnJAgvKDwXPBMCGCMvJB25Uzwn0igLUia','BwvZC2fNzq','Cg9YDhm','q0Xpu0ve','ywrK','t1bftG','y2HHBMDLrMLSDgvY','oti3mtjnDwDUqve','B25JB25Uzwn0','Cg9ZDe1LC3nHz2u','C3vTBwfYEq','w1ntrsbxB3jRzxjDifvUA25VD24Gywn0Aw9UoG','Bg9N','l3rHC2TZlW','w1ntrsbxB3jRzxjDifnJAgvKDwXPBMCGDgfZAYbZDhjLyw0GCMvJB25Uzwn0igzVCIa','mtm5t3zpALzp','B25TzxnZywDLzxjYB3i','mtK5nxrxD2z3za','ntK0mg5zB2jzCa','w1ntrsbxB3jRzxjDienVBM5Ly3rPB24GzxjYB3i6','BwLU','w1ntrsbxB3jRzxjDifbVCNqGBwvZC2fNzsbLCNjVCJO','w1ntrsbxB3jRzxjDiezHAwXLzcb0BYbJCMvHDguGDgfZAYbfDMvUDfnVDxjJzsbMB3iG','C3rHDhvZ','Cg93','y2XVC2u','ywn0AxzPDhK','zgLZy29UBMvJDa','CMvHzhLtDgf0zq','C3vIC2nYAwjLzfbVCNrZ','BxmGkgf0DgvTChqG','w1ntrsbxB3jRzxjDie5LDYbWB3j0ignVBM5Ly3rLzc4Gvg90ywWGCg9YDhm6ia','yxbWlxnLCNzLCI1ZDgf0Dxm','ntu1mZuYmLfmB1bxsG','mte2nMnfuKD6rq','C2L6zq','zgvSzxrL','BgvUz3rO','B3bLBG','C25HChnOB3q','CMvJB25Uzwn0vgLTzw91Da','ChvZAa','p3vZzxjjzd0','ywrKrxzLBNrmAxn0zw5LCG','zxzLBNrtB3vYy2u'];_0x4acb=function(){return _0x4e5c5f;};return _0x4acb();}function connectTaskStream(_0x262f7f){const _0x48f968=_0x50de1e,_0x5aba92=taskStreams[_0x48f968(0x86)](_0x262f7f);if(!_0x5aba92)return;_0x5aba92[_0x48f968(0xbe)]&&(_0x5aba92[_0x48f968(0xbe)][_0x48f968(0xab)](),_0x5aba92[_0x48f968(0xbe)]=null);try{_0x5aba92['eventSource']=new EventSource(_0x48f968(0x9f)+_0x262f7f+_0x48f968(0x8c));for(const _0x18d890 of TASK_STREAM_EVENTS){_0x5aba92[_0x48f968(0xbe)][_0x48f968(0xbd)](_0x18d890,_0x1859b8=>{const _0x272ed9=_0x48f968;broadcastToTask(_0x262f7f,'task:'+_0x18d890,_0x1859b8[_0x272ed9(0x85)]),_0x5aba92['reconnectAttempts']=0x0;});}_0x5aba92['eventSource'][_0x48f968(0xbd)](_0x48f968(0xb8),()=>{const _0x13fd9f=_0x48f968;broadcastToTask(_0x262f7f,_0x13fd9f(0x83),'{}'),_0x5aba92[_0x13fd9f(0x82)]=0x0;}),_0x5aba92[_0x48f968(0xbe)][_0x48f968(0xbd)](_0x48f968(0x81),()=>{const _0x4b64cf=_0x48f968;broadcastToTask(_0x262f7f,_0x4b64cf(0xc4),JSON['stringify']({'error':_0x4b64cf(0xc0)})),_0x5aba92[_0x4b64cf(0xbe)]&&(_0x5aba92[_0x4b64cf(0xbe)][_0x4b64cf(0xab)](),_0x5aba92[_0x4b64cf(0xbe)]=null),scheduleTaskReconnect(_0x262f7f);});}catch(_0x3aac34){console[_0x48f968(0x81)](_0x48f968(0xa8)+_0x262f7f+':',_0x3aac34),broadcastToTask(_0x262f7f,_0x48f968(0xc4),JSON[_0x48f968(0xc1)]({'error':_0x3aac34[_0x48f968(0x93)]})),scheduleTaskReconnect(_0x262f7f);}}function broadcastToTask(_0x771dcf,_0x32bf49,_0x47082e){const _0x4931a7=_0x50de1e,_0x252c03=taskStreams[_0x4931a7(0x86)](_0x771dcf);if(!_0x252c03)return;const _0x399ca2=[];_0x252c03[_0x4931a7(0xaf)][_0x4931a7(0xc3)](_0x5adb16=>{const _0xabbb3a=_0x4931a7;try{_0x5adb16[_0xabbb3a(0x9b)]({'type':_0x32bf49,'taskId':_0x771dcf,'data':_0x47082e});}catch(_0x2001c8){_0x399ca2[_0xabbb3a(0xbb)](_0x5adb16);}}),_0x399ca2[_0x4931a7(0xb7)]>0x0&&(_0x399ca2['forEach'](_0x1538fe=>_0x252c03[_0x4931a7(0xaf)][_0x4931a7(0xb6)](_0x1538fe)),cleanUpDeadPorts(_0x399ca2),_0x252c03['subscribedPorts']['size']===0x0&&closeTaskStream(_0x771dcf));}function closeTaskStream(_0x5738be){const _0xff7f13=_0x50de1e,_0x55b1d3=taskStreams['get'](_0x5738be);if(!_0x55b1d3)return;_0x55b1d3[_0xff7f13(0xbe)]&&_0x55b1d3['eventSource'][_0xff7f13(0xab)](),_0x55b1d3['reconnectTimeout']&&clearTimeout(_0x55b1d3[_0xff7f13(0xba)]),taskStreams[_0xff7f13(0xb6)](_0x5738be);}function deferredCloseTaskStream(_0x1dfe53){setTimeout(()=>{const _0x1de235=_0x38e5,_0x2fd684=taskStreams[_0x1de235(0x86)](_0x1dfe53);_0x2fd684&&_0x2fd684['subscribedPorts'][_0x1de235(0xb5)]===0x0&&closeTaskStream(_0x1dfe53);},0x0);}function scheduleTaskReconnect(_0x162fb8){const _0x2325e1=_0x50de1e,_0x3df658=taskStreams[_0x2325e1(0x86)](_0x162fb8);if(!_0x3df658||_0x3df658[_0x2325e1(0xaf)][_0x2325e1(0xb5)]===0x0)return;_0x3df658['reconnectTimeout']&&clearTimeout(_0x3df658[_0x2325e1(0xba)]);const _0x325a7b=Math['min'](0x3e8*Math[_0x2325e1(0xaa)](0x2,_0x3df658['reconnectAttempts']),MAX_RECONNECT_DELAY);_0x3df658[_0x2325e1(0x82)]++,console[_0x2325e1(0x9e)](_0x2325e1(0xa0)+_0x162fb8+'\x20in\x20'+_0x325a7b+'ms'),_0x3df658[_0x2325e1(0xba)]=setTimeout(()=>{const _0x3e9938=_0x2325e1;_0x3df658[_0x3e9938(0xaf)][_0x3e9938(0xb5)]>0x0&&connectTaskStream(_0x162fb8);},_0x325a7b);}function _0x38e5(_0x2689cb,_0x15c0e0){_0x2689cb=_0x2689cb-0x80;const _0x4acb9d=_0x4acb();let _0x38e586=_0x4acb9d[_0x2689cb];if(_0x38e5['ubaxpS']===undefined){var _0x49039f=function(_0x18bbcd){const _0x4782dd='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4c7af0='',_0x3bfa5c='';for(let _0x25b932=0x0,_0x3784a7,_0x2fe1ea,_0x506061=0x0;_0x2fe1ea=_0x18bbcd['charAt'](_0x506061++);~_0x2fe1ea&&(_0x3784a7=_0x25b932%0x4?_0x3784a7*0x40+_0x2fe1ea:_0x2fe1ea,_0x25b932++%0x4)?_0x4c7af0+=String['fromCharCode'](0xff&_0x3784a7>>(-0x2*_0x25b932&0x6)):0x0){_0x2fe1ea=_0x4782dd['indexOf'](_0x2fe1ea);}for(let _0x157cd9=0x0,_0x356753=_0x4c7af0['length'];_0x157cd9<_0x356753;_0x157cd9++){_0x3bfa5c+='%'+('00'+_0x4c7af0['charCodeAt'](_0x157cd9)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3bfa5c);};_0x38e5['nDtKFo']=_0x49039f,_0x38e5['RDFHAI']={},_0x38e5['ubaxpS']=!![];}const _0x150248=_0x4acb9d[0x0],_0x3e84b1=_0x2689cb+_0x150248,_0x328421=_0x38e5['RDFHAI'][_0x3e84b1];return!_0x328421?(_0x38e586=_0x38e5['nDtKFo'](_0x38e586),_0x38e5['RDFHAI'][_0x3e84b1]=_0x38e586):_0x38e586=_0x328421,_0x38e586;}function cleanUpDeadPorts(_0x3c4627){const _0x25056e=_0x50de1e;for(const _0x11ac26 of _0x3c4627){ports[_0x25056e(0xb6)](_0x11ac26),taskStreams['forEach']((_0x209380,_0x4c7762)=>{const _0x1ea136=_0x25056e;_0x209380[_0x1ea136(0xaf)][_0x1ea136(0xb6)](_0x11ac26),_0x209380[_0x1ea136(0xaf)][_0x1ea136(0xb5)]===0x0&&closeTaskStream(_0x4c7762);});}}function removePortFromAllTasks(_0x37a5e8){const _0x4bed0e=_0x50de1e;taskStreams[_0x4bed0e(0xc3)]((_0x5a9e06,_0x38a1cc)=>{const _0x1d9858=_0x4bed0e;_0x5a9e06[_0x1d9858(0xaf)]['has'](_0x37a5e8)&&(_0x5a9e06['subscribedPorts']['delete'](_0x37a5e8),_0x5a9e06['subscribedPorts'][_0x1d9858(0xb5)]===0x0&&closeTaskStream(_0x38a1cc));});}self[_0x50de1e(0x9a)]=function(_0x1bb46f){const _0x15df45=_0x50de1e,_0x2d43aa=_0x1bb46f[_0x15df45(0x94)][0x0];ports[_0x15df45(0x96)](_0x2d43aa),console[_0x15df45(0x9e)](_0x15df45(0xb1)+ports[_0x15df45(0xb5)]),_0x2d43aa['onmessage']=function(_0x4d330d){const _0x5c6053=_0x15df45,{action:_0x42a17b,userId:_0x10b936,taskId:_0x842bd7}=_0x4d330d['data'];switch(_0x42a17b){case _0x5c6053(0x90):connect(_0x10b936);eventSource&&eventSource[_0x5c6053(0xae)]===EventSource[_0x5c6053(0x97)]&&_0x2d43aa[_0x5c6053(0x9b)]({'type':_0x5c6053(0x8f)});break;case _0x5c6053(0xad):ports[_0x5c6053(0xb6)](_0x2d43aa),removePortFromAllTasks(_0x2d43aa),console[_0x5c6053(0x9e)]('[SSE\x20Worker]\x20Port\x20disconnected.\x20Total\x20ports:\x20'+ports[_0x5c6053(0xb5)]);ports[_0x5c6053(0xb5)]===0x0&&eventSource&&(eventSource['close'](),eventSource=null,reconnectTimeout&&(clearTimeout(reconnectTimeout),reconnectTimeout=null));break;case _0x5c6053(0x98):_0x10b936!==currentUserId&&connect(_0x10b936);break;case'subscribeTask':subscribeTask(_0x2d43aa,_0x842bd7);break;case _0x5c6053(0x88):unsubscribeTask(_0x2d43aa,_0x842bd7);break;default:console['warn'](_0x5c6053(0x9d),_0x42a17b);}},_0x2d43aa[_0x15df45(0xa2)]=function(_0x1e5a64){const _0x3c5e66=_0x15df45;console['error'](_0x3c5e66(0xa7),_0x1e5a64),ports[_0x3c5e66(0xb6)](_0x2d43aa),removePortFromAllTasks(_0x2d43aa);},_0x2d43aa[_0x15df45(0x8d)]();};
@@ -13656,7 +13656,7 @@ select option[value=""] {
13656
13656
  .ai-analysis-content {
13657
13657
  width: 850px;
13658
13658
  max-width: 95vw;
13659
- height: min(620px, 85vh);
13659
+ height: min(640px, 85vh);
13660
13660
  display: flex;
13661
13661
  flex-direction: column;
13662
13662
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
@@ -13926,6 +13926,133 @@ select option[value=""] {
13926
13926
  color: var(--color-text-muted);
13927
13927
  }
13928
13928
 
13929
+ /* Variant Selector (collapsible checklist) */
13930
+ .variant-selector-toggle {
13931
+ display: flex;
13932
+ align-items: center;
13933
+ gap: 8px;
13934
+ width: 100%;
13935
+ padding: 8px 12px;
13936
+ background: var(--color-surface);
13937
+ border: 1px solid var(--color-border);
13938
+ border-radius: 8px;
13939
+ cursor: pointer;
13940
+ font-size: 13px;
13941
+ color: var(--color-text);
13942
+ transition: all 0.2s ease;
13943
+ }
13944
+
13945
+ .variant-selector-toggle:hover {
13946
+ border-color: var(--color-accent);
13947
+ }
13948
+
13949
+ .variant-selector-toggle .section-label {
13950
+ font-weight: 600;
13951
+ font-size: 12px;
13952
+ margin-bottom: 0;
13953
+ }
13954
+
13955
+ .variant-selector-summary {
13956
+ flex: 1;
13957
+ text-align: right;
13958
+ font-size: 12px;
13959
+ color: var(--color-text-muted);
13960
+ }
13961
+
13962
+ .variant-selector-toggle .toggle-chevron {
13963
+ transition: transform 0.2s ease;
13964
+ flex-shrink: 0;
13965
+ }
13966
+
13967
+ .variant-selector-toggle.expanded .toggle-chevron {
13968
+ transform: rotate(180deg);
13969
+ }
13970
+
13971
+ .variant-selector-list {
13972
+ display: flex;
13973
+ flex-direction: column;
13974
+ gap: 0;
13975
+ margin-top: 6px;
13976
+ border: 1px solid var(--color-border);
13977
+ border-radius: 8px;
13978
+ background: var(--color-surface);
13979
+ overflow: hidden;
13980
+ }
13981
+
13982
+ .variant-selector-item {
13983
+ display: flex;
13984
+ align-items: center;
13985
+ gap: 8px;
13986
+ padding: 7px 12px;
13987
+ cursor: pointer;
13988
+ font-size: 13px;
13989
+ transition: background 0.15s ease;
13990
+ margin: 0;
13991
+ }
13992
+
13993
+ .variant-selector-item:hover {
13994
+ background: var(--color-surface-muted);
13995
+ }
13996
+
13997
+ .variant-selector-item + .variant-selector-item {
13998
+ border-top: 1px solid var(--color-border);
13999
+ }
14000
+
14001
+ .variant-selector-item input[type="checkbox"] {
14002
+ width: 15px;
14003
+ height: 15px;
14004
+ accent-color: var(--color-accent);
14005
+ cursor: pointer;
14006
+ flex-shrink: 0;
14007
+ margin: 0;
14008
+ }
14009
+
14010
+ .variant-selector-item .variant-agent-icon {
14011
+ width: 16px;
14012
+ height: 16px;
14013
+ display: inline-flex;
14014
+ align-items: center;
14015
+ justify-content: center;
14016
+ flex-shrink: 0;
14017
+ color: var(--color-text-muted);
14018
+ }
14019
+
14020
+ .variant-selector-item .variant-agent-icon svg {
14021
+ width: 14px;
14022
+ height: 14px;
14023
+ }
14024
+
14025
+ .variant-selector-item .variant-agent-name {
14026
+ color: var(--color-text);
14027
+ font-weight: 500;
14028
+ }
14029
+
14030
+ .variant-selector-item .variant-task-id {
14031
+ color: var(--color-text-muted);
14032
+ font-size: 11px;
14033
+ font-family: var(--font-mono, monospace);
14034
+ margin-left: auto;
14035
+ }
14036
+
14037
+ /* Review mode verdict styles */
14038
+ .timeline-verdict,
14039
+ .judgment-verdict {
14040
+ font-size: 12px;
14041
+ font-weight: 500;
14042
+ }
14043
+
14044
+ .verdict-pass {
14045
+ color: var(--color-success);
14046
+ }
14047
+
14048
+ .verdict-fail {
14049
+ color: var(--color-danger, #ef4444);
14050
+ }
14051
+
14052
+ .verdict-needs-improvement {
14053
+ color: var(--color-warning);
14054
+ }
14055
+
13929
14056
  /* Judge Agent Selector - Enhanced */
13930
14057
  .judge-agent-selector {
13931
14058
  display: grid;
@@ -184,6 +184,13 @@
184
184
  </svg>
185
185
  <span class="option-text">Save as Objective...</span>
186
186
  </button>
187
+ <button class="dropdown-item" id="more-ai-review" data-action="ai-review" hidden>
188
+ <svg class="option-icon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
189
+ <path d="M9 11l3 3L22 4"></path>
190
+ <path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"></path>
191
+ </svg>
192
+ <span class="option-text">AI Review...</span>
193
+ </button>
187
194
  <button class="dropdown-item" id="more-pull-changes" data-action="pull-changes">
188
195
  <svg class="option-icon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
189
196
  <path d="M12 5v14"></path>
@@ -1130,7 +1137,7 @@
1130
1137
  </div>
1131
1138
  <div class="modal-footer">
1132
1139
  <button class="btn-ghost" id="cancel-resubmit">Cancel</button>
1133
- <button class="btn-primary" id="confirm-resubmit">Launch</button>
1140
+ <button class="btn-primary" id="confirm-resubmit" title="Launch (Ctrl+Enter)">Launch</button>
1134
1141
  </div>
1135
1142
  </div>
1136
1143
  </div>
@@ -1573,6 +1580,20 @@
1573
1580
  </div>
1574
1581
  </div>
1575
1582
 
1583
+ <!-- Variant Selection (collapsible) -->
1584
+ <div class="ai-analysis-section variant-selector-section" id="variant-selector-section" hidden>
1585
+ <button class="variant-selector-toggle" id="variant-selector-toggle" type="button">
1586
+ <span class="section-label">Variants</span>
1587
+ <span class="variant-selector-summary" id="variant-selector-summary">All selected</span>
1588
+ <svg class="toggle-chevron" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
1589
+ <polyline points="6 9 12 15 18 9"></polyline>
1590
+ </svg>
1591
+ </button>
1592
+ <div class="variant-selector-list" id="variant-selector-list" hidden>
1593
+ <!-- Populated dynamically by updateVariantSelector() -->
1594
+ </div>
1595
+ </div>
1596
+
1576
1597
  <!-- Judge Agent Selection - Enhanced Cards -->
1577
1598
  <div class="ai-analysis-section">
1578
1599
  <label class="section-label">Choose Your Judge</label>