dsh-web-search-enhanced 0.2.2 → 0.2.4
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/README.md +11 -2
- package/lib/client.cjs +98 -61
- package/lib/client.cjs.map +1 -1
- package/lib/index.js +185 -52
- package/package.json +60 -60
package/lib/index.js
CHANGED
|
@@ -150,10 +150,23 @@ function decodeJsonEscapes(value) {
|
|
|
150
150
|
}
|
|
151
151
|
//#endregion
|
|
152
152
|
//#region ../core/src/host/adapter.ts
|
|
153
|
+
/** The default: generic wording with the generic explanation, as today. */
|
|
154
|
+
const statusVerdict = (response) => ({
|
|
155
|
+
kind: "status",
|
|
156
|
+
detail: response.explanation
|
|
157
|
+
});
|
|
153
158
|
function mapWire(wire, map) {
|
|
159
|
+
const parseFailure = wire.parseFailure === void 0 ? void 0 : wire.parseFailure.bind(wire);
|
|
154
160
|
const mapped = {
|
|
155
161
|
request: (input, endpoint, auth) => wire.request(input, endpoint, auth),
|
|
156
|
-
parse: (payload, input) => map(wire.parse(payload, input))
|
|
162
|
+
parse: (payload, input) => map(wire.parse(payload, input)),
|
|
163
|
+
...parseFailure === void 0 ? {} : { parseFailure(response, input) {
|
|
164
|
+
const verdict = parseFailure(response, input);
|
|
165
|
+
return verdict.kind === "status" ? verdict : {
|
|
166
|
+
kind: "outcome",
|
|
167
|
+
outcome: map(verdict.outcome)
|
|
168
|
+
};
|
|
169
|
+
} }
|
|
157
170
|
};
|
|
158
171
|
const route = wire.keyless;
|
|
159
172
|
if (route === void 0) return mapped;
|
|
@@ -216,8 +229,7 @@ function runAdapter(io, wire, target, input, signal) {
|
|
|
216
229
|
}, deadline, upstream);
|
|
217
230
|
return route.parse(result, input);
|
|
218
231
|
}
|
|
219
|
-
|
|
220
|
-
return wire.parse(await io.transport.requestJson(request, deadline, upstream), input);
|
|
232
|
+
return await runRest(io, wire, wire.request(input, target.endpoint, { kind: "keyless" }), input, deadline, upstream);
|
|
221
233
|
}
|
|
222
234
|
const stored = storedApiKey(await adapterCredential(io, target.credentialRef, deadline));
|
|
223
235
|
if (stored.kind === "missing") throw io.errors.error("WEB_PROVIDER_CREDENTIAL_MISSING", io.credentialMissing(target.credentialRef));
|
|
@@ -229,17 +241,23 @@ function runAdapter(io, wire, target, input, signal) {
|
|
|
229
241
|
onDiagnostic: io.onDiagnostic,
|
|
230
242
|
matcher
|
|
231
243
|
};
|
|
232
|
-
|
|
244
|
+
return await runRest(io, wire, wire.request(input, target.endpoint, {
|
|
233
245
|
kind: "api-key",
|
|
234
246
|
key: stored.key
|
|
235
|
-
});
|
|
236
|
-
return redactJson(wire.parse(await io.transport.requestJson(request, deadline, upstream), input), matcher);
|
|
247
|
+
}), input, deadline, upstream);
|
|
237
248
|
} catch (error) {
|
|
238
249
|
if (error instanceof WebError) throw error;
|
|
239
250
|
throw redactDiagnostic(error, matcher === void 0 ? secretMatcher([]) : matcher);
|
|
240
251
|
}
|
|
241
252
|
});
|
|
242
253
|
}
|
|
254
|
+
async function runRest(io, wire, request, input, signal, upstream) {
|
|
255
|
+
const exchange = await io.transport.exchangeJson(request, signal, upstream);
|
|
256
|
+
if (exchange.kind === "ok") return redactJson(wire.parse(exchange.payload, input), upstream.matcher);
|
|
257
|
+
const verdict = wire.parseFailure === void 0 ? statusVerdict(exchange.response) : wire.parseFailure(exchange.response, input);
|
|
258
|
+
if (verdict.kind === "status") throw io.transport.statusFailure(exchange.response.status, upstream, verdict.detail);
|
|
259
|
+
return verdict.outcome;
|
|
260
|
+
}
|
|
243
261
|
async function adapterCredential(io, ref, signal) {
|
|
244
262
|
try {
|
|
245
263
|
return await io.errors.abortable(io.credential(ref), signal);
|
|
@@ -304,9 +322,8 @@ function createTransport(errors, { timeoutMs, maxResponseBytes, messages }) {
|
|
|
304
322
|
clearTimeout(timer);
|
|
305
323
|
}
|
|
306
324
|
}
|
|
307
|
-
async function
|
|
325
|
+
async function exchangeResponse(request, signal, upstream, matcher) {
|
|
308
326
|
throwIfAborted(signal);
|
|
309
|
-
const matcher = upstream.matcher === void 0 ? secretMatcher([]) : upstream.matcher;
|
|
310
327
|
let response;
|
|
311
328
|
try {
|
|
312
329
|
response = await fetch(request.url, {
|
|
@@ -321,14 +338,25 @@ function createTransport(errors, { timeoutMs, maxResponseBytes, messages }) {
|
|
|
321
338
|
throwIfAborted(signal);
|
|
322
339
|
throw capabilityError("WEB_PROVIDER_ERROR", messages.unreachable(upstream.label));
|
|
323
340
|
}
|
|
324
|
-
if (
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
341
|
+
if (response.ok) return {
|
|
342
|
+
kind: "ok",
|
|
343
|
+
response
|
|
344
|
+
};
|
|
345
|
+
const body = await readFailureText(response, signal, upstream, matcher);
|
|
346
|
+
return {
|
|
347
|
+
kind: "failure",
|
|
348
|
+
response: failureResponse(response.status, body.text, matcher, body.truncated)
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
async function send(request, signal, upstream) {
|
|
352
|
+
const exchange = await exchangeResponse(request, signal, upstream, upstream.matcher === void 0 ? secretMatcher([]) : upstream.matcher);
|
|
353
|
+
if (exchange.kind === "failure") throw statusFailure(exchange.response.status, upstream, exchange.response.explanation);
|
|
354
|
+
return exchange.response;
|
|
355
|
+
}
|
|
356
|
+
function statusFailure(status, upstream, detail) {
|
|
357
|
+
const failure = statusError(status, upstream);
|
|
358
|
+
if (detail === void 0) return failure;
|
|
359
|
+
return new WebError(failure.message + upstreamSuffix(upstream.label, detail), failure.code);
|
|
332
360
|
}
|
|
333
361
|
function statusError(status, { label, access }) {
|
|
334
362
|
if (status === 401 || status === 403) {
|
|
@@ -448,12 +476,19 @@ function createTransport(errors, { timeoutMs, maxResponseBytes, messages }) {
|
|
|
448
476
|
}
|
|
449
477
|
return payload;
|
|
450
478
|
}
|
|
451
|
-
async function
|
|
479
|
+
async function exchangeJson(request, signal, upstream) {
|
|
452
480
|
const matcher = upstream.matcher === void 0 ? secretMatcher([]) : upstream.matcher;
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
481
|
+
const exchange = await exchangeResponse(request, signal, upstream, matcher);
|
|
482
|
+
if (exchange.kind === "failure") return exchange;
|
|
483
|
+
return {
|
|
484
|
+
kind: "ok",
|
|
485
|
+
payload: redactJson(await readJson(exchange.response, signal, upstream.onDiagnostic, matcher), matcher)
|
|
486
|
+
};
|
|
487
|
+
}
|
|
488
|
+
async function requestJson(request, signal, upstream) {
|
|
489
|
+
const exchange = await exchangeJson(request, signal, upstream);
|
|
490
|
+
if (exchange.kind === "failure") throw statusFailure(exchange.response.status, upstream, exchange.response.explanation);
|
|
491
|
+
return exchange.payload;
|
|
457
492
|
}
|
|
458
493
|
function invalidResponse(detail) {
|
|
459
494
|
return capabilityError("WEB_PROVIDER_ERROR", messages.invalidResponse(detail));
|
|
@@ -467,6 +502,8 @@ function createTransport(errors, { timeoutMs, maxResponseBytes, messages }) {
|
|
|
467
502
|
readText,
|
|
468
503
|
readJson,
|
|
469
504
|
requestJson,
|
|
505
|
+
exchangeJson,
|
|
506
|
+
statusFailure,
|
|
470
507
|
invalidResponse
|
|
471
508
|
};
|
|
472
509
|
}
|
|
@@ -479,26 +516,55 @@ function upstreamText(value) {
|
|
|
479
516
|
const boundary = last >= 55296 && last <= 56319 ? 1998 : 1999;
|
|
480
517
|
return text.slice(0, boundary) + "…";
|
|
481
518
|
}
|
|
519
|
+
function screenedText(value) {
|
|
520
|
+
return value.trim() === "" ? void 0 : {
|
|
521
|
+
kind: "text",
|
|
522
|
+
text: value
|
|
523
|
+
};
|
|
524
|
+
}
|
|
525
|
+
/** Text from a successful body, already redacted by transport: uncut, never withheld. */
|
|
526
|
+
function bodyDetail(value) {
|
|
527
|
+
return typeof value === "string" ? screenedText(value) : void 0;
|
|
528
|
+
}
|
|
482
529
|
/** Sensitive raw explanations are withheld, not precisely edited. */
|
|
483
530
|
function upstreamDetail(value, matcher, truncated = false) {
|
|
484
531
|
if (containsSecret(value, matcher)) return { kind: "withheld" };
|
|
485
|
-
|
|
486
|
-
return text === void 0 ? void 0 : {
|
|
487
|
-
kind: "text",
|
|
488
|
-
text
|
|
489
|
-
};
|
|
532
|
+
return screenedText(truncated ? stripPrefix(value, matcher) : value);
|
|
490
533
|
}
|
|
491
534
|
function upstreamSuffix(label, detail) {
|
|
492
535
|
if (detail === void 0) return "";
|
|
493
|
-
if (
|
|
494
|
-
|
|
536
|
+
if ("text" in detail) {
|
|
537
|
+
const text = upstreamText(detail.text);
|
|
538
|
+
return text === void 0 ? "" : "\n\n" + label + " responded (untrusted): " + text;
|
|
539
|
+
}
|
|
540
|
+
return "\n\n" + label + "'s response was withheld because it contained this request's credential.";
|
|
495
541
|
}
|
|
496
542
|
function stripPrefix(text, matcher) {
|
|
497
543
|
for (let length = Math.min(7, text.length); length > 0; length--) if (matcher.prefixes.has(text.slice(-length))) return text.slice(0, -length);
|
|
498
544
|
return text;
|
|
499
545
|
}
|
|
500
|
-
function
|
|
501
|
-
|
|
546
|
+
function failureResponse(status, body, matcher, truncated) {
|
|
547
|
+
const sensitive = containsSecret(body, matcher);
|
|
548
|
+
return {
|
|
549
|
+
status,
|
|
550
|
+
json: truncated ? void 0 : redactJson(failureJson(body), matcher),
|
|
551
|
+
explanation: failureExplanation(body, matcher, truncated, sensitive),
|
|
552
|
+
explain(value) {
|
|
553
|
+
if (sensitive) return { kind: "withheld" };
|
|
554
|
+
return typeof value === "string" ? upstreamDetail(value, matcher) : void 0;
|
|
555
|
+
}
|
|
556
|
+
};
|
|
557
|
+
}
|
|
558
|
+
function failureJson(body) {
|
|
559
|
+
try {
|
|
560
|
+
return JSON.parse(body);
|
|
561
|
+
} catch (error) {
|
|
562
|
+
if (!(error instanceof SyntaxError)) throw error;
|
|
563
|
+
return;
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
function failureExplanation(body, matcher, truncated, sensitive) {
|
|
567
|
+
if (sensitive) return { kind: "withheld" };
|
|
502
568
|
const text = truncated ? stripPrefix(body, matcher) : body;
|
|
503
569
|
let payload;
|
|
504
570
|
try {
|
|
@@ -14484,9 +14550,9 @@ function settingsRow(options) {
|
|
|
14484
14550
|
} catch (error) {
|
|
14485
14551
|
ctx.logger.warn("%s: invalid initial " + capabilityLabel + " settings: %s", identity.rowId, error);
|
|
14486
14552
|
}
|
|
14487
|
-
ctx.on("internal/config",
|
|
14553
|
+
ctx.on("internal/config", (fiber, next) => {
|
|
14488
14554
|
const raw = next();
|
|
14489
|
-
if (
|
|
14555
|
+
if (fiber === ctx.fiber) resolve(read(Config(raw)));
|
|
14490
14556
|
return raw;
|
|
14491
14557
|
});
|
|
14492
14558
|
ctx.inject(["settings"], (scope) => {
|
|
@@ -15146,11 +15212,9 @@ function oneLine(value, max) {
|
|
|
15146
15212
|
const last = flat.charCodeAt(max - 2);
|
|
15147
15213
|
return flat.slice(0, last >= 55296 && last <= 56319 ? max - 2 : max - 1) + "…";
|
|
15148
15214
|
}
|
|
15149
|
-
function nextModel(
|
|
15150
|
-
const
|
|
15151
|
-
|
|
15152
|
-
const request = agent.session.requestHeader();
|
|
15153
|
-
return complete(request === void 0 ? agent.options : request.config);
|
|
15215
|
+
function nextModel(_ctx, agent) {
|
|
15216
|
+
const current = agent.model.current();
|
|
15217
|
+
return current === void 0 ? void 0 : complete(current);
|
|
15154
15218
|
}
|
|
15155
15219
|
function complete(value) {
|
|
15156
15220
|
if (!value.provider || !value.model) return void 0;
|
|
@@ -15318,13 +15382,9 @@ function sessionOrigin(header) {
|
|
|
15318
15382
|
parent,
|
|
15319
15383
|
seeded
|
|
15320
15384
|
};
|
|
15321
|
-
return
|
|
15385
|
+
return {
|
|
15322
15386
|
kind: "top-level",
|
|
15323
15387
|
seeded
|
|
15324
|
-
} : {
|
|
15325
|
-
kind: "fork",
|
|
15326
|
-
parent,
|
|
15327
|
-
seeded
|
|
15328
15388
|
};
|
|
15329
15389
|
}
|
|
15330
15390
|
function parentOf(origin) {
|
|
@@ -15332,10 +15392,12 @@ function parentOf(origin) {
|
|
|
15332
15392
|
}
|
|
15333
15393
|
//#endregion
|
|
15334
15394
|
//#region ../core/src/host/provider-lists.ts
|
|
15335
|
-
/**
|
|
15395
|
+
/** Public lifecycle offsets distinguish a fresh ordinary fork from its persisted resume. */
|
|
15336
15396
|
function isNewConversation(session) {
|
|
15337
15397
|
const origin = sessionOrigin(session.header);
|
|
15338
|
-
|
|
15398
|
+
if (origin.kind === "subagent") return false;
|
|
15399
|
+
if (origin.seeded) return session.firstLifecycleSeq === session.inheritedEventCount;
|
|
15400
|
+
return session.firstLiveSeq === 0 && session.firstLifecycleSeq === 0;
|
|
15339
15401
|
}
|
|
15340
15402
|
/** Immutable conversation authorization, sharing the selection queue and storage lifetime. */
|
|
15341
15403
|
var ProviderLists = class {
|
|
@@ -15468,7 +15530,7 @@ var Sessions = class {
|
|
|
15468
15530
|
const origin = sessionOrigin(target.header);
|
|
15469
15531
|
const parentSession = parentOf(origin);
|
|
15470
15532
|
const seeded = parentSession !== void 0 && origin.seeded;
|
|
15471
|
-
let inherited = stored !== void 0 &&
|
|
15533
|
+
let inherited = stored !== void 0 && (stored.inherited ?? (seeded && table.get(parentSession) !== void 0));
|
|
15472
15534
|
if (stored === void 0 && seeded) {
|
|
15473
15535
|
const parentAgent = this.ctx.get("agents")?.get(parentSession);
|
|
15474
15536
|
if (parentAgent !== void 0 && persist) await this.current(liveSession(parentAgent));
|
|
@@ -16617,7 +16679,7 @@ function envelope(payload) {
|
|
|
16617
16679
|
payload.message
|
|
16618
16680
|
]) {
|
|
16619
16681
|
if (typeof candidate !== "string") continue;
|
|
16620
|
-
detail =
|
|
16682
|
+
detail = bodyDetail(candidate);
|
|
16621
16683
|
if (detail !== void 0) break;
|
|
16622
16684
|
}
|
|
16623
16685
|
return {
|
|
@@ -16935,6 +16997,54 @@ const tinyfishSearch = {
|
|
|
16935
16997
|
}
|
|
16936
16998
|
};
|
|
16937
16999
|
//#endregion
|
|
17000
|
+
//#region ../core/src/host/providers/anysearch.ts
|
|
17001
|
+
/** AnySearch REST search and extract. The catalog offers personal keys only; there is no anonymous route here. */
|
|
17002
|
+
/** 402 means the quota is spent; its body is ignored (for anonymous callers it carries a generated account). */
|
|
17003
|
+
function quotaVerdict(response) {
|
|
17004
|
+
return response.status === 402 ? {
|
|
17005
|
+
kind: "status",
|
|
17006
|
+
detail: void 0
|
|
17007
|
+
} : void 0;
|
|
17008
|
+
}
|
|
17009
|
+
const anysearchSearch = {
|
|
17010
|
+
request(input, endpoint, auth) {
|
|
17011
|
+
return postJson(endpoint, bearer(auth), {
|
|
17012
|
+
...input.options,
|
|
17013
|
+
query: input.query,
|
|
17014
|
+
...count("max_results", input.maxResults, 10)
|
|
17015
|
+
});
|
|
17016
|
+
},
|
|
17017
|
+
parse(payload) {
|
|
17018
|
+
if (!isRecord(payload)) return {
|
|
17019
|
+
kind: "failure",
|
|
17020
|
+
failure: "invalid",
|
|
17021
|
+
reason: "not-object"
|
|
17022
|
+
};
|
|
17023
|
+
if (typeof payload.code !== "number") return {
|
|
17024
|
+
kind: "failure",
|
|
17025
|
+
failure: "invalid",
|
|
17026
|
+
reason: "code-number"
|
|
17027
|
+
};
|
|
17028
|
+
if (payload.code !== 0) return {
|
|
17029
|
+
kind: "failure",
|
|
17030
|
+
failure: "api",
|
|
17031
|
+
detail: bodyDetail(payload.message)
|
|
17032
|
+
};
|
|
17033
|
+
const rows = isRecord(payload.data) ? payload.data.results : void 0;
|
|
17034
|
+
if (!Array.isArray(rows)) return {
|
|
17035
|
+
kind: "failure",
|
|
17036
|
+
failure: "invalid",
|
|
17037
|
+
reason: "data-results-array"
|
|
17038
|
+
};
|
|
17039
|
+
return mapRows(rows, (row) => ({
|
|
17040
|
+
url: row.url,
|
|
17041
|
+
title: row.title,
|
|
17042
|
+
snippet: text$1(row.snippet) ?? row.content
|
|
17043
|
+
}));
|
|
17044
|
+
},
|
|
17045
|
+
parseFailure: (response) => quotaVerdict(response) ?? statusVerdict(response)
|
|
17046
|
+
};
|
|
17047
|
+
//#endregion
|
|
16938
17048
|
//#region ../core/src/host/providers/openalex.ts
|
|
16939
17049
|
/** OpenAlex works search, scholarly field mapping and bounded inverted abstracts. */
|
|
16940
17050
|
/** OpenAlex asks anonymous clients to identify themselves for the polite pool. */
|
|
@@ -17431,7 +17541,7 @@ const { withDeadline, readJson, requestJson, invalidResponse } = transport;
|
|
|
17431
17541
|
const mcp = createMcpClient(transport, searchErrors, {
|
|
17432
17542
|
clientInfo: {
|
|
17433
17543
|
name: SEARCH.packageName,
|
|
17434
|
-
version: "0.2.
|
|
17544
|
+
version: "0.2.4"
|
|
17435
17545
|
},
|
|
17436
17546
|
messages: {
|
|
17437
17547
|
toolFailed: (label, detail) => label + " could not complete the search; retry later or choose another search connection" + upstreamSuffix(label, detail),
|
|
@@ -17780,6 +17890,30 @@ const CATALOG = {
|
|
|
17780
17890
|
}
|
|
17781
17891
|
}
|
|
17782
17892
|
},
|
|
17893
|
+
anysearch: {
|
|
17894
|
+
label: "AnySearch",
|
|
17895
|
+
endpoint: "https://api.anysearch.com/v1/search",
|
|
17896
|
+
access: {
|
|
17897
|
+
keyless: false,
|
|
17898
|
+
apiKey: { credentialRef: "ANYSEARCH_API_KEY" },
|
|
17899
|
+
account: false
|
|
17900
|
+
},
|
|
17901
|
+
kind: "adapter",
|
|
17902
|
+
remote: true,
|
|
17903
|
+
optIn: true,
|
|
17904
|
+
freshness: [],
|
|
17905
|
+
homepage: "https://www.anysearch.com",
|
|
17906
|
+
options: {
|
|
17907
|
+
zone: {
|
|
17908
|
+
kind: "enum",
|
|
17909
|
+
values: ["cn", "intl"]
|
|
17910
|
+
},
|
|
17911
|
+
language: {
|
|
17912
|
+
kind: "text",
|
|
17913
|
+
pattern: /^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8}){0,2}$/u
|
|
17914
|
+
}
|
|
17915
|
+
}
|
|
17916
|
+
},
|
|
17783
17917
|
openalex: {
|
|
17784
17918
|
label: "OpenAlex",
|
|
17785
17919
|
endpoint: "https://api.openalex.org/works",
|
|
@@ -18157,6 +18291,8 @@ contract.options;
|
|
|
18157
18291
|
/** What the search service returned, in the model-facing invalid-response message. */
|
|
18158
18292
|
const INVALID_DETAIL = {
|
|
18159
18293
|
"not-object": "a body that is not a JSON object",
|
|
18294
|
+
"code-number": "no numeric \"code\" field",
|
|
18295
|
+
"data-results-array": "no \"data.results\" array",
|
|
18160
18296
|
"results-array": "no \"results\" array",
|
|
18161
18297
|
"data-array": "no \"data\" array",
|
|
18162
18298
|
"data-web-array": "no \"data.web\" array",
|
|
@@ -18172,11 +18308,7 @@ function searchSources(outcome) {
|
|
|
18172
18308
|
for (const row of outcome.rows) list.add(row);
|
|
18173
18309
|
return list.sources;
|
|
18174
18310
|
}
|
|
18175
|
-
if (outcome.failure === "api")
|
|
18176
|
-
const detail = outcome.detail === void 0 ? void 0 : upstreamText(outcome.detail);
|
|
18177
|
-
const message = "the search service reported an API error; retry later or choose another search connection";
|
|
18178
|
-
throw searchError("WEB_PROVIDER_ERROR", detail === void 0 ? message : message + "\n\nThe search service responded (untrusted): " + detail);
|
|
18179
|
-
}
|
|
18311
|
+
if (outcome.failure === "api") throw searchError("WEB_PROVIDER_ERROR", "the search service reported an API error; retry later or choose another search connection" + upstreamSuffix("The search service", outcome.detail));
|
|
18180
18312
|
throw invalidResponse(INVALID_DETAIL[outcome.reason]);
|
|
18181
18313
|
}
|
|
18182
18314
|
//#endregion
|
|
@@ -18186,6 +18318,7 @@ const ADAPTER_WIRES = {
|
|
|
18186
18318
|
firecrawl: mapWire(firecrawlSearch, searchSources),
|
|
18187
18319
|
tavily: mapWire(tavilySearch, searchSources),
|
|
18188
18320
|
tinyfish: mapWire(tinyfishSearch, searchSources),
|
|
18321
|
+
anysearch: mapWire(anysearchSearch, searchSources),
|
|
18189
18322
|
openalex: mapWire(openalexSearch, searchSources),
|
|
18190
18323
|
semanticscholar: mapWire(semanticscholarSearch, searchSources)
|
|
18191
18324
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-web-search-enhanced",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"description": "web_search provider for DeepSeek Harness with switchable search backends; installed through dsh-tool-web-enhanced-profile",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"deepseek-harness",
|
|
@@ -39,38 +39,38 @@
|
|
|
39
39
|
"access": "public"
|
|
40
40
|
},
|
|
41
41
|
"engines": {
|
|
42
|
-
"node": "
|
|
43
|
-
"dsh": ">=0.2.
|
|
42
|
+
"node": ">=24.9.0",
|
|
43
|
+
"dsh": ">=0.2.2-rc.1 <0.3.0-0"
|
|
44
44
|
},
|
|
45
45
|
"peerDependencies": {
|
|
46
|
-
"@deepseek-ai/cordis": "~4.0
|
|
47
|
-
"@deepseek-ai/dsh-agent": ">=0.2.
|
|
48
|
-
"@deepseek-ai/dsh-api-remotes": ">=0.2.
|
|
49
|
-
"@deepseek-ai/dsh-api-session-controller": ">=0.2.
|
|
50
|
-
"@deepseek-ai/dsh-client-locale": ">=0.2.
|
|
51
|
-
"@deepseek-ai/dsh-client-store": ">=0.2.
|
|
52
|
-
"@deepseek-ai/dsh-client-ui-commands": ">=0.2.
|
|
53
|
-
"@deepseek-ai/dsh-client-ui-conversation": ">=0.2.
|
|
54
|
-
"@deepseek-ai/dsh-client-ui-plugin-manager": ">=0.2.
|
|
55
|
-
"@deepseek-ai/dsh-client-ui-primitives": ">=0.2.
|
|
56
|
-
"@deepseek-ai/dsh-client-ui-renderer": ">=0.2.
|
|
57
|
-
"@deepseek-ai/dsh-client-ui-session": ">=0.2.
|
|
58
|
-
"@deepseek-ai/dsh-client-ui-settings": ">=0.2.
|
|
59
|
-
"@deepseek-ai/dsh-client-ui-slots": ">=0.2.
|
|
60
|
-
"@deepseek-ai/dsh-credentials": ">=0.2.
|
|
61
|
-
"@deepseek-ai/dsh-deepseek-account": ">=0.2.
|
|
62
|
-
"@deepseek-ai/dsh-launch-environment": ">=0.2.
|
|
63
|
-
"@deepseek-ai/dsh-scope": ">=0.2.
|
|
64
|
-
"@deepseek-ai/dsh-session": ">=0.2.
|
|
65
|
-
"@deepseek-ai/dsh-settings": ">=0.2.
|
|
66
|
-
"@deepseek-ai/dsh-storage-domain": ">=0.2.
|
|
67
|
-
"@deepseek-ai/dsh-tool-web": ">=0.2.
|
|
68
|
-
"@deepseek-ai/dsh-tools": ">=0.2.
|
|
69
|
-
"@deepseek-ai/dsh-typert-protocol": ">=0.2.
|
|
70
|
-
"@deepseek-ai/dsh-web": ">=0.2.
|
|
71
|
-
"@deepseek-ai/dsh-web-deepseek-api": ">=0.2.
|
|
72
|
-
"@deepseek-ai/dsh-web-search-deepseek": ">=0.2.
|
|
73
|
-
"@deepseek-ai/schemastery": "^3.
|
|
46
|
+
"@deepseek-ai/cordis": "~4.1.0",
|
|
47
|
+
"@deepseek-ai/dsh-agent": ">=0.2.2-rc.1 <0.3.0-0",
|
|
48
|
+
"@deepseek-ai/dsh-api-remotes": ">=0.2.2-rc.1 <0.3.0-0",
|
|
49
|
+
"@deepseek-ai/dsh-api-session-controller": ">=0.2.2-rc.1 <0.3.0-0",
|
|
50
|
+
"@deepseek-ai/dsh-client-locale": ">=0.2.2-rc.1 <0.3.0-0",
|
|
51
|
+
"@deepseek-ai/dsh-client-store": ">=0.2.2-rc.1 <0.3.0-0",
|
|
52
|
+
"@deepseek-ai/dsh-client-ui-commands": ">=0.2.2-rc.1 <0.3.0-0",
|
|
53
|
+
"@deepseek-ai/dsh-client-ui-conversation": ">=0.2.2-rc.1 <0.3.0-0",
|
|
54
|
+
"@deepseek-ai/dsh-client-ui-plugin-manager": ">=0.2.2-rc.1 <0.3.0-0",
|
|
55
|
+
"@deepseek-ai/dsh-client-ui-primitives": ">=0.2.2-rc.1 <0.3.0-0",
|
|
56
|
+
"@deepseek-ai/dsh-client-ui-renderer": ">=0.2.2-rc.1 <0.3.0-0",
|
|
57
|
+
"@deepseek-ai/dsh-client-ui-session": ">=0.2.2-rc.1 <0.3.0-0",
|
|
58
|
+
"@deepseek-ai/dsh-client-ui-settings": ">=0.2.2-rc.1 <0.3.0-0",
|
|
59
|
+
"@deepseek-ai/dsh-client-ui-slots": ">=0.2.2-rc.1 <0.3.0-0",
|
|
60
|
+
"@deepseek-ai/dsh-credentials": ">=0.2.2-rc.1 <0.3.0-0",
|
|
61
|
+
"@deepseek-ai/dsh-deepseek-account": ">=0.2.2-rc.1 <0.3.0-0",
|
|
62
|
+
"@deepseek-ai/dsh-launch-environment": ">=0.2.2-rc.1 <0.3.0-0",
|
|
63
|
+
"@deepseek-ai/dsh-scope": ">=0.2.2-rc.1 <0.3.0-0",
|
|
64
|
+
"@deepseek-ai/dsh-session": ">=0.2.2-rc.1 <0.3.0-0",
|
|
65
|
+
"@deepseek-ai/dsh-settings": ">=0.2.2-rc.1 <0.3.0-0",
|
|
66
|
+
"@deepseek-ai/dsh-storage-domain": ">=0.2.2-rc.1 <0.3.0-0",
|
|
67
|
+
"@deepseek-ai/dsh-tool-web": ">=0.2.2-rc.1 <0.3.0-0",
|
|
68
|
+
"@deepseek-ai/dsh-tools": ">=0.2.2-rc.1 <0.3.0-0",
|
|
69
|
+
"@deepseek-ai/dsh-typert-protocol": ">=0.2.2-rc.1 <0.3.0-0",
|
|
70
|
+
"@deepseek-ai/dsh-web": ">=0.2.2-rc.1 <0.3.0-0",
|
|
71
|
+
"@deepseek-ai/dsh-web-deepseek-api": ">=0.2.2-rc.1 <0.3.0-0",
|
|
72
|
+
"@deepseek-ai/dsh-web-search-deepseek": ">=0.2.2-rc.1 <0.3.0-0",
|
|
73
|
+
"@deepseek-ai/schemastery": "^3.19.0",
|
|
74
74
|
"react": "^18.2.0",
|
|
75
75
|
"react-dom": "^18.2.0"
|
|
76
76
|
},
|
|
@@ -119,35 +119,35 @@
|
|
|
119
119
|
}
|
|
120
120
|
},
|
|
121
121
|
"devDependencies": {
|
|
122
|
-
"@deepseek-ai/cordis": "4.0
|
|
123
|
-
"@deepseek-ai/cordis-plugin-loader": "1.0
|
|
124
|
-
"@deepseek-ai/dsh-agent": "0.2.
|
|
125
|
-
"@deepseek-ai/dsh-api-remotes": "0.2.
|
|
126
|
-
"@deepseek-ai/dsh-api-session-controller": "0.2.
|
|
127
|
-
"@deepseek-ai/dsh-client-locale": "0.2.
|
|
128
|
-
"@deepseek-ai/dsh-client-store": "0.2.
|
|
129
|
-
"@deepseek-ai/dsh-client-ui-commands": "0.2.
|
|
130
|
-
"@deepseek-ai/dsh-client-ui-conversation": "0.2.
|
|
131
|
-
"@deepseek-ai/dsh-client-ui-plugin-manager": "0.2.
|
|
132
|
-
"@deepseek-ai/dsh-client-ui-primitives": "0.2.
|
|
133
|
-
"@deepseek-ai/dsh-client-ui-renderer": "0.2.
|
|
134
|
-
"@deepseek-ai/dsh-client-ui-session": "0.2.
|
|
135
|
-
"@deepseek-ai/dsh-client-ui-settings": "0.2.
|
|
136
|
-
"@deepseek-ai/dsh-client-ui-slots": "0.2.
|
|
137
|
-
"@deepseek-ai/dsh-credentials": "0.2.
|
|
138
|
-
"@deepseek-ai/dsh-deepseek-account": "0.2.
|
|
139
|
-
"@deepseek-ai/dsh-launch-environment": "0.2.
|
|
140
|
-
"@deepseek-ai/dsh-scope": "0.2.
|
|
141
|
-
"@deepseek-ai/dsh-session": "0.2.
|
|
142
|
-
"@deepseek-ai/dsh-settings": "0.2.
|
|
143
|
-
"@deepseek-ai/dsh-storage-domain": "0.2.
|
|
144
|
-
"@deepseek-ai/dsh-tool-web": "0.2.
|
|
145
|
-
"@deepseek-ai/dsh-tools": "0.2.
|
|
146
|
-
"@deepseek-ai/dsh-typert-protocol": "0.2.
|
|
147
|
-
"@deepseek-ai/dsh-web": "0.2.
|
|
148
|
-
"@deepseek-ai/dsh-web-deepseek-api": "0.2.
|
|
149
|
-
"@deepseek-ai/dsh-web-search-deepseek": "0.2.
|
|
150
|
-
"@deepseek-ai/schemastery": "3.
|
|
122
|
+
"@deepseek-ai/cordis": "4.1.0",
|
|
123
|
+
"@deepseek-ai/cordis-plugin-loader": "1.1.0",
|
|
124
|
+
"@deepseek-ai/dsh-agent": "0.2.2-rc.1",
|
|
125
|
+
"@deepseek-ai/dsh-api-remotes": "0.2.2-rc.1",
|
|
126
|
+
"@deepseek-ai/dsh-api-session-controller": "0.2.2-rc.1",
|
|
127
|
+
"@deepseek-ai/dsh-client-locale": "0.2.2-rc.1",
|
|
128
|
+
"@deepseek-ai/dsh-client-store": "0.2.2-rc.1",
|
|
129
|
+
"@deepseek-ai/dsh-client-ui-commands": "0.2.2-rc.1",
|
|
130
|
+
"@deepseek-ai/dsh-client-ui-conversation": "0.2.2-rc.1",
|
|
131
|
+
"@deepseek-ai/dsh-client-ui-plugin-manager": "0.2.2-rc.1",
|
|
132
|
+
"@deepseek-ai/dsh-client-ui-primitives": "0.2.2-rc.1",
|
|
133
|
+
"@deepseek-ai/dsh-client-ui-renderer": "0.2.2-rc.1",
|
|
134
|
+
"@deepseek-ai/dsh-client-ui-session": "0.2.2-rc.1",
|
|
135
|
+
"@deepseek-ai/dsh-client-ui-settings": "0.2.2-rc.1",
|
|
136
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.2.2-rc.1",
|
|
137
|
+
"@deepseek-ai/dsh-credentials": "0.2.2-rc.1",
|
|
138
|
+
"@deepseek-ai/dsh-deepseek-account": "0.2.2-rc.1",
|
|
139
|
+
"@deepseek-ai/dsh-launch-environment": "0.2.2-rc.1",
|
|
140
|
+
"@deepseek-ai/dsh-scope": "0.2.2-rc.1",
|
|
141
|
+
"@deepseek-ai/dsh-session": "0.2.2-rc.1",
|
|
142
|
+
"@deepseek-ai/dsh-settings": "0.2.2-rc.1",
|
|
143
|
+
"@deepseek-ai/dsh-storage-domain": "0.2.2-rc.1",
|
|
144
|
+
"@deepseek-ai/dsh-tool-web": "0.2.2-rc.1",
|
|
145
|
+
"@deepseek-ai/dsh-tools": "0.2.2-rc.1",
|
|
146
|
+
"@deepseek-ai/dsh-typert-protocol": "0.2.2-rc.1",
|
|
147
|
+
"@deepseek-ai/dsh-web": "0.2.2-rc.1",
|
|
148
|
+
"@deepseek-ai/dsh-web-deepseek-api": "0.2.2-rc.1",
|
|
149
|
+
"@deepseek-ai/dsh-web-search-deepseek": "0.2.2-rc.1",
|
|
150
|
+
"@deepseek-ai/schemastery": "3.19.0",
|
|
151
151
|
"dsh-tool-web-enhanced-core": "0.0.0",
|
|
152
152
|
"react": "18.3.1",
|
|
153
153
|
"react-dom": "18.3.1",
|