sns-auto-builder 1.1.1 → 1.1.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sns-auto-builder",
3
- "version": "1.1.1",
3
+ "version": "1.1.2",
4
4
  "description": "인스타 카드뉴스 자동 제작 빌더. Claude Code + ChatGPT 웹을 그대로 써서 API 키 없이 돌아갑니다.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -332,7 +332,10 @@ const readPageError = (page) => page.evaluate((needles) => {
332
332
  // 저장돼, 3장만 만들어졌는데 4장이 나온 것처럼 끝난 적이 있다.
333
333
  async function waitForNewImage(page, before, timeoutMs, used = new Set()) {
334
334
  const deadline = Date.now() + timeoutMs;
335
- let fresh = [], lastChange = 0, sawOnlyUsed = false, idleSince = 0;
335
+ // sawStreaming: 턴이 **실제로 시작된 본** 뒤에만 "끝났다" 판정을 믿는다.
336
+ // 전송 직후엔 stop 버튼이 아직 안 떠서, 그걸 끝난 걸로 보면 이미지 생성(25~40초)
337
+ // 도중에 20초 만에 실패 처리해버린다.
338
+ let fresh = [], lastChange = 0, sawOnlyUsed = false, idleSince = 0, sawStreaming = false;
336
339
  while (Date.now() < deadline) {
337
340
  const all = (await fileIds(page)).filter((id) => !before.includes(id));
338
341
  const now = all.filter((id) => !used.has(id));
@@ -344,12 +347,17 @@ async function waitForNewImage(page, before, timeoutMs, used = new Set()) {
344
347
  }
345
348
  if (now.length !== fresh.length) { fresh = now; lastChange = Date.now(); }
346
349
 
347
- // 턴이 끝났는지를 **먼저** 본다. 12초 settle 은 stop 버튼을 못 읽을 때의 보조 장치다.
348
350
  const streaming = await isStreaming(page);
349
- if (streaming) idleSince = 0;
350
- else if (!idleSince) idleSince = Date.now();
351
-
352
- if (fresh.length && (idleSince || Date.now() - lastChange >= SETTLE_MS)) {
351
+ if (streaming) { sawStreaming = true; idleSince = 0; }
352
+ else if (sawStreaming && !idleSince) idleSince = Date.now();
353
+
354
+ // 반환 조건은 **개수가 SETTLE_MS 동안 변한 것** 하나뿐이다.
355
+ //
356
+ // stop 버튼이 사라졌다고 바로 집으면 안 된다. ChatGPT 는 최종 이미지 전에 미리보기를
357
+ // 먼저 띄우는데, 그걸 최종본으로 착각하면 뒤늦게 나온 진짜 최종본을 **다음 장이**
358
+ // 가져가 전체가 한 칸씩 밀린다 (4번 자리에 3번 그림이 들어간 적이 있다).
359
+ // 미리보기가 최종본으로 바뀌면 개수가 변하므로 타이머가 다시 돌아 안전하다.
360
+ if (fresh.length && Date.now() - lastChange >= SETTLE_MS) {
353
361
  if (fresh.length > 1) {
354
362
  console.warn(` (경고) 한 프롬프트에 ${fresh.length}장이 생성됨 — 첫 장만 사용합니다.`);
355
363
  }