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
14 changes: 14 additions & 0 deletions src/chrome/src/agent/adapters.js
Original file line number Diff line number Diff line change
Expand Up @@ -16309,6 +16309,20 @@ const ADAPTERS = [
- Search hosts (listado.mercadolibre.com.ar, listado.mercadolibre.com.mx, lista.mercadolivre.com.br) can redirect automation to /gz/account-verification. If that wall appears, STOP and ask the user to complete it manually — do not retry, bypass, or claim results were read.`,
},

// ─── Regional — Coupang (Korea) ──────────────────────────────────────
{
name: 'coupang',
category: 'general',
matches: (url) => /^https?:\/\/(?:(?:www|m|cart)\.)?coupang\.com\//.test(url),
notes: `
- As of 2026-07, background requests can return an Akamai Access Denied page even when the shopping page works in the active tab. If fetch_url or research_url is blocked, switch immediately to read_page, the accessibility tree, and DOM tools; do not retry the same URL.
- Coupang is a Korean MARKETPLACE. Stable labels: "장바구니 담기" = add to cart, "바로구매" = buy now, "장바구니" = cart, and "판매자" = seller. "바로구매" skips the cart, so do not click it when the task is only to collect or compare items.
- Search defaults to "쿠팡 랭킹순", and sponsored products are marked "AD". For a price comparison choose "낮은가격순" and enable "배송비 포함"; do not present the default ranking or an ad position as the cheapest result.
- Product pages may group pack count, size, color, or other variants behind "모든 옵션 보기". Select the exact option first and compare the displayed unit price (for example, 100g당), not only the bundle total.
- The same product can be fulfilled by different sellers. Read "판매자", seller rating, delivery fee, and arrival date for the selected offer; product reviews may be pooled across different sellers and are not evidence about that seller.
- "로켓배송" describes Coupang-fulfilled delivery, while "와우" free shipping, free returns, or dawn delivery are membership-conditional. Confirm the selected offer and the cart total before promising delivery, savings, or a final price.`,
},

// ─── Regional — Rakuten Ichiba (Japan) ────────────────────────────────
{
name: 'rakuten-ichiba',
Expand Down
14 changes: 14 additions & 0 deletions src/firefox/src/agent/adapters.js
Original file line number Diff line number Diff line change
Expand Up @@ -16307,6 +16307,20 @@ const ADAPTERS = [
- Search hosts (listado.mercadolibre.com.ar, listado.mercadolibre.com.mx, lista.mercadolivre.com.br) can redirect automation to /gz/account-verification. If that wall appears, STOP and ask the user to complete it manually — do not retry, bypass, or claim results were read.`,
},

// ─── Regional — Coupang (Korea) ──────────────────────────────────────
{
name: 'coupang',
category: 'general',
matches: (url) => /^https?:\/\/(?:(?:www|m|cart)\.)?coupang\.com\//.test(url),
notes: `
- As of 2026-07, background requests can return an Akamai Access Denied page even when the shopping page works in the active tab. If fetch_url or research_url is blocked, switch immediately to read_page, the accessibility tree, and DOM tools; do not retry the same URL.
- Coupang is a Korean MARKETPLACE. Stable labels: "장바구니 담기" = add to cart, "바로구매" = buy now, "장바구니" = cart, and "판매자" = seller. "바로구매" skips the cart, so do not click it when the task is only to collect or compare items.
- Search defaults to "쿠팡 랭킹순", and sponsored products are marked "AD". For a price comparison choose "낮은가격순" and enable "배송비 포함"; do not present the default ranking or an ad position as the cheapest result.
- Product pages may group pack count, size, color, or other variants behind "모든 옵션 보기". Select the exact option first and compare the displayed unit price (for example, 100g당), not only the bundle total.
- The same product can be fulfilled by different sellers. Read "판매자", seller rating, delivery fee, and arrival date for the selected offer; product reviews may be pooled across different sellers and are not evidence about that seller.
- "로켓배송" describes Coupang-fulfilled delivery, while "와우" free shipping, free returns, or dawn delivery are membership-conditional. Confirm the selected offer and the cart total before promising delivery, savings, or a final price.`,
},

// ─── Regional — Rakuten Ichiba (Japan) ────────────────────────────────
{
name: 'rakuten-ichiba',
Expand Down
38 changes: 38 additions & 0 deletions test/run.js
Original file line number Diff line number Diff line change
Expand Up @@ -2489,6 +2489,44 @@ test('matches Mercado Libre LATAM storefronts and includes marketplace guidance'
assert.equal(firefoxAdapter?.notes, adapter?.notes);
});

test('matches Coupang shopping surfaces and includes Korean marketplace guidance', () => {
const trustedUrls = [
'https://coupang.com/',
'https://www.coupang.com/np/search?q=bodywash',
'https://m.coupang.com/vm/products/40994378',
'https://cart.coupang.com/cartView.pang',
];
for (const url of trustedUrls) {
assert.equal(getActiveAdapter(url)?.name, 'coupang');
assert.equal(getActiveAdapterFx(url)?.name, 'coupang');
}

const rejectedUrls = [
'https://wing.coupang.com/',
'https://www.tw.coupang.com/',
'https://coupang.com.phishing.example/vp/products/40994378',
'https://example.com/coupang.com/vp/products/40994378',
];
for (const url of rejectedUrls) {
assert.notEqual(getActiveAdapter(url)?.name, 'coupang');
assert.notEqual(getActiveAdapterFx(url)?.name, 'coupang');
}

const adapter = getActiveAdapter('https://www.coupang.com/vp/products/40994378');
const firefoxAdapter = getActiveAdapterFx('https://cart.coupang.com/');
assert.match(adapter?.notes || '', /2026-07/);
assert.match(adapter?.notes || '', /Akamai Access Denied/);
assert.match(adapter?.notes || '', /배송비 포함/);
assert.match(adapter?.notes || '', /낮은가격순/);
assert.match(adapter?.notes || '', /판매자/);
assert.match(adapter?.notes || '', /different sellers/i);
assert.match(adapter?.notes || '', /로켓배송/);
assert.match(adapter?.notes || '', /와우/);
assert.match(adapter?.notes || '', /장바구니 담기/);
assert.match(adapter?.notes || '', /바로구매/);
assert.equal(firefoxAdapter?.notes, adapter?.notes);
});

test('matches Rakuten Ichiba shopping surfaces and includes marketplace guidance', () => {
const trustedUrls = [
'https://www.rakuten.co.jp/',
Expand Down
Loading