Files
TREK/server/src/addons.ts
T
Maurice 52ed63715c Tours: tests follow the provenance read and the shared day assignment, the tours addon ends MCP sessions, a line without a point is not copied
The repository stubs of the tour service tests answer findProvenance, which getTour and createTour read since P2C-02.
Switching the Tours addon off now ends live MCP sessions like every other addon that gates a tool (MCP-GATE-PARITY-001).
copyTour refuses a line without a point instead of placing the copy at 0/0, and new tests cover the reachable paths
of the copy, the source check and the provenance of a snapshot without its import record, including a trip copy
keeping that record. On the client the shared day assignment hands the plan exactly the tour and the day, the new
visibility store is reset between tests, and the tests of the sidebar, the detail, the phone sheet and the origin
section match the views this PR built.
2026-10-15 22:34:33 +00:00

53 lines
1.6 KiB
TypeScript

export const ADDON_IDS = {
MCP: 'mcp',
PACKING: 'packing',
BUDGET: 'budget',
DOCUMENTS: 'documents',
VACAY: 'vacay',
ATLAS: 'atlas',
COLLAB: 'collab',
JOURNEY: 'journey',
AIRTRAIL: 'airtrail',
DAWARICH: 'dawarich',
LLM_PARSING: 'llm_parsing',
COLLECTIONS: 'collections',
ROADTRIP: 'roadtrip',
TOURS: 'tours',
} as const;
export type AddonId = (typeof ADDON_IDS)[keyof typeof ADDON_IDS];
/**
* The addons that gate an MCP surface, which is what decides whether switching
* one off has to tear down the live sessions.
*
* A `when:` gate is evaluated once per session, at attach time. A client that
* connected while an addon was on therefore keeps its tools registered and
* callable after an admin switches it off — the gate never re-runs — while the
* REST half answers 404 for the same user in the same moment. Only tearing the
* sessions down closes that.
*
* Stated here rather than collected at import time, so nothing depends on which
* modules a caller happens to have loaded, and guarded by a parity test that
* reads the gates out of the source: as a hand-kept list this had already
* drifted, and airtrail and collections were missing from it.
*
* MCP itself is on the list for a different reason — it gates the whole surface
* rather than any single tool.
*/
export const MCP_GATED_ADDON_IDS: readonly AddonId[] = [
ADDON_IDS.MCP,
ADDON_IDS.AIRTRAIL,
ADDON_IDS.ATLAS,
ADDON_IDS.BUDGET,
ADDON_IDS.COLLAB,
ADDON_IDS.COLLECTIONS,
ADDON_IDS.DAWARICH,
ADDON_IDS.DOCUMENTS,
ADDON_IDS.JOURNEY,
ADDON_IDS.PACKING,
ADDON_IDS.ROADTRIP,
ADDON_IDS.TOURS,
ADDON_IDS.VACAY,
];