@mapbox/mcp-server 0.2.4 → 0.4.1
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/LICENSE.md +17 -9
- package/README.md +24 -6
- package/dist/commonjs/config/toolConfig.d.ts +8 -0
- package/dist/commonjs/config/toolConfig.d.ts.map +1 -0
- package/dist/commonjs/config/toolConfig.js +40 -0
- package/dist/commonjs/config/toolConfig.js.map +1 -0
- package/dist/commonjs/index.d.ts +2 -0
- package/dist/{index.d.ts.map → commonjs/index.d.ts.map} +1 -1
- package/dist/commonjs/index.js +39 -0
- package/dist/commonjs/index.js.map +1 -0
- package/dist/{cjs → commonjs}/package.json +1 -1
- package/dist/{tools → commonjs/tools}/MapboxApiBasedTool.d.ts +11 -9
- package/dist/commonjs/tools/MapboxApiBasedTool.d.ts.map +1 -0
- package/dist/commonjs/tools/MapboxApiBasedTool.js +111 -0
- package/dist/commonjs/tools/MapboxApiBasedTool.js.map +1 -0
- package/dist/commonjs/tools/category-list-tool/CategoryListTool.d.ts +28 -0
- package/dist/commonjs/tools/category-list-tool/CategoryListTool.d.ts.map +1 -0
- package/dist/commonjs/tools/category-list-tool/CategoryListTool.js +68 -0
- package/dist/commonjs/tools/category-list-tool/CategoryListTool.js.map +1 -0
- package/dist/{tools → commonjs/tools}/category-search-tool/CategorySearchTool.d.ts +6 -5
- package/dist/commonjs/tools/category-search-tool/CategorySearchTool.d.ts.map +1 -0
- package/dist/commonjs/tools/category-search-tool/CategorySearchTool.js +188 -0
- package/dist/commonjs/tools/category-search-tool/CategorySearchTool.js.map +1 -0
- package/dist/{tools → commonjs/tools}/directions-tool/DirectionsTool.d.ts +3 -2
- package/dist/commonjs/tools/directions-tool/DirectionsTool.d.ts.map +1 -0
- package/dist/commonjs/tools/directions-tool/DirectionsTool.js +385 -0
- package/dist/commonjs/tools/directions-tool/DirectionsTool.js.map +1 -0
- package/dist/{tools → commonjs/tools}/directions-tool/cleanResponseData.d.ts +2 -2
- package/dist/commonjs/tools/directions-tool/cleanResponseData.d.ts.map +1 -0
- package/dist/commonjs/tools/directions-tool/cleanResponseData.js +178 -0
- package/dist/commonjs/tools/directions-tool/cleanResponseData.js.map +1 -0
- package/dist/commonjs/tools/directions-tool/formatIsoDateTime.d.ts.map +1 -0
- package/dist/commonjs/tools/directions-tool/formatIsoDateTime.js +21 -0
- package/dist/commonjs/tools/directions-tool/formatIsoDateTime.js.map +1 -0
- package/dist/{tools → commonjs/tools}/forward-geocode-tool/ForwardGeocodeTool.d.ts +5 -4
- package/dist/commonjs/tools/forward-geocode-tool/ForwardGeocodeTool.d.ts.map +1 -0
- package/dist/commonjs/tools/forward-geocode-tool/ForwardGeocodeTool.js +212 -0
- package/dist/commonjs/tools/forward-geocode-tool/ForwardGeocodeTool.js.map +1 -0
- package/dist/{tools → commonjs/tools}/isochrone-tool/IsochroneTool.d.ts +3 -2
- package/dist/commonjs/tools/isochrone-tool/IsochroneTool.d.ts.map +1 -0
- package/dist/commonjs/tools/isochrone-tool/IsochroneTool.js +118 -0
- package/dist/commonjs/tools/isochrone-tool/IsochroneTool.js.map +1 -0
- package/dist/{tools → commonjs/tools}/matrix-tool/MatrixTool.d.ts +3 -2
- package/dist/commonjs/tools/matrix-tool/MatrixTool.d.ts.map +1 -0
- package/dist/commonjs/tools/matrix-tool/MatrixTool.js +202 -0
- package/dist/commonjs/tools/matrix-tool/MatrixTool.js.map +1 -0
- package/dist/{tools → commonjs/tools}/poi-search-tool/PoiSearchTool.d.ts +5 -4
- package/dist/commonjs/tools/poi-search-tool/PoiSearchTool.d.ts.map +1 -0
- package/dist/commonjs/tools/poi-search-tool/PoiSearchTool.js +231 -0
- package/dist/commonjs/tools/poi-search-tool/PoiSearchTool.js.map +1 -0
- package/dist/{tools → commonjs/tools}/reverse-geocode-tool/ReverseGeocodeTool.d.ts +5 -4
- package/dist/commonjs/tools/reverse-geocode-tool/ReverseGeocodeTool.d.ts.map +1 -0
- package/dist/commonjs/tools/reverse-geocode-tool/ReverseGeocodeTool.js +148 -0
- package/dist/commonjs/tools/reverse-geocode-tool/ReverseGeocodeTool.js.map +1 -0
- package/dist/{tools → commonjs/tools}/static-map-image-tool/StaticMapImageTool.d.ts +3 -2
- package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.d.ts.map +1 -0
- package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.js +416 -0
- package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.js.map +1 -0
- package/dist/{tools → commonjs/tools}/toolRegistry.d.ts +2 -1
- package/dist/commonjs/tools/toolRegistry.d.ts.map +1 -0
- package/dist/commonjs/tools/toolRegistry.js +37 -0
- package/dist/commonjs/tools/toolRegistry.js.map +1 -0
- package/dist/{tools → commonjs/tools}/version-tool/VersionTool.d.ts +1 -1
- package/dist/commonjs/tools/version-tool/VersionTool.d.ts.map +1 -0
- package/dist/commonjs/tools/version-tool/VersionTool.js +52 -0
- package/dist/commonjs/tools/version-tool/VersionTool.js.map +1 -0
- package/dist/commonjs/utils/fetchRequest.d.ts +38 -0
- package/dist/commonjs/utils/fetchRequest.d.ts.map +1 -0
- package/dist/commonjs/utils/fetchRequest.js +110 -0
- package/dist/commonjs/utils/fetchRequest.js.map +1 -0
- package/dist/commonjs/utils/versionUtils-cjs.cjs.map +1 -0
- package/dist/commonjs/utils/versionUtils-cjs.d.cts.map +1 -0
- package/dist/commonjs/utils/versionUtils.d.ts +9 -0
- package/dist/commonjs/utils/versionUtils.js +46 -0
- package/dist/commonjs/version.json +6 -0
- package/dist/esm/config/toolConfig.d.ts +8 -0
- package/dist/esm/config/toolConfig.d.ts.map +1 -0
- package/dist/esm/config/toolConfig.js +36 -0
- package/dist/esm/config/toolConfig.js.map +1 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +37 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +1 -1
- package/dist/esm/tools/MapboxApiBasedTool.d.ts +84 -0
- package/dist/esm/tools/MapboxApiBasedTool.d.ts.map +1 -0
- package/dist/{tools → esm/tools}/MapboxApiBasedTool.js +20 -13
- package/dist/esm/tools/MapboxApiBasedTool.js.map +1 -0
- package/dist/esm/tools/category-list-tool/CategoryListTool.d.ts +28 -0
- package/dist/esm/tools/category-list-tool/CategoryListTool.d.ts.map +1 -0
- package/dist/esm/tools/category-list-tool/CategoryListTool.js +64 -0
- package/dist/esm/tools/category-list-tool/CategoryListTool.js.map +1 -0
- package/dist/esm/tools/category-search-tool/CategorySearchTool.d.ts +89 -0
- package/dist/esm/tools/category-search-tool/CategorySearchTool.d.ts.map +1 -0
- package/dist/esm/tools/category-search-tool/CategorySearchTool.js +184 -0
- package/dist/esm/tools/category-search-tool/CategorySearchTool.js.map +1 -0
- package/dist/esm/tools/directions-tool/DirectionsTool.d.ts +44 -0
- package/dist/esm/tools/directions-tool/DirectionsTool.d.ts.map +1 -0
- package/dist/{tools → esm/tools}/directions-tool/DirectionsTool.js +10 -9
- package/dist/esm/tools/directions-tool/DirectionsTool.js.map +1 -0
- package/dist/esm/tools/directions-tool/cleanResponseData.d.ts +11 -0
- package/dist/esm/tools/directions-tool/cleanResponseData.d.ts.map +1 -0
- package/dist/esm/tools/directions-tool/cleanResponseData.js.map +1 -0
- package/dist/esm/tools/directions-tool/formatIsoDateTime.d.ts +8 -0
- package/dist/esm/tools/directions-tool/formatIsoDateTime.d.ts.map +1 -0
- package/dist/esm/tools/directions-tool/formatIsoDateTime.js.map +1 -0
- package/dist/esm/tools/forward-geocode-tool/ForwardGeocodeTool.d.ts +98 -0
- package/dist/esm/tools/forward-geocode-tool/ForwardGeocodeTool.d.ts.map +1 -0
- package/dist/{tools → esm/tools}/forward-geocode-tool/ForwardGeocodeTool.js +9 -6
- package/dist/esm/tools/forward-geocode-tool/ForwardGeocodeTool.js.map +1 -0
- package/dist/esm/tools/isochrone-tool/IsochroneTool.d.ts +60 -0
- package/dist/esm/tools/isochrone-tool/IsochroneTool.d.ts.map +1 -0
- package/dist/{tools → esm/tools}/isochrone-tool/IsochroneTool.js +8 -5
- package/dist/esm/tools/isochrone-tool/IsochroneTool.js.map +1 -0
- package/dist/esm/tools/matrix-tool/MatrixTool.d.ts +51 -0
- package/dist/esm/tools/matrix-tool/MatrixTool.d.ts.map +1 -0
- package/dist/{tools → esm/tools}/matrix-tool/MatrixTool.js +9 -6
- package/dist/{tools → esm/tools}/matrix-tool/MatrixTool.js.map +1 -1
- package/dist/esm/tools/poi-search-tool/PoiSearchTool.d.ts +119 -0
- package/dist/esm/tools/poi-search-tool/PoiSearchTool.d.ts.map +1 -0
- package/dist/{tools → esm/tools}/poi-search-tool/PoiSearchTool.js +9 -6
- package/dist/esm/tools/poi-search-tool/PoiSearchTool.js.map +1 -0
- package/dist/esm/tools/reverse-geocode-tool/ReverseGeocodeTool.d.ts +46 -0
- package/dist/esm/tools/reverse-geocode-tool/ReverseGeocodeTool.d.ts.map +1 -0
- package/dist/{tools → esm/tools}/reverse-geocode-tool/ReverseGeocodeTool.js +8 -5
- package/dist/esm/tools/reverse-geocode-tool/ReverseGeocodeTool.js.map +1 -0
- package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.d.ts +179 -0
- package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.d.ts.map +1 -0
- package/dist/{tools → esm/tools}/static-map-image-tool/StaticMapImageTool.js +7 -4
- package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.js.map +1 -0
- package/dist/esm/tools/toolRegistry.d.ts +15 -0
- package/dist/esm/tools/toolRegistry.d.ts.map +1 -0
- package/dist/{tools → esm/tools}/toolRegistry.js +2 -0
- package/dist/esm/tools/toolRegistry.js.map +1 -0
- package/dist/esm/tools/version-tool/VersionTool.d.ts +18 -0
- package/dist/esm/tools/version-tool/VersionTool.d.ts.map +1 -0
- package/dist/{tools → esm/tools}/version-tool/VersionTool.js +2 -4
- package/dist/esm/tools/version-tool/VersionTool.js.map +1 -0
- package/dist/esm/utils/fetchRequest.d.ts +38 -0
- package/dist/esm/utils/fetchRequest.d.ts.map +1 -0
- package/dist/esm/utils/fetchRequest.js +104 -0
- package/dist/esm/utils/fetchRequest.js.map +1 -0
- package/dist/esm/utils/versionUtils.d.ts.map +1 -0
- package/dist/{utils → esm/utils}/versionUtils.js +9 -7
- package/dist/esm/utils/versionUtils.js.map +1 -0
- package/dist/esm/version.json +6 -0
- package/package.json +49 -30
- package/dist/index.d.ts +0 -2
- package/dist/index.js +0 -25
- package/dist/index.js.map +0 -1
- package/dist/tools/MapboxApiBasedTool.d.ts.map +0 -1
- package/dist/tools/MapboxApiBasedTool.js.map +0 -1
- package/dist/tools/MapboxApiBasedTool.test.d.ts +0 -2
- package/dist/tools/MapboxApiBasedTool.test.d.ts.map +0 -1
- package/dist/tools/MapboxApiBasedTool.test.js +0 -143
- package/dist/tools/MapboxApiBasedTool.test.js.map +0 -1
- package/dist/tools/category-search-tool/CategorySearchTool.d.ts.map +0 -1
- package/dist/tools/category-search-tool/CategorySearchTool.js +0 -666
- package/dist/tools/category-search-tool/CategorySearchTool.js.map +0 -1
- package/dist/tools/category-search-tool/CategorySearchTool.test.d.ts +0 -2
- package/dist/tools/category-search-tool/CategorySearchTool.test.d.ts.map +0 -1
- package/dist/tools/category-search-tool/CategorySearchTool.test.js +0 -369
- package/dist/tools/category-search-tool/CategorySearchTool.test.js.map +0 -1
- package/dist/tools/directions-tool/DirectionsTool.d.ts.map +0 -1
- package/dist/tools/directions-tool/DirectionsTool.js.map +0 -1
- package/dist/tools/directions-tool/DirectionsTool.test.d.ts +0 -2
- package/dist/tools/directions-tool/DirectionsTool.test.d.ts.map +0 -1
- package/dist/tools/directions-tool/DirectionsTool.test.js +0 -822
- package/dist/tools/directions-tool/DirectionsTool.test.js.map +0 -1
- package/dist/tools/directions-tool/cleanResponseData.d.ts.map +0 -1
- package/dist/tools/directions-tool/cleanResponseData.js.map +0 -1
- package/dist/tools/directions-tool/cleanResponseData.test.d.ts +0 -2
- package/dist/tools/directions-tool/cleanResponseData.test.d.ts.map +0 -1
- package/dist/tools/directions-tool/cleanResponseData.test.js +0 -295
- package/dist/tools/directions-tool/cleanResponseData.test.js.map +0 -1
- package/dist/tools/directions-tool/formatIsoDateTime.d.ts.map +0 -1
- package/dist/tools/directions-tool/formatIsoDateTime.js.map +0 -1
- package/dist/tools/directions-tool/formatIsoDateTime.test.d.ts +0 -2
- package/dist/tools/directions-tool/formatIsoDateTime.test.d.ts.map +0 -1
- package/dist/tools/directions-tool/formatIsoDateTime.test.js +0 -26
- package/dist/tools/directions-tool/formatIsoDateTime.test.js.map +0 -1
- package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.d.ts.map +0 -1
- package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.js.map +0 -1
- package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.test.d.ts +0 -2
- package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.test.d.ts.map +0 -1
- package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.test.js +0 -415
- package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.test.js.map +0 -1
- package/dist/tools/isochrone-tool/IsochroneTool.d.ts.map +0 -1
- package/dist/tools/isochrone-tool/IsochroneTool.js.map +0 -1
- package/dist/tools/isochrone-tool/IsochroneTool.test.d.ts +0 -2
- package/dist/tools/isochrone-tool/IsochroneTool.test.d.ts.map +0 -1
- package/dist/tools/isochrone-tool/IsochroneTool.test.js +0 -111
- package/dist/tools/isochrone-tool/IsochroneTool.test.js.map +0 -1
- package/dist/tools/matrix-tool/MatrixTool.d.ts.map +0 -1
- package/dist/tools/matrix-tool/MatrixTool.test.d.ts +0 -2
- package/dist/tools/matrix-tool/MatrixTool.test.d.ts.map +0 -1
- package/dist/tools/matrix-tool/MatrixTool.test.js +0 -816
- package/dist/tools/matrix-tool/MatrixTool.test.js.map +0 -1
- package/dist/tools/poi-search-tool/PoiSearchTool.d.ts.map +0 -1
- package/dist/tools/poi-search-tool/PoiSearchTool.js.map +0 -1
- package/dist/tools/poi-search-tool/PoiSearchTool.test.d.ts +0 -2
- package/dist/tools/poi-search-tool/PoiSearchTool.test.d.ts.map +0 -1
- package/dist/tools/poi-search-tool/PoiSearchTool.test.js +0 -418
- package/dist/tools/poi-search-tool/PoiSearchTool.test.js.map +0 -1
- package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.d.ts.map +0 -1
- package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.js.map +0 -1
- package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.test.d.ts +0 -2
- package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.test.d.ts.map +0 -1
- package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.test.js +0 -403
- package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.test.js.map +0 -1
- package/dist/tools/schema-validation.test.d.ts +0 -2
- package/dist/tools/schema-validation.test.d.ts.map +0 -1
- package/dist/tools/schema-validation.test.js +0 -75
- package/dist/tools/schema-validation.test.js.map +0 -1
- package/dist/tools/static-map-image-tool/StaticMapImageTool.d.ts.map +0 -1
- package/dist/tools/static-map-image-tool/StaticMapImageTool.js.map +0 -1
- package/dist/tools/static-map-image-tool/StaticMapImageTool.test.d.ts +0 -2
- package/dist/tools/static-map-image-tool/StaticMapImageTool.test.d.ts.map +0 -1
- package/dist/tools/static-map-image-tool/StaticMapImageTool.test.js +0 -441
- package/dist/tools/static-map-image-tool/StaticMapImageTool.test.js.map +0 -1
- package/dist/tools/tool-naming-convention.test.d.ts +0 -2
- package/dist/tools/tool-naming-convention.test.d.ts.map +0 -1
- package/dist/tools/tool-naming-convention.test.js +0 -43
- package/dist/tools/tool-naming-convention.test.js.map +0 -1
- package/dist/tools/toolRegistry.d.ts.map +0 -1
- package/dist/tools/toolRegistry.js.map +0 -1
- package/dist/tools/version-tool/VersionTool.d.ts.map +0 -1
- package/dist/tools/version-tool/VersionTool.js.map +0 -1
- package/dist/tools/version-tool/VersionTool.test.d.ts +0 -2
- package/dist/tools/version-tool/VersionTool.test.d.ts.map +0 -1
- package/dist/tools/version-tool/VersionTool.test.js +0 -49
- package/dist/tools/version-tool/VersionTool.test.js.map +0 -1
- package/dist/utils/requestUtils.d.ts +0 -6
- package/dist/utils/requestUtils.d.ts.map +0 -1
- package/dist/utils/requestUtils.js +0 -60
- package/dist/utils/requestUtils.js.map +0 -1
- package/dist/utils/requestUtils.test-helpers.d.ts +0 -3
- package/dist/utils/requestUtils.test-helpers.d.ts.map +0 -1
- package/dist/utils/requestUtils.test-helpers.js +0 -32
- package/dist/utils/requestUtils.test-helpers.js.map +0 -1
- package/dist/utils/requestUtils.test.d.ts +0 -2
- package/dist/utils/requestUtils.test.d.ts.map +0 -1
- package/dist/utils/requestUtils.test.js +0 -115
- package/dist/utils/requestUtils.test.js.map +0 -1
- package/dist/utils/versionUtils.d.ts.map +0 -1
- package/dist/utils/versionUtils.js.map +0 -1
- package/dist/version.json +0 -6
- /package/dist/{tools → commonjs/tools}/directions-tool/formatIsoDateTime.d.ts +0 -0
- /package/dist/{tools → esm/tools}/directions-tool/cleanResponseData.js +0 -0
- /package/dist/{tools → esm/tools}/directions-tool/formatIsoDateTime.js +0 -0
- /package/dist/{utils → esm/utils}/versionUtils.d.ts +0 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cleanResponseData = cleanResponseData;
|
|
4
|
+
/**
|
|
5
|
+
* Cleans up the API response to reduce token count while preserving useful data.
|
|
6
|
+
*
|
|
7
|
+
* @param input The original input parameters used for the request
|
|
8
|
+
* @param data The raw response data from the Mapbox Directions API
|
|
9
|
+
* @returns Cleaned data with reduced token count
|
|
10
|
+
*/
|
|
11
|
+
function cleanResponseData(input, data) {
|
|
12
|
+
// Remove unnecessary keys to reduce token count
|
|
13
|
+
if ('uuid' in data) {
|
|
14
|
+
delete data.uuid;
|
|
15
|
+
}
|
|
16
|
+
if ('code' in data) {
|
|
17
|
+
delete data.code;
|
|
18
|
+
}
|
|
19
|
+
if ('waypoints' in data) {
|
|
20
|
+
// rename each waypoint's location to `snap_location` and distance to `snap_distance`
|
|
21
|
+
// this is not really necessary, but hopefully agents will find this more obvious that we have snapping
|
|
22
|
+
data.waypoints = data.waypoints.map((waypoint) => {
|
|
23
|
+
const updatedWaypoint = { ...waypoint };
|
|
24
|
+
if ('location' in updatedWaypoint) {
|
|
25
|
+
updatedWaypoint.snap_location = updatedWaypoint.location;
|
|
26
|
+
delete updatedWaypoint.location;
|
|
27
|
+
}
|
|
28
|
+
if ('distance' in updatedWaypoint) {
|
|
29
|
+
updatedWaypoint.snap_distance = Math.round(updatedWaypoint.distance);
|
|
30
|
+
delete updatedWaypoint.distance;
|
|
31
|
+
}
|
|
32
|
+
return updatedWaypoint;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
if (!('routes' in data)) {
|
|
36
|
+
// lets return early because there is nothing more we could do here
|
|
37
|
+
return data;
|
|
38
|
+
}
|
|
39
|
+
data.routes.forEach((route) => {
|
|
40
|
+
// Round duration and distance to integers if they exist
|
|
41
|
+
if (route.duration !== undefined) {
|
|
42
|
+
route.duration = Math.round(route.duration);
|
|
43
|
+
}
|
|
44
|
+
if (route.distance !== undefined) {
|
|
45
|
+
route.distance = Math.round(route.distance);
|
|
46
|
+
}
|
|
47
|
+
delete route.weight_name;
|
|
48
|
+
delete route.weight;
|
|
49
|
+
// Handle the case where geometry is not included (when geometries='none')
|
|
50
|
+
if (input.geometries === 'none' && route.geometry) {
|
|
51
|
+
delete route.geometry;
|
|
52
|
+
}
|
|
53
|
+
route.leg_summaries = route.legs.map((leg) => leg.summary);
|
|
54
|
+
// Collect all unique admins across all legs of this route
|
|
55
|
+
const routeUniqueIsoCodes = new Set();
|
|
56
|
+
// Collect all unique notification messages across all legs of this route
|
|
57
|
+
const routeUniqueNotificationMessages = new Set();
|
|
58
|
+
// Collect all incidents across all legs of this route
|
|
59
|
+
const routeIncidents = [];
|
|
60
|
+
// Collect voice instruction announcements from all steps
|
|
61
|
+
const routeAnnouncements = [];
|
|
62
|
+
let totalDistanceWeightedSpeed = 0; // Sum of (speed × distance) for each segment
|
|
63
|
+
let sumDistanceMeters = 0;
|
|
64
|
+
// Object to track distance by congestion type
|
|
65
|
+
const congestionTypeToDistance = {
|
|
66
|
+
severe: 0,
|
|
67
|
+
heavy: 0,
|
|
68
|
+
moderate: 0,
|
|
69
|
+
low: 0
|
|
70
|
+
};
|
|
71
|
+
route.legs.forEach((leg) => {
|
|
72
|
+
if (leg.annotation && leg.annotation.speed && leg.annotation.distance) {
|
|
73
|
+
leg.annotation.speed.forEach((speed, index) => {
|
|
74
|
+
const speedValue = parseFloat(String(speed));
|
|
75
|
+
const distance = parseFloat(String(leg.annotation.distance[index]));
|
|
76
|
+
// Calculate the weighted speed (speed * distance)
|
|
77
|
+
totalDistanceWeightedSpeed += speedValue * distance;
|
|
78
|
+
sumDistanceMeters += distance;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
if (leg.annotation &&
|
|
82
|
+
leg.annotation.congestion &&
|
|
83
|
+
leg.annotation.distance) {
|
|
84
|
+
// iterate every congestion string in leg.annotation.congestion
|
|
85
|
+
// each string is one of `severe, heavy, moderate, low, unknown`
|
|
86
|
+
// keep track of total distance by type of congestion
|
|
87
|
+
leg.annotation.congestion.forEach((congestion, index) => {
|
|
88
|
+
const distance = parseFloat(String(leg.annotation.distance[index]));
|
|
89
|
+
if (congestion === 'severe' ||
|
|
90
|
+
congestion === 'heavy' ||
|
|
91
|
+
congestion === 'moderate' ||
|
|
92
|
+
congestion === 'low') {
|
|
93
|
+
congestionTypeToDistance[congestion] += distance;
|
|
94
|
+
}
|
|
95
|
+
// Skip 'unknown' congestion type
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
if (leg.admins && Array.isArray(leg.admins)) {
|
|
99
|
+
// Extract unique ISO codes from this leg
|
|
100
|
+
leg.admins.forEach((admin) => {
|
|
101
|
+
if (admin.iso_3166_1_alpha3) {
|
|
102
|
+
routeUniqueIsoCodes.add(admin.iso_3166_1_alpha3);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
// Process notifications if they exist
|
|
107
|
+
if (leg.notifications && Array.isArray(leg.notifications)) {
|
|
108
|
+
// Extract unique notification messages from this leg
|
|
109
|
+
leg.notifications.forEach((notification) => {
|
|
110
|
+
if (notification.details && notification.details.message) {
|
|
111
|
+
routeUniqueNotificationMessages.add(notification.details.message);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
// Process incidents if they exist
|
|
116
|
+
if (leg.incidents && Array.isArray(leg.incidents)) {
|
|
117
|
+
leg.incidents.forEach((incident) => {
|
|
118
|
+
// Extract only the specified fields for each incident
|
|
119
|
+
routeIncidents.push({
|
|
120
|
+
type: incident.type,
|
|
121
|
+
end_time: incident.end_time,
|
|
122
|
+
long_description: incident.long_description,
|
|
123
|
+
impact: incident.impact,
|
|
124
|
+
affected_road_names: incident.affected_road_names,
|
|
125
|
+
length: incident.length
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
// Process steps if they exist to collect voice instructions
|
|
130
|
+
if (leg.steps && Array.isArray(leg.steps)) {
|
|
131
|
+
leg.steps.forEach((step) => {
|
|
132
|
+
if (step.voiceInstructions && Array.isArray(step.voiceInstructions)) {
|
|
133
|
+
step.voiceInstructions.forEach((instruction) => {
|
|
134
|
+
if (instruction.announcement) {
|
|
135
|
+
routeAnnouncements.push(instruction.announcement);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}); // Add all unique admins as a new property on the route
|
|
142
|
+
route.intersecting_admins = Array.from(routeUniqueIsoCodes);
|
|
143
|
+
// Add all unique notification messages as a new property on the route
|
|
144
|
+
route.notifications_summary = Array.from(routeUniqueNotificationMessages);
|
|
145
|
+
// Add all incidents with the specified fields as a new property on the route
|
|
146
|
+
route.incidents_summary = routeIncidents;
|
|
147
|
+
// Add voice instruction announcements only if there are 1 to 10 of them
|
|
148
|
+
// If there are more than 10, it's just too many, and if there is 0 then we don't have them.
|
|
149
|
+
if (routeAnnouncements.length >= 1 && routeAnnouncements.length <= 10) {
|
|
150
|
+
route.instructions = routeAnnouncements;
|
|
151
|
+
}
|
|
152
|
+
route.num_legs = route.legs.length;
|
|
153
|
+
// Add congestion distance information to route
|
|
154
|
+
route.congestion_information = {
|
|
155
|
+
length_low: Math.round(congestionTypeToDistance.low),
|
|
156
|
+
length_moderate: Math.round(congestionTypeToDistance.moderate),
|
|
157
|
+
length_heavy: Math.round(congestionTypeToDistance.heavy),
|
|
158
|
+
length_severe: Math.round(congestionTypeToDistance.severe)
|
|
159
|
+
};
|
|
160
|
+
// Calculate and add average speed in km/h
|
|
161
|
+
if (sumDistanceMeters > 0 && totalDistanceWeightedSpeed > 0) {
|
|
162
|
+
// Calculate distance-weighted average speed
|
|
163
|
+
const averageMetersPerSecond = totalDistanceWeightedSpeed / sumDistanceMeters;
|
|
164
|
+
// Convert m/s to km/h (multiply by 3.6) and round to integer
|
|
165
|
+
route.average_speed_kph = Math.round(averageMetersPerSecond * 3.6);
|
|
166
|
+
}
|
|
167
|
+
if (route.duration_typical) {
|
|
168
|
+
route.duration_under_typical_traffic_conditions = Math.round(route.duration_typical);
|
|
169
|
+
delete route.duration_typical;
|
|
170
|
+
}
|
|
171
|
+
if (route.weight_typical) {
|
|
172
|
+
delete route.weight_typical;
|
|
173
|
+
}
|
|
174
|
+
delete route.legs;
|
|
175
|
+
});
|
|
176
|
+
return data;
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=cleanResponseData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanResponseData.js","sourceRoot":"","sources":["../../../../src/tools/directions-tool/cleanResponseData.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatIsoDateTime.d.ts","sourceRoot":"","sources":["../../../../src/tools/directions-tool/formatIsoDateTime.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,UAAU,MAAM,KAAG,MAWpD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatIsoDateTime = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Helper function to format ISO datetime strings according to Mapbox API requirements.
|
|
6
|
+
* It converts the format YYYY-MM-DDThh:mm:ss (with seconds but no timezone) to
|
|
7
|
+
* YYYY-MM-DDThh:mm (no seconds, no timezone) by removing the seconds part.
|
|
8
|
+
* Other valid formats are left unchanged.
|
|
9
|
+
*/
|
|
10
|
+
const formatIsoDateTime = (dateTime) => {
|
|
11
|
+
// Regex for matching YYYY-MM-DDThh:mm:ss format (with seconds but no timezone)
|
|
12
|
+
const dateWithSecondsNoTz = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/;
|
|
13
|
+
if (dateWithSecondsNoTz.test(dateTime)) {
|
|
14
|
+
// Extract up to the minutes part only, dropping the seconds
|
|
15
|
+
return dateTime.substring(0, dateTime.lastIndexOf(':'));
|
|
16
|
+
}
|
|
17
|
+
// Return unchanged if it's already in a valid format
|
|
18
|
+
return dateTime;
|
|
19
|
+
};
|
|
20
|
+
exports.formatIsoDateTime = formatIsoDateTime;
|
|
21
|
+
//# sourceMappingURL=formatIsoDateTime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatIsoDateTime.js","sourceRoot":"","sources":["../../../../src/tools/directions-tool/formatIsoDateTime.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACI,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAU,EAAE;IAC5D,+EAA+E;IAC/E,MAAM,mBAAmB,GAAG,uCAAuC,CAAC;IAEpE,IAAI,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,4DAA4D;QAC5D,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,qDAAqD;IACrD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAXW,QAAA,iBAAiB,qBAW5B"}
|
|
@@ -46,7 +46,6 @@ declare const ForwardGeocodeInputSchema: z.ZodObject<{
|
|
|
46
46
|
permanent: boolean;
|
|
47
47
|
autocomplete: boolean;
|
|
48
48
|
worldview: "us" | "cn" | "jp" | "in";
|
|
49
|
-
country?: string[] | undefined;
|
|
50
49
|
language?: string | undefined;
|
|
51
50
|
proximity?: "ip" | {
|
|
52
51
|
longitude: number;
|
|
@@ -61,10 +60,10 @@ declare const ForwardGeocodeInputSchema: z.ZodObject<{
|
|
|
61
60
|
maxLongitude: number;
|
|
62
61
|
maxLatitude: number;
|
|
63
62
|
} | undefined;
|
|
63
|
+
country?: string[] | undefined;
|
|
64
64
|
types?: ("country" | "region" | "postcode" | "district" | "place" | "locality" | "neighborhood" | "address")[] | undefined;
|
|
65
65
|
}, {
|
|
66
66
|
q: string;
|
|
67
|
-
country?: string[] | undefined;
|
|
68
67
|
language?: string | undefined;
|
|
69
68
|
limit?: number | undefined;
|
|
70
69
|
proximity?: string | {
|
|
@@ -77,6 +76,7 @@ declare const ForwardGeocodeInputSchema: z.ZodObject<{
|
|
|
77
76
|
maxLongitude: number;
|
|
78
77
|
maxLatitude: number;
|
|
79
78
|
} | undefined;
|
|
79
|
+
country?: string[] | undefined;
|
|
80
80
|
format?: "json_string" | "formatted_text" | undefined;
|
|
81
81
|
permanent?: boolean | undefined;
|
|
82
82
|
autocomplete?: boolean | undefined;
|
|
@@ -84,11 +84,12 @@ declare const ForwardGeocodeInputSchema: z.ZodObject<{
|
|
|
84
84
|
worldview?: "us" | "cn" | "jp" | "in" | undefined;
|
|
85
85
|
}>;
|
|
86
86
|
export declare class ForwardGeocodeTool extends MapboxApiBasedTool<typeof ForwardGeocodeInputSchema> {
|
|
87
|
+
private fetch;
|
|
87
88
|
name: string;
|
|
88
89
|
description: string;
|
|
89
|
-
constructor();
|
|
90
|
+
constructor(fetch?: typeof globalThis.fetch);
|
|
90
91
|
private formatGeoJsonToText;
|
|
91
|
-
protected execute(input: z.infer<typeof ForwardGeocodeInputSchema
|
|
92
|
+
protected execute(input: z.infer<typeof ForwardGeocodeInputSchema>, accessToken: string): Promise<{
|
|
92
93
|
type: 'text';
|
|
93
94
|
text: string;
|
|
94
95
|
}>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ForwardGeocodeTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/forward-geocode-tool/ForwardGeocodeTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,QAAA,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiI7B,CAAC;AAEH,qBAAa,kBAAmB,SAAQ,kBAAkB,CACxD,OAAO,yBAAyB,CACjC;IAKa,OAAO,CAAC,KAAK;IAJzB,IAAI,SAA0B;IAC9B,WAAW,SAC4Z;gBAEnZ,KAAK,GAAE,OAAO,UAAU,CAAC,KAAmB;IAIhE,OAAO,CAAC,mBAAmB;cA+CX,OAAO,CACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,EAChD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAmE3C"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ForwardGeocodeTool = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const MapboxApiBasedTool_js_1 = require("../MapboxApiBasedTool.js");
|
|
6
|
+
const fetchRequest_js_1 = require("../../utils/fetchRequest.js");
|
|
7
|
+
const ForwardGeocodeInputSchema = zod_1.z.object({
|
|
8
|
+
q: zod_1.z
|
|
9
|
+
.string()
|
|
10
|
+
.max(256)
|
|
11
|
+
.refine((val) => !val.includes(';'), 'Search text cannot contain semicolons')
|
|
12
|
+
.refine((val) => val.split(/\s+/).length <= 20, 'Search text cannot exceed 20 words')
|
|
13
|
+
.describe('Search text to geocode. Max 256 characters, 20 words, no semicolons.'),
|
|
14
|
+
permanent: zod_1.z
|
|
15
|
+
.boolean()
|
|
16
|
+
.optional()
|
|
17
|
+
.default(false)
|
|
18
|
+
.describe('Whether results can be stored permanently'),
|
|
19
|
+
autocomplete: zod_1.z
|
|
20
|
+
.boolean()
|
|
21
|
+
.optional()
|
|
22
|
+
.default(true)
|
|
23
|
+
.describe('Return partial/suggested results for partial queries'),
|
|
24
|
+
bbox: zod_1.z
|
|
25
|
+
.object({
|
|
26
|
+
minLongitude: zod_1.z.number().min(-180).max(180),
|
|
27
|
+
minLatitude: zod_1.z.number().min(-90).max(90),
|
|
28
|
+
maxLongitude: zod_1.z.number().min(-180).max(180),
|
|
29
|
+
maxLatitude: zod_1.z.number().min(-90).max(90)
|
|
30
|
+
})
|
|
31
|
+
.optional()
|
|
32
|
+
.describe('Bounding box to limit results within specified bounds'),
|
|
33
|
+
country: zod_1.z
|
|
34
|
+
.array(zod_1.z.string().length(2))
|
|
35
|
+
.optional()
|
|
36
|
+
.describe('Array of ISO 3166 alpha 2 country codes to limit results'),
|
|
37
|
+
format: zod_1.z
|
|
38
|
+
.enum(['json_string', 'formatted_text'])
|
|
39
|
+
.optional()
|
|
40
|
+
.default('formatted_text')
|
|
41
|
+
.describe('Output format: "json_string" returns raw GeoJSON data as a JSON string that can be parsed; "formatted_text" returns human-readable text with place names, addresses, and coordinates. Both return as text content but json_string contains parseable JSON data while formatted_text is for display.'),
|
|
42
|
+
language: zod_1.z
|
|
43
|
+
.string()
|
|
44
|
+
.optional()
|
|
45
|
+
.describe('IETF language tag for the response (e.g., "en", "es", "fr", "de", "ja")'),
|
|
46
|
+
limit: zod_1.z
|
|
47
|
+
.number()
|
|
48
|
+
.min(1)
|
|
49
|
+
.max(10)
|
|
50
|
+
.optional()
|
|
51
|
+
.default(5)
|
|
52
|
+
.describe('Maximum number of results to return (1-10)'),
|
|
53
|
+
proximity: zod_1.z
|
|
54
|
+
.union([
|
|
55
|
+
zod_1.z.object({
|
|
56
|
+
longitude: zod_1.z.number().min(-180).max(180),
|
|
57
|
+
latitude: zod_1.z.number().min(-90).max(90)
|
|
58
|
+
}),
|
|
59
|
+
zod_1.z.string().transform((val) => {
|
|
60
|
+
// Handle special case of 'ip'
|
|
61
|
+
if (val === 'ip') {
|
|
62
|
+
return 'ip';
|
|
63
|
+
}
|
|
64
|
+
// Handle JSON-stringified object: "{\"longitude\": -82.458107, \"latitude\": 27.937259}"
|
|
65
|
+
if (val.startsWith('{') && val.endsWith('}')) {
|
|
66
|
+
try {
|
|
67
|
+
const parsed = JSON.parse(val);
|
|
68
|
+
if (typeof parsed === 'object' &&
|
|
69
|
+
parsed !== null &&
|
|
70
|
+
typeof parsed.longitude === 'number' &&
|
|
71
|
+
typeof parsed.latitude === 'number') {
|
|
72
|
+
return { longitude: parsed.longitude, latitude: parsed.latitude };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// Fall back to other formats
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Handle string that looks like an array: "[-82.451668, 27.942964]"
|
|
80
|
+
if (val.startsWith('[') && val.endsWith(']')) {
|
|
81
|
+
const coords = val
|
|
82
|
+
.slice(1, -1)
|
|
83
|
+
.split(',')
|
|
84
|
+
.map((s) => Number(s.trim()));
|
|
85
|
+
if (coords.length === 2 && !isNaN(coords[0]) && !isNaN(coords[1])) {
|
|
86
|
+
return { longitude: coords[0], latitude: coords[1] };
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Handle comma-separated string: "-82.451668,27.942964"
|
|
90
|
+
const parts = val.split(',').map((s) => Number(s.trim()));
|
|
91
|
+
if (parts.length === 2 && !isNaN(parts[0]) && !isNaN(parts[1])) {
|
|
92
|
+
return { longitude: parts[0], latitude: parts[1] };
|
|
93
|
+
}
|
|
94
|
+
throw new Error('Invalid proximity format. Expected {longitude, latitude}, "longitude,latitude", or "ip"');
|
|
95
|
+
})
|
|
96
|
+
])
|
|
97
|
+
.optional()
|
|
98
|
+
.describe('Location to bias results towards. Either [longitude, latitude] coordinates or "ip" for IP-based location. Can help get more relevant results when searching in a specific area.'),
|
|
99
|
+
types: zod_1.z
|
|
100
|
+
.array(zod_1.z.enum([
|
|
101
|
+
'country',
|
|
102
|
+
'region',
|
|
103
|
+
'postcode',
|
|
104
|
+
'district',
|
|
105
|
+
'place',
|
|
106
|
+
'locality',
|
|
107
|
+
'neighborhood',
|
|
108
|
+
'address'
|
|
109
|
+
]))
|
|
110
|
+
.optional()
|
|
111
|
+
.describe('Array of feature types to filter results'),
|
|
112
|
+
worldview: zod_1.z
|
|
113
|
+
.enum(['us', 'cn', 'jp', 'in'])
|
|
114
|
+
.optional()
|
|
115
|
+
.default('us')
|
|
116
|
+
.describe('Returns features from a specific regional perspective')
|
|
117
|
+
});
|
|
118
|
+
class ForwardGeocodeTool extends MapboxApiBasedTool_js_1.MapboxApiBasedTool {
|
|
119
|
+
fetch;
|
|
120
|
+
name = 'forward_geocode_tool';
|
|
121
|
+
description = 'This tool converts addresses, cities, towns, neighborhoods, districts, postcodes, regions, and countries into geographic coordinates using Mapbox Geocoding API v6. Setting a proximity point helps to bias results towards a specific area for more relevant results. Do not use this tool for geocoding points of interest like businesses, landmarks, historic sites, museums, etc. Supports both JSON and text output formats.';
|
|
122
|
+
constructor(fetch = fetchRequest_js_1.fetchClient) {
|
|
123
|
+
super({ inputSchema: ForwardGeocodeInputSchema });
|
|
124
|
+
this.fetch = fetch;
|
|
125
|
+
}
|
|
126
|
+
formatGeoJsonToText(geoJsonResponse) {
|
|
127
|
+
if (!geoJsonResponse ||
|
|
128
|
+
!geoJsonResponse.features ||
|
|
129
|
+
geoJsonResponse.features.length === 0) {
|
|
130
|
+
return 'No results found.';
|
|
131
|
+
}
|
|
132
|
+
const results = geoJsonResponse.features.map((feature, index) => {
|
|
133
|
+
const props = feature.properties || {};
|
|
134
|
+
const geom = feature.geometry || {};
|
|
135
|
+
let result = `${index + 1}. `;
|
|
136
|
+
// Place name
|
|
137
|
+
result += `${props.name}`;
|
|
138
|
+
if (props.name_preferred) {
|
|
139
|
+
result += ` (${props.name_preferred})`;
|
|
140
|
+
}
|
|
141
|
+
// Full address
|
|
142
|
+
if (props.full_address) {
|
|
143
|
+
result += `\n Address: ${props.full_address}`;
|
|
144
|
+
}
|
|
145
|
+
else if (props.place_formatted) {
|
|
146
|
+
result += `\n Address: ${props.place_formatted}`;
|
|
147
|
+
}
|
|
148
|
+
// Geographic coordinates
|
|
149
|
+
if (geom.coordinates && Array.isArray(geom.coordinates)) {
|
|
150
|
+
const [lng, lat] = geom.coordinates;
|
|
151
|
+
result += `\n Coordinates: ${lat}, ${lng}`;
|
|
152
|
+
}
|
|
153
|
+
// Feature type
|
|
154
|
+
if (props.feature_type) {
|
|
155
|
+
result += `\n Type: ${props.feature_type}`;
|
|
156
|
+
}
|
|
157
|
+
return result;
|
|
158
|
+
});
|
|
159
|
+
return results.join('\n\n');
|
|
160
|
+
}
|
|
161
|
+
async execute(input, accessToken) {
|
|
162
|
+
const url = new URL(`${MapboxApiBasedTool_js_1.MapboxApiBasedTool.mapboxApiEndpoint}search/geocode/v6/forward`);
|
|
163
|
+
// Required parameters
|
|
164
|
+
url.searchParams.append('q', input.q);
|
|
165
|
+
url.searchParams.append('access_token', accessToken);
|
|
166
|
+
// Optional parameters
|
|
167
|
+
url.searchParams.append('permanent', input.permanent.toString());
|
|
168
|
+
url.searchParams.append('autocomplete', input.autocomplete.toString());
|
|
169
|
+
url.searchParams.append('format', 'geojson');
|
|
170
|
+
url.searchParams.append('limit', input.limit.toString());
|
|
171
|
+
url.searchParams.append('worldview', input.worldview);
|
|
172
|
+
if (input.bbox) {
|
|
173
|
+
const { minLongitude, minLatitude, maxLongitude, maxLatitude } = input.bbox;
|
|
174
|
+
url.searchParams.append('bbox', `${minLongitude},${minLatitude},${maxLongitude},${maxLatitude}`);
|
|
175
|
+
}
|
|
176
|
+
if (input.country && input.country.length > 0) {
|
|
177
|
+
url.searchParams.append('country', input.country.join(','));
|
|
178
|
+
}
|
|
179
|
+
if (input.language) {
|
|
180
|
+
url.searchParams.append('language', input.language);
|
|
181
|
+
}
|
|
182
|
+
if (input.proximity) {
|
|
183
|
+
if (input.proximity === 'ip') {
|
|
184
|
+
url.searchParams.append('proximity', 'ip');
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
const { longitude, latitude } = input.proximity;
|
|
188
|
+
url.searchParams.append('proximity', `${longitude},${latitude}`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (input.types && input.types.length > 0) {
|
|
192
|
+
url.searchParams.append('types', input.types.join(','));
|
|
193
|
+
}
|
|
194
|
+
const response = await this.fetch(url.toString());
|
|
195
|
+
if (!response.ok) {
|
|
196
|
+
throw new Error(`Failed to geocode: ${response.status} ${response.statusText}`);
|
|
197
|
+
}
|
|
198
|
+
const data = (await response.json());
|
|
199
|
+
// Check if the response has features
|
|
200
|
+
if (!data || !data.features || data.features.length === 0) {
|
|
201
|
+
return { type: 'text', text: 'No results found.' };
|
|
202
|
+
}
|
|
203
|
+
if (input.format === 'json_string') {
|
|
204
|
+
return { type: 'text', text: JSON.stringify(data, null, 2) };
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
return { type: 'text', text: this.formatGeoJsonToText(data) };
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
exports.ForwardGeocodeTool = ForwardGeocodeTool;
|
|
212
|
+
//# sourceMappingURL=ForwardGeocodeTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ForwardGeocodeTool.js","sourceRoot":"","sources":["../../../../src/tools/forward-geocode-tool/ForwardGeocodeTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,8 +52,9 @@ declare const IsochroneInputSchema: z.ZodObject<{
|
|
|
52
52
|
export declare class IsochroneTool extends MapboxApiBasedTool<typeof IsochroneInputSchema> {
|
|
53
53
|
name: string;
|
|
54
54
|
description: string;
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
private fetch;
|
|
56
|
+
constructor(fetch?: typeof globalThis.fetch);
|
|
57
|
+
protected execute(input: z.infer<typeof IsochroneInputSchema>, accessToken: string): Promise<any>;
|
|
57
58
|
}
|
|
58
59
|
export {};
|
|
59
60
|
//# sourceMappingURL=IsochroneTool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IsochroneTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/isochrone-tool/IsochroneTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgFxB,CAAC;AAEH,qBAAa,aAAc,SAAQ,kBAAkB,CACnD,OAAO,oBAAoB,CAC5B;IACC,IAAI,SAAoB;IACxB,WAAW,SAIuD;IAElE,OAAO,CAAC,KAAK,CAA0B;gBAE3B,KAAK,GAAE,OAAO,UAAU,CAAC,KAAmB;cAKxC,OAAO,CACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,EAC3C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,GAAG,CAAC;CA0DhB"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IsochroneTool = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const MapboxApiBasedTool_js_1 = require("../MapboxApiBasedTool.js");
|
|
6
|
+
const fetchRequest_js_1 = require("../../utils/fetchRequest.js");
|
|
7
|
+
const IsochroneInputSchema = zod_1.z.object({
|
|
8
|
+
profile: zod_1.z
|
|
9
|
+
.enum([
|
|
10
|
+
'mapbox/driving-traffic',
|
|
11
|
+
'mapbox/driving',
|
|
12
|
+
'mapbox/cycling',
|
|
13
|
+
'mapbox/walking'
|
|
14
|
+
])
|
|
15
|
+
.default('mapbox/driving-traffic')
|
|
16
|
+
.describe('Mode of travel.'),
|
|
17
|
+
coordinates: zod_1.z
|
|
18
|
+
.object({
|
|
19
|
+
longitude: zod_1.z.number().min(-180).max(180),
|
|
20
|
+
latitude: zod_1.z.number().min(-90).max(90)
|
|
21
|
+
})
|
|
22
|
+
.describe('A coordinate object with longitude and latitude properties around which to center the isochrone lines. Longitude: -180 to 180, Latitude: -85.0511 to 85.0511'),
|
|
23
|
+
contours_minutes: zod_1.z
|
|
24
|
+
.array(zod_1.z.number().int().min(1).max(60))
|
|
25
|
+
.max(4)
|
|
26
|
+
.optional()
|
|
27
|
+
.describe('Contour times in minutes. Times must be in increasing order. Must be specified either contours_minutes or contours_meters.'),
|
|
28
|
+
contours_meters: zod_1.z
|
|
29
|
+
.array(zod_1.z.number().int().min(1).max(100000))
|
|
30
|
+
.max(4)
|
|
31
|
+
.optional()
|
|
32
|
+
.describe('Distances in meters. Distances must be in increasing order. Must be specified either contours_minutes or contours_meters.'),
|
|
33
|
+
contours_colors: zod_1.z
|
|
34
|
+
.array(zod_1.z.string().regex(/^[0-9a-fA-F]{6}$/))
|
|
35
|
+
.max(4)
|
|
36
|
+
.optional()
|
|
37
|
+
.describe('Contour colors as hex strings without starting # (for example ff0000 for red. must match contours_minutes or contours_meters length if provided).'),
|
|
38
|
+
polygons: zod_1.z
|
|
39
|
+
.boolean()
|
|
40
|
+
.default(false)
|
|
41
|
+
.optional()
|
|
42
|
+
.describe('Whether to return Polygons (true) or LineStrings (false).'),
|
|
43
|
+
denoise: zod_1.z
|
|
44
|
+
.number()
|
|
45
|
+
.min(0)
|
|
46
|
+
.max(1)
|
|
47
|
+
.default(1)
|
|
48
|
+
.optional()
|
|
49
|
+
.describe('A floating point value that can be used to remove smaller contours. A value of 1.0 will only return the largest contour for a given value.'),
|
|
50
|
+
generalize: zod_1.z
|
|
51
|
+
.number()
|
|
52
|
+
.min(0)
|
|
53
|
+
.describe(`Positive number in meters that is used to simplify geometries.
|
|
54
|
+
- Walking: use 0-500. Prefer 50-200 for short contours (minutes < 10 or meters < 5000), 300-500 as they grow.
|
|
55
|
+
- Driving: use 1000-5000. Start at 2000, use 3000 if minutes > 10 or meters > 20000. Use 4000-5000 if near 60 minutes or 100000 meters.
|
|
56
|
+
`.trim()),
|
|
57
|
+
exclude: zod_1.z
|
|
58
|
+
.array(zod_1.z.enum(['motorway', 'toll', 'ferry', 'unpaved', 'cash_only_tolls']))
|
|
59
|
+
.optional()
|
|
60
|
+
.describe('Exclude certain road types and custom locations from routing.'),
|
|
61
|
+
depart_at: zod_1.z
|
|
62
|
+
.string()
|
|
63
|
+
.optional()
|
|
64
|
+
.describe('An ISO 8601 date-time string representing the time to depart (format string: YYYY-MM-DDThh:mmss±hh:mm).')
|
|
65
|
+
});
|
|
66
|
+
class IsochroneTool extends MapboxApiBasedTool_js_1.MapboxApiBasedTool {
|
|
67
|
+
name = 'isochrone_tool';
|
|
68
|
+
description = `Computes areas that are reachable within a specified amount of time from a location, and returns the reachable regions as contours of Polygons or LineStrings in GeoJSON format that you can display on a map.
|
|
69
|
+
Common use cases:
|
|
70
|
+
- Show a user how far they can travel in X minutes from their current location
|
|
71
|
+
- Determine whether a destination is within a certain travel time threshold
|
|
72
|
+
- Compare travel ranges for different modes of transportation'`;
|
|
73
|
+
fetch;
|
|
74
|
+
constructor(fetch = fetchRequest_js_1.fetchClient) {
|
|
75
|
+
super({ inputSchema: IsochroneInputSchema });
|
|
76
|
+
this.fetch = fetch;
|
|
77
|
+
}
|
|
78
|
+
async execute(input, accessToken) {
|
|
79
|
+
const url = new URL(`${MapboxApiBasedTool_js_1.MapboxApiBasedTool.mapboxApiEndpoint}isochrone/v1/${input.profile}/${input.coordinates.longitude}%2C${input.coordinates.latitude}`);
|
|
80
|
+
url.searchParams.append('access_token', accessToken);
|
|
81
|
+
if ((!input.contours_minutes || input.contours_minutes.length === 0) &&
|
|
82
|
+
(!input.contours_meters || input.contours_meters.length === 0)) {
|
|
83
|
+
throw new Error("At least one of 'contours_minutes' or 'contours_meters' must be provided");
|
|
84
|
+
}
|
|
85
|
+
if (input.contours_minutes && input.contours_minutes.length > 0) {
|
|
86
|
+
url.searchParams.append('contours_minutes', input.contours_minutes.join(','));
|
|
87
|
+
}
|
|
88
|
+
if (input.contours_meters && input.contours_meters.length > 0) {
|
|
89
|
+
url.searchParams.append('contours_meters', input.contours_meters?.join(','));
|
|
90
|
+
}
|
|
91
|
+
if (input.contours_colors && input.contours_colors.length > 0) {
|
|
92
|
+
url.searchParams.append('contours_colors', input.contours_colors.join(','));
|
|
93
|
+
}
|
|
94
|
+
if (input.polygons) {
|
|
95
|
+
url.searchParams.append('polygons', String(input.polygons));
|
|
96
|
+
}
|
|
97
|
+
if (input.denoise) {
|
|
98
|
+
url.searchParams.append('denoise', String(input.denoise));
|
|
99
|
+
}
|
|
100
|
+
if (input.generalize) {
|
|
101
|
+
url.searchParams.append('generalize', String(input.generalize));
|
|
102
|
+
}
|
|
103
|
+
if (input.exclude && input.exclude.length > 0) {
|
|
104
|
+
url.searchParams.append('exclude', input.exclude.join(','));
|
|
105
|
+
}
|
|
106
|
+
if (input.depart_at) {
|
|
107
|
+
url.searchParams.append('depart_at', input.depart_at);
|
|
108
|
+
}
|
|
109
|
+
const response = await this.fetch(url);
|
|
110
|
+
if (!response.ok) {
|
|
111
|
+
throw new Error(`Failed to calculate isochrones: ${response.status} ${response.statusText}`);
|
|
112
|
+
}
|
|
113
|
+
const data = await response.json();
|
|
114
|
+
return data;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
exports.IsochroneTool = IsochroneTool;
|
|
118
|
+
//# sourceMappingURL=IsochroneTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IsochroneTool.js","sourceRoot":"","sources":["../../../../src/tools/isochrone-tool/IsochroneTool.ts"],"names":[],"mappings":"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"}
|