@cyanheads/wsdot-mcp-server 0.1.15 → 0.2.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/AGENTS.md +1 -1
- package/CLAUDE.md +1 -1
- package/README.md +9 -3
- package/changelog/0.2.x/0.2.0.md +16 -0
- package/changelog/0.2.x/0.2.1.md +16 -0
- package/dist/mcp-server/tools/definitions/get-ferry-alerts.tool.d.ts +4 -0
- package/dist/mcp-server/tools/definitions/get-ferry-alerts.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-ferry-alerts.tool.js +30 -3
- package/dist/mcp-server/tools/definitions/get-ferry-alerts.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-ferry-schedule.tool.d.ts +0 -1
- package/dist/mcp-server/tools/definitions/get-ferry-schedule.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-ferry-schedule.tool.js +5 -4
- package/dist/mcp-server/tools/definitions/get-ferry-schedule.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-terminal-space.tool.d.ts +4 -1
- package/dist/mcp-server/tools/definitions/get-terminal-space.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-terminal-space.tool.js +35 -11
- package/dist/mcp-server/tools/definitions/get-terminal-space.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-alerts.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-alerts.tool.js +14 -3
- package/dist/mcp-server/tools/definitions/search-alerts.tool.js.map +1 -1
- package/dist/services/ferry/ferry-service.d.ts.map +1 -1
- package/dist/services/ferry/ferry-service.js +43 -15
- package/dist/services/ferry/ferry-service.js.map +1 -1
- package/dist/services/ferry/types.d.ts +49 -7
- package/dist/services/ferry/types.d.ts.map +1 -1
- package/dist/services/html-text.d.ts +31 -0
- package/dist/services/html-text.d.ts.map +1 -0
- package/dist/services/html-text.js +285 -0
- package/dist/services/html-text.js.map +1 -0
- package/dist/services/traffic/traffic-service.d.ts.map +1 -1
- package/dist/services/traffic/traffic-service.js +17 -2
- package/dist/services/traffic/traffic-service.js.map +1 -1
- package/package.json +1 -1
- package/server.json +3 -3
package/AGENTS.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Developer Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** @cyanheads/wsdot-mcp-server
|
|
4
|
-
**Version:** 0.1
|
|
4
|
+
**Version:** 0.2.1
|
|
5
5
|
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.11.0`
|
|
6
6
|
**Engines:** Bun ≥1.3.0, Node ≥24.0.0
|
|
7
7
|
**MCP SDK:** `@modelcontextprotocol/sdk` ^1.29.0
|
package/CLAUDE.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Developer Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** @cyanheads/wsdot-mcp-server
|
|
4
|
-
**Version:** 0.1
|
|
4
|
+
**Version:** 0.2.1
|
|
5
5
|
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.11.0`
|
|
6
6
|
**Engines:** Bun ≥1.3.0, Node ≥24.0.0
|
|
7
7
|
**MCP SDK:** `@modelcontextprotocol/sdk` ^1.29.0
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
<div align="center">
|
|
9
9
|
|
|
10
|
-
[](./CHANGELOG.md) [](./LICENSE) [](https://github.com/users/cyanheads/packages/container/package/wsdot-mcp-server) [](https://modelcontextprotocol.io/) [](https://www.npmjs.com/package/@cyanheads/wsdot-mcp-server) [](https://www.typescriptlang.org/) [](https://bun.sh/)
|
|
11
11
|
|
|
12
12
|
</div>
|
|
13
13
|
|
|
@@ -60,6 +60,7 @@ Active WA highway alerts — incidents, construction, closures, restrictions.
|
|
|
60
60
|
- Filter by WSDOT region: Northwest, Olympic, Southwest, South Central, North Central, Eastern
|
|
61
61
|
- Filter by milepost range to scope to a corridor — an alert matches when its extent overlaps the range, so a closure that spans the boundary is returned
|
|
62
62
|
- Omit all filters to return all current statewide alerts
|
|
63
|
+
- Descriptions are plain text — upstream authors them with markup, and a link is rendered inline as `link text (url)` so the destination survives
|
|
63
64
|
|
|
64
65
|
---
|
|
65
66
|
|
|
@@ -130,6 +131,7 @@ Departure times for a specific WSF ferry route.
|
|
|
130
131
|
- Requires numeric terminal IDs — use `wsdot_get_ferry_terminals` first
|
|
131
132
|
- `remainingOnly: true` returns only future departures for today (useful for "next ferry" queries)
|
|
132
133
|
- For future dates, all sailings for that day are returned
|
|
134
|
+
- No cancellation status — WSF drops a cancelled sailing from the schedule rather than flagging it, so a listed sailing is not confirmation it will run; check `wsdot_get_ferry_alerts`, which reports disruptions at route level
|
|
133
135
|
|
|
134
136
|
---
|
|
135
137
|
|
|
@@ -147,7 +149,8 @@ Real-time AIS positions for all active WSF vessels.
|
|
|
147
149
|
|
|
148
150
|
Real-time vehicle space availability at WSF terminals for upcoming sailings.
|
|
149
151
|
|
|
150
|
-
- `
|
|
152
|
+
- `driveUpSpaceCount` is the key field — zero means the drive-up lane is full. Oversubscribed sailings report a negative count upstream; it is floored to zero so the value never reads as available space
|
|
153
|
+
- `arrivingTerminalIds` lists the terminals a sailing serves and chains straight into `wsdot_get_ferry_schedule`; `itineraryLabel` is a display string that may name several stops, not a single destination
|
|
151
154
|
- Filter to a specific terminal by ID (from `wsdot_get_ferry_terminals`)
|
|
152
155
|
- Use for "will I make the ferry?" or "how full is the next sailing?" queries
|
|
153
156
|
|
|
@@ -157,7 +160,10 @@ Real-time vehicle space availability at WSF terminals for upcoming sailings.
|
|
|
157
160
|
|
|
158
161
|
Active WSF ferry service disruptions, delays, and bulletins.
|
|
159
162
|
|
|
163
|
+
- Each alert carries the bulletin's `alertTitle`, its one-line `alertDescription`, and the full `bulletinText` — detail such as a replacement sailing appears only in the body
|
|
164
|
+
- `bulletinText` is plain text: upstream authors it as HTML, and a link is rendered inline as `link text (url)`
|
|
160
165
|
- Each alert includes `impactedRouteIds` — cross-reference with `wsdot_get_ferry_routes` to map route IDs to names
|
|
166
|
+
- `affectsAllRoutes: true` marks a fleet-wide alert, which need not enumerate routes — an empty `impactedRouteIds` then means every route rather than none
|
|
161
167
|
|
|
162
168
|
---
|
|
163
169
|
|
|
@@ -181,7 +187,7 @@ WSDOT-specific:
|
|
|
181
187
|
Agent-friendly output:
|
|
182
188
|
|
|
183
189
|
- Cross-tool linking built into descriptions — ferry tools document which tool to call first for terminal and route ID resolution
|
|
184
|
-
- `
|
|
190
|
+
- `driveUpSpaceCount: 0` and congestion delta fields give agents actionable signal without string parsing
|
|
185
191
|
- Partial data preserved — sparse upstream payloads surface `null`/`undefined` rather than synthetic defaults
|
|
186
192
|
|
|
187
193
|
## Getting started
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "`wsdot_get_terminal_space`: negative `DriveUpSpaceCount`/`ReservableSpaceCount` now floor to zero, and `arrivingTerminalName` is replaced by `arrivingTerminalIds` (destinations) and `itineraryLabel` (display string) (#25, #31); `wsdot_get_ferry_schedule` drops `isCancelled`, which no upstream endpoint ever populated (#32)."
|
|
3
|
+
breaking: true
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.2.0 — 2026-07-30
|
|
8
|
+
|
|
9
|
+
## Changed
|
|
10
|
+
|
|
11
|
+
- **`wsdot_get_terminal_space` destinations.** `arrivingTerminalName` is removed; the upstream `TerminalName` it mapped is an itinerary string, not a destination, and on multi-stop San Juan itineraries its sibling `TerminalID` names the *departing* terminal, not the arrival. Replaced by `arrivingTerminalIds` (from `ArrivalTerminalIDs`, the terminals actually served — chain straight into `wsdot_get_ferry_schedule`) and `itineraryLabel` (the display string, kept for rendering only). `displayDriveUpSpace`/`displayReservableSpace` are also now surfaced and gate `format()`'s drive-up/reservable lines — `false` means the count isn't reported, not that the lane is empty ([#31](https://github.com/cyanheads/wsdot-mcp-server/issues/31)).
|
|
12
|
+
- **`driveUpSpaceCount`/`reservableSpaceCount` floor at zero.** An oversubscribed sailing reports a negative count upstream (confirmed live at `-3`, `-5`, `-6`, `-8`); both fields are now clamped with `Math.max(0, …)` during normalization so the value never reads as usable space, and `format()`'s FULL check is now non-positive (`<= 0`) instead of `=== 0`, extended to `reservableSpaceCount` as well ([#25](https://github.com/cyanheads/wsdot-mcp-server/issues/25)).
|
|
13
|
+
|
|
14
|
+
## Removed
|
|
15
|
+
|
|
16
|
+
- **`wsdot_get_ferry_schedule` drops `isCancelled`.** Neither the `scheduletoday` nor `schedule` upstream endpoint has ever populated it — `RawSailing.IsCancelled` was a dead field, so the flag was always absent and the `~~CANCELLED~~` formatter branch was unreachable. The tool description now points callers at `wsdot_get_ferry_alerts` for disruptions (route-scoped, not per-sailing). `wsdot_get_terminal_space`'s `isCancelled` is unaffected — that endpoint genuinely populates it ([#32](https://github.com/cyanheads/wsdot-mcp-server/issues/32)).
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "`wsdot_search_alerts` normalizes upstream HTML in `headlineDescription`/`extendedDescription` to plain text, preserving link destinations (#22); `wsdot_get_ferry_alerts` surfaces `alertTitle`, `bulletinText`, `alertType`, and `affectsAllRoutes` (#34)."
|
|
3
|
+
breaking: false
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.2.1 — 2026-07-30
|
|
8
|
+
|
|
9
|
+
## Added
|
|
10
|
+
|
|
11
|
+
- **Shared HTML-to-text normalizer (`src/services/html-text.ts`).** A hand-written single-pass scanner rather than a dependency — the two framework sanitization helpers are both async, which would make the normalizers async throughout. A destination whose scheme isn't `http`/`https`/`mailto`/`tel` is dropped while the anchor's text is kept; control characters inside a destination are stripped before the scheme check; a destination still carrying an entity this decoder doesn't resolve is rejected rather than passed through.
|
|
12
|
+
- **`wsdot_get_ferry_alerts` surfaces bulletin detail.** `alertTitle` (from `AlertFullTitle`), `bulletinText` (the bulletin body, HTML normalized to plain text), `alertType` (e.g. "All Alerts"), and `affectsAllRoutes` (from `AllRoutesFlag`) are now mapped alongside the existing `alertDescription` summary. `bulletinText` is the only place detail such as a replacement sailing appears. `affectsAllRoutes` disambiguates an empty `impactedRouteIds`: `format()` now renders "all routes — this alert affects the whole fleet" when true, and "none listed — this alert names no specific route" when false with no routes ([#34](https://github.com/cyanheads/wsdot-mcp-server/issues/34)).
|
|
13
|
+
|
|
14
|
+
## Fixed
|
|
15
|
+
|
|
16
|
+
- **`wsdot_search_alerts` no longer leaks upstream HTML.** `headlineDescription` and `extendedDescription` are normalized to plain text before either response path reads them — an anchor renders as `link text (url)`, keeping the destination. A description that normalizes to nothing is now omitted rather than sent as an empty string. `format()` also puts only the first line of a multi-paragraph headline in the `###` heading, so the trailing alert ID no longer lands mid-paragraph ([#22](https://github.com/cyanheads/wsdot-mcp-server/issues/22)).
|
|
@@ -7,7 +7,11 @@ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
|
7
7
|
export declare const getFerryAlerts: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{}, z.core.$strip>, z.ZodObject<{
|
|
8
8
|
alerts: z.ZodArray<z.ZodObject<{
|
|
9
9
|
alertId: z.ZodOptional<z.ZodNumber>;
|
|
10
|
+
alertTitle: z.ZodOptional<z.ZodString>;
|
|
10
11
|
alertDescription: z.ZodOptional<z.ZodString>;
|
|
12
|
+
bulletinText: z.ZodOptional<z.ZodString>;
|
|
13
|
+
alertType: z.ZodOptional<z.ZodString>;
|
|
14
|
+
affectsAllRoutes: z.ZodOptional<z.ZodBoolean>;
|
|
11
15
|
impactedRouteIds: z.ZodArray<z.ZodNumber>;
|
|
12
16
|
publishDate: z.ZodOptional<z.ZodString>;
|
|
13
17
|
}, z.core.$strip>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-ferry-alerts.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-ferry-alerts.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,cAAc
|
|
1
|
+
{"version":3,"file":"get-ferry-alerts.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-ferry-alerts.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;EAwHzB,CAAC"}
|
|
@@ -8,6 +8,8 @@ import { getFerryApiService } from '../../../services/ferry/ferry-service.js';
|
|
|
8
8
|
export const getFerryAlerts = tool('wsdot_get_ferry_alerts', {
|
|
9
9
|
title: 'Get Ferry Alerts',
|
|
10
10
|
description: 'Returns active WSF ferry service disruptions, delays, and bulletins. ' +
|
|
11
|
+
'Each alert carries a one-line summary plus the bulletin title, kind, and full body — the body ' +
|
|
12
|
+
'is where detail such as a replacement sailing appears. ' +
|
|
11
13
|
'Each alert includes impacted route IDs — cross-reference with wsdot_get_ferry_routes ' +
|
|
12
14
|
'to resolve route IDs to human-readable route names. Some IDs (seasonal, San Juan interisland, ' +
|
|
13
15
|
'or international Sidney B.C. routes) may not appear in wsdot_get_ferry_routes for a given date.',
|
|
@@ -18,14 +20,28 @@ export const getFerryAlerts = tool('wsdot_get_ferry_alerts', {
|
|
|
18
20
|
.array(z
|
|
19
21
|
.object({
|
|
20
22
|
alertId: z.number().optional().describe('Unique alert identifier.'),
|
|
23
|
+
alertTitle: z.string().optional().describe("The bulletin's own title."),
|
|
21
24
|
alertDescription: z
|
|
22
25
|
.string()
|
|
23
26
|
.optional()
|
|
24
|
-
.describe('
|
|
27
|
+
.describe('One-line summary of the alert or disruption, as shown on the route pages. Falls back to the title when upstream publishes no summary.'),
|
|
28
|
+
bulletinText: z
|
|
29
|
+
.string()
|
|
30
|
+
.optional()
|
|
31
|
+
.describe('Full bulletin body as plain text, normalized from the upstream HTML — links are rendered inline as "link text (url)". Detail that appears nowhere else, such as a replacement sailing, lives here.'),
|
|
32
|
+
alertType: z
|
|
33
|
+
.string()
|
|
34
|
+
.optional()
|
|
35
|
+
.describe('Alert kind as WSF categorizes it, e.g. "All Alerts".'),
|
|
36
|
+
affectsAllRoutes: z
|
|
37
|
+
.boolean()
|
|
38
|
+
.optional()
|
|
39
|
+
.describe('True when the alert applies fleet-wide. A fleet-wide alert need not enumerate routes, so while this is true an empty impactedRouteIds means every route rather than none.'),
|
|
25
40
|
impactedRouteIds: z
|
|
26
41
|
.array(z.number())
|
|
27
42
|
.describe('Route IDs affected by this alert. Cross-reference with wsdot_get_ferry_routes to get route names; ' +
|
|
28
|
-
'some seasonal or interisland route IDs may not be listed there for a given date.'
|
|
43
|
+
'some seasonal or interisland route IDs may not be listed there for a given date. ' +
|
|
44
|
+
'Empty means no specific routes unless affectsAllRoutes is true, which makes it fleet-wide.'),
|
|
29
45
|
publishDate: z.string().optional().describe('When the alert was published (ISO 8601).'),
|
|
30
46
|
})
|
|
31
47
|
.describe('A WSF ferry service alert or disruption.'))
|
|
@@ -70,12 +86,23 @@ export const getFerryAlerts = tool('wsdot_get_ferry_alerts', {
|
|
|
70
86
|
const lines = [];
|
|
71
87
|
for (const a of result.alerts) {
|
|
72
88
|
const id = a.alertId != null ? ` #${a.alertId}` : '';
|
|
73
|
-
lines.push(`### Alert${id}`);
|
|
89
|
+
lines.push(`### ${a.alertTitle ?? 'Alert'}${id}`);
|
|
90
|
+
if (a.alertType)
|
|
91
|
+
lines.push(`**Type:** ${a.alertType}`);
|
|
74
92
|
if (a.alertDescription)
|
|
75
93
|
lines.push(a.alertDescription);
|
|
94
|
+
if (a.bulletinText)
|
|
95
|
+
lines.push(a.bulletinText);
|
|
76
96
|
if (a.impactedRouteIds.length > 0) {
|
|
77
97
|
lines.push(`**Impacted Route IDs:** ${a.impactedRouteIds.join(', ')} (use wsdot_get_ferry_routes to look up names)`);
|
|
78
98
|
}
|
|
99
|
+
// An alert with no route IDs is ambiguous on its own — say which of the two it is.
|
|
100
|
+
if (a.affectsAllRoutes) {
|
|
101
|
+
lines.push('**Impacted Routes:** all routes — this alert affects the whole fleet.');
|
|
102
|
+
}
|
|
103
|
+
else if (a.affectsAllRoutes === false && a.impactedRouteIds.length === 0) {
|
|
104
|
+
lines.push('**Impacted Routes:** none listed — this alert names no specific route.');
|
|
105
|
+
}
|
|
79
106
|
if (a.publishDate)
|
|
80
107
|
lines.push(`**Published:** ${a.publishDate}`);
|
|
81
108
|
lines.push('');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-ferry-alerts.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-ferry-alerts.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,wBAAwB,EAAE;IAC3D,KAAK,EAAE,kBAAkB;IACzB,WAAW,EACT,uEAAuE;QACvE,uFAAuF;QACvF,gGAAgG;QAChG,iGAAiG;IACnG,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACnB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC;aACN,KAAK,CACJ,CAAC;aACE,MAAM,CAAC;YACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YACnE,gBAAgB,EAAE,CAAC;iBAChB,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"get-ferry-alerts.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-ferry-alerts.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,6 @@ export declare const getFerrySchedule: import("@cyanheads/mcp-ts-core").ToolDefi
|
|
|
15
15
|
sailings: z.ZodArray<z.ZodObject<{
|
|
16
16
|
departureTime: z.ZodOptional<z.ZodString>;
|
|
17
17
|
arrivalTime: z.ZodOptional<z.ZodString>;
|
|
18
|
-
isCancelled: z.ZodOptional<z.ZodBoolean>;
|
|
19
18
|
vesselName: z.ZodOptional<z.ZodString>;
|
|
20
19
|
}, z.core.$strip>>;
|
|
21
20
|
}, z.core.$strip>, readonly [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-ferry-schedule.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-ferry-schedule.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAY,MAAM,+BAA+B,CAAC;AAI3E,eAAO,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"get-ferry-schedule.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-ferry-schedule.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAY,MAAM,+BAA+B,CAAC;AAI3E,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmL3B,CAAC"}
|
|
@@ -10,7 +10,10 @@ export const getFerrySchedule = tool('wsdot_get_ferry_schedule', {
|
|
|
10
10
|
description: 'Returns departure times for a specific WSF ferry route on a given date. ' +
|
|
11
11
|
'Requires numeric terminal IDs — use wsdot_get_ferry_terminals to resolve terminal names to IDs. ' +
|
|
12
12
|
'Set remainingOnly to true to show only future departures for today (useful for "next ferry" queries). ' +
|
|
13
|
-
'For future dates, all sailings for that day are returned.'
|
|
13
|
+
'For future dates, all sailings for that day are returned. ' +
|
|
14
|
+
'Cancellations are not carried here — WSF drops a cancelled sailing from the schedule instead ' +
|
|
15
|
+
'of flagging it, so a listed sailing is not confirmation that it will run. Check ' +
|
|
16
|
+
'wsdot_get_ferry_alerts for disruptions; those are scoped to a route, not an individual sailing.',
|
|
14
17
|
annotations: { readOnlyHint: true },
|
|
15
18
|
input: z.object({
|
|
16
19
|
departingTerminalId: z
|
|
@@ -34,7 +37,6 @@ export const getFerrySchedule = tool('wsdot_get_ferry_schedule', {
|
|
|
34
37
|
.object({
|
|
35
38
|
departureTime: z.string().optional().describe('Scheduled departure time.'),
|
|
36
39
|
arrivalTime: z.string().optional().describe('Scheduled arrival time.'),
|
|
37
|
-
isCancelled: z.boolean().optional().describe('Whether this sailing is cancelled.'),
|
|
38
40
|
vesselName: z.string().optional().describe('Vessel assigned to this sailing.'),
|
|
39
41
|
})
|
|
40
42
|
.describe('One scheduled sailing with departure time and vessel assignment.'))
|
|
@@ -143,11 +145,10 @@ export const getFerrySchedule = tool('wsdot_get_ferry_schedule', {
|
|
|
143
145
|
}
|
|
144
146
|
else {
|
|
145
147
|
for (const s of result.sailings) {
|
|
146
|
-
const cancelled = s.isCancelled ? ' ~~CANCELLED~~' : '';
|
|
147
148
|
const dep = s.departureTime ?? 'Unknown';
|
|
148
149
|
const arr = s.arrivalTime ? ` → ${s.arrivalTime}` : '';
|
|
149
150
|
const vessel = s.vesselName ? ` | ${s.vesselName}` : '';
|
|
150
|
-
lines.push(`- ${dep}${arr}${vessel}
|
|
151
|
+
lines.push(`- ${dep}${arr}${vessel}`);
|
|
151
152
|
}
|
|
152
153
|
}
|
|
153
154
|
return [{ type: 'text', text: lines.join('\n') }];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-ferry-schedule.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-ferry-schedule.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAGxF,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,0BAA0B,EAAE;IAC/D,KAAK,EAAE,oBAAoB;IAC3B,WAAW,EACT,0EAA0E;QAC1E,kGAAkG;QAClG,wGAAwG;QACxG,
|
|
1
|
+
{"version":3,"file":"get-ferry-schedule.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-ferry-schedule.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,10 @@ export declare const getTerminalSpace: import("@cyanheads/mcp-ts-core").ToolDefi
|
|
|
14
14
|
departure: z.ZodOptional<z.ZodString>;
|
|
15
15
|
isCancelled: z.ZodOptional<z.ZodBoolean>;
|
|
16
16
|
vesselName: z.ZodOptional<z.ZodString>;
|
|
17
|
-
|
|
17
|
+
arrivingTerminalIds: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
18
|
+
itineraryLabel: z.ZodOptional<z.ZodString>;
|
|
19
|
+
displayDriveUpSpace: z.ZodOptional<z.ZodBoolean>;
|
|
20
|
+
displayReservableSpace: z.ZodOptional<z.ZodBoolean>;
|
|
18
21
|
driveUpSpaceCount: z.ZodOptional<z.ZodNumber>;
|
|
19
22
|
reservableSpaceCount: z.ZodOptional<z.ZodNumber>;
|
|
20
23
|
maxSpaceCount: z.ZodOptional<z.ZodNumber>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-terminal-space.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-terminal-space.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"get-terminal-space.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-terminal-space.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgM3B,CAAC"}
|
|
@@ -10,7 +10,9 @@ export const getTerminalSpace = tool('wsdot_get_terminal_space', {
|
|
|
10
10
|
description: 'Returns real-time drive-up and reservable vehicle space available at WSF terminals for upcoming sailings. ' +
|
|
11
11
|
'Use for "will I make the ferry?" or "how full is the next sailing?" questions. ' +
|
|
12
12
|
'Optionally filter to a specific terminal by ID (use wsdot_get_ferry_terminals for the ID). ' +
|
|
13
|
-
'
|
|
13
|
+
'driveUpSpaceCount is the key field — zero means the drive-up lane is full. ' +
|
|
14
|
+
'Destinations are arrivingTerminalIds, not the itineraryLabel string: a sailing can serve ' +
|
|
15
|
+
'several terminals, and those IDs are what wsdot_get_ferry_schedule accepts.',
|
|
14
16
|
annotations: { readOnlyHint: true },
|
|
15
17
|
input: z.object({
|
|
16
18
|
departingTerminalId: z
|
|
@@ -36,18 +38,30 @@ export const getTerminalSpace = tool('wsdot_get_terminal_space', {
|
|
|
36
38
|
.optional()
|
|
37
39
|
.describe('Whether this sailing is cancelled.'),
|
|
38
40
|
vesselName: z.string().optional().describe('Vessel assigned to this sailing.'),
|
|
39
|
-
|
|
41
|
+
arrivingTerminalIds: z
|
|
42
|
+
.array(z.number())
|
|
43
|
+
.optional()
|
|
44
|
+
.describe('Numeric IDs of the terminals this sailing serves — the destinations. Pass one to wsdot_get_ferry_schedule as arrivingTerminalId, or resolve names with wsdot_get_ferry_terminals.'),
|
|
45
|
+
itineraryLabel: z
|
|
40
46
|
.string()
|
|
41
47
|
.optional()
|
|
42
|
-
.describe('
|
|
48
|
+
.describe('Upstream itinerary string for the sailing, e.g. "Anacortes -> Friday Harbor". A display label only — it may name the departing terminal or several stops, so do not read it as the destination.'),
|
|
49
|
+
displayDriveUpSpace: z
|
|
50
|
+
.boolean()
|
|
51
|
+
.optional()
|
|
52
|
+
.describe('Whether WSF publishes a drive-up count for this sailing. False means driveUpSpaceCount is not reported, not that the lane is empty.'),
|
|
53
|
+
displayReservableSpace: z
|
|
54
|
+
.boolean()
|
|
55
|
+
.optional()
|
|
56
|
+
.describe('Whether this sailing takes vehicle reservations. False means reservableSpaceCount does not apply.'),
|
|
43
57
|
driveUpSpaceCount: z
|
|
44
58
|
.number()
|
|
45
59
|
.optional()
|
|
46
|
-
.describe('Available drive-up vehicle spaces. Zero means full.'),
|
|
60
|
+
.describe('Available drive-up vehicle spaces. Zero means full — oversubscribed sailings report a negative count upstream and are floored to zero here, so this value is never negative.'),
|
|
47
61
|
reservableSpaceCount: z
|
|
48
62
|
.number()
|
|
49
63
|
.optional()
|
|
50
|
-
.describe('Available reservable vehicle spaces.'),
|
|
64
|
+
.describe('Available reservable vehicle spaces, floored at zero like driveUpSpaceCount. Zero means no reservable space remains.'),
|
|
51
65
|
maxSpaceCount: z
|
|
52
66
|
.number()
|
|
53
67
|
.optional()
|
|
@@ -121,15 +135,25 @@ export const getTerminalSpace = tool('wsdot_get_terminal_space', {
|
|
|
121
135
|
else {
|
|
122
136
|
for (const s of t.departingSpaces) {
|
|
123
137
|
const cancelled = s.isCancelled ? ' [CANCELLED]' : '';
|
|
124
|
-
const
|
|
138
|
+
const itinerary = s.itineraryLabel ? ` → ${s.itineraryLabel}` : '';
|
|
125
139
|
const vessel = s.vesselName ? ` | ${s.vesselName}` : '';
|
|
126
|
-
lines.push(`**${s.departure ?? 'Unknown'}**${
|
|
127
|
-
if (s.
|
|
128
|
-
|
|
140
|
+
lines.push(`**${s.departure ?? 'Unknown'}**${itinerary}${vessel}${cancelled}`);
|
|
141
|
+
if (s.arrivingTerminalIds?.length) {
|
|
142
|
+
lines.push(` arrivingTerminalIds: ${s.arrivingTerminalIds.join(', ')}`);
|
|
143
|
+
}
|
|
144
|
+
if (s.displayDriveUpSpace === false) {
|
|
145
|
+
lines.push(' Drive-up: not reported for this sailing (displayDriveUpSpace: false)');
|
|
146
|
+
}
|
|
147
|
+
else if (s.driveUpSpaceCount != null) {
|
|
148
|
+
const full = s.driveUpSpaceCount <= 0 ? ' (FULL)' : '';
|
|
129
149
|
lines.push(` Drive-up: ${s.driveUpSpaceCount}${s.maxSpaceCount != null ? `/${s.maxSpaceCount}` : ''} spaces${full}`);
|
|
130
150
|
}
|
|
131
|
-
if (s.
|
|
132
|
-
lines.push(
|
|
151
|
+
if (s.displayReservableSpace === false) {
|
|
152
|
+
lines.push(' Reservable: no reservations on this sailing (displayReservableSpace: false)');
|
|
153
|
+
}
|
|
154
|
+
else if (s.reservableSpaceCount != null) {
|
|
155
|
+
const full = s.reservableSpaceCount <= 0 ? ' (FULL)' : '';
|
|
156
|
+
lines.push(` Reservable: ${s.reservableSpaceCount} spaces${full}`);
|
|
133
157
|
}
|
|
134
158
|
if (s.driveUpSpaceHexColor) {
|
|
135
159
|
lines.push(` Space color indicator: ${s.driveUpSpaceHexColor}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-terminal-space.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-terminal-space.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,0BAA0B,EAAE;IAC/D,KAAK,EAAE,oBAAoB;IAC3B,WAAW,EACT,4GAA4G;QAC5G,iFAAiF;QACjF,6FAA6F;QAC7F,
|
|
1
|
+
{"version":3,"file":"get-terminal-space.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-terminal-space.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-alerts.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-alerts.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"search-alerts.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-alerts.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwPvB,CAAC"}
|
|
@@ -36,8 +36,14 @@ export const searchAlerts = tool('wsdot_search_alerts', {
|
|
|
36
36
|
.array(z
|
|
37
37
|
.object({
|
|
38
38
|
alertId: z.number().optional().describe('Unique alert identifier.'),
|
|
39
|
-
headlineDescription: z
|
|
40
|
-
|
|
39
|
+
headlineDescription: z
|
|
40
|
+
.string()
|
|
41
|
+
.optional()
|
|
42
|
+
.describe('Short summary of the alert, as plain text. Upstream authors these in a rich-text editor, so any markup is normalized away and a link is rendered inline as "link text (url)".'),
|
|
43
|
+
extendedDescription: z
|
|
44
|
+
.string()
|
|
45
|
+
.optional()
|
|
46
|
+
.describe('Full description of the alert, normalized to plain text on the same terms as headlineDescription. Often absent — most alerts carry only a headline.'),
|
|
41
47
|
eventCategory: z
|
|
42
48
|
.string()
|
|
43
49
|
.optional()
|
|
@@ -169,7 +175,12 @@ export const searchAlerts = tool('wsdot_search_alerts', {
|
|
|
169
175
|
const lines = [];
|
|
170
176
|
for (const a of result.alerts) {
|
|
171
177
|
const id = a.alertId != null ? ` #${a.alertId}` : '';
|
|
172
|
-
|
|
178
|
+
// A headline can run to several paragraphs; only its first line belongs in the heading,
|
|
179
|
+
// otherwise the trailing alert ID lands at the end of the last paragraph.
|
|
180
|
+
const [heading, ...restOfHeadline] = (a.headlineDescription ?? '').split('\n');
|
|
181
|
+
lines.push(`### ${heading || 'Alert'}${id}`);
|
|
182
|
+
if (restOfHeadline.length > 0)
|
|
183
|
+
lines.push(restOfHeadline.join('\n'));
|
|
173
184
|
if (a.eventCategory)
|
|
174
185
|
lines.push(`**Category:** ${a.eventCategory}`);
|
|
175
186
|
if (a.eventStatus)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-alerts.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-alerts.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAE7E,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,EAAE;IACtD,KAAK,EAAE,uBAAuB;IAC9B,WAAW,EACT,yFAAyF;QACzF,qEAAqE;QACrE,uFAAuF;QACvF,8DAA8D;QAC9D,0DAA0D;IAC5D,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,kTAAkT,CACnT;QACH,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,mKAAmK,CACpK;QACH,aAAa,EAAE,CAAC;aACb,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,0PAA0P,CAC3P;QACH,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,qJAAqJ,CACtJ;KACJ,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC;aACN,KAAK,CACJ,CAAC;aACE,MAAM,CAAC;YACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YACnE,mBAAmB,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"search-alerts.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-alerts.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ferry-service.d.ts","sourceRoot":"","sources":["../../../src/services/ferry/ferry-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"ferry-service.d.ts","sourceRoot":"","sources":["../../../src/services/ferry/ferry-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAMrE,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,EAOb,oBAAoB,EACpB,cAAc,EACf,MAAM,YAAY,CAAC;AAMpB,qBAAa,eAAe;IAC1B,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAI;IAE5D,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,SAAS;IAgCjB;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAc1C;IAED;;;;OAIG;IACH,MAAM,CAAC,cAAc,IAAI,MAAM,CAE9B;IAEK,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAUzD;IAEK,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAQrE;IAEK,WAAW,CACf,mBAAmB,EAAE,MAAM,EAC3B,kBAAkB,EAAE,MAAM,EAC1B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,OAAO,EACtB,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,aAAa,CAAC,CAqCxB;IAEK,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAsBhE;IAEK,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAmD3E;IAEK,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CA0BnD;CACF;AAMD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAEpF;AAED,wBAAgB,kBAAkB,IAAI,eAAe,CAKpD"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { validationError } from '@cyanheads/mcp-ts-core/errors';
|
|
7
7
|
import { withRetry } from '@cyanheads/mcp-ts-core/utils';
|
|
8
8
|
import { getServerConfig } from '../../config/server-config.js';
|
|
9
|
+
import { htmlToText } from '../../services/html-text.js';
|
|
9
10
|
import { wcfDateField } from '../../services/wcf-date.js';
|
|
10
11
|
import { assertUpstreamJson, fetchUpstream, redactUrl } from '../../services/wsdot-http.js';
|
|
11
12
|
const BASE_URL = 'https://www.wsdot.wa.gov/Ferries/API';
|
|
@@ -121,7 +122,6 @@ export class FerryApiService {
|
|
|
121
122
|
sailings: (combo?.Times ?? []).map((s) => ({
|
|
122
123
|
...wcfDateField('departureTime', s.DepartingTime),
|
|
123
124
|
...wcfDateField('arrivalTime', s.ArrivingTime),
|
|
124
|
-
...(typeof s.IsCancelled === 'boolean' && { isCancelled: s.IsCancelled }),
|
|
125
125
|
...(s.VesselName != null && { vesselName: s.VesselName }),
|
|
126
126
|
})),
|
|
127
127
|
};
|
|
@@ -173,9 +173,25 @@ export class FerryApiService {
|
|
|
173
173
|
...wcfDateField('departure', s.Departure),
|
|
174
174
|
...(typeof s.IsCancelled === 'boolean' && { isCancelled: s.IsCancelled }),
|
|
175
175
|
...(s.VesselName != null && { vesselName: s.VesselName }),
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
...(a.
|
|
176
|
+
// TerminalName is an itinerary string and its sibling TerminalID is the *departing*
|
|
177
|
+
// terminal on multi-stop routes; ArrivalTerminalIDs is the only reliable destination.
|
|
178
|
+
...(a.TerminalName != null && { itineraryLabel: a.TerminalName }),
|
|
179
|
+
...(a.ArrivalTerminalIDs != null &&
|
|
180
|
+
a.ArrivalTerminalIDs.length > 0 && { arrivingTerminalIds: a.ArrivalTerminalIDs }),
|
|
181
|
+
...(typeof a.DisplayDriveUpSpace === 'boolean' && {
|
|
182
|
+
displayDriveUpSpace: a.DisplayDriveUpSpace,
|
|
183
|
+
}),
|
|
184
|
+
...(typeof a.DisplayReservableSpace === 'boolean' && {
|
|
185
|
+
displayReservableSpace: a.DisplayReservableSpace,
|
|
186
|
+
}),
|
|
187
|
+
// Oversubscribed sailings report a negative remaining count; floor it so the advertised
|
|
188
|
+
// value never reads as usable space.
|
|
189
|
+
...(a.DriveUpSpaceCount != null && {
|
|
190
|
+
driveUpSpaceCount: Math.max(0, a.DriveUpSpaceCount),
|
|
191
|
+
}),
|
|
192
|
+
...(a.ReservableSpaceCount != null && {
|
|
193
|
+
reservableSpaceCount: Math.max(0, a.ReservableSpaceCount),
|
|
194
|
+
}),
|
|
179
195
|
...(s.MaxSpaceCount != null && { maxSpaceCount: s.MaxSpaceCount }),
|
|
180
196
|
...(a.DriveUpSpaceHexColor != null && { driveUpSpaceHexColor: a.DriveUpSpaceHexColor }),
|
|
181
197
|
}));
|
|
@@ -185,17 +201,29 @@ export class FerryApiService {
|
|
|
185
201
|
async getAlerts(ctx) {
|
|
186
202
|
ctx.log.info('Fetching ferry alerts');
|
|
187
203
|
const raw = await this.fetchJson('Schedule/rest/alerts', ctx);
|
|
188
|
-
return (raw ?? []).map((a) =>
|
|
189
|
-
|
|
190
|
-
//
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
204
|
+
return (raw ?? []).map((a) => {
|
|
205
|
+
// The bulletin body is authored in a rich-text editor and arrives as HTML — nested spans
|
|
206
|
+
// carrying Word-paste attributes, lists, anchors. It is rendered to plain text here, before
|
|
207
|
+
// either response path reads it, so structuredContent and format() carry the same string.
|
|
208
|
+
const bulletinText = a.BulletinText != null ? htmlToText(a.BulletinText) : '';
|
|
209
|
+
return {
|
|
210
|
+
...(a.BulletinID != null && { alertId: a.BulletinID }),
|
|
211
|
+
...(a.AlertFullTitle != null && { alertTitle: a.AlertFullTitle }),
|
|
212
|
+
// Prefer plain-text RouteAlertText; fall back to AlertFullTitle when absent
|
|
213
|
+
...(a.RouteAlertText != null
|
|
214
|
+
? { alertDescription: a.RouteAlertText }
|
|
215
|
+
: a.AlertFullTitle != null
|
|
216
|
+
? { alertDescription: a.AlertFullTitle }
|
|
217
|
+
: {}),
|
|
218
|
+
...(bulletinText && { bulletinText }),
|
|
219
|
+
...(a.AlertType != null && { alertType: a.AlertType }),
|
|
220
|
+
// A fleet-wide alert carries no route IDs, so the flag is what separates "every route"
|
|
221
|
+
// from "no route" — it is mapped whenever upstream states it either way.
|
|
222
|
+
...(typeof a.AllRoutesFlag === 'boolean' && { affectsAllRoutes: a.AllRoutesFlag }),
|
|
223
|
+
impactedRouteIds: a.AffectedRouteIDs ?? [],
|
|
224
|
+
...wcfDateField('publishDate', a.PublishDate),
|
|
225
|
+
};
|
|
226
|
+
});
|
|
199
227
|
}
|
|
200
228
|
}
|
|
201
229
|
// --- Init/accessor pattern ---
|