@cyanheads/zenodo-mcp-server 0.1.1 → 0.1.3

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.
Files changed (62) hide show
  1. package/AGENTS.md +30 -22
  2. package/CLAUDE.md +30 -22
  3. package/Dockerfile +86 -40
  4. package/README.md +31 -4
  5. package/changelog/0.1.x/0.1.2.md +33 -0
  6. package/changelog/0.1.x/0.1.3.md +35 -0
  7. package/dist/index.js +1 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/mcp-server/tools/definitions/get-record.tool.d.ts +106 -2
  10. package/dist/mcp-server/tools/definitions/get-record.tool.d.ts.map +1 -1
  11. package/dist/mcp-server/tools/definitions/get-record.tool.js +453 -107
  12. package/dist/mcp-server/tools/definitions/get-record.tool.js.map +1 -1
  13. package/dist/mcp-server/tools/definitions/index.d.ts +283 -180
  14. package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
  15. package/dist/mcp-server/tools/definitions/list-files.tool.d.ts.map +1 -1
  16. package/dist/mcp-server/tools/definitions/list-files.tool.js +28 -22
  17. package/dist/mcp-server/tools/definitions/list-files.tool.js.map +1 -1
  18. package/dist/mcp-server/tools/definitions/list-versions.tool.d.ts +1 -1
  19. package/dist/mcp-server/tools/definitions/list-versions.tool.d.ts.map +1 -1
  20. package/dist/mcp-server/tools/definitions/list-versions.tool.js +30 -21
  21. package/dist/mcp-server/tools/definitions/list-versions.tool.js.map +1 -1
  22. package/dist/mcp-server/tools/definitions/lookup-vocabulary.tool.d.ts +2 -1
  23. package/dist/mcp-server/tools/definitions/lookup-vocabulary.tool.d.ts.map +1 -1
  24. package/dist/mcp-server/tools/definitions/lookup-vocabulary.tool.js +41 -24
  25. package/dist/mcp-server/tools/definitions/lookup-vocabulary.tool.js.map +1 -1
  26. package/dist/mcp-server/tools/definitions/read-file.tool.d.ts.map +1 -1
  27. package/dist/mcp-server/tools/definitions/read-file.tool.js +29 -27
  28. package/dist/mcp-server/tools/definitions/read-file.tool.js.map +1 -1
  29. package/dist/mcp-server/tools/definitions/search-records.tool.d.ts +3 -3
  30. package/dist/mcp-server/tools/definitions/search-records.tool.d.ts.map +1 -1
  31. package/dist/mcp-server/tools/definitions/search-records.tool.js +145 -35
  32. package/dist/mcp-server/tools/definitions/search-records.tool.js.map +1 -1
  33. package/dist/mcp-server/tools/paging.d.ts +42 -0
  34. package/dist/mcp-server/tools/paging.d.ts.map +1 -0
  35. package/dist/mcp-server/tools/paging.js +44 -0
  36. package/dist/mcp-server/tools/paging.js.map +1 -0
  37. package/dist/mcp-server/tools/record-miss.d.ts +5 -1
  38. package/dist/mcp-server/tools/record-miss.d.ts.map +1 -1
  39. package/dist/mcp-server/tools/record-miss.js +6 -2
  40. package/dist/mcp-server/tools/record-miss.js.map +1 -1
  41. package/dist/services/zenodo/html-to-text.d.ts +19 -8
  42. package/dist/services/zenodo/html-to-text.d.ts.map +1 -1
  43. package/dist/services/zenodo/html-to-text.js +175 -48
  44. package/dist/services/zenodo/html-to-text.js.map +1 -1
  45. package/dist/services/zenodo/http.d.ts.map +1 -1
  46. package/dist/services/zenodo/http.js +21 -32
  47. package/dist/services/zenodo/http.js.map +1 -1
  48. package/dist/services/zenodo/identifiers.js +1 -1
  49. package/dist/services/zenodo/identifiers.js.map +1 -1
  50. package/dist/services/zenodo/normalize.d.ts.map +1 -1
  51. package/dist/services/zenodo/normalize.js +5 -2
  52. package/dist/services/zenodo/normalize.js.map +1 -1
  53. package/dist/services/zenodo/query-builder.d.ts +84 -8
  54. package/dist/services/zenodo/query-builder.d.ts.map +1 -1
  55. package/dist/services/zenodo/query-builder.js +484 -21
  56. package/dist/services/zenodo/query-builder.js.map +1 -1
  57. package/dist/services/zenodo/text-preview.d.ts +1 -1
  58. package/dist/services/zenodo/text-preview.d.ts.map +1 -1
  59. package/dist/services/zenodo/text-preview.js +38 -38
  60. package/dist/services/zenodo/text-preview.js.map +1 -1
  61. package/package.json +14 -12
  62. package/server.json +16 -24
