8000 feat: 링크 입력 실험에서 실제 조회 연결 by hmmhmmhm · Pull Request #335 · hmmhmmhm/daiso-mcp · GitHub
[go: up one dir, main page]

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions docs/superpowers/plans/2026-10-27-web-read-real-links.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# 문자 선택에서 실제 조회로 연결

목표는 가상 입력 성공을 실제 상품 조회 성공으로 확대하지 않고, 다음 실제 페이지까지 웹 도구가 이동 가능한지 확인하는 것입니다.

- 완료 화면에 현재 문자열을 URL 인코딩한 기존 운영 상품·매장 조회 링크만 추가합니다. 상품 응답은3개로 제한합니다.
- Worker의 외부 요청, 인증, 저장 범위는 변경하지 않습니다. 링크 선택 전에는 실제 조회가 수행되지 않음을 표시합니다.
- 실제 링크 생성 회귀를 먼저 실패시키고, 변경 후 기존 실험·타입·필수 검사와 독립 리뷰를 수행합니다.
- 배포 후 새 실행 또는 새 완료 주소에서 실제 상품 검색 링크를 클릭하고 상품 ID·이름을 확인합니다. 서버 도구 성공과 가상 데이터 성공을 구분합니다.
- 재고 조회는 상품·지역 선택과 추가 검증이 필요하며 이번 변경만으로 해결됐다고 보고하지 않습니다.

사전 근거: 링크만으로 `연필7` 및 `r9`를 만든 두 독립 실행에서 최종 requestId가 서버 로그와 일치했습니다. 전체 경과시간은 각각 약112초/81초였으나 Mac 실행·명령 지연이 함께 관측돼 웹 도구의 고정 지연으로 해석하지 않습니다.
2 changes: 2 additions & 0 deletions experiments/web-read-lab/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@

## 실행

입력 완료 화면의 실제 조회 링크는 별도 운영 서비스로 이동합니다. 실험 Worker 자체는 운영 API를 호출하지 않습니다. 사용자가 선택한 상품 검색은 최대3개 결과이며, 상품 검색 성공은 매장 재고 확인과 구분합니다. 이 경로의 실제 웹 도구 동작 여부도 서버 관측과 별도로 기록합니다.

1. 실험 목록을 연 뒤 **새 실험 시작** 링크를 한 번 따라 다음 실행으로 이동합니다. 웹 읽기에서는 URL을 다시 조립하지 말고 실제 링크 ID로 click합니다. 직접 open 실패도 별도 조건으로 기록합니다.
새 링크는 문서를 새로 생성할 때 고유합니다. 웹 읽기가 캐시된 목록을 재사용하면 링크도 재사용되므로 독립 실행을 보장하지 않습니다. 이전에 본 실행번호이면 재사용하지 말고, 새로 열린 목록의 다음 링크를 한 번 따라가세요. 관측 기록에서 실행번호와 실제 신규 도착 시각을 대조하고 섞인 실행은 독립 표본에서 제외합니다.

Expand Down
3 changes: 2 additions & 1 deletion experiments/web-read-lab/composer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ export function renderComposer(parts: string[], requestId: string): string | nul
if (!text.trim()) return null;
return (
intro +
`<pre>${JSON.stringify({ synthetic: true, query: text, requestId, generatedAt: new Date().toISOString() }, null, 2)}</pre>`
`<pre>${JSON.stringify({ synthetic: true, query: text, requestId, generatedAt: new Date().toISOString() }, null, 2)}</pre>` +
`<h3>입력한 검색어로 실제 조회하기</h3><p>아래 링크는 별도 운영 서비스로 이동합니다. 링크를 열기 전에는 실제 상품이나 매장을 조회한 것이 아닙니다. 상품 검색 성공은 매장 재고 보유를 뜻하지 않습니다.</p><ul><li><a href="https://mcp.aka.page/browse/daiso/products/${encodeURIComponent(text)}/pageSize/3">실제 다이소 상품 검색</a></li><li><a href="https://mcp.aka.page/browse/daiso/stores/${encodeURIComponent(text)}">실제 다이소 매장 검색</a></li></ul><p>${link('입력 수정', text)}</p>`
);
}
const choice = /^ko-(\d{1,2})(?:-(\d{1,2}))?$/.exec(stage);
Expand Down
4 changes: 4 additions & 0 deletions tests/scripts/web-read-lab.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ describe('독립 웹 읽기 실험', () => {
expect(body).toContain('연필7');
expect(body).toContain('synthetic');
expect(body).toContain('requestId');
expect(body).toContain(
'https://mcp.aka.page/browse/daiso/products/%EC%97%B0%ED%95%847/pageSize/3',
);
expect(body).toContain('https://mcp.aka.page/browse/daiso/stores/%EC%97%B0%ED%95%847');
const log = JSON.stringify(await (await get('/observations/compose-test')).json());
expect(log).not.toContain('연필');
});
Expand Down
Loading
0