@profoundlogic/coderflow-server 0.5.0 → 0.5.2
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.
- package/README.md +15 -163
- package/dist/README.md +15 -163
- package/dist/base-image/agent-wrapper.sh +1 -1
- package/dist/capture-screenshot.mjs +34 -0
- package/dist/coder-server.js +1 -1
- package/dist/config/cli-models.json +4 -3
- package/dist/config.js +1 -1
- package/dist/lib/agent-keepalive.js +1 -1
- package/dist/lib/agent-models.js +1 -1
- package/dist/lib/api-keys.js +1 -1
- package/dist/lib/apiKeys.js +1 -1
- package/dist/lib/app-server-ports.js +1 -1
- package/dist/lib/auto-judge.js +1 -1
- package/dist/lib/automation-service.js +1 -1
- package/dist/lib/basic-auth.js +1 -1
- package/dist/lib/bindings.js +1 -1
- package/dist/lib/build-history.js +1 -1
- package/dist/lib/build-output-service.js +1 -1
- package/dist/lib/build-scheduler.js +1 -1
- package/dist/lib/build-service.js +1 -1
- package/dist/lib/ca-certificates.js +1 -1
- package/dist/lib/claude-oauth-refresh.js +1 -1
- package/dist/lib/cli/build.js +1 -1
- package/dist/lib/cli/cleanup-users.js +1 -0
- package/dist/lib/cli/config-command.js +1 -1
- package/dist/lib/cli/config.js +1 -1
- package/dist/lib/cli/create-user.js +1 -1
- package/dist/lib/cli/grant-admin.js +1 -0
- package/dist/lib/cli/init.js +1 -1
- package/dist/lib/cli/jira.js +1 -1
- package/dist/lib/cli/license.js +1 -1
- package/dist/lib/cli/list-roles.js +1 -0
- package/dist/lib/cli/list-users.js +1 -0
- package/dist/lib/cli/server-manager.js +1 -1
- package/dist/lib/cli/set-password.js +1 -0
- package/dist/lib/config-migration.js +1 -1
- package/dist/lib/container-credential-sync.js +1 -1
- package/dist/lib/container-tokens.js +1 -1
- package/dist/lib/data-dir.js +1 -1
- package/dist/lib/deployment-history.js +1 -1
- package/dist/lib/deployment-service.js +1 -1
- package/dist/lib/docker-utils.js +1 -1
- package/dist/lib/email.js +1 -1
- package/dist/lib/emailTemplates.js +1 -1
- package/dist/lib/entitlement.js +1 -1
- package/dist/lib/external-connections.js +1 -1
- package/dist/lib/fetch-utils.js +1 -1
- package/dist/lib/git-commit-details-route.js +1 -1
- package/dist/lib/git-history-diff-guardrails.js +1 -1
- package/dist/lib/git-provider-service.js +1 -1
- package/dist/lib/git-provider-setup/github-setup-handler.js +1 -1
- package/dist/lib/git-provider-setup/index.js +1 -1
- package/dist/lib/git-provider-setup/setup-factory.js +1 -1
- package/dist/lib/git-provider-setup/setup-interface.js +1 -1
- package/dist/lib/git-providers/azure-devops-provider.js +1 -1
- package/dist/lib/git-providers/github-app-provider.js +1 -1
- package/dist/lib/git-providers/index.js +1 -1
- package/dist/lib/git-providers/provider-factory.js +1 -1
- package/dist/lib/git-providers/provider-interface.js +1 -1
- package/dist/lib/github-urls.js +1 -1
- package/dist/lib/group-objective-linking.js +1 -1
- package/dist/lib/ibmi-sync.js +1 -0
- package/dist/lib/jira-client.js +1 -1
- package/dist/lib/judge-blinding.js +1 -1
- package/dist/lib/logger.js +1 -1
- package/dist/lib/migration-to-scoped-rbac.js +1 -1
- package/dist/lib/model-fetcher.js +1 -1
- package/dist/lib/notifications.js +1 -1
- package/dist/lib/objective-context.js +1 -1
- package/dist/lib/oidc-auth.js +1 -1
- package/dist/lib/oidc-device-flow.js +1 -1
- package/dist/lib/passwordTokens.js +1 -1
- package/dist/lib/permission-resolver.js +1 -1
- package/dist/lib/pin-cascade.js +1 -1
- package/dist/lib/provider-accounts.js +1 -1
- package/dist/lib/provider-oauth.js +1 -1
- package/dist/lib/provider-profile.js +1 -1
- package/dist/lib/provider-token-refresh.js +1 -1
- package/dist/lib/rbac-user-state.js +1 -1
- package/dist/lib/request-url.js +1 -1
- package/dist/lib/rewind.js +1 -1
- package/dist/lib/role-definitions.js +1 -1
- package/dist/lib/roles.js +1 -1
- package/dist/lib/secrets.js +1 -1
- package/dist/lib/setup-repo-git-auth.js +1 -1
- package/dist/lib/state-capture.js +1 -1
- package/dist/lib/static-files.js +1 -1
- package/dist/lib/task-name-format.js +1 -1
- package/dist/lib/task-name-generator.js +1 -1
- package/dist/lib/task-source-metadata.js +1 -1
- package/dist/lib/teams.js +1 -1
- package/dist/lib/user-git-oauth.js +1 -1
- package/dist/lib/user-git-tokens.js +1 -1
- package/dist/lib/users.js +1 -1
- package/dist/middleware/requireAuth.js +1 -1
- package/dist/middleware/requireInit.js +1 -1
- package/dist/middleware/requirePermission.js +1 -1
- package/dist/package.json +1 -1
- package/dist/playwright.config.js +1 -1
- package/dist/routes/apiKeys.js +1 -1
- package/dist/routes/auth-oidc.js +1 -1
- package/dist/routes/auth.js +1 -1
- package/dist/routes/automations.js +1 -1
- package/dist/routes/bindings.js +1 -1
- package/dist/routes/build.js +1 -1
- package/dist/routes/containers.js +1 -1
- package/dist/routes/deploy-task.js +1 -1
- package/dist/routes/environment-management.js +1 -1
- package/dist/routes/environments.js +1 -1
- package/dist/routes/external-skills.js +1 -1
- package/dist/routes/git-credentials.js +1 -1
- package/dist/routes/git-oauth.js +1 -1
- package/dist/routes/git-provider-setup.js +1 -1
- package/dist/routes/health.js +1 -1
- package/dist/routes/jira.js +1 -1
- package/dist/routes/objective-management.js +1 -1
- package/dist/routes/password.js +1 -1
- package/dist/routes/prompt.js +1 -1
- package/dist/routes/provider-auth.js +1 -1
- package/dist/routes/qa.js +1 -1
- package/dist/routes/roles.js +1 -1
- package/dist/routes/settings.js +1 -1
- package/dist/routes/skill-management.js +1 -1
- package/dist/routes/skills.js +1 -1
- package/dist/routes/tasks.js +1 -1
- package/dist/routes/teams.js +1 -1
- package/dist/routes/templates.js +1 -1
- package/dist/routes/test-task.js +1 -1
- package/dist/routes/test.js +1 -1
- package/dist/routes/users.js +1 -1
- package/dist/routes/visualizations.js +1 -1
- package/dist/scripts/create-user.js +1 -1
- package/dist/scripts/migrate-config-to-data-dir.js +1 -1
- package/dist/scripts/sync_to_ibmi.sh +204 -0
- package/dist/start.js +1 -1
- package/dist/web-ui/public/activity-detail-modal.js +1 -1
- package/dist/web-ui/public/activity-feed.js +1 -1
- package/dist/web-ui/public/activity-formatters.js +1 -1
- package/dist/web-ui/public/agent-event-parser.js +1 -1
- package/dist/web-ui/public/app.js +1 -1
- package/dist/web-ui/public/approve-dialog.js +1 -1
- package/dist/web-ui/public/automation-links.js +1 -1
- package/dist/web-ui/public/automation-schedule.js +1 -1
- package/dist/web-ui/public/comments-widget.js +1 -1
- package/dist/web-ui/public/diff-utils.js +1 -1
- package/dist/web-ui/public/docs/admin/environments.md +1 -0
- package/dist/web-ui/public/docs/tasks/approval-and-deployment.md +36 -0
- package/dist/web-ui/public/environments.html +1 -1
- package/dist/web-ui/public/environments.js +1 -1
- package/dist/web-ui/public/feedback-widget.js +1 -1
- package/dist/web-ui/public/git-history-lazy-utils.js +1 -1
- package/dist/web-ui/public/git-history.js +1 -1
- package/dist/web-ui/public/git-status.js +1 -1
- package/dist/web-ui/public/index.html +2 -2
- package/dist/web-ui/public/index.js +1 -1
- package/dist/web-ui/public/login.js +1 -1
- package/dist/web-ui/public/markdown-editor.js +1 -1
- package/dist/web-ui/public/markdown-file-editor.js +1 -1
- package/dist/web-ui/public/modal-maximize.js +1 -1
- package/dist/web-ui/public/notifications.js +1 -1
- package/dist/web-ui/public/pr-dialog.js +1 -1
- package/dist/web-ui/public/roles.html +3 -2
- package/dist/web-ui/public/roles.js +1 -1
- package/dist/web-ui/public/server-health.js +1 -1
- package/dist/web-ui/public/settings.css +3 -2
- package/dist/web-ui/public/settings.html +0 -1
- package/dist/web-ui/public/settings.js +1 -1
- package/dist/web-ui/public/setup-password.js +1 -1
- package/dist/web-ui/public/skills.js +1 -1
- package/dist/web-ui/public/sse-client.js +1 -1
- package/dist/web-ui/public/sse-shared-worker.js +1 -1
- package/dist/web-ui/public/styles.css +39 -12
- package/dist/web-ui/public/task.html +56 -1
- package/dist/web-ui/public/task.js +1 -1
- package/dist/web-ui/public/teams.html +76 -81
- package/dist/web-ui/public/teams.js +1 -1
- package/dist/web-ui/public/terminal.js +1 -1
- package/dist/web-ui/public/theme.js +1 -1
- package/dist/web-ui/public/users.html +12 -11
- package/dist/web-ui/public/users.js +1 -1
- package/dist/web-ui/public/variant-grouping.js +1 -1
- package/package.json +1 -1
- package/dist/lib/cli/migrate-rbac.js +0 -1
- package/dist/lib/scoped-rbac-migration-runner.js +0 -1
- package/dist/scripts/migrate-to-scoped-rbac.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
const _0x3b645f=_0x45f8;(function(_0x5e6a6c,_0x5091e2){const _0x2ffd47=_0x45f8,_0x50f576=_0x5e6a6c();while(!![]){try{const _0x48ceae=parseInt(_0x2ffd47(0x122))/0x1+parseInt(_0x2ffd47(0x128))/0x2*(parseInt(_0x2ffd47(0x116))/0x3)+parseInt(_0x2ffd47(0x115))/0x4*(-parseInt(_0x2ffd47(0x114))/0x5)+-parseInt(_0x2ffd47(0x164))/0x6*(-parseInt(_0x2ffd47(0x10c))/0x7)+parseInt(_0x2ffd47(0x119))/0x8*(parseInt(_0x2ffd47(0x111))/0x9)+-parseInt(_0x2ffd47(0x12e))/0xa*(-parseInt(_0x2ffd47(0x15f))/0xb)+-parseInt(_0x2ffd47(0x101))/0xc*(parseInt(_0x2ffd47(0x129))/0xd);if(_0x48ceae===_0x5091e2)break;else _0x50f576['push'](_0x50f576['shift']());}catch(_0x214a5c){_0x50f576['push'](_0x50f576['shift']());}}}(_0x2e6a,0x98fd4));function isSharedWorkerSupported(){const _0x5cb45d=_0x45f8;return typeof SharedWorker!==_0x5cb45d(0x134);}function eventTypeToHandler(_0x39f24f){const _0x4ba988=_0x45f8;if(_0x39f24f===_0x4ba988(0x104))return'onConnected';if(_0x39f24f===_0x4ba988(0x13f))return _0x4ba988(0x161);return'on'+_0x39f24f[_0x4ba988(0x139)]('-')['map'](_0x592a18=>_0x592a18['charAt'](0x0)[_0x4ba988(0x130)]()+_0x592a18[_0x4ba988(0x13c)](0x1))[_0x4ba988(0x14e)]('');}const TASK_STREAM_EVENTS=[_0x3b645f(0x126),_0x3b645f(0x162),_0x3b645f(0x157),_0x3b645f(0x150),_0x3b645f(0x138),_0x3b645f(0x165),_0x3b645f(0x113)];export class TaskUpdatesClient{constructor(){const _0x56c0ba=_0x3b645f;this[_0x56c0ba(0x166)]=new Map(),this['worker']=null,this[_0x56c0ba(0x12a)]=null,this[_0x56c0ba(0x11e)]=null,this[_0x56c0ba(0x15b)]=null,this['reconnectTimeout']=null,this[_0x56c0ba(0x118)]=0x0,this[_0x56c0ba(0x14c)]=isSharedWorkerSupported(),this[_0x56c0ba(0x104)]=![],this[_0x56c0ba(0x15c)]=new Map(),this[_0x56c0ba(0x124)]=0x0,this[_0x56c0ba(0x12c)]=this['_handleWorkerMessage'][_0x56c0ba(0x10e)](this),this[_0x56c0ba(0x121)]=this[_0x56c0ba(0x121)]['bind'](this);}['on'](_0x38c43d,_0x451c65){const _0x1dd034=_0x3b645f;return!this[_0x1dd034(0x166)]['has'](_0x38c43d)&&this[_0x1dd034(0x166)][_0x1dd034(0x10b)](_0x38c43d,new Set()),this[_0x1dd034(0x166)][_0x1dd034(0x123)](_0x38c43d)[_0x1dd034(0x146)](_0x451c65),this;}['off'](_0x3cedc8,_0x52dd34){const _0x3ed016=_0x3b645f;return this[_0x3ed016(0x166)][_0x3ed016(0x159)](_0x3cedc8)&&this[_0x3ed016(0x166)]['get'](_0x3cedc8)[_0x3ed016(0x10d)](_0x52dd34),this;}['_emit'](_0x578f80,_0x4b625c){const _0x4bc73a=_0x3b645f;this[_0x4bc73a(0x166)][_0x4bc73a(0x159)](_0x578f80)&&this[_0x4bc73a(0x166)][_0x4bc73a(0x123)](_0x578f80)[_0x4bc73a(0x125)](_0xe96644=>{const _0x16750c=_0x4bc73a;try{_0xe96644(_0x4b625c);}catch(_0xa09cc0){console[_0x16750c(0x13f)]('[SSE\x20Client]\x20Error\x20in\x20'+_0x578f80+_0x16750c(0x102),_0xa09cc0);}});}[_0x3b645f(0x106)](_0xd3ea5f='me'){const _0x2713e3=_0x3b645f;this['userId']=_0xd3ea5f,this[_0x2713e3(0x14c)]?this[_0x2713e3(0x109)](_0xd3ea5f):this[_0x2713e3(0x144)](_0xd3ea5f);}[_0x3b645f(0x109)](_0x4e9e87){const _0x489e3e=_0x3b645f;try{this[_0x489e3e(0x14d)](),this[_0x489e3e(0x12a)][_0x489e3e(0x11f)]({'action':_0x489e3e(0x106),'userId':_0x4e9e87});}catch(_0x4c4539){console[_0x489e3e(0x13f)](_0x489e3e(0x10f),_0x4c4539),this[_0x489e3e(0x14c)]=![],this[_0x489e3e(0x144)](_0x4e9e87);}}[_0x3b645f(0x14d)](){const _0x51cf41=_0x3b645f;!this[_0x51cf41(0x163)]&&(this[_0x51cf41(0x163)]=new SharedWorker(_0x51cf41(0x152)),this[_0x51cf41(0x12a)]=this[_0x51cf41(0x163)][_0x51cf41(0x12a)],this[_0x51cf41(0x12a)][_0x51cf41(0x11d)]=this['_handleWorkerMessage'],this[_0x51cf41(0x12a)]['onmessageerror']=_0xdc1677=>{const _0x3f3286=_0x51cf41;console['error'](_0x3f3286(0x11b),_0xdc1677),this[_0x3f3286(0x131)](_0x3f3286(0x13f),{'error':_0x3f3286(0x147)});},this[_0x51cf41(0x12a)]['start']());}[_0x3b645f(0x12c)](_0xd777fc){const _0xfed51b=_0x3b645f,_0x257397=_0xd777fc[_0xfed51b(0x140)];if(_0x257397[_0xfed51b(0x15d)]&&_0x257397[_0xfed51b(0x15d)][_0xfed51b(0x133)]('task:')){this[_0xfed51b(0x156)](_0x257397);return;}switch(_0x257397[_0xfed51b(0x15d)]){case'connected':this['connected']=!![],this[_0xfed51b(0x131)](_0xfed51b(0x104),{});break;case _0xfed51b(0x13e):case _0xfed51b(0x126):case _0xfed51b(0x155):case'new-task':case _0xfed51b(0x105):try{const _0x1b9fd3=JSON[_0xfed51b(0x12b)](_0x257397[_0xfed51b(0x140)]);this['_emit'](_0x257397['type'],_0x1b9fd3);}catch(_0x69187a){console[_0xfed51b(0x13f)]('[SSE\x20Client]\x20Failed\x20to\x20parse\x20'+_0x257397[_0xfed51b(0x15d)]+'\x20data:',_0x69187a);}break;case _0xfed51b(0x13f):this[_0xfed51b(0x104)]=![],this['_emit'](_0xfed51b(0x13f),_0x257397);break;default:console[_0xfed51b(0x107)]('[SSE\x20Client]\x20Unknown\x20message\x20type:',_0x257397[_0xfed51b(0x15d)]);}}['_handleTaskStreamMessage'](_0x58e99f){const _0x400fab=_0x3b645f,{taskId:_0x33d542,type:_0x26a08b,data:_0x48ab15}=_0x58e99f,_0x10239f=this[_0x400fab(0x15c)][_0x400fab(0x123)](_0x33d542);if(!_0x10239f||_0x10239f['size']===0x0)return;const _0x3fba39=_0x26a08b[_0x400fab(0x11a)]('task:',''),_0x52c4bb=eventTypeToHandler(_0x3fba39);_0x10239f[_0x400fab(0x125)](_0x1cd48a=>{const _0x1c5eff=_0x400fab;if(_0x1cd48a[_0x1c5eff(0x110)][_0x52c4bb])try{const _0x2bd3a9=typeof _0x48ab15===_0x1c5eff(0x127)?JSON['parse'](_0x48ab15):_0x48ab15;_0x1cd48a[_0x1c5eff(0x110)][_0x52c4bb](_0x2bd3a9);}catch(_0x106415){console[_0x1c5eff(0x13f)]('[SSE\x20Client]\x20Error\x20in\x20task\x20'+_0x3fba39+_0x1c5eff(0x14a),_0x106415);}});}[_0x3b645f(0x144)](_0x282067){const _0x4b587a=_0x3b645f;this[_0x4b587a(0x11e)]&&(this[_0x4b587a(0x11e)][_0x4b587a(0x145)](),this[_0x4b587a(0x11e)]=null);const _0x26491f=_0x282067&&_0x282067!=='me'?'?userId='+_0x282067:'';try{this[_0x4b587a(0x11e)]=new EventSource(_0x4b587a(0x132)+_0x26491f),this[_0x4b587a(0x11e)][_0x4b587a(0x13a)]('open',()=>{const _0x1b6c63=_0x4b587a;this['connected']=!![],this[_0x1b6c63(0x118)]=0x0,this[_0x1b6c63(0x131)](_0x1b6c63(0x104),{});}),this[_0x4b587a(0x11e)][_0x4b587a(0x13a)](_0x4b587a(0x13e),_0x199c41=>{const _0x195ae6=_0x4b587a;this[_0x195ae6(0x121)](_0x195ae6(0x13e),_0x199c41),this['reconnectAttempts']=0x0;}),this['eventSource'][_0x4b587a(0x13a)](_0x4b587a(0x126),_0x28eb52=>{const _0x2f9f93=_0x4b587a;this['_handleDirectSSE'](_0x2f9f93(0x126),_0x28eb52);}),this[_0x4b587a(0x11e)]['addEventListener'](_0x4b587a(0x155),_0xd5f276=>{const _0x5e8194=_0x4b587a;this[_0x5e8194(0x121)](_0x5e8194(0x155),_0xd5f276);}),this[_0x4b587a(0x11e)]['addEventListener']('new-task',_0xa79ce0=>{const _0x4c406d=_0x4b587a;this[_0x4c406d(0x121)](_0x4c406d(0x12f),_0xa79ce0);}),this[_0x4b587a(0x11e)]['addEventListener']('queue-position',_0x7c2165=>{const _0x5badd0=_0x4b587a;this[_0x5badd0(0x121)]('queue-position',_0x7c2165);}),this[_0x4b587a(0x11e)]['addEventListener']('error',_0x213bf2=>{const _0x5c1b9c=_0x4b587a;console[_0x5c1b9c(0x13f)]('[SSE\x20Client]\x20Direct\x20SSE\x20error:',_0x213bf2),this[_0x5c1b9c(0x104)]=![],this[_0x5c1b9c(0x131)](_0x5c1b9c(0x13f),{'error':'Connection\x20error'}),this[_0x5c1b9c(0x11e)]&&(this[_0x5c1b9c(0x11e)]['close'](),this[_0x5c1b9c(0x11e)]=null),this[_0x5c1b9c(0x149)]();});}catch(_0x39d61d){console[_0x4b587a(0x13f)](_0x4b587a(0x151),_0x39d61d),this[_0x4b587a(0x131)](_0x4b587a(0x13f),{'error':_0x39d61d[_0x4b587a(0x142)]}),this[_0x4b587a(0x149)]();}}[_0x3b645f(0x121)](_0x22265a,_0x371c5d){const _0x53bb93=_0x3b645f;try{const _0x35d28b=JSON['parse'](_0x371c5d[_0x53bb93(0x140)]);this[_0x53bb93(0x131)](_0x22265a,_0x35d28b);}catch(_0x106628){console[_0x53bb93(0x13f)]('[SSE\x20Client]\x20Failed\x20to\x20parse\x20'+_0x22265a+_0x53bb93(0x11c),_0x106628);}}[_0x3b645f(0x149)](){const _0x2cba81=_0x3b645f;this[_0x2cba81(0x135)]&&clearTimeout(this[_0x2cba81(0x135)]);const _0x3a44f6=Math[_0x2cba81(0x13d)](0x3e8*Math['pow'](0x2,this[_0x2cba81(0x118)]),0x7530);this['reconnectAttempts']++,console['log'](_0x2cba81(0x108)+_0x3a44f6+'ms'),this['reconnectTimeout']=setTimeout(()=>{const _0x36affe=_0x2cba81;this[_0x36affe(0x144)](this['userId']);},_0x3a44f6);}[_0x3b645f(0x141)](_0x4521ce){const _0x35227f=_0x3b645f;if(_0x4521ce===this['userId'])return;this[_0x35227f(0x15b)]=_0x4521ce;if(this[_0x35227f(0x14c)]&&this[_0x35227f(0x12a)])this[_0x35227f(0x12a)][_0x35227f(0x11f)]({'action':_0x35227f(0x141),'userId':_0x4521ce});else this['eventSource']&&this['_connectDirect'](_0x4521ce);}[_0x3b645f(0x15e)](_0x26bdd9,_0x2fa357){const _0x35153a=_0x3b645f;return this[_0x35153a(0x14c)]?this[_0x35153a(0x15a)](_0x26bdd9,_0x2fa357):this['_subscribeTaskDirect'](_0x26bdd9,_0x2fa357);}[_0x3b645f(0x154)](_0x34d289){const _0x13dc3e=_0x3b645f;if(!_0x34d289)return;_0x34d289[_0x13dc3e(0x15d)]===_0x13dc3e(0x163)?this[_0x13dc3e(0x117)](_0x34d289):this[_0x13dc3e(0x160)](_0x34d289);}[_0x3b645f(0x15a)](_0x20f617,_0x4e2dbf){const _0x481476=_0x3b645f;try{this['_ensureWorker']();}catch(_0x5bf40d){return console['error'](_0x481476(0x158),_0x5bf40d),this[_0x481476(0x14c)]=![],this[_0x481476(0x103)](_0x20f617,_0x4e2dbf);}const _0x7b4625=++this[_0x481476(0x124)],_0x26eb0a={'type':_0x481476(0x163),'taskId':_0x20f617,'handlers':_0x4e2dbf,'id':_0x7b4625};return!this[_0x481476(0x15c)][_0x481476(0x159)](_0x20f617)&&(this[_0x481476(0x15c)]['set'](_0x20f617,new Set()),this[_0x481476(0x12a)][_0x481476(0x11f)]({'action':'subscribeTask','taskId':_0x20f617})),this[_0x481476(0x15c)][_0x481476(0x123)](_0x20f617)['add'](_0x26eb0a),_0x26eb0a;}[_0x3b645f(0x117)](_0x83f918){const _0x3c1af3=_0x3b645f,{taskId:_0x40021f}=_0x83f918,_0x100bd7=this['_taskSubscriptions'][_0x3c1af3(0x123)](_0x40021f);if(_0x100bd7){_0x100bd7[_0x3c1af3(0x10d)](_0x83f918);if(_0x100bd7[_0x3c1af3(0x14b)]===0x0){this[_0x3c1af3(0x15c)][_0x3c1af3(0x10d)](_0x40021f);try{this[_0x3c1af3(0x12a)]&&this[_0x3c1af3(0x12a)][_0x3c1af3(0x11f)]({'action':_0x3c1af3(0x154),'taskId':_0x40021f});}catch(_0xd9be6e){}}}}[_0x3b645f(0x103)](_0x3970b0,_0x58725f){const _0x44dcab=_0x3b645f,_0x56c4c8=++this[_0x44dcab(0x124)],_0x5ac92b=new EventSource(_0x44dcab(0x14f)+_0x3970b0+'/stream'),_0x32f034={'type':_0x44dcab(0x137),'taskId':_0x3970b0,'handlers':_0x58725f,'id':_0x56c4c8,'eventSource':_0x5ac92b};!this[_0x44dcab(0x15c)]['has'](_0x3970b0)&&this[_0x44dcab(0x15c)][_0x44dcab(0x10b)](_0x3970b0,new Set());this[_0x44dcab(0x15c)][_0x44dcab(0x123)](_0x3970b0)['add'](_0x32f034);for(const _0x11f390 of TASK_STREAM_EVENTS){const _0xf03450=eventTypeToHandler(_0x11f390);_0x5ac92b[_0x44dcab(0x13a)](_0x11f390,_0x1fd922=>{const _0x160605=_0x44dcab;if(_0x58725f[_0xf03450])try{const _0x8bedb=JSON[_0x160605(0x12b)](_0x1fd922['data']);_0x58725f[_0xf03450](_0x8bedb);}catch(_0x5dc321){console[_0x160605(0x13f)](_0x160605(0x10a)+_0x11f390+':',_0x5dc321);}});}return _0x5ac92b[_0x44dcab(0x13a)](_0x44dcab(0x12d),()=>{const _0x19e56a=_0x44dcab;if(_0x58725f['onConnected'])_0x58725f[_0x19e56a(0x120)]();}),_0x5ac92b[_0x44dcab(0x13a)]('error',()=>{const _0x59aadd=_0x44dcab;if(_0x58725f[_0x59aadd(0x161)])_0x58725f[_0x59aadd(0x161)]({'error':_0x59aadd(0x148)});}),_0x32f034;}[_0x3b645f(0x160)](_0x57deaf){const _0x32c6a4=_0x3b645f;_0x57deaf[_0x32c6a4(0x11e)]&&(_0x57deaf[_0x32c6a4(0x11e)][_0x32c6a4(0x145)](),_0x57deaf[_0x32c6a4(0x11e)]=null);const _0x4f0c78=this[_0x32c6a4(0x15c)][_0x32c6a4(0x123)](_0x57deaf[_0x32c6a4(0x13b)]);_0x4f0c78&&(_0x4f0c78[_0x32c6a4(0x10d)](_0x57deaf),_0x4f0c78['size']===0x0&&this[_0x32c6a4(0x15c)]['delete'](_0x57deaf[_0x32c6a4(0x13b)]));}[_0x3b645f(0x136)](){const _0x213b43=_0x3b645f;this['reconnectTimeout']&&(clearTimeout(this['reconnectTimeout']),this[_0x213b43(0x135)]=null);this[_0x213b43(0x15c)][_0x213b43(0x125)]((_0x50f8e6,_0x1ddb3a)=>{const _0x2903c4=_0x213b43;_0x50f8e6[_0x2903c4(0x125)](_0x1857b0=>{const _0x44c187=_0x2903c4;_0x1857b0[_0x44c187(0x15d)]===_0x44c187(0x137)&&_0x1857b0['eventSource']&&_0x1857b0[_0x44c187(0x11e)]['close']();});}),this[_0x213b43(0x15c)][_0x213b43(0x143)]();if(this[_0x213b43(0x14c)]&&this[_0x213b43(0x12a)])try{this[_0x213b43(0x12a)][_0x213b43(0x11f)]({'action':_0x213b43(0x136)});}catch(_0x3252be){}this[_0x213b43(0x11e)]&&(this[_0x213b43(0x11e)]['close'](),this[_0x213b43(0x11e)]=null),this[_0x213b43(0x104)]=![];}[_0x3b645f(0x153)](){return this['connected'];}[_0x3b645f(0x112)](){const _0x2817df=_0x3b645f;return this[_0x2817df(0x14c)];}}let globalClient=null;export function getTaskUpdatesClient(){return!globalClient&&(globalClient=new TaskUpdatesClient()),globalClient;}function _0x45f8(_0x5bf04d,_0xd76205){_0x5bf04d=_0x5bf04d-0x101;const _0x2e6a28=_0x2e6a();let _0x45f801=_0x2e6a28[_0x5bf04d];if(_0x45f8['aWDKyW']===undefined){var _0x5bf542=function(_0x19b4da){const _0x30bc31='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x39f24f='',_0x592a18='';for(let _0x38c43d=0x0,_0x451c65,_0x3cedc8,_0x52dd34=0x0;_0x3cedc8=_0x19b4da['charAt'](_0x52dd34++);~_0x3cedc8&&(_0x451c65=_0x38c43d%0x4?_0x451c65*0x40+_0x3cedc8:_0x3cedc8,_0x38c43d++%0x4)?_0x39f24f+=String['fromCharCode'](0xff&_0x451c65>>(-0x2*_0x38c43d&0x6)):0x0){_0x3cedc8=_0x30bc31['indexOf'](_0x3cedc8);}for(let _0x578f80=0x0,_0x4b625c=_0x39f24f['length'];_0x578f80<_0x4b625c;_0x578f80++){_0x592a18+='%'+('00'+_0x39f24f['charCodeAt'](_0x578f80)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x592a18);};_0x45f8['wCvXSO']=_0x5bf542,_0x45f8['eMDJSZ']={},_0x45f8['aWDKyW']=!![];}const _0x191581=_0x2e6a28[0x0],_0x8b0eac=_0x5bf04d+_0x191581,_0x231ac9=_0x45f8['eMDJSZ'][_0x8b0eac];return!_0x231ac9?(_0x45f801=_0x45f8['wCvXSO'](_0x45f801),_0x45f8['eMDJSZ'][_0x8b0eac]=_0x45f801):_0x45f801=_0x231ac9,_0x45f801;}function _0x2e6a(){const _0x3d6502=['y29UBMvJDa','D2fYBG','w1ntrsbdBgLLBNrDifnJAgvKDwXPBMCGCMvJB25Uzwn0igLUia','x2nVBM5Ly3rwAwfxB3jRzxi','w1ntrsbdBgLLBNrDievYCM9YihbHCNnPBMCGDgfZAYa','C2v0','n3LSvhHTBa','zgvSzxrL','yMLUza','w1ntrsbdBgLLBNrDifnOyxjLzfDVCMTLCIbMywLSzwqSigzHBgXPBMCGyMfJAYb0BYbKAxjLy3qGu1nfoG','AgfUzgXLCNm','mZC3ntC3ALLZBhDc','AxnvC2LUz1nOyxjLzfDVCMTLCG','y29TCgXLDgu','nJiWzwHutLv6','nZC5nLv6tvLetW','mtm1tvPmv1r1','x3vUC3vIC2nYAwjLvgfZA1DVCMTLCG','CMvJB25Uzwn0qxr0zw1WDhm','offqs2Lhwq','CMvWBgfJzq','w1ntrsbdBgLLBNrDifDVCMTLCIbTzxnZywDLigvYCM9YoG','igrHDge6','B25TzxnZywDL','zxzLBNrtB3vYy2u','Cg9ZDe1LC3nHz2u','B25dB25Uzwn0zwq','x2HHBMrSzurPCMvJDfntrq','mteXmZa2m29yDujZqq','z2v0','x3rHC2TtDwjjzenVDw50zxi','zM9YrwfJAa','ywn0AxzPDhK','C3rYAw5N','ntm2mdbet1HABNm','mtngshz4BuK','Cg9YDa','CgfYC2u','x2HHBMrSzvDVCMTLCK1LC3nHz2u','B3bLBG','mJuXmgnZD1PMrq','BMv3lxrHC2S','Dg9vChbLCKnHC2u','x2vTAxq','l3rHC2TZl3vWzgf0zxm','C3rHCNrZv2L0Aa','Dw5KzwzPBMvK','CMvJB25Uzwn0vgLTzw91Da','zgLZy29UBMvJDa','zgLYzwn0','y2HHBMDLzc1MAwXLCW','C3bSAxq','ywrKrxzLBNrmAxn0zw5LCG','DgfZA0LK','C2XPy2u','BwLU','C25HChnOB3q','zxjYB3i','zgf0yq','y2HHBMDLrMLSDgvY','BwvZC2fNzq','y2XLyxi','x2nVBM5Ly3reAxjLy3q','y2XVC2u','ywrK','v29YA2vYig1LC3nHz2uGzxjYB3i','q29UBMvJDgLVBIbLCNjVCG','x3nJAgvKDwXLuMvJB25Uzwn0','igHHBMrSzxi6','C2L6zq','DxnLu2HHCMvKv29YA2vY','x2vUC3vYzvDVCMTLCG','AM9PBG','l3rHC2TZlW','C3vTBwfYEq','w1ntrsbdBgLLBNrDiezHAwXLzcb0BYbJCMvHDguGrxzLBNrtB3vYy2u6','l3nZzs1ZAgfYzwqTD29YA2vYlMPZ','AxndB25Uzwn0zwq','Dw5ZDwjZy3jPyMvuyxnR','C3rHDhvZ','x2HHBMrSzvrHC2TtDhjLyw1nzxnZywDL','Bwv0ywrHDge','w1ntrsbdBgLLBNrDifnOyxjLzfDVCMTLCIbMywLSzwqGzM9YihrHC2SGC3vIlcbMywXSAw5NigjHy2S6','AgfZ','x3n1yNnJCMLIzvrHC2TwAwfxB3jRzxi','DxnLCKLK','x3rHC2TtDwjZy3jPChrPB25Z','DhLWzq','C3vIC2nYAwjLvgfZAW','mte1mZLhwKzYwLm','x3vUC3vIC2nYAwjLvgfZA0rPCMvJDa','B25fCNjVCG','Bg9NCW','D29YA2vY','mJq2nZyYsu1sDxnw','yxbWlxnLCNzLCI1ZDgf0Dxm','BgLZDgvUzxjZ','mJe1nJu0nJrJEM56B2u','igXPC3rLBMvYoG','x3n1yNnJCMLIzvrHC2TeAxjLy3q','y29UBMvJDgvK','CxvLDwuTCg9ZAxrPB24'];_0x2e6a=function(){return _0x3d6502;};return _0x2e6a();}
|
|
1
|
+
function isSharedWorkerSupported(){return typeof SharedWorker!=='undefined';}function eventTypeToHandler(_0x1f13e1){if(_0x1f13e1==='connected')return'onConnected';if(_0x1f13e1==='error')return'onError';return'on'+_0x1f13e1['split']('-')['map'](_0x3ef852=>_0x3ef852['charAt'](0x0)['toUpperCase']()+_0x3ef852['slice'](0x1))['join']('');}const TASK_STREAM_EVENTS=['activity','logs','metadata','summary','changed-files','app-server-status','complete'];export class TaskUpdatesClient{constructor(){this['listeners']=new Map(),this['worker']=null,this['port']=null,this['eventSource']=null,this['userId']=null,this['reconnectTimeout']=null,this['reconnectAttempts']=0x0,this['useSharedWorker']=isSharedWorkerSupported(),this['connected']=![],this['_taskSubscriptions']=new Map(),this['_taskSubIdCounter']=0x0,this['_handleWorkerMessage']=this['_handleWorkerMessage']['bind'](this),this['_handleDirectSSE']=this['_handleDirectSSE']['bind'](this);}['on'](_0x490f42,_0x2f80b1){return!this['listeners']['has'](_0x490f42)&&this['listeners']['set'](_0x490f42,new Set()),this['listeners']['get'](_0x490f42)['add'](_0x2f80b1),this;}['off'](_0x316541,_0x3f01c9){return this['listeners']['has'](_0x316541)&&this['listeners']['get'](_0x316541)['delete'](_0x3f01c9),this;}['_emit'](_0x27ad80,_0xbdaaaa){this['listeners']['has'](_0x27ad80)&&this['listeners']['get'](_0x27ad80)['forEach'](_0x497a01=>{try{_0x497a01(_0xbdaaaa);}catch(_0x568019){console['error']('[SSE\x20Client]\x20Error\x20in\x20'+_0x27ad80+'\x20listener:',_0x568019);}});}['connect'](_0x15027c='me'){this['userId']=_0x15027c,this['useSharedWorker']?this['_connectViaWorker'](_0x15027c):this['_connectDirect'](_0x15027c);}['_connectViaWorker'](_0x125c6e){try{this['_ensureWorker'](),this['port']['postMessage']({'action':'connect','userId':_0x125c6e});}catch(_0xc6ff28){console['error']('[SSE\x20Client]\x20SharedWorker\x20failed,\x20falling\x20back\x20to\x20direct\x20SSE:',_0xc6ff28),this['useSharedWorker']=![],this['_connectDirect'](_0x125c6e);}}['_ensureWorker'](){!this['worker']&&(this['worker']=new SharedWorker('/sse-shared-worker.js'),this['port']=this['worker']['port'],this['port']['onmessage']=this['_handleWorkerMessage'],this['port']['onmessageerror']=_0x4b05e5=>{console['error']('[SSE\x20Client]\x20Worker\x20message\x20error:',_0x4b05e5),this['_emit']('error',{'error':'Worker\x20message\x20error'});},this['port']['start']());}['_handleWorkerMessage'](_0x126e6d){const _0x3b5bf4=_0x126e6d['data'];if(_0x3b5bf4['type']&&_0x3b5bf4['type']['startsWith']('task:')){this['_handleTaskStreamMessage'](_0x3b5bf4);return;}switch(_0x3b5bf4['type']){case'connected':this['connected']=!![],this['_emit']('connected',{});break;case'snapshot':case'activity':case'status':case'new-task':case'queue-position':try{const _0x50b666=JSON['parse'](_0x3b5bf4['data']);this['_emit'](_0x3b5bf4['type'],_0x50b666);}catch(_0x307925){console['error']('[SSE\x20Client]\x20Failed\x20to\x20parse\x20'+_0x3b5bf4['type']+'\x20data:',_0x307925);}break;case'error':this['connected']=![],this['_emit']('error',_0x3b5bf4);break;default:console['warn']('[SSE\x20Client]\x20Unknown\x20message\x20type:',_0x3b5bf4['type']);}}['_handleTaskStreamMessage'](_0x580558){const {taskId:_0x2b3ebf,type:_0x54e256,data:_0x472447}=_0x580558,_0x4d3746=this['_taskSubscriptions']['get'](_0x2b3ebf);if(!_0x4d3746||_0x4d3746['size']===0x0)return;const _0x1b06ef=_0x54e256['replace']('task:',''),_0x507e70=eventTypeToHandler(_0x1b06ef);_0x4d3746['forEach'](_0x2a13ea=>{if(_0x2a13ea['handlers'][_0x507e70])try{const _0x32cd74=typeof _0x472447==='string'?JSON['parse'](_0x472447):_0x472447;_0x2a13ea['handlers'][_0x507e70](_0x32cd74);}catch(_0xf8bbc2){console['error']('[SSE\x20Client]\x20Error\x20in\x20task\x20'+_0x1b06ef+'\x20handler:',_0xf8bbc2);}});}['_connectDirect'](_0x49000e){this['eventSource']&&(this['eventSource']['close'](),this['eventSource']=null);const _0x3704c8=_0x49000e&&_0x49000e!=='me'?'?userId='+_0x49000e:'';try{this['eventSource']=new EventSource('/tasks/updates'+_0x3704c8),this['eventSource']['addEventListener']('open',()=>{this['connected']=!![],this['reconnectAttempts']=0x0,this['_emit']('connected',{});}),this['eventSource']['addEventListener']('snapshot',_0x4df21e=>{this['_handleDirectSSE']('snapshot',_0x4df21e),this['reconnectAttempts']=0x0;}),this['eventSource']['addEventListener']('activity',_0x46ee75=>{this['_handleDirectSSE']('activity',_0x46ee75);}),this['eventSource']['addEventListener']('status',_0xff008f=>{this['_handleDirectSSE']('status',_0xff008f);}),this['eventSource']['addEventListener']('new-task',_0x232868=>{this['_handleDirectSSE']('new-task',_0x232868);}),this['eventSource']['addEventListener']('queue-position',_0x330006=>{this['_handleDirectSSE']('queue-position',_0x330006);}),this['eventSource']['addEventListener']('error',_0x4c3359=>{console['error']('[SSE\x20Client]\x20Direct\x20SSE\x20error:',_0x4c3359),this['connected']=![],this['_emit']('error',{'error':'Connection\x20error'}),this['eventSource']&&(this['eventSource']['close'](),this['eventSource']=null),this['_scheduleReconnect']();});}catch(_0x40793e){console['error']('[SSE\x20Client]\x20Failed\x20to\x20create\x20EventSource:',_0x40793e),this['_emit']('error',{'error':_0x40793e['message']}),this['_scheduleReconnect']();}}['_handleDirectSSE'](_0x35d446,_0x13a2db){try{const _0x5865e1=JSON['parse'](_0x13a2db['data']);this['_emit'](_0x35d446,_0x5865e1);}catch(_0x116eda){console['error']('[SSE\x20Client]\x20Failed\x20to\x20parse\x20'+_0x35d446+'\x20data:',_0x116eda);}}['_scheduleReconnect'](){this['reconnectTimeout']&&clearTimeout(this['reconnectTimeout']);const _0x25b92d=Math['min'](0x3e8*Math['pow'](0x2,this['reconnectAttempts']),0x7530);this['reconnectAttempts']++,console['log']('[SSE\x20Client]\x20Scheduling\x20reconnect\x20in\x20'+_0x25b92d+'ms'),this['reconnectTimeout']=setTimeout(()=>{this['_connectDirect'](this['userId']);},_0x25b92d);}['changeFilter'](_0x498aa1){if(_0x498aa1===this['userId'])return;this['userId']=_0x498aa1;if(this['useSharedWorker']&&this['port'])this['port']['postMessage']({'action':'changeFilter','userId':_0x498aa1});else this['eventSource']&&this['_connectDirect'](_0x498aa1);}['subscribeTask'](_0x120b3c,_0x54f593){return this['useSharedWorker']?this['_subscribeTaskViaWorker'](_0x120b3c,_0x54f593):this['_subscribeTaskDirect'](_0x120b3c,_0x54f593);}['unsubscribeTask'](_0x16ee88){if(!_0x16ee88)return;_0x16ee88['type']==='worker'?this['_unsubscribeTaskWorker'](_0x16ee88):this['_unsubscribeTaskDirect'](_0x16ee88);}['_subscribeTaskViaWorker'](_0x3ee842,_0x26fa46){try{this['_ensureWorker']();}catch(_0x3e880c){return console['error']('[SSE\x20Client]\x20SharedWorker\x20failed\x20for\x20task\x20sub,\x20falling\x20back:',_0x3e880c),this['useSharedWorker']=![],this['_subscribeTaskDirect'](_0x3ee842,_0x26fa46);}const _0x52c200=++this['_taskSubIdCounter'],_0x56c8a5={'type':'worker','taskId':_0x3ee842,'handlers':_0x26fa46,'id':_0x52c200};return!this['_taskSubscriptions']['has'](_0x3ee842)&&(this['_taskSubscriptions']['set'](_0x3ee842,new Set()),this['port']['postMessage']({'action':'subscribeTask','taskId':_0x3ee842})),this['_taskSubscriptions']['get'](_0x3ee842)['add'](_0x56c8a5),_0x56c8a5;}['_unsubscribeTaskWorker'](_0x5f0e01){const {taskId:_0x333fda}=_0x5f0e01,_0x4d72fa=this['_taskSubscriptions']['get'](_0x333fda);if(_0x4d72fa){_0x4d72fa['delete'](_0x5f0e01);if(_0x4d72fa['size']===0x0){this['_taskSubscriptions']['delete'](_0x333fda);try{this['port']&&this['port']['postMessage']({'action':'unsubscribeTask','taskId':_0x333fda});}catch(_0x3ccb4d){}}}}['_subscribeTaskDirect'](_0x20d4bf,_0x213108){const _0x2f2ed8=++this['_taskSubIdCounter'],_0x39f702=new EventSource('/tasks/'+_0x20d4bf+'/stream'),_0x5d6c92={'type':'direct','taskId':_0x20d4bf,'handlers':_0x213108,'id':_0x2f2ed8,'eventSource':_0x39f702};!this['_taskSubscriptions']['has'](_0x20d4bf)&&this['_taskSubscriptions']['set'](_0x20d4bf,new Set());this['_taskSubscriptions']['get'](_0x20d4bf)['add'](_0x5d6c92);for(const _0x4e29a9 of TASK_STREAM_EVENTS){const _0x150997=eventTypeToHandler(_0x4e29a9);_0x39f702['addEventListener'](_0x4e29a9,_0x21aaeb=>{if(_0x213108[_0x150997])try{const _0x5a3a41=JSON['parse'](_0x21aaeb['data']);_0x213108[_0x150997](_0x5a3a41);}catch(_0x4db8ab){console['error']('[SSE\x20Client]\x20Error\x20parsing\x20task\x20'+_0x4e29a9+':',_0x4db8ab);}});}return _0x39f702['addEventListener']('open',()=>{if(_0x213108['onConnected'])_0x213108['onConnected']();}),_0x39f702['addEventListener']('error',()=>{if(_0x213108['onError'])_0x213108['onError']({'error':'Connection\x20error'});}),_0x5d6c92;}['_unsubscribeTaskDirect'](_0x2a1511){_0x2a1511['eventSource']&&(_0x2a1511['eventSource']['close'](),_0x2a1511['eventSource']=null);const _0x22f3f7=this['_taskSubscriptions']['get'](_0x2a1511['taskId']);_0x22f3f7&&(_0x22f3f7['delete'](_0x2a1511),_0x22f3f7['size']===0x0&&this['_taskSubscriptions']['delete'](_0x2a1511['taskId']));}['disconnect'](){this['reconnectTimeout']&&(clearTimeout(this['reconnectTimeout']),this['reconnectTimeout']=null);this['_taskSubscriptions']['forEach']((_0x54cfad,_0x1f5d74)=>{_0x54cfad['forEach'](_0x3be74c=>{_0x3be74c['type']==='direct'&&_0x3be74c['eventSource']&&_0x3be74c['eventSource']['close']();});}),this['_taskSubscriptions']['clear']();if(this['useSharedWorker']&&this['port'])try{this['port']['postMessage']({'action':'disconnect'});}catch(_0x1e4f12){}this['eventSource']&&(this['eventSource']['close'](),this['eventSource']=null),this['connected']=![];}['isConnected'](){return this['connected'];}['isUsingSharedWorker'](){return this['useSharedWorker'];}}let globalClient=null;export function getTaskUpdatesClient(){return!globalClient&&(globalClient=new TaskUpdatesClient()),globalClient;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const _0x5e0dd0=_0x3a96;(function(_0x3f7dd0,_0x295e6d){const _0xce67ee=_0x3a96,_0x1c6a3e=_0x3f7dd0();while(!![]){try{const _0x5dc7c8=parseInt(_0xce67ee(0x1b9))/0x1+parseInt(_0xce67ee(0x1a6))/0x2*(parseInt(_0xce67ee(0x1c8))/0x3)+parseInt(_0xce67ee(0x1d9))/0x4+-parseInt(_0xce67ee(0x1db))/0x5*(-parseInt(_0xce67ee(0x1c0))/0x6)+-parseInt(_0xce67ee(0x1c5))/0x7+-parseInt(_0xce67ee(0x1e2))/0x8*(-parseInt(_0xce67ee(0x1b5))/0x9)+-parseInt(_0xce67ee(0x1e6))/0xa*(parseInt(_0xce67ee(0x1be))/0xb);if(_0x5dc7c8===_0x295e6d)break;else _0x1c6a3e['push'](_0x1c6a3e['shift']());}catch(_0x423588){_0x1c6a3e['push'](_0x1c6a3e['shift']());}}}(_0x2292,0xe92aa));const ports=new Set();function _0x2292(){const _0x547fd8=['C25HChnOB3q','w1ntrsbxB3jRzxjDie5LDYbWB3j0ignVBM5Ly3rLzc4Gvg90ywWGCg9YDhm6ia','BxmGkgf0DgvTChqG','l3rHC2TZlW','w1ntrsbxB3jRzxjDifbVCNqGBwvZC2fNzsbLCNjVCJO','Cg9ZDe1LC3nHz2u','mta0nZi2ohLMAxjcEa','CxvLDwuTCg9ZAxrPB24','nufUtNPxwa','C3vIC2nYAwjLvgfZAW','ywrK','ChvZAa','CMvJB25Uzwn0vgLTzw91Da','C3rHDhvZ','zxjYB3i','mtuWmtq1mdrhD1DywNK','ywn0AxzPDhK','D2fYBG','B3bLBG','mJm1nJaWmtbgB1Pevxi','zgvSzxrL','C2v0','mZj3t21PtMu','BgvUz3rO','ywrKrxzLBNrmAxn0zw5LCG','z2v0','t1bftG','C3rYAw5NAwz5','C3vTBwfYEq','l3n0CMvHBq','BwvZC2fNzq','Cg93','DgfZAZPJB25Uzwn0zwq','DgfZAZPLCNjVCG','q29UBMvJDgLVBIbLCNjVCG','C3vIC2nYAwjLzfbVCNrZ','y29TCgXLDgu','ouvvrhzYsW','Bwv0ywrHDge','l3rHC2TZl3vWzgf0zxm','zxzLBNrtB3vYy2u','ntGXndC5su9cEhnf','CMvJB25Uzwn0qxr0zw1WDhm','zgLZy29UBMvJDa','w1ntrsbxB3jRzxjDienVBM5Ly3rPB24GzxjYB3i6','Bg9N','mtfJB2fcC0O','C2L6zq','mZi2nJC3oejewNLwDa','y2XVC2u','yxbWlxnLCNzLCI1ZDgf0Dxm','CMvHzhLtDgf0zq','zM9YrwfJAa','mtaWmJqZndnnCvPSC1m','zgf0yq','BwLU','mJC3mJi0vxDVCfzN','q0Xpu0ve','Bg9NCW','w1ntrsbxB3jRzxjDifnJAgvKDwXPBMCGCMvJB25Uzwn0igLUia','w1ntrsbxB3jRzxjDifbVCNqGzgLZy29UBMvJDgvKlIbuB3rHBcbWB3j0CZOG','w1ntrsbxB3jRzxjDiezHAwXLzcb0BYbZzw5KihrVihbVCNqSihjLBw92Aw5NoG','y29UBMvJDgvK','Cg9YDhm','w1ntrsbxB3jRzxjDiezHAwXLzcb0BYbJCMvHDguGDgfZAYbfDMvUDfnVDxjJzsbMB3iG','BMv3lxrHC2S','DgfZAZO'];_0x2292=function(){return _0x547fd8;};return _0x2292();}let eventSource=null,currentUserId=null,reconnectTimeout=null,reconnectAttempts=0x0;const MAX_RECONNECT_DELAY=0x7530,taskStreams=new Map(),TASK_STREAM_EVENTS=[_0x5e0dd0(0x1e3),_0x5e0dd0(0x1ca),_0x5e0dd0(0x1b6),_0x5e0dd0(0x1ac),'changed-files',_0x5e0dd0(0x1c2),_0x5e0dd0(0x1b4)];function connect(_0x57bdd6){const _0xe23262=_0x5e0dd0;eventSource&¤tUserId!==_0x57bdd6&&(eventSource[_0xe23262(0x1c1)](),eventSource=null);if(eventSource&&eventSource[_0xe23262(0x1c3)]!==EventSource[_0xe23262(0x1c9)])return;currentUserId=_0x57bdd6;const _0x132fad=_0x57bdd6&&_0x57bdd6!=='me'?'?userId='+_0x57bdd6:'';try{eventSource=new EventSource(_0xe23262(0x1b7)+_0x132fad),eventSource[_0xe23262(0x1a8)](_0xe23262(0x1d3),_0x9dbaac=>{const _0x2590cf=_0xe23262;broadcast({'type':_0x2590cf(0x1d3),'data':_0x9dbaac[_0x2590cf(0x1c6)]}),reconnectAttempts=0x0;}),eventSource[_0xe23262(0x1a8)](_0xe23262(0x1e3),_0x4317dd=>{const _0x194352=_0xe23262;broadcast({'type':_0x194352(0x1e3),'data':_0x4317dd['data']});}),eventSource[_0xe23262(0x1a8)](_0xe23262(0x1e0),_0xb45c92=>{const _0x38aba9=_0xe23262;broadcast({'type':'status','data':_0xb45c92[_0x38aba9(0x1c6)]});}),eventSource[_0xe23262(0x1a8)](_0xe23262(0x1d1),_0x1b1dbb=>{const _0x309df8=_0xe23262;broadcast({'type':_0x309df8(0x1d1),'data':_0x1b1dbb[_0x309df8(0x1c6)]});}),eventSource['addEventListener'](_0xe23262(0x1da),_0x1aaee7=>{const _0x452c5a=_0xe23262;broadcast({'type':_0x452c5a(0x1da),'data':_0x1aaee7['data']});}),eventSource['addEventListener'](_0xe23262(0x1e5),()=>{const _0x2179a1=_0xe23262;broadcast({'type':_0x2179a1(0x1ce)}),reconnectAttempts=0x0;}),eventSource['addEventListener'](_0xe23262(0x1e1),_0x3e0bd9=>{const _0x2514e0=_0xe23262;console[_0x2514e0(0x1e1)](_0x2514e0(0x1bc),_0x3e0bd9),broadcast({'type':_0x2514e0(0x1e1),'error':_0x2514e0(0x1b2)}),eventSource&&(eventSource[_0x2514e0(0x1c1)](),eventSource=null),scheduleReconnect();});}catch(_0x4c6ee6){console[_0xe23262(0x1e1)]('[SSE\x20Worker]\x20Failed\x20to\x20create\x20EventSource:',_0x4c6ee6),broadcast({'type':'error','error':_0x4c6ee6[_0xe23262(0x1ae)]}),scheduleReconnect();}}function scheduleReconnect(){const _0x1cebe0=_0x5e0dd0;reconnectTimeout&&clearTimeout(reconnectTimeout);if(ports[_0x1cebe0(0x1bf)]===0x0)return;const _0x53170f=Math[_0x1cebe0(0x1c7)](0x3e8*Math[_0x1cebe0(0x1af)](0x2,reconnectAttempts),MAX_RECONNECT_DELAY);reconnectAttempts++,console[_0x1cebe0(0x1bd)](_0x1cebe0(0x1cb)+_0x53170f+_0x1cebe0(0x1d5)+reconnectAttempts+')'),reconnectTimeout=setTimeout(()=>{const _0xdfa99=_0x1cebe0;ports[_0xdfa99(0x1bf)]>0x0&&connect(currentUserId);},_0x53170f);}function _0x3a96(_0x5f1849,_0x16efc2){_0x5f1849=_0x5f1849-0x1a4;const _0x229218=_0x2292();let _0x3a96be=_0x229218[_0x5f1849];if(_0x3a96['IGWcoJ']===undefined){var _0x450f1c=function(_0x2467ad){const _0x3d5e63='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x57bdd6='',_0x132fad='';for(let _0x9dbaac=0x0,_0x4317dd,_0xb45c92,_0x1b1dbb=0x0;_0xb45c92=_0x2467ad['charAt'](_0x1b1dbb++);~_0xb45c92&&(_0x4317dd=_0x9dbaac%0x4?_0x4317dd*0x40+_0xb45c92:_0xb45c92,_0x9dbaac++%0x4)?_0x57bdd6+=String['fromCharCode'](0xff&_0x4317dd>>(-0x2*_0x9dbaac&0x6)):0x0){_0xb45c92=_0x3d5e63['indexOf'](_0xb45c92);}for(let _0x1aaee7=0x0,_0x3e0bd9=_0x57bdd6['length'];_0x1aaee7<_0x3e0bd9;_0x1aaee7++){_0x132fad+='%'+('00'+_0x57bdd6['charCodeAt'](_0x1aaee7)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x132fad);};_0x3a96['rxEQuY']=_0x450f1c,_0x3a96['rvRLYa']={},_0x3a96['IGWcoJ']=!![];}const _0x771153=_0x229218[0x0],_0x596c81=_0x5f1849+_0x771153,_0x282283=_0x3a96['rvRLYa'][_0x596c81];return!_0x282283?(_0x3a96be=_0x3a96['rxEQuY'](_0x3a96be),_0x3a96['rvRLYa'][_0x596c81]=_0x3a96be):_0x3a96be=_0x282283,_0x3a96be;}function broadcast(_0x35b0ec){const _0xc4d140=_0x5e0dd0,_0x20f89d=[];ports[_0xc4d140(0x1c4)](_0x4c5637=>{const _0x37f9d0=_0xc4d140;try{_0x4c5637['postMessage'](_0x35b0ec);}catch(_0x43732c){console['warn'](_0x37f9d0(0x1cd),_0x43732c),_0x20f89d[_0x37f9d0(0x1de)](_0x4c5637);}}),_0x20f89d['length']>0x0&&cleanUpDeadPorts(_0x20f89d),ports[_0xc4d140(0x1bf)]===0x0&&eventSource&&(console[_0xc4d140(0x1bd)]('[SSE\x20Worker]\x20No\x20more\x20connected\x20ports,\x20closing\x20SSE'),eventSource['close'](),eventSource=null,reconnectTimeout&&(clearTimeout(reconnectTimeout),reconnectTimeout=null));}function subscribeTask(_0x4ab33d,_0x5a8df4){const _0x5c3e66=_0x5e0dd0;let _0x419155=taskStreams[_0x5c3e66(0x1a9)](_0x5a8df4);!_0x419155&&(_0x419155={'eventSource':null,'reconnectTimeout':null,'reconnectAttempts':0x0,'subscribedPorts':new Set()},taskStreams[_0x5c3e66(0x1a5)](_0x5a8df4,_0x419155));_0x419155[_0x5c3e66(0x1b3)][_0x5c3e66(0x1dd)](_0x4ab33d);if(!_0x419155[_0x5c3e66(0x1b8)]||_0x419155[_0x5c3e66(0x1b8)]['readyState']===EventSource[_0x5c3e66(0x1c9)])connectTaskStream(_0x5a8df4);else{if(_0x419155[_0x5c3e66(0x1b8)][_0x5c3e66(0x1c3)]===EventSource[_0x5c3e66(0x1aa)])try{_0x4ab33d['postMessage']({'type':_0x5c3e66(0x1b0),'taskId':_0x5a8df4});}catch(_0x389f63){}}}function unsubscribeTask(_0x448027,_0x4374ca){const _0x148bb7=_0x5e0dd0,_0x1b05bd=taskStreams[_0x148bb7(0x1a9)](_0x4374ca);if(!_0x1b05bd)return;_0x1b05bd[_0x148bb7(0x1b3)][_0x148bb7(0x1a4)](_0x448027),_0x1b05bd[_0x148bb7(0x1b3)][_0x148bb7(0x1bf)]===0x0&&deferredCloseTaskStream(_0x4374ca);}function connectTaskStream(_0x5eb133){const _0x5708d0=_0x5e0dd0,_0x13d9a8=taskStreams[_0x5708d0(0x1a9)](_0x5eb133);if(!_0x13d9a8)return;_0x13d9a8[_0x5708d0(0x1b8)]&&(_0x13d9a8[_0x5708d0(0x1b8)][_0x5708d0(0x1c1)](),_0x13d9a8['eventSource']=null);try{_0x13d9a8['eventSource']=new EventSource(_0x5708d0(0x1d6)+_0x5eb133+_0x5708d0(0x1ad));for(const _0xfef0ca of TASK_STREAM_EVENTS){_0x13d9a8[_0x5708d0(0x1b8)][_0x5708d0(0x1a8)](_0xfef0ca,_0x17110c=>{const _0x14dfaa=_0x5708d0;broadcastToTask(_0x5eb133,_0x14dfaa(0x1d2)+_0xfef0ca,_0x17110c['data']),_0x13d9a8[_0x14dfaa(0x1ba)]=0x0;});}_0x13d9a8['eventSource'][_0x5708d0(0x1a8)](_0x5708d0(0x1e5),()=>{const _0x3c27b3=_0x5708d0;broadcastToTask(_0x5eb133,_0x3c27b3(0x1b0),'{}'),_0x13d9a8['reconnectAttempts']=0x0;}),_0x13d9a8[_0x5708d0(0x1b8)][_0x5708d0(0x1a8)](_0x5708d0(0x1e1),()=>{const _0x26734c=_0x5708d0;broadcastToTask(_0x5eb133,'task:error',JSON[_0x26734c(0x1ab)]({'error':_0x26734c(0x1b2)})),_0x13d9a8[_0x26734c(0x1b8)]&&(_0x13d9a8[_0x26734c(0x1b8)][_0x26734c(0x1c1)](),_0x13d9a8[_0x26734c(0x1b8)]=null),scheduleTaskReconnect(_0x5eb133);});}catch(_0x58e53e){console[_0x5708d0(0x1e1)](_0x5708d0(0x1d0)+_0x5eb133+':',_0x58e53e),broadcastToTask(_0x5eb133,_0x5708d0(0x1b1),JSON[_0x5708d0(0x1ab)]({'error':_0x58e53e['message']})),scheduleTaskReconnect(_0x5eb133);}}function broadcastToTask(_0x32ff50,_0x43e6ac,_0x4519e3){const _0x2eda58=_0x5e0dd0,_0x276321=taskStreams[_0x2eda58(0x1a9)](_0x32ff50);if(!_0x276321)return;const _0x20a42e=[];_0x276321[_0x2eda58(0x1b3)]['forEach'](_0x446caf=>{const _0x205662=_0x2eda58;try{_0x446caf[_0x205662(0x1d8)]({'type':_0x43e6ac,'taskId':_0x32ff50,'data':_0x4519e3});}catch(_0x32c57a){_0x20a42e[_0x205662(0x1de)](_0x446caf);}}),_0x20a42e[_0x2eda58(0x1a7)]>0x0&&(_0x20a42e['forEach'](_0x4228dd=>_0x276321[_0x2eda58(0x1b3)][_0x2eda58(0x1a4)](_0x4228dd)),cleanUpDeadPorts(_0x20a42e),_0x276321[_0x2eda58(0x1b3)][_0x2eda58(0x1bf)]===0x0&&closeTaskStream(_0x32ff50));}function closeTaskStream(_0x35f74b){const _0x466b26=_0x5e0dd0,_0x33fdcc=taskStreams['get'](_0x35f74b);if(!_0x33fdcc)return;_0x33fdcc[_0x466b26(0x1b8)]&&_0x33fdcc['eventSource'][_0x466b26(0x1c1)](),_0x33fdcc[_0x466b26(0x1df)]&&clearTimeout(_0x33fdcc[_0x466b26(0x1df)]),taskStreams[_0x466b26(0x1a4)](_0x35f74b);}function deferredCloseTaskStream(_0x3236cd){setTimeout(()=>{const _0x1ac50a=_0x3a96,_0x309cd0=taskStreams[_0x1ac50a(0x1a9)](_0x3236cd);_0x309cd0&&_0x309cd0[_0x1ac50a(0x1b3)][_0x1ac50a(0x1bf)]===0x0&&closeTaskStream(_0x3236cd);},0x0);}function scheduleTaskReconnect(_0x7d2926){const _0x347ba7=_0x5e0dd0,_0x4996b3=taskStreams[_0x347ba7(0x1a9)](_0x7d2926);if(!_0x4996b3||_0x4996b3[_0x347ba7(0x1b3)]['size']===0x0)return;_0x4996b3[_0x347ba7(0x1df)]&&clearTimeout(_0x4996b3[_0x347ba7(0x1df)]);const _0x2d6141=Math[_0x347ba7(0x1c7)](0x3e8*Math[_0x347ba7(0x1af)](0x2,_0x4996b3[_0x347ba7(0x1ba)]),MAX_RECONNECT_DELAY);_0x4996b3[_0x347ba7(0x1ba)]++,console[_0x347ba7(0x1bd)]('[SSE\x20Worker]\x20Scheduling\x20task\x20stream\x20reconnect\x20for\x20'+_0x7d2926+'\x20in\x20'+_0x2d6141+'ms'),_0x4996b3[_0x347ba7(0x1df)]=setTimeout(()=>{const _0x50cd50=_0x347ba7;_0x4996b3[_0x50cd50(0x1b3)]['size']>0x0&&connectTaskStream(_0x7d2926);},_0x2d6141);}function cleanUpDeadPorts(_0x4f246a){const _0x2adfca=_0x5e0dd0;for(const _0x4d1de9 of _0x4f246a){ports[_0x2adfca(0x1a4)](_0x4d1de9),taskStreams[_0x2adfca(0x1c4)]((_0x2bba7f,_0xd4b116)=>{const _0x4c2519=_0x2adfca;_0x2bba7f[_0x4c2519(0x1b3)][_0x4c2519(0x1a4)](_0x4d1de9),_0x2bba7f['subscribedPorts'][_0x4c2519(0x1bf)]===0x0&&closeTaskStream(_0xd4b116);});}}function removePortFromAllTasks(_0x5e7c21){const _0x568d92=_0x5e0dd0;taskStreams[_0x568d92(0x1c4)]((_0xa384df,_0x38e30b)=>{const _0x34c3c4=_0x568d92;_0xa384df[_0x34c3c4(0x1b3)]['has'](_0x5e7c21)&&(_0xa384df[_0x34c3c4(0x1b3)][_0x34c3c4(0x1a4)](_0x5e7c21),_0xa384df[_0x34c3c4(0x1b3)][_0x34c3c4(0x1bf)]===0x0&&closeTaskStream(_0x38e30b));});}self['onconnect']=function(_0x5a3589){const _0x257c11=_0x5e0dd0,_0x4c7321=_0x5a3589[_0x257c11(0x1cf)][0x0];ports[_0x257c11(0x1dd)](_0x4c7321),console[_0x257c11(0x1bd)](_0x257c11(0x1d4)+ports[_0x257c11(0x1bf)]),_0x4c7321['onmessage']=function(_0x441b35){const _0x1dd512=_0x257c11,{action:_0xf012a9,userId:_0x80bfb1,taskId:_0x352dc6}=_0x441b35[_0x1dd512(0x1c6)];switch(_0xf012a9){case'connect':connect(_0x80bfb1);eventSource&&eventSource[_0x1dd512(0x1c3)]===EventSource[_0x1dd512(0x1aa)]&&_0x4c7321[_0x1dd512(0x1d8)]({'type':_0x1dd512(0x1ce)});break;case _0x1dd512(0x1bb):ports[_0x1dd512(0x1a4)](_0x4c7321),removePortFromAllTasks(_0x4c7321),console['log'](_0x1dd512(0x1cc)+ports[_0x1dd512(0x1bf)]);ports[_0x1dd512(0x1bf)]===0x0&&eventSource&&(eventSource['close'](),eventSource=null,reconnectTimeout&&(clearTimeout(reconnectTimeout),reconnectTimeout=null));break;case'changeFilter':_0x80bfb1!==currentUserId&&connect(_0x80bfb1);break;case _0x1dd512(0x1dc):subscribeTask(_0x4c7321,_0x352dc6);break;case'unsubscribeTask':unsubscribeTask(_0x4c7321,_0x352dc6);break;default:console[_0x1dd512(0x1e4)]('[SSE\x20Worker]\x20Unknown\x20action:',_0xf012a9);}},_0x4c7321['onmessageerror']=function(_0x19c45d){const _0x4465d1=_0x257c11;console[_0x4465d1(0x1e1)](_0x4465d1(0x1d7),_0x19c45d),ports['delete'](_0x4c7321),removePortFromAllTasks(_0x4c7321);},_0x4c7321['start']();};
|
|
1
|
+
const ports=new Set();let eventSource=null,currentUserId=null,reconnectTimeout=null,reconnectAttempts=0x0;const MAX_RECONNECT_DELAY=0x7530,taskStreams=new Map(),TASK_STREAM_EVENTS=['activity','logs','metadata','summary','changed-files','app-server-status','complete'];function connect(_0x1b334a){eventSource&¤tUserId!==_0x1b334a&&(eventSource['close'](),eventSource=null);if(eventSource&&eventSource['readyState']!==EventSource['CLOSED'])return;currentUserId=_0x1b334a;const _0x2101a2=_0x1b334a&&_0x1b334a!=='me'?'?userId='+_0x1b334a:'';try{eventSource=new EventSource('/tasks/updates'+_0x2101a2),eventSource['addEventListener']('snapshot',_0x5626a6=>{broadcast({'type':'snapshot','data':_0x5626a6['data']}),reconnectAttempts=0x0;}),eventSource['addEventListener']('activity',_0x46f5c9=>{broadcast({'type':'activity','data':_0x46f5c9['data']});}),eventSource['addEventListener']('status',_0x311d1a=>{broadcast({'type':'status','data':_0x311d1a['data']});}),eventSource['addEventListener']('new-task',_0x51f36b=>{broadcast({'type':'new-task','data':_0x51f36b['data']});}),eventSource['addEventListener']('queue-position',_0x1e20ed=>{broadcast({'type':'queue-position','data':_0x1e20ed['data']});}),eventSource['addEventListener']('open',()=>{broadcast({'type':'connected'}),reconnectAttempts=0x0;}),eventSource['addEventListener']('error',_0x2c9c34=>{console['error']('[SSE\x20Worker]\x20Connection\x20error:',_0x2c9c34),broadcast({'type':'error','error':'Connection\x20error'}),eventSource&&(eventSource['close'](),eventSource=null),scheduleReconnect();});}catch(_0x4ac998){console['error']('[SSE\x20Worker]\x20Failed\x20to\x20create\x20EventSource:',_0x4ac998),broadcast({'type':'error','error':_0x4ac998['message']}),scheduleReconnect();}}function scheduleReconnect(){reconnectTimeout&&clearTimeout(reconnectTimeout);if(ports['size']===0x0)return;const _0x51a1d0=Math['min'](0x3e8*Math['pow'](0x2,reconnectAttempts),MAX_RECONNECT_DELAY);reconnectAttempts++,console['log']('[SSE\x20Worker]\x20Scheduling\x20reconnect\x20in\x20'+_0x51a1d0+'ms\x20(attempt\x20'+reconnectAttempts+')'),reconnectTimeout=setTimeout(()=>{ports['size']>0x0&&connect(currentUserId);},_0x51a1d0);}function broadcast(_0x54bf6e){const _0x49af10=[];ports['forEach'](_0x57c096=>{try{_0x57c096['postMessage'](_0x54bf6e);}catch(_0x40102c){console['warn']('[SSE\x20Worker]\x20Failed\x20to\x20send\x20to\x20port,\x20removing:',_0x40102c),_0x49af10['push'](_0x57c096);}}),_0x49af10['length']>0x0&&cleanUpDeadPorts(_0x49af10),ports['size']===0x0&&eventSource&&(console['log']('[SSE\x20Worker]\x20No\x20more\x20connected\x20ports,\x20closing\x20SSE'),eventSource['close'](),eventSource=null,reconnectTimeout&&(clearTimeout(reconnectTimeout),reconnectTimeout=null));}function subscribeTask(_0x12657f,_0xf167c5){let _0x4ca334=taskStreams['get'](_0xf167c5);!_0x4ca334&&(_0x4ca334={'eventSource':null,'reconnectTimeout':null,'reconnectAttempts':0x0,'subscribedPorts':new Set()},taskStreams['set'](_0xf167c5,_0x4ca334));_0x4ca334['subscribedPorts']['add'](_0x12657f);if(!_0x4ca334['eventSource']||_0x4ca334['eventSource']['readyState']===EventSource['CLOSED'])connectTaskStream(_0xf167c5);else{if(_0x4ca334['eventSource']['readyState']===EventSource['OPEN'])try{_0x12657f['postMessage']({'type':'task:connected','taskId':_0xf167c5});}catch(_0x488347){}}}function unsubscribeTask(_0xd4e6e6,_0x8e6292){const _0x2744f9=taskStreams['get'](_0x8e6292);if(!_0x2744f9)return;_0x2744f9['subscribedPorts']['delete'](_0xd4e6e6),_0x2744f9['subscribedPorts']['size']===0x0&&deferredCloseTaskStream(_0x8e6292);}function connectTaskStream(_0x47f2fd){const _0x3476ac=taskStreams['get'](_0x47f2fd);if(!_0x3476ac)return;_0x3476ac['eventSource']&&(_0x3476ac['eventSource']['close'](),_0x3476ac['eventSource']=null);try{_0x3476ac['eventSource']=new EventSource('/tasks/'+_0x47f2fd+'/stream');for(const _0x598ddb of TASK_STREAM_EVENTS){_0x3476ac['eventSource']['addEventListener'](_0x598ddb,_0x2fc395=>{broadcastToTask(_0x47f2fd,'task:'+_0x598ddb,_0x2fc395['data']),_0x3476ac['reconnectAttempts']=0x0;});}_0x3476ac['eventSource']['addEventListener']('open',()=>{broadcastToTask(_0x47f2fd,'task:connected','{}'),_0x3476ac['reconnectAttempts']=0x0;}),_0x3476ac['eventSource']['addEventListener']('error',()=>{broadcastToTask(_0x47f2fd,'task:error',JSON['stringify']({'error':'Connection\x20error'})),_0x3476ac['eventSource']&&(_0x3476ac['eventSource']['close'](),_0x3476ac['eventSource']=null),scheduleTaskReconnect(_0x47f2fd);});}catch(_0x42ffbc){console['error']('[SSE\x20Worker]\x20Failed\x20to\x20create\x20task\x20EventSource\x20for\x20'+_0x47f2fd+':',_0x42ffbc),broadcastToTask(_0x47f2fd,'task:error',JSON['stringify']({'error':_0x42ffbc['message']})),scheduleTaskReconnect(_0x47f2fd);}}function broadcastToTask(_0x2ef8b2,_0x34973e,_0x2a9063){const _0x5e0e64=taskStreams['get'](_0x2ef8b2);if(!_0x5e0e64)return;const _0x571539=[];_0x5e0e64['subscribedPorts']['forEach'](_0x5072e7=>{try{_0x5072e7['postMessage']({'type':_0x34973e,'taskId':_0x2ef8b2,'data':_0x2a9063});}catch(_0x235e7b){_0x571539['push'](_0x5072e7);}}),_0x571539['length']>0x0&&(_0x571539['forEach'](_0x690bbb=>_0x5e0e64['subscribedPorts']['delete'](_0x690bbb)),cleanUpDeadPorts(_0x571539),_0x5e0e64['subscribedPorts']['size']===0x0&&closeTaskStream(_0x2ef8b2));}function closeTaskStream(_0x21c9d2){const _0x4b6241=taskStreams['get'](_0x21c9d2);if(!_0x4b6241)return;_0x4b6241['eventSource']&&_0x4b6241['eventSource']['close'](),_0x4b6241['reconnectTimeout']&&clearTimeout(_0x4b6241['reconnectTimeout']),taskStreams['delete'](_0x21c9d2);}function deferredCloseTaskStream(_0x182f86){setTimeout(()=>{const _0x3087bb=taskStreams['get'](_0x182f86);_0x3087bb&&_0x3087bb['subscribedPorts']['size']===0x0&&closeTaskStream(_0x182f86);},0x0);}function scheduleTaskReconnect(_0x1034d6){const _0x1e63a1=taskStreams['get'](_0x1034d6);if(!_0x1e63a1||_0x1e63a1['subscribedPorts']['size']===0x0)return;_0x1e63a1['reconnectTimeout']&&clearTimeout(_0x1e63a1['reconnectTimeout']);const _0xa123c7=Math['min'](0x3e8*Math['pow'](0x2,_0x1e63a1['reconnectAttempts']),MAX_RECONNECT_DELAY);_0x1e63a1['reconnectAttempts']++,console['log']('[SSE\x20Worker]\x20Scheduling\x20task\x20stream\x20reconnect\x20for\x20'+_0x1034d6+'\x20in\x20'+_0xa123c7+'ms'),_0x1e63a1['reconnectTimeout']=setTimeout(()=>{_0x1e63a1['subscribedPorts']['size']>0x0&&connectTaskStream(_0x1034d6);},_0xa123c7);}function cleanUpDeadPorts(_0x45cbb0){for(const _0x2df3b7 of _0x45cbb0){ports['delete'](_0x2df3b7),taskStreams['forEach']((_0x36ef2d,_0xd6408f)=>{_0x36ef2d['subscribedPorts']['delete'](_0x2df3b7),_0x36ef2d['subscribedPorts']['size']===0x0&&closeTaskStream(_0xd6408f);});}}function removePortFromAllTasks(_0x456373){taskStreams['forEach']((_0x4ee93a,_0x22e7c0)=>{_0x4ee93a['subscribedPorts']['has'](_0x456373)&&(_0x4ee93a['subscribedPorts']['delete'](_0x456373),_0x4ee93a['subscribedPorts']['size']===0x0&&closeTaskStream(_0x22e7c0));});}self['onconnect']=function(_0x45b6dc){const _0x818a78=_0x45b6dc['ports'][0x0];ports['add'](_0x818a78),console['log']('[SSE\x20Worker]\x20New\x20port\x20connected.\x20Total\x20ports:\x20'+ports['size']),_0x818a78['onmessage']=function(_0x32e0e7){const {action:_0x31fd9a,userId:_0xe814ba,taskId:_0x5e836b}=_0x32e0e7['data'];switch(_0x31fd9a){case'connect':connect(_0xe814ba);eventSource&&eventSource['readyState']===EventSource['OPEN']&&_0x818a78['postMessage']({'type':'connected'});break;case'disconnect':ports['delete'](_0x818a78),removePortFromAllTasks(_0x818a78),console['log']('[SSE\x20Worker]\x20Port\x20disconnected.\x20Total\x20ports:\x20'+ports['size']);ports['size']===0x0&&eventSource&&(eventSource['close'](),eventSource=null,reconnectTimeout&&(clearTimeout(reconnectTimeout),reconnectTimeout=null));break;case'changeFilter':_0xe814ba!==currentUserId&&connect(_0xe814ba);break;case'subscribeTask':subscribeTask(_0x818a78,_0x5e836b);break;case'unsubscribeTask':unsubscribeTask(_0x818a78,_0x5e836b);break;default:console['warn']('[SSE\x20Worker]\x20Unknown\x20action:',_0x31fd9a);}},_0x818a78['onmessageerror']=function(_0x59792f){console['error']('[SSE\x20Worker]\x20Port\x20message\x20error:',_0x59792f),ports['delete'](_0x818a78),removePortFromAllTasks(_0x818a78);},_0x818a78['start']();};
|
|
@@ -2935,10 +2935,10 @@ button:disabled,
|
|
|
2935
2935
|
}
|
|
2936
2936
|
|
|
2937
2937
|
.stat-card.status-pinned {
|
|
2938
|
-
--stat-accent: var(--color-
|
|
2939
|
-
--stat-accent-weak: rgba(
|
|
2940
|
-
--stat-accent-border: rgba(
|
|
2941
|
-
--stat-accent-glow: rgba(
|
|
2938
|
+
--stat-accent: var(--color-accent);
|
|
2939
|
+
--stat-accent-weak: rgba(63, 114, 255, 0.14);
|
|
2940
|
+
--stat-accent-border: rgba(63, 114, 255, 0.50);
|
|
2941
|
+
--stat-accent-glow: rgba(63, 114, 255, 0.28);
|
|
2942
2942
|
}
|
|
2943
2943
|
|
|
2944
2944
|
.stat-card.status-recent {
|
|
@@ -3843,8 +3843,8 @@ button:disabled,
|
|
|
3843
3843
|
color: currentColor; /* Inherits from .task-pin-btn which has color: var(--color-text-muted) */
|
|
3844
3844
|
}
|
|
3845
3845
|
|
|
3846
|
-
.task-tile .task-pin-btn .pin-
|
|
3847
|
-
|
|
3846
|
+
.task-tile .task-pin-btn .pin-filled {
|
|
3847
|
+
flex-shrink: 0;
|
|
3848
3848
|
}
|
|
3849
3849
|
|
|
3850
3850
|
.task-tile .task-pin-btn.loading {
|
|
@@ -3853,7 +3853,7 @@ button:disabled,
|
|
|
3853
3853
|
}
|
|
3854
3854
|
|
|
3855
3855
|
.task-tile .task-pin-btn.loading .pin-svg,
|
|
3856
|
-
.task-tile .task-pin-btn.loading .pin-
|
|
3856
|
+
.task-tile .task-pin-btn.loading .pin-filled {
|
|
3857
3857
|
display: none;
|
|
3858
3858
|
}
|
|
3859
3859
|
|
|
@@ -8576,17 +8576,13 @@ select option[value=""] {
|
|
|
8576
8576
|
color: var(--color-text);
|
|
8577
8577
|
}
|
|
8578
8578
|
|
|
8579
|
-
#pin-task .pin-emoji {
|
|
8580
|
-
font-size: 18px;
|
|
8581
|
-
}
|
|
8582
|
-
|
|
8583
8579
|
#pin-task.loading {
|
|
8584
8580
|
pointer-events: none;
|
|
8585
8581
|
opacity: 0.7;
|
|
8586
8582
|
}
|
|
8587
8583
|
|
|
8588
8584
|
#pin-task.loading .pin-svg,
|
|
8589
|
-
#pin-task.loading .pin-
|
|
8585
|
+
#pin-task.loading .pin-filled {
|
|
8590
8586
|
display: none;
|
|
8591
8587
|
}
|
|
8592
8588
|
|
|
@@ -14820,6 +14816,37 @@ input.toggle-switch:focus {
|
|
|
14820
14816
|
font-weight: 600;
|
|
14821
14817
|
}
|
|
14822
14818
|
|
|
14819
|
+
.timeline-feedback-priority {
|
|
14820
|
+
font-size: 11px;
|
|
14821
|
+
font-weight: 600;
|
|
14822
|
+
padding: 1px 8px;
|
|
14823
|
+
border-radius: 10px;
|
|
14824
|
+
letter-spacing: 0.3px;
|
|
14825
|
+
margin-left: auto;
|
|
14826
|
+
white-space: nowrap;
|
|
14827
|
+
cursor: pointer;
|
|
14828
|
+
transition: opacity 0.15s;
|
|
14829
|
+
}
|
|
14830
|
+
|
|
14831
|
+
.timeline-feedback-priority:hover {
|
|
14832
|
+
opacity: 0.8;
|
|
14833
|
+
}
|
|
14834
|
+
|
|
14835
|
+
.timeline-feedback-priority.priority-low {
|
|
14836
|
+
background: rgba(52, 199, 89, 0.12);
|
|
14837
|
+
color: var(--color-success, #34c759);
|
|
14838
|
+
}
|
|
14839
|
+
|
|
14840
|
+
.timeline-feedback-priority.priority-medium {
|
|
14841
|
+
background: rgba(255, 159, 10, 0.12);
|
|
14842
|
+
color: var(--color-warning, #ff9f0a);
|
|
14843
|
+
}
|
|
14844
|
+
|
|
14845
|
+
.timeline-feedback-priority.priority-high {
|
|
14846
|
+
background: rgba(229, 83, 104, 0.12);
|
|
14847
|
+
color: var(--color-danger, #e55368);
|
|
14848
|
+
}
|
|
14849
|
+
|
|
14823
14850
|
.timeline-actions {
|
|
14824
14851
|
display: flex;
|
|
14825
14852
|
gap: 8px;
|
|
@@ -122,7 +122,10 @@
|
|
|
122
122
|
<path d="M12 17v5"></path>
|
|
123
123
|
<path d="M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z"></path>
|
|
124
124
|
</svg>
|
|
125
|
-
<
|
|
125
|
+
<svg class="pin-icon pin-filled" width="16" height="16" viewBox="0 0 24 24" fill="var(--color-accent)" stroke="var(--color-accent)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="display: none;">
|
|
126
|
+
<path d="M12 17v5"></path>
|
|
127
|
+
<path d="M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z"></path>
|
|
128
|
+
</svg>
|
|
126
129
|
</button>
|
|
127
130
|
<button class="btn-ghost btn-small" id="reset-layout">Reset Layout</button>
|
|
128
131
|
<button class="btn-icon" id="hide-all-sections" title="Hide all sections" style="display: none;">
|
|
@@ -440,6 +443,7 @@
|
|
|
440
443
|
<button class="btn-warning btn-small" id="stop-task" disabled hidden>Interrupt</button>
|
|
441
444
|
<button class="btn-primary btn-small" id="approve-task" disabled>Approve</button>
|
|
442
445
|
<button class="btn-primary btn-small" id="create-pr-task" hidden>Create Pull Request</button>
|
|
446
|
+
<button class="btn-primary btn-small" id="sync-to-ibmi-task" hidden>Sync to IBM i</button>
|
|
443
447
|
</div>
|
|
444
448
|
</div>
|
|
445
449
|
|
|
@@ -630,6 +634,10 @@
|
|
|
630
634
|
<dt>Pull Requests</dt>
|
|
631
635
|
<dd id="meta-pull-requests"></dd>
|
|
632
636
|
</div>
|
|
637
|
+
<div id="meta-ibmi-sync-wrapper" hidden>
|
|
638
|
+
<dt>IBM i Sync</dt>
|
|
639
|
+
<dd>Synced to <code id="meta-ibmi-sync-library"></code><span id="meta-ibmi-sync-time" class="text-muted"></span> — <a href="#" id="meta-ibmi-sync-log-link">View log</a></dd>
|
|
640
|
+
</div>
|
|
633
641
|
<div id="meta-follow-ups-wrapper" hidden>
|
|
634
642
|
<dt>Follow-Ups</dt>
|
|
635
643
|
<dd><button id="meta-follow-ups" class="link-button" style="padding: 0; border: none; background: none; color: var(--color-primary); cursor: pointer; text-decoration: underline;">—</button></dd>
|
|
@@ -1994,5 +2002,52 @@
|
|
|
1994
2002
|
</div>
|
|
1995
2003
|
</div>
|
|
1996
2004
|
|
|
2005
|
+
<!-- Sync to IBM i Dialog -->
|
|
2006
|
+
<div id="sync-ibmi-modal" class="modal" hidden>
|
|
2007
|
+
<div class="modal-overlay"></div>
|
|
2008
|
+
<div class="modal-content" style="max-width: 400px;">
|
|
2009
|
+
<div class="modal-header">
|
|
2010
|
+
<h2>Sync to IBM i</h2>
|
|
2011
|
+
<button type="button" class="modal-close" aria-label="Close">×</button>
|
|
2012
|
+
</div>
|
|
2013
|
+
<div class="modal-body">
|
|
2014
|
+
<p class="text-muted">Sync changed files to an IBM i library.</p>
|
|
2015
|
+
<div id="sync-ibmi-error" class="modal-error" hidden></div>
|
|
2016
|
+
<div class="form-row">
|
|
2017
|
+
<label for="sync-ibmi-library">Library Name <span class="required">*</span></label>
|
|
2018
|
+
<input type="text" id="sync-ibmi-library" class="form-input code-font" maxlength="10" style="width: 160px;">
|
|
2019
|
+
</div>
|
|
2020
|
+
<p class="text-muted" style="font-size: 12px;">
|
|
2021
|
+
Connection: <span id="sync-ibmi-host"></span>
|
|
2022
|
+
</p>
|
|
2023
|
+
</div>
|
|
2024
|
+
<div class="modal-actions">
|
|
2025
|
+
<button type="button" class="btn-secondary" id="sync-ibmi-cancel">Cancel</button>
|
|
2026
|
+
<button type="button" class="btn-primary" id="sync-ibmi-confirm">Sync</button>
|
|
2027
|
+
</div>
|
|
2028
|
+
</div>
|
|
2029
|
+
</div>
|
|
2030
|
+
|
|
2031
|
+
<!-- Sync to IBM i Log Modal -->
|
|
2032
|
+
<div id="sync-ibmi-log-modal" class="modal" hidden>
|
|
2033
|
+
<div class="modal-overlay"></div>
|
|
2034
|
+
<div class="modal-content" style="max-width: 700px;">
|
|
2035
|
+
<div class="modal-header">
|
|
2036
|
+
<h2>Sync to IBM i — <span id="sync-log-library"></span></h2>
|
|
2037
|
+
<button type="button" class="modal-close" aria-label="Close">×</button>
|
|
2038
|
+
</div>
|
|
2039
|
+
<div class="modal-body">
|
|
2040
|
+
<pre id="sync-log-output" class="build-output-log"></pre>
|
|
2041
|
+
<div id="sync-log-summary" hidden>
|
|
2042
|
+
<div id="sync-log-success" class="sync-summary success" hidden>Sync completed successfully.</div>
|
|
2043
|
+
<div id="sync-log-failure" class="sync-summary failure" hidden>Sync failed.</div>
|
|
2044
|
+
</div>
|
|
2045
|
+
</div>
|
|
2046
|
+
<div class="modal-actions">
|
|
2047
|
+
<button type="button" class="btn-secondary" id="sync-log-close">Close</button>
|
|
2048
|
+
</div>
|
|
2049
|
+
</div>
|
|
2050
|
+
</div>
|
|
2051
|
+
|
|
1997
2052
|
</body>
|
|
1998
2053
|
</html>
|