cli-jaw 2.2.1 → 2.2.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.
Files changed (117) hide show
  1. package/dist/bin/cli-jaw.js +9 -1
  2. package/dist/bin/cli-jaw.js.map +1 -1
  3. package/dist/bin/commands/hooks.js +58 -0
  4. package/dist/bin/commands/hooks.js.map +1 -0
  5. package/dist/bin/commands/orchestrate.js +37 -2
  6. package/dist/bin/commands/orchestrate.js.map +1 -1
  7. package/dist/bin/commands/provider.js +213 -0
  8. package/dist/bin/commands/provider.js.map +1 -0
  9. package/dist/src/agent/spawn/queue.js +14 -0
  10. package/dist/src/agent/spawn/queue.js.map +1 -1
  11. package/dist/src/agent/spawn.js +1 -1
  12. package/dist/src/agent/spawn.js.map +1 -1
  13. package/dist/src/bgtask/recover.js +4 -1
  14. package/dist/src/bgtask/recover.js.map +1 -1
  15. package/dist/src/browser/adaptive-fetch/bm25-filter.js +47 -0
  16. package/dist/src/browser/adaptive-fetch/bm25-filter.js.map +1 -0
  17. package/dist/src/browser/adaptive-fetch/browser-escalation.js +14 -3
  18. package/dist/src/browser/adaptive-fetch/browser-escalation.js.map +1 -1
  19. package/dist/src/browser/adaptive-fetch/browser-flow.js +62 -1
  20. package/dist/src/browser/adaptive-fetch/browser-flow.js.map +1 -1
  21. package/dist/src/browser/adaptive-fetch/browser-runtime.js +10 -1
  22. package/dist/src/browser/adaptive-fetch/browser-runtime.js.map +1 -1
  23. package/dist/src/browser/adaptive-fetch/camoufox-session.js +76 -0
  24. package/dist/src/browser/adaptive-fetch/camoufox-session.js.map +1 -0
  25. package/dist/src/browser/adaptive-fetch/challenge-detector.js +1 -1
  26. package/dist/src/browser/adaptive-fetch/challenge-detector.js.map +1 -1
  27. package/dist/src/browser/adaptive-fetch/endpoint-resolvers.js +66 -5
  28. package/dist/src/browser/adaptive-fetch/endpoint-resolvers.js.map +1 -1
  29. package/dist/src/browser/adaptive-fetch/fetcher.js +20 -1
  30. package/dist/src/browser/adaptive-fetch/fetcher.js.map +1 -1
  31. package/dist/src/browser/adaptive-fetch/human-loop.js +10 -1
  32. package/dist/src/browser/adaptive-fetch/human-loop.js.map +1 -1
  33. package/dist/src/browser/adaptive-fetch/index.js +17 -347
  34. package/dist/src/browser/adaptive-fetch/index.js.map +1 -1
  35. package/dist/src/browser/adaptive-fetch/live-smoke-manifest.js +56 -0
  36. package/dist/src/browser/adaptive-fetch/live-smoke-manifest.js.map +1 -1
  37. package/dist/src/browser/adaptive-fetch/scheduler.js +472 -0
  38. package/dist/src/browser/adaptive-fetch/scheduler.js.map +1 -0
  39. package/dist/src/browser/adaptive-fetch/stage-types.js +2 -0
  40. package/dist/src/browser/adaptive-fetch/stage-types.js.map +1 -0
  41. package/dist/src/browser/adaptive-fetch/structured-extractor.js +117 -0
  42. package/dist/src/browser/adaptive-fetch/structured-extractor.js.map +1 -0
  43. package/dist/src/browser/adaptive-fetch/third-party-readers.js +15 -1
  44. package/dist/src/browser/adaptive-fetch/third-party-readers.js.map +1 -1
  45. package/dist/src/browser/adaptive-fetch/tls-fetch.js +81 -0
  46. package/dist/src/browser/adaptive-fetch/tls-fetch.js.map +1 -0
  47. package/dist/src/browser/adaptive-fetch/validators.js +11 -8
  48. package/dist/src/browser/adaptive-fetch/validators.js.map +1 -1
  49. package/dist/src/browser/adaptive-fetch/ytdlp-reader.js +82 -0
  50. package/dist/src/browser/adaptive-fetch/ytdlp-reader.js.map +1 -0
  51. package/dist/src/cli/commands.js +65 -13
  52. package/dist/src/cli/commands.js.map +1 -1
  53. package/dist/src/cli/handlers-skill-invoke.js +30 -0
  54. package/dist/src/cli/handlers-skill-invoke.js.map +1 -0
  55. package/dist/src/command-contract/catalog.js +22 -1
  56. package/dist/src/command-contract/catalog.js.map +1 -1
  57. package/dist/src/core/cli-detection.js +7 -0
  58. package/dist/src/core/cli-detection.js.map +1 -1
  59. package/dist/src/core/skill-cache.js +34 -0
  60. package/dist/src/core/skill-cache.js.map +1 -0
  61. package/dist/src/goal/heartbeat.js +13 -7
  62. package/dist/src/goal/heartbeat.js.map +1 -1
  63. package/dist/src/memory/heartbeat.js +12 -1
  64. package/dist/src/memory/heartbeat.js.map +1 -1
  65. package/dist/src/orchestrator/attestation.js +156 -0
  66. package/dist/src/orchestrator/attestation.js.map +1 -0
  67. package/dist/src/orchestrator/pipeline.js +32 -2
  68. package/dist/src/orchestrator/pipeline.js.map +1 -1
  69. package/dist/src/orchestrator/sanitize.js +4 -0
  70. package/dist/src/orchestrator/sanitize.js.map +1 -1
  71. package/dist/src/orchestrator/state-machine.js +69 -13
  72. package/dist/src/orchestrator/state-machine.js.map +1 -1
  73. package/dist/src/prompt/builder.js +35 -3
  74. package/dist/src/prompt/builder.js.map +1 -1
  75. package/dist/src/prompt/context-hooks.js +210 -0
  76. package/dist/src/prompt/context-hooks.js.map +1 -0
  77. package/dist/src/prompt/templates/orchestration.md +1 -1
  78. package/dist/src/routes/command.js +1 -1
  79. package/dist/src/routes/command.js.map +1 -1
  80. package/dist/src/routes/orchestrate.js +32 -6
  81. package/dist/src/routes/orchestrate.js.map +1 -1
  82. package/dist/src/workflows/search.js +10 -23
  83. package/dist/src/workflows/search.js.map +1 -1
  84. package/package.json +6 -6
  85. package/public/dist/assets/{app-BbBXyLe3.js → app-CLrfEHAk.js} +4 -4
  86. package/public/dist/assets/bgtask-badge-4OjtCvDq.js +1 -0
  87. package/public/dist/assets/{bgtask-badge-BioRIkPz.js → bgtask-badge-xWbw-l-0.js} +1 -1
  88. package/public/dist/assets/{employees-B8cUYBRx.js → employees-C5GPj3d3.js} +1 -1
  89. package/public/dist/assets/memory-B1beDKbo.js +1 -0
  90. package/public/dist/assets/{memory-3J4rzlxy.js → memory-CcnjBuo-.js} +1 -1
  91. package/public/dist/assets/{message-history-Vv3aIRWS.js → message-history-BSWJwi__.js} +2 -2
  92. package/public/dist/assets/message-history-CzaziSe8.js +1 -0
  93. package/public/dist/assets/{render-BVZ1xMEu.js → render-C2g_qvCg.js} +2 -2
  94. package/public/dist/assets/settings-Dst1mUjn.js +1 -0
  95. package/public/dist/assets/{settings-C5FVzFpn.js → settings-DxClXVD0.js} +1 -1
  96. package/public/dist/assets/settings-core-BW5mtFPE.js +1 -0
  97. package/public/dist/assets/{settings-core-5lL6lIyu.js → settings-core-CSUV4-QG.js} +1 -1
  98. package/public/dist/assets/{sidebar-jRPFidCd.js → sidebar-CJz_SnMW.js} +3 -3
  99. package/public/dist/assets/skills-B2io6S_4.js +1 -0
  100. package/public/dist/assets/{skills-BjOjT5sG.js → skills-PKg2h1N4.js} +1 -1
  101. package/public/dist/assets/slash-commands-D1IS00Eg.js +1 -0
  102. package/public/dist/assets/{slash-commands-B2oqpz-B.js → slash-commands-FMOOfedZ.js} +1 -1
  103. package/public/dist/assets/{trace-drawer-BQIdKFZx.js → trace-drawer-BoU1ucw7.js} +1 -1
  104. package/public/dist/assets/{ui-B9KmU-Qr.js → ui-BX-IfLze.js} +1 -1
  105. package/public/dist/assets/ui-C-al0etg.js +1 -0
  106. package/public/dist/index.html +1 -1
  107. package/public/js/render/file-links.ts +1 -1
  108. package/public/js/render/notes-vault-path.ts +1 -1
  109. package/scripts/jwc-no-global-smoke.mjs +7 -1
  110. package/public/dist/assets/bgtask-badge-BwMVGFG_.js +0 -1
  111. package/public/dist/assets/memory-B5CQnDFI.js +0 -1
  112. package/public/dist/assets/message-history-BYswFI5p.js +0 -1
  113. package/public/dist/assets/settings-DZ4wz5SY.js +0 -1
  114. package/public/dist/assets/settings-core-DYnePZHe.js +0 -1
  115. package/public/dist/assets/skills-CH0wHfkw.js +0 -1
  116. package/public/dist/assets/slash-commands-C_9y_-8B.js +0 -1
  117. package/public/dist/assets/ui-BCJ4lcQ4.js +0 -1
