@felan-ai/ext-web-access 0.0.0

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 (56) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +18 -0
  3. package/README.md +58 -0
  4. package/dist/boundary.d.ts +6 -0
  5. package/dist/boundary.d.ts.map +1 -0
  6. package/dist/boundary.js +33 -0
  7. package/dist/boundary.js.map +1 -0
  8. package/dist/config.d.ts +37 -0
  9. package/dist/config.d.ts.map +1 -0
  10. package/dist/config.js +64 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/content-find.d.ts +12 -0
  13. package/dist/content-find.d.ts.map +1 -0
  14. package/dist/content-find.js +80 -0
  15. package/dist/content-find.js.map +1 -0
  16. package/dist/credentials.d.ts +12 -0
  17. package/dist/credentials.d.ts.map +1 -0
  18. package/dist/credentials.js +87 -0
  19. package/dist/credentials.js.map +1 -0
  20. package/dist/extract.d.ts +11 -0
  21. package/dist/extract.d.ts.map +1 -0
  22. package/dist/extract.js +168 -0
  23. package/dist/extract.js.map +1 -0
  24. package/dist/github.d.ts +13 -0
  25. package/dist/github.d.ts.map +1 -0
  26. package/dist/github.js +166 -0
  27. package/dist/github.js.map +1 -0
  28. package/dist/http.d.ts +5 -0
  29. package/dist/http.d.ts.map +1 -0
  30. package/dist/http.js +47 -0
  31. package/dist/http.js.map +1 -0
  32. package/dist/index.d.ts +4 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +502 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/providers.d.ts +17 -0
  37. package/dist/providers.d.ts.map +1 -0
  38. package/dist/providers.js +653 -0
  39. package/dist/providers.js.map +1 -0
  40. package/dist/source-check.d.ts +21 -0
  41. package/dist/source-check.d.ts.map +1 -0
  42. package/dist/source-check.js +136 -0
  43. package/dist/source-check.js.map +1 -0
  44. package/dist/ssrf.d.ts +36 -0
  45. package/dist/ssrf.d.ts.map +1 -0
  46. package/dist/ssrf.js +306 -0
  47. package/dist/ssrf.js.map +1 -0
  48. package/dist/storage.d.ts +15 -0
  49. package/dist/storage.d.ts.map +1 -0
  50. package/dist/storage.js +88 -0
  51. package/dist/storage.js.map +1 -0
  52. package/dist/types.d.ts +100 -0
  53. package/dist/types.d.ts.map +1 -0
  54. package/dist/types.js +2 -0
  55. package/dist/types.js.map +1 -0
  56. package/package.json +52 -0
