@dssp/supervision 1.0.25 → 1.0.27

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.
@@ -36,8 +36,7 @@ const SET_FILES = ['video.mov', 'poses.jsonl', 'meta.json'];
36
36
  server 파라미터로 업로드 주소까지 넘겨서 앱 설정을 따로 안 만져도 되게 한다.
37
37
  return 파라미터를 주면 앱이 업로드를 마친 뒤 이 화면으로 돌아온다(?set_id=... 가 붙어서 온다). */
38
38
  function appCaptureLink(tech) {
39
- return (`gamri://${tech}?server=${encodeURIComponent(MEASURE_BASE_URL)}` +
40
- `&return=${encodeURIComponent(location.href)}`);
39
+ return `gamri://${tech}?server=${encodeURIComponent(MEASURE_BASE_URL)}` + `&return=${encodeURIComponent(location.href)}`;
41
40
  }
42
41
  /* 한 번의 /inspect 에 보낼 검사항목 수. 엔진이 8개까지만 병렬 처리하고, 그 앞단
43
42
  Cloudflare 가 100초에서 끊기 때문에(524) 항목이 많으면 나눠 보내야 한다. */
@@ -857,11 +856,7 @@ let BuildingInspectionAiMeasurement = class BuildingInspectionAiMeasurement exte
857
856
  // raw.detail: 러너가 요청을 거부한 사유(예: 파일/필드 크기 초과)
858
857
  // raw.stderr: 모듈이 죽은 경우의 파이썬 트레이스백 — 원인이 여기 있다
859
858
  const stderr = ((raw === null || raw === void 0 ? void 0 : raw.stderr) || '').trim().split('\n').slice(-3).join(' ');
860
- throw new Error((data === null || data === void 0 ? void 0 : data.error) ||
861
- (raw === null || raw === void 0 ? void 0 : raw.error) ||
862
- (raw === null || raw === void 0 ? void 0 : raw.detail) ||
863
- stderr ||
864
- `AI 엔진 호출에 실패했습니다. (HTTP ${response.status})`);
859
+ throw new Error((data === null || data === void 0 ? void 0 : data.error) || (raw === null || raw === void 0 ? void 0 : raw.error) || (raw === null || raw === void 0 ? void 0 : raw.detail) || stderr || `AI 엔진 호출에 실패했습니다. (HTTP ${response.status})`);
865
860
  }
866
861
  return data.result;
867
862
  }
@@ -1492,13 +1487,6 @@ let BuildingInspectionAiMeasurement = class BuildingInspectionAiMeasurement exte
1492
1487
  result: slimResult
1493
1488
  });
1494
1489
  const judged = Object.assign(Object.assign(Object.assign({}, item), result.item), (image_data ? { image_data } : {}));
1495
- // 측정 서버가 retake 를 내면 재촬영이다 — 측정 길이가 부재 치수보다 길게 나온 경우로,
1496
- // 시공 불량이 아니라 측정 오류다. 검측 엔진은 이 값을 모르고 '부적합'으로 판정하므로
1497
- // (engine.py 는 없어진 unreliable 을 본다) 여기서 되돌린다. 서버 판정을 그대로 쓰는 것.
1498
- if (this.measureResult.retake) {
1499
- judged.verdict = 'hold';
1500
- judged.reason = this.measureResult.summary || '측정 길이가 부재 치수보다 길게 나왔습니다. 다시 촬영해 주세요.';
1501
- }
1502
1490
  this._mergeItems([judged]);
1503
1491
  // 확정 즉시 체크리스트에 기록한다. 「검사 등록」까지 미루면 그 사이에 화면을 벗어나거나
1504
1492
  // 재판정이 일어났을 때 측정 판정만 유실된다 (VLM 항목은 inspect 결과에 남아 있어 티가 안 남).
@@ -1507,9 +1495,7 @@ let BuildingInspectionAiMeasurement = class BuildingInspectionAiMeasurement exte
1507
1495
  this.panel = 'none';
1508
1496
  this.selectedItem = null;
1509
1497
  if (judged.verdict === 'hold') {
1510
- // 재촬영 사유는 측정 서버가 낸 문장을 그대로 쓴다 — 플랫폼이 촬영 품질을 근거로
1511
- // 재촬영을 권하지 않는다(2026-09-12-2 전달본 정책).
1512
- notify({ message: judged.reason || '재촬영이 필요합니다.', level: 'warn' });
1498
+ notify({ message: '측정 품질이 기준에 못 미쳐 보류되었습니다. 재촬영을 권장합니다.', level: 'warn' });
1513
1499
  }
1514
1500
  else {
1515
1501
  notify({ message: `판정이 확정되었습니다: ${this._verdictLabel(judged)}` });