cli-jaw 2.2.0 → 2.2.1-preview.20260625145621

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.
Files changed (190) hide show
  1. package/README.ko.md +1 -1
  2. package/README.md +22 -3
  3. package/README.zh-CN.md +1 -1
  4. package/dist/bin/cli-jaw.js +13 -1
  5. package/dist/bin/cli-jaw.js.map +1 -1
  6. package/dist/bin/commands/bgtask.js +2 -1
  7. package/dist/bin/commands/bgtask.js.map +1 -1
  8. package/dist/bin/commands/dispatch-batch-summary.js +38 -0
  9. package/dist/bin/commands/dispatch-batch-summary.js.map +1 -0
  10. package/dist/bin/commands/dispatch.js +91 -52
  11. package/dist/bin/commands/dispatch.js.map +1 -1
  12. package/dist/bin/commands/hooks.js +58 -0
  13. package/dist/bin/commands/hooks.js.map +1 -0
  14. package/dist/bin/commands/jwc.js +237 -0
  15. package/dist/bin/commands/jwc.js.map +1 -0
  16. package/dist/bin/commands/orchestrate.js +37 -2
  17. package/dist/bin/commands/orchestrate.js.map +1 -1
  18. package/dist/bin/commands/provider.js +213 -0
  19. package/dist/bin/commands/provider.js.map +1 -0
  20. package/dist/bin/commands/skill.js +17 -4
  21. package/dist/bin/commands/skill.js.map +1 -1
  22. package/dist/bin/commands/worker.js +162 -4
  23. package/dist/bin/commands/worker.js.map +1 -1
  24. package/dist/lib/mcp/skills-distribution.js +17 -19
  25. package/dist/lib/mcp/skills-distribution.js.map +1 -1
  26. package/dist/server.js +2 -1
  27. package/dist/server.js.map +1 -1
  28. package/dist/src/agent/jwc-runtime.js +12 -3
  29. package/dist/src/agent/jwc-runtime.js.map +1 -1
  30. package/dist/src/agent/spawn/queue.js +14 -0
  31. package/dist/src/agent/spawn/queue.js.map +1 -1
  32. package/dist/src/agent/spawn.js +1 -1
  33. package/dist/src/agent/spawn.js.map +1 -1
  34. package/dist/src/bgtask/recover.js +4 -1
  35. package/dist/src/bgtask/recover.js.map +1 -1
  36. package/dist/src/bgtask/registry.js +12 -2
  37. package/dist/src/bgtask/registry.js.map +1 -1
  38. package/dist/src/browser/adaptive-fetch/bm25-filter.js +47 -0
  39. package/dist/src/browser/adaptive-fetch/bm25-filter.js.map +1 -0
  40. package/dist/src/browser/adaptive-fetch/browser-escalation.js +136 -3
  41. package/dist/src/browser/adaptive-fetch/browser-escalation.js.map +1 -1
  42. package/dist/src/browser/adaptive-fetch/browser-flow.js +118 -0
  43. package/dist/src/browser/adaptive-fetch/browser-flow.js.map +1 -0
  44. package/dist/src/browser/adaptive-fetch/browser-runtime.js +10 -1
  45. package/dist/src/browser/adaptive-fetch/browser-runtime.js.map +1 -1
  46. package/dist/src/browser/adaptive-fetch/camoufox-session.js +76 -0
  47. package/dist/src/browser/adaptive-fetch/camoufox-session.js.map +1 -0
  48. package/dist/src/browser/adaptive-fetch/candidate-discovery.js +116 -0
  49. package/dist/src/browser/adaptive-fetch/candidate-discovery.js.map +1 -0
  50. package/dist/src/browser/adaptive-fetch/challenge-detector.js +1 -1
  51. package/dist/src/browser/adaptive-fetch/challenge-detector.js.map +1 -1
  52. package/dist/src/browser/adaptive-fetch/endpoint-resolvers.js +66 -5
  53. package/dist/src/browser/adaptive-fetch/endpoint-resolvers.js.map +1 -1
  54. package/dist/src/browser/adaptive-fetch/feed-parser.js +152 -0
  55. package/dist/src/browser/adaptive-fetch/feed-parser.js.map +1 -0
  56. package/dist/src/browser/adaptive-fetch/fetcher.js +20 -1
  57. package/dist/src/browser/adaptive-fetch/fetcher.js.map +1 -1
  58. package/dist/src/browser/adaptive-fetch/human-loop.js +10 -1
  59. package/dist/src/browser/adaptive-fetch/human-loop.js.map +1 -1
  60. package/dist/src/browser/adaptive-fetch/index.js +17 -397
  61. package/dist/src/browser/adaptive-fetch/index.js.map +1 -1
  62. package/dist/src/browser/adaptive-fetch/live-smoke-manifest.js +99 -0
  63. package/dist/src/browser/adaptive-fetch/live-smoke-manifest.js.map +1 -0
  64. package/dist/src/browser/adaptive-fetch/metadata.js +74 -5
  65. package/dist/src/browser/adaptive-fetch/metadata.js.map +1 -1
  66. package/dist/src/browser/adaptive-fetch/public-endpoint-normalizers.js +414 -0
  67. package/dist/src/browser/adaptive-fetch/public-endpoint-normalizers.js.map +1 -0
  68. package/dist/src/browser/adaptive-fetch/reader-adapters.js +36 -0
  69. package/dist/src/browser/adaptive-fetch/reader-adapters.js.map +1 -1
  70. package/dist/src/browser/adaptive-fetch/scheduler.js +472 -0
  71. package/dist/src/browser/adaptive-fetch/scheduler.js.map +1 -0
  72. package/dist/src/browser/adaptive-fetch/stage-types.js +2 -0
  73. package/dist/src/browser/adaptive-fetch/stage-types.js.map +1 -0
  74. package/dist/src/browser/adaptive-fetch/structured-extractor.js +117 -0
  75. package/dist/src/browser/adaptive-fetch/structured-extractor.js.map +1 -0
  76. package/dist/src/browser/adaptive-fetch/third-party-readers.js +15 -1
  77. package/dist/src/browser/adaptive-fetch/third-party-readers.js.map +1 -1
  78. package/dist/src/browser/adaptive-fetch/tls-fetch.js +81 -0
  79. package/dist/src/browser/adaptive-fetch/tls-fetch.js.map +1 -0
  80. package/dist/src/browser/adaptive-fetch/validators.js +11 -8
  81. package/dist/src/browser/adaptive-fetch/validators.js.map +1 -1
  82. package/dist/src/browser/adaptive-fetch/ytdlp-reader.js +82 -0
  83. package/dist/src/browser/adaptive-fetch/ytdlp-reader.js.map +1 -0
  84. package/dist/src/cli/commands.js +67 -13
  85. package/dist/src/cli/commands.js.map +1 -1
  86. package/dist/src/cli/handlers-search.js +28 -0
  87. package/dist/src/cli/handlers-search.js.map +1 -0
  88. package/dist/src/cli/handlers-skill-invoke.js +30 -0
  89. package/dist/src/cli/handlers-skill-invoke.js.map +1 -0
  90. package/dist/src/cli/handlers.js +12 -1
  91. package/dist/src/cli/handlers.js.map +1 -1
  92. package/dist/src/code-mode/acp-host.js +1 -8
  93. package/dist/src/code-mode/acp-host.js.map +1 -1
  94. package/dist/src/command-contract/catalog.js +22 -1
  95. package/dist/src/command-contract/catalog.js.map +1 -1
  96. package/dist/src/core/cli-detection.js +7 -0
  97. package/dist/src/core/cli-detection.js.map +1 -1
  98. package/dist/src/core/skill-cache.js +34 -0
  99. package/dist/src/core/skill-cache.js.map +1 -0
  100. package/dist/src/goal/heartbeat.js +13 -7
  101. package/dist/src/goal/heartbeat.js.map +1 -1
  102. package/dist/src/memory/heartbeat.js +12 -1
  103. package/dist/src/memory/heartbeat.js.map +1 -1
  104. package/dist/src/orchestrator/attestation.js +156 -0
  105. package/dist/src/orchestrator/attestation.js.map +1 -0
  106. package/dist/src/orchestrator/pipeline.js +34 -6
  107. package/dist/src/orchestrator/pipeline.js.map +1 -1
  108. package/dist/src/orchestrator/sanitize.js +4 -0
  109. package/dist/src/orchestrator/sanitize.js.map +1 -1
  110. package/dist/src/orchestrator/state-machine.js +69 -13
  111. package/dist/src/orchestrator/state-machine.js.map +1 -1
  112. package/dist/src/orchestrator/worker-output-store.js +64 -0
  113. package/dist/src/orchestrator/worker-output-store.js.map +1 -0
  114. package/dist/src/orchestrator/worker-progress.js.map +1 -1
  115. package/dist/src/orchestrator/worker-registry.js +91 -10
  116. package/dist/src/orchestrator/worker-registry.js.map +1 -1
  117. package/dist/src/orchestrator/worker-replay-notice.js +28 -0
  118. package/dist/src/orchestrator/worker-replay-notice.js.map +1 -0
  119. package/dist/src/orchestrator/worker-run-store.js +142 -0
  120. package/dist/src/orchestrator/worker-run-store.js.map +1 -0
  121. package/dist/src/prompt/builder.js +35 -3
  122. package/dist/src/prompt/builder.js.map +1 -1
  123. package/dist/src/prompt/context-hooks.js +210 -0
  124. package/dist/src/prompt/context-hooks.js.map +1 -0
  125. package/dist/src/prompt/templates/orchestration.md +1 -1
  126. package/dist/src/routes/bgtask.js +13 -4
  127. package/dist/src/routes/bgtask.js.map +1 -1
  128. package/dist/src/routes/command.js +1 -1
  129. package/dist/src/routes/command.js.map +1 -1
  130. package/dist/src/routes/orchestrate.js +85 -10
  131. package/dist/src/routes/orchestrate.js.map +1 -1
  132. package/dist/src/shared/runtime-observability.js +20 -0
  133. package/dist/src/shared/runtime-observability.js.map +1 -0
  134. package/dist/src/workflows/search.js +21 -0
  135. package/dist/src/workflows/search.js.map +1 -0
  136. package/package.json +11 -12
  137. package/public/dist/assets/{app-BsVpXeLC.js → app-CLrfEHAk.js} +4 -4
  138. package/public/dist/assets/bgtask-badge-4OjtCvDq.js +1 -0
  139. package/public/dist/assets/{bgtask-badge-DqMU3pM3.js → bgtask-badge-xWbw-l-0.js} +1 -1
  140. package/public/dist/assets/{employees-BhkR2-xi.js → employees-C5GPj3d3.js} +1 -1
  141. package/public/dist/assets/manager-Ceg2x8D0.js +13 -0
  142. package/public/dist/assets/{manager-U147AWWu.css → manager-CwAlpgV7.css} +1 -1
  143. package/public/dist/assets/memory-B1beDKbo.js +1 -0
  144. package/public/dist/assets/{memory-DERWDVjI.js → memory-CcnjBuo-.js} +1 -1
  145. package/public/dist/assets/{message-history-CK0ah3pB.js → message-history-BSWJwi__.js} +2 -2
  146. package/public/dist/assets/message-history-CzaziSe8.js +1 -0
  147. package/public/dist/assets/{render-CqzsW5KN.js → render-C2g_qvCg.js} +2 -2
  148. package/public/dist/assets/settings-Dst1mUjn.js +1 -0
  149. package/public/dist/assets/{settings-DdwmhI5a.js → settings-DxClXVD0.js} +1 -1
  150. package/public/dist/assets/settings-core-BW5mtFPE.js +1 -0
  151. package/public/dist/assets/{settings-core-AiF7o3Ns.js → settings-core-CSUV4-QG.js} +1 -1
  152. package/public/dist/assets/{sidebar-Bhtk2fPc.js → sidebar-CJz_SnMW.js} +3 -3
  153. package/public/dist/assets/skills-B2io6S_4.js +1 -0
  154. package/public/dist/assets/{skills-Cs8byPIx.js → skills-PKg2h1N4.js} +1 -1
  155. package/public/dist/assets/slash-commands-D1IS00Eg.js +1 -0
  156. package/public/dist/assets/{slash-commands-C5erv0KS.js → slash-commands-FMOOfedZ.js} +1 -1
  157. package/public/dist/assets/{trace-drawer-CtmD6jwj.js → trace-drawer-BoU1ucw7.js} +1 -1
  158. package/public/dist/assets/{ui-DaFl446W.js → ui-BX-IfLze.js} +1 -1
  159. package/public/dist/assets/ui-C-al0etg.js +1 -0
  160. package/public/dist/index.html +1 -1
  161. package/public/dist/manager/index.html +2 -2
  162. package/public/js/features/command-info.ts +1 -0
  163. package/public/js/render/file-links.ts +1 -1
  164. package/public/js/render/notes-vault-path.ts +1 -1
  165. package/public/locales/en.json +2 -0
  166. package/public/locales/ja.json +2 -0
  167. package/public/locales/ko.json +2 -0
  168. package/public/locales/zh.json +2 -0
  169. package/public/manager/src/SidebarRailRouter.tsx +7 -3
  170. package/public/manager/src/background-tasks/background-task-client.ts +21 -1
  171. package/public/manager/src/main.tsx +2 -0
  172. package/public/manager/src/workers/WorkerProgressMonitorPanel.tsx +2 -0
  173. package/public/manager/src/workers/WorkerRunsPanel.tsx +152 -0
  174. package/public/manager/src/workers/useWorkerRuns.ts +138 -0
  175. package/public/manager/src/workers/worker-runs-client.ts +112 -0
  176. package/public/manager/src/workers/worker-runs.css +208 -0
  177. package/scripts/bundle-sidecar.sh +2 -64
  178. package/scripts/check-electron-sidecar-no-jwc.cjs +57 -0
  179. package/scripts/install-risk-gate.mjs +3 -2
  180. package/scripts/jwc-no-global-smoke.mjs +19 -21
  181. package/public/dist/assets/bgtask-badge-YR8SMYrp.js +0 -1
  182. package/public/dist/assets/manager-ycX0r7uL.js +0 -13
  183. package/public/dist/assets/memory-CfeG2ViL.js +0 -1
  184. package/public/dist/assets/message-history-BaI36ciH.js +0 -1
  185. package/public/dist/assets/settings-VeoQiKpd.js +0 -1
  186. package/public/dist/assets/settings-core-DlfGtuWD.js +0 -1
  187. package/public/dist/assets/skills-Z0rMlwnf.js +0 -1
  188. package/public/dist/assets/slash-commands-CZKlw4A6.js +0 -1
  189. package/public/dist/assets/ui-WRcA4tUT.js +0 -1
  190. package/scripts/check-electron-sidecar-jwc.cjs +0 -117
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bm25-filter.js","sourceRoot":"","sources":["../../../../src/browser/adaptive-fetch/bm25-filter.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
1
  // Mirrored from agbrowse adaptive-fetch v2; keep runtime behavior aligned while cli-jaw mirror remains experimental.