@@ -1,22 +1,33 @@
1
1
  /**
2
2
  * @fileoverview Deterministic HTML → plain-text conversion for depositor-supplied
3
3
  * record descriptions. The one documented transformation of upstream text: drop
4
- * script/style, turn block ends and line breaks into newlines, inline link targets,
5
- * strip tags, decode entities, normalize whitespace.
4
+ * script/style, turn block ends and line breaks into newlines, put each table row on
5
+ * one line (a one-cell row keeps its line breaks), inline link targets, strip tags,
6
+ * decode entities, normalize whitespace.
6
7
  * @module services/zenodo/html-to-text
7
8
  */
8
9
  /**
9
- * Decodes numeric (decimal and hex) entities, the fixed named table (any case), and
10
- * the Latin-1 named entities (exact case). Unknown names stay as written.
10
+ * Every named entity the converter decodes, keyed by exact name: the 252 HTML 4.01
11
+ * entities plus `apos`. `nbsp` decodes to a plain space (the later entry wins).
12
+ */
13
+ export declare const NAMED_ENTITIES: ReadonlyMap<string, string>;
14
+ /**
15
+ * Decodes numeric (decimal and hex) references and `NAMED_ENTITIES` in one
16
+ * left-to-right pass, so decoded text is never read again. Names match by exact case,
17
+ * except the `ANY_CASE` names; every other name stays as written.
11
18
  */
12
19
  export declare function decodeEntities(text: string): string;
13
20
  /**
14
21
  * Converts an HTML fragment to plain text:
15
22
  * 1. drops `<script>`/`<style>` elements with their content (and comments);
16
- * 2. `<br>` → newline, closing block tags → newline, `<li>` → `- `;
17
- * 3. `<a href="X">T</a>` → `T (X)` when X is http(s) and differs from T;
18
- * 4. strips remaining tags; 5. decodes entities;
19
- * 6. normalizes CRLF/CR to LF, trims trailing spaces per line, collapses 3+
23
+ * 2. `<br>` → newline, together with a line break directly after it; closing block
24
+ * tags → newline; `<li>` → `- `;
25
+ * 3. each table row → one line, cells joined by ` | `, whitespace and block breaks
26
+ * inside a cell collapsed to single spaces; a row with one cell keeps the cell's
27
+ * line breaks, each line collapsed and trimmed the same way;
28
+ * 4. `<a href="X">T</a>` → `T (X)` when X is http(s) and differs from T;
29
+ * 5. strips remaining tags; 6. decodes entities (numeric and the HTML 4 named set);
30
+ * 7. normalizes CRLF/CR to LF, trims trailing spaces per line, collapses 3+
20
31
  * newlines to 2, and trims the result.
21
32
  */
