@staticn0va/wigolo 1.0.1 → 1.1.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.
- package/dist/agent/executor.d.ts +21 -1
- package/dist/agent/executor.d.ts.map +1 -1
- package/dist/agent/executor.js +115 -1
- package/dist/agent/executor.js.map +1 -1
- package/dist/agent/pipeline.js +1 -1
- package/dist/agent/pipeline.js.map +1 -1
- package/dist/agent/planner.d.ts +4 -0
- package/dist/agent/planner.d.ts.map +1 -1
- package/dist/agent/planner.js +19 -3
- package/dist/agent/planner.js.map +1 -1
- package/dist/agent/relevance.d.ts +15 -0
- package/dist/agent/relevance.d.ts.map +1 -0
- package/dist/agent/relevance.js +62 -0
- package/dist/agent/relevance.js.map +1 -0
- package/dist/cache/store.d.ts +1 -0
- package/dist/cache/store.d.ts.map +1 -1
- package/dist/cache/store.js +20 -0
- package/dist/cache/store.js.map +1 -1
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/daemon.js +4 -0
- package/dist/cli/daemon.js.map +1 -1
- package/dist/fetch/playwright-tier.d.ts +19 -0
- package/dist/fetch/playwright-tier.d.ts.map +1 -0
- package/dist/fetch/playwright-tier.js +78 -0
- package/dist/fetch/playwright-tier.js.map +1 -0
- package/dist/fetch/router.d.ts +30 -3
- package/dist/fetch/router.d.ts.map +1 -1
- package/dist/fetch/router.js +107 -8
- package/dist/fetch/router.js.map +1 -1
- package/dist/instructions.d.ts +2 -2
- package/dist/instructions.js +2 -2
- package/dist/logger.d.ts +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/repl/commands/agent.d.ts.map +1 -1
- package/dist/repl/commands/agent.js +13 -1
- package/dist/repl/commands/agent.js.map +1 -1
- package/dist/repl/commands/extract.d.ts.map +1 -1
- package/dist/repl/commands/extract.js +9 -1
- package/dist/repl/commands/extract.js.map +1 -1
- package/dist/repl/commands/fetch.d.ts.map +1 -1
- package/dist/repl/commands/fetch.js +14 -1
- package/dist/repl/commands/fetch.js.map +1 -1
- package/dist/repl/commands/find-similar.d.ts.map +1 -1
- package/dist/repl/commands/find-similar.js +13 -1
- package/dist/repl/commands/find-similar.js.map +1 -1
- package/dist/repl/commands/research.d.ts.map +1 -1
- package/dist/repl/commands/research.js +14 -1
- package/dist/repl/commands/research.js.map +1 -1
- package/dist/repl/commands/search.d.ts.map +1 -1
- package/dist/repl/commands/search.js +11 -1
- package/dist/repl/commands/search.js.map +1 -1
- package/dist/search/answer-synthesis.d.ts +15 -1
- package/dist/search/answer-synthesis.d.ts.map +1 -1
- package/dist/search/answer-synthesis.js +65 -0
- package/dist/search/answer-synthesis.js.map +1 -1
- package/dist/search/find-similar.js +6 -1
- package/dist/search/find-similar.js.map +1 -1
- package/dist/search/language-filter.d.ts +29 -0
- package/dist/search/language-filter.d.ts.map +1 -0
- package/dist/search/language-filter.js +96 -0
- package/dist/search/language-filter.js.map +1 -0
- package/dist/search/multi-query.d.ts +1 -0
- package/dist/search/multi-query.d.ts.map +1 -1
- package/dist/search/multi-query.js +5 -0
- package/dist/search/multi-query.js.map +1 -1
- package/dist/server/tool-schemas.js +4 -4
- package/dist/server/tool-schemas.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +58 -20
- package/dist/server.js.map +1 -1
- package/dist/tools/agent.d.ts +2 -2
- package/dist/tools/agent.d.ts.map +1 -1
- package/dist/tools/agent.js +26 -17
- package/dist/tools/agent.js.map +1 -1
- package/dist/tools/crawl.d.ts.map +1 -1
- package/dist/tools/crawl.js +16 -1
- package/dist/tools/crawl.js.map +1 -1
- package/dist/tools/extract.d.ts +2 -2
- package/dist/tools/extract.d.ts.map +1 -1
- package/dist/tools/extract.js +47 -26
- package/dist/tools/extract.js.map +1 -1
- package/dist/tools/fetch.d.ts +2 -2
- package/dist/tools/fetch.d.ts.map +1 -1
- package/dist/tools/fetch.js +35 -13
- package/dist/tools/fetch.js.map +1 -1
- package/dist/tools/find-similar.d.ts +2 -2
- package/dist/tools/find-similar.d.ts.map +1 -1
- package/dist/tools/find-similar.js +56 -15
- package/dist/tools/find-similar.js.map +1 -1
- package/dist/tools/research.d.ts +2 -2
- package/dist/tools/research.d.ts.map +1 -1
- package/dist/tools/research.js +24 -16
- package/dist/tools/research.js.map +1 -1
- package/dist/tools/search.d.ts +2 -2
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +161 -92
- package/dist/tools/search.js.map +1 -1
- package/dist/types.d.ts +18 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -1
- package/dist/types.js.map +1 -1
- package/dist/util/mode.d.ts +2 -2
- package/dist/util/mode.d.ts.map +1 -1
- package/dist/util/mode.js +23 -4
- package/dist/util/mode.js.map +1 -1
- package/package.json +2 -1
package/dist/tools/fetch.js
CHANGED
|
@@ -10,6 +10,10 @@ import { resolveMode } from '../util/mode.js';
|
|
|
10
10
|
import { createLogger } from '../logger.js';
|
|
11
11
|
const log = createLogger('fetch');
|
|
12
12
|
const DEFAULT_MAX_TOKENS_OUT = 4000;
|
|
13
|
+
// Fetch is single-URL — users explicitly want the body. Keep a generous cap
|
|
14
|
+
// that fits typical MCP tool-result limits (~25k tokens) but prevents huge
|
|
15
|
+
// pages (full doc sites) from blowing the cap. Override via max_tokens_out.
|
|
16
|
+
const DEFAULT_FETCH_BODY_TOKENS = 16000;
|
|
13
17
|
async function attachEvidence(output, input, markdown) {
|
|
14
18
|
if (!markdown)
|
|
15
19
|
return;
|
|
@@ -23,7 +27,7 @@ async function attachEvidence(output, input, markdown) {
|
|
|
23
27
|
}
|
|
24
28
|
else if (output.markdown) {
|
|
25
29
|
output.markdown = applyOutputBudget(output.markdown, {
|
|
26
|
-
maxTokensOut: input.max_tokens_out,
|
|
30
|
+
maxTokensOut: input.max_tokens_out ?? DEFAULT_FETCH_BODY_TOKENS,
|
|
27
31
|
maxChars: input.max_chars,
|
|
28
32
|
});
|
|
29
33
|
}
|
|
@@ -62,7 +66,7 @@ export async function handleFetch(input, router) {
|
|
|
62
66
|
if (!input.force_refresh) {
|
|
63
67
|
const cached = getCachedContent(input.url);
|
|
64
68
|
if (cached && (!input.actions || input.actions.length === 0)) {
|
|
65
|
-
const staleMaxSeconds = mode === '
|
|
69
|
+
const staleMaxSeconds = mode === 'cache' ? getConfig().fastStaleMaxHours * 3600 : 0;
|
|
66
70
|
const { usable, stale } = isCacheUsable(cached, { staleMaxSeconds });
|
|
67
71
|
if (usable) {
|
|
68
72
|
log.info('Serving from cache', { url: input.url, stale });
|
|
@@ -71,18 +75,39 @@ export async function handleFetch(input, router) {
|
|
|
71
75
|
out.stale = true;
|
|
72
76
|
const fullMarkdown = out.markdown;
|
|
73
77
|
await attachEvidence(out, input, fullMarkdown);
|
|
74
|
-
return out;
|
|
78
|
+
return { ok: true, data: out };
|
|
75
79
|
}
|
|
76
80
|
}
|
|
77
81
|
}
|
|
82
|
+
if (mode === 'cache') {
|
|
83
|
+
return {
|
|
84
|
+
ok: false,
|
|
85
|
+
error: 'cache_miss',
|
|
86
|
+
error_reason: `URL not in cache: ${input.url}`,
|
|
87
|
+
stage: 'fetch',
|
|
88
|
+
hint: 'Use mode:default to fetch live, or run search/crawl first to populate cache',
|
|
89
|
+
};
|
|
90
|
+
}
|
|
78
91
|
const raw = await router.fetch(input.url, {
|
|
79
|
-
renderJs:
|
|
92
|
+
renderJs: input.render_js ?? 'auto',
|
|
80
93
|
useAuth: input.use_auth ?? false,
|
|
81
94
|
headers: input.headers,
|
|
82
95
|
screenshot: input.screenshot,
|
|
83
96
|
actions: input.actions,
|
|
84
97
|
mode,
|
|
85
98
|
});
|
|
99
|
+
// T11: stealth mode can return a StageError (e.g., playwright_not_installed,
|
|
100
|
+
// playwright_fetch_failed). Surface it directly.
|
|
101
|
+
if ('error' in raw && typeof raw.error === 'string') {
|
|
102
|
+
const stageErr = raw;
|
|
103
|
+
return {
|
|
104
|
+
ok: false,
|
|
105
|
+
error: stageErr.error,
|
|
106
|
+
error_reason: stageErr.error_reason ?? stageErr.error,
|
|
107
|
+
stage: stageErr.stage ?? 'fetch',
|
|
108
|
+
...(stageErr.hint ? { hint: stageErr.hint } : {}),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
86
111
|
const extraction = await extractContent(raw.html, raw.finalUrl, {
|
|
87
112
|
maxChars: input.max_chars,
|
|
88
113
|
section: input.section,
|
|
@@ -133,19 +158,16 @@ export async function handleFetch(input, router) {
|
|
|
133
158
|
} : {}),
|
|
134
159
|
};
|
|
135
160
|
await attachEvidence(out, input, finalMarkdown);
|
|
136
|
-
return out;
|
|
161
|
+
return { ok: true, data: out };
|
|
137
162
|
}
|
|
138
163
|
catch (err) {
|
|
139
164
|
log.error('Fetch failed', { url: input.url, error: String(err) });
|
|
165
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
140
166
|
return {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
links: [],
|
|
146
|
-
images: [],
|
|
147
|
-
cached: false,
|
|
148
|
-
error: err instanceof Error ? err.message : String(err),
|
|
167
|
+
ok: false,
|
|
168
|
+
error: 'fetch_failed',
|
|
169
|
+
error_reason: msg,
|
|
170
|
+
stage: 'fetch',
|
|
149
171
|
};
|
|
150
172
|
}
|
|
151
173
|
}
|
package/dist/tools/fetch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/tools/fetch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AAElC,MAAM,sBAAsB,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/tools/fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { FindSimilarInput, FindSimilarOutput, SearchEngine } from '../types.js';
|
|
1
|
+
import type { FindSimilarInput, FindSimilarOutput, SearchEngine, StageResult } from '../types.js';
|
|
2
2
|
import type { SmartRouter } from '../fetch/router.js';
|
|
3
3
|
import type { BackendStatus } from '../server/backend-status.js';
|
|
4
|
-
export declare function handleFindSimilar(input: FindSimilarInput, engines: SearchEngine[], router: SmartRouter, backendStatus?: BackendStatus): Promise<FindSimilarOutput
|
|
4
|
+
export declare function handleFindSimilar(input: FindSimilarInput, engines: SearchEngine[], router: SmartRouter, backendStatus?: BackendStatus): Promise<StageResult<FindSimilarOutput>>;
|
|
5
5
|
//# sourceMappingURL=find-similar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-similar.d.ts","sourceRoot":"","sources":["../../src/tools/find-similar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,
|
|
1
|
+
{"version":3,"file":"find-similar.d.ts","sourceRoot":"","sources":["../../src/tools/find-similar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EAEZ,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAgBjE,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE,WAAW,EACnB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAwFzC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { findSimilar } from '../search/find-similar.js';
|
|
2
2
|
import { buildEvidenceFromMarkdown, applyTokenBudget, applyAggregateMarkdownBudget, } from '../search/evidence.js';
|
|
3
|
+
import * as cacheStore from '../cache/store.js';
|
|
4
|
+
import * as searchTool from './search.js';
|
|
3
5
|
import { createLogger } from '../logger.js';
|
|
4
6
|
const log = createLogger('search');
|
|
5
7
|
const MAX_RESULTS_CAP = 50;
|
|
@@ -10,13 +12,10 @@ export async function handleFindSimilar(input, engines, router, backendStatus) {
|
|
|
10
12
|
const concept = input.concept?.trim();
|
|
11
13
|
if (!url && !concept) {
|
|
12
14
|
return {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
embedding_available: false,
|
|
18
|
-
error: 'Either url or concept must be provided',
|
|
19
|
-
total_time_ms: 0,
|
|
15
|
+
ok: false,
|
|
16
|
+
error: 'invalid_input',
|
|
17
|
+
error_reason: 'Either url or concept must be provided',
|
|
18
|
+
stage: 'find_similar',
|
|
20
19
|
};
|
|
21
20
|
}
|
|
22
21
|
const sanitizedInput = {
|
|
@@ -32,20 +31,62 @@ export async function handleFindSimilar(input, engines, router, backendStatus) {
|
|
|
32
31
|
includeCache: sanitizedInput.include_cache,
|
|
33
32
|
includeWeb: sanitizedInput.include_web,
|
|
34
33
|
});
|
|
34
|
+
let cacheSeeded = false;
|
|
35
|
+
if (url) {
|
|
36
|
+
try {
|
|
37
|
+
const u = new URL(url);
|
|
38
|
+
const host = u.hostname;
|
|
39
|
+
const cachedCount = cacheStore.countCachedUrlsForDomain(host);
|
|
40
|
+
if (cachedCount < 5) {
|
|
41
|
+
const rawSeg = u.pathname.split('/').filter(Boolean).pop() ?? '';
|
|
42
|
+
let lastSeg = rawSeg;
|
|
43
|
+
try {
|
|
44
|
+
lastSeg = decodeURIComponent(rawSeg);
|
|
45
|
+
}
|
|
46
|
+
catch { /* leave raw */ }
|
|
47
|
+
const seedQuery = (lastSeg.replace(/[-_]/g, ' ') +
|
|
48
|
+
' ' +
|
|
49
|
+
host.replace(/^www\./, '').split('.')[0]).trim();
|
|
50
|
+
if (seedQuery.length > 0) {
|
|
51
|
+
try {
|
|
52
|
+
await searchTool.handleSearch({ query: seedQuery }, engines, router, backendStatus);
|
|
53
|
+
cacheSeeded = true;
|
|
54
|
+
}
|
|
55
|
+
catch (seedErr) {
|
|
56
|
+
log.warn('find_similar cold-start seed failed', {
|
|
57
|
+
error: seedErr instanceof Error ? seedErr.message : String(seedErr),
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch (parseErr) {
|
|
64
|
+
log.warn('find_similar cold-start url parse failed', {
|
|
65
|
+
error: parseErr instanceof Error ? parseErr.message : String(parseErr),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
35
69
|
const out = await findSimilar(sanitizedInput, engines, router, backendStatus);
|
|
36
70
|
await attachEvidence(out, input);
|
|
37
|
-
|
|
71
|
+
if (cacheSeeded)
|
|
72
|
+
out.cache_seeded = true;
|
|
73
|
+
if (out.error) {
|
|
74
|
+
return {
|
|
75
|
+
ok: false,
|
|
76
|
+
error: out.error,
|
|
77
|
+
error_reason: out.error,
|
|
78
|
+
stage: 'find_similar',
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
return { ok: true, data: out };
|
|
38
82
|
}
|
|
39
83
|
catch (err) {
|
|
40
84
|
log.error('handleFindSimilar failed', { error: String(err) });
|
|
41
85
|
return {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
embedding_available: false,
|
|
47
|
-
error: `find_similar handler error: ${err instanceof Error ? err.message : String(err)}`,
|
|
48
|
-
total_time_ms: 0,
|
|
86
|
+
ok: false,
|
|
87
|
+
error: 'find_similar_failed',
|
|
88
|
+
error_reason: `find_similar handler error: ${err instanceof Error ? err.message : String(err)}`,
|
|
89
|
+
stage: 'find_similar',
|
|
49
90
|
};
|
|
50
91
|
}
|
|
51
92
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-similar.js","sourceRoot":"","sources":["../../src/tools/find-similar.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"find-similar.js","sourceRoot":"","sources":["../../src/tools/find-similar.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/research.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ResearchInput, ResearchOutput, SearchEngine } from '../types.js';
|
|
1
|
+
import type { ResearchInput, ResearchOutput, SearchEngine, StageResult } from '../types.js';
|
|
2
2
|
import type { SmartRouter } from '../fetch/router.js';
|
|
3
3
|
import type { SamplingCapableServer } from '../search/sampling.js';
|
|
4
|
-
export declare function handleResearch(input: ResearchInput, engines: SearchEngine[], router: SmartRouter, _backendStatus?: unknown, server?: SamplingCapableServer): Promise<ResearchOutput
|
|
4
|
+
export declare function handleResearch(input: ResearchInput, engines: SearchEngine[], router: SmartRouter, _backendStatus?: unknown, server?: SamplingCapableServer): Promise<StageResult<ResearchOutput>>;
|
|
5
5
|
//# sourceMappingURL=research.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../src/tools/research.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAEV,aAAa,EACb,cAAc,EACd,YAAY,
|
|
1
|
+
{"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../src/tools/research.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAEV,aAAa,EACb,cAAc,EACd,YAAY,EACZ,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAQnE,wBAAsB,cAAc,CAClC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE,WAAW,EACnB,cAAc,CAAC,EAAE,OAAO,EACxB,MAAM,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAkDtC"}
|
package/dist/tools/research.js
CHANGED
|
@@ -7,20 +7,19 @@ const VALID_DEPTHS = new Set(['quick', 'standard', 'comprehensive']);
|
|
|
7
7
|
const MAX_SOURCES_LIMIT = 50;
|
|
8
8
|
const DEFAULT_MAX_TOKENS_OUT = 4000;
|
|
9
9
|
export async function handleResearch(input, engines, router, _backendStatus, server) {
|
|
10
|
-
const start = Date.now();
|
|
11
10
|
try {
|
|
12
11
|
if (!input.question || typeof input.question !== 'string' || input.question.trim().length === 0) {
|
|
13
|
-
return
|
|
12
|
+
return invalidInput('question is required and must be a non-empty string');
|
|
14
13
|
}
|
|
15
14
|
if (input.depth && !VALID_DEPTHS.has(input.depth)) {
|
|
16
|
-
return
|
|
15
|
+
return invalidInput(`depth must be one of: quick, standard, comprehensive. Got: "${input.depth}"`);
|
|
17
16
|
}
|
|
18
17
|
if (input.max_sources !== undefined) {
|
|
19
18
|
if (typeof input.max_sources !== 'number' || input.max_sources < 1) {
|
|
20
|
-
return
|
|
19
|
+
return invalidInput('max_sources must be a positive number');
|
|
21
20
|
}
|
|
22
21
|
if (input.max_sources > MAX_SOURCES_LIMIT) {
|
|
23
|
-
return
|
|
22
|
+
return invalidInput(`max_sources must be at most ${MAX_SOURCES_LIMIT}`);
|
|
24
23
|
}
|
|
25
24
|
}
|
|
26
25
|
log.info('research request received', {
|
|
@@ -30,14 +29,27 @@ export async function handleResearch(input, engines, router, _backendStatus, ser
|
|
|
30
29
|
});
|
|
31
30
|
const out = await runResearchPipeline(input, engines, router, server);
|
|
32
31
|
await attachEvidence(out, input);
|
|
33
|
-
|
|
32
|
+
if (out.error) {
|
|
33
|
+
return {
|
|
34
|
+
ok: false,
|
|
35
|
+
error: out.error,
|
|
36
|
+
error_reason: out.error,
|
|
37
|
+
stage: 'research',
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
return { ok: true, data: out };
|
|
34
41
|
}
|
|
35
42
|
catch (err) {
|
|
36
43
|
log.error('research handler failed', {
|
|
37
44
|
question: input.question?.slice(0, 100),
|
|
38
45
|
error: err instanceof Error ? err.message : String(err),
|
|
39
46
|
});
|
|
40
|
-
return
|
|
47
|
+
return {
|
|
48
|
+
ok: false,
|
|
49
|
+
error: 'research_failed',
|
|
50
|
+
error_reason: err instanceof Error ? err.message : String(err),
|
|
51
|
+
stage: 'research',
|
|
52
|
+
};
|
|
41
53
|
}
|
|
42
54
|
}
|
|
43
55
|
async function attachEvidence(out, input) {
|
|
@@ -68,16 +80,12 @@ async function attachEvidence(out, input) {
|
|
|
68
80
|
applyAggregateMarkdownBudget(out.sources, (s) => s.markdown_content ?? '', (s, body) => { s.markdown_content = body; }, { maxTokensOut });
|
|
69
81
|
}
|
|
70
82
|
}
|
|
71
|
-
function
|
|
83
|
+
function invalidInput(error_reason) {
|
|
72
84
|
return {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
depth: input.depth ?? 'standard',
|
|
78
|
-
total_time_ms: Date.now() - start,
|
|
79
|
-
sampling_supported: false,
|
|
80
|
-
error,
|
|
85
|
+
ok: false,
|
|
86
|
+
error: 'invalid_input',
|
|
87
|
+
error_reason,
|
|
88
|
+
stage: 'research',
|
|
81
89
|
};
|
|
82
90
|
}
|
|
83
91
|
//# sourceMappingURL=research.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"research.js","sourceRoot":"","sources":["../../src/tools/research.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"research.js","sourceRoot":"","sources":["../../src/tools/research.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/search.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { SearchInput, SearchOutput, SearchEngine, ProgressCallback } from '../types.js';
|
|
1
|
+
import type { SearchInput, SearchOutput, SearchEngine, ProgressCallback, StageResult } from '../types.js';
|
|
2
2
|
import type { SmartRouter } from '../fetch/router.js';
|
|
3
3
|
import type { BackendStatus } from '../server/backend-status.js';
|
|
4
4
|
import type { SamplingCapableServer } from '../search/sampling.js';
|
|
5
|
-
export declare function handleSearch(input: SearchInput, engines: SearchEngine[], router: SmartRouter, backendStatus?: BackendStatus, samplingServer?: SamplingCapableServer, onProgress?: ProgressCallback): Promise<SearchOutput
|
|
5
|
+
export declare function handleSearch(input: SearchInput, engines: SearchEngine[], router: SmartRouter, backendStatus?: BackendStatus, samplingServer?: SamplingCapableServer, onProgress?: ProgressCallback): Promise<StageResult<SearchOutput>>;
|
|
6
6
|
//# sourceMappingURL=search.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAoB,YAAY,EAAmB,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAoB,YAAY,EAAmB,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC7I,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAOjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAoBnE,wBAAsB,YAAY,CAChC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE,WAAW,EACnB,aAAa,CAAC,EAAE,aAAa,EAC7B,cAAc,CAAC,EAAE,qBAAqB,EACtC,UAAU,CAAC,EAAE,gBAAgB,GAC5B,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAmcpC"}
|