@profoundlogic/coderflow-server 0.6.9 → 0.7.1
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/dist/base-image/Dockerfile +3 -0
- package/dist/base-image/entrypoint.sh +13 -0
- package/dist/base-image/standard-instructions/ibmi-database-sql.md +11 -0
- package/dist/base-image/standard-instructions/ibmi-exploratory-verification.md +40 -0
- package/dist/base-image/standard-instructions/ibmi-output-requirements.md +6 -0
- package/dist/base-image/standard-instructions/output-requirements.md +18 -0
- package/dist/base-image/standard-instructions/screenshot-guidelines.md +17 -0
- package/dist/coder-server.js +1 -1
- 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 -1
- 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 -1
- 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 -1
- package/dist/lib/cli/list-users.js +1 -1
- package/dist/lib/cli/server-manager.js +1 -1
- package/dist/lib/cli/set-password.js +1 -1
- 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 -1
- 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-aliases.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/playwright.task-terminal.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/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/environments.css +21 -0
- package/dist/web-ui/public/environments.html +68 -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/file-selection-tree.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/ibmi-file-filter.js +1 -1
- 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/permissions.js +1 -1
- package/dist/web-ui/public/pr-dialog.js +1 -1
- 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.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 +52 -1
- package/dist/web-ui/public/task-judging-helpers.js +1 -1
- package/dist/web-ui/public/task.html +43 -5
- package/dist/web-ui/public/task.js +1 -1
- 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.js +1 -1
- package/dist/web-ui/public/variant-grouping.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
function isSharedWorkerSupported(){return typeof SharedWorker!=='undefined';}function eventTypeToHandler(
|
|
1
|
+
function isSharedWorkerSupported(){return typeof SharedWorker!=='undefined';}function eventTypeToHandler(_0x209342){if(_0x209342==='connected')return'onConnected';if(_0x209342==='error')return'onError';return'on'+_0x209342['split']('-')['map'](_0x124289=>_0x124289['charAt'](0x0)['toUpperCase']()+_0x124289['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'](_0x6dea93,_0x5cd818){return!this['listeners']['has'](_0x6dea93)&&this['listeners']['set'](_0x6dea93,new Set()),this['listeners']['get'](_0x6dea93)['add'](_0x5cd818),this;}['off'](_0x38d35b,_0x1852e9){return this['listeners']['has'](_0x38d35b)&&this['listeners']['get'](_0x38d35b)['delete'](_0x1852e9),this;}['_emit'](_0x3bdaaf,_0x4c5416){this['listeners']['has'](_0x3bdaaf)&&this['listeners']['get'](_0x3bdaaf)['forEach'](_0x383067=>{try{_0x383067(_0x4c5416);}catch(_0x1bbb0f){console['error']('[SSE\x20Client]\x20Error\x20in\x20'+_0x3bdaaf+'\x20listener:',_0x1bbb0f);}});}['connect'](_0x1e4022='me'){this['userId']=_0x1e4022,this['useSharedWorker']?this['_connectViaWorker'](_0x1e4022):this['_connectDirect'](_0x1e4022);}['_connectViaWorker'](_0x565dba){try{this['_ensureWorker'](),this['port']['postMessage']({'action':'connect','userId':_0x565dba});}catch(_0x88554d){console['error']('[SSE\x20Client]\x20SharedWorker\x20failed,\x20falling\x20back\x20to\x20direct\x20SSE:',_0x88554d),this['useSharedWorker']=![],this['_connectDirect'](_0x565dba);}}['_ensureWorker'](){!this['worker']&&(this['worker']=new SharedWorker('/sse-shared-worker.js'),this['port']=this['worker']['port'],this['port']['onmessage']=this['_handleWorkerMessage'],this['port']['onmessageerror']=_0x84d54e=>{console['error']('[SSE\x20Client]\x20Worker\x20message\x20error:',_0x84d54e),this['_emit']('error',{'error':'Worker\x20message\x20error'});},this['port']['start']());}['_handleWorkerMessage'](_0xfd10fb){const _0x251fb2=_0xfd10fb['data'];if(_0x251fb2['type']&&_0x251fb2['type']['startsWith']('task:')){this['_handleTaskStreamMessage'](_0x251fb2);return;}switch(_0x251fb2['type']){case'connected':this['connected']=!![],this['_emit']('connected',{});break;case'snapshot':case'activity':case'status':case'new-task':case'queue-position':try{const _0x164d64=JSON['parse'](_0x251fb2['data']);this['_emit'](_0x251fb2['type'],_0x164d64);}catch(_0x3e0c2e){console['error']('[SSE\x20Client]\x20Failed\x20to\x20parse\x20'+_0x251fb2['type']+'\x20data:',_0x3e0c2e);}break;case'error':this['connected']=![],this['_emit']('error',_0x251fb2);break;default:console['warn']('[SSE\x20Client]\x20Unknown\x20message\x20type:',_0x251fb2['type']);}}['_handleTaskStreamMessage'](_0xb21f5a){const {taskId:_0x15cd12,type:_0x5dce7e,data:_0x505f01}=_0xb21f5a,_0x2d2d7d=this['_taskSubscriptions']['get'](_0x15cd12);if(!_0x2d2d7d||_0x2d2d7d['size']===0x0)return;const _0xe5b7e0=_0x5dce7e['replace']('task:',''),_0x5c16a5=eventTypeToHandler(_0xe5b7e0);_0x2d2d7d['forEach'](_0x155318=>{if(_0x155318['handlers'][_0x5c16a5])try{const _0x441035=typeof _0x505f01==='string'?JSON['parse'](_0x505f01):_0x505f01;_0x155318['handlers'][_0x5c16a5](_0x441035);}catch(_0x29ab48){console['error']('[SSE\x20Client]\x20Error\x20in\x20task\x20'+_0xe5b7e0+'\x20handler:',_0x29ab48);}});}['_connectDirect'](_0x198de1){this['eventSource']&&(this['eventSource']['close'](),this['eventSource']=null);const _0x2bd38d=_0x198de1&&_0x198de1!=='me'?'?userId='+_0x198de1:'';try{this['eventSource']=new EventSource('/tasks/updates'+_0x2bd38d),this['eventSource']['addEventListener']('open',()=>{this['connected']=!![],this['reconnectAttempts']=0x0,this['_emit']('connected',{});}),this['eventSource']['addEventListener']('snapshot',_0x21ffd2=>{this['_handleDirectSSE']('snapshot',_0x21ffd2),this['reconnectAttempts']=0x0;}),this['eventSource']['addEventListener']('activity',_0xa269cf=>{this['_handleDirectSSE']('activity',_0xa269cf);}),this['eventSource']['addEventListener']('status',_0x2c91d5=>{this['_handleDirectSSE']('status',_0x2c91d5);}),this['eventSource']['addEventListener']('new-task',_0x44ca07=>{this['_handleDirectSSE']('new-task',_0x44ca07);}),this['eventSource']['addEventListener']('queue-position',_0xfdb62c=>{this['_handleDirectSSE']('queue-position',_0xfdb62c);}),this['eventSource']['addEventListener']('error',_0x2ed9a6=>{console['error']('[SSE\x20Client]\x20Direct\x20SSE\x20error:',_0x2ed9a6),this['connected']=![],this['_emit']('error',{'error':'Connection\x20error'}),this['eventSource']&&(this['eventSource']['close'](),this['eventSource']=null),this['_scheduleReconnect']();});}catch(_0x374565){console['error']('[SSE\x20Client]\x20Failed\x20to\x20create\x20EventSource:',_0x374565),this['_emit']('error',{'error':_0x374565['message']}),this['_scheduleReconnect']();}}['_handleDirectSSE'](_0x519725,_0x17b161){try{const _0x1a2427=JSON['parse'](_0x17b161['data']);this['_emit'](_0x519725,_0x1a2427);}catch(_0x57d347){console['error']('[SSE\x20Client]\x20Failed\x20to\x20parse\x20'+_0x519725+'\x20data:',_0x57d347);}}['_scheduleReconnect'](){this['reconnectTimeout']&&clearTimeout(this['reconnectTimeout']);const _0x19d6c0=Math['min'](0x3e8*Math['pow'](0x2,this['reconnectAttempts']),0x7530);this['reconnectAttempts']++,console['log']('[SSE\x20Client]\x20Scheduling\x20reconnect\x20in\x20'+_0x19d6c0+'ms'),this['reconnectTimeout']=setTimeout(()=>{this['_connectDirect'](this['userId']);},_0x19d6c0);}['changeFilter'](_0x16e361){if(_0x16e361===this['userId'])return;this['userId']=_0x16e361;if(this['useSharedWorker']&&this['port'])this['port']['postMessage']({'action':'changeFilter','userId':_0x16e361});else this['eventSource']&&this['_connectDirect'](_0x16e361);}['subscribeTask'](_0x5e0a6e,_0x54d9c2){return this['useSharedWorker']?this['_subscribeTaskViaWorker'](_0x5e0a6e,_0x54d9c2):this['_subscribeTaskDirect'](_0x5e0a6e,_0x54d9c2);}['unsubscribeTask'](_0x125f90){if(!_0x125f90)return;_0x125f90['type']==='worker'?this['_unsubscribeTaskWorker'](_0x125f90):this['_unsubscribeTaskDirect'](_0x125f90);}['_subscribeTaskViaWorker'](_0x487751,_0x31e7d2){try{this['_ensureWorker']();}catch(_0x34ceea){return console['error']('[SSE\x20Client]\x20SharedWorker\x20failed\x20for\x20task\x20sub,\x20falling\x20back:',_0x34ceea),this['useSharedWorker']=![],this['_subscribeTaskDirect'](_0x487751,_0x31e7d2);}const _0x2a45b5=++this['_taskSubIdCounter'],_0x334e0b={'type':'worker','taskId':_0x487751,'handlers':_0x31e7d2,'id':_0x2a45b5};return!this['_taskSubscriptions']['has'](_0x487751)&&(this['_taskSubscriptions']['set'](_0x487751,new Set()),this['port']['postMessage']({'action':'subscribeTask','taskId':_0x487751})),this['_taskSubscriptions']['get'](_0x487751)['add'](_0x334e0b),_0x334e0b;}['_unsubscribeTaskWorker'](_0x4ef91f){const {taskId:_0x80ff2a}=_0x4ef91f,_0x123c1f=this['_taskSubscriptions']['get'](_0x80ff2a);if(_0x123c1f){_0x123c1f['delete'](_0x4ef91f);if(_0x123c1f['size']===0x0){this['_taskSubscriptions']['delete'](_0x80ff2a);try{this['port']&&this['port']['postMessage']({'action':'unsubscribeTask','taskId':_0x80ff2a});}catch(_0x4d787f){}}}}['_subscribeTaskDirect'](_0x5b8e4d,_0x1ca630){const _0x3e28ca=++this['_taskSubIdCounter'],_0x8460d=new EventSource('/tasks/'+_0x5b8e4d+'/stream'),_0x24e608={'type':'direct','taskId':_0x5b8e4d,'handlers':_0x1ca630,'id':_0x3e28ca,'eventSource':_0x8460d};!this['_taskSubscriptions']['has'](_0x5b8e4d)&&this['_taskSubscriptions']['set'](_0x5b8e4d,new Set());this['_taskSubscriptions']['get'](_0x5b8e4d)['add'](_0x24e608);for(const _0x1b4754 of TASK_STREAM_EVENTS){const _0xff25ab=eventTypeToHandler(_0x1b4754);_0x8460d['addEventListener'](_0x1b4754,_0x188744=>{if(_0x1ca630[_0xff25ab])try{const _0x3fe658=JSON['parse'](_0x188744['data']);_0x1ca630[_0xff25ab](_0x3fe658);}catch(_0x479c49){console['error']('[SSE\x20Client]\x20Error\x20parsing\x20task\x20'+_0x1b4754+':',_0x479c49);}});}return _0x8460d['addEventListener']('open',()=>{if(_0x1ca630['onConnected'])_0x1ca630['onConnected']();}),_0x8460d['addEventListener']('error',()=>{if(_0x1ca630['onError'])_0x1ca630['onError']({'error':'Connection\x20error'});}),_0x24e608;}['_unsubscribeTaskDirect'](_0x55a5a8){_0x55a5a8['eventSource']&&(_0x55a5a8['eventSource']['close'](),_0x55a5a8['eventSource']=null);const _0x39ab97=this['_taskSubscriptions']['get'](_0x55a5a8['taskId']);_0x39ab97&&(_0x39ab97['delete'](_0x55a5a8),_0x39ab97['size']===0x0&&this['_taskSubscriptions']['delete'](_0x55a5a8['taskId']));}['disconnect'](){this['reconnectTimeout']&&(clearTimeout(this['reconnectTimeout']),this['reconnectTimeout']=null);this['_taskSubscriptions']['forEach']((_0x2d2136,_0x324344)=>{_0x2d2136['forEach'](_0x498471=>{_0x498471['type']==='direct'&&_0x498471['eventSource']&&_0x498471['eventSource']['close']();});}),this['_taskSubscriptions']['clear']();if(this['useSharedWorker']&&this['port'])try{this['port']['postMessage']({'action':'disconnect'});}catch(_0x1c13e4){}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 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(
|
|
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(_0x39634f){eventSource&¤tUserId!==_0x39634f&&(eventSource['close'](),eventSource=null);if(eventSource&&eventSource['readyState']!==EventSource['CLOSED'])return;currentUserId=_0x39634f;const _0x1bbbfe=_0x39634f&&_0x39634f!=='me'?'?userId='+_0x39634f:'';try{eventSource=new EventSource('/tasks/updates'+_0x1bbbfe),eventSource['addEventListener']('snapshot',_0x4d8056=>{broadcast({'type':'snapshot','data':_0x4d8056['data']}),reconnectAttempts=0x0;}),eventSource['addEventListener']('activity',_0x21f3f9=>{broadcast({'type':'activity','data':_0x21f3f9['data']});}),eventSource['addEventListener']('status',_0x3e5a75=>{broadcast({'type':'status','data':_0x3e5a75['data']});}),eventSource['addEventListener']('new-task',_0x18dd51=>{broadcast({'type':'new-task','data':_0x18dd51['data']});}),eventSource['addEventListener']('queue-position',_0x59f898=>{broadcast({'type':'queue-position','data':_0x59f898['data']});}),eventSource['addEventListener']('open',()=>{broadcast({'type':'connected'}),reconnectAttempts=0x0;}),eventSource['addEventListener']('error',_0x551933=>{console['error']('[SSE\x20Worker]\x20Connection\x20error:',_0x551933),broadcast({'type':'error','error':'Connection\x20error'}),eventSource&&(eventSource['close'](),eventSource=null),scheduleReconnect();});}catch(_0x5a3678){console['error']('[SSE\x20Worker]\x20Failed\x20to\x20create\x20EventSource:',_0x5a3678),broadcast({'type':'error','error':_0x5a3678['message']}),scheduleReconnect();}}function scheduleReconnect(){reconnectTimeout&&clearTimeout(reconnectTimeout);if(ports['size']===0x0)return;const _0x30f744=Math['min'](0x3e8*Math['pow'](0x2,reconnectAttempts),MAX_RECONNECT_DELAY);reconnectAttempts++,console['log']('[SSE\x20Worker]\x20Scheduling\x20reconnect\x20in\x20'+_0x30f744+'ms\x20(attempt\x20'+reconnectAttempts+')'),reconnectTimeout=setTimeout(()=>{ports['size']>0x0&&connect(currentUserId);},_0x30f744);}function broadcast(_0x41d7ba){const _0x553412=[];ports['forEach'](_0x1f5ba4=>{try{_0x1f5ba4['postMessage'](_0x41d7ba);}catch(_0x256053){console['warn']('[SSE\x20Worker]\x20Failed\x20to\x20send\x20to\x20port,\x20removing:',_0x256053),_0x553412['push'](_0x1f5ba4);}}),_0x553412['length']>0x0&&cleanUpDeadPorts(_0x553412),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(_0x1a2b52,_0x5607c4){let _0x559aa3=taskStreams['get'](_0x5607c4);!_0x559aa3&&(_0x559aa3={'eventSource':null,'reconnectTimeout':null,'reconnectAttempts':0x0,'subscribedPorts':new Set()},taskStreams['set'](_0x5607c4,_0x559aa3));_0x559aa3['subscribedPorts']['add'](_0x1a2b52);if(!_0x559aa3['eventSource']||_0x559aa3['eventSource']['readyState']===EventSource['CLOSED'])connectTaskStream(_0x5607c4);else{if(_0x559aa3['eventSource']['readyState']===EventSource['OPEN'])try{_0x1a2b52['postMessage']({'type':'task:connected','taskId':_0x5607c4});}catch(_0x2056fd){}}}function unsubscribeTask(_0x4f1748,_0xa9fc1e){const _0x1d3084=taskStreams['get'](_0xa9fc1e);if(!_0x1d3084)return;_0x1d3084['subscribedPorts']['delete'](_0x4f1748),_0x1d3084['subscribedPorts']['size']===0x0&&deferredCloseTaskStream(_0xa9fc1e);}function connectTaskStream(_0x4315d0){const _0x210b88=taskStreams['get'](_0x4315d0);if(!_0x210b88)return;_0x210b88['eventSource']&&(_0x210b88['eventSource']['close'](),_0x210b88['eventSource']=null);try{_0x210b88['eventSource']=new EventSource('/tasks/'+_0x4315d0+'/stream');for(const _0x3cb4c3 of TASK_STREAM_EVENTS){_0x210b88['eventSource']['addEventListener'](_0x3cb4c3,_0x37157c=>{broadcastToTask(_0x4315d0,'task:'+_0x3cb4c3,_0x37157c['data']),_0x210b88['reconnectAttempts']=0x0;});}_0x210b88['eventSource']['addEventListener']('open',()=>{broadcastToTask(_0x4315d0,'task:connected','{}'),_0x210b88['reconnectAttempts']=0x0;}),_0x210b88['eventSource']['addEventListener']('error',()=>{broadcastToTask(_0x4315d0,'task:error',JSON['stringify']({'error':'Connection\x20error'})),_0x210b88['eventSource']&&(_0x210b88['eventSource']['close'](),_0x210b88['eventSource']=null),scheduleTaskReconnect(_0x4315d0);});}catch(_0x26ac32){console['error']('[SSE\x20Worker]\x20Failed\x20to\x20create\x20task\x20EventSource\x20for\x20'+_0x4315d0+':',_0x26ac32),broadcastToTask(_0x4315d0,'task:error',JSON['stringify']({'error':_0x26ac32['message']})),scheduleTaskReconnect(_0x4315d0);}}function broadcastToTask(_0x4bb2fe,_0x1f065a,_0x53e9cc){const _0x1bf66e=taskStreams['get'](_0x4bb2fe);if(!_0x1bf66e)return;const _0x338eb0=[];_0x1bf66e['subscribedPorts']['forEach'](_0x163878=>{try{_0x163878['postMessage']({'type':_0x1f065a,'taskId':_0x4bb2fe,'data':_0x53e9cc});}catch(_0x49bc49){_0x338eb0['push'](_0x163878);}}),_0x338eb0['length']>0x0&&(_0x338eb0['forEach'](_0xa3471e=>_0x1bf66e['subscribedPorts']['delete'](_0xa3471e)),cleanUpDeadPorts(_0x338eb0),_0x1bf66e['subscribedPorts']['size']===0x0&&closeTaskStream(_0x4bb2fe));}function closeTaskStream(_0x5b6a54){const _0x17c778=taskStreams['get'](_0x5b6a54);if(!_0x17c778)return;_0x17c778['eventSource']&&_0x17c778['eventSource']['close'](),_0x17c778['reconnectTimeout']&&clearTimeout(_0x17c778['reconnectTimeout']),taskStreams['delete'](_0x5b6a54);}function deferredCloseTaskStream(_0x40ac79){setTimeout(()=>{const _0x514b8f=taskStreams['get'](_0x40ac79);_0x514b8f&&_0x514b8f['subscribedPorts']['size']===0x0&&closeTaskStream(_0x40ac79);},0x0);}function scheduleTaskReconnect(_0x11447c){const _0x159138=taskStreams['get'](_0x11447c);if(!_0x159138||_0x159138['subscribedPorts']['size']===0x0)return;_0x159138['reconnectTimeout']&&clearTimeout(_0x159138['reconnectTimeout']);const _0x2c89f2=Math['min'](0x3e8*Math['pow'](0x2,_0x159138['reconnectAttempts']),MAX_RECONNECT_DELAY);_0x159138['reconnectAttempts']++,console['log']('[SSE\x20Worker]\x20Scheduling\x20task\x20stream\x20reconnect\x20for\x20'+_0x11447c+'\x20in\x20'+_0x2c89f2+'ms'),_0x159138['reconnectTimeout']=setTimeout(()=>{_0x159138['subscribedPorts']['size']>0x0&&connectTaskStream(_0x11447c);},_0x2c89f2);}function cleanUpDeadPorts(_0x10f119){for(const _0x2e3f82 of _0x10f119){ports['delete'](_0x2e3f82),taskStreams['forEach']((_0x56cb8c,_0x3e0744)=>{_0x56cb8c['subscribedPorts']['delete'](_0x2e3f82),_0x56cb8c['subscribedPorts']['size']===0x0&&closeTaskStream(_0x3e0744);});}}function removePortFromAllTasks(_0x582cbc){taskStreams['forEach']((_0x149f1d,_0x2bacaf)=>{_0x149f1d['subscribedPorts']['has'](_0x582cbc)&&(_0x149f1d['subscribedPorts']['delete'](_0x582cbc),_0x149f1d['subscribedPorts']['size']===0x0&&closeTaskStream(_0x2bacaf));});}self['onconnect']=function(_0x552e3e){const _0x13ed8e=_0x552e3e['ports'][0x0];ports['add'](_0x13ed8e),console['log']('[SSE\x20Worker]\x20New\x20port\x20connected.\x20Total\x20ports:\x20'+ports['size']),_0x13ed8e['onmessage']=function(_0xdc063b){const {action:_0x4f9347,userId:_0x57392c,taskId:_0x486d78}=_0xdc063b['data'];switch(_0x4f9347){case'connect':connect(_0x57392c);eventSource&&eventSource['readyState']===EventSource['OPEN']&&_0x13ed8e['postMessage']({'type':'connected'});break;case'disconnect':ports['delete'](_0x13ed8e),removePortFromAllTasks(_0x13ed8e),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':_0x57392c!==currentUserId&&connect(_0x57392c);break;case'subscribeTask':subscribeTask(_0x13ed8e,_0x486d78);break;case'unsubscribeTask':unsubscribeTask(_0x13ed8e,_0x486d78);break;default:console['warn']('[SSE\x20Worker]\x20Unknown\x20action:',_0x4f9347);}},_0x13ed8e['onmessageerror']=function(_0x2612d9){console['error']('[SSE\x20Worker]\x20Port\x20message\x20error:',_0x2612d9),ports['delete'](_0x13ed8e),removePortFromAllTasks(_0x13ed8e);},_0x13ed8e['start']();};
|
|
@@ -21263,6 +21263,14 @@ body.file-browser-open .file-browser-side-trigger {
|
|
|
21263
21263
|
flex-shrink: 0;
|
|
21264
21264
|
}
|
|
21265
21265
|
|
|
21266
|
+
.file-browser-new-folder-btn {
|
|
21267
|
+
flex-shrink: 0;
|
|
21268
|
+
}
|
|
21269
|
+
|
|
21270
|
+
.file-browser-header-icon-btn {
|
|
21271
|
+
flex-shrink: 0;
|
|
21272
|
+
}
|
|
21273
|
+
|
|
21266
21274
|
.file-browser-breadcrumb {
|
|
21267
21275
|
padding: 8px 16px;
|
|
21268
21276
|
font-size: 12px;
|
|
@@ -21327,6 +21335,11 @@ body.file-browser-open .file-browser-side-trigger {
|
|
|
21327
21335
|
font-size: 13px;
|
|
21328
21336
|
}
|
|
21329
21337
|
|
|
21338
|
+
.file-browser-row {
|
|
21339
|
+
display: flex;
|
|
21340
|
+
align-items: center;
|
|
21341
|
+
}
|
|
21342
|
+
|
|
21330
21343
|
.file-browser-entry {
|
|
21331
21344
|
display: flex;
|
|
21332
21345
|
align-items: center;
|
|
@@ -21337,10 +21350,11 @@ body.file-browser-open .file-browser-side-trigger {
|
|
|
21337
21350
|
cursor: pointer;
|
|
21338
21351
|
border: none;
|
|
21339
21352
|
background: none;
|
|
21340
|
-
|
|
21353
|
+
flex: 1;
|
|
21341
21354
|
text-align: left;
|
|
21342
21355
|
font-family: inherit;
|
|
21343
21356
|
transition: background 0.1s ease;
|
|
21357
|
+
min-width: 0;
|
|
21344
21358
|
}
|
|
21345
21359
|
|
|
21346
21360
|
.file-browser-entry:hover {
|
|
@@ -21376,6 +21390,34 @@ body.file-browser-open .file-browser-side-trigger {
|
|
|
21376
21390
|
flex-shrink: 0;
|
|
21377
21391
|
}
|
|
21378
21392
|
|
|
21393
|
+
.file-browser-entry-actions {
|
|
21394
|
+
display: flex;
|
|
21395
|
+
align-items: center;
|
|
21396
|
+
gap: 4px;
|
|
21397
|
+
padding-right: 10px;
|
|
21398
|
+
opacity: 0;
|
|
21399
|
+
pointer-events: none;
|
|
21400
|
+
transition: opacity 0.12s ease;
|
|
21401
|
+
}
|
|
21402
|
+
|
|
21403
|
+
.file-browser-row:hover .file-browser-entry-actions,
|
|
21404
|
+
.file-browser-entry-actions:focus-within {
|
|
21405
|
+
opacity: 1;
|
|
21406
|
+
pointer-events: auto;
|
|
21407
|
+
}
|
|
21408
|
+
|
|
21409
|
+
.file-browser-entry-action {
|
|
21410
|
+
color: var(--color-text-muted);
|
|
21411
|
+
}
|
|
21412
|
+
|
|
21413
|
+
.file-browser-entry-action:hover {
|
|
21414
|
+
color: var(--color-text);
|
|
21415
|
+
}
|
|
21416
|
+
|
|
21417
|
+
.file-browser-entry-action.file-browser-entry-delete:hover {
|
|
21418
|
+
color: var(--color-danger);
|
|
21419
|
+
}
|
|
21420
|
+
|
|
21379
21421
|
/* File viewer pane */
|
|
21380
21422
|
.file-browser-viewer-pane {
|
|
21381
21423
|
border-top: 1px solid var(--color-border);
|
|
@@ -21660,9 +21702,18 @@ body.file-browser-open .file-browser-side-trigger {
|
|
|
21660
21702
|
|
|
21661
21703
|
/* Mobile responsive */
|
|
21662
21704
|
@media (max-width: 768px) {
|
|
21705
|
+
.file-browser-panel-header {
|
|
21706
|
+
flex-wrap: wrap;
|
|
21707
|
+
}
|
|
21708
|
+
|
|
21663
21709
|
.file-browser-panel {
|
|
21664
21710
|
width: 100vw;
|
|
21665
21711
|
max-width: 100vw;
|
|
21666
21712
|
}
|
|
21667
21713
|
|
|
21714
|
+
.file-browser-entry-actions {
|
|
21715
|
+
opacity: 1;
|
|
21716
|
+
pointer-events: auto;
|
|
21717
|
+
}
|
|
21718
|
+
|
|
21668
21719
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export function toDisplayAgentName(
|
|
1
|
+
export function toDisplayAgentName(_0x26517f,{fallback:fallback='Unknown'}={}){const _0x1b8813=String(_0x26517f||'')['trim']()['toLowerCase']();if(!_0x1b8813)return fallback;return _0x1b8813['charAt'](0x0)['toUpperCase']()+_0x1b8813['slice'](0x1);}export function escapeRegExp(_0x13d865){return String(_0x13d865)['replace'](/[.*+?^${}()|[\]\\]/g,'\x5c$&');}export function compareJudgmentsForAliasOrder(_0x1a4e9d,_0x222edc){const _0x596048=String(_0x1a4e9d?.['createdAt']||''),_0x18a26a=String(_0x222edc?.['createdAt']||'');if(_0x596048!==_0x18a26a)return _0x596048['localeCompare'](_0x18a26a);return String(_0x1a4e9d?.['taskId']||'')['localeCompare'](String(_0x222edc?.['taskId']||''));}export function parseJudgeAliasNumber(_0x5517c1,_0x1ac19d){const _0x2858bd=typeof _0x5517c1==='string'?_0x5517c1['trim']():'',_0x3e84d5=toDisplayAgentName(_0x1ac19d,{'fallback':''});if(!_0x2858bd||!_0x3e84d5)return null;const _0x485b3f=_0x2858bd['toLowerCase'](),_0x1d3b62=_0x3e84d5['toLowerCase']();if(_0x485b3f===_0x1d3b62||_0x485b3f===_0x1d3b62+'\x20judge')return 0x1;const _0xe11962=[new RegExp('^'+escapeRegExp(_0x3e84d5)+'\x5cs+(\x5cd+)$','i'),new RegExp('^'+escapeRegExp(_0x3e84d5)+'\x5cs+Judge\x5cs+(\x5cd+)$','i')];for(const _0x2f115d of _0xe11962){const _0x5a16f9=_0x2858bd['match'](_0x2f115d);if(_0x5a16f9){const _0x5b24f5=Number(_0x5a16f9[0x1]);if(Number['isInteger'](_0x5b24f5)&&_0x5b24f5>0x0)return _0x5b24f5;}}return null;}export function formatJudgeDisplayName({alias:_0x4ba246,agent:_0x5c8dc5,number:number=null,hasDuplicates:hasDuplicates=![]}={}){const _0x425b65=toDisplayAgentName(_0x5c8dc5,{'fallback':'Judge'}),_0x2578ad=typeof _0x4ba246==='string'?_0x4ba246['trim']():'';if(Number['isInteger'](number)&&number>0x0)return _0x425b65+'\x20Judge\x20'+number;if(_0x2578ad)return/\bjudge\b/i['test'](_0x2578ad)?_0x2578ad:_0x2578ad+'\x20Judge';if(hasDuplicates)return _0x425b65+'\x20Judge';return _0x425b65==='Judge'?_0x425b65:_0x425b65+'\x20Judge';}export function buildJudgmentDisplayNameMap(_0x267f94=[]){const _0x336728=Array['isArray'](_0x267f94)?_0x267f94['filter'](Boolean):[],_0x510426=new Map();_0x336728['forEach'](_0x28ef71=>{const _0x2af5ac=_0x28ef71?.['judgeAgent']||_0x28ef71?.['envVars']?.['CODER_AGENT']||'unknown',_0x308957=String(_0x2af5ac||'')['trim']()['toLowerCase']()||'unknown';!_0x510426['has'](_0x308957)&&_0x510426['set'](_0x308957,[]),_0x510426['get'](_0x308957)['push'](_0x28ef71);});const _0x4ba65c=new Map();return _0x510426['forEach'](_0x26edcf=>{const _0x5a7c96=[..._0x26edcf]['sort'](compareJudgmentsForAliasOrder),_0x241250=_0x5a7c96['length']>0x1,_0x332a2b=new Set(),_0xea625d=new Map();_0x241250&&_0x5a7c96['forEach'](_0x5d0026=>{const _0x4e909a=parseJudgeAliasNumber(_0x5d0026?.['judgeAlias'],_0x5d0026?.['judgeAgent']);if(!Number['isInteger'](_0x4e909a)||_0x4e909a<=0x0||_0x332a2b['has'](_0x4e909a))return;_0xea625d['set'](_0x5d0026['taskId'],_0x4e909a),_0x332a2b['add'](_0x4e909a);});let _0x35abd8=0x1;const _0x35ac0a=()=>{while(_0x332a2b['has'](_0x35abd8)){_0x35abd8+=0x1;}return _0x332a2b['add'](_0x35abd8),_0x35abd8;};_0x5a7c96['forEach'](_0x386289=>{let _0x1ab669=_0xea625d['get'](_0x386289['taskId'])||null;_0x241250&&_0x1ab669===null&&!String(_0x386289?.['judgeAlias']||'')['trim']()&&(_0x1ab669=_0x35ac0a()),_0x4ba65c['set'](_0x386289['taskId'],formatJudgeDisplayName({'alias':_0x386289?.['judgeAlias']||null,'agent':_0x386289?.['judgeAgent']||_0x386289?.['envVars']?.['CODER_AGENT']||'unknown','number':_0x1ab669,'hasDuplicates':_0x241250}));});}),_0x4ba65c;}export function buildTaskNavigationHref(_0x36f31f,{currentUrl:_0x20ae69,groupedTaskIds:groupedTaskIds=[],groupId:groupId=null}={}){const _0x3784f3=new URL(_0x20ae69),_0x93917d=String(_0x36f31f||'')['trim'](),_0x5cc058=String(groupId||'')['trim'](),_0xa1f295=Array['isArray'](groupedTaskIds)?groupedTaskIds['map'](_0x47cf82=>String(_0x47cf82||'')['trim']())['filter'](Boolean):[],_0x831b35=Boolean(_0x5cc058)||_0xa1f295['length']>0x1;if(!_0x831b35)return _0x93917d&&_0x3784f3['searchParams']['set']('id',_0x93917d),_0x3784f3['searchParams']['delete']('groupId'),_0x3784f3['toString']();const _0xa54c6e=_0xa1f295['includes'](_0x93917d)?_0xa1f295:[..._0xa1f295,_0x93917d]['filter'](Boolean);if(_0xa54c6e['length']>0x0)_0x3784f3['searchParams']['set']('id',_0xa54c6e['join'](','));else _0x93917d&&_0x3784f3['searchParams']['set']('id',_0x93917d);return _0x5cc058?_0x3784f3['searchParams']['set']('groupId',_0x5cc058):_0x3784f3['searchParams']['delete']('groupId'),_0x3784f3['toString']();}
|
|
@@ -1054,8 +1054,17 @@
|
|
|
1054
1054
|
</svg>
|
|
1055
1055
|
<span class="file-browser-title">File Browser</span>
|
|
1056
1056
|
<div style="flex: 1;"></div>
|
|
1057
|
-
<button class="btn-
|
|
1058
|
-
|
|
1057
|
+
<button class="btn-icon file-browser-header-icon-btn file-browser-new-folder-btn" id="file-browser-new-folder-btn" title="Create a folder in the current directory" aria-label="Create a folder in the current directory" type="button">
|
|
1058
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
1059
|
+
<path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path>
|
|
1060
|
+
<path d="M12 11v6"></path>
|
|
1061
|
+
<path d="M9 14h6"></path>
|
|
1062
|
+
</svg>
|
|
1063
|
+
</button>
|
|
1064
|
+
<button class="btn-icon file-browser-header-icon-btn file-browser-upload-btn" id="file-browser-upload-btn" title="Attach files to the current folder" aria-label="Attach files to the current folder" type="button">
|
|
1065
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
1066
|
+
<path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"></path>
|
|
1067
|
+
</svg>
|
|
1059
1068
|
</button>
|
|
1060
1069
|
<input type="file" id="file-browser-upload-input" multiple accept="*/*" hidden aria-label="Attach files to the current folder">
|
|
1061
1070
|
<button class="btn-icon file-browser-close" id="file-browser-close" title="Close">
|
|
@@ -1090,6 +1099,12 @@
|
|
|
1090
1099
|
<path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"></path>
|
|
1091
1100
|
</svg>
|
|
1092
1101
|
</button>
|
|
1102
|
+
<button class="btn-ghost btn-small file-browser-rename-btn" id="file-browser-rename-btn" title="Rename file" style="display: none;">
|
|
1103
|
+
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
1104
|
+
<path d="M20.59 13.41 11 3H4v7l9.59 10.59a2 2 0 0 0 2.82 0l4.18-4.18a2 2 0 0 0 0-2.82z"></path>
|
|
1105
|
+
<path d="M7 7h.01"></path>
|
|
1106
|
+
</svg>
|
|
1107
|
+
</button>
|
|
1093
1108
|
<button class="btn-ghost btn-small file-browser-delete-btn" id="file-browser-delete-btn" title="Delete file" style="display: none;">
|
|
1094
1109
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
1095
1110
|
<polyline points="3 6 5 6 21 6"></polyline>
|
|
@@ -1625,13 +1640,13 @@
|
|
|
1625
1640
|
<div class="modal-overlay"></div>
|
|
1626
1641
|
<div class="modal-content">
|
|
1627
1642
|
<div class="modal-header">
|
|
1628
|
-
<h2>Delete File</h2>
|
|
1643
|
+
<h2 id="delete-file-modal-title">Delete File</h2>
|
|
1629
1644
|
<button class="modal-close" id="close-delete-file-modal">×</button>
|
|
1630
1645
|
</div>
|
|
1631
1646
|
<div class="modal-body">
|
|
1632
1647
|
<div class="modal-section">
|
|
1633
|
-
<p>Are you sure you want to delete <strong id="delete-file-name"></strong>?</p>
|
|
1634
|
-
<p class="field-hint" style="color: var(--color-danger); margin-top: 8px;">This will permanently remove the file from the container.</p>
|
|
1648
|
+
<p id="delete-file-message">Are you sure you want to delete <strong id="delete-file-name"></strong>?</p>
|
|
1649
|
+
<p class="field-hint" id="delete-file-hint" style="color: var(--color-danger); margin-top: 8px;">This will permanently remove the file from the container.</p>
|
|
1635
1650
|
</div>
|
|
1636
1651
|
</div>
|
|
1637
1652
|
<div class="modal-footer">
|
|
@@ -1641,6 +1656,29 @@
|
|
|
1641
1656
|
</div>
|
|
1642
1657
|
</div>
|
|
1643
1658
|
|
|
1659
|
+
<div id="file-browser-name-modal" class="modal" hidden>
|
|
1660
|
+
<div class="modal-overlay"></div>
|
|
1661
|
+
<div class="modal-content">
|
|
1662
|
+
<div class="modal-header">
|
|
1663
|
+
<h2 id="file-browser-name-modal-title">Create Folder</h2>
|
|
1664
|
+
<button class="modal-close" id="close-file-browser-name-modal">×</button>
|
|
1665
|
+
</div>
|
|
1666
|
+
<div class="modal-body">
|
|
1667
|
+
<div class="modal-section">
|
|
1668
|
+
<p id="file-browser-name-modal-description">Enter a name.</p>
|
|
1669
|
+
<label for="file-browser-name-input" id="file-browser-name-modal-label">Name</label>
|
|
1670
|
+
<input type="text" id="file-browser-name-input" class="new-branch-input" autocomplete="off" spellcheck="false">
|
|
1671
|
+
<p class="field-hint" id="file-browser-name-modal-hint" style="margin-top: 8px;">Names cannot include "/" and must stay inside the current safe root.</p>
|
|
1672
|
+
<div class="modal-error" id="file-browser-name-modal-error" hidden></div>
|
|
1673
|
+
</div>
|
|
1674
|
+
</div>
|
|
1675
|
+
<div class="modal-footer">
|
|
1676
|
+
<button class="btn-ghost" id="cancel-file-browser-name-modal">Cancel</button>
|
|
1677
|
+
<button class="btn-primary" id="confirm-file-browser-name-modal">Create</button>
|
|
1678
|
+
</div>
|
|
1679
|
+
</div>
|
|
1680
|
+
</div>
|
|
1681
|
+
|
|
1644
1682
|
<div id="discard-file-modal" class="modal" hidden>
|
|
1645
1683
|
<div class="modal-overlay"></div>
|
|
1646
1684
|
<div class="modal-content">
|