22
33
  export declare function htmlToText(html: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"html-to-text.d.ts","sourceRoot":"","sources":["../../../src/services/zenodo/html-to-text.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA4CH;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWnD;AAgED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmB/C"}
1
+ {"version":3,"file":"html-to-text.d.ts","sourceRoot":"","sources":["../../../src/services/zenodo/html-to-text.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAOrD,CAAC;AAgBH;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASnD;AAiMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAY/C"}
@@ -1,50 +1,48 @@
1
1
  /**
2
2
  * @fileoverview Deterministic HTML → plain-text conversion for depositor-supplied
3
3
  * record descriptions. The one documented transformation of upstream text: drop
4
- * script/style, turn block ends and line breaks into newlines, inline link targets,
5
- * strip tags, decode entities, normalize whitespace.
4
+ * script/style, turn block ends and line breaks into newlines, put each table row on
5
+ * one line (a one-cell row keeps its line breaks), inline link targets, strip tags,
6
+ * decode entities, normalize whitespace.
6
7
  * @module services/zenodo/html-to-text
7
8
  */
8
- const NAMED_ENTITIES = {
9
- amp: '&',
10
- lt: '<',
11
- gt: '>',
12
- quot: '"',
13
- apos: "'",
14
- nbsp: ' ',
15
- ndash: '–',
16
- mdash: '—',
17
- hellip: '…',
18
- lsquo: '‘',
19
- rsquo: '’',
20
- ldquo: '“',
21
- rdquo: '”',
22
- copy: '©',
23
- reg: '®',
24
- deg: '°',
25
- };
26
9
  /**
27
- * The HTML 4 Latin-1 entities (U+00A0–U+00FF), case-sensitive. Zenodo's
28
- * description editor stores accented letters as named entities (`n&uacute;meros`),
29
- * so non-English descriptions stay unreadable without them.
10
+ * `name:code` pairs of the HTML 4.01 character entity sets, transcribed in DTD order
11
+ * from https://www.w3.org/TR/html401/HTMLlat1.ent (96 names, U+00A0–U+00FF),
12
+ * HTMLsymbol.ent (124: Greek, math, arrows), and HTMLspecial.ent (32: markup-significant
13
+ * characters, Latin Extended-A, spacing and punctuation).
30
14
  */
31
- const LATIN1_ENTITIES = Object.fromEntries('AElig:198 Aacute:193 Acirc:194 Agrave:192 Aring:197 Atilde:195 Auml:196 Ccedil:199 ETH:208 Eacute:201 Ecirc:202 Egrave:200 Euml:203 Iacute:205 Icirc:206 Igrave:204 Iuml:207 Ntilde:209 Oacute:211 Ocirc:212 Ograve:210 Oslash:216 Otilde:213 Ouml:214 THORN:222 Uacute:218 Ucirc:219 Ugrave:217 Uuml:220 Yacute:221 aacute:225 acirc:226 acute:180 aelig:230 agrave:224 aring:229 atilde:227 auml:228 brvbar:166 ccedil:231 cedil:184 cent:162 curren:164 divide:247 eacute:233 ecirc:234 egrave:232 eth:240 euml:235 frac12:189 frac14:188 frac34:190 iacute:237 icirc:238 iexcl:161 igrave:236 iquest:191 iuml:239 laquo:171 macr:175 micro:181 middot:183 not:172 ntilde:241 oacute:243 ocirc:244 ograve:242 ordf:170 ordm:186 oslash:248 otilde:245 ouml:246 para:182 plusmn:177 pound:163 raquo:187 sect:167 shy:173 sup1:185 sup2:178 sup3:179 szlig:223 thorn:254 times:215 uacute:250 ucirc:251 ugrave:249 uml:168 uuml:252 yacute:253 yen:165 yuml:255'
32
- .split(' ')
33
- .map((pair) => {
34
- const [name, code] = pair.split(':');
35
- return [name, Number(code)];
36
- }));
15
+ const HTML4_ENTITY_SETS = [
16
+ 'nbsp:160 iexcl:161 cent:162 pound:163 curren:164 yen:165 brvbar:166 sect:167 uml:168 copy:169 ordf:170 laquo:171 not:172 shy:173 reg:174 macr:175 deg:176 plusmn:177 sup2:178 sup3:179 acute:180 micro:181 para:182 middot:183 cedil:184 sup1:185 ordm:186 raquo:187 frac14:188 frac12:189 frac34:190 iquest:191 Agrave:192 Aacute:193 Acirc:194 Atilde:195 Auml:196 Aring:197 AElig:198 Ccedil:199 Egrave:200 Eacute:201 Ecirc:202 Euml:203 Igrave:204 Iacute:205 Icirc:206 Iuml:207 ETH:208 Ntilde:209 Ograve:210 Oacute:211 Ocirc:212 Otilde:213 Ouml:214 times:215 Oslash:216 Ugrave:217 Uacute:218 Ucirc:219 Uuml:220 Yacute:221 THORN:222 szlig:223 agrave:224 aacute:225 acirc:226 atilde:227 auml:228 aring:229 aelig:230 ccedil:231 egrave:232 eacute:233 ecirc:234 euml:235 igrave:236 iacute:237 icirc:238 iuml:239 eth:240 ntilde:241 ograve:242 oacute:243 ocirc:244 otilde:245 ouml:246 divide:247 oslash:248 ugrave:249 uacute:250 ucirc:251 uuml:252 yacute:253 thorn:254 yuml:255',
17
+ 'fnof:402 Alpha:913 Beta:914 Gamma:915 Delta:916 Epsilon:917 Zeta:918 Eta:919 Theta:920 Iota:921 Kappa:922 Lambda:923 Mu:924 Nu:925 Xi:926 Omicron:927 Pi:928 Rho:929 Sigma:931 Tau:932 Upsilon:933 Phi:934 Chi:935 Psi:936 Omega:937 alpha:945 beta:946 gamma:947 delta:948 epsilon:949 zeta:950 eta:951 theta:952 iota:953 kappa:954 lambda:955 mu:956 nu:957 xi:958 omicron:959 pi:960 rho:961 sigmaf:962 sigma:963 tau:964 upsilon:965 phi:966 chi:967 psi:968 omega:969 thetasym:977 upsih:978 piv:982 bull:8226 hellip:8230 prime:8242 Prime:8243 oline:8254 frasl:8260 weierp:8472 image:8465 real:8476 trade:8482 alefsym:8501 larr:8592 uarr:8593 rarr:8594 darr:8595 harr:8596 crarr:8629 lArr:8656 uArr:8657 rArr:8658 dArr:8659 hArr:8660 forall:8704 part:8706 exist:8707 empty:8709 nabla:8711 isin:8712 notin:8713 ni:8715 prod:8719 sum:8721 minus:8722 lowast:8727 radic:8730 prop:8733 infin:8734 ang:8736 and:8743 or:8744 cap:8745 cup:8746 int:8747 there4:8756 sim:8764 cong:8773 asymp:8776 ne:8800 equiv:8801 le:8804 ge:8805 sub:8834 sup:8835 nsub:8836 sube:8838 supe:8839 oplus:8853 otimes:8855 perp:8869 sdot:8901 lceil:8968 rceil:8969 lfloor:8970 rfloor:8971 lang:9001 rang:9002 loz:9674 spades:9824 clubs:9827 hearts:9829 diams:9830',
18
+ 'quot:34 amp:38 lt:60 gt:62 OElig:338 oelig:339 Scaron:352 scaron:353 Yuml:376 circ:710 tilde:732 ensp:8194 emsp:8195 thinsp:8201 zwnj:8204 zwj:8205 lrm:8206 rlm:8207 ndash:8211 mdash:8212 lsquo:8216 rsquo:8217 sbquo:8218 ldquo:8220 rdquo:8221 bdquo:8222 dagger:8224 Dagger:8225 permil:8240 lsaquo:8249 rsaquo:8250 euro:8364',
19
+ ];
20
+ /**
21
+ * Every named entity the converter decodes, keyed by exact name: the 252 HTML 4.01
22
+ * entities plus `apos`. `nbsp` decodes to a plain space (the later entry wins).
23
+ */
24
+ export const NAMED_ENTITIES = new Map([
25
+ ...HTML4_ENTITY_SETS.flatMap((set) => set.split(' ')).map((pair) => {
26
+ const [name = '', code] = pair.split(':');
27
+ return [name, String.fromCodePoint(Number(code))];
28
+ }),
29
+ ['apos', "'"],
30
+ ['nbsp', ' '],
31
+ ]);
32
+ /** The common names, also matched in any letter case (`&AMP;`, `&Nbsp;`). */
33
+ const ANY_CASE = new Set('amp lt gt quot apos nbsp ndash mdash hellip lsquo rsquo ldquo rdquo copy reg deg'.split(' '));
37
34
  function codePointToString(codePoint) {
38
35
  return Number.isInteger(codePoint) &&
39
36
  codePoint > 0 &&
40
37
  codePoint <= 0x10ffff &&
41
38
  (codePoint < 0xd800 || codePoint > 0xdfff)
42
39
  ? String.fromCodePoint(codePoint)
43
- : '\uFFFD';
40
+ : String.fromCodePoint(0xfffd);
44
41
  }
45
42
  /**
46
- * Decodes numeric (decimal and hex) entities, the fixed named table (any case), and
47
- * the Latin-1 named entities (exact case). Unknown names stay as written.
43
+ * Decodes numeric (decimal and hex) references and `NAMED_ENTITIES` in one
44
+ * left-to-right pass, so decoded text is never read again. Names match by exact case,
45
+ * except the `ANY_CASE` names; every other name stays as written.
48
46
  */
49
47
  export function decodeEntities(text) {
50
48
  return text.replace(/&(#x[0-9a-f]+|#\d+|[a-z][a-z0-9]*);/gi, (match, body) => {
@@ -52,11 +50,8 @@ export function decodeEntities(text) {
52
50
  const hex = body[1] === 'x' || body[1] === 'X';
53
51
  return codePointToString(Number.parseInt(body.slice(hex ? 2 : 1), hex ? 16 : 10));
54
52
  }
55
- const named = NAMED_ENTITIES[body.toLowerCase()];
56
- if (named !== undefined)
57
- return named;
58
- const latin1 = LATIN1_ENTITIES[body];
59
- return latin1 === undefined ? match : String.fromCodePoint(latin1);
53
+ const lower = body.toLowerCase();
54
+ return NAMED_ENTITIES.get(ANY_CASE.has(lower) ? lower : body) ?? match;
60
55
  });
61
56
  }
62
57
  /** Re-escapes the characters entity decoding would otherwise read twice. */
@@ -112,6 +107,139 @@ function inlineLinks(html) {
112
107
  }
113
108
  return out + html.slice(from);
114
109
  }
110
+ /** `<br>` with the line break directly after it, and the spaces and tabs around that break. */
111
+ const BR = /<br\s*\/?>(?:[ \t]*(?:\r\n?|\n)[ \t]*)?/gi;
112
+ /** Line breaks, block ends, list items, links, tag stripping, and entity decoding. */
113
+ function flowToText(html) {
114
+ const s = html
115
+ .replace(BR, '\n')
116
+ .replace(/<\/(?:p|div|h[1-6]|li|tr|blockquote|pre|ul|ol|table)\s*>/gi, '\n')
117
+ .replace(/<li\b[^<>]*>/gi, '- ');
118
+ return decodeEntities(stripTags(inlineLinks(s)));
119
+ }
120
+ /** `text` with each whitespace run collapsed to one space, trimmed. */
121
+ function collapseSpace(text) {
122
+ return text.replace(/[\s\u0085]+/g, ' ').trim();
123
+ }
124
+ /** A table cell, or text inside a table but outside its cells, as one line. */
125
+ function cellToText(html) {
126
+ return collapseSpace(flowToText(html));
127
+ }
128
+ /**
129
+ * The cell of a one-cell row as blocks: its line breaks kept, whitespace inside each
130
+ * line collapsed as in a cell (so a pretty-printed layout table leaves no indentation),
131
+ * and blank lines at either end dropped.
132
+ */
133
+ function blockToText(html) {
134
+ const lines = flowToText(html)
135
+ .split(/\r\n?|\n/)
136
+ .map(collapseSpace);
137
+ let start = 0;
138
+ let end = lines.length;
139
+ while (start < end && lines[start] === '')
140
+ start++;
141
+ while (end > start && lines[end - 1] === '')
142
+ end--;
143
+ return lines.slice(start, end).join('\n');
144
+ }
145
+ /** A row from its cells' HTML: one cell as blocks, several as one line joined by ` | `; `''` when no cell has text. */
146
+ function rowToText(cells) {
147
+ if (cells.length === 1)
148
+ return blockToText(cells[0] ?? '');
149
+ const texts = cells.map(cellToText);
150
+ return texts.some((text) => text !== '') ? texts.join(' | ') : '';
151
+ }
152
+ /** A `table`, `tr`, `td`, or `th` tag, opening or closing, that closes before the next `<`. */
153
+ const TABLE_TAG = /<(\/?)(table|tr|t[dh])(?=[\s/>])[^<>]*>/gi;
154
+ /** True when `text` is empty or ends with a line break, ignoring trailing spaces and tabs. */
155
+ function atLineStart(text) {
156
+ let end = text.length;
157
+ while (end > 0 && (text[end - 1] === ' ' || text[end - 1] === '\t'))
158
+ end--;
159
+ return end === 0 || text[end - 1] === '\n' || text[end - 1] === '\r';
160
+ }
161
+ /**
162
+ * Converts `html` in one forward scan over its table tags. Text outside tables goes
163
+ * through `flowToText`. Each table becomes one line per row, cells joined by ` | `,
164
+ * on its own line and followed by a blank line; a row with exactly one cell keeps that
165
+ * cell's line breaks instead (a layout table). A cell or row without its closing tag
166
+ * ends where the next cell, row, or the table does. A table nested in a cell becomes
167
+ * part of that cell's text, its row and table ends kept as line breaks and its other
168
+ * tags as spaces, and text inside a table but outside its cells gets a line of its own.
169
+ */
170
+ function convertBlocks(html) {
171
+ let out = '';
172
+ let from = 0; // start of the input not yet converted
173
+ let depth = 0; // table nesting at the scan position
174
+ let lines = [];
175
+ let row; // HTML of each closed cell of the open row
176
+ let cell; // HTML of the open cell
177
+ const take = (end) => {
178
+ const chunk = html.slice(from, end);
179
+ if (cell !== undefined) {
180
+ cell += chunk;
181
+ return;
182
+ }
183
+ const text = cellToText(chunk);
184
+ if (text)
185
+ lines.push(text);
186
+ };
187
+ const closeCell = () => {
188
+ if (cell === undefined)
189
+ return;
190
+ row ??= [];
191
+ row.push(cell);
192
+ cell = undefined;
193
+ };
194
+ const closeRow = () => {
195
+ closeCell();
196
+ const text = row ? rowToText(row) : '';
197
+ if (text)
198
+ lines.push(text);
199
+ row = undefined;
200
+ };
201
+ const closeTable = () => {
202
+ closeRow();
203
+ if (lines.length > 0)
204
+ out += `${atLineStart(out) ? '' : '\n'}${lines.join('\n')}\n`;
205
+ out += '\n';
206
+ lines = [];
207
+ };
208
+ for (const tag of html.matchAll(TABLE_TAG)) {
209
+ const closing = tag[1] === '/';
210
+ const name = tag[2]?.toLowerCase();
211
+ if (depth === 0) {
212
+ if (name !== 'table' || closing)
213
+ continue;
214
+ out += flowToText(html.slice(from, tag.index));
215
+ }
216
+ else {
217
+ take(tag.index);
218
+ }
219
+ from = tag.index + tag[0].length;
220
+ const nested = depth > 1 || (depth === 1 && name === 'table' && !closing);
221
+ if (name === 'table')
222
+ depth += closing ? -1 : 1;
223
+ if (depth === 0)
224
+ closeTable();
225
+ else if (nested) {
226
+ if (cell !== undefined)
227
+ cell += closing && (name === 'tr' || name === 'table') ? '\n' : ' ';
228
+ }
229
+ else if (name === 'tr')
230
+ closeRow();
231
+ else if (name !== 'table') {
232
+ closeCell();
233
+ if (!closing)
234
+ cell = '';
235
+ }
236
+ }
237
+ if (depth === 0)
238
+ return out + flowToText(html.slice(from));
239
+ take(html.length);
240
+ closeTable();
241
+ return out;
242
+ }
115
243
  /** `line` without trailing spaces and tabs. */
116
244
  function trimTrailingBlanks(line) {
117
245
  let end = line.length;
@@ -122,22 +250,21 @@ function trimTrailingBlanks(line) {
122
250
  /**
123
251
  * Converts an HTML fragment to plain text:
124
252
  * 1. drops `<script>`/`<style>` elements with their content (and comments);
125
- * 2. `<br>` → newline, closing block tags → newline, `<li>` → `- `;
126
- * 3. `<a href="X">T</a>` → `T (X)` when X is http(s) and differs from T;
127
- * 4. strips remaining tags; 5. decodes entities;
128
- * 6. normalizes CRLF/CR to LF, trims trailing spaces per line, collapses 3+
253
+ * 2. `<br>` → newline, together with a line break directly after it; closing block
254
+ * tags → newline; `<li>` → `- `;
255
+ * 3. each table row → one line, cells joined by ` | `, whitespace and block breaks
256
+ * inside a cell collapsed to single spaces; a row with one cell keeps the cell's
257
+ * line breaks, each line collapsed and trimmed the same way;
258
+ * 4. `<a href="X">T</a>` → `T (X)` when X is http(s) and differs from T;
259
+ * 5. strips remaining tags; 6. decodes entities (numeric and the HTML 4 named set);
260
+ * 7. normalizes CRLF/CR to LF, trims trailing spaces per line, collapses 3+
129
261
  * newlines to 2, and trims the result.
130
262
  */
131
263
  export function htmlToText(html) {
132
- let s = html
264
+ const s = html
133
265
  .replace(/<!--[\s\S]*?(?:-->|$)/g, '')
134
266
  .replace(/<(script|style)\b[^<>]*>[\s\S]*?(?:<\/\1\s*>|$)/gi, '');
135
- s = s
136
- .replace(/<br\s*\/?>/gi, '\n')
137
- .replace(/<\/(?:p|div|h[1-6]|li|tr|blockquote|pre|ul|ol|table)\s*>/gi, '\n')
138
- .replace(/<li\b[^<>]*>/gi, '- ');
139
- s = decodeEntities(stripTags(inlineLinks(s)));
140
- return s
267
+ return convertBlocks(s)
141
268
  .replace(/\r\n?/g, '\n')
142
269
  .split('\n')
143
270
  .map(trimTrailingBlanks)
@@ -1 +1 @@
1
- {"version":3,"file":"html-to-text.js","sourceRoot":"","sources":["../../../src/services/zenodo/html-to-text.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"html-to-text.js","sourceRoot":"","sources":["../../../src/services/zenodo/html-to-text.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/services/zenodo/http.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAuBtD,oFAAoF;AACpF,MAAM,MAAM,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAEjG,qDAAqD;AACrD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,YAAY,CAAC;IACvB,+EAA+E;IAC/E,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+FAA+F;IAC/F,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAChC;AAED,sFAAsF;AACtF,eAAO,MAAM,eAAe,QAAS,CAAC;AACtC,eAAO,MAAM,kBAAkB,QAAS,CAAC;AAyBzC,+EAA+E;AAC/E,wBAAsB,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9D;AAED,mGAAmG;AACnG,wBAAsB,QAAQ,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAS7D;AAED,kGAAkG;AAClG,wBAAsB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAgB3D;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,MAAM,EAChB,SAAS,SAAI,GACZ,OAAO,CAAC;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAkC/C;AAED,8EAA8E;AAC9E,qBAAa,UAAU;;IAOrB,YAAY,OAAO,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAwB3E;IAED,4DAA4D;IAC5D,OAAO,IAAI,IAAI,CAGd;IAED;;;;OAIG;IACG,OAAO,CAAC,CAAC,EACb,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,EACnC,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,CAAC,CAAC,CA6BZ;CAiQF"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/services/zenodo/http.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAuBtD,oFAAoF;AACpF,MAAM,MAAM,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAEjG,qDAAqD;AACrD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,YAAY,CAAC;IACvB,+EAA+E;IAC/E,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+FAA+F;IAC/F,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAChC;AAED,sFAAsF;AACtF,eAAO,MAAM,eAAe,QAAS,CAAC;AACtC,eAAO,MAAM,kBAAkB,QAAS,CAAC;AAyBzC,+EAA+E;AAC/E,wBAAsB,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9D;AAED,mGAAmG;AACnG,wBAAsB,QAAQ,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAS7D;AAED,kGAAkG;AAClG,wBAAsB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAgB3D;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,MAAM,EAChB,SAAS,SAAI,GACZ,OAAO,CAAC;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAkC/C;AAED,8EAA8E;AAC9E,qBAAa,UAAU;;IAOrB,YAAY,OAAO,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAwB3E;IAED,4DAA4D;IAC5D,OAAO,IAAI,IAAI,CAGd;IAED;;;;OAIG;IACG,OAAO,CAAC,CAAC,EACb,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,EACnC,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,CAAC,CAAC,CA4BZ;CA0OF"}
@@ -39,7 +39,7 @@ export async function discardBody(res) {
39
39
  export async function readText(res) {
40
40
  const { bytes, more } = await readCapped(res, MAX_BODY_BYTES);
41
41
  if (more) {
42
- throw serviceUnavailable(`Zenodo returned a response body over ${MAX_BODY_BYTES} bytes; it was not read.`, { status: res.status, retryable: false });
42
+ throw serviceUnavailable(`Zenodo returned a response body over ${MAX_BODY_BYTES.toLocaleString('en-US')} bytes; it was not read.`, { status: res.status, retryable: false });
43
43
  }
44
44
  return new TextDecoder().decode(bytes);
45
45
  }
@@ -146,7 +146,7 @@ export class ZenodoHttp {
146
146
  */
147
147
  async request(req, read, ctx) {
148
148
  try {
149
- return await withRetry((attempt) => this.#paced(req, read, ctx, attempt), {
149
+ return await withRetry((attempt) => this.#paced(req, read, attempt), {
150
150
  maxRetries: 1,
151
151
  baseDelayMs: 1_000,
152
152
  maxDelayMs: 15_000,
@@ -165,17 +165,16 @@ export class ZenodoHttp {
165
165
  throw rateLimited("Zenodo request queue is full; this server's shared rate budget is spent for now.", {
166
166
  reason: 'rate_limited',
167
167
  ...(retryAfter !== undefined ? { retryAfter } : {}),
168
- ...ctx.recoveryFor('rate_limited'),
169
168
  }, { cause: error });
170
169
  }
171
170
  if (reason === 'retry_deadline_exceeded')
172
- throw this.#timeoutError(req, ctx, error);
171
+ throw this.#timeoutError(req, error);
173
172
  throw error;
174
173
  }
175
174
  }
176
- #paced(req, read, ctx, attempt) {
175
+ #paced(req, read, attempt) {
177
176
  const options = { signal: attempt.signal, maxWaitMs: PACER_MAX_WAIT_MS };
178
- const task = (signal) => this.#dispatch(req, read, ctx, signal, attempt.remainingMs);
177
+ const task = (signal) => this.#dispatch(req, read, signal, attempt.remainingMs);
179
178
  if (req.bucket === 'general')
180
179
  return this.#general.run(task, options);
181
180
  // A search also counts against the global budget: reserve a general start slot,
@@ -184,8 +183,8 @@ export class ZenodoHttp {
184
183
  .run(async () => undefined, options)
185
184
  .then(() => this.#search.run(task, options));
186
185
  }
187
- async #dispatch(req, read, ctx, signal, remainingMs) {
188
- this.#checkGate(req.bucket, ctx);
186
+ async #dispatch(req, read, signal, remainingMs) {
187
+ this.#checkGate(req.bucket);
189
188
  const budget = Math.max(1, Math.min(req.attemptMs, remainingMs));
190
189
  const deadline = new AbortController();
191
190
  const timer = setTimeout(() => deadline.abort(), budget);
@@ -193,7 +192,7 @@ export class ZenodoHttp {
193
192
  try {
194
193
  const res = await this.#fetchWithinZenodo(req, AbortSignal.any([signal, deadline.signal]));
195
194
  if (!req.okStatuses.includes(res.status)) {
196
- throw await this.#statusError(req, res, ctx, Date.now() - started);
195
+ throw await this.#statusError(req, res, Date.now() - started);
197
196
  }
198
197
  return await read(res);
199
198
  }
@@ -201,7 +200,7 @@ export class ZenodoHttp {
201
200
  if (error instanceof McpError)
202
201
  throw error;
203
202
  if (deadline.signal.aborted && !signal.aborted)
204
- throw this.#timeoutError(req, ctx, error);
203
+ throw this.#timeoutError(req, error);
205
204
  if (signal.aborted)
206
205
  throw error;
207
206
  throw serviceUnavailable(`Zenodo request failed before a response arrived (${req.operation}).`, { operation: req.operation }, { cause: error });
@@ -266,7 +265,7 @@ export class ZenodoHttp {
266
265
  };
267
266
  }
268
267
  /** Refuses to dispatch while the bucket's advertised window is spent. */
269
- #checkGate(bucket, ctx) {
268
+ #checkGate(bucket) {
270
269
  const { remaining, resetAt } = this.#headers[bucket];
271
270
  if (remaining === undefined || resetAt === undefined || remaining > 0)
272
271
  return;
@@ -276,10 +275,9 @@ export class ZenodoHttp {
276
275
  throw rateLimited(`Zenodo's ${bucket} rate-limit window is spent until it resets.`, {
277
276
  reason: 'rate_limited',
278
277
  retryAfter: Math.ceil(waitMs / 1000),
279
- ...ctx.recoveryFor('rate_limited'),
280
278
  });
281
279
  }
282
- async #statusError(req, res, ctx, elapsedMs) {
280
+ async #statusError(req, res, elapsedMs) {
283
281
  const status = res.status;
284
282
  if (status === 429) {
285
283
  const reset = headerNumber(res.headers, 'x-ratelimit-reset');
@@ -290,15 +288,14 @@ export class ZenodoHttp {
290
288
  reason: 'rate_limited',
291
289
  status,
292
290
  ...(retryAfter !== undefined ? { retryAfter } : {}),
293
- ...ctx.recoveryFor('rate_limited'),
294
291
  });
295
292
  }
296
293
  if (status >= 500) {
297
294
  await discardBody(res);
298
295
  if (status === 504 && elapsedMs >= SLOW_GATEWAY_MS)
299
- return this.#timeoutError(req, ctx);
296
+ return this.#timeoutError(req);
300
297
  if (status === 500)
301
- return this.#serverError(req, ctx);
298
+ return this.#serverError(req);
302
299
  return serviceUnavailable(`Zenodo answered HTTP ${status} (${req.operation}).`, { status });
303
300
  }
304
301
  const error = await httpErrorFromResponse(res, {
@@ -315,61 +312,53 @@ export class ZenodoHttp {
315
312
  * (after the one retry) or never finished. The message names the archive's
316
313
  * download URL, the path that still works.
317
314
  */
318
- #archiveError(req, ctx, failure, cause) {
315
+ #archiveError(req, failure, cause) {
319
316
  const what = failure === 'status_500' ? 'HTTP 500' : 'no complete response in time';
320
317
  return new McpError(JsonRpcErrorCode.ServiceUnavailable, `Zenodo could not open this .zip archive (${what}); download it from ${req.downloadUrl ?? 'its download_url'} instead.`, {
321
318
  reason: 'archive_unavailable',
322
319
  ...(failure === 'status_500' ? { status: 500 } : { retryable: false }),
323
- ...ctx.recoveryFor('archive_unavailable'),
324
320
  }, cause === undefined ? undefined : { cause });
325
321
  }
326
322
  /** HTTP 500, per the retry matrix. */
327
- #serverError(req, ctx) {
323
+ #serverError(req) {
328
324
  switch (req.endpoint) {
329
325
  case 'search':
330
326
  return serviceUnavailable('Zenodo answered HTTP 500 for this search query.', {
331
327
  reason: 'query_failed',
332
328
  status: 500,
333
329
  retryable: false,
334
- ...ctx.recoveryFor('query_failed'),
335
330
  });
336
331
  case 'doi_lookup':
337
332
  return serviceUnavailable('Zenodo answered HTTP 500 while resolving the DOI.', {
338
333
  reason: 'record_unavailable',
339
334
  status: 500,
340
335
  retryable: false,
341
- ...ctx.recoveryFor('record_unavailable'),
342
336
  });
343
337
  case 'record':
344
338
  case 'versions':
345
339
  return serviceUnavailable('Zenodo answered HTTP 500 for this record.', {
346
340
  reason: 'record_unavailable',
347
341
  status: 500,
348
- ...ctx.recoveryFor('record_unavailable'),
349
342
  });
350
343
  case 'archive':
351
- return this.#archiveError(req, ctx, 'status_500');
344
+ return this.#archiveError(req, 'status_500');
352
345
  default:
353
346
  return serviceUnavailable(`Zenodo answered HTTP 500 (${req.operation}).`, { status: 500 });
354
347
  }
355
348
  }
356
349
  /** Slow 504, attempt timeout, or ladder deadline — deterministic for oversized payloads, never retried. */
357
- #timeoutError(req, ctx, cause) {
350
+ #timeoutError(req, cause) {
358
351
  const options = cause === undefined ? undefined : { cause };
359
352
  switch (req.endpoint) {
360
353
  case 'search':
361
- return timeout('Zenodo did not finish the search page within its time budget; large file manifests in the hits make pages heavy.', { reason: 'upstream_timeout', retryable: false, ...ctx.recoveryFor('upstream_timeout') }, options);
354
+ return timeout('Zenodo did not finish the search page within its time budget; large file manifests in the hits make pages heavy.', { reason: 'upstream_timeout', retryable: false }, options);
362
355
  case 'versions':
363
- return timeout('Zenodo did not finish the versions page within its time budget; the series holds large file manifests.', { reason: 'upstream_timeout', retryable: false, ...ctx.recoveryFor('upstream_timeout') }, options);
356
+ return timeout('Zenodo did not finish the versions page within its time budget; the series holds large file manifests.', { reason: 'upstream_timeout', retryable: false }, options);
364
357
  case 'record':
365
358
  case 'doi_lookup':
366
- return new McpError(JsonRpcErrorCode.ServiceUnavailable, 'Zenodo did not serve this record within its time budget (gateway cutoff or timeout).', {
367
- reason: 'record_unavailable',
368
- retryable: false,
369
- ...ctx.recoveryFor('record_unavailable'),
370
- }, options);
359
+ return new McpError(JsonRpcErrorCode.ServiceUnavailable, 'Zenodo did not serve this record within its time budget (gateway cutoff or timeout).', { reason: 'record_unavailable', retryable: false }, options);
371
360
  case 'archive':
372
- return this.#archiveError(req, ctx, 'timeout', cause);
361
+ return this.#archiveError(req, 'timeout', cause);
373
362
  default:
374
363
  return timeout(`Zenodo did not respond within the time budget (${req.operation}).`, { retryable: false }, options);
375
364
  }
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/services/zenodo/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/services/zenodo/http.ts"],"names":[],"mappings":"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"}
@@ -105,7 +105,7 @@ function parseUrl(raw) {
105
105
  return classifyDoi(doi, 'url');
106
106
  }
107
107
  if (!ZENODO_HOSTS.has(host)) {
108
- const note = host.endsWith('zenodo.org')
108
+ const note = host.endsWith('.zenodo.org')
109
109
  ? `${host} is a different Zenodo instance; only zenodo.org records are served.`
110
110
  : `${host} is not zenodo.org or doi.org.`;
111
111
  return { kind: 'invalid', message: note };