@galda/cli 0.10.78 → 0.10.79

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/app/index.html +14 -8
  2. package/package.json +1 -1
package/app/index.html CHANGED
@@ -3595,6 +3595,12 @@ function reviewCardConfigFor(projectId){ return { ...DEFAULT_REVIEW_DEFINITION.r
3595
3595
  // goal's own request language, same as the planner/worker; ja/en pin the
3596
3596
  // project to one language regardless of what a given goal was typed in.
3597
3597
  function reviewLangFor(projectId){ const l = reviewDefinitionFor(projectId).language; return (l === 'en' || l === 'ja') ? l : 'auto'; }
3598
+ function retryCopy(projectId){
3599
+ const ja = reviewLangFor(projectId) === 'ja';
3600
+ return ja
3601
+ ? { infra: '検証基盤エラー', retry: '再検証', retrying: '再検証中…', failed: '再検証に失敗' }
3602
+ : { infra: 'Verification infrastructure error', retry: 'Retry verification', retrying: 'Retrying…', failed: 'Verification retry failed' };
3603
+ }
3598
3604
 
3599
3605
  function esc(s){ const d = document.createElement('div'); d.textContent = s ?? ''; return d.innerHTML; }
3600
3606
 
@@ -4636,7 +4642,7 @@ function renderTasks(){
4636
4642
  const rs = g.reviewSummary ?? {};
4637
4643
  const checkLine = (rs.check || g.plan?.[0] || g.text || '').replace(/\s+/g, ' ').slice(0, 58);
4638
4644
  return `<div class="task revrow" data-goal="${g.id}"><div class="ic fail">!</div><div class="tx"><div class="name">${esc(checkLine)} ${goalSourceBadge(g.source)}</div>
4639
- <div class="cond"><span class="blockreason">${esc(g.blocked?.reason ?? 'blocked')}</span> <button type="button" class="retrybtn" data-goalreverify="${g.id}">再検証</button> <button type="button" class="retrybtn skip" data-archivegoal="${g.id}" title="このゴールを片付ける(再作業なし)">Archive</button></div></div></div>`;
4645
+ <div class="cond"><span class="blockreason">${esc(g.blocked?.reason ?? 'blocked')}</span> <button type="button" class="retrybtn" data-goalreverify="${g.id}">${retryCopy(g.projectId).retry}</button> <button type="button" class="retrybtn skip" data-archivegoal="${g.id}" title="Archive without rework">Archive</button></div></div></div>`;
4640
4646
  }).join('');
4641
4647
  const attention = blockedGoals + list.filter((t) => ['failed', 'interrupted'].includes(t.status)).map((t) => row(t, { retry: 1 })).join('');
4642
4648
  const doing = grouped(list.filter((t) => t.status === 'running'), (t) => row(t));
@@ -4833,10 +4839,10 @@ function renderTasks(){
4833
4839
  }
4834
4840
  // Manager-verified gate: re-run tests + re-capture proof for a blocked goal.
4835
4841
  for (const b of $('tasklist').querySelectorAll('[data-goalreverify]')) {
4836
- b.onclick = async (e) => { e.stopPropagation(); b.disabled = true; b.textContent = '再検証中…';
4842
+ b.onclick = async (e) => { e.stopPropagation(); const copy = retryCopy(state.active); b.disabled = true; b.textContent = copy.retrying;
4837
4843
  let r; try { r = await fetch(withKey(`/api/goals/${b.dataset.goalreverify}/reverify`), { method: 'POST' }); }
4838
- catch { showErr('再検証に失敗'); return; }
4839
- qrefresh(r, '再検証に失敗'); };
4844
+ catch { showErr(copy.failed); return; }
4845
+ qrefresh(r, copy.failed); };
4840
4846
  }
4841
4847
  for (const b of $('tasklist').querySelectorAll('[data-qreply]')) {
4842
4848
  b.onclick = (e) => { e.stopPropagation();
@@ -5404,7 +5410,7 @@ function renderReviewChecklist(){
5404
5410
  : '';
5405
5411
  const infra = goal.verificationInfraError;
5406
5412
  const infraHtml = infra?.detail
5407
- ? `<div class="rvinfra"><span class="rvlbl">${esc(infra.title || '検証基盤エラー')}</span>${esc(infra.detail)} <button type="button" class="retrybtn" data-goalreverify="${goal.id}">再検証</button></div>`
5413
+ ? `<div class="rvinfra"><span class="rvlbl">${esc(infra.title || retryCopy(goal.projectId).infra)}</span>${esc(infra.detail)} <button type="button" class="retrybtn" data-goalreverify="${goal.id}">${retryCopy(goal.projectId).retry}</button></div>`
5408
5414
  : '';
5409
5415
  $('reviewSummary').innerHTML =
5410
5416
  vfyHtml
@@ -5477,10 +5483,10 @@ function renderReviewChecklist(){
5477
5483
  b.onclick = async (e) => {
5478
5484
  e.stopPropagation();
5479
5485
  b.disabled = true;
5480
- b.textContent = '再検証中…';
5486
+ b.textContent = retryCopy(goal.projectId).retrying;
5481
5487
  let r; try { r = await fetch(withKey(`/api/goals/${b.dataset.goalreverify}/reverify`), { method: 'POST' }); }
5482
- catch { showErr('再検証に失敗'); b.disabled = false; return; }
5483
- if (r.ok) await refresh(); else showErr('再検証に失敗');
5488
+ catch { showErr(retryCopy(goal.projectId).failed); b.disabled = false; return; }
5489
+ if (r.ok) await refresh(); else showErr(retryCopy(goal.projectId).failed);
5484
5490
  };
5485
5491
  }
5486
5492
  for (const b of $('reviewList').querySelectorAll('.reqsend')) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@galda/cli",
3
- "version": "0.10.78",
3
+ "version": "0.10.79",
4
4
  "type": "module",
5
5
  "description": "Galda - hand off work to Claude Code or Codex, get proof back. Runs on your existing subscription, no extra API cost.",
6
6
  "scripts": {