@mastra/parallel 0.0.0 → 0.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/CHANGELOG.md +17 -0
- package/LICENSE.md +30 -0
- package/dist/client.d.ts +7 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/extract.d.ts +42 -0
- package/dist/extract.d.ts.map +1 -0
- package/dist/index.cjs +290 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +263 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas.d.ts +23 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/search.d.ts +39 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/tools.d.ts +81 -0
- package/dist/tools.d.ts.map +1 -0
- package/package.json +15 -15
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# @mastra/parallel
|
|
2
2
|
|
|
3
|
+
## 0.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Added Parallel Search and Extract tools for Mastra agents through the new `@mastra/parallel` package. ([#22070](https://github.com/mastra-ai/mastra/pull/22070))
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
import { createParallelTools } from '@mastra/parallel';
|
|
11
|
+
|
|
12
|
+
const tools = createParallelTools();
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- Updated dependencies [[`79f04a7`](https://github.com/mastra-ai/mastra/commit/79f04a7f6c6829da541139f638f2f1d267916e08), [`65edab1`](https://github.com/mastra-ai/mastra/commit/65edab1c233d17b8f163bad12fca410d0e6f16b1), [`1e47b75`](https://github.com/mastra-ai/mastra/commit/1e47b7520cab4cfaa8daed52f17e2e6d14ff7539), [`ab20a38`](https://github.com/mastra-ai/mastra/commit/ab20a38d0275f8d85e0f3833bd87ef487bcc609f), [`fd4d5fe`](https://github.com/mastra-ai/mastra/commit/fd4d5fe4f943699b85db5e74404f190d5a6b8c2a), [`ae8790c`](https://github.com/mastra-ai/mastra/commit/ae8790c4bfaa088d2ab279d1dcc06f326b9fd109), [`2c85f42`](https://github.com/mastra-ai/mastra/commit/2c85f428e04ccd63ea31a7ec80b5b327afdad555), [`11bbeb9`](https://github.com/mastra-ai/mastra/commit/11bbeb9b108ef2264e05acefc6dafb9cbb342921), [`48ef1f1`](https://github.com/mastra-ai/mastra/commit/48ef1f1d24eedafbb07f64e659a81b52b67b8bf6), [`aa3a85d`](https://github.com/mastra-ai/mastra/commit/aa3a85daf094c683bb97efdf4b6a696d2e474af5), [`d29d06f`](https://github.com/mastra-ai/mastra/commit/d29d06fe00bbd35b4571150ea04c59d2ed783c71), [`e6516df`](https://github.com/mastra-ai/mastra/commit/e6516dfcdae4f4ac0e7971d84359a81385ee602f), [`1a485f3`](https://github.com/mastra-ai/mastra/commit/1a485f3538f5ec64d58bd8b5e1e99de0c695c87b), [`0d37487`](https://github.com/mastra-ai/mastra/commit/0d37487d9f349388a3f1cef6a536cf9dcc4b6273), [`8661d7d`](https://github.com/mastra-ai/mastra/commit/8661d7d7179f0a024456aabdd8679bcecd09ac28), [`dbbfeb8`](https://github.com/mastra-ai/mastra/commit/dbbfeb85ec949dc9ebc0755e1ad262e4f5eba8db), [`575e343`](https://github.com/mastra-ai/mastra/commit/575e343900451021d96110916497d334af7bc252), [`0b2a3d1`](https://github.com/mastra-ai/mastra/commit/0b2a3d1783875c5b97b7b36ab3d03d7360e0dde7), [`6bb5d71`](https://github.com/mastra-ai/mastra/commit/6bb5d7193fe9166b219f0fccae17db7a5ae86e65), [`3cc9d00`](https://github.com/mastra-ai/mastra/commit/3cc9d00b2b4333e0377a5e9df5eff92c17ce7630), [`cacb839`](https://github.com/mastra-ai/mastra/commit/cacb8392d9e74189b56d857290b0615f98a2683d), [`57de7d6`](https://github.com/mastra-ai/mastra/commit/57de7d644ba7146edb4e9e6111ec4fa98c3a59e9), [`c8e4cea`](https://github.com/mastra-ai/mastra/commit/c8e4ceac9a390d78c8327dff3cdb2861dd71957f), [`ed01e9a`](https://github.com/mastra-ai/mastra/commit/ed01e9a807514a904374bf687a7b8f18750f6f78), [`b47b26e`](https://github.com/mastra-ai/mastra/commit/b47b26e6fe95cb8a3482be2c5e52de157fe59d0b), [`0d37487`](https://github.com/mastra-ai/mastra/commit/0d37487d9f349388a3f1cef6a536cf9dcc4b6273), [`733a537`](https://github.com/mastra-ai/mastra/commit/733a537489a858b5880b2e98809334fba895a221), [`e8e299c`](https://github.com/mastra-ai/mastra/commit/e8e299cc6abdfc39947e2fec25803493015d3882), [`edfc548`](https://github.com/mastra-ai/mastra/commit/edfc548886bc7bae17b681f8b6b41a47eb32bcd2), [`b05f486`](https://github.com/mastra-ai/mastra/commit/b05f48612984d5fe2447ea2d6cdd5c604d285b97), [`a8a4871`](https://github.com/mastra-ai/mastra/commit/a8a4871215f51da95c47129602157ce5372f634a), [`eb9ecaa`](https://github.com/mastra-ai/mastra/commit/eb9ecaa89c36e889749e3b825cfc507ce7f7980b), [`4ff3ee2`](https://github.com/mastra-ai/mastra/commit/4ff3ee2bff7ed07528b4817f8f49639031c72a4d), [`9207dfa`](https://github.com/mastra-ai/mastra/commit/9207dfab8062e5fc68b751684797ff86fe0b4e70), [`5165cdc`](https://github.com/mastra-ai/mastra/commit/5165cdcdcf50e144bb8113278535196cc9b07065), [`e737014`](https://github.com/mastra-ai/mastra/commit/e737014e0fc7035759762bb5b48baef1d6c0f6a7), [`6bb5d71`](https://github.com/mastra-ai/mastra/commit/6bb5d7193fe9166b219f0fccae17db7a5ae86e65), [`f591643`](https://github.com/mastra-ai/mastra/commit/f591643becdf0be9bddce6ba1748e64bc30d77f1), [`63796ba`](https://github.com/mastra-ai/mastra/commit/63796ba0fda60253be17535e68f6bbbf1e6ffa09), [`b1ad324`](https://github.com/mastra-ai/mastra/commit/b1ad324d657f3544b0701332aef7eb10e9a36258), [`61c566d`](https://github.com/mastra-ai/mastra/commit/61c566dd2f2cde2b23ed8f139924e530d4202214), [`c24754c`](https://github.com/mastra-ai/mastra/commit/c24754c1fb6fe144e5051e536e98c8a18b0214ac), [`12c61d2`](https://github.com/mastra-ai/mastra/commit/12c61d280c8cb208bc3c8dbcbe5dcc60cf9d1cd0), [`c46eb09`](https://github.com/mastra-ai/mastra/commit/c46eb09ce4987509af57a0ac582c61241a6dd2f1), [`9ee8120`](https://github.com/mastra-ai/mastra/commit/9ee8120ce17f76b9f617489e05a283353742690a), [`d975e92`](https://github.com/mastra-ai/mastra/commit/d975e924d4936f46c386bd3dee39c671720289f6), [`45dd6ee`](https://github.com/mastra-ai/mastra/commit/45dd6ee089bd7df0d0c98a10098e483fd388e04a), [`4e9a228`](https://github.com/mastra-ai/mastra/commit/4e9a2283d5fd6ed1b70a2751eb3dc2cbf82ada20), [`d6ce34a`](https://github.com/mastra-ai/mastra/commit/d6ce34aeceb06ddf3d595a1eed5cc74f481a46a1), [`f95f468`](https://github.com/mastra-ai/mastra/commit/f95f468cf1e7c2b924a13826494f98b8f2ccd581), [`30ed33e`](https://github.com/mastra-ai/mastra/commit/30ed33ee14084a26019aba15fceadda6d6ddefaf), [`04a815f`](https://github.com/mastra-ai/mastra/commit/04a815fc8971d29e97fcdcc5008a1eb472fc00ff), [`1cfa878`](https://github.com/mastra-ai/mastra/commit/1cfa8784d8da0dfaa0317e5048bc48b6084a5ea5), [`9a12ef3`](https://github.com/mastra-ai/mastra/commit/9a12ef3fccf3f4186db0f294f4ee1f02cf4d8db2), [`32d3583`](https://github.com/mastra-ai/mastra/commit/32d358332cb8ac2306b83b73cf3536e74dbd435e), [`7960688`](https://github.com/mastra-ai/mastra/commit/7960688828e04eaf3106e34f7758fa580257eef6), [`91ad69d`](https://github.com/mastra-ai/mastra/commit/91ad69d64994c89199b0c55399e64ed91c61df2f), [`8dc408d`](https://github.com/mastra-ai/mastra/commit/8dc408d34438f9e13297f792c11a5cfd6cf952e1), [`c92def1`](https://github.com/mastra-ai/mastra/commit/c92def10a13c822972c96f0a4ca6ffc1f4258aed), [`63041eb`](https://github.com/mastra-ai/mastra/commit/63041eb4c50b520a0a80e03d4cd6ea99f67715a0), [`c118318`](https://github.com/mastra-ai/mastra/commit/c1183181c9804303db4b511c2e2648f8b714712b), [`c5eaec5`](https://github.com/mastra-ai/mastra/commit/c5eaec5a860d80d0e3805e67db0414b87ac8cbed), [`fc07c64`](https://github.com/mastra-ai/mastra/commit/fc07c6465043e08e99193a6751a01c56ffc2e7a1), [`cced745`](https://github.com/mastra-ai/mastra/commit/cced745a056ec2225c5bc702e32d848847aa8b65), [`542dee2`](https://github.com/mastra-ai/mastra/commit/542dee254167f974ff8cbbbfc0ce10f9a2616a7b), [`3c19dce`](https://github.com/mastra-ai/mastra/commit/3c19dcef8e73062a80627a4927eae3ec11145afd), [`aca2869`](https://github.com/mastra-ai/mastra/commit/aca2869b2031982f3c4a2f52525c9be7cf123ef8), [`a58483c`](https://github.com/mastra-ai/mastra/commit/a58483cff1a9d41fce7c931843f48cb0ac450f64), [`a58483c`](https://github.com/mastra-ai/mastra/commit/a58483cff1a9d41fce7c931843f48cb0ac450f64), [`e6f8450`](https://github.com/mastra-ai/mastra/commit/e6f845074d478527026b18d85031b23353e1d0a4), [`895e9df`](https://github.com/mastra-ai/mastra/commit/895e9dfc17d6f34299eca64e317ded9e5f5e5ef8), [`e66b2ba`](https://github.com/mastra-ai/mastra/commit/e66b2ba100db63eaeab6e21e1ea34b113f2ec781), [`3e8727e`](https://github.com/mastra-ai/mastra/commit/3e8727e11ec1a5d733acedb5c872896394be18c1)]:
|
|
18
|
+
- @mastra/core@1.62.0
|
|
19
|
+
|
|
3
20
|
## 0.1.0-alpha.0
|
|
4
21
|
|
|
5
22
|
### Minor Changes
|
package/LICENSE.md
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
Portions of this software are licensed as follows:
|
|
2
|
+
|
|
3
|
+
- All content that resides under any directory named "ee/" within this
|
|
4
|
+
repository, including but not limited to:
|
|
5
|
+
- `packages/core/src/auth/ee/`
|
|
6
|
+
- `packages/server/src/server/auth/ee/`
|
|
7
|
+
is licensed under the license defined in `ee/LICENSE`.
|
|
8
|
+
|
|
9
|
+
- All third-party components incorporated into the Mastra Software are
|
|
10
|
+
licensed under the original license provided by the owner of the
|
|
11
|
+
applicable component.
|
|
12
|
+
|
|
13
|
+
- Content outside of the above-mentioned directories or restrictions is
|
|
14
|
+
available under the "Apache License 2.0" as defined below.
|
|
15
|
+
|
|
16
|
+
# Apache License 2.0
|
|
17
|
+
|
|
18
|
+
Copyright (c) 2025 Kepler Software, Inc.
|
|
19
|
+
|
|
20
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
21
|
+
you may not use this file except in compliance with the License.
|
|
22
|
+
You may obtain a copy of the License at
|
|
23
|
+
|
|
24
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
25
|
+
|
|
26
|
+
Unless required by applicable law or agreed to in writing, software
|
|
27
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
28
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
29
|
+
See the License for the specific language governing permissions and
|
|
30
|
+
limitations under the License.
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import Parallel from 'parallel-web';
|
|
2
|
+
import type { ClientOptions } from 'parallel-web';
|
|
3
|
+
export type ParallelClientOptions = ClientOptions;
|
|
4
|
+
export type ParallelClient = Parallel;
|
|
5
|
+
export declare function getParallelClient(config?: ParallelClientOptions): ParallelClient;
|
|
6
|
+
export declare function createLazyParallelClient(config?: ParallelClientOptions): () => ParallelClient;
|
|
7
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,cAAc,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,MAAM,qBAAqB,GAAG,aAAa,CAAC;AAClD,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;AAEtC,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,cAAc,CAOhF;AAED,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,MAAM,cAAc,CAO7F"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { ParallelClientOptions } from './client.js';
|
|
2
|
+
export declare function createParallelExtractTool(config?: ParallelClientOptions): import("@mastra/core/tools").Tool<{
|
|
3
|
+
urls: string[];
|
|
4
|
+
objective?: string | undefined;
|
|
5
|
+
searchQueries?: string[] | undefined;
|
|
6
|
+
excerptMaxCharsPerResult?: number | undefined;
|
|
7
|
+
clientModel?: string | undefined;
|
|
8
|
+
fullContent?: number | boolean | undefined;
|
|
9
|
+
maxCharsTotal?: number | undefined;
|
|
10
|
+
fetchPolicy?: {
|
|
11
|
+
maxAgeSeconds?: number | undefined;
|
|
12
|
+
timeoutSeconds?: number | undefined;
|
|
13
|
+
disableCacheFallback?: boolean | undefined;
|
|
14
|
+
} | undefined;
|
|
15
|
+
sessionId?: string | undefined;
|
|
16
|
+
}, {
|
|
17
|
+
extractId: string;
|
|
18
|
+
sessionId: string;
|
|
19
|
+
results: {
|
|
20
|
+
url: string;
|
|
21
|
+
excerpts: string[];
|
|
22
|
+
title?: string | undefined;
|
|
23
|
+
publishDate?: string | undefined;
|
|
24
|
+
fullContent?: string | undefined;
|
|
25
|
+
}[];
|
|
26
|
+
errors: {
|
|
27
|
+
url: string;
|
|
28
|
+
errorType: string;
|
|
29
|
+
httpStatusCode?: number | undefined;
|
|
30
|
+
content?: string | undefined;
|
|
31
|
+
}[];
|
|
32
|
+
usage?: {
|
|
33
|
+
name: string;
|
|
34
|
+
count: number;
|
|
35
|
+
}[] | undefined;
|
|
36
|
+
warnings?: {
|
|
37
|
+
type: string;
|
|
38
|
+
message: string;
|
|
39
|
+
detail?: Record<string, unknown> | undefined;
|
|
40
|
+
}[] | undefined;
|
|
41
|
+
}, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, "parallel-extract", unknown>;
|
|
42
|
+
//# sourceMappingURL=extract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../src/extract.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAuGzD,wBAAgB,yBAAyB,CAAC,MAAM,CAAC,EAAE,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gIAqCvE"}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
//#region \0rolldown/runtime.js
|
|
3
|
+
var __create = Object.create;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
11
|
+
key = keys[i];
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
13
|
+
get: ((k) => from[k]).bind(null, key),
|
|
14
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
20
|
+
value: mod,
|
|
21
|
+
enumerable: true
|
|
22
|
+
}) : target, mod));
|
|
23
|
+
//#endregion
|
|
24
|
+
let parallel_web = require("parallel-web");
|
|
25
|
+
parallel_web = __toESM(parallel_web, 1);
|
|
26
|
+
let _mastra_core_tools = require("@mastra/core/tools");
|
|
27
|
+
let zod = require("zod");
|
|
28
|
+
//#region src/client.ts
|
|
29
|
+
function getParallelClient(config) {
|
|
30
|
+
const apiKey = config?.apiKey ?? process.env.PARALLEL_API_KEY;
|
|
31
|
+
if (!apiKey) throw new Error("Parallel API key is required. Pass { apiKey } or set the PARALLEL_API_KEY environment variable.");
|
|
32
|
+
return new parallel_web.default({
|
|
33
|
+
...config,
|
|
34
|
+
apiKey
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
function createLazyParallelClient(config) {
|
|
38
|
+
let client;
|
|
39
|
+
return () => {
|
|
40
|
+
client ??= getParallelClient(config);
|
|
41
|
+
return client;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//#endregion
|
|
45
|
+
//#region src/schemas.ts
|
|
46
|
+
const usageItemSchema = zod.z.object({
|
|
47
|
+
name: zod.z.string(),
|
|
48
|
+
count: zod.z.number()
|
|
49
|
+
});
|
|
50
|
+
const warningSchema = zod.z.object({
|
|
51
|
+
type: zod.z.string(),
|
|
52
|
+
message: zod.z.string(),
|
|
53
|
+
detail: zod.z.record(zod.z.string(), zod.z.unknown()).optional()
|
|
54
|
+
});
|
|
55
|
+
const searchResultSchema = zod.z.object({
|
|
56
|
+
url: zod.z.string(),
|
|
57
|
+
title: zod.z.string().optional(),
|
|
58
|
+
publishDate: zod.z.string().optional(),
|
|
59
|
+
excerpts: zod.z.array(zod.z.string())
|
|
60
|
+
});
|
|
61
|
+
const fetchPolicySchema = zod.z.object({
|
|
62
|
+
maxAgeSeconds: zod.z.number().int().min(600).optional().describe("Maximum cached-content age in seconds before Parallel attempts a live fetch (minimum 600)."),
|
|
63
|
+
timeoutSeconds: zod.z.number().int().positive().optional().describe("Timeout in seconds for a live fetch."),
|
|
64
|
+
disableCacheFallback: zod.z.boolean().optional().describe("Return an error instead of older cached content when a live fetch fails or times out.")
|
|
65
|
+
});
|
|
66
|
+
//#endregion
|
|
67
|
+
//#region src/search.ts
|
|
68
|
+
const ISO_3166_ALPHA_2_CODES = new Set(`AD AE AF AG AI AL AM AO AQ AR AS AT AU AW AX AZ
|
|
69
|
+
BA BB BD BE BF BG BH BI BJ BL BM BN BO BQ BR BS BT BV BW BY BZ
|
|
70
|
+
CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CW CX CY CZ
|
|
71
|
+
DE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR
|
|
72
|
+
GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY
|
|
73
|
+
HK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP
|
|
74
|
+
KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY
|
|
75
|
+
MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ
|
|
76
|
+
NA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY
|
|
77
|
+
QA RE RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR SS ST SV SX SY SZ
|
|
78
|
+
TC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ
|
|
79
|
+
VA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW`.split(/\s+/));
|
|
80
|
+
function isValidCalendarDate(value) {
|
|
81
|
+
const [yearText, monthText, dayText] = value.split("-");
|
|
82
|
+
if (yearText === void 0 || monthText === void 0 || dayText === void 0) return false;
|
|
83
|
+
const year = Number(yearText);
|
|
84
|
+
const month = Number(monthText);
|
|
85
|
+
const day = Number(dayText);
|
|
86
|
+
const daysInMonth = [
|
|
87
|
+
31,
|
|
88
|
+
year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) ? 29 : 28,
|
|
89
|
+
31,
|
|
90
|
+
30,
|
|
91
|
+
31,
|
|
92
|
+
30,
|
|
93
|
+
31,
|
|
94
|
+
31,
|
|
95
|
+
30,
|
|
96
|
+
31,
|
|
97
|
+
30,
|
|
98
|
+
31
|
|
99
|
+
];
|
|
100
|
+
return month >= 1 && month <= 12 && day >= 1 && day <= daysInMonth[month - 1];
|
|
101
|
+
}
|
|
102
|
+
const inputSchema$1 = zod.z.object({
|
|
103
|
+
searchQueries: zod.z.array(zod.z.string().min(1)).min(1).describe("Concise keyword search queries, ideally 3-6 words each. Provide 2-3 queries for best results."),
|
|
104
|
+
objective: zod.z.string().optional().describe("A self-contained natural-language description of the goal driving the search."),
|
|
105
|
+
mode: zod.z.enum([
|
|
106
|
+
"turbo",
|
|
107
|
+
"fast",
|
|
108
|
+
"basic",
|
|
109
|
+
"advanced"
|
|
110
|
+
]).optional().describe("Search mode. Defaults to advanced when omitted."),
|
|
111
|
+
clientModel: zod.z.string().optional().describe("Model that will consume the results, used by Parallel to tailor response defaults."),
|
|
112
|
+
maxResults: zod.z.number().int().positive().optional().describe("Maximum number of results to return."),
|
|
113
|
+
excerptMaxCharsPerResult: zod.z.number().int().positive().optional().describe("Maximum excerpt characters to return for each result."),
|
|
114
|
+
maxCharsTotal: zod.z.number().int().positive().optional().describe("Maximum total excerpt characters across all results."),
|
|
115
|
+
location: zod.z.string().refine((value) => ISO_3166_ALPHA_2_CODES.has(value.toUpperCase()), { message: "location must be a valid ISO 3166-1 alpha-2 country code." }).optional().describe("ISO 3166-1 alpha-2 country code for geo-targeted results."),
|
|
116
|
+
includeDomains: zod.z.array(zod.z.string()).max(200).optional().describe("Only return results from these domains."),
|
|
117
|
+
excludeDomains: zod.z.array(zod.z.string()).max(200).optional().describe("Exclude results from these domains."),
|
|
118
|
+
afterDate: zod.z.string().regex(/^\d{4}-\d{2}-\d{2}$/).refine(isValidCalendarDate, { message: "afterDate must be a valid calendar date in YYYY-MM-DD format." }).optional().describe("Only return content published on or after this YYYY-MM-DD date."),
|
|
119
|
+
fetchPolicy: fetchPolicySchema.optional().describe("Live-fetch and cached-content policy for search results."),
|
|
120
|
+
sessionId: zod.z.string().optional().describe("Session identifier shared across related Search and Extract calls.")
|
|
121
|
+
}).refine((input) => (input.includeDomains?.length ?? 0) + (input.excludeDomains?.length ?? 0) <= 200, {
|
|
122
|
+
message: "includeDomains and excludeDomains can contain at most 200 domains combined.",
|
|
123
|
+
path: ["includeDomains"]
|
|
124
|
+
});
|
|
125
|
+
const outputSchema$1 = zod.z.object({
|
|
126
|
+
searchId: zod.z.string(),
|
|
127
|
+
sessionId: zod.z.string(),
|
|
128
|
+
results: zod.z.array(searchResultSchema),
|
|
129
|
+
usage: zod.z.array(usageItemSchema).optional(),
|
|
130
|
+
warnings: zod.z.array(warningSchema).optional()
|
|
131
|
+
});
|
|
132
|
+
function toFetchPolicy$1(input) {
|
|
133
|
+
return {
|
|
134
|
+
max_age_seconds: input.maxAgeSeconds,
|
|
135
|
+
timeout_seconds: input.timeoutSeconds,
|
|
136
|
+
disable_cache_fallback: input.disableCacheFallback
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
function toSearchParams(input) {
|
|
140
|
+
const params = { search_queries: input.searchQueries };
|
|
141
|
+
if (input.objective !== void 0) params.objective = input.objective;
|
|
142
|
+
if (input.mode !== void 0) params.mode = input.mode;
|
|
143
|
+
if (input.clientModel !== void 0) params.client_model = input.clientModel;
|
|
144
|
+
if (input.maxCharsTotal !== void 0) params.max_chars_total = input.maxCharsTotal;
|
|
145
|
+
if (input.sessionId !== void 0) params.session_id = input.sessionId;
|
|
146
|
+
const sourcePolicy = input.includeDomains !== void 0 || input.excludeDomains !== void 0 || input.afterDate !== void 0 ? {
|
|
147
|
+
include_domains: input.includeDomains,
|
|
148
|
+
exclude_domains: input.excludeDomains,
|
|
149
|
+
after_date: input.afterDate
|
|
150
|
+
} : void 0;
|
|
151
|
+
if (input.maxResults !== void 0 || input.excerptMaxCharsPerResult !== void 0 || input.location !== void 0 || sourcePolicy !== void 0 || input.fetchPolicy !== void 0) params.advanced_settings = {
|
|
152
|
+
max_results: input.maxResults,
|
|
153
|
+
excerpt_settings: input.excerptMaxCharsPerResult === void 0 ? void 0 : { max_chars_per_result: input.excerptMaxCharsPerResult },
|
|
154
|
+
location: input.location,
|
|
155
|
+
source_policy: sourcePolicy,
|
|
156
|
+
fetch_policy: input.fetchPolicy === void 0 ? void 0 : toFetchPolicy$1(input.fetchPolicy)
|
|
157
|
+
};
|
|
158
|
+
return params;
|
|
159
|
+
}
|
|
160
|
+
function createParallelSearchTool(config) {
|
|
161
|
+
const getClient = createLazyParallelClient(config);
|
|
162
|
+
return (0, _mastra_core_tools.createTool)({
|
|
163
|
+
id: "parallel-search",
|
|
164
|
+
description: "Search the web with Parallel. Returns ranked URLs and token-efficient excerpts focused on the search objective.",
|
|
165
|
+
inputSchema: inputSchema$1,
|
|
166
|
+
outputSchema: outputSchema$1,
|
|
167
|
+
execute: async (input) => {
|
|
168
|
+
const response = await getClient().search(toSearchParams(input));
|
|
169
|
+
return {
|
|
170
|
+
searchId: response.search_id,
|
|
171
|
+
sessionId: response.session_id,
|
|
172
|
+
results: response.results.map((result) => ({
|
|
173
|
+
url: result.url,
|
|
174
|
+
title: result.title ?? void 0,
|
|
175
|
+
publishDate: result.publish_date ?? void 0,
|
|
176
|
+
excerpts: result.excerpts
|
|
177
|
+
})),
|
|
178
|
+
usage: response.usage ?? void 0,
|
|
179
|
+
warnings: response.warnings?.map((warning) => ({
|
|
180
|
+
type: warning.type,
|
|
181
|
+
message: warning.message,
|
|
182
|
+
detail: warning.detail ?? void 0
|
|
183
|
+
}))
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
//#endregion
|
|
189
|
+
//#region src/extract.ts
|
|
190
|
+
const inputSchema = zod.z.object({
|
|
191
|
+
urls: zod.z.array(zod.z.string().url()).min(1).max(20).describe("URLs to extract content from (1-20)."),
|
|
192
|
+
objective: zod.z.string().optional().describe("A natural-language description of the information to focus on while extracting."),
|
|
193
|
+
searchQueries: zod.z.array(zod.z.string().min(1)).min(1).optional().describe("Optional keyword queries used with the objective to focus excerpts."),
|
|
194
|
+
excerptMaxCharsPerResult: zod.z.number().int().positive().optional().describe("Maximum excerpt characters to return for each URL."),
|
|
195
|
+
clientModel: zod.z.string().optional().describe("Model that will consume the results, used by Parallel to tailor response defaults."),
|
|
196
|
+
fullContent: zod.z.union([zod.z.boolean(), zod.z.number().int().positive()]).optional().describe("Return full page content. Pass a character limit instead of true to cap content per URL."),
|
|
197
|
+
maxCharsTotal: zod.z.number().int().positive().optional().describe("Maximum total characters across all extracted results."),
|
|
198
|
+
fetchPolicy: fetchPolicySchema.optional().describe("Live-fetch and cached-content policy for extracted URLs."),
|
|
199
|
+
sessionId: zod.z.string().optional().describe("Session identifier shared across related Search and Extract calls.")
|
|
200
|
+
});
|
|
201
|
+
const outputSchema = zod.z.object({
|
|
202
|
+
extractId: zod.z.string(),
|
|
203
|
+
sessionId: zod.z.string(),
|
|
204
|
+
results: zod.z.array(zod.z.object({
|
|
205
|
+
url: zod.z.string(),
|
|
206
|
+
title: zod.z.string().optional(),
|
|
207
|
+
publishDate: zod.z.string().optional(),
|
|
208
|
+
excerpts: zod.z.array(zod.z.string()),
|
|
209
|
+
fullContent: zod.z.string().optional()
|
|
210
|
+
})),
|
|
211
|
+
errors: zod.z.array(zod.z.object({
|
|
212
|
+
url: zod.z.string(),
|
|
213
|
+
errorType: zod.z.string(),
|
|
214
|
+
httpStatusCode: zod.z.number().optional(),
|
|
215
|
+
content: zod.z.string().optional()
|
|
216
|
+
})),
|
|
217
|
+
usage: zod.z.array(usageItemSchema).optional(),
|
|
218
|
+
warnings: zod.z.array(warningSchema).optional()
|
|
219
|
+
});
|
|
220
|
+
function toFetchPolicy(input) {
|
|
221
|
+
return {
|
|
222
|
+
max_age_seconds: input.maxAgeSeconds,
|
|
223
|
+
timeout_seconds: input.timeoutSeconds,
|
|
224
|
+
disable_cache_fallback: input.disableCacheFallback
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
function toExtractParams(input) {
|
|
228
|
+
const params = { urls: input.urls };
|
|
229
|
+
if (input.objective !== void 0) params.objective = input.objective;
|
|
230
|
+
if (input.searchQueries !== void 0) params.search_queries = input.searchQueries;
|
|
231
|
+
if (input.clientModel !== void 0) params.client_model = input.clientModel;
|
|
232
|
+
if (input.maxCharsTotal !== void 0) params.max_chars_total = input.maxCharsTotal;
|
|
233
|
+
if (input.sessionId !== void 0) params.session_id = input.sessionId;
|
|
234
|
+
if (input.excerptMaxCharsPerResult !== void 0 || input.fullContent !== void 0 || input.fetchPolicy !== void 0) params.advanced_settings = {
|
|
235
|
+
excerpt_settings: input.excerptMaxCharsPerResult === void 0 ? void 0 : { max_chars_per_result: input.excerptMaxCharsPerResult },
|
|
236
|
+
full_content: typeof input.fullContent === "number" ? { max_chars_per_result: input.fullContent } : input.fullContent,
|
|
237
|
+
fetch_policy: input.fetchPolicy === void 0 ? void 0 : toFetchPolicy(input.fetchPolicy)
|
|
238
|
+
};
|
|
239
|
+
return params;
|
|
240
|
+
}
|
|
241
|
+
function createParallelExtractTool(config) {
|
|
242
|
+
const getClient = createLazyParallelClient(config);
|
|
243
|
+
return (0, _mastra_core_tools.createTool)({
|
|
244
|
+
id: "parallel-extract",
|
|
245
|
+
description: "Extract relevant excerpts or full page content from URLs with Parallel. Returns successful results and per-URL errors.",
|
|
246
|
+
inputSchema,
|
|
247
|
+
outputSchema,
|
|
248
|
+
execute: async (input) => {
|
|
249
|
+
const response = await getClient().extract(toExtractParams(input));
|
|
250
|
+
return {
|
|
251
|
+
extractId: response.extract_id,
|
|
252
|
+
sessionId: response.session_id,
|
|
253
|
+
results: response.results.map((result) => ({
|
|
254
|
+
url: result.url,
|
|
255
|
+
title: result.title ?? void 0,
|
|
256
|
+
publishDate: result.publish_date ?? void 0,
|
|
257
|
+
excerpts: result.excerpts,
|
|
258
|
+
fullContent: result.full_content ?? void 0
|
|
259
|
+
})),
|
|
260
|
+
errors: response.errors.map((error) => ({
|
|
261
|
+
url: error.url,
|
|
262
|
+
errorType: error.error_type,
|
|
263
|
+
httpStatusCode: error.http_status_code ?? void 0,
|
|
264
|
+
content: error.content ?? void 0
|
|
265
|
+
})),
|
|
266
|
+
usage: response.usage ?? void 0,
|
|
267
|
+
warnings: response.warnings?.map((warning) => ({
|
|
268
|
+
type: warning.type,
|
|
269
|
+
message: warning.message,
|
|
270
|
+
detail: warning.detail ?? void 0
|
|
271
|
+
}))
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
//#endregion
|
|
277
|
+
//#region src/tools.ts
|
|
278
|
+
function createParallelTools(config) {
|
|
279
|
+
return {
|
|
280
|
+
parallelSearch: createParallelSearchTool(config),
|
|
281
|
+
parallelExtract: createParallelExtractTool(config)
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
//#endregion
|
|
285
|
+
exports.createParallelExtractTool = createParallelExtractTool;
|
|
286
|
+
exports.createParallelSearchTool = createParallelSearchTool;
|
|
287
|
+
exports.createParallelTools = createParallelTools;
|
|
288
|
+
exports.getParallelClient = getParallelClient;
|
|
289
|
+
|
|
290
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["Parallel","z","inputSchema","z","outputSchema","toFetchPolicy","z"],"sources":["../src/client.ts","../src/schemas.ts","../src/search.ts","../src/extract.ts","../src/tools.ts"],"sourcesContent":["import Parallel from 'parallel-web';\nimport type { ClientOptions } from 'parallel-web';\n\nexport type ParallelClientOptions = ClientOptions;\nexport type ParallelClient = Parallel;\n\nexport function getParallelClient(config?: ParallelClientOptions): ParallelClient {\n const apiKey = config?.apiKey ?? process.env.PARALLEL_API_KEY;\n if (!apiKey) {\n throw new Error('Parallel API key is required. Pass { apiKey } or set the PARALLEL_API_KEY environment variable.');\n }\n\n return new Parallel({ ...config, apiKey });\n}\n\nexport function createLazyParallelClient(config?: ParallelClientOptions): () => ParallelClient {\n let client: ParallelClient | undefined;\n\n return () => {\n client ??= getParallelClient(config);\n return client;\n };\n}\n","import { z } from 'zod';\n\nexport const usageItemSchema = z.object({\n name: z.string(),\n count: z.number(),\n});\n\nexport const warningSchema = z.object({\n type: z.string(),\n message: z.string(),\n detail: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport const searchResultSchema = z.object({\n url: z.string(),\n title: z.string().optional(),\n publishDate: z.string().optional(),\n excerpts: z.array(z.string()),\n});\n\nexport const fetchPolicySchema = z.object({\n maxAgeSeconds: z\n .number()\n .int()\n .min(600)\n .optional()\n .describe('Maximum cached-content age in seconds before Parallel attempts a live fetch (minimum 600).'),\n timeoutSeconds: z.number().int().positive().optional().describe('Timeout in seconds for a live fetch.'),\n disableCacheFallback: z\n .boolean()\n .optional()\n .describe('Return an error instead of older cached content when a live fetch fails or times out.'),\n});\n\nexport type FetchPolicyInput = z.infer<typeof fetchPolicySchema>;\n","import { createTool } from '@mastra/core/tools';\nimport type Parallel from 'parallel-web';\nimport { z } from 'zod';\n\nimport { createLazyParallelClient } from './client.js';\nimport type { ParallelClientOptions } from './client.js';\nimport { fetchPolicySchema, searchResultSchema, usageItemSchema, warningSchema } from './schemas.js';\nimport type { FetchPolicyInput } from './schemas.js';\n\nconst ISO_3166_ALPHA_2_CODES = new Set(\n `AD AE AF AG AI AL AM AO AQ AR AS AT AU AW AX AZ\nBA BB BD BE BF BG BH BI BJ BL BM BN BO BQ BR BS BT BV BW BY BZ\nCA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CW CX CY CZ\nDE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR\nGA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY\nHK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP\nKE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY\nMA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ\nNA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY\nQA RE RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR SS ST SV SX SY SZ\nTC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ\nVA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW`\n .split(/\\s+/),\n);\n\nfunction isValidCalendarDate(value: string): boolean {\n const [yearText, monthText, dayText] = value.split('-');\n if (yearText === undefined || monthText === undefined || dayText === undefined) return false;\n\n const year = Number(yearText);\n const month = Number(monthText);\n const day = Number(dayText);\n const daysInMonth = [\n 31,\n year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) ? 29 : 28,\n 31,\n 30,\n 31,\n 30,\n 31,\n 31,\n 30,\n 31,\n 30,\n 31,\n ];\n\n return month >= 1 && month <= 12 && day >= 1 && day <= daysInMonth[month - 1]!;\n}\n\nconst inputSchema = z\n .object({\n searchQueries: z\n .array(z.string().min(1))\n .min(1)\n .describe('Concise keyword search queries, ideally 3-6 words each. Provide 2-3 queries for best results.'),\n objective: z\n .string()\n .optional()\n .describe('A self-contained natural-language description of the goal driving the search.'),\n mode: z\n .enum(['turbo', 'fast', 'basic', 'advanced'])\n .optional()\n .describe('Search mode. Defaults to advanced when omitted.'),\n clientModel: z\n .string()\n .optional()\n .describe('Model that will consume the results, used by Parallel to tailor response defaults.'),\n maxResults: z.number().int().positive().optional().describe('Maximum number of results to return.'),\n excerptMaxCharsPerResult: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum excerpt characters to return for each result.'),\n maxCharsTotal: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum total excerpt characters across all results.'),\n location: z\n .string()\n .refine(value => ISO_3166_ALPHA_2_CODES.has(value.toUpperCase()), {\n message: 'location must be a valid ISO 3166-1 alpha-2 country code.',\n })\n .optional()\n .describe('ISO 3166-1 alpha-2 country code for geo-targeted results.'),\n includeDomains: z.array(z.string()).max(200).optional().describe('Only return results from these domains.'),\n excludeDomains: z.array(z.string()).max(200).optional().describe('Exclude results from these domains.'),\n afterDate: z\n .string()\n .regex(/^\\d{4}-\\d{2}-\\d{2}$/)\n .refine(isValidCalendarDate, { message: 'afterDate must be a valid calendar date in YYYY-MM-DD format.' })\n .optional()\n .describe('Only return content published on or after this YYYY-MM-DD date.'),\n fetchPolicy: fetchPolicySchema.optional().describe('Live-fetch and cached-content policy for search results.'),\n sessionId: z.string().optional().describe('Session identifier shared across related Search and Extract calls.'),\n })\n .refine(input => (input.includeDomains?.length ?? 0) + (input.excludeDomains?.length ?? 0) <= 200, {\n message: 'includeDomains and excludeDomains can contain at most 200 domains combined.',\n path: ['includeDomains'],\n });\n\nconst outputSchema = z.object({\n searchId: z.string(),\n sessionId: z.string(),\n results: z.array(searchResultSchema),\n usage: z.array(usageItemSchema).optional(),\n warnings: z.array(warningSchema).optional(),\n});\n\ntype SearchInput = z.infer<typeof inputSchema>;\n\nfunction toFetchPolicy(input: FetchPolicyInput): Parallel.FetchPolicy {\n return {\n max_age_seconds: input.maxAgeSeconds,\n timeout_seconds: input.timeoutSeconds,\n disable_cache_fallback: input.disableCacheFallback,\n };\n}\n\nfunction toSearchParams(input: SearchInput): Parallel.SearchParams {\n const params: Parallel.SearchParams = {\n search_queries: input.searchQueries,\n };\n\n if (input.objective !== undefined) params.objective = input.objective;\n if (input.mode !== undefined) params.mode = input.mode;\n if (input.clientModel !== undefined) params.client_model = input.clientModel;\n if (input.maxCharsTotal !== undefined) params.max_chars_total = input.maxCharsTotal;\n if (input.sessionId !== undefined) params.session_id = input.sessionId;\n\n const sourcePolicy =\n input.includeDomains !== undefined || input.excludeDomains !== undefined || input.afterDate !== undefined\n ? {\n include_domains: input.includeDomains,\n exclude_domains: input.excludeDomains,\n after_date: input.afterDate,\n }\n : undefined;\n\n if (\n input.maxResults !== undefined ||\n input.excerptMaxCharsPerResult !== undefined ||\n input.location !== undefined ||\n sourcePolicy !== undefined ||\n input.fetchPolicy !== undefined\n ) {\n params.advanced_settings = {\n max_results: input.maxResults,\n excerpt_settings:\n input.excerptMaxCharsPerResult === undefined\n ? undefined\n : { max_chars_per_result: input.excerptMaxCharsPerResult },\n location: input.location,\n source_policy: sourcePolicy,\n fetch_policy: input.fetchPolicy === undefined ? undefined : toFetchPolicy(input.fetchPolicy),\n };\n }\n\n return params;\n}\n\nexport function createParallelSearchTool(config?: ParallelClientOptions) {\n const getClient = createLazyParallelClient(config);\n\n return createTool({\n id: 'parallel-search',\n description:\n 'Search the web with Parallel. Returns ranked URLs and token-efficient excerpts focused on the search objective.',\n inputSchema,\n outputSchema,\n execute: async input => {\n const response = await getClient().search(toSearchParams(input));\n\n return {\n searchId: response.search_id,\n sessionId: response.session_id,\n results: response.results.map(result => ({\n url: result.url,\n title: result.title ?? undefined,\n publishDate: result.publish_date ?? undefined,\n excerpts: result.excerpts,\n })),\n usage: response.usage ?? undefined,\n warnings: response.warnings?.map(warning => ({\n type: warning.type,\n message: warning.message,\n detail: warning.detail ?? undefined,\n })),\n };\n },\n });\n}\n","import { createTool } from '@mastra/core/tools';\nimport type Parallel from 'parallel-web';\nimport { z } from 'zod';\n\nimport { createLazyParallelClient } from './client.js';\nimport type { ParallelClientOptions } from './client.js';\nimport { fetchPolicySchema, usageItemSchema, warningSchema } from './schemas.js';\nimport type { FetchPolicyInput } from './schemas.js';\n\nconst inputSchema = z.object({\n urls: z.array(z.string().url()).min(1).max(20).describe('URLs to extract content from (1-20).'),\n objective: z\n .string()\n .optional()\n .describe('A natural-language description of the information to focus on while extracting.'),\n searchQueries: z\n .array(z.string().min(1))\n .min(1)\n .optional()\n .describe('Optional keyword queries used with the objective to focus excerpts.'),\n excerptMaxCharsPerResult: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum excerpt characters to return for each URL.'),\n clientModel: z\n .string()\n .optional()\n .describe('Model that will consume the results, used by Parallel to tailor response defaults.'),\n fullContent: z\n .union([z.boolean(), z.number().int().positive()])\n .optional()\n .describe('Return full page content. Pass a character limit instead of true to cap content per URL.'),\n maxCharsTotal: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum total characters across all extracted results.'),\n fetchPolicy: fetchPolicySchema.optional().describe('Live-fetch and cached-content policy for extracted URLs.'),\n sessionId: z.string().optional().describe('Session identifier shared across related Search and Extract calls.'),\n});\n\nconst outputSchema = z.object({\n extractId: z.string(),\n sessionId: z.string(),\n results: z.array(\n z.object({\n url: z.string(),\n title: z.string().optional(),\n publishDate: z.string().optional(),\n excerpts: z.array(z.string()),\n fullContent: z.string().optional(),\n }),\n ),\n errors: z.array(\n z.object({\n url: z.string(),\n errorType: z.string(),\n httpStatusCode: z.number().optional(),\n content: z.string().optional(),\n }),\n ),\n usage: z.array(usageItemSchema).optional(),\n warnings: z.array(warningSchema).optional(),\n});\n\ntype ExtractInput = z.infer<typeof inputSchema>;\n\nfunction toFetchPolicy(input: FetchPolicyInput): Parallel.FetchPolicy {\n return {\n max_age_seconds: input.maxAgeSeconds,\n timeout_seconds: input.timeoutSeconds,\n disable_cache_fallback: input.disableCacheFallback,\n };\n}\n\nfunction toExtractParams(input: ExtractInput): Parallel.ExtractParams {\n const params: Parallel.ExtractParams = {\n urls: input.urls,\n };\n\n if (input.objective !== undefined) params.objective = input.objective;\n if (input.searchQueries !== undefined) params.search_queries = input.searchQueries;\n if (input.clientModel !== undefined) params.client_model = input.clientModel;\n if (input.maxCharsTotal !== undefined) params.max_chars_total = input.maxCharsTotal;\n if (input.sessionId !== undefined) params.session_id = input.sessionId;\n\n if (\n input.excerptMaxCharsPerResult !== undefined ||\n input.fullContent !== undefined ||\n input.fetchPolicy !== undefined\n ) {\n params.advanced_settings = {\n excerpt_settings:\n input.excerptMaxCharsPerResult === undefined\n ? undefined\n : { max_chars_per_result: input.excerptMaxCharsPerResult },\n full_content:\n typeof input.fullContent === 'number' ? { max_chars_per_result: input.fullContent } : input.fullContent,\n fetch_policy: input.fetchPolicy === undefined ? undefined : toFetchPolicy(input.fetchPolicy),\n };\n }\n\n return params;\n}\n\nexport function createParallelExtractTool(config?: ParallelClientOptions) {\n const getClient = createLazyParallelClient(config);\n\n return createTool({\n id: 'parallel-extract',\n description:\n 'Extract relevant excerpts or full page content from URLs with Parallel. Returns successful results and per-URL errors.',\n inputSchema,\n outputSchema,\n execute: async input => {\n const response = await getClient().extract(toExtractParams(input));\n\n return {\n extractId: response.extract_id,\n sessionId: response.session_id,\n results: response.results.map(result => ({\n url: result.url,\n title: result.title ?? undefined,\n publishDate: result.publish_date ?? undefined,\n excerpts: result.excerpts,\n fullContent: result.full_content ?? undefined,\n })),\n errors: response.errors.map(error => ({\n url: error.url,\n errorType: error.error_type,\n httpStatusCode: error.http_status_code ?? undefined,\n content: error.content ?? undefined,\n })),\n usage: response.usage ?? undefined,\n warnings: response.warnings?.map(warning => ({\n type: warning.type,\n message: warning.message,\n detail: warning.detail ?? undefined,\n })),\n };\n },\n });\n}\n","import type { ParallelClientOptions } from './client.js';\nimport { createParallelExtractTool } from './extract.js';\nimport { createParallelSearchTool } from './search.js';\n\nexport function createParallelTools(config?: ParallelClientOptions) {\n return {\n parallelSearch: createParallelSearchTool(config),\n parallelExtract: createParallelExtractTool(config),\n };\n}\n"],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { getParallelClient, type ParallelClientOptions, type ParallelClient } from './client.js';
|
|
2
|
+
export { createParallelSearchTool } from './search.js';
|
|
3
|
+
export { createParallelExtractTool } from './extract.js';
|
|
4
|
+
export { createParallelTools } from './tools.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import Parallel from "parallel-web";
|
|
2
|
+
import { createTool } from "@mastra/core/tools";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
//#region src/client.ts
|
|
5
|
+
function getParallelClient(config) {
|
|
6
|
+
const apiKey = config?.apiKey ?? process.env.PARALLEL_API_KEY;
|
|
7
|
+
if (!apiKey) throw new Error("Parallel API key is required. Pass { apiKey } or set the PARALLEL_API_KEY environment variable.");
|
|
8
|
+
return new Parallel({
|
|
9
|
+
...config,
|
|
10
|
+
apiKey
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
function createLazyParallelClient(config) {
|
|
14
|
+
let client;
|
|
15
|
+
return () => {
|
|
16
|
+
client ??= getParallelClient(config);
|
|
17
|
+
return client;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
//#region src/schemas.ts
|
|
22
|
+
const usageItemSchema = z.object({
|
|
23
|
+
name: z.string(),
|
|
24
|
+
count: z.number()
|
|
25
|
+
});
|
|
26
|
+
const warningSchema = z.object({
|
|
27
|
+
type: z.string(),
|
|
28
|
+
message: z.string(),
|
|
29
|
+
detail: z.record(z.string(), z.unknown()).optional()
|
|
30
|
+
});
|
|
31
|
+
const searchResultSchema = z.object({
|
|
32
|
+
url: z.string(),
|
|
33
|
+
title: z.string().optional(),
|
|
34
|
+
publishDate: z.string().optional(),
|
|
35
|
+
excerpts: z.array(z.string())
|
|
36
|
+
});
|
|
37
|
+
const fetchPolicySchema = z.object({
|
|
38
|
+
maxAgeSeconds: z.number().int().min(600).optional().describe("Maximum cached-content age in seconds before Parallel attempts a live fetch (minimum 600)."),
|
|
39
|
+
timeoutSeconds: z.number().int().positive().optional().describe("Timeout in seconds for a live fetch."),
|
|
40
|
+
disableCacheFallback: z.boolean().optional().describe("Return an error instead of older cached content when a live fetch fails or times out.")
|
|
41
|
+
});
|
|
42
|
+
//#endregion
|
|
43
|
+
//#region src/search.ts
|
|
44
|
+
const ISO_3166_ALPHA_2_CODES = new Set(`AD AE AF AG AI AL AM AO AQ AR AS AT AU AW AX AZ
|
|
45
|
+
BA BB BD BE BF BG BH BI BJ BL BM BN BO BQ BR BS BT BV BW BY BZ
|
|
46
|
+
CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CW CX CY CZ
|
|
47
|
+
DE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR
|
|
48
|
+
GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY
|
|
49
|
+
HK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP
|
|
50
|
+
KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY
|
|
51
|
+
MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ
|
|
52
|
+
NA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY
|
|
53
|
+
QA RE RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR SS ST SV SX SY SZ
|
|
54
|
+
TC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ
|
|
55
|
+
VA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW`.split(/\s+/));
|
|
56
|
+
function isValidCalendarDate(value) {
|
|
57
|
+
const [yearText, monthText, dayText] = value.split("-");
|
|
58
|
+
if (yearText === void 0 || monthText === void 0 || dayText === void 0) return false;
|
|
59
|
+
const year = Number(yearText);
|
|
60
|
+
const month = Number(monthText);
|
|
61
|
+
const day = Number(dayText);
|
|
62
|
+
const daysInMonth = [
|
|
63
|
+
31,
|
|
64
|
+
year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) ? 29 : 28,
|
|
65
|
+
31,
|
|
66
|
+
30,
|
|
67
|
+
31,
|
|
68
|
+
30,
|
|
69
|
+
31,
|
|
70
|
+
31,
|
|
71
|
+
30,
|
|
72
|
+
31,
|
|
73
|
+
30,
|
|
74
|
+
31
|
|
75
|
+
];
|
|
76
|
+
return month >= 1 && month <= 12 && day >= 1 && day <= daysInMonth[month - 1];
|
|
77
|
+
}
|
|
78
|
+
const inputSchema$1 = z.object({
|
|
79
|
+
searchQueries: z.array(z.string().min(1)).min(1).describe("Concise keyword search queries, ideally 3-6 words each. Provide 2-3 queries for best results."),
|
|
80
|
+
objective: z.string().optional().describe("A self-contained natural-language description of the goal driving the search."),
|
|
81
|
+
mode: z.enum([
|
|
82
|
+
"turbo",
|
|
83
|
+
"fast",
|
|
84
|
+
"basic",
|
|
85
|
+
"advanced"
|
|
86
|
+
]).optional().describe("Search mode. Defaults to advanced when omitted."),
|
|
87
|
+
clientModel: z.string().optional().describe("Model that will consume the results, used by Parallel to tailor response defaults."),
|
|
88
|
+
maxResults: z.number().int().positive().optional().describe("Maximum number of results to return."),
|
|
89
|
+
excerptMaxCharsPerResult: z.number().int().positive().optional().describe("Maximum excerpt characters to return for each result."),
|
|
90
|
+
maxCharsTotal: z.number().int().positive().optional().describe("Maximum total excerpt characters across all results."),
|
|
91
|
+
location: z.string().refine((value) => ISO_3166_ALPHA_2_CODES.has(value.toUpperCase()), { message: "location must be a valid ISO 3166-1 alpha-2 country code." }).optional().describe("ISO 3166-1 alpha-2 country code for geo-targeted results."),
|
|
92
|
+
includeDomains: z.array(z.string()).max(200).optional().describe("Only return results from these domains."),
|
|
93
|
+
excludeDomains: z.array(z.string()).max(200).optional().describe("Exclude results from these domains."),
|
|
94
|
+
afterDate: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).refine(isValidCalendarDate, { message: "afterDate must be a valid calendar date in YYYY-MM-DD format." }).optional().describe("Only return content published on or after this YYYY-MM-DD date."),
|
|
95
|
+
fetchPolicy: fetchPolicySchema.optional().describe("Live-fetch and cached-content policy for search results."),
|
|
96
|
+
sessionId: z.string().optional().describe("Session identifier shared across related Search and Extract calls.")
|
|
97
|
+
}).refine((input) => (input.includeDomains?.length ?? 0) + (input.excludeDomains?.length ?? 0) <= 200, {
|
|
98
|
+
message: "includeDomains and excludeDomains can contain at most 200 domains combined.",
|
|
99
|
+
path: ["includeDomains"]
|
|
100
|
+
});
|
|
101
|
+
const outputSchema$1 = z.object({
|
|
102
|
+
searchId: z.string(),
|
|
103
|
+
sessionId: z.string(),
|
|
104
|
+
results: z.array(searchResultSchema),
|
|
105
|
+
usage: z.array(usageItemSchema).optional(),
|
|
106
|
+
warnings: z.array(warningSchema).optional()
|
|
107
|
+
});
|
|
108
|
+
function toFetchPolicy$1(input) {
|
|
109
|
+
return {
|
|
110
|
+
max_age_seconds: input.maxAgeSeconds,
|
|
111
|
+
timeout_seconds: input.timeoutSeconds,
|
|
112
|
+
disable_cache_fallback: input.disableCacheFallback
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
function toSearchParams(input) {
|
|
116
|
+
const params = { search_queries: input.searchQueries };
|
|
117
|
+
if (input.objective !== void 0) params.objective = input.objective;
|
|
118
|
+
if (input.mode !== void 0) params.mode = input.mode;
|
|
119
|
+
if (input.clientModel !== void 0) params.client_model = input.clientModel;
|
|
120
|
+
if (input.maxCharsTotal !== void 0) params.max_chars_total = input.maxCharsTotal;
|
|
121
|
+
if (input.sessionId !== void 0) params.session_id = input.sessionId;
|
|
122
|
+
const sourcePolicy = input.includeDomains !== void 0 || input.excludeDomains !== void 0 || input.afterDate !== void 0 ? {
|
|
123
|
+
include_domains: input.includeDomains,
|
|
124
|
+
exclude_domains: input.excludeDomains,
|
|
125
|
+
after_date: input.afterDate
|
|
126
|
+
} : void 0;
|
|
127
|
+
if (input.maxResults !== void 0 || input.excerptMaxCharsPerResult !== void 0 || input.location !== void 0 || sourcePolicy !== void 0 || input.fetchPolicy !== void 0) params.advanced_settings = {
|
|
128
|
+
max_results: input.maxResults,
|
|
129
|
+
excerpt_settings: input.excerptMaxCharsPerResult === void 0 ? void 0 : { max_chars_per_result: input.excerptMaxCharsPerResult },
|
|
130
|
+
location: input.location,
|
|
131
|
+
source_policy: sourcePolicy,
|
|
132
|
+
fetch_policy: input.fetchPolicy === void 0 ? void 0 : toFetchPolicy$1(input.fetchPolicy)
|
|
133
|
+
};
|
|
134
|
+
return params;
|
|
135
|
+
}
|
|
136
|
+
function createParallelSearchTool(config) {
|
|
137
|
+
const getClient = createLazyParallelClient(config);
|
|
138
|
+
return createTool({
|
|
139
|
+
id: "parallel-search",
|
|
140
|
+
description: "Search the web with Parallel. Returns ranked URLs and token-efficient excerpts focused on the search objective.",
|
|
141
|
+
inputSchema: inputSchema$1,
|
|
142
|
+
outputSchema: outputSchema$1,
|
|
143
|
+
execute: async (input) => {
|
|
144
|
+
const response = await getClient().search(toSearchParams(input));
|
|
145
|
+
return {
|
|
146
|
+
searchId: response.search_id,
|
|
147
|
+
sessionId: response.session_id,
|
|
148
|
+
results: response.results.map((result) => ({
|
|
149
|
+
url: result.url,
|
|
150
|
+
title: result.title ?? void 0,
|
|
151
|
+
publishDate: result.publish_date ?? void 0,
|
|
152
|
+
excerpts: result.excerpts
|
|
153
|
+
})),
|
|
154
|
+
usage: response.usage ?? void 0,
|
|
155
|
+
warnings: response.warnings?.map((warning) => ({
|
|
156
|
+
type: warning.type,
|
|
157
|
+
message: warning.message,
|
|
158
|
+
detail: warning.detail ?? void 0
|
|
159
|
+
}))
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
//#endregion
|
|
165
|
+
//#region src/extract.ts
|
|
166
|
+
const inputSchema = z.object({
|
|
167
|
+
urls: z.array(z.string().url()).min(1).max(20).describe("URLs to extract content from (1-20)."),
|
|
168
|
+
objective: z.string().optional().describe("A natural-language description of the information to focus on while extracting."),
|
|
169
|
+
searchQueries: z.array(z.string().min(1)).min(1).optional().describe("Optional keyword queries used with the objective to focus excerpts."),
|
|
170
|
+
excerptMaxCharsPerResult: z.number().int().positive().optional().describe("Maximum excerpt characters to return for each URL."),
|
|
171
|
+
clientModel: z.string().optional().describe("Model that will consume the results, used by Parallel to tailor response defaults."),
|
|
172
|
+
fullContent: z.union([z.boolean(), z.number().int().positive()]).optional().describe("Return full page content. Pass a character limit instead of true to cap content per URL."),
|
|
173
|
+
maxCharsTotal: z.number().int().positive().optional().describe("Maximum total characters across all extracted results."),
|
|
174
|
+
fetchPolicy: fetchPolicySchema.optional().describe("Live-fetch and cached-content policy for extracted URLs."),
|
|
175
|
+
sessionId: z.string().optional().describe("Session identifier shared across related Search and Extract calls.")
|
|
176
|
+
});
|
|
177
|
+
const outputSchema = z.object({
|
|
178
|
+
extractId: z.string(),
|
|
179
|
+
sessionId: z.string(),
|
|
180
|
+
results: z.array(z.object({
|
|
181
|
+
url: z.string(),
|
|
182
|
+
title: z.string().optional(),
|
|
183
|
+
publishDate: z.string().optional(),
|
|
184
|
+
excerpts: z.array(z.string()),
|
|
185
|
+
fullContent: z.string().optional()
|
|
186
|
+
})),
|
|
187
|
+
errors: z.array(z.object({
|
|
188
|
+
url: z.string(),
|
|
189
|
+
errorType: z.string(),
|
|
190
|
+
httpStatusCode: z.number().optional(),
|
|
191
|
+
content: z.string().optional()
|
|
192
|
+
})),
|
|
193
|
+
usage: z.array(usageItemSchema).optional(),
|
|
194
|
+
warnings: z.array(warningSchema).optional()
|
|
195
|
+
});
|
|
196
|
+
function toFetchPolicy(input) {
|
|
197
|
+
return {
|
|
198
|
+
max_age_seconds: input.maxAgeSeconds,
|
|
199
|
+
timeout_seconds: input.timeoutSeconds,
|
|
200
|
+
disable_cache_fallback: input.disableCacheFallback
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
function toExtractParams(input) {
|
|
204
|
+
const params = { urls: input.urls };
|
|
205
|
+
if (input.objective !== void 0) params.objective = input.objective;
|
|
206
|
+
if (input.searchQueries !== void 0) params.search_queries = input.searchQueries;
|
|
207
|
+
if (input.clientModel !== void 0) params.client_model = input.clientModel;
|
|
208
|
+
if (input.maxCharsTotal !== void 0) params.max_chars_total = input.maxCharsTotal;
|
|
209
|
+
if (input.sessionId !== void 0) params.session_id = input.sessionId;
|
|
210
|
+
if (input.excerptMaxCharsPerResult !== void 0 || input.fullContent !== void 0 || input.fetchPolicy !== void 0) params.advanced_settings = {
|
|
211
|
+
excerpt_settings: input.excerptMaxCharsPerResult === void 0 ? void 0 : { max_chars_per_result: input.excerptMaxCharsPerResult },
|
|
212
|
+
full_content: typeof input.fullContent === "number" ? { max_chars_per_result: input.fullContent } : input.fullContent,
|
|
213
|
+
fetch_policy: input.fetchPolicy === void 0 ? void 0 : toFetchPolicy(input.fetchPolicy)
|
|
214
|
+
};
|
|
215
|
+
return params;
|
|
216
|
+
}
|
|
217
|
+
function createParallelExtractTool(config) {
|
|
218
|
+
const getClient = createLazyParallelClient(config);
|
|
219
|
+
return createTool({
|
|
220
|
+
id: "parallel-extract",
|
|
221
|
+
description: "Extract relevant excerpts or full page content from URLs with Parallel. Returns successful results and per-URL errors.",
|
|
222
|
+
inputSchema,
|
|
223
|
+
outputSchema,
|
|
224
|
+
execute: async (input) => {
|
|
225
|
+
const response = await getClient().extract(toExtractParams(input));
|
|
226
|
+
return {
|
|
227
|
+
extractId: response.extract_id,
|
|
228
|
+
sessionId: response.session_id,
|
|
229
|
+
results: response.results.map((result) => ({
|
|
230
|
+
url: result.url,
|
|
231
|
+
title: result.title ?? void 0,
|
|
232
|
+
publishDate: result.publish_date ?? void 0,
|
|
233
|
+
excerpts: result.excerpts,
|
|
234
|
+
fullContent: result.full_content ?? void 0
|
|
235
|
+
})),
|
|
236
|
+
errors: response.errors.map((error) => ({
|
|
237
|
+
url: error.url,
|
|
238
|
+
errorType: error.error_type,
|
|
239
|
+
httpStatusCode: error.http_status_code ?? void 0,
|
|
240
|
+
content: error.content ?? void 0
|
|
241
|
+
})),
|
|
242
|
+
usage: response.usage ?? void 0,
|
|
243
|
+
warnings: response.warnings?.map((warning) => ({
|
|
244
|
+
type: warning.type,
|
|
245
|
+
message: warning.message,
|
|
246
|
+
detail: warning.detail ?? void 0
|
|
247
|
+
}))
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
//#endregion
|
|
253
|
+
//#region src/tools.ts
|
|
254
|
+
function createParallelTools(config) {
|
|
255
|
+
return {
|
|
256
|
+
parallelSearch: createParallelSearchTool(config),
|
|
257
|
+
parallelExtract: createParallelExtractTool(config)
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
//#endregion
|
|
261
|
+
export { createParallelExtractTool, createParallelSearchTool, createParallelTools, getParallelClient };
|
|
262
|
+
|
|
263
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["inputSchema","outputSchema","toFetchPolicy"],"sources":["../src/client.ts","../src/schemas.ts","../src/search.ts","../src/extract.ts","../src/tools.ts"],"sourcesContent":["import Parallel from 'parallel-web';\nimport type { ClientOptions } from 'parallel-web';\n\nexport type ParallelClientOptions = ClientOptions;\nexport type ParallelClient = Parallel;\n\nexport function getParallelClient(config?: ParallelClientOptions): ParallelClient {\n const apiKey = config?.apiKey ?? process.env.PARALLEL_API_KEY;\n if (!apiKey) {\n throw new Error('Parallel API key is required. Pass { apiKey } or set the PARALLEL_API_KEY environment variable.');\n }\n\n return new Parallel({ ...config, apiKey });\n}\n\nexport function createLazyParallelClient(config?: ParallelClientOptions): () => ParallelClient {\n let client: ParallelClient | undefined;\n\n return () => {\n client ??= getParallelClient(config);\n return client;\n };\n}\n","import { z } from 'zod';\n\nexport const usageItemSchema = z.object({\n name: z.string(),\n count: z.number(),\n});\n\nexport const warningSchema = z.object({\n type: z.string(),\n message: z.string(),\n detail: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport const searchResultSchema = z.object({\n url: z.string(),\n title: z.string().optional(),\n publishDate: z.string().optional(),\n excerpts: z.array(z.string()),\n});\n\nexport const fetchPolicySchema = z.object({\n maxAgeSeconds: z\n .number()\n .int()\n .min(600)\n .optional()\n .describe('Maximum cached-content age in seconds before Parallel attempts a live fetch (minimum 600).'),\n timeoutSeconds: z.number().int().positive().optional().describe('Timeout in seconds for a live fetch.'),\n disableCacheFallback: z\n .boolean()\n .optional()\n .describe('Return an error instead of older cached content when a live fetch fails or times out.'),\n});\n\nexport type FetchPolicyInput = z.infer<typeof fetchPolicySchema>;\n","import { createTool } from '@mastra/core/tools';\nimport type Parallel from 'parallel-web';\nimport { z } from 'zod';\n\nimport { createLazyParallelClient } from './client.js';\nimport type { ParallelClientOptions } from './client.js';\nimport { fetchPolicySchema, searchResultSchema, usageItemSchema, warningSchema } from './schemas.js';\nimport type { FetchPolicyInput } from './schemas.js';\n\nconst ISO_3166_ALPHA_2_CODES = new Set(\n `AD AE AF AG AI AL AM AO AQ AR AS AT AU AW AX AZ\nBA BB BD BE BF BG BH BI BJ BL BM BN BO BQ BR BS BT BV BW BY BZ\nCA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CW CX CY CZ\nDE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR\nGA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY\nHK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP\nKE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY\nMA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ\nNA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY\nQA RE RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR SS ST SV SX SY SZ\nTC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ\nVA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW`\n .split(/\\s+/),\n);\n\nfunction isValidCalendarDate(value: string): boolean {\n const [yearText, monthText, dayText] = value.split('-');\n if (yearText === undefined || monthText === undefined || dayText === undefined) return false;\n\n const year = Number(yearText);\n const month = Number(monthText);\n const day = Number(dayText);\n const daysInMonth = [\n 31,\n year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) ? 29 : 28,\n 31,\n 30,\n 31,\n 30,\n 31,\n 31,\n 30,\n 31,\n 30,\n 31,\n ];\n\n return month >= 1 && month <= 12 && day >= 1 && day <= daysInMonth[month - 1]!;\n}\n\nconst inputSchema = z\n .object({\n searchQueries: z\n .array(z.string().min(1))\n .min(1)\n .describe('Concise keyword search queries, ideally 3-6 words each. Provide 2-3 queries for best results.'),\n objective: z\n .string()\n .optional()\n .describe('A self-contained natural-language description of the goal driving the search.'),\n mode: z\n .enum(['turbo', 'fast', 'basic', 'advanced'])\n .optional()\n .describe('Search mode. Defaults to advanced when omitted.'),\n clientModel: z\n .string()\n .optional()\n .describe('Model that will consume the results, used by Parallel to tailor response defaults.'),\n maxResults: z.number().int().positive().optional().describe('Maximum number of results to return.'),\n excerptMaxCharsPerResult: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum excerpt characters to return for each result.'),\n maxCharsTotal: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum total excerpt characters across all results.'),\n location: z\n .string()\n .refine(value => ISO_3166_ALPHA_2_CODES.has(value.toUpperCase()), {\n message: 'location must be a valid ISO 3166-1 alpha-2 country code.',\n })\n .optional()\n .describe('ISO 3166-1 alpha-2 country code for geo-targeted results.'),\n includeDomains: z.array(z.string()).max(200).optional().describe('Only return results from these domains.'),\n excludeDomains: z.array(z.string()).max(200).optional().describe('Exclude results from these domains.'),\n afterDate: z\n .string()\n .regex(/^\\d{4}-\\d{2}-\\d{2}$/)\n .refine(isValidCalendarDate, { message: 'afterDate must be a valid calendar date in YYYY-MM-DD format.' })\n .optional()\n .describe('Only return content published on or after this YYYY-MM-DD date.'),\n fetchPolicy: fetchPolicySchema.optional().describe('Live-fetch and cached-content policy for search results.'),\n sessionId: z.string().optional().describe('Session identifier shared across related Search and Extract calls.'),\n })\n .refine(input => (input.includeDomains?.length ?? 0) + (input.excludeDomains?.length ?? 0) <= 200, {\n message: 'includeDomains and excludeDomains can contain at most 200 domains combined.',\n path: ['includeDomains'],\n });\n\nconst outputSchema = z.object({\n searchId: z.string(),\n sessionId: z.string(),\n results: z.array(searchResultSchema),\n usage: z.array(usageItemSchema).optional(),\n warnings: z.array(warningSchema).optional(),\n});\n\ntype SearchInput = z.infer<typeof inputSchema>;\n\nfunction toFetchPolicy(input: FetchPolicyInput): Parallel.FetchPolicy {\n return {\n max_age_seconds: input.maxAgeSeconds,\n timeout_seconds: input.timeoutSeconds,\n disable_cache_fallback: input.disableCacheFallback,\n };\n}\n\nfunction toSearchParams(input: SearchInput): Parallel.SearchParams {\n const params: Parallel.SearchParams = {\n search_queries: input.searchQueries,\n };\n\n if (input.objective !== undefined) params.objective = input.objective;\n if (input.mode !== undefined) params.mode = input.mode;\n if (input.clientModel !== undefined) params.client_model = input.clientModel;\n if (input.maxCharsTotal !== undefined) params.max_chars_total = input.maxCharsTotal;\n if (input.sessionId !== undefined) params.session_id = input.sessionId;\n\n const sourcePolicy =\n input.includeDomains !== undefined || input.excludeDomains !== undefined || input.afterDate !== undefined\n ? {\n include_domains: input.includeDomains,\n exclude_domains: input.excludeDomains,\n after_date: input.afterDate,\n }\n : undefined;\n\n if (\n input.maxResults !== undefined ||\n input.excerptMaxCharsPerResult !== undefined ||\n input.location !== undefined ||\n sourcePolicy !== undefined ||\n input.fetchPolicy !== undefined\n ) {\n params.advanced_settings = {\n max_results: input.maxResults,\n excerpt_settings:\n input.excerptMaxCharsPerResult === undefined\n ? undefined\n : { max_chars_per_result: input.excerptMaxCharsPerResult },\n location: input.location,\n source_policy: sourcePolicy,\n fetch_policy: input.fetchPolicy === undefined ? undefined : toFetchPolicy(input.fetchPolicy),\n };\n }\n\n return params;\n}\n\nexport function createParallelSearchTool(config?: ParallelClientOptions) {\n const getClient = createLazyParallelClient(config);\n\n return createTool({\n id: 'parallel-search',\n description:\n 'Search the web with Parallel. Returns ranked URLs and token-efficient excerpts focused on the search objective.',\n inputSchema,\n outputSchema,\n execute: async input => {\n const response = await getClient().search(toSearchParams(input));\n\n return {\n searchId: response.search_id,\n sessionId: response.session_id,\n results: response.results.map(result => ({\n url: result.url,\n title: result.title ?? undefined,\n publishDate: result.publish_date ?? undefined,\n excerpts: result.excerpts,\n })),\n usage: response.usage ?? undefined,\n warnings: response.warnings?.map(warning => ({\n type: warning.type,\n message: warning.message,\n detail: warning.detail ?? undefined,\n })),\n };\n },\n });\n}\n","import { createTool } from '@mastra/core/tools';\nimport type Parallel from 'parallel-web';\nimport { z } from 'zod';\n\nimport { createLazyParallelClient } from './client.js';\nimport type { ParallelClientOptions } from './client.js';\nimport { fetchPolicySchema, usageItemSchema, warningSchema } from './schemas.js';\nimport type { FetchPolicyInput } from './schemas.js';\n\nconst inputSchema = z.object({\n urls: z.array(z.string().url()).min(1).max(20).describe('URLs to extract content from (1-20).'),\n objective: z\n .string()\n .optional()\n .describe('A natural-language description of the information to focus on while extracting.'),\n searchQueries: z\n .array(z.string().min(1))\n .min(1)\n .optional()\n .describe('Optional keyword queries used with the objective to focus excerpts.'),\n excerptMaxCharsPerResult: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum excerpt characters to return for each URL.'),\n clientModel: z\n .string()\n .optional()\n .describe('Model that will consume the results, used by Parallel to tailor response defaults.'),\n fullContent: z\n .union([z.boolean(), z.number().int().positive()])\n .optional()\n .describe('Return full page content. Pass a character limit instead of true to cap content per URL.'),\n maxCharsTotal: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum total characters across all extracted results.'),\n fetchPolicy: fetchPolicySchema.optional().describe('Live-fetch and cached-content policy for extracted URLs.'),\n sessionId: z.string().optional().describe('Session identifier shared across related Search and Extract calls.'),\n});\n\nconst outputSchema = z.object({\n extractId: z.string(),\n sessionId: z.string(),\n results: z.array(\n z.object({\n url: z.string(),\n title: z.string().optional(),\n publishDate: z.string().optional(),\n excerpts: z.array(z.string()),\n fullContent: z.string().optional(),\n }),\n ),\n errors: z.array(\n z.object({\n url: z.string(),\n errorType: z.string(),\n httpStatusCode: z.number().optional(),\n content: z.string().optional(),\n }),\n ),\n usage: z.array(usageItemSchema).optional(),\n warnings: z.array(warningSchema).optional(),\n});\n\ntype ExtractInput = z.infer<typeof inputSchema>;\n\nfunction toFetchPolicy(input: FetchPolicyInput): Parallel.FetchPolicy {\n return {\n max_age_seconds: input.maxAgeSeconds,\n timeout_seconds: input.timeoutSeconds,\n disable_cache_fallback: input.disableCacheFallback,\n };\n}\n\nfunction toExtractParams(input: ExtractInput): Parallel.ExtractParams {\n const params: Parallel.ExtractParams = {\n urls: input.urls,\n };\n\n if (input.objective !== undefined) params.objective = input.objective;\n if (input.searchQueries !== undefined) params.search_queries = input.searchQueries;\n if (input.clientModel !== undefined) params.client_model = input.clientModel;\n if (input.maxCharsTotal !== undefined) params.max_chars_total = input.maxCharsTotal;\n if (input.sessionId !== undefined) params.session_id = input.sessionId;\n\n if (\n input.excerptMaxCharsPerResult !== undefined ||\n input.fullContent !== undefined ||\n input.fetchPolicy !== undefined\n ) {\n params.advanced_settings = {\n excerpt_settings:\n input.excerptMaxCharsPerResult === undefined\n ? undefined\n : { max_chars_per_result: input.excerptMaxCharsPerResult },\n full_content:\n typeof input.fullContent === 'number' ? { max_chars_per_result: input.fullContent } : input.fullContent,\n fetch_policy: input.fetchPolicy === undefined ? undefined : toFetchPolicy(input.fetchPolicy),\n };\n }\n\n return params;\n}\n\nexport function createParallelExtractTool(config?: ParallelClientOptions) {\n const getClient = createLazyParallelClient(config);\n\n return createTool({\n id: 'parallel-extract',\n description:\n 'Extract relevant excerpts or full page content from URLs with Parallel. Returns successful results and per-URL errors.',\n inputSchema,\n outputSchema,\n execute: async input => {\n const response = await getClient().extract(toExtractParams(input));\n\n return {\n extractId: response.extract_id,\n sessionId: response.session_id,\n results: response.results.map(result => ({\n url: result.url,\n title: result.title ?? undefined,\n publishDate: result.publish_date ?? undefined,\n excerpts: result.excerpts,\n fullContent: result.full_content ?? undefined,\n })),\n errors: response.errors.map(error => ({\n url: error.url,\n errorType: error.error_type,\n httpStatusCode: error.http_status_code ?? undefined,\n content: error.content ?? undefined,\n })),\n usage: response.usage ?? undefined,\n warnings: response.warnings?.map(warning => ({\n type: warning.type,\n message: warning.message,\n detail: warning.detail ?? undefined,\n })),\n };\n },\n });\n}\n","import type { ParallelClientOptions } from './client.js';\nimport { createParallelExtractTool } from './extract.js';\nimport { createParallelSearchTool } from './search.js';\n\nexport function createParallelTools(config?: ParallelClientOptions) {\n return {\n parallelSearch: createParallelSearchTool(config),\n parallelExtract: createParallelExtractTool(config),\n };\n}\n"],"mappings":";;;;AAMA,SAAgB,kBAAkB,QAAgD;CAChF,MAAM,SAAS,QAAQ,UAAU,QAAQ,IAAI;CAC7C,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,iGAAiG;CAGnH,OAAO,IAAI,SAAS;EAAE,GAAG;EAAQ;CAAO,CAAC;AAC3C;AAEA,SAAgB,yBAAyB,QAAsD;CAC7F,IAAI;CAEJ,aAAa;EACX,WAAW,kBAAkB,MAAM;EACnC,OAAO;CACT;AACF;;;ACpBA,MAAa,kBAAkB,EAAE,OAAO;CACtC,MAAM,EAAE,OAAO;CACf,OAAO,EAAE,OAAO;AAClB,CAAC;AAED,MAAa,gBAAgB,EAAE,OAAO;CACpC,MAAM,EAAE,OAAO;CACf,SAAS,EAAE,OAAO;CAClB,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS;AACrD,CAAC;AAED,MAAa,qBAAqB,EAAE,OAAO;CACzC,KAAK,EAAE,OAAO;CACd,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS;CAC3B,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS;CACjC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC;AAC9B,CAAC;AAED,MAAa,oBAAoB,EAAE,OAAO;CACxC,eAAe,EACZ,OAAO,CAAC,CACR,IAAI,CAAC,CACL,IAAI,GAAG,CAAC,CACR,SAAS,CAAC,CACV,SAAS,4FAA4F;CACxG,gBAAgB,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,sCAAsC;CACtG,sBAAsB,EACnB,QAAQ,CAAC,CACT,SAAS,CAAC,CACV,SAAS,uFAAuF;AACrG,CAAC;;;ACvBD,MAAM,yBAAyB,IAAI,IACjC;;;;;;;;;;;2CAYG,MAAM,KAAK,CAChB;AAEA,SAAS,oBAAoB,OAAwB;CACnD,MAAM,CAAC,UAAU,WAAW,WAAW,MAAM,MAAM,GAAG;CACtD,IAAI,aAAa,KAAA,KAAa,cAAc,KAAA,KAAa,YAAY,KAAA,GAAW,OAAO;CAEvF,MAAM,OAAO,OAAO,QAAQ;CAC5B,MAAM,QAAQ,OAAO,SAAS;CAC9B,MAAM,MAAM,OAAO,OAAO;CAC1B,MAAM,cAAc;EAClB;EACA,OAAO,MAAM,MAAM,OAAO,QAAQ,KAAK,OAAO,QAAQ,KAAK,KAAK;EAChE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CAEA,OAAO,SAAS,KAAK,SAAS,MAAM,OAAO,KAAK,OAAO,YAAY,QAAQ;AAC7E;AAEA,MAAMA,gBAAc,EACjB,OAAO;CACN,eAAe,EACZ,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACxB,IAAI,CAAC,CAAC,CACN,SAAS,+FAA+F;CAC3G,WAAW,EACR,OAAO,CAAC,CACR,SAAS,CAAC,CACV,SAAS,+EAA+E;CAC3F,MAAM,EACH,KAAK;EAAC;EAAS;EAAQ;EAAS;CAAU,CAAC,CAAC,CAC5C,SAAS,CAAC,CACV,SAAS,iDAAiD;CAC7D,aAAa,EACV,OAAO,CAAC,CACR,SAAS,CAAC,CACV,SAAS,oFAAoF;CAChG,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,sCAAsC;CAClG,0BAA0B,EACvB,OAAO,CAAC,CACR,IAAI,CAAC,CACL,SAAS,CAAC,CACV,SAAS,CAAC,CACV,SAAS,uDAAuD;CACnE,eAAe,EACZ,OAAO,CAAC,CACR,IAAI,CAAC,CACL,SAAS,CAAC,CACV,SAAS,CAAC,CACV,SAAS,sDAAsD;CAClE,UAAU,EACP,OAAO,CAAC,CACR,QAAO,UAAS,uBAAuB,IAAI,MAAM,YAAY,CAAC,GAAG,EAChE,SAAS,4DACX,CAAC,CAAC,CACD,SAAS,CAAC,CACV,SAAS,2DAA2D;CACvE,gBAAgB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,yCAAyC;CAC1G,gBAAgB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,qCAAqC;CACtG,WAAW,EACR,OAAO,CAAC,CACR,MAAM,qBAAqB,CAAC,CAC5B,OAAO,qBAAqB,EAAE,SAAS,gEAAgE,CAAC,CAAC,CACzG,SAAS,CAAC,CACV,SAAS,iEAAiE;CAC7E,aAAa,kBAAkB,SAAS,CAAC,CAAC,SAAS,0DAA0D;CAC7G,WAAW,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,oEAAoE;AAChH,CAAC,CAAC,CACD,QAAO,WAAU,MAAM,gBAAgB,UAAU,MAAM,MAAM,gBAAgB,UAAU,MAAM,KAAK;CACjG,SAAS;CACT,MAAM,CAAC,gBAAgB;AACzB,CAAC;AAEH,MAAMC,iBAAe,EAAE,OAAO;CAC5B,UAAU,EAAE,OAAO;CACnB,WAAW,EAAE,OAAO;CACpB,SAAS,EAAE,MAAM,kBAAkB;CACnC,OAAO,EAAE,MAAM,eAAe,CAAC,CAAC,SAAS;CACzC,UAAU,EAAE,MAAM,aAAa,CAAC,CAAC,SAAS;AAC5C,CAAC;AAID,SAASC,gBAAc,OAA+C;CACpE,OAAO;EACL,iBAAiB,MAAM;EACvB,iBAAiB,MAAM;EACvB,wBAAwB,MAAM;CAChC;AACF;AAEA,SAAS,eAAe,OAA2C;CACjE,MAAM,SAAgC,EACpC,gBAAgB,MAAM,cACxB;CAEA,IAAI,MAAM,cAAc,KAAA,GAAW,OAAO,YAAY,MAAM;CAC5D,IAAI,MAAM,SAAS,KAAA,GAAW,OAAO,OAAO,MAAM;CAClD,IAAI,MAAM,gBAAgB,KAAA,GAAW,OAAO,eAAe,MAAM;CACjE,IAAI,MAAM,kBAAkB,KAAA,GAAW,OAAO,kBAAkB,MAAM;CACtE,IAAI,MAAM,cAAc,KAAA,GAAW,OAAO,aAAa,MAAM;CAE7D,MAAM,eACJ,MAAM,mBAAmB,KAAA,KAAa,MAAM,mBAAmB,KAAA,KAAa,MAAM,cAAc,KAAA,IAC5F;EACE,iBAAiB,MAAM;EACvB,iBAAiB,MAAM;EACvB,YAAY,MAAM;CACpB,IACA,KAAA;CAEN,IACE,MAAM,eAAe,KAAA,KACrB,MAAM,6BAA6B,KAAA,KACnC,MAAM,aAAa,KAAA,KACnB,iBAAiB,KAAA,KACjB,MAAM,gBAAgB,KAAA,GAEtB,OAAO,oBAAoB;EACzB,aAAa,MAAM;EACnB,kBACE,MAAM,6BAA6B,KAAA,IAC/B,KAAA,IACA,EAAE,sBAAsB,MAAM,yBAAyB;EAC7D,UAAU,MAAM;EAChB,eAAe;EACf,cAAc,MAAM,gBAAgB,KAAA,IAAY,KAAA,IAAYA,gBAAc,MAAM,WAAW;CAC7F;CAGF,OAAO;AACT;AAEA,SAAgB,yBAAyB,QAAgC;CACvE,MAAM,YAAY,yBAAyB,MAAM;CAEjD,OAAO,WAAW;EAChB,IAAI;EACJ,aACE;EACF,aAAA;EACA,cAAA;EACA,SAAS,OAAM,UAAS;GACtB,MAAM,WAAW,MAAM,UAAU,CAAC,CAAC,OAAO,eAAe,KAAK,CAAC;GAE/D,OAAO;IACL,UAAU,SAAS;IACnB,WAAW,SAAS;IACpB,SAAS,SAAS,QAAQ,KAAI,YAAW;KACvC,KAAK,OAAO;KACZ,OAAO,OAAO,SAAS,KAAA;KACvB,aAAa,OAAO,gBAAgB,KAAA;KACpC,UAAU,OAAO;IACnB,EAAE;IACF,OAAO,SAAS,SAAS,KAAA;IACzB,UAAU,SAAS,UAAU,KAAI,aAAY;KAC3C,MAAM,QAAQ;KACd,SAAS,QAAQ;KACjB,QAAQ,QAAQ,UAAU,KAAA;IAC5B,EAAE;GACJ;EACF;CACF,CAAC;AACH;;;ACzLA,MAAM,cAAc,EAAE,OAAO;CAC3B,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,sCAAsC;CAC9F,WAAW,EACR,OAAO,CAAC,CACR,SAAS,CAAC,CACV,SAAS,iFAAiF;CAC7F,eAAe,EACZ,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACxB,IAAI,CAAC,CAAC,CACN,SAAS,CAAC,CACV,SAAS,qEAAqE;CACjF,0BAA0B,EACvB,OAAO,CAAC,CACR,IAAI,CAAC,CACL,SAAS,CAAC,CACV,SAAS,CAAC,CACV,SAAS,oDAAoD;CAChE,aAAa,EACV,OAAO,CAAC,CACR,SAAS,CAAC,CACV,SAAS,oFAAoF;CAChG,aAAa,EACV,MAAM,CAAC,EAAE,QAAQ,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CACjD,SAAS,CAAC,CACV,SAAS,0FAA0F;CACtG,eAAe,EACZ,OAAO,CAAC,CACR,IAAI,CAAC,CACL,SAAS,CAAC,CACV,SAAS,CAAC,CACV,SAAS,wDAAwD;CACpE,aAAa,kBAAkB,SAAS,CAAC,CAAC,SAAS,0DAA0D;CAC7G,WAAW,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,oEAAoE;AAChH,CAAC;AAED,MAAM,eAAe,EAAE,OAAO;CAC5B,WAAW,EAAE,OAAO;CACpB,WAAW,EAAE,OAAO;CACpB,SAAS,EAAE,MACT,EAAE,OAAO;EACP,KAAK,EAAE,OAAO;EACd,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS;EAC3B,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS;EACjC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC;EAC5B,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS;CACnC,CAAC,CACH;CACA,QAAQ,EAAE,MACR,EAAE,OAAO;EACP,KAAK,EAAE,OAAO;EACd,WAAW,EAAE,OAAO;EACpB,gBAAgB,EAAE,OAAO,CAAC,CAAC,SAAS;EACpC,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,CAAC,CACH;CACA,OAAO,EAAE,MAAM,eAAe,CAAC,CAAC,SAAS;CACzC,UAAU,EAAE,MAAM,aAAa,CAAC,CAAC,SAAS;AAC5C,CAAC;AAID,SAAS,cAAc,OAA+C;CACpE,OAAO;EACL,iBAAiB,MAAM;EACvB,iBAAiB,MAAM;EACvB,wBAAwB,MAAM;CAChC;AACF;AAEA,SAAS,gBAAgB,OAA6C;CACpE,MAAM,SAAiC,EACrC,MAAM,MAAM,KACd;CAEA,IAAI,MAAM,cAAc,KAAA,GAAW,OAAO,YAAY,MAAM;CAC5D,IAAI,MAAM,kBAAkB,KAAA,GAAW,OAAO,iBAAiB,MAAM;CACrE,IAAI,MAAM,gBAAgB,KAAA,GAAW,OAAO,eAAe,MAAM;CACjE,IAAI,MAAM,kBAAkB,KAAA,GAAW,OAAO,kBAAkB,MAAM;CACtE,IAAI,MAAM,cAAc,KAAA,GAAW,OAAO,aAAa,MAAM;CAE7D,IACE,MAAM,6BAA6B,KAAA,KACnC,MAAM,gBAAgB,KAAA,KACtB,MAAM,gBAAgB,KAAA,GAEtB,OAAO,oBAAoB;EACzB,kBACE,MAAM,6BAA6B,KAAA,IAC/B,KAAA,IACA,EAAE,sBAAsB,MAAM,yBAAyB;EAC7D,cACE,OAAO,MAAM,gBAAgB,WAAW,EAAE,sBAAsB,MAAM,YAAY,IAAI,MAAM;EAC9F,cAAc,MAAM,gBAAgB,KAAA,IAAY,KAAA,IAAY,cAAc,MAAM,WAAW;CAC7F;CAGF,OAAO;AACT;AAEA,SAAgB,0BAA0B,QAAgC;CACxE,MAAM,YAAY,yBAAyB,MAAM;CAEjD,OAAO,WAAW;EAChB,IAAI;EACJ,aACE;EACF;EACA;EACA,SAAS,OAAM,UAAS;GACtB,MAAM,WAAW,MAAM,UAAU,CAAC,CAAC,QAAQ,gBAAgB,KAAK,CAAC;GAEjE,OAAO;IACL,WAAW,SAAS;IACpB,WAAW,SAAS;IACpB,SAAS,SAAS,QAAQ,KAAI,YAAW;KACvC,KAAK,OAAO;KACZ,OAAO,OAAO,SAAS,KAAA;KACvB,aAAa,OAAO,gBAAgB,KAAA;KACpC,UAAU,OAAO;KACjB,aAAa,OAAO,gBAAgB,KAAA;IACtC,EAAE;IACF,QAAQ,SAAS,OAAO,KAAI,WAAU;KACpC,KAAK,MAAM;KACX,WAAW,MAAM;KACjB,gBAAgB,MAAM,oBAAoB,KAAA;KAC1C,SAAS,MAAM,WAAW,KAAA;IAC5B,EAAE;IACF,OAAO,SAAS,SAAS,KAAA;IACzB,UAAU,SAAS,UAAU,KAAI,aAAY;KAC3C,MAAM,QAAQ;KACd,SAAS,QAAQ;KACjB,QAAQ,QAAQ,UAAU,KAAA;IAC5B,EAAE;GACJ;EACF;CACF,CAAC;AACH;;;AC7IA,SAAgB,oBAAoB,QAAgC;CAClE,OAAO;EACL,gBAAgB,yBAAyB,MAAM;EAC/C,iBAAiB,0BAA0B,MAAM;CACnD;AACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const usageItemSchema: z.ZodObject<{
|
|
3
|
+
name: z.ZodString;
|
|
4
|
+
count: z.ZodNumber;
|
|
5
|
+
}, z.core.$strip>;
|
|
6
|
+
export declare const warningSchema: z.ZodObject<{
|
|
7
|
+
type: z.ZodString;
|
|
8
|
+
message: z.ZodString;
|
|
9
|
+
detail: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
10
|
+
}, z.core.$strip>;
|
|
11
|
+
export declare const searchResultSchema: z.ZodObject<{
|
|
12
|
+
url: z.ZodString;
|
|
13
|
+
title: z.ZodOptional<z.ZodString>;
|
|
14
|
+
publishDate: z.ZodOptional<z.ZodString>;
|
|
15
|
+
excerpts: z.ZodArray<z.ZodString>;
|
|
16
|
+
}, z.core.$strip>;
|
|
17
|
+
export declare const fetchPolicySchema: z.ZodObject<{
|
|
18
|
+
maxAgeSeconds: z.ZodOptional<z.ZodNumber>;
|
|
19
|
+
timeoutSeconds: z.ZodOptional<z.ZodNumber>;
|
|
20
|
+
disableCacheFallback: z.ZodOptional<z.ZodBoolean>;
|
|
21
|
+
}, z.core.$strip>;
|
|
22
|
+
export type FetchPolicyInput = z.infer<typeof fetchPolicySchema>;
|
|
23
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,eAAe;;;iBAG1B,CAAC;AAEH,eAAO,MAAM,aAAa;;;;iBAIxB,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;iBAK7B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;iBAY5B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
package/dist/search.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ParallelClientOptions } from './client.js';
|
|
2
|
+
export declare function createParallelSearchTool(config?: ParallelClientOptions): import("@mastra/core/tools").Tool<{
|
|
3
|
+
searchQueries: string[];
|
|
4
|
+
objective?: string | undefined;
|
|
5
|
+
mode?: "turbo" | "fast" | "basic" | "advanced" | undefined;
|
|
6
|
+
clientModel?: string | undefined;
|
|
7
|
+
maxResults?: number | undefined;
|
|
8
|
+
excerptMaxCharsPerResult?: number | undefined;
|
|
9
|
+
maxCharsTotal?: number | undefined;
|
|
10
|
+
location?: string | undefined;
|
|
11
|
+
includeDomains?: string[] | undefined;
|
|
12
|
+
excludeDomains?: string[] | undefined;
|
|
13
|
+
afterDate?: string | undefined;
|
|
14
|
+
fetchPolicy?: {
|
|
15
|
+
maxAgeSeconds?: number | undefined;
|
|
16
|
+
timeoutSeconds?: number | undefined;
|
|
17
|
+
disableCacheFallback?: boolean | undefined;
|
|
18
|
+
} | undefined;
|
|
19
|
+
sessionId?: string | undefined;
|
|
20
|
+
}, {
|
|
21
|
+
searchId: string;
|
|
22
|
+
sessionId: string;
|
|
23
|
+
results: {
|
|
24
|
+
url: string;
|
|
25
|
+
excerpts: string[];
|
|
26
|
+
title?: string | undefined;
|
|
27
|
+
publishDate?: string | undefined;
|
|
28
|
+
}[];
|
|
29
|
+
usage?: {
|
|
30
|
+
name: string;
|
|
31
|
+
count: number;
|
|
32
|
+
}[] | undefined;
|
|
33
|
+
warnings?: {
|
|
34
|
+
type: string;
|
|
35
|
+
message: string;
|
|
36
|
+
detail?: Record<string, unknown> | undefined;
|
|
37
|
+
}[] | undefined;
|
|
38
|
+
}, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, "parallel-search", unknown>;
|
|
39
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AA+JzD,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+HA8BtE"}
|
package/dist/tools.d.ts
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { ParallelClientOptions } from './client.js';
|
|
2
|
+
export declare function createParallelTools(config?: ParallelClientOptions): {
|
|
3
|
+
parallelSearch: import("@mastra/core/tools").Tool<{
|
|
4
|
+
searchQueries: string[];
|
|
5
|
+
objective?: string | undefined;
|
|
6
|
+
mode?: "turbo" | "fast" | "basic" | "advanced" | undefined;
|
|
7
|
+
clientModel?: string | undefined;
|
|
8
|
+
maxResults?: number | undefined;
|
|
9
|
+
excerptMaxCharsPerResult?: number | undefined;
|
|
10
|
+
maxCharsTotal?: number | undefined;
|
|
11
|
+
location?: string | undefined;
|
|
12
|
+
includeDomains?: string[] | undefined;
|
|
13
|
+
excludeDomains?: string[] | undefined;
|
|
14
|
+
afterDate?: string | undefined;
|
|
15
|
+
fetchPolicy?: {
|
|
16
|
+
maxAgeSeconds?: number | undefined;
|
|
17
|
+
timeoutSeconds?: number | undefined;
|
|
18
|
+
disableCacheFallback?: boolean | undefined;
|
|
19
|
+
} | undefined;
|
|
20
|
+
sessionId?: string | undefined;
|
|
21
|
+
}, {
|
|
22
|
+
searchId: string;
|
|
23
|
+
sessionId: string;
|
|
24
|
+
results: {
|
|
25
|
+
url: string;
|
|
26
|
+
excerpts: string[];
|
|
27
|
+
title?: string | undefined;
|
|
28
|
+
publishDate?: string | undefined;
|
|
29
|
+
}[];
|
|
30
|
+
usage?: {
|
|
31
|
+
name: string;
|
|
32
|
+
count: number;
|
|
33
|
+
}[] | undefined;
|
|
34
|
+
warnings?: {
|
|
35
|
+
type: string;
|
|
36
|
+
message: string;
|
|
37
|
+
detail?: Record<string, unknown> | undefined;
|
|
38
|
+
}[] | undefined;
|
|
39
|
+
}, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, "parallel-search", unknown>;
|
|
40
|
+
parallelExtract: import("@mastra/core/tools").Tool<{
|
|
41
|
+
urls: string[];
|
|
42
|
+
objective?: string | undefined;
|
|
43
|
+
searchQueries?: string[] | undefined;
|
|
44
|
+
excerptMaxCharsPerResult?: number | undefined;
|
|
45
|
+
clientModel?: string | undefined;
|
|
46
|
+
fullContent?: number | boolean | undefined;
|
|
47
|
+
maxCharsTotal?: number | undefined;
|
|
48
|
+
fetchPolicy?: {
|
|
49
|
+
maxAgeSeconds?: number | undefined;
|
|
50
|
+
timeoutSeconds?: number | undefined;
|
|
51
|
+
disableCacheFallback?: boolean | undefined;
|
|
52
|
+
} | undefined;
|
|
53
|
+
sessionId?: string | undefined;
|
|
54
|
+
}, {
|
|
55
|
+
extractId: string;
|
|
56
|
+
sessionId: string;
|
|
57
|
+
results: {
|
|
58
|
+
url: string;
|
|
59
|
+
excerpts: string[];
|
|
60
|
+
title?: string | undefined;
|
|
61
|
+
publishDate?: string | undefined;
|
|
62
|
+
fullContent?: string | undefined;
|
|
63
|
+
}[];
|
|
64
|
+
errors: {
|
|
65
|
+
url: string;
|
|
66
|
+
errorType: string;
|
|
67
|
+
httpStatusCode?: number | undefined;
|
|
68
|
+
content?: string | undefined;
|
|
69
|
+
}[];
|
|
70
|
+
usage?: {
|
|
71
|
+
name: string;
|
|
72
|
+
count: number;
|
|
73
|
+
}[] | undefined;
|
|
74
|
+
warnings?: {
|
|
75
|
+
type: string;
|
|
76
|
+
message: string;
|
|
77
|
+
detail?: Record<string, unknown> | undefined;
|
|
78
|
+
}[] | undefined;
|
|
79
|
+
}, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, "parallel-extract", unknown>;
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAIzD,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKjE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/parallel",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"description": "Parallel web search and extract tools for Mastra agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -22,13 +22,6 @@
|
|
|
22
22
|
},
|
|
23
23
|
"./package.json": "./package.json"
|
|
24
24
|
},
|
|
25
|
-
"scripts": {
|
|
26
|
-
"build:lib": "tsdown --silent --config tsdown.config.ts",
|
|
27
|
-
"build:watch": "pnpm build:lib --watch",
|
|
28
|
-
"lint": "oxlint . && eslint .",
|
|
29
|
-
"lint:fix": "oxlint --fix . && eslint --fix .",
|
|
30
|
-
"test": "vitest run"
|
|
31
|
-
},
|
|
32
25
|
"keywords": [
|
|
33
26
|
"mastra",
|
|
34
27
|
"parallel",
|
|
@@ -58,12 +51,19 @@
|
|
|
58
51
|
"zod": ">=3.0.0 || >=4.0.0"
|
|
59
52
|
},
|
|
60
53
|
"devDependencies": {
|
|
61
|
-
"@internal/lint": "workspace:*",
|
|
62
|
-
"@internal/types-builder": "workspace:*",
|
|
63
|
-
"@mastra/core": "workspace:*",
|
|
64
54
|
"tsdown": "0.22.9",
|
|
65
|
-
"typescript": "
|
|
66
|
-
"vitest": "
|
|
67
|
-
"zod": "
|
|
55
|
+
"typescript": "^6.0.3",
|
|
56
|
+
"vitest": "4.1.10",
|
|
57
|
+
"zod": "^4.4.3",
|
|
58
|
+
"@internal/lint": "0.0.126",
|
|
59
|
+
"@internal/types-builder": "0.0.101",
|
|
60
|
+
"@mastra/core": "1.62.0"
|
|
61
|
+
},
|
|
62
|
+
"scripts": {
|
|
63
|
+
"build:lib": "tsdown --silent --config tsdown.config.ts",
|
|
64
|
+
"build:watch": "pnpm build:lib --watch",
|
|
65
|
+
"lint": "oxlint . && eslint .",
|
|
66
|
+
"lint:fix": "oxlint --fix . && eslint --fix .",
|
|
67
|
+
"test": "vitest run"
|
|
68
68
|
}
|
|
69
|
-
}
|
|
69
|
+
}
|