2
- import { closeFetchBrowserPage, getFetchBrowserPage } from './browser-runtime.js';
2
+ import { releaseFetchBrowserPage, getFetchBrowserPage } from './browser-runtime.js';
3
3
  import { classifyAccessBoundary, detectChallengeMarkers } from './challenge-detector.js';
4
4
  import { runDefuddleInPage } from './defuddle-extractor.js';
5
+ import { extractMetadataFromHtml } from './metadata.js';
5
6
  import { validateFetchUrl } from './safety.js';
7
+ import { normalizeWhitespace } from './transforms.js';
6
8
  import { classifyBoundarySignals } from './validators.js';
7
9
  export async function collectBrowserCandidate(url, options = {}) {
8
10
  const pageRef = await getFetchBrowserPage({
@@ -10,6 +12,16 @@ export async function collectBrowserCandidate(url, options = {}) {
10
12
  browserSession: options.browserSession || 'isolated',
11
13
  });
12
14
  const page = pageRef.page;
15
+ if (options.signal?.aborted) {
16
+ await releaseFetchBrowserPage(pageRef);
17
+ return { source: 'browser', label: 'browser-render', ok: false, status: 0, finalUrl: url, text: '', title: '', evidence: ['deadline-aborted'], warnings: ['deadline-aborted'] };
18
+ }
19
+ // P0-6: close the page if the overall deadline fires so a hung page.goto rejects.
20
+ const onDeadlineAbort = () => { try {
21
+ page.close?.();
22
+ }
23
+ catch { /* page already closing */ } };
24
+ options.signal?.addEventListener('abort', onDeadlineAbort, { once: true });
13
25
  const networkCandidates = [];
14
26
  const onResponse = async (response) => {
15
27
  try {
@@ -55,7 +67,7 @@ export async function collectBrowserCandidate(url, options = {}) {
55
67
  }
56
68
  }
57
69
  const challengeInfo = options.challengeInfo;
58
- if (challengeInfo?.primary?.behavior?.jsChallengeSolvable) {
70
+ if (challengeInfo?.primary?.profile?.behavior?.jsChallengeSolvable) {
59
71
  await waitForChallengeResolution(page, 10000);
60
72
  }
61
73
  else if (typeof page.waitForTimeout === 'function') {
@@ -83,9 +95,20 @@ export async function collectBrowserCandidate(url, options = {}) {
83
95
  }
84
96
  const title = typeof page.title === 'function' ? await page.title() : '';
85
97
  const text = await readVisibleText(page, options.selector);
98
+ const html = await readPageHtml(page);
86
99
  const markers = detectChallengeMarkers({ url: finalUrl, title, text, status: navStatus });
87
100
  const boundary = classifyAccessBoundary(markers);
88
101
  const statusBoundary = classifyBoundarySignals({ status: navStatus, text: `${title}\n${text}`, url: finalUrl }).verdict;
102
+ const metadataCandidate = collectBrowserMetadataFromHtml(html, {
103
+ finalUrl,
104
+ status: navStatus,
105
+ ok: navOk && statusBoundary === null,
106
+ });
107
+ const structuredCandidates = await collectBrowserStructuredCandidates(page, {
108
+ finalUrl,
109
+ status: navStatus,
110
+ ok: navOk && statusBoundary === null,
111
+ });
89
112
  const defuddle = await runDefuddleInPage(page);
90
113
  const defuddleCandidate = defuddle.parsed
91
114
  ? {
@@ -125,13 +148,16 @@ export async function collectBrowserCandidate(url, options = {}) {
125
148
  ...(defuddle.reason ? [defuddle.reason] : []),
126
149
  ],
127
150
  networkCandidates,
151
+ metadataCandidate,
152
+ structuredCandidates,
128
153
  defuddleCandidate,
129
154
  };
130
155
  }
131
156
  finally {
157
+ options.signal?.removeEventListener('abort', onDeadlineAbort);
132
158
  if (typeof page.off === 'function')
133
159
  page.off('response', onResponse);
134
- await closeFetchBrowserPage(pageRef);
160
+ await releaseFetchBrowserPage(pageRef);
135
161
  }
136
162
  }
137
163
  async function readVisibleText(page, selector) {
@@ -144,12 +170,119 @@ async function readVisibleText(page, selector) {
144
170
  }
145
171
  return '';
146
172
  }
173
+ async function readPageHtml(page) {
174
+ if (typeof page.content === 'function')
175
+ return page.content().catch(() => '');
176
+ if (typeof page.evaluate === 'function') {
177
+ return page.evaluate(() => document.documentElement?.outerHTML || '').catch(() => '');
178
+ }
179
+ return '';
180
+ }
181
+ export function collectBrowserMetadataFromHtml(html, context) {
182
+ if (!html.trim())
183
+ return null;
184
+ const metadata = extractMetadataFromHtml(html, context.finalUrl);
185
+ const evidence = Array.isArray(metadata.evidence) ? metadata.evidence : [];
186
+ const metadataPayload = metadata.metadata;
187
+ const hasUsefulMetadata = Boolean(metadata.title || metadataPayload['description'] || evidence.length > 0);
188
+ if (!hasUsefulMetadata)
189
+ return null;
190
+ return {
191
+ source: 'metadata',
192
+ label: 'browser-metadata',
193
+ finalUrl: context.finalUrl,
194
+ title: metadata.title || '',
195
+ text: metadata.text || '',
196
+ contentType: 'text/html',
197
+ status: context.status || 200,
198
+ ok: context.ok !== false,
199
+ metadata: metadataPayload,
200
+ evidence: ['browser-dom-metadata', ...evidence],
201
+ warnings: [],
202
+ };
203
+ }
204
+ export async function collectBrowserStructuredCandidates(page, context) {
205
+ if (typeof page.evaluate !== 'function')
206
+ return [];
207
+ const payload = await page.evaluate(() => {
208
+ const text = (value) => (value || '').replace(/\s+/g, ' ').trim();
209
+ const tables = Array.from(document.querySelectorAll('table')).slice(0, 2).map((table, tableIndex) => {
210
+ const rows = Array.from(table.querySelectorAll('tr')).slice(0, 8).map(row => {
211
+ return Array.from(row.querySelectorAll('th,td')).slice(0, 5).map(cell => text(cell.textContent));
212
+ }).filter(row => row.some(Boolean));
213
+ return rows.length ? { kind: 'table', index: tableIndex + 1, rows } : null;
214
+ }).filter(Boolean);
215
+ const lists = Array.from(document.querySelectorAll('article ul, article ol, main ul, main ol, section ul, section ol, ul, ol')).slice(0, 3).map((list, listIndex) => {
216
+ const items = Array.from(list.querySelectorAll(':scope > li')).slice(0, 8).map(item => text(item.textContent)).filter(Boolean);
217
+ return items.length >= 2 ? { kind: 'list', index: listIndex + 1, items } : null;
218
+ }).filter(Boolean);
219
+ return { tables, lists };
220
+ }).catch(() => ({ tables: [], lists: [] }));
221
+ const tableCandidates = (Array.isArray(payload.tables) ? payload.tables : [])
222
+ .map((value, index) => structuredTableCandidate(value, index, context))
223
+ .filter((candidate) => Boolean(candidate));
224
+ const listCandidates = (Array.isArray(payload.lists) ? payload.lists : [])
225
+ .map((value, index) => structuredListCandidate(value, index, context))
226
+ .filter((candidate) => Boolean(candidate));
227
+ return [...tableCandidates, ...listCandidates].slice(0, 5);
228
+ }
147
229
  export function collectNetworkJsonCandidates(browserResult) {
148
230
  return Array.isArray(browserResult['networkCandidates']) ? browserResult['networkCandidates'] : [];
149
231
  }
232
+ export function collectBrowserMetadataCandidate(browserResult) {
233
+ return browserResult?.['metadataCandidate'] || null;
234
+ }
235
+ export function collectBrowserStructuredResultCandidates(browserResult) {
236
+ return Array.isArray(browserResult?.['structuredCandidates']) ? browserResult?.['structuredCandidates'] : [];
237
+ }
150
238
  export function collectDefuddleCandidate(browserResult) {
151
239
  return browserResult?.['defuddleCandidate'] || null;
152
240
  }
241
+ function structuredTableCandidate(value, index, context) {
242
+ const rows = Array.isArray(value?.['rows']) ? value['rows'] : [];
243
+ const lines = rows.map(row => Array.isArray(row) ? row.map(cell => normalizeWhitespace(String(cell || ''))).filter(Boolean).join(' | ') : '').filter(Boolean);
244
+ if (lines.length === 0)
245
+ return null;
246
+ return structuredCandidate({
247
+ label: 'browser-table',
248
+ title: `Rendered table ${index + 1}`,
249
+ text: [`Table ${index + 1}:`, ...lines].join('\n'),
250
+ finalUrl: context.finalUrl,
251
+ ...(context.status != null ? { status: context.status } : {}),
252
+ ...(context.ok != null ? { ok: context.ok } : {}),
253
+ metadata: { kind: 'table', rows: lines.length },
254
+ });
255
+ }
256
+ function structuredListCandidate(value, index, context) {
257
+ const items = Array.isArray(value?.['items']) ? value['items'] : [];
258
+ const lines = items.map(item => normalizeWhitespace(String(item || ''))).filter(Boolean);
259
+ if (lines.length < 2)
260
+ return null;
261
+ return structuredCandidate({
262
+ label: 'browser-list',
263
+ title: `Rendered list ${index + 1}`,
264
+ text: [`List ${index + 1}:`, ...lines.map(item => `- ${item}`)].join('\n'),
265
+ finalUrl: context.finalUrl,
266
+ ...(context.status != null ? { status: context.status } : {}),
267
+ ...(context.ok != null ? { ok: context.ok } : {}),
268
+ metadata: { kind: 'list', items: lines.length },
269
+ });
270
+ }
271
+ function structuredCandidate(input) {
272
+ return {
273
+ source: 'browser',
274
+ label: input.label,
275
+ finalUrl: input.finalUrl,
276
+ title: input.title,
277
+ text: input.text,
278
+ contentType: 'text/plain',
279
+ status: input.status || 200,
280
+ ok: input.ok !== false,
281
+ metadata: input.metadata,
282
+ evidence: ['browser-rendered-structured', input.label],
283
+ warnings: [],
284
+ };
285
+ }
153
286
  async function waitForChallengeResolution(page, timeoutMs) {
154
287
  if (typeof page.evaluate !== 'function')
155
288
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"browser-escalation.js","sourceRoot":"","sources":["../../../../src/browser/adaptive-fetch/browser-escalation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-escalation.js","sourceRoot":"","sources":["../../../../src/browser/adaptive-fetch/browser-escalation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ import { validateFetchUrl } from './safety.js';
2
+ import { collectBrowserCandidate, collectBrowserMetadataCandidate, collectBrowserStructuredResultCandidates, collectDefuddleCandidate, collectNetworkJsonCandidates, } from './browser-escalation.js';
3
+ import { BrowserRequiredError } from './browser-runtime.js';
4
+ import { fetchViaCamoufox } from './camoufox-session.js';
5
+ import { scoreReaderCandidate } from './content-scorer.js';
6
+ import { extractStructuredContent } from './structured-extractor.js';
7
+ import { fromBrowserResult, fromMetadataResult, fromNetworkCandidate } from './reader-adapters.js';
8
+ import { appendAttempt } from './trace.js';
9
+ export async function tryBrowserEscalation(url, options, deps, trace, challengeInfo, signal) {
10
+ if (options.browserMode === 'never')
11
+ return null;
12
+ if (signal?.aborted)
13
+ return null; // P0-6: overall deadline already fired
14
+ const allCandidates = [];
15
+ const camoufoxResult = await fetchViaCamoufox(url, { timeoutMs: options.timeoutMs, ...(signal ? { signal } : {}) });
16
+ if (camoufoxResult?.ok && camoufoxResult.html && isSafeFinalUrl(camoufoxResult.url || url, options)) {
17
+ const structured = extractStructuredContent(camoufoxResult.html);
18
+ const evidence = ['camoufox-stealth'];
19
+ if (structured.tables.length)
20
+ evidence.push(`structured:${structured.tables.length}-tables`);
21
+ if (structured.jsonLd.length)
22
+ evidence.push(`structured:${structured.jsonLd.length}-jsonld`);
23
+ appendAttempt(trace, { source: 'camoufox', verdict: 'ok', url, reason: 'camoufox-stealth' });
24
+ const camoufoxCandidate = fromBrowserResult({
25
+ ok: true, status: 200, finalUrl: camoufoxResult.url || url,
26
+ contentType: 'text/html', text: camoufoxResult.html,
27
+ title: camoufoxResult.title, headers: {}, evidence, warnings: [],
28
+ structured, label: 'camoufox-stealth',
29
+ });
30
+ const scored = scoreReaderCandidate(camoufoxCandidate);
31
+ appendScoredAttempt(trace, 'camoufox', camoufoxCandidate, { finalUrl: camoufoxResult.url || url, status: 200, label: 'camoufox-stealth' });
32
+ allCandidates.push(camoufoxCandidate);
33
+ if (scored.verdict === 'strong_ok') {
34
+ return buildBrowserFlowResult(url, camoufoxResult, structured, evidence, allCandidates);
35
+ }
36
+ }
37
+ else if (camoufoxResult === null) {
38
+ appendAttempt(trace, { source: 'camoufox', verdict: 'skip', url, reason: 'camoufox-not-available' });
39
+ }
40
+ try {
41
+ const result = await collectBrowserCandidate(url, {
42
+ browserDeps: deps,
43
+ browserSession: options.browserSession,
44
+ timeoutMs: options.timeoutMs,
45
+ selector: options.selector,
46
+ allowPrivateNetwork: options.allowPrivateNetwork,
47
+ challengeInfo,
48
+ ...(signal ? { signal } : {}),
49
+ });
50
+ appendScoredAttempt(trace, 'browser', fromBrowserResult(result), result);
51
+ const metadataCandidate = collectBrowserMetadataCandidate(result);
52
+ if (metadataCandidate)
53
+ appendScoredAttempt(trace, 'metadata', fromMetadataResult(metadataCandidate), metadataCandidate);
54
+ for (const structuredCandidate of collectBrowserStructuredResultCandidates(result)) {
55
+ appendScoredAttempt(trace, 'browser', fromBrowserResult(structuredCandidate), structuredCandidate);
56
+ }
57
+ const defuddleCandidate = collectDefuddleCandidate(result);
58
+ if (defuddleCandidate)
59
+ appendScoredAttempt(trace, 'browser', fromBrowserResult(defuddleCandidate), defuddleCandidate);
60
+ for (const networkCandidate of collectNetworkJsonCandidates(result)) {
61
+ appendScoredAttempt(trace, 'network_api', fromNetworkCandidate(networkCandidate), networkCandidate);
62
+ }
63
+ return result;
64
+ }
65
+ catch (error) {
66
+ if (error instanceof BrowserRequiredError || error?.['code'] === 'browser_required') {
67
+ appendAttempt(trace, {
68
+ source: 'browser',
69
+ verdict: 'browser_required',
70
+ url,
71
+ reason: error.message,
72
+ });
73
+ if (allCandidates.length > 0) {
74
+ return buildCandidateOnlyResult(url, allCandidates);
75
+ }
76
+ return null;
77
+ }
78
+ throw error;
79
+ }
80
+ }
81
+ function buildBrowserFlowResult(url, camoufoxResult, structured, evidence, _candidates) {
82
+ return {
83
+ ok: true, status: 200, finalUrl: camoufoxResult.url || url,
84
+ contentType: 'text/html', text: camoufoxResult.html,
85
+ title: camoufoxResult.title, headers: {}, evidence, warnings: [], structured,
86
+ };
87
+ }
88
+ function buildCandidateOnlyResult(url, candidates) {
89
+ const best = candidates[0];
90
+ if (!best)
91
+ return { ok: false, finalUrl: url, text: '', title: '', status: 0, evidence: [], warnings: [] };
92
+ return {
93
+ ok: best.ok, status: best.status, finalUrl: best.finalUrl,
94
+ contentType: best.contentType, text: best.text,
95
+ title: best.title, headers: {}, evidence: best.evidence, warnings: best.warnings,
96
+ };
97
+ }
98
+ function isSafeFinalUrl(finalUrl, options) {
99
+ try {
100
+ validateFetchUrl(finalUrl, { allowPrivateNetwork: options.allowPrivateNetwork });
101
+ return true;
102
+ }
103
+ catch {
104
+ return false;
105
+ }
106
+ }
107
+ function appendScoredAttempt(trace, source, candidate, raw) {
108
+ const scored = scoreReaderCandidate(candidate);
109
+ appendAttempt(trace, {
110
+ source,
111
+ verdict: scored.verdict,
112
+ url: raw['finalUrl'],
113
+ status: raw['status'],
114
+ reason: `score:${scored.score}`,
115
+ label: raw['label'],
116
+ });
117
+ }
118
+ //# sourceMappingURL=browser-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-flow.js","sourceRoot":"","sources":["../../../../src/browser/adaptive-fetch/browser-flow.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- // Mirrored from agbrowse adaptive-fetch v2; keep runtime behavior aligned while cli-jaw mirror remains experimental.
2
1
  export class BrowserRequiredError extends Error {
3
2
  code;
4
3
  constructor(message) {
@@ -22,8 +21,18 @@ export async function getFetchBrowserPage(options = {}) {
22
21
  }
23
22
  throw new BrowserRequiredError('isolated browser page dependency is unavailable');
24
23
  }
24
+ export async function releaseFetchBrowserPage(pageRef) {
25
+ if (typeof pageRef.cleanup === 'function')
26
+ await pageRef.cleanup();
27
+ }
25
28
  export async function closeFetchBrowserPage(pageRef) {
26
29
  if (typeof pageRef?.cleanup === 'function')
27
30
  await pageRef.cleanup();
28
31
  }
32
+ export async function drainPool() {
33
+ // no-op: isolated page pooling removed for state isolation safety
34
+ }
35
+ export function getPoolSize() {
36
+ return 0;
37
+ }
29
38
  //# sourceMappingURL=browser-runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-runtime.js","sourceRoot":"","sources":["../../../../src/browser/adaptive-fetch/browser-runtime.ts"],"names":[],"mappings":"AAAA,qHAAqH;AAErH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC3C,IAAI,CAAS;IACb,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACnC,CAAC;CACJ;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,UAAwG,EAAE;IAChJ,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;IACvC,IAAI,OAAO,CAAC,cAAc,KAAK,MAAM,EAAE,CAAC;QACpC,MAAM,IAAI,oBAAoB,CAAC,8BAA8B,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,OAAO,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;QACxC,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,UAAU;YAAE,MAAM,IAAI,oBAAoB,CAAC,2CAA2C,CAAC,CAAC;QACvH,OAAO,EAAE,IAAI,EAAE,MAAO,IAAI,CAAC,SAAS,CAA4B,EAAE,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC1H,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,UAAU,EAAE,CAAC;QACnD,OAAQ,IAAI,CAAC,oBAAoB,CAAuF,EAAE,CAAC;IAC/H,CAAC;IACD,MAAM,IAAI,oBAAoB,CAAC,iDAAiD,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAiD;IACzF,IAAI,OAAO,OAAO,EAAE,OAAO,KAAK,UAAU;QAAE,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;AACxE,CAAC"}
1
+ {"version":3,"file":"browser-runtime.js","sourceRoot":"","sources":["../../../../src/browser/adaptive-fetch/browser-runtime.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC3C,IAAI,CAAS;IACb,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACnC,CAAC;CACJ;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,UAAwG,EAAE;IAChJ,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;IACvC,IAAI,OAAO,CAAC,cAAc,KAAK,MAAM,EAAE,CAAC;QACpC,MAAM,IAAI,oBAAoB,CAAC,8BAA8B,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,OAAO,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;QACxC,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,UAAU;YAAE,MAAM,IAAI,oBAAoB,CAAC,2CAA2C,CAAC,CAAC;QACvH,OAAO,EAAE,IAAI,EAAE,MAAO,IAAI,CAAC,SAAS,CAA4B,EAAE,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC1H,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,UAAU,EAAE,CAAC;QACnD,OAAQ,IAAI,CAAC,oBAAoB,CAAuF,EAAE,CAAC;IAC/H,CAAC;IACD,MAAM,IAAI,oBAAoB,CAAC,iDAAiD,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAAqF;IAC/H,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,UAAU;QAAE,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAiD;IACzF,IAAI,OAAO,OAAO,EAAE,OAAO,KAAK,UAAU;QAAE,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC3B,kEAAkE;AACtE,CAAC;AAED,MAAM,UAAU,WAAW;IACvB,OAAO,CAAC,CAAC;AACb,CAAC"}
@@ -0,0 +1,76 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { promisify } from 'node:util';
3
+ const execFileAsync = promisify(execFile);
4
+ let cachedPython;
5
+ let cachedAvailable;
6
+ async function detectPython() {
7
+ if (cachedPython !== undefined)
8
+ return cachedPython;
9
+ for (const name of ['python3', 'python']) {
10
+ try {
11
+ const { stdout } = await execFileAsync(name, ['--version']);
12
+ if (stdout.includes('Python 3')) {
13
+ cachedPython = name;
14
+ return name;
15
+ }
16
+ }
17
+ catch { /* not found */ }
18
+ }
19
+ cachedPython = null;
20
+ return null;
21
+ }
22
+ async function detectCamoufox() {
23
+ if (cachedAvailable !== undefined)
24
+ return cachedAvailable;
25
+ const python = await detectPython();
26
+ if (!python) {
27
+ cachedAvailable = false;
28
+ return false;
29
+ }
30
+ try {
31
+ await execFileAsync(python, ['-c', 'from camoufox.sync_api import Camoufox; print("ok")'], { timeout: 10_000 });
32
+ cachedAvailable = true;
33
+ return true;
34
+ }
35
+ catch {
36
+ cachedAvailable = false;
37
+ return false;
38
+ }
39
+ }
40
+ export async function fetchViaCamoufox(url, options) {
41
+ // P0-6: bail before spawning if the overall deadline already fired.
42
+ if (options?.signal?.aborted)
43
+ return null;
44
+ const available = await detectCamoufox();
45
+ if (!available)
46
+ return null;
47
+ const python = cachedPython;
48
+ const timeout = Math.ceil((options?.timeoutMs || 30_000) / 1000);
49
+ const script = [
50
+ 'import json, sys',
51
+ 'from camoufox.sync_api import Camoufox',
52
+ `url = ${JSON.stringify(url)}`,
53
+ `timeout = ${timeout * 1000}`,
54
+ 'with Camoufox(headless=True) as browser:',
55
+ ' page = browser.new_page()',
56
+ ' page.goto(url, timeout=timeout)',
57
+ ' title = page.title()',
58
+ ' html = page.content()',
59
+ ' print(json.dumps({"ok": True, "title": title, "html": html, "url": url}))',
60
+ ].join('\n');
61
+ try {
62
+ const { stdout } = await execFileAsync(python, ['-c', script], {
63
+ timeout: (timeout + 30) * 1000,
64
+ maxBuffer: 10_000_000,
65
+ // P0-6: kill the Camoufox subprocess if the overall deadline fires.
66
+ ...(options?.signal ? { signal: options.signal } : {}),
67
+ });
68
+ const result = JSON.parse(stdout.trim().split('\n').pop() || '{}');
69
+ return result;
70
+ }
71
+ catch {
72
+ return null;
73
+ }
74
+ }
75
+ export { detectCamoufox, detectPython };
76
+ //# sourceMappingURL=camoufox-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"camoufox-session.js","sourceRoot":"","sources":["../../../../src/browser/adaptive-fetch/camoufox-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ import { validateFetchUrl } from './safety.js';
2
+ const LANE_ORDER = ['official', 'package', 'academic', 'community', 'realtime', 'archive', 'fetch'];
3
+ const LANE_BASE_SCORE = {
4
+ official: 80,
5
+ package: 72,
6
+ academic: 70,
7
+ community: 58,
8
+ realtime: 54,
9
+ archive: 45,
10
+ fetch: 40,
11
+ };
12
+ export function extractCandidateUrlsFromText(text) {
13
+ const urls = [...text.matchAll(/\bhttps?:\/\/[^\s<>"')\]]+/gi)]
14
+ .map(match => match[0].replace(/[.,;:!?]+$/g, ''));
15
+ return [...new Set(urls)];
16
+ }
17
+ export function rankDiscoveredCandidates(inputs, options = {}) {
18
+ const rejected = [];
19
+ const byUrl = new Map();
20
+ for (const input of inputs) {
21
+ const parsed = parsePublicUrl(input.url, rejected);
22
+ if (!parsed)
23
+ continue;
24
+ const normalizedUrl = normalizeCandidateUrl(parsed);
25
+ const lane = input.lane || classifyCandidateLane(parsed, input, options);
26
+ const reasons = scoreReasons(parsed, lane, input, options);
27
+ const candidate = {
28
+ url: parsed.href,
29
+ normalizedUrl,
30
+ hostname: parsed.hostname,
31
+ title: input.title || '',
32
+ snippet: input.snippet || '',
33
+ source: input.source || 'native_search',
34
+ lane,
35
+ score: LANE_BASE_SCORE[lane] + reasons.length * 3 + (parsed.protocol === 'https:' ? 2 : 0),
36
+ reasons,
37
+ };
38
+ const existing = byUrl.get(normalizedUrl);
39
+ if (!existing || candidate.score > existing.score)
40
+ byUrl.set(normalizedUrl, candidate);
41
+ }
42
+ const candidates = [...byUrl.values()]
43
+ .sort((a, b) => b.score - a.score || LANE_ORDER.indexOf(a.lane) - LANE_ORDER.indexOf(b.lane))
44
+ .slice(0, options.maxCandidates || 12);
45
+ return { candidates, lanes: groupByLane(candidates), rejected };
46
+ }
47
+ function parsePublicUrl(url, rejected) {
48
+ try {
49
+ return validateFetchUrl(url, { allowPrivateNetwork: false });
50
+ }
51
+ catch (error) {
52
+ rejected.push({ url, reason: error.message || 'invalid-url' });
53
+ return null;
54
+ }
55
+ }
56
+ function classifyCandidateLane(url, input, options) {
57
+ const host = url.hostname.replace(/^www\./, '');
58
+ const haystack = `${input.title || ''}\n${input.snippet || ''}\n${host}`.toLowerCase();
59
+ if ((options.officialDomains || []).some(domain => domainMatch(host, domain)))
60
+ return 'official';
61
+ if (/^(docs?|developer|dev|api)\./i.test(host) || /\bofficial\b|\bdocs?\b|\bapi reference\b/.test(haystack))
62
+ return 'official';
63
+ if (/github\.com|npmjs\.com|pypi\.org|crates\.io|pkg\.go\.dev|packagist\.org|rubygems\.org$/i.test(host))
64
+ return 'package';
65
+ if (/arxiv\.org|doi\.org|crossref\.org|pubmed\.ncbi\.nlm\.nih\.gov|semanticscholar\.org|scholar\.google\./i.test(host))
66
+ return 'academic';
67
+ if (/reddit\.com|stackoverflow\.com|stackexchange\.com|news\.ycombinator\.com|lobste\.rs|dev\.to|v2ex\.com/i.test(host))
68
+ return 'community';
69
+ if (/x\.com|twitter\.com|bsky\.app|mastodon\.social|threads\.net/i.test(host))
70
+ return 'realtime';
71
+ if (/webcache|archive\.org|web\.archive\.org/i.test(host))
72
+ return 'archive';
73
+ return 'fetch';
74
+ }
75
+ function scoreReasons(url, lane, input, options) {
76
+ const reasons = [lane];
77
+ const host = url.hostname.replace(/^www\./, '');
78
+ if ((options.officialDomains || []).some(domain => domainMatch(host, domain)))
79
+ reasons.push('official-domain-match');
80
+ if (input.title)
81
+ reasons.push('title-present');
82
+ if (input.snippet)
83
+ reasons.push('snippet-present');
84
+ if (!hasTrackingParams(url))
85
+ reasons.push('clean-url');
86
+ if (url.pathname && url.pathname !== '/')
87
+ reasons.push('deep-link');
88
+ return reasons;
89
+ }
90
+ function normalizeCandidateUrl(url) {
91
+ const copy = new URL(url.href);
92
+ copy.hash = '';
93
+ for (const key of [...copy.searchParams.keys()]) {
94
+ if (/^(utm_|fbclid|gclid|mc_cid|mc_eid)/i.test(key))
95
+ copy.searchParams.delete(key);
96
+ }
97
+ copy.hostname = copy.hostname.replace(/^www\./, '');
98
+ return copy.href.replace(/\/$/, '');
99
+ }
100
+ function hasTrackingParams(url) {
101
+ return [...url.searchParams.keys()].some(key => /^(utm_|fbclid|gclid|mc_cid|mc_eid)/i.test(key));
102
+ }
103
+ function groupByLane(candidates) {
104
+ const lanes = LANE_ORDER.reduce((acc, lane) => {
105
+ acc[lane] = [];
106
+ return acc;
107
+ }, {});
108
+ for (const candidate of candidates)
109
+ lanes[candidate.lane].push(candidate);
110
+ return lanes;
111
+ }
112
+ function domainMatch(host, domain) {
113
+ const clean = domain.replace(/^https?:\/\//, '').replace(/^www\./, '').split('/')[0] || domain;
114
+ return host === clean || host.endsWith(`.${clean}`);
115
+ }
116
+ //# sourceMappingURL=candidate-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"candidate-discovery.js","sourceRoot":"","sources":["../../../../src/browser/adaptive-fetch/candidate-discovery.ts"],"names":[],"mappings":"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"}
@@ -22,7 +22,7 @@ export function detectWafChallenge(response) {
22
22
  };
23
23
  const matches = WAF_PROFILES
24
24
  .map((p) => ({ profile: p, score: scoreProfile(p, signals) }))
25
- .filter((m) => m.score > 0)
25
+ .filter((m) => m.score >= 2)
26
26
  .sort((a, b) => b.score - a.score);
27
27
  return {
28
28
  detected: matches.length > 0,