coxpit 5.26.0 → 5.26.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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/cockpit.ts +8 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "coxpit",
3
- "version": "5.26.0",
3
+ "version": "5.26.1",
4
4
  "description": "Self-hosted cockpit for running a fleet of AI coding agents across your own machines — parallel worktree runs, live board, compare & merge, web terminal, design capture.",
5
5
  "type": "module",
6
6
  "license": "SEE LICENSE IN LICENSE.md",
package/src/cockpit.ts CHANGED
@@ -1361,8 +1361,11 @@ export const COCKPIT_HTML = /* html */ `<!doctype html>
1361
1361
  function openSession(){ $('pickModal').classList.add('on'); $('pickName').value=''; browseTo(''); }
1362
1362
  function closePicker(){ $('pickModal').classList.remove('on'); }
1363
1363
  async function browseTo(p){
1364
+ $('pickList').innerHTML = '<div class="pick-row" style="cursor:default;color:var(--faint)">불러오는 중…</div>';
1364
1365
  try{
1365
- var d = await (await fetch('/api/browse'+(p?('?path='+encodeURIComponent(p)):''))).json();
1366
+ var res = await fetch('/api/browse'+(p?('?path='+encodeURIComponent(p)):''));
1367
+ if(!res.ok){ $('pickList').innerHTML = '<div class="pick-row" style="color:var(--failed)">'+(res.status===401?'인증이 만료됐어요 — 새로고침 후 다시 로그인':'폴더를 읽을 수 없습니다 (HTTP '+res.status+')')+'</div>'; return; }
1368
+ var d = await res.json();
1366
1369
  pickPathCur = d.path; $('pickPath').textContent = d.path;
1367
1370
  var html = '';
1368
1371
  if (d.parent && d.parent!==d.path) html += '<div class="pick-row up" data-go="'+esc(d.parent)+'"><span class="ic">↑</span><span>..</span></div>';
@@ -1402,8 +1405,11 @@ export const COCKPIT_HTML = /* html */ `<!doctype html>
1402
1405
  function closeFilePicker(){ $('fpickModal').classList.remove('on'); }
1403
1406
  function fpIcon(kind){ return kind==='md'?'M':kind==='html'?'H':kind==='pdf'?'P':kind==='image'?'I':kind==='binary'?'·':'T'; }
1404
1407
  async function fpTo(p){
1408
+ $('fpList').innerHTML = '<div class="pick-row" style="cursor:default;color:var(--faint)">불러오는 중…</div>';
1405
1409
  try{
1406
- var d = await (await fetch('/api/fs/list'+(p?('?path='+encodeURIComponent(p)):''))).json();
1410
+ var res = await fetch('/api/fs/list'+(p?('?path='+encodeURIComponent(p)):''));
1411
+ if(!res.ok){ $('fpList').innerHTML = '<div class="pick-row" style="color:var(--failed)">'+(res.status===401?'인증이 만료됐어요 — 새로고침':'읽을 수 없습니다 (HTTP '+res.status+')')+'</div>'; return; }
1412
+ var d = await res.json();
1407
1413
  fpDirCur = d.path; $('fpPath').textContent = d.path; if($('fpHint')) $('fpHint').textContent='폴더=이동 · 파일=뷰어로 열기';
1408
1414
  var html='';
1409
1415
  if (d.parent && d.parent!==d.path) html += '<div class="pick-row up" data-dir="'+esc(d.parent)+'"><span class="ic">↑</span><span>..</span></div>';