smart-web-mcp 1.9.1 → 1.9.3

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.
@@ -1,3 +1,4 @@
1
+ import { parseHTML } from "linkedom";
1
2
  import { asString, dedupeUrls, extractMetaDescription, extractMetaProperty, extractMetaName, extractTitleFromHtml, extractUrls } from "../../shared.js";
2
3
  function socialTitle(value) {
3
4
  const text = asString(value).trim();
@@ -46,129 +47,121 @@ function threadsUnavailableResult(context) {
46
47
  method: context.active.method,
47
48
  };
48
49
  }
49
- function looksTimeOrDateLine(value) {
50
- const text = normalizeSpace(value);
51
- return Boolean(/^\d+\s*(?:초|분|시간|일|주|개월|년)$/.test(text)
52
- || /^\d{4}-\d{2}-\d{2}$/.test(text)
53
- || /^(?:now|\d+\s*(?:s|m|h|d|w|mo|y))$/i.test(text));
54
- }
55
- function escapeRegExp(value) {
56
- return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
57
- }
58
- function cleanCompactThreadContext(rawText, handle) {
59
- const handleWithoutAt = handle.replace(/^@/, "");
60
- const raw = asString(rawText).replace(/\u00a0/g, " ").replace(/\s+/g, " ").trim();
61
- const match = raw.match(new RegExp(`^${escapeRegExp(handleWithoutAt)}\\s+\\S+\\s+(?:(?:·|•)\\s+)?(?:(작성자|Author)\\s+)?([\\s\\S]*?)(?:\\s+Translate)?(?:\\s+\\d+)*$`, "i"));
62
- if (!match)
63
- return null;
64
- const text = normalizeSpace(match[2] || "");
65
- if (!text)
50
+ function postIdentity(value) {
51
+ try {
52
+ const url = new URL(value);
53
+ if (url.protocol !== "https:" || url.username || url.password || url.port
54
+ || !["threads.com", "www.threads.com", "threads.net", "www.threads.net"].includes(url.hostname))
55
+ return null;
56
+ const match = /^\/@([A-Za-z0-9._]+)\/post\/([A-Za-z0-9_-]+)\/?$/.exec(url.pathname);
57
+ return match ? { handle: match[1].toLowerCase(), id: match[2] } : null;
58
+ }
59
+ catch {
66
60
  return null;
67
- return {
68
- text,
69
- isAuthorContinuation: Boolean(match[1]),
70
- };
61
+ }
62
+ }
63
+ function samePost(left, right) {
64
+ const a = postIdentity(left);
65
+ const b = postIdentity(right);
66
+ return Boolean(a && b && a.handle === b.handle && a.id === b.id);
71
67
  }
72
- function cleanThreadBlockText(rawText, handle) {
73
- const compact = cleanCompactThreadContext(rawText, handle);
74
- if (compact)
75
- return compact;
76
- const handleWithoutAt = handle.replace(/^@/, "");
77
- const lines = asString(rawText)
78
- .split(/\n+/)
79
- .map((line) => normalizeSpace(line))
80
- .filter(Boolean);
81
- if (lines[0] !== handleWithoutAt)
68
+ /** Native timestamps bind the body; page titles and profile-anchor context do not. */
69
+ function extractPermalinkPost(html, url) {
70
+ const identity = postIdentity(url);
71
+ if (!identity)
82
72
  return null;
83
- lines.shift();
84
- if (lines[0] && looksTimeOrDateLine(lines[0]))
85
- lines.shift();
86
- const isAuthorContinuation = lines.includes("작성자");
87
- const contentLines = lines.filter((line) => line !== "·" && line !== "작성자" && line !== "Translate");
88
- while (contentLines.length > 0 && /^\d+$/.test(contentLines[contentLines.length - 1] || ""))
89
- contentLines.pop();
90
- const text = contentLines.join("\n").trim();
91
- if (!text)
73
+ const { document } = parseHTML(html);
74
+ for (const node of document.querySelectorAll('script, style, noscript, template, svg, input, textarea, [hidden], [inert], [aria-hidden="true"], [contenteditable]:not([contenteditable="false"])'))
75
+ node.remove();
76
+ for (const node of document.querySelectorAll("[style]")) {
77
+ if (/(?:^|;)\s*(?:display\s*:\s*none|visibility\s*:\s*(?:hidden|collapse))\s*(?:!important\s*)?(?:;|$)/i.test(node.getAttribute("style") || ""))
78
+ node.remove();
79
+ }
80
+ const matches = Array.from(document.querySelectorAll("a[href]")).filter((anchor) => {
81
+ try {
82
+ return anchor.querySelector("time") && samePost(new URL(anchor.getAttribute("href") || "", url).href, url);
83
+ }
84
+ catch {
85
+ return false;
86
+ }
87
+ });
88
+ if (matches.length !== 1)
92
89
  return null;
93
- return {
94
- text,
95
- isAuthorContinuation,
96
- };
97
- }
98
- function collectThreadContexts(active) {
99
- const contexts = new Set();
100
- for (const anchor of active.anchors || []) {
101
- const context = asString(anchor.context).trim();
102
- if (context)
103
- contexts.add(context);
90
+ const permalink = matches[0];
91
+ let header = permalink;
92
+ for (let depth = 0; header.parentElement && depth < 10; depth += 1) {
93
+ const row = header.parentElement;
94
+ if (row.querySelectorAll("time").length !== 1)
95
+ return null;
96
+ const author = Array.from(row.querySelectorAll("a[href]")).some((anchor) => {
97
+ try {
98
+ const profile = new URL(anchor.getAttribute("href") || "", url);
99
+ return profile.origin === new URL(url).origin && profile.pathname.toLowerCase() === `/@${identity.handle}`
100
+ && normalizeSpace(anchor.textContent || "").toLowerCase() === identity.handle;
101
+ }
102
+ catch {
103
+ return false;
104
+ }
105
+ });
106
+ const bodies = Array.from(row.querySelectorAll('[dir="auto"]')).filter((node) => !header.contains(node) && !node.contains(header)
107
+ && !node.closest('a, [role="button"]') && !node.querySelector("time, [dir='auto']")
108
+ && !/^(?:Author|작성자|Translate|\d*)$/i.test(normalizeSpace(node.textContent || "")));
109
+ if (author && bodies.length > 0) {
110
+ const text = bodies.map((node) => (node.textContent || "").trim()).join("\n");
111
+ const date = permalink.querySelector("time")?.getAttribute("datetime") || "";
112
+ return { url: new URL(permalink.getAttribute("href"), url).href, text, title: text.split("\n")[0], author_handle: `@${identity.handle}`,
113
+ isAuthorContinuation: Array.from(header.querySelectorAll("span")).some((node) => /^(?:Author|작성자)$/.test(normalizeSpace(node.textContent || ""))),
114
+ ...(date && Number.isFinite(Date.parse(date)) ? { published_at: date } : {}) };
115
+ }
116
+ header = row;
104
117
  }
105
- const primaryText = asString(active.primary_content?.text).trim();
106
- if (primaryText)
107
- contexts.add(primaryText);
108
- return Array.from(contexts);
118
+ return null;
109
119
  }
110
- function extractThreadBlocksFromActive(active, handle, url) {
111
- if (!handle)
120
+ function extractThreadBlocksFromActive(active, url) {
121
+ const bound = extractPermalinkPost(active.content, url);
122
+ if (!bound)
112
123
  return [];
113
- const contexts = collectThreadContexts(active);
114
- const blocks = [];
115
- const seenTexts = new Set();
116
- for (const contextText of contexts) {
117
- const cleaned = cleanThreadBlockText(contextText, handle);
118
- if (!cleaned)
119
- continue;
120
- if (blocks.length > 0 && !cleaned.isAuthorContinuation)
124
+ const { document } = parseHTML(active.content);
125
+ const urls = new Set();
126
+ for (const anchor of document.querySelectorAll("a[href]")) {
127
+ if (!anchor.querySelector("time"))
121
128
  continue;
122
- if (seenTexts.has(cleaned.text))
123
- continue;
124
- seenTexts.add(cleaned.text);
125
- blocks.push({
126
- url: blocks.length === 0 ? url : `${url}#thread-${blocks.length + 1}`,
127
- title: cleaned.text.split("\n")[0] || cleaned.text,
128
- text: cleaned.text,
129
- author_handle: handle,
130
- });
129
+ try {
130
+ const link = new URL(anchor.getAttribute("href") || "", url).href;
131
+ if (postIdentity(link)?.handle === postIdentity(url)?.handle && !samePost(link, url))
132
+ urls.add(link);
133
+ }
134
+ catch { /* Not a source permalink. */ }
131
135
  }
132
- return blocks;
136
+ const related = Array.from(urls).slice(0, 30).map(link => extractPermalinkPost(active.content, link))
137
+ .filter((row) => Boolean(row?.isAuthorContinuation));
138
+ return [bound, ...related].map(({ isAuthorContinuation: _marker, ...row }) => row);
133
139
  }
134
- async function maybeEnrichThreadsFromBrowser(context, handle, text, images) {
135
- if (!handle || !context.runBrowserSession)
140
+ const BROWSER_METHODS = ["playwright_stealth", "local_browser_cdp", "undetected_chromedriver"];
141
+ async function maybeEnrichThreadsFromBrowser(context) {
142
+ if (!samePost(context.resolvedUrl || context.url, context.url))
143
+ return null;
144
+ const activeBlocks = extractThreadBlocksFromActive(context.active, context.resolvedUrl || context.url);
145
+ if (activeBlocks.length > 0)
146
+ return { blocks: activeBlocks, browser: BROWSER_METHODS.includes(context.active.method) };
147
+ if (!context.runBrowserSession || BROWSER_METHODS.includes(context.active.method))
148
+ return null;
149
+ const deadline = context.deadlineAt ?? Date.now() + context.timeoutMs;
150
+ const remaining = Math.min(context.timeoutMs, deadline - Date.now());
151
+ if (remaining <= 0)
136
152
  return null;
137
- const activeBlocks = extractThreadBlocksFromActive(context.active, handle, context.resolvedUrl || context.url);
138
- if (activeBlocks.length > 1)
139
- return activeBlocks;
140
- if (["playwright_stealth", "local_browser_cdp", "undetected_chromedriver"].includes(context.active.method))
141
- return activeBlocks.length > 0 ? activeBlocks : null;
142
153
  const browser = await context.runBrowserSession({
154
+ ...context.browserSessionOptions,
143
155
  url: context.resolvedUrl || context.url,
144
- timeoutMs: context.timeoutMs,
156
+ timeoutMs: remaining,
145
157
  waitUntil: "networkidle",
146
158
  scrollSteps: 6,
147
159
  maxAnchors: 800,
148
160
  }).catch(() => null);
149
- if (!browser?.ok)
150
- return null;
151
- const browserActive = {
152
- ok: true,
153
- method: browser.method,
154
- content: browser.html || browser.text || "",
155
- links: browser.links || [],
156
- final_url: browser.final_url,
157
- anchors: browser.anchors.map((anchor) => ({ href: anchor.href, text: anchor.text, context: anchor.context })),
158
- primary_content: {
159
- ...(browser.content_html ? { html: browser.content_html } : {}),
160
- ...(browser.content_text ? { text: browser.content_text } : {}),
161
- ...(browser.title ? { title: browser.title } : {}),
162
- ...(Array.isArray(browser.headings) ? { headings: browser.headings } : {}),
163
- source: "browser_snapshot",
164
- },
165
- };
166
- const browserBlocks = extractThreadBlocksFromActive(browserActive, handle, browser.final_url || context.resolvedUrl || context.url);
167
- if (browserBlocks.length > 0)
168
- return browserBlocks;
169
- if (text || images.length > 0)
161
+ if (!browser?.ok || Date.now() >= deadline || !samePost(browser.final_url, context.url))
170
162
  return null;
171
- return [];
163
+ const blocks = extractThreadBlocksFromActive({ ok: true, method: browser.method, content: browser.html, links: [] }, browser.final_url);
164
+ return blocks.length > 0 && Date.now() < deadline ? { blocks, browser: true } : null;
172
165
  }
173
166
  export const threadsProvider = {
174
167
  id: "threads",
@@ -182,11 +175,12 @@ export const threadsProvider = {
182
175
  return threadsUnavailableResult(context);
183
176
  const text = asString(description).trim();
184
177
  const images = image ? [image] : [];
185
- const browserBlocks = await maybeEnrichThreadsFromBrowser(context, social.handle, text, images);
186
- const primaryBlock = browserBlocks?.[0];
178
+ const recovery = await maybeEnrichThreadsFromBrowser(context);
179
+ const primaryBlock = recovery?.blocks[0];
187
180
  const postText = asString(primaryBlock?.text || text).trim();
188
- const thread = browserBlocks && browserBlocks.length > 1 ? browserBlocks.slice(1) : [];
181
+ const thread = recovery ? recovery.blocks.slice(1) : [];
189
182
  const threadText = thread.map((item) => asString(item.text)).join("\n");
183
+ const method = primaryBlock ? `threads_${recovery?.browser ? "browser" : "permalink"}_${thread.length > 0 ? "thread" : "post"}` : context.active.method;
190
184
  return {
191
185
  post: {
192
186
  url: context.resolvedUrl || context.url,
@@ -194,17 +188,19 @@ export const threadsProvider = {
194
188
  description: postText,
195
189
  text: postText,
196
190
  author: social.author,
197
- author_handle: social.handle,
191
+ author_handle: primaryBlock?.author_handle || social.handle || `@${postIdentity(context.url)?.handle || ""}`,
198
192
  images,
199
- extractor: thread.length > 0 ? "threads_browser_thread" : "threads_meta",
193
+ ...(primaryBlock?.published_at ? { published_at: primaryBlock.published_at } : {}),
194
+ extractor: primaryBlock ? method : "threads_meta",
195
+ body_coverage: { complete: Boolean(primaryBlock), source: primaryBlock ? "threads_permalink" : "threads_metadata" },
200
196
  status: postText || images.length ? "ok" : "blocked_or_unavailable",
201
197
  },
202
198
  thread,
203
199
  comments: [],
204
200
  outbound_links: dedupeUrls(extractUrls(`${postText}\n${threadText}`)),
205
- partial: !postText && images.length === 0,
201
+ partial: !primaryBlock,
206
202
  errors: context.errors,
207
- method: thread.length > 0 ? "threads_browser_thread" : context.active.method,
203
+ method,
208
204
  };
209
205
  },
210
206
  };
@@ -1 +1 @@
1
- {"version":3,"file":"threads.js","sourceRoot":"","sources":["../../../src/smartfetch/providers/threads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,eAAe,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAIvJ,SAAS,WAAW,CAAC,KAAa;IAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAA;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAA;IACpE,OAAO;QACL,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;QACnC,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;KACpC,CAAA;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;AACpD,CAAC;AAED,SAAS,yBAAyB,CAAC,KAA4D;IAC7F,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;IACvD,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAA;IACnE,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;IACvD,OAAO,OAAO,CACZ,KAAK,KAAK,SAAS;WAChB,WAAW,CAAC,QAAQ,CAAC,6BAA6B,CAAC;WACnD,WAAW,CAAC,QAAQ,CAAC,4BAA4B,CAAC;WAClD,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CACtC,CAAA;AACH,CAAC;AAED,SAAS,wBAAwB,CAAC,OAA0B;IAC1D,OAAO;QACL,IAAI,EAAE;YACJ,GAAG,EAAE,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG;YACvC,KAAK,EAAE,0BAA0B;YACjC,WAAW,EAAE,8EAA8E;YAC3F,IAAI,EAAE,kFAAkF;YACxF,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,cAAc;YACzB,MAAM,EAAE,wBAAwB;SACjC;QACD,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,EAAE;QAClB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE;YACN,GAAG,OAAO,CAAC,MAAM;YACjB;gBACE,QAAQ,EAAE,aAAa;gBACvB,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE,2EAA2E;aACrF;SACF;QACD,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM;KAC9B,CAAA;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;IAClC,OAAO,OAAO,CACZ,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC;WACrC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;WAChC,qCAAqC,CAAC,IAAI,CAAC,IAAI,CAAC,CACpD,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;AACrD,CAAC;AAED,SAAS,yBAAyB,CAAC,OAAe,EAAE,MAAc;IAChE,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IACjF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,YAAY,CAAC,eAAe,CAAC,+FAA+F,EAAE,GAAG,CAAC,CAAC,CAAA;IAC1K,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IACvB,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IAC3C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IACtB,OAAO;QACL,IAAI;QACJ,oBAAoB,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACxC,CAAA;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAe,EAAE,MAAc;IAC3D,MAAM,OAAO,GAAG,yBAAyB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC1D,IAAI,OAAO;QAAE,OAAO,OAAO,CAAA;IAC3B,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC;SAC5B,KAAK,CAAC,KAAK,CAAC;SACZ,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;SACnC,MAAM,CAAC,OAAO,CAAC,CAAA;IAClB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,eAAe;QAAE,OAAO,IAAI,CAAA;IAC7C,KAAK,CAAC,KAAK,EAAE,CAAA;IACb,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAAE,KAAK,CAAC,KAAK,EAAE,CAAA;IAC5D,MAAM,oBAAoB,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAClD,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,WAAW,CAAC,CAAA;IACnG,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAAE,YAAY,CAAC,GAAG,EAAE,CAAA;IAC/G,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAA;IAC3C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IACtB,OAAO;QACL,IAAI;QACJ,oBAAoB;KACrB,CAAA;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAqB;IAClD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAA;IAClC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;QAC/C,IAAI,OAAO;YAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC;IACD,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAA;IACjE,IAAI,WAAW;QAAE,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAC7B,CAAC;AAED,SAAS,6BAA6B,CAAC,MAAqB,EAAE,MAAc,EAAE,GAAW;IACvF,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAA;IACtB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAA;IAC9C,MAAM,MAAM,GAAmC,EAAE,CAAA;IACjD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAA;IACnC,KAAK,MAAM,WAAW,IAAI,QAAQ,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;QACzD,IAAI,CAAC,OAAO;YAAE,SAAQ;QACtB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB;YAAE,SAAQ;QAChE,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,SAAQ;QACzC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC3B,MAAM,CAAC,IAAI,CAAC;YACV,GAAG,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,WAAW,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YACrE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI;YAClD,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,aAAa,EAAE,MAAM;SACtB,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,KAAK,UAAU,6BAA6B,CAAC,OAA0B,EAAE,MAAc,EAAE,IAAY,EAAE,MAAgB;IACrH,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB;QAAE,OAAO,IAAI,CAAA;IACtD,MAAM,YAAY,GAAG,6BAA6B,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,CAAA;IAC9G,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,YAAY,CAAA;IAChD,IAAI,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,yBAAyB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QAAE,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAA;IAEhK,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC;QAC9C,GAAG,EAAE,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG;QACvC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,aAAa;QACxB,WAAW,EAAE,CAAC;QACd,UAAU,EAAE,GAAG;KAChB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IACpB,IAAI,CAAC,OAAO,EAAE,EAAE;QAAE,OAAO,IAAI,CAAA;IAC7B,MAAM,aAAa,GAAkB;QACnC,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE;QAC3C,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7G,eAAe,EAAE;YACf,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,MAAM,EAAE,kBAAkB;SAC3B;KACF,CAAA;IACD,MAAM,aAAa,GAAG,6BAA6B,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,CAAA;IACnI,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,aAAa,CAAA;IAClD,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IAC1C,OAAO,EAAE,CAAA;AACX,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAuB;IACjD,EAAE,EAAE,SAAS;IACb,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,cAAc;IACpD,KAAK,CAAC,SAAS,CAAC,OAA0B;QACxC,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC1D,MAAM,MAAM,GAAG,WAAW,CAAC,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAA;QAC/I,MAAM,WAAW,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,gBAAgB,CAAC,IAAI,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,CAAA;QAC5I,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,CAAA;QACjI,IAAI,yBAAyB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;YAAE,OAAO,wBAAwB,CAAC,OAAO,CAAC,CAAA;QACtG,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAA;QACzC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACnC,MAAM,aAAa,GAAG,MAAM,6BAA6B,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;QAC/F,MAAM,YAAY,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC,CAAA;QACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAA;QAC5D,MAAM,MAAM,GAAG,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACtF,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvE,OAAO;YACL,IAAI,EAAE;gBACJ,GAAG,EAAE,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG;gBACvC,KAAK,EAAE,KAAK,IAAI,QAAQ,IAAI,MAAM,CAAC,KAAK;gBACxC,WAAW,EAAE,QAAQ;gBACrB,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,aAAa,EAAE,MAAM,CAAC,MAAM;gBAC5B,MAAM;gBACN,SAAS,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,cAAc;gBACxE,MAAM,EAAE,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB;aACpE;YACD,MAAM;YACN,QAAQ,EAAE,EAAE;YACZ,cAAc,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,QAAQ,KAAK,UAAU,EAAE,CAAC,CAAC;YACrE,OAAO,EAAE,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YACzC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM;SAC7E,CAAA;IACH,CAAC;CACF,CAAA"}
1
+ {"version":3,"file":"threads.js","sourceRoot":"","sources":["../../../src/smartfetch/providers/threads.ts"],"names":[],"mappings":"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"}
@@ -1300,6 +1300,7 @@ async function runSmartfetchTask(options, runtime, deadlineAt, output) {
1300
1300
  // A failed comment continuation can retain a readable direct body, so
1301
1301
  // active.ok alone is not recovery. Snapshot before normalizers append errors.
1302
1302
  const acquisitionErrors = browserAttempt.ok ? [...output.errors] : [];
1303
+ let threadsBrowserMethod = "";
1303
1304
  const normalized = await provider.normalize({
1304
1305
  url: options.url,
1305
1306
  resolvedUrl: providerUrl,
@@ -1316,7 +1317,12 @@ async function runSmartfetchTask(options, runtime, deadlineAt, output) {
1316
1317
  },
1317
1318
  active,
1318
1319
  errors: output.errors,
1319
- runBrowserSession: runtime.runBrowserSession || runBrowserSession,
1320
+ runBrowserSession: provider.id === "threads" ? async (options) => {
1321
+ threadsBrowserMethod = "threads_browser_continuation";
1322
+ const browser = await (runtime.runBrowserSession || runBrowserSession)(options);
1323
+ threadsBrowserMethod = browser.method;
1324
+ return browser;
1325
+ } : runtime.runBrowserSession || runBrowserSession,
1320
1326
  ...(recoveredBrowserDiscussion && provider.id === "generic" ? { recoveredDiscussion: recoveredBrowserDiscussion } : {}),
1321
1327
  fetchDiscussionPage: async (pageUrl) => {
1322
1328
  const pageDeadline = Date.now() + Math.min(8000, Math.max(1000, remaining() - 1000));
@@ -1328,6 +1334,15 @@ async function runSmartfetchTask(options, runtime, deadlineAt, output) {
1328
1334
  ...(options.includeMarkdown ? { includeMarkdown: true } : {}),
1329
1335
  ...(options.includeComments && (provider.id === "generic" || provider.id === "discourse" || provider.id === "naver-blog") ? { includeComments: true } : {}),
1330
1336
  });
1337
+ if (threadsBrowserMethod) {
1338
+ const accepted = !normalized.partial && /^threads_browser_(?:post|thread)$/.test(normalized.method);
1339
+ output.evidence.playwright_attempted = true;
1340
+ output.evidence.playwright_success ||= accepted;
1341
+ output.pipeline.acquire.used_browser = true;
1342
+ output.pipeline.acquire.attempts.push(threadsBrowserMethod);
1343
+ output.pipeline.acquire.attempt_map?.push({ phase: "browser_fallback", status: accepted ? "succeeded" : "failed",
1344
+ method: threadsBrowserMethod, reason: accepted ? "Threads normalization recovered the exact source-bound post" : "Threads normalization did not verify the requested post" });
1345
+ }
1331
1346
  remaining();
1332
1347
  const academic = await maybeUseAcademicFallback({
1333
1348
  url: options.url,