@@ -0,0 +1,472 @@
1
+ import { validateFetchUrl } from './safety.js';
2
+ import { appendAttempt, createAttemptTrace, summarizeAttempts } from './trace.js';
3
+ import { resolvePublicEndpointCandidates } from './endpoint-resolvers.js';
4
+ import { fetchTextCandidate } from './fetcher.js';
5
+ import { tlsFetch } from './tls-fetch.js';
6
+ import { ytdlpMetadata, ytdlpSubtitles, formatYtdlpEvidence } from './ytdlp-reader.js';
7
+ import { fromFetchResult, fromUserSessionResult, fromHumanResolvedResult } from './reader-adapters.js';
8
+ import { chooseBestReaderCandidate, scoreReaderCandidate } from './content-scorer.js';
9
+ import { fetchThirdPartyReaderCandidate } from './third-party-readers.js';
10
+ import { collectBrowserMetadataCandidate, collectBrowserStructuredResultCandidates, collectDefuddleCandidate, collectNetworkJsonCandidates, } from './browser-escalation.js';
11
+ import { tryBrowserEscalation } from './browser-flow.js';
12
+ import { fromBrowserResult, fromMetadataResult, fromNetworkCandidate } from './reader-adapters.js';
13
+ import { classifyChallengeType } from './challenge-detector.js';
14
+ import { shouldTryUserSession, navigateInUserSession } from './browser-session.js';
15
+ import { humanResolve } from './human-loop.js';
16
+ import { bm25Filter } from './bm25-filter.js';
17
+ export async function executeAdaptiveFetch(options, deps = {}) {
18
+ const parsed = validateFetchUrl(options.url, { allowPrivateNetwork: options.allowPrivateNetwork });
19
+ const trace = createAttemptTrace({
20
+ url: options.url,
21
+ browserMode: options.browserMode,
22
+ browserSession: options.browserSessionRaw || options.browserSession,
23
+ });
24
+ const fetchImpl = deps['fetch'];
25
+ const fetchOpt = { ...(fetchImpl ? { fetchImpl } : {}), ...(options.proxy ? { proxy: options.proxy } : {}) };
26
+ appendAttempt(trace, {
27
+ source: 'validation',
28
+ verdict: 'weak_ok',
29
+ url: parsed.href,
30
+ reason: 'url-valid',
31
+ });
32
+ const overallTimeoutMs = options.overallTimeoutMs || 60_000;
33
+ // P0-6: an overall-deadline AbortController so a hung in-flight stage is
34
+ // actually aborted at the deadline — not merely skipped before the next
35
+ // stage. The signal flows through fetchOpt into every HTTP fetch path
36
+ // (direct/discovered/jina) and is combined with each request's own timeout.
37
+ const deadlineController = new AbortController();
38
+ const deadlineTimer = setTimeout(() => deadlineController.abort(new Error('overall-deadline-exceeded')), overallTimeoutMs);
39
+ deadlineTimer.unref?.();
40
+ const ctx = {
41
+ url: parsed,
42
+ options,
43
+ deps,
44
+ trace,
45
+ candidates: [],
46
+ challenge: null,
47
+ fetchedUrls: new Set(),
48
+ fetchOpt: { ...fetchOpt, signal: deadlineController.signal },
49
+ chromeUsed: false,
50
+ deadline: Date.now() + overallTimeoutMs,
51
+ signal: deadlineController.signal,
52
+ };
53
+ try {
54
+ runEndpointStage(ctx);
55
+ if (!isPastDeadline(ctx))
56
+ await runDirectFetchStage(ctx);
57
+ if (!isPastDeadline(ctx))
58
+ await runDiscoveredEndpointStage(ctx);
59
+ if (!isPastDeadline(ctx))
60
+ await runJinaStage(ctx);
61
+ const earlyBest = evaluateEarlyExit(ctx);
62
+ if (earlyBest)
63
+ return finalize(ctx, earlyBest);
64
+ if (!isPastDeadline(ctx))
65
+ await runBrowserStages(ctx);
66
+ const finalBest = chooseBestReaderCandidate(ctx.candidates);
67
+ if (finalBest)
68
+ return finalize(ctx, finalBest);
69
+ return finalize(ctx, null);
70
+ }
71
+ finally {
72
+ clearTimeout(deadlineTimer);
73
+ }
74
+ }
75
+ function runEndpointStage(ctx) {
76
+ if (ctx.options.browserMode === 'required' || !ctx.options.publicEndpoints)
77
+ return;
78
+ const resolved = resolvePublicEndpointCandidates(ctx.url);
79
+ for (const candidate of resolved) {
80
+ candidate.source = 'public_endpoint';
81
+ }
82
+ }
83
+ async function runDirectFetchStage(ctx) {
84
+ const candidateUrls = [];
85
+ if (ctx.options.browserMode !== 'required' && ctx.options.publicEndpoints) {
86
+ candidateUrls.push(...resolvePublicEndpointCandidates(ctx.url).map(candidate => ({
87
+ ...candidate,
88
+ source: 'public_endpoint',
89
+ })));
90
+ }
91
+ if (ctx.options.browserMode !== 'required') {
92
+ candidateUrls.push({ label: 'direct-fetch', url: ctx.url.href, source: 'fetch' });
93
+ }
94
+ for (const candidate of candidateUrls) {
95
+ let fetched;
96
+ if (candidate.source === 'ytdlp') {
97
+ try {
98
+ const meta = await ytdlpMetadata(candidate.url, { timeoutMs: ctx.options.timeoutMs });
99
+ if (meta) {
100
+ const subs = await ytdlpSubtitles(candidate.url, 'en', { timeoutMs: ctx.options.timeoutMs });
101
+ const text = formatYtdlpEvidence(meta, subs);
102
+ const evidence = subs ? ['ytdlp-metadata', 'ytdlp-transcript'] : ['ytdlp-metadata'];
103
+ fetched = { ok: true, status: 200, finalUrl: candidate.url, contentType: 'text/plain', text, headers: {}, evidence, warnings: [] };
104
+ appendAttempt(ctx.trace, { source: 'ytdlp', verdict: 'ok', url: candidate.url, reason: subs ? 'ytdlp-metadata+transcript' : 'ytdlp-metadata' });
105
+ }
106
+ else {
107
+ appendAttempt(ctx.trace, { source: 'ytdlp', verdict: 'skip', url: candidate.url, reason: 'ytdlp-not-available' });
108
+ continue;
109
+ }
110
+ }
111
+ catch (error) {
112
+ appendAttempt(ctx.trace, { source: 'ytdlp', verdict: 'error', url: candidate.url, reason: error.message || 'ytdlp-error' });
113
+ continue;
114
+ }
115
+ }
116
+ else {
117
+ try {
118
+ fetched = await fetchTextCandidate(candidate.url, {
119
+ maxBytes: ctx.options.maxBytes,
120
+ timeoutMs: ctx.options.timeoutMs,
121
+ allowPrivateNetwork: ctx.options.allowPrivateNetwork,
122
+ identity: ctx.options.identity,
123
+ ...ctx.fetchOpt,
124
+ });
125
+ }
126
+ catch (error) {
127
+ appendAttempt(ctx.trace, {
128
+ source: candidate.source,
129
+ verdict: 'error',
130
+ url: candidate.url,
131
+ reason: error.message || 'fetch-candidate-error',
132
+ });
133
+ continue;
134
+ }
135
+ }
136
+ ctx.fetchedUrls.add(fetched['finalUrl'] || candidate.url);
137
+ if (candidate.source === 'fetch' && !fetched['ok']) {
138
+ const challengeResult = classifyChallengeType({
139
+ status: fetched['status'],
140
+ headers: fetched['headers'],
141
+ body: fetched['text'],
142
+ });
143
+ if (challengeResult.type) {
144
+ ctx.challenge = challengeResult;
145
+ appendAttempt(ctx.trace, {
146
+ source: candidate.source,
147
+ verdict: challengeResult.type,
148
+ url: fetched['finalUrl'],
149
+ status: fetched['status'],
150
+ reason: `challenge:${challengeResult.type}`,
151
+ });
152
+ }
153
+ }
154
+ if (candidate.source === 'fetch' && !fetched['ok'] && (fetched['status'] === 403 || fetched['status'] === 429 || ctx.challenge)) {
155
+ const tlsOpts = { timeoutMs: ctx.options.timeoutMs, maxBytes: ctx.options.maxBytes };
156
+ if (ctx.options.proxy)
157
+ tlsOpts.proxy = ctx.options.proxy;
158
+ const tlsResult = await tlsFetch(candidate.url, tlsOpts);
159
+ if (tlsResult?.ok) {
160
+ appendAttempt(ctx.trace, { source: 'tls-fetch', verdict: 'ok', url: candidate.url, status: tlsResult.status, reason: `tls-profile:${tlsResult.profile}` });
161
+ fetched = { ok: true, status: tlsResult.status, finalUrl: candidate.url, contentType: tlsResult.headers['content-type'] || '', text: tlsResult.body, headers: tlsResult.headers, evidence: [`tls-fetch:${tlsResult.profile}`], warnings: [] };
162
+ }
163
+ }
164
+ const readerCandidate = fromFetchResult(fetched, {
165
+ source: candidate.source,
166
+ label: candidate.label,
167
+ });
168
+ if (ctx.challenge && candidate.source === 'fetch') {
169
+ readerCandidate.challenge = ctx.challenge;
170
+ }
171
+ const scored = scoreReaderCandidate(readerCandidate);
172
+ appendAttempt(ctx.trace, {
173
+ source: readerCandidate.source,
174
+ verdict: scored.verdict,
175
+ url: fetched['finalUrl'],
176
+ status: fetched['status'],
177
+ reason: `score:${scored.score}`,
178
+ });
179
+ if (readerCandidate.text || readerCandidate.title)
180
+ ctx.candidates.push(readerCandidate);
181
+ }
182
+ }
183
+ async function runDiscoveredEndpointStage(ctx) {
184
+ if (ctx.options.browserMode === 'required' || !ctx.options.publicEndpoints)
185
+ return;
186
+ const discoveredFeedUrls = [];
187
+ const discoveredOembedUrls = [];
188
+ for (const c of ctx.candidates) {
189
+ const metadata = c.metadata;
190
+ for (const feedUrl of metadata?.['feedUrls'] || []) {
191
+ if (!ctx.fetchedUrls.has(feedUrl) && !discoveredFeedUrls.includes(feedUrl))
192
+ discoveredFeedUrls.push(feedUrl);
193
+ }
194
+ for (const oEmbedUrl of metadata?.['oEmbedUrls'] || []) {
195
+ if (!ctx.fetchedUrls.has(oEmbedUrl) && !discoveredOembedUrls.includes(oEmbedUrl))
196
+ discoveredOembedUrls.push(oEmbedUrl);
197
+ }
198
+ }
199
+ for (const discovered of [
200
+ ...discoveredFeedUrls.map(url => ({ url, label: 'rss-atom-discovered' })),
201
+ ...discoveredOembedUrls.map(url => ({ url, label: 'oembed-discovered' })),
202
+ ]) {
203
+ let fetched;
204
+ try {
205
+ fetched = await fetchTextCandidate(discovered.url, {
206
+ maxBytes: ctx.options.maxBytes,
207
+ timeoutMs: ctx.options.timeoutMs,
208
+ allowPrivateNetwork: ctx.options.allowPrivateNetwork,
209
+ identity: ctx.options.identity,
210
+ ...ctx.fetchOpt,
211
+ });
212
+ }
213
+ catch (error) {
214
+ appendAttempt(ctx.trace, {
215
+ source: 'public_endpoint',
216
+ verdict: 'error',
217
+ url: discovered.url,
218
+ reason: error.message || `${discovered.label}-error`,
219
+ });
220
+ continue;
221
+ }
222
+ ctx.fetchedUrls.add(fetched['finalUrl'] || discovered.url);
223
+ const readerCandidate = fromFetchResult(fetched, {
224
+ source: 'public_endpoint',
225
+ label: discovered.label,
226
+ });
227
+ const scored = scoreReaderCandidate(readerCandidate);
228
+ appendAttempt(ctx.trace, {
229
+ source: readerCandidate.source,
230
+ verdict: scored.verdict,
231
+ url: fetched['finalUrl'],
232
+ status: fetched['status'],
233
+ reason: `score:${scored.score}`,
234
+ });
235
+ if (readerCandidate.text || readerCandidate.title)
236
+ ctx.candidates.push(readerCandidate);
237
+ }
238
+ }
239
+ async function runJinaStage(ctx) {
240
+ if (!ctx.options.allowThirdPartyReader)
241
+ return;
242
+ let fetched = null;
243
+ try {
244
+ fetched = await fetchThirdPartyReaderCandidate(ctx.url.href, {
245
+ allowThirdPartyReader: true,
246
+ maxBytes: ctx.options.maxBytes,
247
+ timeoutMs: ctx.options.timeoutMs,
248
+ ...ctx.fetchOpt,
249
+ });
250
+ }
251
+ catch (error) {
252
+ appendAttempt(ctx.trace, {
253
+ source: 'third_party_reader',
254
+ verdict: 'error',
255
+ url: ctx.url.href,
256
+ reason: error.message || 'third-party-reader-error',
257
+ });
258
+ }
259
+ if (fetched) {
260
+ const readerCandidate = fromFetchResult(fetched, {
261
+ source: 'third_party_reader',
262
+ label: 'jina-reader',
263
+ });
264
+ const scored = scoreReaderCandidate(readerCandidate);
265
+ appendAttempt(ctx.trace, {
266
+ source: readerCandidate.source,
267
+ verdict: scored.verdict,
268
+ url: fetched['readerUrl'] || fetched.finalUrl,
269
+ status: fetched.status,
270
+ reason: `score:${scored.score}`,
271
+ });
272
+ if (readerCandidate.text || readerCandidate.title)
273
+ ctx.candidates.push(readerCandidate);
274
+ }
275
+ }
276
+ async function runBrowserStages(ctx) {
277
+ if (ctx.signal.aborted)
278
+ return;
279
+ const browserResult = await tryBrowserEscalation(ctx.url.href, ctx.options, ctx.deps, ctx.trace, ctx.challenge, ctx.signal);
280
+ if (browserResult) {
281
+ ctx.chromeUsed = true;
282
+ ctx.candidates.push(fromBrowserResult(browserResult));
283
+ const metadataCandidate = collectBrowserMetadataCandidate(browserResult);
284
+ if (metadataCandidate)
285
+ ctx.candidates.push(fromMetadataResult(metadataCandidate));
286
+ for (const structuredCandidate of collectBrowserStructuredResultCandidates(browserResult)) {
287
+ ctx.candidates.push(fromBrowserResult(structuredCandidate));
288
+ }
289
+ const defuddleCandidate = collectDefuddleCandidate(browserResult);
290
+ if (defuddleCandidate)
291
+ ctx.candidates.push(fromBrowserResult(defuddleCandidate));
292
+ for (const networkCandidate of collectNetworkJsonCandidates(browserResult)) {
293
+ ctx.candidates.push(fromNetworkCandidate(networkCandidate));
294
+ }
295
+ const best = chooseBestReaderCandidate(ctx.candidates);
296
+ if (best && best.verdict === 'strong_ok') {
297
+ return;
298
+ }
299
+ }
300
+ await runUserSessionStage(ctx);
301
+ await runHumanLoopStage(ctx);
302
+ }
303
+ async function runUserSessionStage(ctx) {
304
+ const sessionDecision = shouldTryUserSession(ctx.candidates, { ...ctx.options, browserDeps: ctx.deps });
305
+ if (sessionDecision !== true)
306
+ return;
307
+ if (ctx.signal.aborted)
308
+ return; // P0-6: skip the user-session tail past the deadline
309
+ try {
310
+ const userResult = await navigateInUserSession(ctx.url.href, {
311
+ browserDeps: ctx.deps,
312
+ timeoutMs: ctx.options.timeoutMs,
313
+ selector: ctx.options.selector,
314
+ allowPrivateNetwork: ctx.options.allowPrivateNetwork,
315
+ });
316
+ ctx.candidates.push(fromUserSessionResult(userResult));
317
+ ctx.chromeUsed = true;
318
+ appendAttempt(ctx.trace, {
319
+ source: 'browser_user',
320
+ verdict: 'strong_ok',
321
+ url: userResult['finalUrl'],
322
+ reason: 'user-session-render',
323
+ });
324
+ }
325
+ catch (error) {
326
+ appendAttempt(ctx.trace, {
327
+ source: 'browser_user',
328
+ verdict: 'error',
329
+ url: ctx.url.href,
330
+ reason: error.message || 'user-session-error',
331
+ });
332
+ }
333
+ }
334
+ async function runHumanLoopStage(ctx) {
335
+ const best = chooseBestReaderCandidate(ctx.candidates);
336
+ if (!ctx.options.humanLoop || !hasUnresolvedChallenge(ctx.candidates, best))
337
+ return;
338
+ if (ctx.signal.aborted)
339
+ return; // P0-6: skip the human-loop tail past the deadline
340
+ const challengeInfo = ctx.challenge || { type: 'challenge' };
341
+ try {
342
+ const humanResult = await humanResolve(ctx.url.href, {
343
+ ...ctx.options,
344
+ browserDeps: ctx.deps,
345
+ }, challengeInfo);
346
+ if (humanResult['ok'] !== false) {
347
+ ctx.candidates.push(fromHumanResolvedResult(humanResult));
348
+ ctx.chromeUsed = true;
349
+ appendAttempt(ctx.trace, {
350
+ source: 'human_resolved',
351
+ verdict: 'strong_ok',
352
+ url: humanResult['finalUrl'] || ctx.url.href,
353
+ reason: 'human-resolved',
354
+ });
355
+ }
356
+ else {
357
+ appendAttempt(ctx.trace, {
358
+ source: 'human_resolved',
359
+ verdict: humanResult['verdict'] || 'blocked',
360
+ url: ctx.url.href,
361
+ reason: humanResult['actionMessage'] || 'human-action-needed',
362
+ });
363
+ }
364
+ }
365
+ catch (error) {
366
+ appendAttempt(ctx.trace, {
367
+ source: 'human_resolved',
368
+ verdict: 'error',
369
+ url: ctx.url.href,
370
+ reason: error.message || 'human-loop-error',
371
+ });
372
+ }
373
+ }
374
+ function evaluateEarlyExit(ctx) {
375
+ const best = chooseBestReaderCandidate(ctx.candidates);
376
+ if (shouldReturnWithoutBrowser(best, ctx.options))
377
+ return best;
378
+ return null;
379
+ }
380
+ function finalize(ctx, scored) {
381
+ if (scored) {
382
+ const result = resultFromScoredCandidate(scored);
383
+ if (ctx.options.userSessionExplicit) {
384
+ result.safetyFlags = [...result.safetyFlags, 'user_session_used'];
385
+ }
386
+ return buildFinalResult(result, ctx);
387
+ }
388
+ return buildFinalResult({
389
+ ok: false,
390
+ verdict: ctx.options.browserMode === 'required' ? 'browser_required' : 'blocked',
391
+ source: ctx.options.browserMode === 'required' ? 'browser' : 'fetch',
392
+ finalUrl: ctx.url.href,
393
+ title: null,
394
+ content: '',
395
+ summary: 'No public endpoint, fetch, or metadata attempt produced readable content.',
396
+ evidence: [],
397
+ warnings: [],
398
+ safetyFlags: [],
399
+ metadata: null,
400
+ }, ctx);
401
+ }
402
+ function buildFinalResult(result, ctx) {
403
+ let content = result.content;
404
+ const evidence = [...result.evidence];
405
+ if (ctx.options.query && content.length > 5000) {
406
+ content = bm25Filter(content, { query: ctx.options.query, topK: 15 });
407
+ evidence.push('bm25-filtered');
408
+ }
409
+ return {
410
+ ok: result.ok,
411
+ verdict: result.verdict,
412
+ source: result.source,
413
+ finalUrl: result.finalUrl,
414
+ browserMode: ctx.options.browserMode,
415
+ browserSession: ctx.options.browserSessionRaw || ctx.options.browserSession,
416
+ identity: ctx.options.identity || 'auto',
417
+ chromeUsed: ctx.chromeUsed,
418
+ chromeRequired: result.verdict === 'browser_required' || (ctx.options.browserMode === 'required' && !result.ok),
419
+ title: result.title,
420
+ content,
421
+ summary: result.summary,
422
+ attempts: ctx.options.trace ? ctx.trace.attempts : [],
423
+ safetyFlags: result.safetyFlags,
424
+ evidence,
425
+ warnings: [...(ctx.options.optionWarnings || []), ...result.warnings],
426
+ metadata: result.metadata,
427
+ _traceSummary: summarizeAttempts(ctx.trace.attempts),
428
+ };
429
+ }
430
+ function resultFromScoredCandidate(scored) {
431
+ const candidate = scored.candidate;
432
+ return {
433
+ ok: candidate.ok !== false && ['strong_ok', 'weak_ok'].includes(scored.verdict),
434
+ verdict: scored.verdict,
435
+ source: candidate.source,
436
+ finalUrl: candidate.finalUrl,
437
+ title: candidate.title || null,
438
+ content: candidate.text || '',
439
+ summary: `${candidate.label || candidate.source} selected with ${scored.verdict} (score ${scored.score}).`,
440
+ evidence: scored.evidence,
441
+ warnings: candidate.warnings || [],
442
+ safetyFlags: candidate.safetyFlags || [],
443
+ metadata: candidate.metadata || null,
444
+ };
445
+ }
446
+ function isPastDeadline(ctx) {
447
+ if (Date.now() > ctx.deadline) {
448
+ appendAttempt(ctx.trace, {
449
+ source: 'scheduler',
450
+ verdict: 'blocked',
451
+ url: ctx.url.href,
452
+ reason: 'overall-deadline-exceeded',
453
+ });
454
+ return true;
455
+ }
456
+ return false;
457
+ }
458
+ function shouldReturnWithoutBrowser(best, options) {
459
+ if (options.browserMode === 'required')
460
+ return false;
461
+ if (options.browserMode === 'never')
462
+ return Boolean(best);
463
+ return Boolean(best && best.verdict === 'strong_ok');
464
+ }
465
+ function hasUnresolvedChallenge(candidates, best) {
466
+ if (best && best.verdict === 'strong_ok')
467
+ return false;
468
+ return candidates.some(c => c.challenge?.type === 'challenge' ||
469
+ c.challenge?.type === 'auth_required' ||
470
+ c.challenge?.type === 'paywall') || (best != null && ['challenge', 'auth_required', 'paywall', 'blocked'].includes(best.verdict));
471
+ }
472
+ //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../../../src/browser/adaptive-fetch/scheduler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=stage-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage-types.js","sourceRoot":"","sources":["../../../../src/browser/adaptive-fetch/stage-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,117 @@
1
+ const MAX_TABLE_ROWS = 50;
2
+ export function extractStructuredContent(html) {
3
+ return {
4
+ headings: extractHeadings(html),
5
+ tables: extractTables(html),
6
+ lists: extractLists(html),
7
+ codeBlocks: extractCodeBlocks(html),
8
+ jsonLd: extractJsonLd(html),
9
+ mainText: '',
10
+ wordCount: 0,
11
+ };
12
+ }
13
+ function extractHeadings(html) {
14
+ const headings = [];
15
+ const re = /<h([1-6])[^>]*>([\s\S]*?)<\/h\1>/gi;
16
+ let match;
17
+ while ((match = re.exec(html)) !== null) {
18
+ const text = stripTags(match[2] ?? '').trim();
19
+ if (text)
20
+ headings.push({ level: Number(match[1]), text });
21
+ }
22
+ return headings;
23
+ }
24
+ function extractTables(html) {
25
+ const tables = [];
26
+ const tableRe = /<table[^>]*>([\s\S]*?)<\/table>/gi;
27
+ let tableMatch;
28
+ while ((tableMatch = tableRe.exec(html)) !== null) {
29
+ const tableHtml = tableMatch[1] ?? '';
30
+ const caption = extractFirst(tableHtml, /<caption[^>]*>([\s\S]*?)<\/caption>/i);
31
+ const headers = [];
32
+ const headerRe = /<th[^>]*>([\s\S]*?)<\/th>/gi;
33
+ let hm;
34
+ while ((hm = headerRe.exec(tableHtml)) !== null) {
35
+ headers.push(stripTags(hm[1] ?? '').trim());
36
+ }
37
+ const rows = [];
38
+ const rowRe = /<tr[^>]*>([\s\S]*?)<\/tr>/gi;
39
+ let rowMatch;
40
+ while ((rowMatch = rowRe.exec(tableHtml)) !== null) {
41
+ const cells = [];
42
+ const cellRe = /<td[^>]*>([\s\S]*?)<\/td>/gi;
43
+ let cellMatch;
44
+ while ((cellMatch = cellRe.exec(rowMatch[1] ?? '')) !== null) {
45
+ cells.push(stripTags(cellMatch[1] ?? '').trim());
46
+ }
47
+ if (cells.length > 0 && rows.length < MAX_TABLE_ROWS)
48
+ rows.push(cells);
49
+ }
50
+ if (headers.length > 0 || rows.length > 0) {
51
+ const entry = { headers, rows };
52
+ if (caption)
53
+ entry.caption = caption;
54
+ tables.push(entry);
55
+ }
56
+ }
57
+ return tables;
58
+ }
59
+ function extractLists(html) {
60
+ const lists = [];
61
+ const listRe = /<(ol|ul)[^>]*>([\s\S]*?)<\/\1>/gi;
62
+ let match;
63
+ while ((match = listRe.exec(html)) !== null) {
64
+ const type = (match[1] ?? '').toLowerCase() === 'ol' ? 'ordered' : 'unordered';
65
+ const items = [];
66
+ const itemRe = /<li[^>]*>([\s\S]*?)<\/li>/gi;
67
+ let im;
68
+ while ((im = itemRe.exec(match[2] ?? '')) !== null) {
69
+ const text = stripTags(im[1] ?? '').trim();
70
+ if (text)
71
+ items.push(text);
72
+ }
73
+ if (items.length > 0)
74
+ lists.push({ type, items });
75
+ }
76
+ return lists;
77
+ }
78
+ function extractCodeBlocks(html) {
79
+ const blocks = [];
80
+ const re = /<pre[^>]*>[\s\S]*?<code[^>]*(?:class="[^"]*language-(\w+)[^"]*")?[^>]*>([\s\S]*?)<\/code>[\s\S]*?<\/pre>/gi;
81
+ let match;
82
+ while ((match = re.exec(html)) !== null) {
83
+ const code = decodeEntities(stripTags(match[2] ?? '')).trim();
84
+ if (code)
85
+ blocks.push({ language: match[1] || '', code });
86
+ }
87
+ return blocks;
88
+ }
89
+ function extractJsonLd(html) {
90
+ const results = [];
91
+ const re = /<script[^>]*type=["']application\/ld\+json["'][^>]*>([\s\S]*?)<\/script>/gi;
92
+ let match;
93
+ while ((match = re.exec(html)) !== null) {
94
+ try {
95
+ results.push(JSON.parse(match[1] ?? ''));
96
+ }
97
+ catch { /* malformed JSON-LD */ }
98
+ }
99
+ return results;
100
+ }
101
+ function stripTags(html) {
102
+ return html.replace(/<[^>]+>/g, '');
103
+ }
104
+ function decodeEntities(text) {
105
+ return text
106
+ .replace(/&amp;/g, '&')
107
+ .replace(/&lt;/g, '<')
108
+ .replace(/&gt;/g, '>')
109
+ .replace(/&quot;/g, '"')
110
+ .replace(/&#39;/g, "'")
111
+ .replace(/&#x27;/g, "'");
112
+ }
113
+ function extractFirst(html, re) {
114
+ const m = re.exec(html);
115
+ return m ? stripTags(m[1] ?? '').trim() : '';
116
+ }
117
+ //# sourceMappingURL=structured-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-extractor.js","sourceRoot":"","sources":["../../../../src/browser/adaptive-fetch/structured-extractor.ts"],"names":[],"mappings":"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"}