@cyanheads/ris-austria-mcp-server 0.1.5
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 +401 -0
- package/CLAUDE.md +401 -0
- package/Dockerfile +125 -0
- package/LICENSE +201 -0
- package/README.md +309 -0
- package/changelog/0.1.x/0.1.0.md +25 -0
- package/changelog/0.1.x/0.1.1.md +24 -0
- package/changelog/0.1.x/0.1.2.md +16 -0
- package/changelog/0.1.x/0.1.3.md +11 -0
- package/changelog/0.1.x/0.1.4.md +11 -0
- package/changelog/0.1.x/0.1.5.md +18 -0
- package/changelog/template.md +129 -0
- package/dist/config/server-config.d.ts +19 -0
- package/dist/config/server-config.d.ts.map +1 -0
- package/dist/config/server-config.js +35 -0
- package/dist/config/server-config.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/resources/definitions/ris-document.resource.d.ts +30 -0
- package/dist/mcp-server/resources/definitions/ris-document.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/ris-document.resource.js +75 -0
- package/dist/mcp-server/resources/definitions/ris-document.resource.js.map +1 -0
- package/dist/mcp-server/tools/definitions/_shared.d.ts +8 -0
- package/dist/mcp-server/tools/definitions/_shared.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/_shared.js +10 -0
- package/dist/mcp-server/tools/definitions/_shared.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-get-document.tool.d.ts +189 -0
- package/dist/mcp-server/tools/definitions/ris-get-document.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-get-document.tool.js +504 -0
- package/dist/mcp-server/tools/definitions/ris-get-document.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-list-reference.tool.d.ts +42 -0
- package/dist/mcp-server/tools/definitions/ris-list-reference.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-list-reference.tool.js +316 -0
- package/dist/mcp-server/tools/definitions/ris-list-reference.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-lookup-citation.tool.d.ts +80 -0
- package/dist/mcp-server/tools/definitions/ris-lookup-citation.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-lookup-citation.tool.js +529 -0
- package/dist/mcp-server/tools/definitions/ris-lookup-citation.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-announcements.tool.d.ts +118 -0
- package/dist/mcp-server/tools/definitions/ris-search-announcements.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-announcements.tool.js +389 -0
- package/dist/mcp-server/tools/definitions/ris-search-announcements.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-case-law.tool.d.ts +178 -0
- package/dist/mcp-server/tools/definitions/ris-search-case-law.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-case-law.tool.js +495 -0
- package/dist/mcp-server/tools/definitions/ris-search-case-law.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-drafts.tool.d.ts +80 -0
- package/dist/mcp-server/tools/definitions/ris-search-drafts.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-drafts.tool.js +264 -0
- package/dist/mcp-server/tools/definitions/ris-search-drafts.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-gazette.tool.d.ts +147 -0
- package/dist/mcp-server/tools/definitions/ris-search-gazette.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-gazette.tool.js +509 -0
- package/dist/mcp-server/tools/definitions/ris-search-gazette.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-legislation.tool.d.ts +145 -0
- package/dist/mcp-server/tools/definitions/ris-search-legislation.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-legislation.tool.js +466 -0
- package/dist/mcp-server/tools/definitions/ris-search-legislation.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-track-changes.tool.d.ts +73 -0
- package/dist/mcp-server/tools/definitions/ris-track-changes.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-track-changes.tool.js +265 -0
- package/dist/mcp-server/tools/definitions/ris-track-changes.tool.js.map +1 -0
- package/dist/services/ris/normalizer.d.ts +40 -0
- package/dist/services/ris/normalizer.d.ts.map +1 -0
- package/dist/services/ris/normalizer.js +480 -0
- package/dist/services/ris/normalizer.js.map +1 -0
- package/dist/services/ris/reference/applications.d.ts +529 -0
- package/dist/services/ris/reference/applications.d.ts.map +1 -0
- package/dist/services/ris/reference/applications.js +520 -0
- package/dist/services/ris/reference/applications.js.map +1 -0
- package/dist/services/ris/reference/changed-since-intervals.d.ts +42 -0
- package/dist/services/ris/reference/changed-since-intervals.d.ts.map +1 -0
- package/dist/services/ris/reference/changed-since-intervals.js +16 -0
- package/dist/services/ris/reference/changed-since-intervals.js.map +1 -0
- package/dist/services/ris/reference/citation-formats.d.ts +39 -0
- package/dist/services/ris/reference/citation-formats.d.ts.map +1 -0
- package/dist/services/ris/reference/citation-formats.js +39 -0
- package/dist/services/ris/reference/citation-formats.js.map +1 -0
- package/dist/services/ris/reference/collections.d.ts +82 -0
- package/dist/services/ris/reference/collections.d.ts.map +1 -0
- package/dist/services/ris/reference/collections.js +102 -0
- package/dist/services/ris/reference/collections.js.map +1 -0
- package/dist/services/ris/reference/courts.d.ts +201 -0
- package/dist/services/ris/reference/courts.d.ts.map +1 -0
- package/dist/services/ris/reference/courts.js +198 -0
- package/dist/services/ris/reference/courts.js.map +1 -0
- package/dist/services/ris/reference/decision-kinds.d.ts +78 -0
- package/dist/services/ris/reference/decision-kinds.d.ts.map +1 -0
- package/dist/services/ris/reference/decision-kinds.js +117 -0
- package/dist/services/ris/reference/decision-kinds.js.map +1 -0
- package/dist/services/ris/reference/decision-types.d.ts +36 -0
- package/dist/services/ris/reference/decision-types.d.ts.map +1 -0
- package/dist/services/ris/reference/decision-types.js +29 -0
- package/dist/services/ris/reference/decision-types.js.map +1 -0
- package/dist/services/ris/reference/district-authorities.d.ts +314 -0
- package/dist/services/ris/reference/district-authorities.d.ts.map +1 -0
- package/dist/services/ris/reference/district-authorities.js +212 -0
- package/dist/services/ris/reference/district-authorities.js.map +1 -0
- package/dist/services/ris/reference/gazette-parts.d.ts +73 -0
- package/dist/services/ris/reference/gazette-parts.d.ts.map +1 -0
- package/dist/services/ris/reference/gazette-parts.js +58 -0
- package/dist/services/ris/reference/gazette-parts.js.map +1 -0
- package/dist/services/ris/reference/index.d.ts +23 -0
- package/dist/services/ris/reference/index.d.ts.map +1 -0
- package/dist/services/ris/reference/index.js +23 -0
- package/dist/services/ris/reference/index.js.map +1 -0
- package/dist/services/ris/reference/issuing-bodies.d.ts +642 -0
- package/dist/services/ris/reference/issuing-bodies.d.ts.map +1 -0
- package/dist/services/ris/reference/issuing-bodies.js +616 -0
- package/dist/services/ris/reference/issuing-bodies.js.map +1 -0
- package/dist/services/ris/reference/justiz-subject-areas.d.ts +133 -0
- package/dist/services/ris/reference/justiz-subject-areas.d.ts.map +1 -0
- package/dist/services/ris/reference/justiz-subject-areas.js +67 -0
- package/dist/services/ris/reference/justiz-subject-areas.js.map +1 -0
- package/dist/services/ris/reference/law-types.d.ts +46 -0
- package/dist/services/ris/reference/law-types.d.ts.map +1 -0
- package/dist/services/ris/reference/law-types.js +41 -0
- package/dist/services/ris/reference/law-types.js.map +1 -0
- package/dist/services/ris/reference/ministries.d.ts +360 -0
- package/dist/services/ris/reference/ministries.d.ts.map +1 -0
- package/dist/services/ris/reference/ministries.js +408 -0
- package/dist/services/ris/reference/ministries.js.map +1 -0
- package/dist/services/ris/reference/search-syntax.d.ts +66 -0
- package/dist/services/ris/reference/search-syntax.d.ts.map +1 -0
- package/dist/services/ris/reference/search-syntax.js +65 -0
- package/dist/services/ris/reference/search-syntax.js.map +1 -0
- package/dist/services/ris/reference/section-types.d.ts +33 -0
- package/dist/services/ris/reference/section-types.d.ts.map +1 -0
- package/dist/services/ris/reference/section-types.js +29 -0
- package/dist/services/ris/reference/section-types.js.map +1 -0
- package/dist/services/ris/reference/stages.d.ts +41 -0
- package/dist/services/ris/reference/stages.d.ts.map +1 -0
- package/dist/services/ris/reference/stages.js +27 -0
- package/dist/services/ris/reference/stages.js.map +1 -0
- package/dist/services/ris/reference/states.d.ts +90 -0
- package/dist/services/ris/reference/states.d.ts.map +1 -0
- package/dist/services/ris/reference/states.js +85 -0
- package/dist/services/ris/reference/states.js.map +1 -0
- package/dist/services/ris/request-builder.d.ts +195 -0
- package/dist/services/ris/request-builder.d.ts.map +1 -0
- package/dist/services/ris/request-builder.js +673 -0
- package/dist/services/ris/request-builder.js.map +1 -0
- package/dist/services/ris/ris-service.d.ts +65 -0
- package/dist/services/ris/ris-service.d.ts.map +1 -0
- package/dist/services/ris/ris-service.js +200 -0
- package/dist/services/ris/ris-service.js.map +1 -0
- package/dist/services/ris/types.d.ts +651 -0
- package/dist/services/ris/types.d.ts.map +1 -0
- package/dist/services/ris/types.js +11 -0
- package/dist/services/ris/types.js.map +1 -0
- package/package.json +108 -0
- package/server.json +111 -0
|
@@ -0,0 +1,529 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview ris_lookup_citation — the deterministic citation resolver. Parses one
|
|
3
|
+
* Austrian legal citation, classifies it into one of four routes (norm, gazette, case
|
|
4
|
+
* number, collection number), and routes it to the owning search application with a
|
|
5
|
+
* deterministic filter, returning the single best-matching document.
|
|
6
|
+
*
|
|
7
|
+
* The core contract: unparseable OR unresolvable input is a `{ found: false, kind, guidance }`
|
|
8
|
+
* RESULT, never a throw — the agent self-corrects from structured guidance better than from
|
|
9
|
+
* an exception (fleet precedent: eur-lex lookup_celex, pubmed/courtlistener lookup_citation).
|
|
10
|
+
* The ONLY thrown error is `upstream_error` when a routed search fails upstream
|
|
11
|
+
* (ServiceUnavailable). A service InvalidParams/ValidationError during a routed lookup is a
|
|
12
|
+
* failed deterministic filter = no resolution = `found: false`, not an error.
|
|
13
|
+
*
|
|
14
|
+
* The resolved record is produced by the corresponding search tool's own record mapper, so an
|
|
15
|
+
* agent chaining a resolved citation sees exactly the shape that tool returns.
|
|
16
|
+
* @module mcp-server/tools/definitions/ris-lookup-citation
|
|
17
|
+
*/
|
|
18
|
+
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
19
|
+
import { JsonRpcErrorCode, McpError } from '@cyanheads/mcp-ts-core/errors';
|
|
20
|
+
import { RIS_COURTS, RIS_STATES } from '../../../services/ris/reference/index.js';
|
|
21
|
+
import { getRisService } from '../../../services/ris/ris-service.js';
|
|
22
|
+
import { isoDateString } from './_shared.js';
|
|
23
|
+
import { toRecord as toCaseLawRecord } from './ris-search-case-law.tool.js';
|
|
24
|
+
import { toRecord as toGazetteRecord } from './ris-search-gazette.tool.js';
|
|
25
|
+
import { toRecord as toLegislationRecord } from './ris-search-legislation.tool.js';
|
|
26
|
+
const COURT_CODES = RIS_COURTS.map((c) => c.code);
|
|
27
|
+
const STATE_CODES = RIS_STATES.map((s) => s.code);
|
|
28
|
+
const COURT_APPLICATION = new Map(RIS_COURTS.map((c) => [c.code, c.application]));
|
|
29
|
+
/** Resolve a court code to its RIS `Applikation` value (falls back to the code). */
|
|
30
|
+
function courtApplication(code) {
|
|
31
|
+
return COURT_APPLICATION.get(code) ?? code;
|
|
32
|
+
}
|
|
33
|
+
/** Gazette prefixes that signal a promulgation citation (federal, imperial, or state). */
|
|
34
|
+
const GAZETTE_PREFIX = /\b(?:BGBl|RGBl|StGBl|LGBl)\b|GBl[ÖO]/i;
|
|
35
|
+
/** An explicit norm citation — a section sign, or an Artikel keyword followed by a number. */
|
|
36
|
+
const NORM_EXPLICIT = /§|\bart(?:ikel)?\.?\s*\d/i;
|
|
37
|
+
/** A bare law abbreviation (whole-law reference) — letters/hyphens, an optional trailing year. */
|
|
38
|
+
const BARE_ABBREVIATION = /^[A-Za-zÄÖÜäöüß][A-Za-zÄÖÜäöüß.]*(?:[-\s][A-Za-zÄÖÜäöüß0-9]+)*$/;
|
|
39
|
+
/**
|
|
40
|
+
* Parse a norm citation into an abbreviation and optional §/Artikel number. Handles both
|
|
41
|
+
* orders: section-first ("§ 6 DSG", "Art 10 B-VG") and abbreviation-first ("DSG §1",
|
|
42
|
+
* "DSGVO Art32", "DSG §22 Abs1") — the latter is the shape ris_search_case_law emits in its
|
|
43
|
+
* `norms_cited` output, so a cited norm round-trips straight back into this lookup. Sub-provision
|
|
44
|
+
* refs (Abs / Z / lit / Satz) are dropped either way — RIS filters on the §/Artikel number only,
|
|
45
|
+
* and the document carries every Absatz.
|
|
46
|
+
*/
|
|
47
|
+
function parseNorm(input) {
|
|
48
|
+
const s = input.trim();
|
|
49
|
+
const stripSubRefs = (rest) => rest.replace(/^(?:Abs\.?\s*\d+\w?\s+|Z\s*\d+\s+|lit\.?\s*\w+\s+|Satz\s*\d+\s+)+/i, '').trim();
|
|
50
|
+
/*
|
|
51
|
+
* Abbreviation-first shape — the abbreviation precedes the §/Artikel marker ("DSG §1",
|
|
52
|
+
* "DSGVO Art32"), optionally with a trailing sub-provision that is discarded ("DSG §22 Abs1",
|
|
53
|
+
* "DSGVO Art6 Abs1 litc", "DSGVO Art4 Z2"). Anchored on the marker, not on whitespace, so a
|
|
54
|
+
* multi-token abbreviation stays whole ("B-VG", "TKG 2021"); the leading letter (and, for the
|
|
55
|
+
* §-branch, the §-free abbreviation body) keeps a section-first string out of this branch.
|
|
56
|
+
* These run BEFORE the section-first branches — whose un-anchored regexes would otherwise read
|
|
57
|
+
* "§22 Abs1" as "§ <section> <abbreviation>" and mis-parse the abbreviation to "Abs1" — and
|
|
58
|
+
* BEFORE the BARE_ABBREVIATION fallback, which would otherwise swallow "DSGVO Art32" as a
|
|
59
|
+
* literal abbreviation and resolve nothing.
|
|
60
|
+
*/
|
|
61
|
+
const abbrevParagraph = /^([A-Za-zÄÖÜäöüß][^§]*?)\s+§+\s*(\d+\s?[a-zA-Z]?)(?:\s+\S.*)?$/.exec(s);
|
|
62
|
+
if (abbrevParagraph) {
|
|
63
|
+
const [, abbreviation, section] = abbrevParagraph;
|
|
64
|
+
if (abbreviation !== undefined && section !== undefined) {
|
|
65
|
+
return {
|
|
66
|
+
abbreviation: abbreviation.trim(),
|
|
67
|
+
section: section.replace(/\s+/g, ''),
|
|
68
|
+
sectionType: 'Paragraph',
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const abbrevArtikel = /^([A-Za-zÄÖÜäöüß].*?)\s+art(?:ikel)?\.?\s*(\d+\s?[a-zA-Z]?)(?:\s+\S.*)?$/i.exec(s);
|
|
73
|
+
if (abbrevArtikel) {
|
|
74
|
+
const [, abbreviation, section] = abbrevArtikel;
|
|
75
|
+
if (abbreviation !== undefined && section !== undefined) {
|
|
76
|
+
return {
|
|
77
|
+
abbreviation: abbreviation.trim(),
|
|
78
|
+
section: section.replace(/\s+/g, ''),
|
|
79
|
+
sectionType: 'Artikel',
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const paragraph = /§+\s*(\d+\s?[a-zA-Z]?)\s+(\S.*)$/.exec(s);
|
|
84
|
+
if (paragraph) {
|
|
85
|
+
const [, section, rest] = paragraph;
|
|
86
|
+
if (section !== undefined && rest !== undefined) {
|
|
87
|
+
return {
|
|
88
|
+
abbreviation: stripSubRefs(rest),
|
|
89
|
+
section: section.replace(/\s+/g, ''),
|
|
90
|
+
sectionType: 'Paragraph',
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const artikel = /\bart(?:ikel)?\.?\s*(\d+\s?[a-zA-Z]?)\s+(\S.*)$/i.exec(s);
|
|
95
|
+
if (artikel) {
|
|
96
|
+
const [, section, rest] = artikel;
|
|
97
|
+
if (section !== undefined && rest !== undefined) {
|
|
98
|
+
return {
|
|
99
|
+
abbreviation: stripSubRefs(rest),
|
|
100
|
+
section: section.replace(/\s+/g, ''),
|
|
101
|
+
sectionType: 'Artikel',
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (BARE_ABBREVIATION.test(s) && !s.includes('/'))
|
|
106
|
+
return { abbreviation: s };
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Parse a VfSlg/VwSlg collection citation. The Sammlungsnummer is the dotted numeric core:
|
|
111
|
+
* the trailing `/year` and any part letter ("A"/"F" in VwSlg) are dropped, the thousands dot
|
|
112
|
+
* kept (the canonical cite form).
|
|
113
|
+
*/
|
|
114
|
+
function parseCollection(input) {
|
|
115
|
+
const m = /^\s*(vf|vw)slg\b\s*(.*)$/i.exec(input);
|
|
116
|
+
if (!m)
|
|
117
|
+
return null;
|
|
118
|
+
const [, prefix, rest] = m;
|
|
119
|
+
if (prefix === undefined || rest === undefined)
|
|
120
|
+
return null;
|
|
121
|
+
const numMatch = /\d[\d.]*\d|\d/.exec(rest);
|
|
122
|
+
if (!numMatch)
|
|
123
|
+
return null;
|
|
124
|
+
const isVfgh = prefix.toLowerCase() === 'vf';
|
|
125
|
+
return {
|
|
126
|
+
court: isVfgh ? 'vfgh' : 'vwgh',
|
|
127
|
+
label: isVfgh ? 'VfSlg' : 'VwSlg',
|
|
128
|
+
number: numMatch[0],
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Parse a gazette citation and route it to the owning application: federal BGBl. by year
|
|
133
|
+
* (BgblAuth 2004+, BgblPdf 1945–2003, BgblAlt before 1945), imperial RGBl./StGBl./GBlÖ to
|
|
134
|
+
* BgblAlt, and LGBl. to the state Landesgesetzblatt (LgblAuth) when a state hint is present.
|
|
135
|
+
*/
|
|
136
|
+
function parseGazette(input, stateHint) {
|
|
137
|
+
const s = input.trim();
|
|
138
|
+
const isState = /\bLGBl\b/i.test(s);
|
|
139
|
+
const isImperial = /\bRGBl\b|\bStGBl\b/i.test(s) || /GBl[ÖO]/i.test(s);
|
|
140
|
+
const isFederal = /\bBGBl\b/i.test(s);
|
|
141
|
+
if (!isState && !isImperial && !isFederal)
|
|
142
|
+
return null;
|
|
143
|
+
const numYear = /(\d+)\s*\/\s*(\d{4})/.exec(s);
|
|
144
|
+
if (!numYear)
|
|
145
|
+
return null;
|
|
146
|
+
const [, numberPart, yearPart] = numYear;
|
|
147
|
+
if (numberPart === undefined || yearPart === undefined)
|
|
148
|
+
return null;
|
|
149
|
+
const number = `${numberPart}/${yearPart}`;
|
|
150
|
+
const year = Number.parseInt(yearPart, 10);
|
|
151
|
+
let part;
|
|
152
|
+
const partMatch = /\bBGBl\.?\s*(I{1,3})\b/i.exec(s);
|
|
153
|
+
if (partMatch?.[1] !== undefined) {
|
|
154
|
+
const romanLength = partMatch[1].length;
|
|
155
|
+
part = romanLength === 1 ? 'part1' : romanLength === 2 ? 'part2' : 'part3';
|
|
156
|
+
}
|
|
157
|
+
if (isState) {
|
|
158
|
+
return { application: 'LgblAuth', needsState: stateHint === undefined, number };
|
|
159
|
+
}
|
|
160
|
+
if (isImperial) {
|
|
161
|
+
return { application: 'BgblAlt', needsState: false, number };
|
|
162
|
+
}
|
|
163
|
+
const application = year >= 2004 ? 'BgblAuth' : year >= 1945 ? 'BgblPdf' : 'BgblAlt';
|
|
164
|
+
// Parts exist only from 1997 and never on the metadata-only imperial tier.
|
|
165
|
+
return {
|
|
166
|
+
application,
|
|
167
|
+
needsState: false,
|
|
168
|
+
number,
|
|
169
|
+
...(part !== undefined && application !== 'BgblAlt' && { part }),
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Match a Geschäftszahl to its owning court(s) by format. Returns up to two candidate courts
|
|
174
|
+
* (probed in order); the shared DSB/Dok "YYYY-0.NNN.NNN" shape yields both. An empty result
|
|
175
|
+
* means the format wasn't recognized — the caller falls back to `found: false`.
|
|
176
|
+
*/
|
|
177
|
+
function matchCaseCourts(input) {
|
|
178
|
+
const s = input.trim();
|
|
179
|
+
const patterns = [
|
|
180
|
+
[/\bUPTS\b/i, ['upts']],
|
|
181
|
+
[/^LVwG-/i, ['lvwg']],
|
|
182
|
+
[/^B-GBK\b/i, ['gbk']],
|
|
183
|
+
[/\bPVA[BK]\b/i, ['pvak']],
|
|
184
|
+
[/^VKS-/i, ['verg']],
|
|
185
|
+
[/^[WLG]\d{2,4}\b/i, ['bvwg']],
|
|
186
|
+
[/^R[aou]\s+\d{4}\//i, ['vwgh']],
|
|
187
|
+
[/^\d{4}-\d\.\d{3}\.\d{3}\b/, ['dsk', 'dok']],
|
|
188
|
+
[/^[A-Za-z]{1,3}\s+\d+\/\d{2,4}\b/, ['vfgh']],
|
|
189
|
+
[/^\d{1,2}\s?[A-Za-zÄÖÜ]{1,4}\s?\d+\/\d{2}[a-z]?\b/, ['justiz']],
|
|
190
|
+
];
|
|
191
|
+
for (const [re, courts] of patterns) {
|
|
192
|
+
if (re.test(s))
|
|
193
|
+
return [...courts];
|
|
194
|
+
}
|
|
195
|
+
return [];
|
|
196
|
+
}
|
|
197
|
+
/** Classify a citation by shape (auto mode). Returns `null` when it doesn't classify. */
|
|
198
|
+
function classify(input, courtHint) {
|
|
199
|
+
if (parseCollection(input))
|
|
200
|
+
return 'collection_number';
|
|
201
|
+
if (GAZETTE_PREFIX.test(input))
|
|
202
|
+
return 'gazette';
|
|
203
|
+
if (NORM_EXPLICIT.test(input))
|
|
204
|
+
return 'norm';
|
|
205
|
+
if (courtHint !== undefined || matchCaseCourts(input).length > 0)
|
|
206
|
+
return 'case_number';
|
|
207
|
+
if (BARE_ABBREVIATION.test(input.trim()) && !input.includes('/'))
|
|
208
|
+
return 'norm';
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
/* ------------------------------------------------------------------------------------ */
|
|
212
|
+
/* found: false guidance (verbatim per parse outcome — design.md) */
|
|
213
|
+
/* ------------------------------------------------------------------------------------ */
|
|
214
|
+
function unknownGuidance(input) {
|
|
215
|
+
return `Could not classify '${input}'. Expected forms — norm: '§ 6 DSG' / 'Art 10 B-VG'; gazette: 'BGBl. I Nr. 165/1999' (also pre-2004 and RGBl/StGBl forms, and LGBl with a state hint); case number: 'Ra 2019/22/0184'; collection: 'VfSlg 19.632/2012'. Formats: ris_list_reference topic citation_formats. Or set kind explicitly; for keyword search use ris_search_legislation / ris_search_case_law.`;
|
|
216
|
+
}
|
|
217
|
+
function normGuidance(abbreviation, section, date) {
|
|
218
|
+
const head = section !== undefined
|
|
219
|
+
? `No document for ${abbreviation} § ${section} in force on ${date}.`
|
|
220
|
+
: `No document for ${abbreviation} in force on ${date}.`;
|
|
221
|
+
const retry = section !== undefined
|
|
222
|
+
? `retry ris_search_legislation with title: '${abbreviation}', section_from/to: '${section}', include_all_versions: true.`
|
|
223
|
+
: `retry ris_search_legislation with title: '${abbreviation}', include_all_versions: true.`;
|
|
224
|
+
return `${head} If the provision existed at another time, ${retry} If the abbreviation is uncertain, search ris_search_legislation title: '${abbreviation}*'. State law resolves only with an explicit state hint.`;
|
|
225
|
+
}
|
|
226
|
+
function gazetteGuidance(number, tier) {
|
|
227
|
+
return `No gazette entry for ${number} in ${tier}. Verify part (I/II/III — none before 1997) and year; browse the surrounding range with ris_search_gazette published_from/published_to to find the actual number. State gazettes need the state hint.`;
|
|
228
|
+
}
|
|
229
|
+
function caseGuidance(gz, candidates) {
|
|
230
|
+
const probed = candidates.length > 0 ? candidates.map(courtApplication).join(', ') : 'no matching court';
|
|
231
|
+
return `No decision for '${gz}' in ${probed}. Pass court explicitly if known — Geschäftszahl format examples per court: ris_list_reference topic courts. Note Justiz carries selected decisions only. Keyword fallback: ris_search_case_law with query.`;
|
|
232
|
+
}
|
|
233
|
+
function collectionGuidance(label, number, court) {
|
|
234
|
+
return `No decision for ${label} ${number}. Verify the number against the cite; fallback: ris_search_case_law court: ${court} with query.`;
|
|
235
|
+
}
|
|
236
|
+
/* ------------------------------------------------------------------------------------ */
|
|
237
|
+
/* Output shape */
|
|
238
|
+
/* ------------------------------------------------------------------------------------ */
|
|
239
|
+
/**
|
|
240
|
+
* Flat result. `record` is a passthrough object (the linter's escape hatch): the exact
|
|
241
|
+
* normalized shape the corresponding search tool returns flows through to structuredContent
|
|
242
|
+
* via the reused `toRecord` mapper, without re-declaring each field here.
|
|
243
|
+
*/
|
|
244
|
+
const LookupResultSchema = z.object({
|
|
245
|
+
found: z
|
|
246
|
+
.boolean()
|
|
247
|
+
.describe('True when the citation resolved to a single best-matching document.'),
|
|
248
|
+
kind: z
|
|
249
|
+
.enum(['unknown', 'norm', 'gazette', 'case_number', 'collection_number'])
|
|
250
|
+
.describe('What the citation parsed as — "unknown" when it did not classify into any route.'),
|
|
251
|
+
resolution_note: z
|
|
252
|
+
.string()
|
|
253
|
+
.optional()
|
|
254
|
+
.describe('Which application and filter resolved the citation. Present when found is true.'),
|
|
255
|
+
record: z
|
|
256
|
+
.object({})
|
|
257
|
+
.passthrough()
|
|
258
|
+
.optional()
|
|
259
|
+
.describe('The resolved document, in the same normalized shape the corresponding search tool returns — ris_search_legislation for a norm, ris_search_case_law for a case or collection number, ris_search_gazette for a gazette. Present when found is true.'),
|
|
260
|
+
alternatives_count: z
|
|
261
|
+
.number()
|
|
262
|
+
.optional()
|
|
263
|
+
.describe('Documents that also matched beyond the one returned — present only when more than one matched. List them all with the search tool named in resolution_note.'),
|
|
264
|
+
guidance: z
|
|
265
|
+
.string()
|
|
266
|
+
.optional()
|
|
267
|
+
.describe('Next-step guidance naming a concrete tool. Present when found is false.'),
|
|
268
|
+
});
|
|
269
|
+
/** Render any resolved record generically — every field of every record shape appears. */
|
|
270
|
+
function renderRecord(record) {
|
|
271
|
+
const lines = [];
|
|
272
|
+
for (const [key, value] of Object.entries(record)) {
|
|
273
|
+
if (value === undefined || value === null)
|
|
274
|
+
continue;
|
|
275
|
+
if (Array.isArray(value)) {
|
|
276
|
+
if (value.length > 0)
|
|
277
|
+
lines.push(`**${key}**: ${value.join(', ')}`);
|
|
278
|
+
}
|
|
279
|
+
else if (typeof value === 'object') {
|
|
280
|
+
const parts = Object.entries(value)
|
|
281
|
+
.filter((entry) => typeof entry[1] === 'string')
|
|
282
|
+
.map(([subKey, subValue]) => `${subKey} ${subValue}`);
|
|
283
|
+
if (parts.length > 0)
|
|
284
|
+
lines.push(`**${key}**: ${parts.join(' · ')}`);
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
lines.push(`**${key}**: ${String(value)}`);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
return lines.join('\n');
|
|
291
|
+
}
|
|
292
|
+
/** Today's date in Austria (Europe/Vienna), ISO `YYYY-MM-DD`. */
|
|
293
|
+
function todayInAustria() {
|
|
294
|
+
return new Intl.DateTimeFormat('en-CA', {
|
|
295
|
+
day: '2-digit',
|
|
296
|
+
month: '2-digit',
|
|
297
|
+
timeZone: 'Europe/Vienna',
|
|
298
|
+
year: 'numeric',
|
|
299
|
+
}).format(new Date());
|
|
300
|
+
}
|
|
301
|
+
/** Map an empty string from a form-based client to `undefined`. */
|
|
302
|
+
function meaningful(value) {
|
|
303
|
+
return value !== undefined && value !== '' ? value : undefined;
|
|
304
|
+
}
|
|
305
|
+
export const risLookupCitation = tool('ris_lookup_citation', {
|
|
306
|
+
title: 'Resolve Austrian Legal Citation',
|
|
307
|
+
description: 'Resolve a single Austrian legal citation to its canonical RIS document deterministically — no keyword search. Four routes are auto-detected from the citation shape (or forced with kind): a norm citation — section-first ("§ 6 DSG", "Art 10 B-VG"), abbreviation-first ("DSG §1", "DSGVO Art32", the shape ris_search_case_law returns in norms_cited), or a bare abbreviation like "ABGB" — resolves through consolidated federal law, or a Bundesland with a state hint, as in force today or on in_force_as_of; a gazette citation ("BGBl. I Nr. 165/1999", pre-2004 "BGBl. Nr. 194/1961", imperial "RGBl. Nr. 189/1902", or "LGBl. Nr. 61/2026" with a state hint) routes to the right federal era tier by year or to a state Landesgesetzblatt; a case number ("Ra 2019/22/0184", "G 287/2022", "6Ob56/25k", "2025-0.934.677", "W256 …") is matched to its court — pass court to skip detection, and ambiguous formats probe up to two courts; a collection number ("VfSlg 19.632/2012", "VwSlg 18.000 A/2010") resolves through the VfGH/VwGH collection. Returns the single best-matching document in the same shape as the corresponding search tool, with alternatives_count when more than one matched. A citation that cannot be classified or resolved returns found: false with next-step guidance — it never throws for a miss; only an upstream RIS outage is an error. For keyword rather than citation lookup, use ris_search_legislation or ris_search_case_law.',
|
|
308
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
309
|
+
input: z.object({
|
|
310
|
+
citation: z
|
|
311
|
+
.string()
|
|
312
|
+
.describe('The legal citation to resolve, e.g. "§ 6 DSG" or "DSG §1", "Art 10 B-VG", "BGBl. I Nr. 165/1999", "Ra 2019/22/0184", or "VfSlg 19.632/2012".'),
|
|
313
|
+
kind: z
|
|
314
|
+
.enum(['auto', 'norm', 'gazette', 'case_number', 'collection_number'])
|
|
315
|
+
.default('auto')
|
|
316
|
+
.describe('Force a route, or auto (default) to classify by shape. Set explicitly when the citation shape is ambiguous.'),
|
|
317
|
+
court: z
|
|
318
|
+
.enum(COURT_CODES)
|
|
319
|
+
.optional()
|
|
320
|
+
.describe('Court hint for a case number — short-circuits court detection to this court. Codes: ris_list_reference topic courts.'),
|
|
321
|
+
state: z
|
|
322
|
+
.enum(STATE_CODES)
|
|
323
|
+
.optional()
|
|
324
|
+
.describe('Bundesland hint — routes a norm to that state’s consolidated law (LrKons) and an LGBl. gazette to that state’s Landesgesetzblatt (LgblAuth).'),
|
|
325
|
+
in_force_as_of: isoDateString
|
|
326
|
+
.optional()
|
|
327
|
+
.describe('For a norm, resolve the version in force on this date (YYYY-MM-DD). Defaults to today in Austria.'),
|
|
328
|
+
}),
|
|
329
|
+
output: LookupResultSchema,
|
|
330
|
+
errors: [
|
|
331
|
+
{
|
|
332
|
+
reason: 'upstream_error',
|
|
333
|
+
code: JsonRpcErrorCode.ServiceUnavailable,
|
|
334
|
+
when: 'A routed RIS search was unreachable, returned a server error, or served an HTML error page. An unparseable or unresolvable citation is NOT this error — it returns found: false.',
|
|
335
|
+
retryable: true,
|
|
336
|
+
recovery: 'RIS is temporarily unavailable — retry the same citation after a short delay.',
|
|
337
|
+
},
|
|
338
|
+
],
|
|
339
|
+
async handler(input, ctx) {
|
|
340
|
+
const citation = input.citation.trim();
|
|
341
|
+
const courtHint = input.court;
|
|
342
|
+
const stateHint = input.state;
|
|
343
|
+
const asOf = meaningful(input.in_force_as_of) ?? todayInAustria();
|
|
344
|
+
/**
|
|
345
|
+
* Run a routed search: map an upstream failure to this tool's `upstream_error`, and a
|
|
346
|
+
* failed deterministic filter (InvalidParams / ValidationError) to a not-resolved `null`.
|
|
347
|
+
*/
|
|
348
|
+
const runSearch = async (run) => {
|
|
349
|
+
try {
|
|
350
|
+
return await run();
|
|
351
|
+
}
|
|
352
|
+
catch (err) {
|
|
353
|
+
if (err instanceof McpError && err.code === JsonRpcErrorCode.ServiceUnavailable) {
|
|
354
|
+
throw ctx.fail('upstream_error', err.message, { ...ctx.recoveryFor('upstream_error') });
|
|
355
|
+
}
|
|
356
|
+
if (err instanceof McpError &&
|
|
357
|
+
(err.code === JsonRpcErrorCode.InvalidParams ||
|
|
358
|
+
err.code === JsonRpcErrorCode.ValidationError)) {
|
|
359
|
+
return null;
|
|
360
|
+
}
|
|
361
|
+
throw err;
|
|
362
|
+
}
|
|
363
|
+
};
|
|
364
|
+
const route = input.kind === 'auto' ? classify(citation, courtHint) : input.kind;
|
|
365
|
+
if (route === null) {
|
|
366
|
+
return { found: false, kind: 'unknown', guidance: unknownGuidance(citation) };
|
|
367
|
+
}
|
|
368
|
+
if (route === 'collection_number') {
|
|
369
|
+
const parsed = parseCollection(citation);
|
|
370
|
+
if (!parsed) {
|
|
371
|
+
return {
|
|
372
|
+
found: false,
|
|
373
|
+
kind: 'collection_number',
|
|
374
|
+
guidance: `Could not read a collection number from '${citation}'. Expected 'VfSlg 19.632/2012' or 'VwSlg 18.000 A/2010'. Fallback: ris_search_case_law court: vfgh | vwgh with query.`,
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
const result = await runSearch(() => getRisService().searchCaseLaw({ collectionNumber: parsed.number, court: parsed.court }, ctx));
|
|
378
|
+
const hit = result?.hits[0];
|
|
379
|
+
if (!result || hit === undefined) {
|
|
380
|
+
return {
|
|
381
|
+
found: false,
|
|
382
|
+
kind: 'collection_number',
|
|
383
|
+
guidance: collectionGuidance(parsed.label, parsed.number, parsed.court),
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
const application = courtApplication(parsed.court);
|
|
387
|
+
const alternatives = result.total > 1 ? result.total - 1 : undefined;
|
|
388
|
+
ctx.log.info('Citation resolved', { kind: route, application, total: result.total });
|
|
389
|
+
return {
|
|
390
|
+
found: true,
|
|
391
|
+
kind: 'collection_number',
|
|
392
|
+
record: toCaseLawRecord(hit, application),
|
|
393
|
+
resolution_note: `Resolved via ris_search_case_law (${application}) — Sammlungsnummer "${parsed.number}".${alternatives !== undefined ? ` ${alternatives} more matched — list them with ris_search_case_law court: ${parsed.court}.` : ''}`,
|
|
394
|
+
...(alternatives !== undefined && { alternatives_count: alternatives }),
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
if (route === 'norm') {
|
|
398
|
+
const parsed = parseNorm(citation);
|
|
399
|
+
if (!parsed) {
|
|
400
|
+
return { found: false, kind: 'norm', guidance: normGuidance(citation, undefined, asOf) };
|
|
401
|
+
}
|
|
402
|
+
const application = stateHint !== undefined ? 'LrKons' : 'BrKons';
|
|
403
|
+
const params = {
|
|
404
|
+
application,
|
|
405
|
+
inForceAsOf: asOf,
|
|
406
|
+
title: parsed.abbreviation,
|
|
407
|
+
...(parsed.section !== undefined && {
|
|
408
|
+
sectionFrom: parsed.section,
|
|
409
|
+
sectionTo: parsed.section,
|
|
410
|
+
sectionType: parsed.sectionType,
|
|
411
|
+
}),
|
|
412
|
+
...(stateHint !== undefined && { state: stateHint }),
|
|
413
|
+
};
|
|
414
|
+
const result = await runSearch(() => getRisService().searchLegislation(params, ctx));
|
|
415
|
+
const hit = result?.hits[0];
|
|
416
|
+
if (!result || hit === undefined) {
|
|
417
|
+
return {
|
|
418
|
+
found: false,
|
|
419
|
+
kind: 'norm',
|
|
420
|
+
guidance: normGuidance(parsed.abbreviation, parsed.section, asOf),
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
const alternatives = result.total > 1 ? result.total - 1 : undefined;
|
|
424
|
+
const sectionPhrase = parsed.section !== undefined
|
|
425
|
+
? `, ${parsed.sectionType === 'Artikel' ? 'Art' : '§'} ${parsed.section}`
|
|
426
|
+
: '';
|
|
427
|
+
ctx.log.info('Citation resolved', { kind: route, application, total: result.total });
|
|
428
|
+
return {
|
|
429
|
+
found: true,
|
|
430
|
+
kind: 'norm',
|
|
431
|
+
record: toLegislationRecord(hit, application),
|
|
432
|
+
resolution_note: `Resolved via ris_search_legislation (${application}) — title "${parsed.abbreviation}"${sectionPhrase}, in force ${asOf}.${alternatives !== undefined ? ` ${alternatives} more matched — list them with ris_search_legislation.` : ''}`,
|
|
433
|
+
...(alternatives !== undefined && { alternatives_count: alternatives }),
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
if (route === 'gazette') {
|
|
437
|
+
const parsed = parseGazette(citation, stateHint);
|
|
438
|
+
if (!parsed) {
|
|
439
|
+
return {
|
|
440
|
+
found: false,
|
|
441
|
+
kind: 'gazette',
|
|
442
|
+
guidance: gazetteGuidance(citation, 'the requested gazette tier'),
|
|
443
|
+
};
|
|
444
|
+
}
|
|
445
|
+
if (parsed.needsState) {
|
|
446
|
+
return {
|
|
447
|
+
found: false,
|
|
448
|
+
kind: 'gazette',
|
|
449
|
+
guidance: gazetteGuidance(parsed.number, 'a state Landesgesetzblatt'),
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
const params = {
|
|
453
|
+
application: parsed.application,
|
|
454
|
+
number: parsed.number,
|
|
455
|
+
...(parsed.part !== undefined && { part: parsed.part }),
|
|
456
|
+
...(stateHint !== undefined && parsed.application === 'LgblAuth' && { state: stateHint }),
|
|
457
|
+
};
|
|
458
|
+
const result = await runSearch(() => getRisService().searchGazette(params, ctx));
|
|
459
|
+
const hit = result?.hits[0];
|
|
460
|
+
if (!result || hit === undefined) {
|
|
461
|
+
return {
|
|
462
|
+
found: false,
|
|
463
|
+
kind: 'gazette',
|
|
464
|
+
guidance: gazetteGuidance(parsed.number, parsed.application),
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
const alternatives = result.total > 1 ? result.total - 1 : undefined;
|
|
468
|
+
const partPhrase = parsed.part !== undefined ? `, part ${parsed.part.slice(-1)}` : '';
|
|
469
|
+
ctx.log.info('Citation resolved', {
|
|
470
|
+
application: parsed.application,
|
|
471
|
+
kind: route,
|
|
472
|
+
total: result.total,
|
|
473
|
+
});
|
|
474
|
+
return {
|
|
475
|
+
found: true,
|
|
476
|
+
kind: 'gazette',
|
|
477
|
+
record: toGazetteRecord(hit, parsed.application),
|
|
478
|
+
resolution_note: `Resolved via ris_search_gazette (${parsed.application}) — number "${parsed.number}"${partPhrase}.${alternatives !== undefined ? ` ${alternatives} more matched — list them with ris_search_gazette.` : ''}`,
|
|
479
|
+
...(alternatives !== undefined && { alternatives_count: alternatives }),
|
|
480
|
+
};
|
|
481
|
+
}
|
|
482
|
+
// route === 'case_number'
|
|
483
|
+
const candidates = courtHint !== undefined ? [courtHint] : matchCaseCourts(citation);
|
|
484
|
+
if (candidates.length === 0) {
|
|
485
|
+
return { found: false, kind: 'case_number', guidance: caseGuidance(citation, candidates) };
|
|
486
|
+
}
|
|
487
|
+
let resolved;
|
|
488
|
+
for (const court of candidates) {
|
|
489
|
+
const result = await runSearch(() => getRisService().searchCaseLaw({ caseNumber: citation, court }, ctx));
|
|
490
|
+
const hit = result?.hits[0];
|
|
491
|
+
if (result && hit !== undefined) {
|
|
492
|
+
resolved = { court, hit, total: result.total };
|
|
493
|
+
break;
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
if (resolved === undefined) {
|
|
497
|
+
return { found: false, kind: 'case_number', guidance: caseGuidance(citation, candidates) };
|
|
498
|
+
}
|
|
499
|
+
const application = courtApplication(resolved.court);
|
|
500
|
+
const alternatives = resolved.total > 1 ? resolved.total - 1 : undefined;
|
|
501
|
+
ctx.log.info('Citation resolved', { application, kind: route, total: resolved.total });
|
|
502
|
+
return {
|
|
503
|
+
found: true,
|
|
504
|
+
kind: 'case_number',
|
|
505
|
+
record: toCaseLawRecord(resolved.hit, application),
|
|
506
|
+
resolution_note: `Resolved via ris_search_case_law (${application}) — Geschäftszahl "${citation}".${alternatives !== undefined ? ` ${alternatives} more matched — list them with ris_search_case_law court: ${resolved.court}.` : ''}`,
|
|
507
|
+
...(alternatives !== undefined && { alternatives_count: alternatives }),
|
|
508
|
+
};
|
|
509
|
+
},
|
|
510
|
+
// format() populates content[] — the markdown twin of structuredContent. Renders every
|
|
511
|
+
// output field: found/kind/resolution_note, the resolved record, alternatives_count, and
|
|
512
|
+
// the found: false guidance.
|
|
513
|
+
format: (result) => {
|
|
514
|
+
const lines = [`**found**: ${result.found}`, `**kind**: ${result.kind}`];
|
|
515
|
+
if (result.resolution_note !== undefined) {
|
|
516
|
+
lines.push(`**resolution_note**: ${result.resolution_note}`);
|
|
517
|
+
}
|
|
518
|
+
if (result.record !== undefined) {
|
|
519
|
+
lines.push('', '### Resolved document', renderRecord(result.record));
|
|
520
|
+
}
|
|
521
|
+
if (result.alternatives_count !== undefined) {
|
|
522
|
+
lines.push('', `**alternatives_count**: ${result.alternatives_count}`);
|
|
523
|
+
}
|
|
524
|
+
if (result.guidance !== undefined)
|
|
525
|
+
lines.push('', result.guidance);
|
|
526
|
+
return [{ type: 'text', text: lines.join('\n') }];
|
|
527
|
+
},
|
|
528
|
+
});
|
|
529
|
+
//# sourceMappingURL=ris-lookup-citation.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ris-lookup-citation.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/ris-lookup-citation.tool.ts"],"names":[],"mappings":"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"}
|