sdlc-agent-4-enterprise-server 1.31.0 → 1.32.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 (72) hide show
  1. package/README.md +2 -1
  2. package/package.json +1 -1
  3. package/dist/modules/web/WebModule.d.ts +0 -25
  4. package/dist/modules/web/WebModule.js +0 -70
  5. package/dist/modules/web/WebModule.js.map +0 -1
  6. package/dist/modules/web/handlers/ApiCallHandler.d.ts +0 -16
  7. package/dist/modules/web/handlers/ApiCallHandler.js +0 -54
  8. package/dist/modules/web/handlers/ApiCallHandler.js.map +0 -1
  9. package/dist/modules/web/handlers/DownloadFileHandler.d.ts +0 -18
  10. package/dist/modules/web/handlers/DownloadFileHandler.js +0 -73
  11. package/dist/modules/web/handlers/DownloadFileHandler.js.map +0 -1
  12. package/dist/modules/web/handlers/FetchUrlHandler.d.ts +0 -23
  13. package/dist/modules/web/handlers/FetchUrlHandler.js +0 -106
  14. package/dist/modules/web/handlers/FetchUrlHandler.js.map +0 -1
  15. package/dist/modules/web/handlers/GitBrowseHandler.d.ts +0 -16
  16. package/dist/modules/web/handlers/GitBrowseHandler.js +0 -73
  17. package/dist/modules/web/handlers/GitBrowseHandler.js.map +0 -1
  18. package/dist/modules/web/handlers/ReadWebpageHandler.d.ts +0 -20
  19. package/dist/modules/web/handlers/ReadWebpageHandler.js +0 -70
  20. package/dist/modules/web/handlers/ReadWebpageHandler.js.map +0 -1
  21. package/dist/modules/web/handlers/WebSearchHandler.d.ts +0 -17
  22. package/dist/modules/web/handlers/WebSearchHandler.js +0 -70
  23. package/dist/modules/web/handlers/WebSearchHandler.js.map +0 -1
  24. package/dist/modules/web/middleware/ContentTruncator.d.ts +0 -14
  25. package/dist/modules/web/middleware/ContentTruncator.js +0 -23
  26. package/dist/modules/web/middleware/ContentTruncator.js.map +0 -1
  27. package/dist/modules/web/middleware/RateLimiter.d.ts +0 -19
  28. package/dist/modules/web/middleware/RateLimiter.js +0 -49
  29. package/dist/modules/web/middleware/RateLimiter.js.map +0 -1
  30. package/dist/modules/web/middleware/SsrfGuard.d.ts +0 -18
  31. package/dist/modules/web/middleware/SsrfGuard.js +0 -89
  32. package/dist/modules/web/middleware/SsrfGuard.js.map +0 -1
  33. package/dist/modules/web/models/WebError.d.ts +0 -10
  34. package/dist/modules/web/models/WebError.js +0 -15
  35. package/dist/modules/web/models/WebError.js.map +0 -1
  36. package/dist/modules/web/models/WebModuleConfig.d.ts +0 -17
  37. package/dist/modules/web/models/WebModuleConfig.js +0 -22
  38. package/dist/modules/web/models/WebModuleConfig.js.map +0 -1
  39. package/dist/modules/web/models/WebToolResult.d.ts +0 -7
  40. package/dist/modules/web/models/WebToolResult.js +0 -19
  41. package/dist/modules/web/models/WebToolResult.js.map +0 -1
  42. package/dist/modules/web/utils/GitUrlParser.d.ts +0 -12
  43. package/dist/modules/web/utils/GitUrlParser.js +0 -32
  44. package/dist/modules/web/utils/GitUrlParser.js.map +0 -1
  45. package/dist/modules/web/utils/HtmlExtractor.d.ts +0 -9
  46. package/dist/modules/web/utils/HtmlExtractor.js +0 -46
  47. package/dist/modules/web/utils/HtmlExtractor.js.map +0 -1
  48. package/dist/modules/web/utils/ResponseCache.d.ts +0 -19
  49. package/dist/modules/web/utils/ResponseCache.js +0 -54
  50. package/dist/modules/web/utils/ResponseCache.js.map +0 -1
  51. package/dist/modules/web/utils/UrlValidator.d.ts +0 -5
  52. package/dist/modules/web/utils/UrlValidator.js +0 -23
  53. package/dist/modules/web/utils/UrlValidator.js.map +0 -1
  54. package/src/modules/web/WebModule.ts +0 -79
  55. package/src/modules/web/__tests__/fetch-url-handler.test.ts +0 -147
  56. package/src/modules/web/__tests__/web-utils.test.ts +0 -286
  57. package/src/modules/web/handlers/ApiCallHandler.ts +0 -48
  58. package/src/modules/web/handlers/DownloadFileHandler.ts +0 -66
  59. package/src/modules/web/handlers/FetchUrlHandler.ts +0 -115
  60. package/src/modules/web/handlers/GitBrowseHandler.ts +0 -70
  61. package/src/modules/web/handlers/ReadWebpageHandler.ts +0 -59
  62. package/src/modules/web/handlers/WebSearchHandler.ts +0 -74
  63. package/src/modules/web/middleware/ContentTruncator.ts +0 -31
  64. package/src/modules/web/middleware/RateLimiter.ts +0 -70
  65. package/src/modules/web/middleware/SsrfGuard.ts +0 -82
  66. package/src/modules/web/models/WebError.ts +0 -25
  67. package/src/modules/web/models/WebModuleConfig.ts +0 -35
  68. package/src/modules/web/models/WebToolResult.ts +0 -23
  69. package/src/modules/web/utils/GitUrlParser.ts +0 -46
  70. package/src/modules/web/utils/HtmlExtractor.ts +0 -46
  71. package/src/modules/web/utils/ResponseCache.ts +0 -59
  72. package/src/modules/web/utils/UrlValidator.ts +0 -24
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  </p>
7
7
 