package/dist/index.js ADDED
@@ -0,0 +1,502 @@
1
+ import { StringEnum } from '@felan-ai/agent-core';
2
+ import { Type } from 'typebox';
3
+ import { IMAGE_WARNING, WEB_CONTENT_CAPABILITY_INSTRUCTION, trustedResultText, wrapUntrustedWebContent, } from './boundary.js';
4
+ import { configuredProvider, loadConfig, normalizeProviderSelection, } from './config.js';
5
+ import { findContent } from './content-find.js';
6
+ import { extractContent, fetchWithConcurrency } from './extract.js';
7
+ import { combinedSignal } from './http.js';
8
+ import { searchProviders } from './providers.js';
9
+ import { buildResearchArtifact } from './source-check.js';
10
+ import { generateResponseId, ResultStore } from './storage.js';
11
+ import { PROVIDER_NAMES, } from './types.js';
12
+ const SEARCH_SELECTIONS = ['auto', 'all', ...PROVIDER_NAMES];
13
+ const RECENCY_FILTERS = ['day', 'week', 'month', 'year'];
14
+ const FIND_MODES = ['exact', 'case-insensitive', 'fuzzy'];
15
+ const MAX_GET_CHARACTERS = 30_000;
16
+ const MAX_INCLUDED_URLS = 8;
17
+ const MAX_MODEL_PREVIEW_CHARACTERS = 30_000;
18
+ const MAX_PAGE_PREVIEW_CHARACTERS = 12_000;
19
+ const NESTED_ANSWER_TIMEOUT_MS = 60_000;
20
+ const ProviderSelectionSchema = Type.Union([
21
+ StringEnum(SEARCH_SELECTIONS),
22
+ Type.Array(StringEnum(PROVIDER_NAMES), { minItems: 1, uniqueItems: true }),
23
+ ]);
24
+ const WebSearchParams = Type.Object({
25
+ query: Type.Optional(Type.String({ minLength: 1, maxLength: 2_000, description: 'Single search query' })),
26
+ queries: Type.Optional(Type.Array(Type.String({ minLength: 1, maxLength: 2_000 }), { minItems: 1, maxItems: 4, description: 'Search queries run in sequence' })),
27
+ numResults: Type.Optional(Type.Integer({ minimum: 1, maximum: 20, description: 'Results per query. Default: 5.' })),
28
+ includeContent: Type.Optional(Type.Boolean({ description: 'Fetch result pages synchronously with concurrency 3' })),
29
+ recencyFilter: Type.Optional(StringEnum(RECENCY_FILTERS)),
30
+ domainFilter: Type.Optional(Type.Array(Type.String(), { maxItems: 100 })),
31
+ provider: Type.Optional(ProviderSelectionSchema),
32
+ }, { additionalProperties: false });
33
+ const SourceCheckParams = Type.Object({
34
+ claim: Type.String({ minLength: 1, maxLength: 10_000, description: 'Assertion to check' }),
35
+ queries: Type.Optional(Type.Array(Type.String({ minLength: 1, maxLength: 2_000 }), { minItems: 1, maxItems: 4 })),
36
+ numResults: Type.Optional(Type.Integer({ minimum: 1, maximum: 20 })),
37
+ fetchContent: Type.Optional(Type.Boolean({ description: 'Fetch up to five result pages for exact passages' })),
38
+ recencyFilter: Type.Optional(StringEnum(RECENCY_FILTERS)),
39
+ domainFilter: Type.Optional(Type.Array(Type.String(), { maxItems: 100 })),
40
+ provider: Type.Optional(ProviderSelectionSchema),
41
+ }, { additionalProperties: false });
42
+ const FetchContentParams = Type.Object({
43
+ url: Type.Optional(Type.String({ minLength: 1, maxLength: 4_096 })),
44
+ urls: Type.Optional(Type.Array(Type.String({ minLength: 1, maxLength: 4_096 }), { minItems: 1, maxItems: 5 })),
45
+ forceClone: Type.Optional(Type.Boolean({ description: 'Clone a GitHub repository even when it exceeds the configured size threshold' })),
46
+ prompt: Type.Optional(Type.String({ minLength: 1, maxLength: 4_000, description: 'Trusted question required by answer mode' })),
47
+ mode: Type.Optional(StringEnum(['readable', 'raw', 'answer'])),
48
+ }, { additionalProperties: false });
49
+ const GetSearchContentParams = Type.Object({
50
+ responseId: Type.String({ minLength: 1, maxLength: 128 }),
51
+ query: Type.Optional(Type.String({ maxLength: 2_000 })),
52
+ queryIndex: Type.Optional(Type.Integer({ minimum: 0 })),
53
+ url: Type.Optional(Type.String({ maxLength: 4_096 })),
54
+ urlIndex: Type.Optional(Type.Integer({ minimum: 0 })),
55
+ offset: Type.Optional(Type.Integer({ minimum: 0 })),
56
+ limit: Type.Optional(Type.Integer({ minimum: 1, maximum: MAX_GET_CHARACTERS })),
57
+ findText: Type.Optional(Type.Union([
58
+ Type.String({ minLength: 1, maxLength: 500 }),
59
+ Type.Array(Type.String({ minLength: 1, maxLength: 500 }), { minItems: 1, maxItems: 10 }),
60
+ ])),
61
+ findMode: Type.Optional(StringEnum(FIND_MODES)),
62
+ }, { additionalProperties: false });
63
+ const webAccessExtension = (pi) => {
64
+ const store = new ResultStore(pi.appendEntry.bind(pi));
65
+ pi.registerCapability({
66
+ id: 'web-access',
67
+ instructions: WEB_CONTENT_CAPABILITY_INSTRUCTION,
68
+ });
69
+ pi.on('session_start', (_event, ctx) => store.restore(ctx));
70
+ pi.on('session_shutdown', () => store.clear());
71
+ pi.registerTool({
72
+ name: 'web_search',
73
+ label: 'Web Search',
74
+ description: 'Search the web with SearXNG, OpenAI, Exa, or Brave. Supports auto, all, or a non-empty array of named providers. Remote results are untrusted external data.',
75
+ promptSnippet: 'Search the web with bounded, untrusted result handling',
76
+ promptGuidelines: [WEB_CONTENT_CAPABILITY_INSTRUCTION],
77
+ parameters: WebSearchParams,
78
+ async execute(_toolCallId, params, signal, _onUpdate, ctx) {
79
+ const config = await loadConfig(pi.agentDir);
80
+ const selection = params.provider === undefined
81
+ ? configuredProvider(config) ?? 'auto'
82
+ : normalizeProviderSelection(params.provider);
83
+ const queries = normalizeQueries(params.query, params.queries);
84
+ const environment = { config, runtime: pi.runtime, ctx };
85
+ const queryRecords = [];
86
+ for (const query of queries) {
87
+ const searched = await searchProviders(query, selection, searchOptions(params, signal), environment);
88
+ const fetched = params.includeContent
89
+ ? await fetchSearchContent(searched.responses, pi, config, signal)
90
+ : searched.responses.flatMap((response) => response.inlineContent ?? []);
91
+ queryRecords.push({ query, responses: searched.responses, fetched, errors: searched.errors });
92
+ }
93
+ const id = generateResponseId();
94
+ const stored = { id, type: 'search', timestamp: Date.now(), queries: queryRecords };
95
+ store.put(stored);
96
+ return {
97
+ content: [{
98
+ type: 'text',
99
+ text: trustedResultText(id, { type: 'web_search', queries: queryRecords.map(queryRecordForModel) }, trustedStorageInstruction(queryRecords.flatMap((query) => query.fetched))),
100
+ }],
101
+ details: stored,
102
+ };
103
+ },
104
+ });
105
+ pi.registerTool({
106
+ name: 'source_check',
107
+ label: 'Source Check',
108
+ description: 'Check a claim against web sources and return a bounded research artifact with exact extracted passages.',
109
+ promptSnippet: 'Check a claim against bounded web evidence',
110
+ promptGuidelines: [WEB_CONTENT_CAPABILITY_INSTRUCTION],
111
+ parameters: SourceCheckParams,
112
+ async execute(_toolCallId, params, signal, _onUpdate, ctx) {
113
+ const config = await loadConfig(pi.agentDir);
114
+ const selection = params.provider === undefined
115
+ ? configuredProvider(config) ?? 'auto'
116
+ : normalizeProviderSelection(params.provider);
117
+ const environment = { config, runtime: pi.runtime, ctx };
118
+ const queries = params.queries?.map((query) => query.trim()).filter(Boolean) ?? [params.claim.trim()];
119
+ const responses = [];
120
+ const queryRecords = [];
121
+ const errors = [];
122
+ for (const query of queries) {
123
+ const searched = await searchProviders(query, selection, {
124
+ numResults: params.numResults ?? 5,
125
+ ...(params.recencyFilter ? { recencyFilter: params.recencyFilter } : {}),
126
+ ...(params.domainFilter ? { domainFilter: params.domainFilter } : {}),
127
+ ...(signal ? { signal } : {}),
128
+ }, environment);
129
+ responses.push(...searched.responses);
130
+ errors.push(...searched.errors.map((error) => ({ query, error: `${error.provider}: ${error.error}` })));
131
+ queryRecords.push({ query, responses: searched.responses, fetched: [], errors: searched.errors });
132
+ }
133
+ const results = deduplicateResults(responses.flatMap((response) => response.results)).slice(0, 20);
134
+ const fetched = params.fetchContent
135
+ ? await fetchWithConcurrency(results.slice(0, 5).map((result) => result.url), 3, (url) => extractContent(url, pi.runtime, config, signal, { allowGitHub: false }))
136
+ : [];
137
+ const id = generateResponseId();
138
+ const artifact = buildResearchArtifact({
139
+ id,
140
+ claim: params.claim.trim(),
141
+ provider: [...new Set(responses.map((response) => response.provider))].join(','),
142
+ results,
143
+ summaries: responses.map((response) => ({ provider: response.provider, text: response.answer })),
144
+ fetched,
145
+ ...(params.recencyFilter ? { recencyFilter: params.recencyFilter } : {}),
146
+ ...(params.domainFilter ? { domainFilter: params.domainFilter } : {}),
147
+ errors,
148
+ });
149
+ const stored = { id, type: 'research', timestamp: artifact.timestamp, artifact, urls: fetched, queries: queryRecords };
150
+ store.put(stored);
151
+ return {
152
+ content: [{ type: 'text', text: trustedResultText(id, artifact, 'Use get_search_content with this response ID for paging or exact text lookup.') }],
153
+ details: stored,
154
+ };
155
+ },
156
+ });
157
+ pi.registerTool({
158
+ name: 'fetch_content',
159
+ label: 'Fetch Content',
160
+ description: 'Fetch HTTP(S) pages as readable Markdown, exact text, direct images, PDF text, GitHub repository content, or a page-grounded answer.',
161
+ promptSnippet: 'Fetch secure HTTP(S) content with private-network protection',
162
+ promptGuidelines: [WEB_CONTENT_CAPABILITY_INSTRUCTION],
163
+ parameters: FetchContentParams,
164
+ async execute(_toolCallId, params, signal, _onUpdate, ctx) {
165
+ const urls = normalizeUrls(params.url, params.urls);
166
+ const mode = params.mode ?? 'readable';
167
+ if (mode === 'answer' && !params.prompt?.trim())
168
+ throw new Error('prompt is required when mode is answer');
169
+ const config = await loadConfig(pi.agentDir);
170
+ const pages = await fetchWithConcurrency(urls, 3, (url) => extractContent(url, pi.runtime, config, signal, {
171
+ mode: mode === 'raw' ? 'raw' : 'readable',
172
+ ...(params.forceClone !== undefined ? { forceClone: params.forceClone } : {}),
173
+ }));
174
+ const answer = mode === 'answer'
175
+ ? await answerFromPages(pages, params.prompt.trim(), ctx, signal)
176
+ : undefined;
177
+ const id = generateResponseId();
178
+ const stored = {
179
+ id,
180
+ type: 'fetch',
181
+ timestamp: Date.now(),
182
+ urls: pages,
183
+ ...(answer !== undefined ? { answer } : {}),
184
+ };
185
+ store.put(stored);
186
+ if (answer !== undefined) {
187
+ return {
188
+ content: [{
189
+ type: 'text',
190
+ text: trustedResultText(id, { type: 'answer', answer, sources: pages.map(pageMetadata) }, trustedStorageInstruction(pages)),
191
+ }],
192
+ details: imageDetails(stored, pages),
193
+ };
194
+ }
195
+ return { content: fetchedPageContent(id, pages), details: imageDetails(stored, pages) };
196
+ },
197
+ });
198
+ pi.registerTool({
199
+ name: 'get_search_content',
200
+ label: 'Get Search Content',
201
+ description: 'Retrieve bounded slices or exact, case-insensitive, or fuzzy matches from a previous web_search, source_check, or fetch_content result.',
202
+ promptSnippet: 'Retrieve stored web content by trusted response ID',
203
+ promptGuidelines: [WEB_CONTENT_CAPABILITY_INSTRUCTION],
204
+ parameters: GetSearchContentParams,
205
+ async execute(_toolCallId, params) {
206
+ if (params.findText !== undefined && (params.offset !== undefined || params.limit !== undefined)) {
207
+ throw new Error('findText cannot be combined with offset or limit');
208
+ }
209
+ const stored = store.get(params.responseId);
210
+ if (!stored)
211
+ throw new Error(`No current web result found for response ID ${params.responseId}`);
212
+ const selected = selectStoredContent(stored, params);
213
+ if (selected.page?.image && params.findText === undefined && params.offset === undefined && params.limit === undefined) {
214
+ return {
215
+ content: imageContent(params.responseId, selected.page),
216
+ details: { responseId: params.responseId, page: selected.page, trust: imageTrust(selected.page) },
217
+ };
218
+ }
219
+ const text = selected.text;
220
+ if (params.findText !== undefined) {
221
+ const queries = typeof params.findText === 'string' ? [params.findText] : params.findText;
222
+ const found = findContent(text, queries, (params.findMode ?? 'case-insensitive'));
223
+ return {
224
+ content: [{ type: 'text', text: trustedResultText(params.responseId, found, 'Match snippets are bounded to 20,000 characters.') }],
225
+ details: { responseId: params.responseId, ...found },
226
+ };
227
+ }
228
+ const offset = params.offset ?? 0;
229
+ if (offset > text.length)
230
+ throw new Error(`offset ${offset} exceeds content length ${text.length}`);
231
+ const limit = params.limit ?? MAX_GET_CHARACTERS;
232
+ const slice = text.slice(offset, offset + limit);
233
+ const end = offset + slice.length;
234
+ const paging = end < text.length
235
+ ? `Showing characters ${offset}-${end} of ${text.length}. Request offset ${end} for the next slice.`
236
+ : `Showing characters ${offset}-${end} of ${text.length}.`;
237
+ return {
238
+ content: [{ type: 'text', text: trustedResultText(params.responseId, { content: slice }, paging) }],
239
+ details: { responseId: params.responseId, offset, limit, totalCharacters: text.length },
240
+ };
241
+ },
242
+ });
243
+ };
244
+ function searchOptions(params, signal) {
245
+ return {
246
+ numResults: params.numResults ?? 5,
247
+ ...(params.recencyFilter ? { recencyFilter: params.recencyFilter } : {}),
248
+ ...(params.domainFilter ? { domainFilter: params.domainFilter } : {}),
249
+ ...(params.includeContent !== undefined ? { includeContent: params.includeContent } : {}),
250
+ ...(signal ? { signal } : {}),
251
+ };
252
+ }
253
+ function normalizeQueries(query, queries) {
254
+ if (query?.trim() && queries?.length)
255
+ throw new Error('Provide query or queries, not both');
256
+ const normalized = queries?.map((value) => value.trim()).filter(Boolean) ?? (query?.trim() ? [query.trim()] : []);
257
+ if (normalized.length === 0)
258
+ throw new Error('query or queries is required');
259
+ return [...new Set(normalized)];
260
+ }
261
+ function normalizeUrls(url, urls) {
262
+ if (url?.trim() && urls?.length)
263
+ throw new Error('Provide url or urls, not both');
264
+ const normalized = urls?.map((value) => value.trim()).filter(Boolean) ?? (url?.trim() ? [url.trim()] : []);
265
+ if (normalized.length === 0)
266
+ throw new Error('url or urls is required');
267
+ for (const value of normalized) {
268
+ let parsed;
269
+ try {
270
+ parsed = new URL(value);
271
+ }
272
+ catch {
273
+ throw new Error('URL must be an absolute HTTP(S) URL');
274
+ }
275
+ if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:')
276
+ throw new Error('Only HTTP and HTTPS URLs are supported');
277
+ if (parsed.username || parsed.password)
278
+ throw new Error('URLs with embedded credentials are not supported');
279
+ }
280
+ return [...new Set(normalized)];
281
+ }
282
+ async function fetchSearchContent(responses, pi, config, signal) {
283
+ const inline = responses.flatMap((response) => response.inlineContent ?? [])
284
+ .slice(0, MAX_INCLUDED_URLS)
285
+ .map(boundedStoredPage);
286
+ const inlineUrls = new Set(inline.map((page) => page.url));
287
+ const urls = [...new Set(responses.flatMap((response) => response.results.map((result) => result.url)))]
288
+ .filter((url) => !inlineUrls.has(url))
289
+ .slice(0, Math.max(0, MAX_INCLUDED_URLS - inline.length));
290
+ return [
291
+ ...inline,
292
+ ...await fetchWithConcurrency(urls, 3, (url) => extractContent(url, pi.runtime, config, signal, { allowGitHub: false })),
293
+ ];
294
+ }
295
+ async function answerFromPages(pages, prompt, ctx, signal) {
296
+ const model = ctx.model;
297
+ if (!model)
298
+ throw new Error('answer mode requires a selected Pi model');
299
+ if (pages.some((page) => page.image) && !model.input.includes('image')) {
300
+ throw new Error(`Selected model does not support image input: ${model.id}`);
301
+ }
302
+ const provider = ctx.modelRegistry.getProvider(model.provider);
303
+ if (!provider)
304
+ throw new Error(`Selected model provider is unavailable: ${model.provider}`);
305
+ const auth = await ctx.modelRegistry.getApiKeyAndHeaders(model);
306
+ if (!auth.ok)
307
+ throw new Error('Selected model authentication is unavailable');
308
+ const outputTokens = Math.max(1, Math.min(4_096, model.maxTokens));
309
+ const inputTokens = Math.max(0, Math.min(Math.floor(model.contextWindow * 0.6), model.contextWindow - outputTokens - 4_096));
310
+ const pageBudget = new PreviewBudget(Math.max(0, inputTokens * 4 - prompt.length - 4_000));
311
+ const remotePages = pages.filter((page) => !page.image).map((page) => pageForModel(page, pageBudget));
312
+ const content = [{
313
+ type: 'text',
314
+ text: [
315
+ WEB_CONTENT_CAPABILITY_INSTRUCTION,
316
+ 'Answer the trusted question using only the supplied external data. State when the data is insufficient.',
317
+ ...(pages.some((page) => page.truncated) ? ['Some supplied source content was truncated to bounded extraction limits.'] : []),
318
+ `Trusted question: ${prompt}`,
319
+ wrapUntrustedWebContent({ pages: remotePages }),
320
+ ].join('\n\n'),
321
+ }];
322
+ for (const page of pages.filter((candidate) => candidate.image)) {
323
+ content.push({ type: 'text', text: `${IMAGE_WARNING}\n\n${wrapUntrustedWebContent(pageMetadata(page))}` });
324
+ content.push({ type: 'image', data: page.image.data, mimeType: page.image.mimeType });
325
+ }
326
+ const stream = provider.streamSimple(model, {
327
+ systemPrompt: WEB_CONTENT_CAPABILITY_INSTRUCTION,
328
+ messages: [{ role: 'user', content, timestamp: Date.now() }],
329
+ }, {
330
+ ...(auth.apiKey ? { apiKey: auth.apiKey } : {}),
331
+ ...(auth.headers ? { headers: auth.headers } : {}),
332
+ ...(auth.env ? { env: auth.env } : {}),
333
+ signal: combinedSignal(signal, NESTED_ANSWER_TIMEOUT_MS),
334
+ maxTokens: outputTokens,
335
+ });
336
+ const response = await stream.result();
337
+ if (response.stopReason === 'aborted')
338
+ throw new Error('Nested answer request was aborted');
339
+ if (response.stopReason === 'error')
340
+ throw new Error('Nested answer request failed');
341
+ const answer = response.content.flatMap((part) => part.type === 'text' ? [part.text] : []).join('').trim();
342
+ if (!answer)
343
+ throw new Error('Nested answer request returned no text');
344
+ return answer.slice(0, MAX_MODEL_PREVIEW_CHARACTERS);
345
+ }
346
+ function fetchedPageContent(responseId, pages) {
347
+ const content = [];
348
+ const budget = new PreviewBudget(MAX_MODEL_PREVIEW_CHARACTERS);
349
+ const textPages = pages.filter((page) => !page.image).map((page) => pageForModel(page, budget));
350
+ if (textPages.length > 0) {
351
+ content.push({
352
+ type: 'text',
353
+ text: trustedResultText(responseId, { type: 'fetch', pages: textPages }, trustedStorageInstruction(pages)),
354
+ });
355
+ }
356
+ for (const page of pages.filter((candidate) => candidate.image).slice(0, 1)) {
357
+ const prefix = content.length === 0 ? `Response ID: ${responseId}\n\n` : '';
358
+ content.push({ type: 'text', text: `${prefix}${IMAGE_WARNING}\n\n${wrapUntrustedWebContent(pageMetadata(page))}` });
359
+ content.push({ type: 'image', data: page.image.data, mimeType: page.image.mimeType });
360
+ }
361
+ if (content.length === 0) {
362
+ content.push({ type: 'text', text: trustedResultText(responseId, { type: 'fetch', pages: [] }, trustedStorageInstruction(pages)) });
363
+ }
364
+ return content;
365
+ }
366
+ function imageContent(responseId, page) {
367
+ return [
368
+ { type: 'text', text: `Response ID: ${responseId}\n\n${IMAGE_WARNING}\n\n${wrapUntrustedWebContent(pageMetadata(page))}` },
369
+ { type: 'image', data: page.image.data, mimeType: page.image.mimeType },
370
+ ];
371
+ }
372
+ function pageForModel(page, budget = new PreviewBudget(MAX_MODEL_PREVIEW_CHARACTERS)) {
373
+ const content = budget.take(page.content, MAX_PAGE_PREVIEW_CHARACTERS);
374
+ return {
375
+ url: budget.take(page.url, 2_048).text,
376
+ title: budget.take(page.title, 500).text,
377
+ content: content.text,
378
+ totalCharacters: page.content.length,
379
+ previewTruncated: content.truncated,
380
+ error: page.error,
381
+ contentType: page.contentType,
382
+ };
383
+ }
384
+ function pageMetadata(page) {
385
+ return {
386
+ url: page.url.slice(0, 2_048),
387
+ title: page.title.slice(0, 500),
388
+ content: page.content.slice(0, 200),
389
+ error: page.error,
390
+ contentType: page.contentType,
391
+ trust: imageTrust(page),
392
+ };
393
+ }
394
+ function imageTrust(page) {
395
+ return { source: 'remote-web', untrusted: true, mimeType: page.image?.mimeType ?? page.contentType };
396
+ }
397
+ function imageDetails(stored, pages) {
398
+ const trust = pages.filter((page) => page.image).map((page) => ({ url: page.url, ...imageTrust(page) }));
399
+ return trust.length > 0 ? { ...stored, imageTrust: trust } : stored;
400
+ }
401
+ function queryRecordForModel(query) {
402
+ const budget = new PreviewBudget(MAX_MODEL_PREVIEW_CHARACTERS);
403
+ return {
404
+ query: query.query,
405
+ responses: query.responses.map((response) => ({
406
+ provider: response.provider,
407
+ answer: budget.take(response.answer, 6_000).text,
408
+ results: response.results.map((result) => ({
409
+ title: budget.take(result.title, 500).text,
410
+ url: budget.take(result.url, 2_048).text,
411
+ snippet: budget.take(result.snippet, 1_000).text,
412
+ })),
413
+ })),
414
+ fetched: query.fetched.map((page) => pageForModel(page, budget)),
415
+ errors: query.errors.map((error) => ({ ...error, error: budget.take(error.error, 500).text })),
416
+ };
417
+ }
418
+ function boundedStoredPage(page) {
419
+ if (page.content.length <= 750_000)
420
+ return page;
421
+ return { ...page, content: page.content.slice(0, 750_000), truncated: true };
422
+ }
423
+ class PreviewBudget {
424
+ maximum;
425
+ #used = 0;
426
+ constructor(maximum) {
427
+ this.maximum = maximum;
428
+ }
429
+ take(value, perItemMaximum) {
430
+ const available = Math.max(0, Math.min(perItemMaximum, this.maximum - this.#used));
431
+ const text = value.slice(0, available);
432
+ this.#used += text.length;
433
+ return { text, truncated: text.length < value.length };
434
+ }
435
+ }
436
+ function trustedStorageInstruction(pages) {
437
+ const truncation = pages.some((page) => page.truncated)
438
+ ? ' Some content was truncated to bounded extraction limits.'
439
+ : '';
440
+ return `Use get_search_content with this response ID for stored full content.${truncation}`;
441
+ }
442
+ function deduplicateResults(results) {
443
+ const seen = new Set();
444
+ return results.filter((result) => {
445
+ if (seen.has(result.url))
446
+ return false;
447
+ seen.add(result.url);
448
+ return true;
449
+ });
450
+ }
451
+ function selectStoredContent(stored, params) {
452
+ if (stored.type === 'fetch') {
453
+ const page = selectPage(stored.urls ?? [], params.url, params.urlIndex);
454
+ if (page)
455
+ return { text: page.content, page };
456
+ if (params.url !== undefined || params.urlIndex !== undefined)
457
+ throw new Error('Requested URL was not found in the stored fetch result');
458
+ return { text: JSON.stringify({ answer: stored.answer, urls: stored.urls }, null, 2) };
459
+ }
460
+ if (stored.type === 'research') {
461
+ if (params.query !== undefined || params.queryIndex !== undefined) {
462
+ const queries = stored.queries ?? [];
463
+ const query = params.query !== undefined
464
+ ? queries.find((candidate) => candidate.query === params.query)
465
+ : queries[params.queryIndex];
466
+ if (!query)
467
+ throw new Error('Requested query was not found in the stored research result');
468
+ return { text: JSON.stringify(query, null, 2) };
469
+ }
470
+ const page = selectPage(stored.urls ?? [], params.url, params.urlIndex);
471
+ if (page)
472
+ return { text: page.content, page };
473
+ if (params.url !== undefined || params.urlIndex !== undefined)
474
+ throw new Error('Requested URL was not found in the stored research result');
475
+ return { text: JSON.stringify(stored.artifact, null, 2) };
476
+ }
477
+ const queries = stored.queries ?? [];
478
+ const query = params.query !== undefined
479
+ ? queries.find((candidate) => candidate.query === params.query)
480
+ : params.queryIndex !== undefined ? queries[params.queryIndex] : queries.length === 1 ? queries[0] : undefined;
481
+ if (!query) {
482
+ if (params.query !== undefined || params.queryIndex !== undefined || queries.length !== 1) {
483
+ throw new Error('Select a stored search query with query or queryIndex');
484
+ }
485
+ return { text: JSON.stringify(queries, null, 2) };
486
+ }
487
+ const page = selectPage(query.fetched, params.url, params.urlIndex);
488
+ if (page)
489
+ return { text: page.content, page };
490
+ if (params.url !== undefined || params.urlIndex !== undefined)
491
+ throw new Error('Requested URL was not found in the selected search query');
492
+ return { text: JSON.stringify(query, null, 2) };
493
+ }
494
+ function selectPage(pages, url, index) {
495
+ if (url !== undefined)
496
+ return pages.find((page) => page.url === url);
497
+ if (index !== undefined)
498
+ return pages[index];
499
+ return undefined;
500
+ }
501
+ export default webAccessExtension;
502
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { AgentRuntime, ExtensionContext } from '@felan-ai/agent-core';
2
+ import { type WebAccessConfig } from './config.js';
3
+ import type { ProviderName, ProviderSelection, SearchOptions, SearchResponse } from './types.js';
4
+ export interface ProviderEnvironment {
5
+ config: WebAccessConfig;
6
+ runtime: AgentRuntime;
7
+ ctx: ExtensionContext;
8
+ }
9
+ export declare function providerAvailable(name: ProviderName, environment: ProviderEnvironment): Promise<boolean>;
10
+ export declare function searchProviders(query: string, selection: ProviderSelection, options: SearchOptions, environment: ProviderEnvironment): Promise<{
11
+ responses: SearchResponse[];
12
+ errors: Array<{
13
+ provider: ProviderName;
14
+ error: string;
15
+ }>;
16
+ }>;
17
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAIhE,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,cAAc,EAEf,MAAM,YAAY,CAAC;AAWpB,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,GAAG,EAAE,gBAAgB,CAAC;CACvB;AASD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAO9G;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,mBAAmB,GAC/B,OAAO,CAAC;IAAE,SAAS,EAAE,cAAc,EAAE,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAyCpG"}