scoutline 0.12.0 → 0.13.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/README.md +24 -24
- package/dist/commands/crawl.js +1 -1
- package/dist/commands/doctor.js +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +18 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/map.js +1 -1
- package/dist/commands/quota.js +1 -1
- package/dist/commands/read.d.ts.map +1 -1
- package/dist/commands/read.js +6 -2
- package/dist/commands/read.js.map +1 -1
- package/dist/commands/research.d.ts.map +1 -1
- package/dist/commands/research.js +8 -2
- package/dist/commands/research.js.map +1 -1
- package/dist/commands/search.js +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/provider-fallback.d.ts +13 -10
- package/dist/lib/provider-fallback.d.ts.map +1 -1
- package/dist/lib/provider-fallback.js +40 -25
- package/dist/lib/provider-fallback.js.map +1 -1
- package/dist/lib/quota-mapping.d.ts +4 -2
- package/dist/lib/quota-mapping.d.ts.map +1 -1
- package/dist/lib/quota-mapping.js +19 -2
- package/dist/lib/quota-mapping.js.map +1 -1
- package/dist/lib/redact.d.ts.map +1 -1
- package/dist/lib/redact.js +9 -0
- package/dist/lib/redact.js.map +1 -1
- package/dist/lib/trigger-detection.d.ts.map +1 -1
- package/dist/lib/trigger-detection.js +12 -1
- package/dist/lib/trigger-detection.js.map +1 -1
- package/dist/providers/exa/adapter.d.ts.map +1 -1
- package/dist/providers/exa/adapter.js +44 -21
- package/dist/providers/exa/adapter.js.map +1 -1
- package/dist/providers/jina/adapter.d.ts +42 -0
- package/dist/providers/jina/adapter.d.ts.map +1 -0
- package/dist/providers/jina/adapter.js +248 -0
- package/dist/providers/jina/adapter.js.map +1 -0
- package/dist/providers/jina/client.d.ts +46 -0
- package/dist/providers/jina/client.d.ts.map +1 -0
- package/dist/providers/jina/client.js +203 -0
- package/dist/providers/jina/client.js.map +1 -0
- package/dist/providers/jina/credentials.d.ts +14 -0
- package/dist/providers/jina/credentials.d.ts.map +1 -0
- package/dist/providers/jina/credentials.js +24 -0
- package/dist/providers/jina/credentials.js.map +1 -0
- package/dist/providers/jina/diagnostics.d.ts +13 -0
- package/dist/providers/jina/diagnostics.d.ts.map +1 -0
- package/dist/providers/jina/diagnostics.js +36 -0
- package/dist/providers/jina/diagnostics.js.map +1 -0
- package/dist/providers/parallel/adapter.d.ts +43 -0
- package/dist/providers/parallel/adapter.d.ts.map +1 -0
- package/dist/providers/parallel/adapter.js +270 -0
- package/dist/providers/parallel/adapter.js.map +1 -0
- package/dist/providers/parallel/client.d.ts +46 -0
- package/dist/providers/parallel/client.d.ts.map +1 -0
- package/dist/providers/parallel/client.js +127 -0
- package/dist/providers/parallel/client.js.map +1 -0
- package/dist/providers/parallel/credentials.d.ts +9 -0
- package/dist/providers/parallel/credentials.d.ts.map +1 -0
- package/dist/providers/parallel/credentials.js +26 -0
- package/dist/providers/parallel/credentials.js.map +1 -0
- package/dist/providers/parallel/diagnostics.d.ts +13 -0
- package/dist/providers/parallel/diagnostics.d.ts.map +1 -0
- package/dist/providers/parallel/diagnostics.js +36 -0
- package/dist/providers/parallel/diagnostics.js.map +1 -0
- package/dist/providers/perplexity/adapter.d.ts +56 -0
- package/dist/providers/perplexity/adapter.d.ts.map +1 -0
- package/dist/providers/perplexity/adapter.js +238 -0
- package/dist/providers/perplexity/adapter.js.map +1 -0
- package/dist/providers/perplexity/client.d.ts +56 -0
- package/dist/providers/perplexity/client.d.ts.map +1 -0
- package/dist/providers/perplexity/client.js +156 -0
- package/dist/providers/perplexity/client.js.map +1 -0
- package/dist/providers/perplexity/credentials.d.ts +9 -0
- package/dist/providers/perplexity/credentials.d.ts.map +1 -0
- package/dist/providers/perplexity/credentials.js +26 -0
- package/dist/providers/perplexity/credentials.js.map +1 -0
- package/dist/providers/perplexity/diagnostics.d.ts +13 -0
- package/dist/providers/perplexity/diagnostics.d.ts.map +1 -0
- package/dist/providers/perplexity/diagnostics.js +36 -0
- package/dist/providers/perplexity/diagnostics.js.map +1 -0
- package/dist/providers/registry.d.ts +2 -2
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +8 -2
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/types.d.ts +1 -1
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js +11 -1
- package/dist/providers/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/providers/jina/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AAmBjC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAOvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,EACL,QAAQ,EACR,SAAS,EACT,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,sBAAsB,EACtB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EACL,eAAe,EACf,eAAe,EACf,mBAAmB,GAEpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,+BAA+B,EAAE,MAAM,kBAAkB,CAAC;AAEnE,SAAS,qBAAqB,CAAC,MAA0B;IACvD,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/E,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CAAC,KAAc;IACxC,IACE,KAAK,YAAY,UAAU;QAC3B,KAAK,YAAY,eAAe;QAChC,KAAK,YAAY,sBAAsB;QACvC,KAAK,YAAY,kBAAkB;QACnC,KAAK,YAAY,SAAS;QAC1B,KAAK,YAAY,QAAQ;QACzB,KAAK,YAAY,YAAY;QAC7B,KAAK,YAAY,YAAY,EAC7B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,QAAQ,CACjB,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACnF,GAAG,CACJ,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,GAAY;IACjC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,eAAe,CAAC,4CAA4C,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,eAAe,CAAC,yCAAyC,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAMD,MAAM,OAAO,WAAW;IAQH,OAAO;IAPjB,EAAE,GAAe,MAAM,CAAC;IACxB,MAAM,CAAmB;IACzB,MAAM,CAAmB;IACzB,QAAQ,CAAqB;IAC7B,WAAW,CAAwB;IAE5C,YACmB,OAAwB,EACzC,IAAI,GAA4B,EAAE;uBADjB,OAAO;QAGxB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QAExB,IAAI,CAAC,MAAM,GAAG;YACZ,QAAQ,CAAC,OAAsB;gBAC7B,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACxD,MAAM,IAAI,eAAe,CAAC,gCAAgC,CAAC,CAAC;gBAC9D,CAAC;gBACD,iEAAiE;gBACjE,kEAAkE;gBAClE,kEAAkE;gBAClE,2DAA2D;gBAC3D,KAAK,MAAM,MAAM,IAAI;oBACnB,MAAM;oBACN,QAAQ;oBACR,SAAS;oBACT,aAAa;oBACb,UAAU;oBACV,OAAO;iBACC,EAAE,CAAC;oBACX,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;wBAC7C,MAAM,IAAI,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;oBAC7D,CAAC;gBACH,CAAC;YACH,CAAC;YAED,aAAa,CAAC,OAAsB;gBAClC,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBACtC,OAAO;oBACL,QAAQ,EAAE,MAAM;oBAChB,UAAU,EAAE,QAAQ;oBACpB,qBAAqB,EAAE,qBAAqB,CAAC,MAAM,CAAC;oBACpD,OAAO,EAAE;wBACP,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;wBAC3B,QAAQ,EAAE,OAAO,CAAC,QAAQ;qBAC3B;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,CAAC,MAAM,CAAC,OAAsB;gBACjC,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBACtC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAEnC,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;oBAEhE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;wBAC5B,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,UAAU;wBAC/B,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;wBACnB,OAAO,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE;wBAC/C,MAAM,EAAE,SAAS;wBACjB,IAAI,EAAE,IAAI,CAAC,aAAa,IAAI,SAAS;qBACtC,CAAC,CAAC,CAAC;gBACN,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;SACF,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG;YACZ,KAAK,EAAE;gBACL,IAAI,EAAE,cAAc;gBACpB,QAAQ,CAAC,OAA2B;oBAClC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC7B,CAAC;gBAED,aAAa,CAAC,OAA2B;oBACvC,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;oBACtC,OAAO;wBACL,QAAQ,EAAE,MAAM;wBAChB,UAAU,EAAE,QAAQ;wBACpB,SAAS,EAAE,cAAc;wBACzB,qBAAqB,EAAE,qBAAqB,CAAC,MAAM,CAAC;wBACpD,OAAO;wBACP,gBAAgB,EAAE,EAAE;qBACrB,CAAC;gBACJ,CAAC;gBAED,YAAY,EAAE,uBAAuB;gBAErC,KAAK,CAAC,MAAM,CAAC,OAA2B;oBACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;oBAEtC,IAAI,CAAC;wBACH,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;wBAEnE,OAAO;4BACL,aAAa,EAAE,CAAC;4BAChB,GAAG,EAAE,OAAO,CAAC,GAAG;4BAChB,QAAQ,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG;4BACjC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;4BACzB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;4BAC3B,8DAA8D;4BAC9D,6DAA6D;4BAC7D,4DAA4D;4BAC5D,aAAa,EAAE,UAAU;4BACzB,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BACnE,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;yBACpE,CAAC;oBACJ,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC;oBAClC,CAAC;gBACH,CAAC;aACF;SACF,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG;YACd,GAAG,EAAE;gBACH,IAAI,EAAE,gBAAgB;gBACtB,QAAQ,CAAC,OAAwB;oBAC/B,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACxD,MAAM,IAAI,eAAe,CAAC,kCAAkC,CAAC,CAAC;oBAChE,CAAC;oBACD,KAAK,MAAM,MAAM,IAAI;wBACnB,OAAO;wBACP,cAAc;wBACd,gBAAgB;wBAChB,QAAQ;qBACA,EAAE,CAAC;wBACX,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;4BAClC,MAAM,IAAI,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;wBAC/D,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,aAAa,CAAC,OAAwB;oBACpC,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;oBACtC,OAAO;wBACL,QAAQ,EAAE,MAAM;wBAChB,UAAU,EAAE,UAAU;wBACtB,SAAS,EAAE,gBAAgB;wBAC3B,qBAAqB,EAAE,qBAAqB,CAAC,MAAM,CAAC;wBACpD,OAAO;qBACR,CAAC;gBACJ,CAAC;gBAED,YAAY,EAAE,oBAAoB;gBAElC,KAAK,CAAC,MAAM,CAAC,OAAwB;oBACnC,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;oBACtC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBAEnC,IAAI,CAAC;wBACH,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;wBACrE,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;wBAE9D,wDAAwD;wBACxD,4BAA4B;wBAC5B,MAAM,OAAO,GAAqB,EAAE,CAAC;wBACrC,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC;wBAChE,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC1C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;4BAC/B,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;gCAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC;gCAC9B,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oCACrC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oCACnB,OAAO,CAAC,IAAI,CAAC;wCACX,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,UAAU,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;wCACnD,GAAG,EAAE,IAAI,CAAC,GAAG;qCACd,CAAC,CAAC;gCACL,CAAC;4BACH,CAAC;wBACH,CAAC;6BAAM,IAAI,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACnE,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;gCACvC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;4BAC/D,CAAC;wBACH,CAAC;wBAED,OAAO;4BACL,aAAa,EAAE,CAAC;4BAChB,KAAK;4BACL,KAAK,EAAE,oBAAoB;4BAC3B,MAAM,EAAE,OAAO;4BACf,OAAO;yBACR,CAAC;oBACJ,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC;oBAClC,CAAC;gBACH,CAAC;aACF;SACF,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,+BAA+B,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IACzE,CAAC;CACF;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,EAAE,EAAE,MAAM;QACV,iBAAiB,EAAE,CAAC,cAAc,CAAC;QACnC,YAAY,EAAE,gBAAgB;QAC9B,YAAY;YACV,OAAO,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,EAAE,CAAC,OAAwB,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC;KAC/D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Jina AI direct HTTP transport.
|
|
3
|
+
*
|
|
4
|
+
* Performs direct HTTP requests against Jina Reader (r.jina.ai) and Search (s.jina.ai).
|
|
5
|
+
*/
|
|
6
|
+
import type { ProviderQuotaFetchResponse } from "../types.js";
|
|
7
|
+
export interface JinaTransportDeps {
|
|
8
|
+
readonly fetch?: (input: string, init: Record<string, unknown>) => Promise<ProviderQuotaFetchResponse>;
|
|
9
|
+
readonly setTimeout?: typeof setTimeout;
|
|
10
|
+
readonly clearTimeout?: typeof clearTimeout;
|
|
11
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
12
|
+
}
|
|
13
|
+
export interface JinaDataItem {
|
|
14
|
+
readonly title?: string;
|
|
15
|
+
readonly url?: string;
|
|
16
|
+
readonly content?: string;
|
|
17
|
+
readonly description?: string;
|
|
18
|
+
readonly publishedTime?: string;
|
|
19
|
+
readonly metadata?: unknown;
|
|
20
|
+
readonly external?: unknown;
|
|
21
|
+
}
|
|
22
|
+
export interface JinaResponse {
|
|
23
|
+
readonly code?: number;
|
|
24
|
+
readonly data?: JinaDataItem | readonly JinaDataItem[];
|
|
25
|
+
}
|
|
26
|
+
export declare function fetchJinaReader(apiKey: string | undefined, targetUrl: string, deps?: JinaTransportDeps): Promise<JinaDataItem>;
|
|
27
|
+
export declare function fetchJinaSearch(apiKey: string | undefined, query: string, deps?: JinaTransportDeps): Promise<readonly JinaDataItem[]>;
|
|
28
|
+
export interface JinaDeepSearchUrlCitation {
|
|
29
|
+
readonly title?: string;
|
|
30
|
+
readonly url: string;
|
|
31
|
+
readonly exactQuote?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface JinaDeepSearchAnnotation {
|
|
34
|
+
readonly url_citation?: JinaDeepSearchUrlCitation;
|
|
35
|
+
}
|
|
36
|
+
export interface JinaDeepSearchResponse {
|
|
37
|
+
readonly choices?: readonly {
|
|
38
|
+
readonly message?: {
|
|
39
|
+
readonly content?: string;
|
|
40
|
+
readonly annotations?: readonly JinaDeepSearchAnnotation[];
|
|
41
|
+
};
|
|
42
|
+
}[];
|
|
43
|
+
readonly visitedURLs?: readonly string[];
|
|
44
|
+
}
|
|
45
|
+
export declare function fetchJinaDeepSearch(apiKey: string | undefined, query: string, deps?: JinaTransportDeps): Promise<JinaDeepSearchResponse>;
|
|
46
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/providers/jina/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAY9D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC1B,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACzC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,UAAU,CAAC;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,YAAY,CAAC;IAC5C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,SAAS,YAAY,EAAE,CAAC;CACxD;AA0BD,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,YAAY,CAAC,CAyDvB;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAyDlC;AAWD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,yBAAyB,CAAC;CACnD;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS;QAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE;YACjB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;YAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,wBAAwB,EAAE,CAAC;SAC5D,CAAC;KACH,EAAE,CAAC;IACJ,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAOD,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,sBAAsB,CAAC,CAyDjC"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Jina AI direct HTTP transport.
|
|
3
|
+
*
|
|
4
|
+
* Performs direct HTTP requests against Jina Reader (r.jina.ai) and Search (s.jina.ai).
|
|
5
|
+
*/
|
|
6
|
+
import { createRequire } from "node:module";
|
|
7
|
+
import { ApiError, AuthError, NetworkError, TimeoutError } from "../../lib/errors.js";
|
|
8
|
+
const require = createRequire(import.meta.url);
|
|
9
|
+
const { version: VERSION } = require("../../../package.json");
|
|
10
|
+
const READER_BASE_URL = "https://r.jina.ai";
|
|
11
|
+
const SEARCH_BASE_URL = "https://s.jina.ai";
|
|
12
|
+
const DEFAULT_TIMEOUT_MS = 30000;
|
|
13
|
+
const USER_AGENT = `scoutline/${VERSION}`;
|
|
14
|
+
const TIMEOUT_HELP_TEXT = "Try again or increase timeout with JINA_TIMEOUT env var";
|
|
15
|
+
function resolveTimeoutMs(env) {
|
|
16
|
+
const raw = parseInt(env.JINA_TIMEOUT || String(DEFAULT_TIMEOUT_MS), 10);
|
|
17
|
+
return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_TIMEOUT_MS;
|
|
18
|
+
}
|
|
19
|
+
function mapStatusError(status, timeoutMs) {
|
|
20
|
+
if (status === 401 || status === 403) {
|
|
21
|
+
return new AuthError("Jina AI authentication failed", "JINA_API_KEY");
|
|
22
|
+
}
|
|
23
|
+
if (status === 408 || status === 504) {
|
|
24
|
+
return new TimeoutError(timeoutMs, TIMEOUT_HELP_TEXT);
|
|
25
|
+
}
|
|
26
|
+
if (status === 429) {
|
|
27
|
+
return new ApiError("Jina AI rate limit exceeded", 429);
|
|
28
|
+
}
|
|
29
|
+
if (status >= 400 && status < 500) {
|
|
30
|
+
return new ApiError(`Jina AI API client error (${status})`, status);
|
|
31
|
+
}
|
|
32
|
+
if (status >= 500) {
|
|
33
|
+
return new ApiError(`Jina AI API server error (${status})`, status);
|
|
34
|
+
}
|
|
35
|
+
return new ApiError(`Jina AI request failed (${status})`, status);
|
|
36
|
+
}
|
|
37
|
+
export async function fetchJinaReader(apiKey, targetUrl, deps = {}) {
|
|
38
|
+
const fetchFn = deps.fetch || globalThis.fetch;
|
|
39
|
+
const setTimer = deps.setTimeout || globalThis.setTimeout;
|
|
40
|
+
const clearTimer = deps.clearTimeout || globalThis.clearTimeout;
|
|
41
|
+
const env = deps.env || process.env;
|
|
42
|
+
const timeoutMs = resolveTimeoutMs(env);
|
|
43
|
+
const endpoint = `${READER_BASE_URL}/${encodeURIComponent(targetUrl)}`;
|
|
44
|
+
const headers = {
|
|
45
|
+
"Accept": "application/json",
|
|
46
|
+
"User-Agent": USER_AGENT,
|
|
47
|
+
};
|
|
48
|
+
if (apiKey) {
|
|
49
|
+
headers["Authorization"] = `Bearer ${apiKey}`;
|
|
50
|
+
}
|
|
51
|
+
const controller = new AbortController();
|
|
52
|
+
const timer = setTimer(() => controller.abort(), timeoutMs);
|
|
53
|
+
try {
|
|
54
|
+
const response = await fetchFn(endpoint, {
|
|
55
|
+
method: "GET",
|
|
56
|
+
headers,
|
|
57
|
+
signal: controller.signal,
|
|
58
|
+
});
|
|
59
|
+
if (!response.ok) {
|
|
60
|
+
throw mapStatusError(response.status, timeoutMs);
|
|
61
|
+
}
|
|
62
|
+
const text = await response.text();
|
|
63
|
+
const json = JSON.parse(text);
|
|
64
|
+
const data = json.data;
|
|
65
|
+
if (Array.isArray(data)) {
|
|
66
|
+
return data[0] || { url: targetUrl, content: "" };
|
|
67
|
+
}
|
|
68
|
+
if (data && typeof data === "object") {
|
|
69
|
+
return data;
|
|
70
|
+
}
|
|
71
|
+
return { url: targetUrl, content: "" };
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
if (err instanceof AuthError || err instanceof ApiError || err instanceof TimeoutError) {
|
|
75
|
+
throw err;
|
|
76
|
+
}
|
|
77
|
+
if (err instanceof SyntaxError) {
|
|
78
|
+
throw new ApiError("Jina AI returned a malformed JSON response", 500);
|
|
79
|
+
}
|
|
80
|
+
if (err instanceof Error && err.name === "AbortError") {
|
|
81
|
+
throw new TimeoutError(timeoutMs, TIMEOUT_HELP_TEXT);
|
|
82
|
+
}
|
|
83
|
+
throw new NetworkError(`Jina AI request failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
clearTimer(timer);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
export async function fetchJinaSearch(apiKey, query, deps = {}) {
|
|
90
|
+
const fetchFn = deps.fetch || globalThis.fetch;
|
|
91
|
+
const setTimer = deps.setTimeout || globalThis.setTimeout;
|
|
92
|
+
const clearTimer = deps.clearTimeout || globalThis.clearTimeout;
|
|
93
|
+
const env = deps.env || process.env;
|
|
94
|
+
const timeoutMs = resolveTimeoutMs(env);
|
|
95
|
+
const endpoint = `${SEARCH_BASE_URL}/${encodeURIComponent(query)}`;
|
|
96
|
+
const headers = {
|
|
97
|
+
"Accept": "application/json",
|
|
98
|
+
"User-Agent": USER_AGENT,
|
|
99
|
+
};
|
|
100
|
+
if (apiKey) {
|
|
101
|
+
headers["Authorization"] = `Bearer ${apiKey}`;
|
|
102
|
+
}
|
|
103
|
+
const controller = new AbortController();
|
|
104
|
+
const timer = setTimer(() => controller.abort(), timeoutMs);
|
|
105
|
+
try {
|
|
106
|
+
const response = await fetchFn(endpoint, {
|
|
107
|
+
method: "GET",
|
|
108
|
+
headers,
|
|
109
|
+
signal: controller.signal,
|
|
110
|
+
});
|
|
111
|
+
if (!response.ok) {
|
|
112
|
+
throw mapStatusError(response.status, timeoutMs);
|
|
113
|
+
}
|
|
114
|
+
const text = await response.text();
|
|
115
|
+
const json = JSON.parse(text);
|
|
116
|
+
const data = json.data;
|
|
117
|
+
if (Array.isArray(data)) {
|
|
118
|
+
return data;
|
|
119
|
+
}
|
|
120
|
+
if (data && typeof data === "object") {
|
|
121
|
+
return [data];
|
|
122
|
+
}
|
|
123
|
+
return [];
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
if (err instanceof AuthError || err instanceof ApiError || err instanceof TimeoutError) {
|
|
127
|
+
throw err;
|
|
128
|
+
}
|
|
129
|
+
if (err instanceof SyntaxError) {
|
|
130
|
+
throw new ApiError("Jina AI returned a malformed JSON response", 500);
|
|
131
|
+
}
|
|
132
|
+
if (err instanceof Error && err.name === "AbortError") {
|
|
133
|
+
throw new TimeoutError(timeoutMs, TIMEOUT_HELP_TEXT);
|
|
134
|
+
}
|
|
135
|
+
throw new NetworkError(`Jina AI request failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
136
|
+
}
|
|
137
|
+
finally {
|
|
138
|
+
clearTimer(timer);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
// DeepSearch API — deepsearch.jina.ai (OpenAI-compatible chat completions)
|
|
143
|
+
// ---------------------------------------------------------------------------
|
|
144
|
+
const DEEPSEARCH_BASE_URL = "https://deepsearch.jina.ai";
|
|
145
|
+
const DEFAULT_DEEPSEARCH_TIMEOUT_MS = 120000;
|
|
146
|
+
const DEEPSEARCH_TIMEOUT_HELP_TEXT = "Try again or increase timeout with JINA_DEEPSEARCH_TIMEOUT env var";
|
|
147
|
+
function resolveDeepSearchTimeoutMs(env) {
|
|
148
|
+
const raw = parseInt(env.JINA_DEEPSEARCH_TIMEOUT || String(DEFAULT_DEEPSEARCH_TIMEOUT_MS), 10);
|
|
149
|
+
return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_DEEPSEARCH_TIMEOUT_MS;
|
|
150
|
+
}
|
|
151
|
+
export async function fetchJinaDeepSearch(apiKey, query, deps = {}) {
|
|
152
|
+
const fetchFn = deps.fetch || globalThis.fetch;
|
|
153
|
+
const setTimer = deps.setTimeout || globalThis.setTimeout;
|
|
154
|
+
const clearTimer = deps.clearTimeout || globalThis.clearTimeout;
|
|
155
|
+
const env = deps.env || process.env;
|
|
156
|
+
const timeoutMs = resolveDeepSearchTimeoutMs(env);
|
|
157
|
+
const url = `${DEEPSEARCH_BASE_URL}/v1/chat/completions`;
|
|
158
|
+
const body = {
|
|
159
|
+
model: "jina-deepsearch-v1",
|
|
160
|
+
messages: [{ role: "user", content: query }],
|
|
161
|
+
stream: false,
|
|
162
|
+
reasoning_effort: "medium",
|
|
163
|
+
max_returned_urls: 10,
|
|
164
|
+
};
|
|
165
|
+
const headers = {
|
|
166
|
+
"Content-Type": "application/json",
|
|
167
|
+
"User-Agent": USER_AGENT,
|
|
168
|
+
};
|
|
169
|
+
if (apiKey) {
|
|
170
|
+
headers["Authorization"] = `Bearer ${apiKey}`;
|
|
171
|
+
}
|
|
172
|
+
const controller = new AbortController();
|
|
173
|
+
const timer = setTimer(() => controller.abort(), timeoutMs);
|
|
174
|
+
try {
|
|
175
|
+
const response = await fetchFn(url, {
|
|
176
|
+
method: "POST",
|
|
177
|
+
headers,
|
|
178
|
+
body: JSON.stringify(body),
|
|
179
|
+
signal: controller.signal,
|
|
180
|
+
});
|
|
181
|
+
if (!response.ok) {
|
|
182
|
+
throw mapStatusError(response.status, timeoutMs);
|
|
183
|
+
}
|
|
184
|
+
const text = await response.text();
|
|
185
|
+
return JSON.parse(text);
|
|
186
|
+
}
|
|
187
|
+
catch (err) {
|
|
188
|
+
if (err instanceof AuthError || err instanceof ApiError || err instanceof TimeoutError) {
|
|
189
|
+
throw err;
|
|
190
|
+
}
|
|
191
|
+
if (err instanceof SyntaxError) {
|
|
192
|
+
throw new ApiError("Jina AI returned a malformed JSON response", 500);
|
|
193
|
+
}
|
|
194
|
+
if (err instanceof Error && err.name === "AbortError") {
|
|
195
|
+
throw new TimeoutError(timeoutMs, DEEPSEARCH_TIMEOUT_HELP_TEXT);
|
|
196
|
+
}
|
|
197
|
+
throw new NetworkError(`Jina AI DeepSearch failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
198
|
+
}
|
|
199
|
+
finally {
|
|
200
|
+
clearTimer(timer);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/providers/jina/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Jina AI credential resolution.
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for the Jina AI API key (`JINA_API_KEY`).
|
|
5
|
+
*
|
|
6
|
+
* Jina supports keyless access (free tier), so the key is optional.
|
|
7
|
+
* `isJinaConfigured` always returns true because the transport works
|
|
8
|
+
* without authentication. An API key raises rate limits and is
|
|
9
|
+
* recommended for production use, but is not required for the provider
|
|
10
|
+
* to participate in selection, fallback, or diagnostics.
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolveJinaApiKey(env: NodeJS.ProcessEnv): string | undefined;
|
|
13
|
+
export declare function isJinaConfigured(_env: NodeJS.ProcessEnv): boolean;
|
|
14
|
+
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/providers/jina/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,SAAS,CAE5E;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAGjE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Jina AI credential resolution.
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for the Jina AI API key (`JINA_API_KEY`).
|
|
5
|
+
*
|
|
6
|
+
* Jina supports keyless access (free tier), so the key is optional.
|
|
7
|
+
* `isJinaConfigured` always returns true because the transport works
|
|
8
|
+
* without authentication. An API key raises rate limits and is
|
|
9
|
+
* recommended for production use, but is not required for the provider
|
|
10
|
+
* to participate in selection, fallback, or diagnostics.
|
|
11
|
+
*/
|
|
12
|
+
function pickNonBlank(raw) {
|
|
13
|
+
if (typeof raw !== "string")
|
|
14
|
+
return undefined;
|
|
15
|
+
return raw.trim().length > 0 ? raw : undefined;
|
|
16
|
+
}
|
|
17
|
+
export function resolveJinaApiKey(env) {
|
|
18
|
+
return pickNonBlank(env.JINA_API_KEY);
|
|
19
|
+
}
|
|
20
|
+
export function isJinaConfigured(_env) {
|
|
21
|
+
// Jina supports keyless access — always available.
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/providers/jina/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,SAAS,YAAY,CAAC,GAAY;IAChC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC9C,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAsB;IACtD,OAAO,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAuB;IACtD,mDAAmD;IACnD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Jina AI Diagnostics Capability.
|
|
3
|
+
*
|
|
4
|
+
* Probes Jina AI connectivity with a lightweight probe request.
|
|
5
|
+
*/
|
|
6
|
+
import type { DiagnosticsCapability } from "../../capabilities/diagnostics.js";
|
|
7
|
+
import { type JinaTransportDeps } from "./client.js";
|
|
8
|
+
export interface JinaDiagnosticsCapabilityOptions {
|
|
9
|
+
readonly env: NodeJS.ProcessEnv;
|
|
10
|
+
readonly transport?: JinaTransportDeps;
|
|
11
|
+
}
|
|
12
|
+
export declare function createJinaDiagnosticsCapability(options: JinaDiagnosticsCapabilityOptions): DiagnosticsCapability;
|
|
13
|
+
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../../src/providers/jina/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAqB,MAAM,mCAAmC,CAAC;AAUlG,OAAO,EAAmB,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAgBtE,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,iBAAiB,CAAC;CACxC;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,gCAAgC,GACxC,qBAAqB,CAavB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Jina AI Diagnostics Capability.
|
|
3
|
+
*
|
|
4
|
+
* Probes Jina AI connectivity with a lightweight probe request.
|
|
5
|
+
*/
|
|
6
|
+
import { ApiError, AuthError, ConfigurationError, NetworkError, QuotaError, TimeoutError, } from "../../lib/errors.js";
|
|
7
|
+
import { resolveJinaApiKey } from "./credentials.js";
|
|
8
|
+
import { fetchJinaSearch } from "./client.js";
|
|
9
|
+
function normalizeProbeError(error) {
|
|
10
|
+
if (error instanceof AuthError ||
|
|
11
|
+
error instanceof QuotaError ||
|
|
12
|
+
error instanceof ApiError ||
|
|
13
|
+
error instanceof NetworkError ||
|
|
14
|
+
error instanceof TimeoutError ||
|
|
15
|
+
error instanceof ConfigurationError) {
|
|
16
|
+
return error;
|
|
17
|
+
}
|
|
18
|
+
return new ApiError("Jina AI diagnostics probe failed", 500);
|
|
19
|
+
}
|
|
20
|
+
export function createJinaDiagnosticsCapability(options) {
|
|
21
|
+
const { env, transport } = options;
|
|
22
|
+
return {
|
|
23
|
+
async invoke(diagOptions) {
|
|
24
|
+
if (!diagOptions.probe)
|
|
25
|
+
return;
|
|
26
|
+
const apiKey = resolveJinaApiKey(env);
|
|
27
|
+
try {
|
|
28
|
+
await fetchJinaSearch(apiKey, "scoutline-doctor-probe", transport);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
throw normalizeProbeError(error);
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../src/providers/jina/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,QAAQ,EACR,SAAS,EACT,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,YAAY,GACb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAA0B,MAAM,aAAa,CAAC;AAEtE,SAAS,mBAAmB,CAAC,KAAc;IACzC,IACE,KAAK,YAAY,SAAS;QAC1B,KAAK,YAAY,UAAU;QAC3B,KAAK,YAAY,QAAQ;QACzB,KAAK,YAAY,YAAY;QAC7B,KAAK,YAAY,YAAY;QAC7B,KAAK,YAAY,kBAAkB,EACnC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,QAAQ,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC;AAC/D,CAAC;AAOD,MAAM,UAAU,+BAA+B,CAC7C,OAAyC;IAEzC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACnC,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,WAA8B;YACzC,IAAI,CAAC,WAAW,CAAC,KAAK;gBAAE,OAAO;YAC/B,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,eAAe,CAAC,MAAM,EAAE,wBAAwB,EAAE,SAAS,CAAC,CAAC;YACrE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parallel AI Provider Adapter.
|
|
3
|
+
*
|
|
4
|
+
* Implements Search, Research, and Diagnostics capabilities for Parallel AI.
|
|
5
|
+
*
|
|
6
|
+
* Field mapping (Parallel API → Provider-neutral):
|
|
7
|
+
* results[].title -> title
|
|
8
|
+
* results[].url -> url
|
|
9
|
+
* results[].excerpts[] -> summary (joined with double newlines)
|
|
10
|
+
* results[].publish_date -> date
|
|
11
|
+
*
|
|
12
|
+
* Reader (Extract API):
|
|
13
|
+
* results[].full_content -> content (fallback: excerpts joined)
|
|
14
|
+
* results[].title -> title
|
|
15
|
+
* results[].url -> finalUrl
|
|
16
|
+
*
|
|
17
|
+
* Control mapping (SearchControls → Parallel-native API params):
|
|
18
|
+
* topic -> appended to query string (Parallel has no native topic field)
|
|
19
|
+
* type -> REJECTED (UnsupportedOptionError)
|
|
20
|
+
* location -> REJECTED (UnsupportedOptionError)
|
|
21
|
+
* domain -> REJECTED (UnsupportedOptionError; API does not accept it)
|
|
22
|
+
* recency -> REJECTED (UnsupportedOptionError; API does not accept it)
|
|
23
|
+
*/
|
|
24
|
+
import type { ProviderAdapter, ProviderContext, ProviderDescriptor, ProviderId } from "../types.js";
|
|
25
|
+
import type { SearchCapability } from "../../capabilities/search.js";
|
|
26
|
+
import type { ResearchCapability } from "../../capabilities/research.js";
|
|
27
|
+
import type { ReaderCapability } from "../../capabilities/reader.js";
|
|
28
|
+
import type { DiagnosticsCapability } from "../../capabilities/diagnostics.js";
|
|
29
|
+
import { type ParallelTransportDeps } from "./client.js";
|
|
30
|
+
export interface ParallelAdapterDependencies {
|
|
31
|
+
readonly transport?: ParallelTransportDeps;
|
|
32
|
+
}
|
|
33
|
+
export declare class ParallelAdapter implements ProviderAdapter {
|
|
34
|
+
private readonly context;
|
|
35
|
+
readonly id: ProviderId;
|
|
36
|
+
readonly search: SearchCapability;
|
|
37
|
+
readonly research: ResearchCapability;
|
|
38
|
+
readonly reader: ReaderCapability;
|
|
39
|
+
readonly diagnostics: DiagnosticsCapability;
|
|
40
|
+
constructor(context: ProviderContext, deps?: ParallelAdapterDependencies);
|
|
41
|
+
}
|
|
42
|
+
export declare function createParallelDescriptor(): ProviderDescriptor;
|
|
43
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/providers/parallel/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EACV,eAAe,EAEf,eAAe,EACf,kBAAkB,EAClB,UAAU,EACX,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAEV,gBAAgB,EAGjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EACV,kBAAkB,EAGnB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAY/E,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,aAAa,CAAC;AA+BrB,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,qBAAqB,CAAC;CAC5C;AAWD,qBAAa,eAAgB,YAAW,eAAe;IAQnD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP1B,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAc;IACrC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;IAE5C,YACmB,OAAO,EAAE,eAAe,EACzC,IAAI,GAAE,2BAAgC,EA2NvC;CACF;AAED,wBAAgB,wBAAwB,IAAI,kBAAkB,CAU7D"}
|