8
8
  <p align="center">
9
- <img src="https://img.shields.io/badge/version-1.31.0-blue?style=for-the-badge" alt="Version">
9
+ <img src="https://img.shields.io/badge/version-1.32.0-blue?style=for-the-badge" alt="Version">
10
10
  <img src="https://img.shields.io/badge/tools-66+-teal?style=for-the-badge" alt="Tools">
11
11
  <img src="https://img.shields.io/badge/node-%3E%3D18-green?style=for-the-badge" alt="Node">
12
12
  </p>
@@ -233,6 +233,7 @@ The embedding model is expected at `.code-intel/models/model.onnx`. Download it:
233
233
 
234
234
  | Version | Date | Ticket | Changes |
235
235
  |---------|------|--------|---------|
236
+ | 1.32.0 | 2026-08-19 | SA4E-184/186 | Web search native in extension (DuckDuckGo Lite, no SearXNG). Agent runtime routing with dynamic slash menu. WebModule removed from backend. |
236
237
  | 1.31.0 | 2026-08-19 | SA4E-196 | Fix GraphSyncService drops Pega symbols on re-index. readTopSymbols() now includes pega_* kinds via LIKE pattern. |
237
238
  | 1.30.1 | 2026-08-19 | SA4E-175/176/178/179 | Bug fixes: KB offline resilience, auth gate signaling, orphan task cleanup, CODE_ENRICHMENT rename. |
238
239
  | 1.26.0 | 2026-08-14 | SA4E-155 | On-demand KB entry enrichment: priority queue (HIGH/NORMAL column), configurable polling timeout (15s default), 3-tier fallback, COALESCE first-write-wins, ConfigService (Admin UI > ENV > Default), PendingTaskRepository priority-aware claimBatch(). |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sdlc-agent-4-enterprise-server",
3
- "version": "1.31.0",
3
+ "version": "1.32.0",
4
4
  "description": "Code Intelligence MCP Server — multi-agent SDLC pipeline with semantic memory, code graph, and draw.io integration",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -1,25 +0,0 @@
1
- /**
2
- * WebModule — Internet/Network tools for Kiro Chatbox.
3
- * Provides: fetch_url, web_search, git_clone_browse, download_file, api_call, read_webpage.
4
- */
5
- import type { IModule, ModuleStatus } from '../../types/module.js';
6
- import type { ToolHandler, ToolDefinition } from '../../types/tool.js';
7
- import type { Logger } from 'pino';
8
- export declare class WebModule implements IModule {
9
- readonly name = "web";
10
- private _status;
11
- private logger;
12
- private config;
13
- private fetchHandler;
14
- private searchHandler;
15
- private gitHandler;
16
- private downloadHandler;
17
- private apiHandler;
18
- private webpageHandler;
19
- constructor(logger: Logger);
20
- get status(): ModuleStatus;
21
- initialize(): Promise<void>;
22
- shutdown(): Promise<void>;
23
- getToolHandlers(): Map<string, ToolHandler>;
24
- getToolDefinitions(): ToolDefinition[];
25
- }
@@ -1,70 +0,0 @@
1
- /**
2
- * WebModule — Internet/Network tools for Kiro Chatbox.
3
- * Provides: fetch_url, web_search, git_clone_browse, download_file, api_call, read_webpage.
4
- */
5
- import { loadWebConfig } from './models/WebModuleConfig.js';
6
- import { SsrfGuard } from './middleware/SsrfGuard.js';
7
- import { RateLimiter } from './middleware/RateLimiter.js';
8
- import { ContentTruncator } from './middleware/ContentTruncator.js';
9
- import { FetchUrlHandler } from './handlers/FetchUrlHandler.js';
10
- import { WebSearchHandler } from './handlers/WebSearchHandler.js';
11
- import { GitBrowseHandler } from './handlers/GitBrowseHandler.js';
12
- import { DownloadFileHandler } from './handlers/DownloadFileHandler.js';
13
- import { ApiCallHandler } from './handlers/ApiCallHandler.js';
14
- import { ReadWebpageHandler } from './handlers/ReadWebpageHandler.js';
15
- import { loadConfig } from '../../engine/config.js';
16
- export class WebModule {
17
- name = 'web';
18
- _status = 'initializing';
19
- logger;
20
- config;
21
- fetchHandler;
22
- searchHandler;
23
- gitHandler;
24
- downloadHandler;
25
- apiHandler;
26
- webpageHandler;
27
- constructor(logger) { this.logger = logger.child({ module: this.name }); }
28
- get status() { return this._status; }
29
- async initialize() {
30
- this.logger.info('Initializing web module');
31
- const appConfig = loadConfig();
32
- this.config = loadWebConfig(appConfig.workspace);
33
- const ssrf = new SsrfGuard(this.config.ssrfBlocklist);
34
- const rl = new RateLimiter(this.config.rateLimitRpm);
35
- const ct = new ContentTruncator(this.config.maxResponseKb);
36
- this.fetchHandler = new FetchUrlHandler(ssrf, rl, ct, this.config);
37
- this.searchHandler = new WebSearchHandler(rl, this.config);
38
- this.gitHandler = new GitBrowseHandler(rl, this.config);
39
- this.downloadHandler = new DownloadFileHandler(ssrf, rl, this.config);
40
- this.apiHandler = new ApiCallHandler(ssrf, rl, ct, this.config);
41
- this.webpageHandler = new ReadWebpageHandler(ssrf, rl, ct, this.config);
42
- this._status = 'ready';
43
- this.logger.info('Web module ready');
44
- }
45
- async shutdown() {
46
- await this.webpageHandler?.shutdown();
47
- this._status = 'stopped';
48
- }
49
- getToolHandlers() {
50
- const h = new Map();
51
- h.set('fetch_url', (args) => this.fetchHandler.handle(args));
52
- h.set('web_search', (args) => this.searchHandler.handle(args));
53
- h.set('git_clone_browse', (args) => this.gitHandler.handle(args));
54
- h.set('download_file', (args) => this.downloadHandler.handle(args));
55
- h.set('api_call', (args) => this.apiHandler.handle(args));
56
- h.set('read_webpage', (args) => this.webpageHandler.handle(args));
57
- return h;
58
- }
59
- getToolDefinitions() {
60
- return [
61
- { name: 'fetch_url', description: 'Fetch content from a public URL', category: 'web', inputSchema: { type: 'object', properties: { url: { type: 'string' }, mode: { type: 'string', enum: ['full', 'truncated', 'selective'] }, max_length: { type: 'number' }, selector: { type: 'string' } }, required: ['url'] } },
62
- { name: 'web_search', description: 'Search the internet', category: 'web', inputSchema: { type: 'object', properties: { query: { type: 'string' }, num_results: { type: 'number' }, category: { type: 'string' }, language: { type: 'string' } }, required: ['query'] } },
63
- { name: 'git_clone_browse', description: 'Browse GitHub/GitLab repos via API', category: 'web', inputSchema: { type: 'object', properties: { repo_url: { type: 'string' }, operation: { type: 'string' }, path: { type: 'string' }, ref: { type: 'string' }, token: { type: 'string' } }, required: ['repo_url'] } },
64
- { name: 'download_file', description: 'Download file to workspace', category: 'web', inputSchema: { type: 'object', properties: { url: { type: 'string' }, dest_path: { type: 'string' }, overwrite: { type: 'boolean' } }, required: ['url'] } },
65
- { name: 'api_call', description: 'Make HTTP API calls', category: 'web', inputSchema: { type: 'object', properties: { url: { type: 'string' }, method: { type: 'string' }, headers: { type: 'object' }, body: {}, timeout: { type: 'number' } }, required: ['url'] } },
66
- { name: 'read_webpage', description: 'Render JS page and extract text', category: 'web', inputSchema: { type: 'object', properties: { url: { type: 'string' }, wait_for: { type: 'string' }, selector: { type: 'string' }, timeout: { type: 'number' }, block_resources: { type: 'array' } }, required: ['url'] } },
67
- ];
68
- }
69
- }
70
- //# sourceMappingURL=WebModule.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WebModule.js","sourceRoot":"","sources":["../../../src/modules/web/WebModule.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Handler for api_call tool. Makes HTTP API requests.
3
- */
4
- import type { ToolResult } from '../../../types/tool.js';
5
- import type { WebModuleConfig } from '../models/WebModuleConfig.js';
6
- import { SsrfGuard } from '../middleware/SsrfGuard.js';
7
- import { RateLimiter } from '../middleware/RateLimiter.js';
8
- import { ContentTruncator } from '../middleware/ContentTruncator.js';
9
- export declare class ApiCallHandler {
10
- private ssrfGuard;
11
- private rateLimiter;
12
- private truncator;
13
- private config;
14
- constructor(ssrfGuard: SsrfGuard, rateLimiter: RateLimiter, truncator: ContentTruncator, config: WebModuleConfig);
15
- handle(args: Record<string, unknown>): Promise<ToolResult>;
16
- }
@@ -1,54 +0,0 @@
1
- /**
2
- * Handler for api_call tool. Makes HTTP API requests.
3
- */
4
- import { validateUrl } from '../utils/UrlValidator.js';
5
- import { WebToolError } from '../models/WebError.js';
6
- import { successResult, errorResult } from '../models/WebToolResult.js';
7
- const ALLOWED_METHODS = new Set(['GET', 'POST', 'PUT', 'DELETE', 'PATCH']);
8
- export class ApiCallHandler {
9
- ssrfGuard;
10
- rateLimiter;
11
- truncator;
12
- config;
13
- constructor(ssrfGuard, rateLimiter, truncator, config) {
14
- this.ssrfGuard = ssrfGuard;
15
- this.rateLimiter = rateLimiter;
16
- this.truncator = truncator;
17
- this.config = config;
18
- }
19
- async handle(args) {
20
- try {
21
- const url = args.url;
22
- const method = (args.method || 'GET').toUpperCase();
23
- const headers = args.headers || {};
24
- const body = args.body;
25
- const timeout = Math.min(args.timeout || this.config.timeoutMs, 60000);
26
- if (!ALLOWED_METHODS.has(method))
27
- throw new WebToolError('INVALID_URL', 'Method must be GET/POST/PUT/DELETE/PATCH');
28
- validateUrl(url);
29
- await this.ssrfGuard.validate(url);
30
- this.rateLimiter.consumeOrThrow('api_call');
31
- const start = Date.now();
32
- const opts = { method, headers: { 'User-Agent': this.config.userAgent, ...headers }, signal: AbortSignal.timeout(timeout) };
33
- if (body && method !== 'GET') {
34
- opts.body = typeof body === 'string' ? body : JSON.stringify(body);
35
- if (!headers['Content-Type'] && typeof body === 'object')
36
- opts.headers['Content-Type'] = 'application/json';
37
- }
38
- const res = await fetch(url, opts);
39
- const resBody = await res.text();
40
- const truncated = this.truncator.truncate(resBody);
41
- const resHeaders = {};
42
- res.headers.forEach((v, k) => { resHeaders[k] = v; });
43
- return successResult({ status: res.status, headers: resHeaders, body: truncated.content, elapsed_ms: Date.now() - start });
44
- }
45
- catch (err) {
46
- if (err instanceof WebToolError)
47
- return errorResult(err);
48
- if (err.name === 'AbortError')
49
- return errorResult(new WebToolError('TIMEOUT', 'Request timed out'));
50
- return errorResult(new WebToolError('TIMEOUT', err.message));
51
- }
52
- }
53
- }
54
- //# sourceMappingURL=ApiCallHandler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ApiCallHandler.js","sourceRoot":"","sources":["../../../../src/modules/web/handlers/ApiCallHandler.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- /**
2
- * Handler for download_file tool.
3
- * Downloads files with size/extension validation.
4
- */
5
- import type { ToolResult } from '../../../types/tool.js';
6
- import type { WebModuleConfig } from '../models/WebModuleConfig.js';
7
- import { SsrfGuard } from '../middleware/SsrfGuard.js';
8
- import { RateLimiter } from '../middleware/RateLimiter.js';
9
- export declare class DownloadFileHandler {
10
- private ssrfGuard;
11
- private rateLimiter;
12
- private config;
13
- constructor(ssrfGuard: SsrfGuard, rateLimiter: RateLimiter, config: WebModuleConfig);
14
- handle(args: Record<string, unknown>): Promise<ToolResult>;
15
- private resolveFilename;
16
- private validateExtension;
17
- private resolvePath;
18
- }
@@ -1,73 +0,0 @@
1
- /**
2
- * Handler for download_file tool.
3
- * Downloads files with size/extension validation.
4
- */
5
- import { validateUrl } from '../utils/UrlValidator.js';
6
- import { WebToolError } from '../models/WebError.js';
7
- import { successResult, errorResult } from '../models/WebToolResult.js';
8
- import * as fs from 'fs';
9
- import * as path from 'path';
10
- import { Readable } from 'stream';
11
- import { pipeline } from 'stream/promises';
12
- export class DownloadFileHandler {
13
- ssrfGuard;
14
- rateLimiter;
15
- config;
16
- constructor(ssrfGuard, rateLimiter, config) {
17
- this.ssrfGuard = ssrfGuard;
18
- this.rateLimiter = rateLimiter;
19
- this.config = config;
20
- }
21
- async handle(args) {
22
- try {
23
- const url = args.url;
24
- const destPath = args.dest_path;
25
- validateUrl(url);
26
- await this.ssrfGuard.validate(url);
27
- this.rateLimiter.consumeOrThrow('download_file');
28
- const filename = this.resolveFilename(url, destPath);
29
- this.validateExtension(filename);
30
- const fullPath = this.resolvePath(filename);
31
- const res = await fetch(url, { headers: { 'User-Agent': this.config.userAgent }, signal: AbortSignal.timeout(this.config.timeoutMs) });
32
- if (!res.ok)
33
- throw new WebToolError('TIMEOUT', `Download failed: ${res.status}`);
34
- const cl = parseInt(res.headers.get('content-length') || '0', 10);
35
- if (cl > this.config.maxDownloadMb * 1024 * 1024)
36
- throw new WebToolError('CONTENT_TOO_LARGE', `File too large (max ${this.config.maxDownloadMb}MB)`);
37
- const dir = path.dirname(fullPath);
38
- if (!fs.existsSync(dir))
39
- fs.mkdirSync(dir, { recursive: true });
40
- if (res.body) {
41
- const s = Readable.fromWeb(res.body);
42
- await pipeline(s, fs.createWriteStream(fullPath));
43
- }
44
- const stats = fs.statSync(fullPath);
45
- return successResult({ path: path.relative(this.config.workspace, fullPath), filename: path.basename(fullPath), size: stats.size, content_type: res.headers.get('content-type') || '' });
46
- }
47
- catch (err) {
48
- if (err instanceof WebToolError)
49
- return errorResult(err);
50
- return errorResult(new WebToolError('TIMEOUT', err.message));
51
- }
52
- }
53
- resolveFilename(url, destPath) {
54
- if (destPath)
55
- return destPath;
56
- const urlPath = new URL(url).pathname;
57
- return path.basename(urlPath) || 'download';
58
- }
59
- validateExtension(filename) {
60
- const ext = path.extname(filename).toLowerCase();
61
- if (this.config.blockedExtensions.includes(ext)) {
62
- throw new WebToolError('BLOCKED_EXTENSION', `Blocked file type: ${ext}`);
63
- }
64
- }
65
- resolvePath(filename) {
66
- const resolved = path.resolve(this.config.workspace, filename);
67
- if (!resolved.startsWith(this.config.workspace)) {
68
- throw new WebToolError('INVALID_URL', 'Path must be within workspace');
69
- }
70
- return resolved;
71
- }
72
- }
73
- //# sourceMappingURL=DownloadFileHandler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DownloadFileHandler.js","sourceRoot":"","sources":["../../../../src/modules/web/handlers/DownloadFileHandler.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- /**
2
- * Handler for the fetch_url tool.
3
- * Fetches content from URLs with modes: full, truncated, selective.
4
- * Responses are cached in-memory (TTL: 5 min) to avoid redundant external calls.
5
- */
6
- import type { ToolResult } from '../../../types/tool.js';
7
- import type { WebModuleConfig } from '../models/WebModuleConfig.js';
8
- import { SsrfGuard } from '../middleware/SsrfGuard.js';
9
- import { RateLimiter } from '../middleware/RateLimiter.js';
10
- import { ContentTruncator } from '../middleware/ContentTruncator.js';
11
- export declare class FetchUrlHandler {
12
- private ssrfGuard;
13
- private rateLimiter;
14
- private truncator;
15
- private config;
16
- private htmlExtractor;
17
- private cache;
18
- constructor(ssrfGuard: SsrfGuard, rateLimiter: RateLimiter, truncator: ContentTruncator, config: WebModuleConfig);
19
- handle(args: Record<string, unknown>): Promise<ToolResult>;
20
- private fetchWithTimeout;
21
- private processContent;
22
- private extractTitle;
23
- }
@@ -1,106 +0,0 @@
1
- /**
2
- * Handler for the fetch_url tool.
3
- * Fetches content from URLs with modes: full, truncated, selective.
4
- * Responses are cached in-memory (TTL: 5 min) to avoid redundant external calls.
5
- */
6
- import { HtmlExtractor } from '../utils/HtmlExtractor.js';
7
- import { validateUrl } from '../utils/UrlValidator.js';
8
- import { WebToolError } from '../models/WebError.js';
9
- import { successResult, errorResult } from '../models/WebToolResult.js';
10
- import { ResponseCache } from '../utils/ResponseCache.js';
11
- /** Cache key: url + mode + selector (content varies by these params). */
12
- function cacheKey(url, mode, selector) {
13
- return `${mode}::${selector || ''}::${url}`;
14
- }
15
- export class FetchUrlHandler {
16
- ssrfGuard;
17
- rateLimiter;
18
- truncator;
19
- config;
20
- htmlExtractor = new HtmlExtractor();
21
- // Cache fetch results for 5 minutes to avoid hammering the same URL
22
- cache = new ResponseCache(5 * 60 * 1000, 200);
23
- constructor(ssrfGuard, rateLimiter, truncator, config) {
24
- this.ssrfGuard = ssrfGuard;
25
- this.rateLimiter = rateLimiter;
26
- this.truncator = truncator;
27
- this.config = config;
28
- }
29
- async handle(args) {
30
- try {
31
- const url = args.url;
32
- const mode = args.mode || 'full';
33
- const maxLength = args.max_length;
34
- const selector = args.selector;
35
- // no_cache: bypass cache when caller explicitly requests fresh content
36
- const noCache = args.no_cache === true;
37
- validateUrl(url);
38
- await this.ssrfGuard.validate(url);
39
- const key = cacheKey(url, mode, selector);
40
- if (!noCache) {
41
- const cached = this.cache.get(key);
42
- if (cached)
43
- return cached;
44
- }
45
- this.rateLimiter.consumeOrThrow('fetch_url');
46
- const response = await this.fetchWithTimeout(url);
47
- const body = await response.text();
48
- const content = this.processContent(body, mode, maxLength, selector);
49
- const result = this.truncator.truncate(content, maxLength);
50
- const toolResult = successResult({
51
- content: result.content,
52
- metadata: {
53
- status_code: response.status,
54
- content_type: response.headers.get('content-type') || '',
55
- content_length: result.originalLength,
56
- title: this.extractTitle(body),
57
- truncated: result.truncated,
58
- url: response.url,
59
- cached: false,
60
- },
61
- });
62
- this.cache.set(key, toolResult);
63
- return toolResult;
64
- }
65
- catch (err) {
66
- if (err instanceof WebToolError)
67
- return errorResult(err);
68
- return errorResult(new WebToolError('TIMEOUT', err.message));
69
- }
70
- }
71
- async fetchWithTimeout(url) {
72
- const controller = new AbortController();
73
- const timeout = setTimeout(() => controller.abort(), this.config.timeoutMs);
74
- try {
75
- return await fetch(url, {
76
- signal: controller.signal,
77
- headers: { 'User-Agent': this.config.userAgent },
78
- redirect: 'follow',
79
- });
80
- }
81
- catch (err) {
82
- if (err.name === 'AbortError') {
83
- throw new WebToolError('TIMEOUT', `Request timed out after ${this.config.timeoutMs}ms`);
84
- }
85
- throw err;
86
- }
87
- finally {
88
- clearTimeout(timeout);
89
- }
90
- }
91
- processContent(body, mode, maxLength, selector) {
92
- switch (mode) {
93
- case 'selective':
94
- return selector ? this.htmlExtractor.extractBySelector(body, selector) : this.htmlExtractor.toText(body);
95
- case 'truncated':
96
- return this.htmlExtractor.toText(body).slice(0, maxLength || 50000);
97
- default:
98
- return this.htmlExtractor.toText(body);
99
- }
100
- }
101
- extractTitle(html) {
102
- const match = html.match(/<title[^>]*>([^<]+)<\/title>/i);
103
- return match ? match[1].trim() : '';
104
- }
105
- }
106
- //# sourceMappingURL=FetchUrlHandler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FetchUrlHandler.js","sourceRoot":"","sources":["../../../../src/modules/web/handlers/FetchUrlHandler.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Handler for git_clone_browse tool.
3
- * Browses GitHub/GitLab repos via REST API.
4
- */
5
- import type { ToolResult } from '../../../types/tool.js';
6
- import type { WebModuleConfig } from '../models/WebModuleConfig.js';
7
- import { RateLimiter } from '../middleware/RateLimiter.js';
8
- export declare class GitBrowseHandler {
9
- private rateLimiter;
10
- private config;
11
- constructor(rateLimiter: RateLimiter, config: WebModuleConfig);
12
- handle(args: Record<string, unknown>): Promise<ToolResult>;
13
- private github;
14
- private gitlab;
15
- private formatGH;
16
- }
@@ -1,73 +0,0 @@
1
- /**
2
- * Handler for git_clone_browse tool.
3
- * Browses GitHub/GitLab repos via REST API.
4
- */
5
- import { parseGitUrl } from '../utils/GitUrlParser.js';
6
- import { WebToolError } from '../models/WebError.js';
7
- import { successResult, errorResult } from '../models/WebToolResult.js';
8
- export class GitBrowseHandler {
9
- rateLimiter;
10
- config;
11
- constructor(rateLimiter, config) {
12
- this.rateLimiter = rateLimiter;
13
- this.config = config;
14
- }
15
- async handle(args) {
16
- try {
17
- const repoUrl = args.repo_url;
18
- const operation = args.operation || 'readme';
19
- const filePath = args.path;
20
- const ref = args.ref || 'HEAD';
21
- const token = args.token;
22
- this.rateLimiter.consumeOrThrow('git_clone_browse');
23
- const parsed = parseGitUrl(repoUrl);
24
- const headers = { 'User-Agent': this.config.userAgent };
25
- if (token)
26
- headers['Authorization'] = `Bearer ${token}`;
27
- if (parsed.host === 'github.com') {
28
- return await this.github(parsed.owner, parsed.repo, operation, filePath, ref, headers);
29
- }
30
- return await this.gitlab(parsed.owner, parsed.repo, operation, filePath, ref, headers);
31
- }
32
- catch (err) {
33
- if (err instanceof WebToolError)
34
- return errorResult(err);
35
- return errorResult(new WebToolError('TIMEOUT', err.message));
36
- }
37
- }
38
- async github(owner, repo, op, path, ref, headers) {
39
- const base = `https://api.github.com/repos/${owner}/${repo}`;
40
- const url = op === 'tree' ? `${base}/git/trees/${ref}?recursive=1`
41
- : op === 'read_file' ? `${base}/contents/${path}?ref=${ref}` : `${base}/readme`;
42
- const res = await fetch(url, { headers, signal: AbortSignal.timeout(this.config.timeoutMs) });
43
- if (res.status === 404)
44
- throw new WebToolError('DNS_FAILED', 'Repository or file not found');
45
- if (!res.ok)
46
- throw new WebToolError('TIMEOUT', `GitHub API error: ${res.status}`);
47
- const data = await res.json();
48
- return successResult(this.formatGH(op, data, owner, repo, ref));
49
- }
50
- async gitlab(owner, repo, op, path, ref, headers) {
51
- const pid = encodeURIComponent(`${owner}/${repo}`);
52
- const base = `https://gitlab.com/api/v4/projects/${pid}/repository`;
53
- const url = op === 'tree' ? `${base}/tree?recursive=true&ref=${ref}`
54
- : op === 'read_file' ? `${base}/files/${encodeURIComponent(path || '')}/raw?ref=${ref}`
55
- : `${base}/files/README.md/raw?ref=${ref || 'main'}`;
56
- const res = await fetch(url, { headers, signal: AbortSignal.timeout(this.config.timeoutMs) });
57
- if (res.status === 404)
58
- throw new WebToolError('DNS_FAILED', 'Not found');
59
- if (!res.ok)
60
- throw new WebToolError('TIMEOUT', `GitLab error: ${res.status}`);
61
- const content = op === 'tree' ? await res.json() : await res.text();
62
- return successResult({ content, repo: `${owner}/${repo}`, ref });
63
- }
64
- formatGH(op, data, owner, repo, ref) {
65
- if (op === 'tree') {
66
- const tree = data.tree || [];
67
- return { tree: tree.map(f => ({ path: f.path, type: f.type, size: f.size })), repo: `${owner}/${repo}`, ref, total_files: tree.length };
68
- }
69
- const content = data.encoding === 'base64' ? Buffer.from(data.content, 'base64').toString() : data.content;
70
- return { content, path: data.path, size: data.size, encoding: 'utf-8' };
71
- }
72
- }
73
- //# sourceMappingURL=GitBrowseHandler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GitBrowseHandler.js","sourceRoot":"","sources":["../../../../src/modules/web/handlers/GitBrowseHandler.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- /**
2
- * Handler for read_webpage tool. Renders JS pages via Playwright.
3
- */
4
- import type { ToolResult } from '../../../types/tool.js';
5
- import type { WebModuleConfig } from '../models/WebModuleConfig.js';
6
- import { SsrfGuard } from '../middleware/SsrfGuard.js';
7
- import { RateLimiter } from '../middleware/RateLimiter.js';
8
- import { ContentTruncator } from '../middleware/ContentTruncator.js';
9
- export declare class ReadWebpageHandler {
10
- private ssrfGuard;
11
- private rateLimiter;
12
- private truncator;
13
- private config;
14
- private browser;
15
- private activeContexts;
16
- constructor(ssrfGuard: SsrfGuard, rateLimiter: RateLimiter, truncator: ContentTruncator, config: WebModuleConfig);
17
- handle(args: Record<string, unknown>): Promise<ToolResult>;
18
- private getBrowser;
19
- shutdown(): Promise<void>;
20
- }