@cyanheads/anime-mcp-server 0.1.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 +346 -0
- package/CLAUDE.md +346 -0
- package/Dockerfile +99 -0
- package/LICENSE +201 -0
- package/README.md +313 -0
- package/changelog/0.1.x/0.1.1.md +42 -0
- package/changelog/template.md +127 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/prompts/index.d.ts +7 -0
- package/dist/mcp-server/prompts/index.d.ts.map +1 -0
- package/dist/mcp-server/prompts/index.js +7 -0
- package/dist/mcp-server/prompts/index.js.map +1 -0
- package/dist/mcp-server/resources/definitions/anime-media.resource.d.ts +31 -0
- package/dist/mcp-server/resources/definitions/anime-media.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/anime-media.resource.js +100 -0
- package/dist/mcp-server/resources/definitions/anime-media.resource.js.map +1 -0
- package/dist/mcp-server/resources/index.d.ts +29 -0
- package/dist/mcp-server/resources/index.d.ts.map +1 -0
- package/dist/mcp-server/resources/index.js +7 -0
- package/dist/mcp-server/resources/index.js.map +1 -0
- package/dist/mcp-server/tools/definitions/anime-find-characters.tool.d.ts +77 -0
- package/dist/mcp-server/tools/definitions/anime-find-characters.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/anime-find-characters.tool.js +308 -0
- package/dist/mcp-server/tools/definitions/anime-find-characters.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/anime-get-media.tool.d.ts +92 -0
- package/dist/mcp-server/tools/definitions/anime-get-media.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/anime-get-media.tool.js +425 -0
- package/dist/mcp-server/tools/definitions/anime-get-media.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/anime-get-rankings.tool.d.ts +73 -0
- package/dist/mcp-server/tools/definitions/anime-get-rankings.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/anime-get-rankings.tool.js +154 -0
- package/dist/mcp-server/tools/definitions/anime-get-rankings.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/anime-get-recommendations.tool.d.ts +35 -0
- package/dist/mcp-server/tools/definitions/anime-get-recommendations.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/anime-get-recommendations.tool.js +174 -0
- package/dist/mcp-server/tools/definitions/anime-get-recommendations.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/anime-get-relations.tool.d.ts +43 -0
- package/dist/mcp-server/tools/definitions/anime-get-relations.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/anime-get-relations.tool.js +245 -0
- package/dist/mcp-server/tools/definitions/anime-get-relations.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/anime-get-schedule.tool.d.ts +51 -0
- package/dist/mcp-server/tools/definitions/anime-get-schedule.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/anime-get-schedule.tool.js +196 -0
- package/dist/mcp-server/tools/definitions/anime-get-schedule.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/anime-get-studio.tool.d.ts +50 -0
- package/dist/mcp-server/tools/definitions/anime-get-studio.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/anime-get-studio.tool.js +163 -0
- package/dist/mcp-server/tools/definitions/anime-get-studio.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/anime-search-media.tool.d.ts +73 -0
- package/dist/mcp-server/tools/definitions/anime-search-media.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/anime-search-media.tool.js +229 -0
- package/dist/mcp-server/tools/definitions/anime-search-media.tool.js.map +1 -0
- package/dist/mcp-server/tools/index.d.ts +435 -0
- package/dist/mcp-server/tools/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/index.js +23 -0
- package/dist/mcp-server/tools/index.js.map +1 -0
- package/dist/services/anilist/anilist-service.d.ts +90 -0
- package/dist/services/anilist/anilist-service.d.ts.map +1 -0
- package/dist/services/anilist/anilist-service.js +496 -0
- package/dist/services/anilist/anilist-service.js.map +1 -0
- package/dist/services/anilist/types.d.ts +255 -0
- package/dist/services/anilist/types.d.ts.map +1 -0
- package/dist/services/anilist/types.js +6 -0
- package/dist/services/anilist/types.js.map +1 -0
- package/dist/services/jikan/jikan-service.d.ts +22 -0
- package/dist/services/jikan/jikan-service.d.ts.map +1 -0
- package/dist/services/jikan/jikan-service.js +89 -0
- package/dist/services/jikan/jikan-service.js.map +1 -0
- package/dist/services/jikan/types.d.ts +85 -0
- package/dist/services/jikan/types.d.ts.map +1 -0
- package/dist/services/jikan/types.js +6 -0
- package/dist/services/jikan/types.js.map +1 -0
- package/dist/services/kitsu/kitsu-service.d.ts +14 -0
- package/dist/services/kitsu/kitsu-service.d.ts.map +1 -0
- package/dist/services/kitsu/kitsu-service.js +94 -0
- package/dist/services/kitsu/kitsu-service.js.map +1 -0
- package/dist/services/kitsu/types.d.ts +17 -0
- package/dist/services/kitsu/types.d.ts.map +1 -0
- package/dist/services/kitsu/types.js +6 -0
- package/dist/services/kitsu/types.js.map +1 -0
- package/package.json +103 -0
- package/server.json +99 -0
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview anime_get_relations tool — franchise watch/read order via multi-hop relation graph traversal.
|
|
3
|
+
* BFS over AniList relation edges up to max_depth, then topological sort for recommended order.
|
|
4
|
+
* @module mcp-server/tools/definitions/anime-get-relations.tool
|
|
5
|
+
*/
|
|
6
|
+
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
7
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
8
|
+
import * as anilist from '../../../services/anilist/anilist-service.js';
|
|
9
|
+
/** Priority for topological watch-order sort. Lower = watch earlier. */
|
|
10
|
+
const RELATION_ORDER = {
|
|
11
|
+
SOURCE: 0,
|
|
12
|
+
ADAPTATION: 1,
|
|
13
|
+
PREQUEL: 2,
|
|
14
|
+
PARENT: 3,
|
|
15
|
+
SUMMARY: 4,
|
|
16
|
+
COMPILATION: 5,
|
|
17
|
+
CONTAINS: 6,
|
|
18
|
+
ALTERNATIVE: 7,
|
|
19
|
+
SIDE_STORY: 8,
|
|
20
|
+
CHARACTER: 9,
|
|
21
|
+
SPIN_OFF: 10,
|
|
22
|
+
OTHER: 11,
|
|
23
|
+
SEQUEL: 12,
|
|
24
|
+
};
|
|
25
|
+
const SUPPLEMENTARY_TYPES = new Set([
|
|
26
|
+
'SIDE_STORY',
|
|
27
|
+
'SPIN_OFF',
|
|
28
|
+
'CHARACTER',
|
|
29
|
+
'OTHER',
|
|
30
|
+
'COMPILATION',
|
|
31
|
+
'SUMMARY',
|
|
32
|
+
'CONTAINS',
|
|
33
|
+
'ALTERNATIVE',
|
|
34
|
+
]);
|
|
35
|
+
export const animeGetRelations = tool('anime_get_relations', {
|
|
36
|
+
description: 'Franchise untangler. Walks the related-works graph from a media ID across multiple hops — ' +
|
|
37
|
+
'sequels, prequels, side stories, movies, OVAs, source/adaptation — and returns them ordered ' +
|
|
38
|
+
'into a suggested watch/read order. This is the "how do I watch this whole series" tool. ' +
|
|
39
|
+
'Use anime_get_media first to confirm the ID.',
|
|
40
|
+
annotations: { readOnlyHint: true, idempotentHint: true },
|
|
41
|
+
input: z.object({
|
|
42
|
+
id: z.number().int().min(1).describe('AniList media ID of any entry in the franchise.'),
|
|
43
|
+
max_depth: z
|
|
44
|
+
.number()
|
|
45
|
+
.int()
|
|
46
|
+
.min(1)
|
|
47
|
+
.max(4)
|
|
48
|
+
.default(2)
|
|
49
|
+
.describe('Maximum hops to traverse from the root entry. Default 2. Maximum 4. ' +
|
|
50
|
+
'Deeper traversal makes more AniList requests — use 3–4 only for large franchises.'),
|
|
51
|
+
}),
|
|
52
|
+
output: z.object({
|
|
53
|
+
root_id: z.number().int().describe('The AniList ID used as the traversal root.'),
|
|
54
|
+
total_entries: z.number().int().describe('Total unique entries found across the franchise.'),
|
|
55
|
+
depth_reached: z.number().int().describe('Actual traversal depth reached.'),
|
|
56
|
+
entries: z
|
|
57
|
+
.array(z
|
|
58
|
+
.object({
|
|
59
|
+
id: z.number().int().describe('AniList media ID.'),
|
|
60
|
+
id_mal: z.number().int().nullable().describe('MyAnimeList ID, or null.'),
|
|
61
|
+
title: z.string().nullable().describe('Romanized title.'),
|
|
62
|
+
title_english: z.string().nullable().describe('English title, or null.'),
|
|
63
|
+
type: z.string().nullable().describe('Media type: ANIME or MANGA.'),
|
|
64
|
+
format: z
|
|
65
|
+
.string()
|
|
66
|
+
.nullable()
|
|
67
|
+
.describe('Format: TV, MOVIE, OVA, ONA, MANGA, NOVEL, etc.'),
|
|
68
|
+
status: z.string().nullable().describe('Production status.'),
|
|
69
|
+
season: z
|
|
70
|
+
.string()
|
|
71
|
+
.nullable()
|
|
72
|
+
.describe('Broadcast season label, e.g. "FALL 2023", or null.'),
|
|
73
|
+
season_year: z.number().int().nullable().describe('Year of the season, or null.'),
|
|
74
|
+
episodes: z.number().int().nullable().describe('Episode count, or null.'),
|
|
75
|
+
chapters: z.number().int().nullable().describe('Chapter count, or null.'),
|
|
76
|
+
mean_score: z.number().nullable().describe('AniList mean score 0–100, or null.'),
|
|
77
|
+
is_adult: z.boolean().describe('Whether marked adult/NSFW.'),
|
|
78
|
+
cover_image_url: z.string().nullable().describe('Cover image URL, or null.'),
|
|
79
|
+
relation_to_root: z
|
|
80
|
+
.string()
|
|
81
|
+
.nullable()
|
|
82
|
+
.describe('How this entry relates to the root, or null for the root itself.'),
|
|
83
|
+
watch_order_category: z
|
|
84
|
+
.enum(['main', 'supplementary'])
|
|
85
|
+
.describe('"main" for canonical story (prequels, source, sequels). ' +
|
|
86
|
+
'"supplementary" for side stories, OVAs, specials, and spin-offs.'),
|
|
87
|
+
is_root: z.boolean().describe('True for the traversal root entry.'),
|
|
88
|
+
})
|
|
89
|
+
.describe('A franchise entry in watch/read order.'))
|
|
90
|
+
.describe('All franchise entries in suggested watch/read order. ' +
|
|
91
|
+
'Main entries first, then supplementary. Within each group, ordered by relation type priority then season year.'),
|
|
92
|
+
}),
|
|
93
|
+
errors: [
|
|
94
|
+
{
|
|
95
|
+
reason: 'not_found',
|
|
96
|
+
code: JsonRpcErrorCode.NotFound,
|
|
97
|
+
when: 'Root media ID not found on AniList',
|
|
98
|
+
recovery: 'Use anime_search_media to find a valid AniList ID and retry.',
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
async handler(input, ctx) {
|
|
102
|
+
ctx.log.info('Walking franchise relations', { id: input.id, maxDepth: input.max_depth });
|
|
103
|
+
// `enqueued` prevents duplicate BFS queue entries. `visited` is the result map —
|
|
104
|
+
// populated as each node is discovered (from parent edge data) and updated with
|
|
105
|
+
// the correct depth as traversal proceeds.
|
|
106
|
+
const enqueued = new Set([input.id]);
|
|
107
|
+
const visited = new Map();
|
|
108
|
+
let maxDepthReached = 0;
|
|
109
|
+
// BFS queue: items whose relations we still need to fetch
|
|
110
|
+
const toVisit = [{ id: input.id, depth: 0 }];
|
|
111
|
+
while (toVisit.length > 0) {
|
|
112
|
+
const item = toVisit.shift();
|
|
113
|
+
if (item.depth > input.max_depth)
|
|
114
|
+
continue;
|
|
115
|
+
maxDepthReached = Math.max(maxDepthReached, item.depth);
|
|
116
|
+
const edges = await anilist.getMediaRelations(item.id);
|
|
117
|
+
if (item.depth === 0 && edges === null) {
|
|
118
|
+
throw ctx.fail('not_found', `No media found with AniList ID ${input.id}`);
|
|
119
|
+
}
|
|
120
|
+
if (edges === null)
|
|
121
|
+
continue;
|
|
122
|
+
// For the root, fetch full info to have a complete node
|
|
123
|
+
if (item.depth === 0) {
|
|
124
|
+
const rootMedia = await anilist.getMediaById(input.id);
|
|
125
|
+
if (!rootMedia) {
|
|
126
|
+
throw ctx.fail('not_found', `No media found with AniList ID ${input.id}`);
|
|
127
|
+
}
|
|
128
|
+
visited.set(input.id, {
|
|
129
|
+
node: rootMedia,
|
|
130
|
+
relationType: null,
|
|
131
|
+
depth: 0,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
// Process edges: register unseen nodes and enqueue for further traversal
|
|
135
|
+
for (const edge of edges) {
|
|
136
|
+
const childId = edge.node.id;
|
|
137
|
+
if (!enqueued.has(childId)) {
|
|
138
|
+
enqueued.add(childId);
|
|
139
|
+
visited.set(childId, {
|
|
140
|
+
node: edge.node,
|
|
141
|
+
relationType: edge.relationType,
|
|
142
|
+
depth: item.depth + 1,
|
|
143
|
+
});
|
|
144
|
+
if (item.depth + 1 <= input.max_depth) {
|
|
145
|
+
toVisit.push({ id: childId, depth: item.depth + 1 });
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// Sort for watch order
|
|
151
|
+
const entries = Array.from(visited.values());
|
|
152
|
+
entries.sort((a, b) => {
|
|
153
|
+
const aPriority = RELATION_ORDER[a.relationType ?? 'OTHER'] ?? 11;
|
|
154
|
+
const bPriority = RELATION_ORDER[b.relationType ?? 'OTHER'] ?? 11;
|
|
155
|
+
if (aPriority !== bPriority)
|
|
156
|
+
return aPriority - bPriority;
|
|
157
|
+
const aYear = a.node.seasonYear ?? 9999;
|
|
158
|
+
const bYear = b.node.seasonYear ?? 9999;
|
|
159
|
+
return aYear - bYear;
|
|
160
|
+
});
|
|
161
|
+
return {
|
|
162
|
+
root_id: input.id,
|
|
163
|
+
total_entries: visited.size,
|
|
164
|
+
depth_reached: maxDepthReached,
|
|
165
|
+
entries: entries.map((e) => ({
|
|
166
|
+
id: e.node.id,
|
|
167
|
+
id_mal: e.node.idMal ?? null,
|
|
168
|
+
title: e.node.title.romaji,
|
|
169
|
+
title_english: e.node.title.english,
|
|
170
|
+
type: e.node.type ?? null,
|
|
171
|
+
format: e.node.format ?? null,
|
|
172
|
+
status: e.node.status ?? null,
|
|
173
|
+
season: e.node.season && e.node.seasonYear
|
|
174
|
+
? `${e.node.season} ${e.node.seasonYear}`
|
|
175
|
+
: (e.node.season ?? null),
|
|
176
|
+
season_year: e.node.seasonYear ?? null,
|
|
177
|
+
episodes: e.node.episodes ?? null,
|
|
178
|
+
chapters: e.node.chapters ?? null,
|
|
179
|
+
mean_score: e.node.meanScore ?? null,
|
|
180
|
+
is_adult: e.node.isAdult,
|
|
181
|
+
cover_image_url: e.node.coverImage?.large ?? null,
|
|
182
|
+
relation_to_root: e.relationType ?? null,
|
|
183
|
+
watch_order_category: (SUPPLEMENTARY_TYPES.has(e.relationType ?? '')
|
|
184
|
+
? 'supplementary'
|
|
185
|
+
: 'main'),
|
|
186
|
+
is_root: e.node.id === input.id,
|
|
187
|
+
})),
|
|
188
|
+
};
|
|
189
|
+
},
|
|
190
|
+
format: (result) => {
|
|
191
|
+
const lines = [
|
|
192
|
+
`## Franchise Watch Order (root: AL:${result.root_id})`,
|
|
193
|
+
`${result.total_entries} entries · depth ${result.depth_reached}`,
|
|
194
|
+
'',
|
|
195
|
+
];
|
|
196
|
+
const main = result.entries.filter((e) => e.watch_order_category === 'main');
|
|
197
|
+
const supplementary = result.entries.filter((e) => e.watch_order_category === 'supplementary');
|
|
198
|
+
if (main.length) {
|
|
199
|
+
lines.push('**Main story order:**');
|
|
200
|
+
for (let i = 0; i < main.length; i++) {
|
|
201
|
+
const e = main[i];
|
|
202
|
+
if (!e)
|
|
203
|
+
continue;
|
|
204
|
+
const title = e.title_english ?? e.title ?? 'Unknown';
|
|
205
|
+
const score = e.mean_score !== null ? ` (${e.mean_score}/100)` : '';
|
|
206
|
+
const ep = e.episodes !== null
|
|
207
|
+
? ` · ${e.episodes} eps`
|
|
208
|
+
: e.chapters !== null
|
|
209
|
+
? ` · ${e.chapters} ch`
|
|
210
|
+
: '';
|
|
211
|
+
const rel = e.is_root ? ' ← ROOT' : e.relation_to_root ? ` [${e.relation_to_root}]` : '';
|
|
212
|
+
const typeLabel = e.type ? ` type:${e.type}` : '';
|
|
213
|
+
const fmt = e.format ? ` fmt:${e.format}` : '';
|
|
214
|
+
const status = e.status ? ` status:${e.status}` : '';
|
|
215
|
+
const season = e.season ? ` season:${e.season}` : '';
|
|
216
|
+
const seasonYear = e.season_year !== null ? ` season_year:${e.season_year}` : '';
|
|
217
|
+
const adult = e.is_adult ? ' [Adult]' : '';
|
|
218
|
+
const cover = e.cover_image_url ? ` cover:${e.cover_image_url}` : '';
|
|
219
|
+
const malId = e.id_mal !== null ? `/MAL:${e.id_mal}` : '';
|
|
220
|
+
const chap = e.chapters !== null ? ` chapters:${e.chapters}` : '';
|
|
221
|
+
lines.push(`${i + 1}. **${title}** (${e.title ?? '?'}) [AL:${e.id}${malId}]${typeLabel}${fmt}${status}${score}${ep}${chap}${season}${seasonYear}${adult}${rel}`, ` relation_to_root: ${e.relation_to_root ?? 'root'} | is_root: ${e.is_root} | is_adult: ${e.is_adult}${cover}`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
if (supplementary.length) {
|
|
225
|
+
lines.push('', '**Supplementary (side stories, OVAs, spin-offs):**');
|
|
226
|
+
for (const e of supplementary) {
|
|
227
|
+
const title = e.title_english ?? e.title ?? 'Unknown';
|
|
228
|
+
const score = e.mean_score !== null ? ` (${e.mean_score}/100)` : '';
|
|
229
|
+
const fmt = e.format ? ` fmt:${e.format}` : '';
|
|
230
|
+
const rel = e.relation_to_root ? ` [${e.relation_to_root}]` : '';
|
|
231
|
+
const typeLabel = e.type ? ` type:${e.type}` : '';
|
|
232
|
+
const status = e.status ? ` status:${e.status}` : '';
|
|
233
|
+
const season = e.season ? ` season:${e.season}` : '';
|
|
234
|
+
const seasonYear = e.season_year !== null ? ` season_year:${e.season_year}` : '';
|
|
235
|
+
const adult = e.is_adult ? ' [Adult]' : '';
|
|
236
|
+
const cover = e.cover_image_url ? ` cover:${e.cover_image_url}` : '';
|
|
237
|
+
const malId = e.id_mal !== null ? `/MAL:${e.id_mal}` : '';
|
|
238
|
+
const chap = e.chapters !== null ? ` chapters:${e.chapters}` : '';
|
|
239
|
+
lines.push(`- **${title}** (${e.title ?? '?'}) [AL:${e.id}${malId}]${typeLabel}${fmt}${status}${score}${chap}${season}${seasonYear}${adult}${rel}`, ` relation_to_root: ${e.relation_to_root ?? '?'} | is_root: ${e.is_root} | is_adult: ${e.is_adult}${cover}`);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return [{ type: 'text', text: lines.join('\n') }];
|
|
243
|
+
},
|
|
244
|
+
});
|
|
245
|
+
//# sourceMappingURL=anime-get-relations.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anime-get-relations.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/anime-get-relations.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,OAAO,MAAM,uCAAuC,CAAC;AAGjE,wEAAwE;AACxE,MAAM,cAAc,GAA2B;IAC7C,MAAM,EAAE,CAAC;IACT,UAAU,EAAE,CAAC;IACb,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,WAAW,EAAE,CAAC;IACd,QAAQ,EAAE,CAAC;IACX,WAAW,EAAE,CAAC;IACd,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,CAAC;IACZ,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;CACX,CAAC;AAEF,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,YAAY;IACZ,UAAU;IACV,WAAW;IACX,OAAO;IACP,aAAa;IACb,SAAS;IACT,UAAU;IACV,aAAa;CACd,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,EAAE;IAC3D,WAAW,EACT,4FAA4F;QAC5F,8FAA8F;QAC9F,0FAA0F;QAC1F,8CAA8C;IAChD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;IAEzD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iDAAiD,CAAC;QACvF,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,CAAC,CAAC;aACN,OAAO,CAAC,CAAC,CAAC;aACV,QAAQ,CACP,sEAAsE;YACpE,mFAAmF,CACtF;KACJ,CAAC;IAEF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;QAChF,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;QAC5F,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QAC3E,OAAO,EAAE,CAAC;aACP,KAAK,CACJ,CAAC;aACE,MAAM,CAAC;YACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YAClD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YACxE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YACzD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YACxE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YACnE,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,iDAAiD,CAAC;YAC9D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAC5D,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,oDAAoD,CAAC;YACjE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;YACjF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YACzE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YACzE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YAChF,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YAC5D,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;YAC5E,gBAAgB,EAAE,CAAC;iBAChB,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,kEAAkE,CAAC;YAC/E,oBAAoB,EAAE,CAAC;iBACpB,IAAI,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;iBAC/B,QAAQ,CACP,0DAA0D;gBACxD,kEAAkE,CACrE;YACH,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;SACpE,CAAC;aACD,QAAQ,CAAC,wCAAwC,CAAC,CACtD;aACA,QAAQ,CACP,uDAAuD;YACrD,gHAAgH,CACnH;KACJ,CAAC;IAEF,MAAM,EAAE;QACN;YACE,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,gBAAgB,CAAC,QAAQ;YAC/B,IAAI,EAAE,oCAAoC;YAC1C,QAAQ,EAAE,8DAA8D;SACzE;KACF;IAED,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QAQzF,iFAAiF;QACjF,gFAAgF;QAChF,2CAA2C;QAC3C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;QAChD,IAAI,eAAe,GAAG,CAAC,CAAC;QAExB,0DAA0D;QAC1D,MAAM,OAAO,GAAyC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAEnF,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAG,CAAC;YAC9B,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,SAAS;gBAAE,SAAS;YAE3C,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAExD,MAAM,KAAK,GAA+B,MAAM,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEnF,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACvC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,kCAAkC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5E,CAAC;YAED,IAAI,KAAK,KAAK,IAAI;gBAAE,SAAS;YAE7B,wDAAwD;YACxD,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;gBACrB,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACvD,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,kCAAkC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC5E,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE;oBACpB,IAAI,EAAE,SAAiC;oBACvC,YAAY,EAAE,IAAI;oBAClB,KAAK,EAAE,CAAC;iBACT,CAAC,CAAC;YACL,CAAC;YAED,yEAAyE;YACzE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3B,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBACtB,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE;wBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,YAAY,EAAE,IAAI,CAAC,YAAY;wBAC/B,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC;qBACtB,CAAC,CAAC;oBACH,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;wBACtC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;oBACvD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACpB,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAClE,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAClE,IAAI,SAAS,KAAK,SAAS;gBAAE,OAAO,SAAS,GAAG,SAAS,CAAC;YAC1D,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;YACxC,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;YACxC,OAAO,KAAK,GAAG,KAAK,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,aAAa,EAAE,OAAO,CAAC,IAAI;YAC3B,aAAa,EAAE,eAAe;YAC9B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3B,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE;gBACb,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI;gBAC5B,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;gBAC1B,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO;gBACnC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI;gBACzB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI;gBAC7B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI;gBAC7B,MAAM,EACJ,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU;oBAChC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE;oBACzC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;gBAC7B,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI;gBACtC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI;gBACjC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI;gBACjC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI;gBACpC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO;gBACxB,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,IAAI;gBACjD,gBAAgB,EAAE,CAAC,CAAC,YAAY,IAAI,IAAI;gBACxC,oBAAoB,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC;oBAClE,CAAC,CAAC,eAAe;oBACjB,CAAC,CAAC,MAAM,CAA6B;gBACvC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE;aAChC,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;QACjB,MAAM,KAAK,GAAa;YACtB,sCAAsC,MAAM,CAAC,OAAO,GAAG;YACvD,GAAG,MAAM,CAAC,aAAa,oBAAoB,MAAM,CAAC,aAAa,EAAE;YACjE,EAAE;SACH,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,oBAAoB,KAAK,MAAM,CAAC,CAAC;QAC7E,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,oBAAoB,KAAK,eAAe,CAAC,CAAC;QAE/F,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,IAAI,CAAC,CAAC;oBAAE,SAAS;gBACjB,MAAM,KAAK,GAAG,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC;gBACtD,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpE,MAAM,EAAE,GACN,CAAC,CAAC,QAAQ,KAAK,IAAI;oBACjB,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,MAAM;oBACxB,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI;wBACnB,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK;wBACvB,CAAC,CAAC,EAAE,CAAC;gBACX,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzF,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrD,MAAM,UAAU,GAAG,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjF,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,MAAM,KAAK,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrE,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1D,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClE,KAAK,CAAC,IAAI,CACR,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,KAAK,IAAI,GAAG,SAAS,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,SAAS,GAAG,GAAG,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,IAAI,GAAG,MAAM,GAAG,UAAU,GAAG,KAAK,GAAG,GAAG,EAAE,EACpJ,wBAAwB,CAAC,CAAC,gBAAgB,IAAI,MAAM,eAAe,CAAC,CAAC,OAAO,gBAAgB,CAAC,CAAC,QAAQ,GAAG,KAAK,EAAE,CACjH,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,oDAAoD,CAAC,CAAC;YACrE,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;gBAC9B,MAAM,KAAK,GAAG,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC;gBACtD,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpE,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,MAAM,GAAG,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjE,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrD,MAAM,UAAU,GAAG,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjF,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,MAAM,KAAK,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrE,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1D,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClE,KAAK,CAAC,IAAI,CACR,OAAO,KAAK,OAAO,CAAC,CAAC,KAAK,IAAI,GAAG,SAAS,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,SAAS,GAAG,GAAG,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,MAAM,GAAG,UAAU,GAAG,KAAK,GAAG,GAAG,EAAE,EACvI,uBAAuB,CAAC,CAAC,gBAAgB,IAAI,GAAG,eAAe,CAAC,CAAC,OAAO,gBAAgB,CAAC,CAAC,QAAQ,GAAG,KAAK,EAAE,CAC7G,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview anime_get_schedule tool — airing schedule for a season or upcoming episode window.
|
|
3
|
+
* @module mcp-server/tools/definitions/anime-get-schedule.tool
|
|
4
|
+
*/
|
|
5
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
export declare const animeGetSchedule: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
8
|
+
mode: z.ZodEnum<{
|
|
9
|
+
season: "season";
|
|
10
|
+
upcoming: "upcoming";
|
|
11
|
+
}>;
|
|
12
|
+
season: z.ZodOptional<z.ZodEnum<{
|
|
13
|
+
WINTER: "WINTER";
|
|
14
|
+
SPRING: "SPRING";
|
|
15
|
+
SUMMER: "SUMMER";
|
|
16
|
+
FALL: "FALL";
|
|
17
|
+
}>>;
|
|
18
|
+
season_year: z.ZodOptional<z.ZodNumber>;
|
|
19
|
+
days_ahead: z.ZodDefault<z.ZodNumber>;
|
|
20
|
+
page: z.ZodDefault<z.ZodNumber>;
|
|
21
|
+
per_page: z.ZodDefault<z.ZodNumber>;
|
|
22
|
+
include_adult: z.ZodDefault<z.ZodBoolean>;
|
|
23
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
24
|
+
mode: z.ZodEnum<{
|
|
25
|
+
season: "season";
|
|
26
|
+
upcoming: "upcoming";
|
|
27
|
+
}>;
|
|
28
|
+
season_label: z.ZodNullable<z.ZodString>;
|
|
29
|
+
page: z.ZodNumber;
|
|
30
|
+
has_next_page: z.ZodBoolean;
|
|
31
|
+
total_results: z.ZodNullable<z.ZodNumber>;
|
|
32
|
+
entries: z.ZodArray<z.ZodObject<{
|
|
33
|
+
id: z.ZodNumber;
|
|
34
|
+
title: z.ZodNullable<z.ZodString>;
|
|
35
|
+
title_english: z.ZodNullable<z.ZodString>;
|
|
36
|
+
format: z.ZodNullable<z.ZodString>;
|
|
37
|
+
status: z.ZodNullable<z.ZodString>;
|
|
38
|
+
episodes: z.ZodNullable<z.ZodNumber>;
|
|
39
|
+
mean_score: z.ZodNullable<z.ZodNumber>;
|
|
40
|
+
cover_image_url: z.ZodNullable<z.ZodString>;
|
|
41
|
+
next_episode: z.ZodNullable<z.ZodNumber>;
|
|
42
|
+
next_airing_at_utc: z.ZodNullable<z.ZodString>;
|
|
43
|
+
time_until_airing_seconds: z.ZodNullable<z.ZodNumber>;
|
|
44
|
+
}, z.core.$strip>>;
|
|
45
|
+
}, z.core.$strip>, readonly [{
|
|
46
|
+
readonly reason: "invalid_season";
|
|
47
|
+
readonly code: JsonRpcErrorCode.InvalidParams;
|
|
48
|
+
readonly when: "mode is \"season\" but season or season_year is missing";
|
|
49
|
+
readonly recovery: "Provide both season (WINTER/SPRING/SUMMER/FALL) and season_year (e.g. 2024) when using mode \"season\".";
|
|
50
|
+
}], undefined>;
|
|
51
|
+
//# sourceMappingURL=anime-get-schedule.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anime-get-schedule.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/anime-get-schedule.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AASjE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAgO3B,CAAC"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview anime_get_schedule tool — airing schedule for a season or upcoming episode window.
|
|
3
|
+
* @module mcp-server/tools/definitions/anime-get-schedule.tool
|
|
4
|
+
*/
|
|
5
|
+
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
import * as anilist from '../../../services/anilist/anilist-service.js';
|
|
8
|
+
const SeasonEnum = z
|
|
9
|
+
.enum(['WINTER', 'SPRING', 'SUMMER', 'FALL'])
|
|
10
|
+
.describe('Anime broadcast season. WINTER=Jan–Mar, SPRING=Apr–Jun, SUMMER=Jul–Sep, FALL=Oct–Dec.');
|
|
11
|
+
export const animeGetSchedule = tool('anime_get_schedule', {
|
|
12
|
+
description: 'Airing schedule for a season or upcoming episode window. ' +
|
|
13
|
+
'"season" mode returns all anime airing in a given season/year. ' +
|
|
14
|
+
'"upcoming" mode returns next episode for airing titles within a date window, with UTC timestamps.',
|
|
15
|
+
annotations: { readOnlyHint: true, openWorldHint: true },
|
|
16
|
+
input: z.object({
|
|
17
|
+
mode: z
|
|
18
|
+
.enum(['season', 'upcoming'])
|
|
19
|
+
.describe('"season": all anime from a specific season/year. Requires season and season_year. ' +
|
|
20
|
+
'"upcoming": next airing episode for each currently-airing title within days_ahead window.'),
|
|
21
|
+
season: SeasonEnum.optional(),
|
|
22
|
+
season_year: z
|
|
23
|
+
.number()
|
|
24
|
+
.int()
|
|
25
|
+
.min(1940)
|
|
26
|
+
.max(2100)
|
|
27
|
+
.optional()
|
|
28
|
+
.describe('4-digit year. Required with mode "season".'),
|
|
29
|
+
days_ahead: z
|
|
30
|
+
.number()
|
|
31
|
+
.int()
|
|
32
|
+
.min(1)
|
|
33
|
+
.max(30)
|
|
34
|
+
.default(7)
|
|
35
|
+
.describe('Days ahead to look for upcoming episodes. Used only in "upcoming" mode. Default 7.'),
|
|
36
|
+
page: z.number().int().min(1).default(1).describe('1-based page number.'),
|
|
37
|
+
per_page: z.number().int().min(1).max(50).default(25).describe('Results per page. Maximum 50.'),
|
|
38
|
+
include_adult: z.boolean().default(false).describe('Include adult/NSFW titles. Default false.'),
|
|
39
|
+
}),
|
|
40
|
+
output: z.object({
|
|
41
|
+
mode: z.enum(['season', 'upcoming']).describe('Mode used for this response.'),
|
|
42
|
+
season_label: z
|
|
43
|
+
.string()
|
|
44
|
+
.nullable()
|
|
45
|
+
.describe('Human-readable season label, e.g. "FALL 2024", or null for upcoming mode.'),
|
|
46
|
+
page: z.number().int().describe('Current page number.'),
|
|
47
|
+
has_next_page: z.boolean().describe('Whether more pages are available.'),
|
|
48
|
+
total_results: z
|
|
49
|
+
.number()
|
|
50
|
+
.int()
|
|
51
|
+
.nullable()
|
|
52
|
+
.describe('Total entries in this season, or null for upcoming mode.'),
|
|
53
|
+
entries: z
|
|
54
|
+
.array(z
|
|
55
|
+
.object({
|
|
56
|
+
id: z.number().int().describe('AniList media ID.'),
|
|
57
|
+
title: z.string().nullable().describe('Romanized title.'),
|
|
58
|
+
title_english: z.string().nullable().describe('English title, or null.'),
|
|
59
|
+
format: z.string().nullable().describe('Format: TV, ONA, OVA, etc.'),
|
|
60
|
+
status: z.string().nullable().describe('Production status.'),
|
|
61
|
+
episodes: z.number().int().nullable().describe('Total episode count, or null.'),
|
|
62
|
+
mean_score: z.number().nullable().describe('AniList mean score 0–100, or null.'),
|
|
63
|
+
cover_image_url: z.string().nullable().describe('Cover image URL, or null.'),
|
|
64
|
+
next_episode: z
|
|
65
|
+
.number()
|
|
66
|
+
.int()
|
|
67
|
+
.nullable()
|
|
68
|
+
.describe('Next episode number, or null if not currently airing.'),
|
|
69
|
+
next_airing_at_utc: z
|
|
70
|
+
.string()
|
|
71
|
+
.nullable()
|
|
72
|
+
.describe('UTC ISO 8601 timestamp of next airing, or null.'),
|
|
73
|
+
time_until_airing_seconds: z
|
|
74
|
+
.number()
|
|
75
|
+
.int()
|
|
76
|
+
.nullable()
|
|
77
|
+
.describe('Seconds until next airing, or null.'),
|
|
78
|
+
})
|
|
79
|
+
.describe('An anime schedule entry.'))
|
|
80
|
+
.describe('Anime entries in the schedule.'),
|
|
81
|
+
}),
|
|
82
|
+
errors: [
|
|
83
|
+
{
|
|
84
|
+
reason: 'invalid_season',
|
|
85
|
+
code: JsonRpcErrorCode.InvalidParams,
|
|
86
|
+
when: 'mode is "season" but season or season_year is missing',
|
|
87
|
+
recovery: 'Provide both season (WINTER/SPRING/SUMMER/FALL) and season_year (e.g. 2024) when using mode "season".',
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
async handler(input, ctx) {
|
|
91
|
+
if (input.mode === 'season') {
|
|
92
|
+
if (!input.season || !input.season_year) {
|
|
93
|
+
throw ctx.fail('invalid_season', 'mode "season" requires both season and season_year parameters');
|
|
94
|
+
}
|
|
95
|
+
ctx.log.info('Fetching season schedule', { season: input.season, year: input.season_year });
|
|
96
|
+
const page = await anilist.getSeasonSchedule({
|
|
97
|
+
season: input.season,
|
|
98
|
+
seasonYear: input.season_year,
|
|
99
|
+
page: input.page,
|
|
100
|
+
perPage: input.per_page,
|
|
101
|
+
includeAdult: input.include_adult,
|
|
102
|
+
});
|
|
103
|
+
return {
|
|
104
|
+
mode: 'season',
|
|
105
|
+
season_label: `${input.season} ${input.season_year}`,
|
|
106
|
+
page: page.pageInfo.currentPage,
|
|
107
|
+
has_next_page: page.pageInfo.hasNextPage,
|
|
108
|
+
total_results: page.pageInfo.total ?? null,
|
|
109
|
+
entries: page.media.map((m) => ({
|
|
110
|
+
id: m.id,
|
|
111
|
+
title: m.title.romaji,
|
|
112
|
+
title_english: m.title.english,
|
|
113
|
+
format: m.format ?? null,
|
|
114
|
+
status: m.status ?? null,
|
|
115
|
+
episodes: m.episodes ?? null,
|
|
116
|
+
mean_score: m.meanScore ?? null,
|
|
117
|
+
cover_image_url: m.coverImage?.large ?? null,
|
|
118
|
+
next_episode: m.nextAiringEpisode?.episode ?? null,
|
|
119
|
+
next_airing_at_utc: m.nextAiringEpisode
|
|
120
|
+
? new Date(m.nextAiringEpisode.airingAt * 1000).toISOString()
|
|
121
|
+
: null,
|
|
122
|
+
time_until_airing_seconds: m.nextAiringEpisode?.timeUntilAiring ?? null,
|
|
123
|
+
})),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
// upcoming mode
|
|
127
|
+
ctx.log.info('Fetching upcoming episodes', { daysAhead: input.days_ahead });
|
|
128
|
+
const schedules = await anilist.getUpcomingEpisodes({
|
|
129
|
+
daysAhead: input.days_ahead,
|
|
130
|
+
page: input.page,
|
|
131
|
+
perPage: input.per_page,
|
|
132
|
+
});
|
|
133
|
+
// Sort by airing time
|
|
134
|
+
schedules.sort((a, b) => a.airingAt - b.airingAt);
|
|
135
|
+
return {
|
|
136
|
+
mode: 'upcoming',
|
|
137
|
+
season_label: null,
|
|
138
|
+
page: input.page,
|
|
139
|
+
has_next_page: schedules.length >= input.per_page,
|
|
140
|
+
total_results: null,
|
|
141
|
+
entries: schedules.map((s) => ({
|
|
142
|
+
id: s.media.id,
|
|
143
|
+
title: s.media.title.romaji,
|
|
144
|
+
title_english: s.media.title.english,
|
|
145
|
+
format: s.media.format ?? null,
|
|
146
|
+
status: s.media.status ?? null,
|
|
147
|
+
episodes: s.media.episodes ?? null,
|
|
148
|
+
mean_score: s.media.meanScore ?? null,
|
|
149
|
+
cover_image_url: s.media.coverImage?.large ?? null,
|
|
150
|
+
next_episode: s.episode,
|
|
151
|
+
next_airing_at_utc: new Date(s.airingAt * 1000).toISOString(),
|
|
152
|
+
time_until_airing_seconds: s.timeUntilAiring,
|
|
153
|
+
})),
|
|
154
|
+
};
|
|
155
|
+
},
|
|
156
|
+
format: (result) => {
|
|
157
|
+
const lines = [];
|
|
158
|
+
if (result.mode === 'season') {
|
|
159
|
+
lines.push(`## ${result.season_label} Anime Schedule`, `${result.total_results !== null ? `${result.total_results} titles` : 'Results'} · page ${result.page}`, '');
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
lines.push('## Upcoming Airing Episodes', `Page ${result.page}`, '');
|
|
163
|
+
}
|
|
164
|
+
if (result.entries.length === 0) {
|
|
165
|
+
lines.push('No entries found.');
|
|
166
|
+
return [{ type: 'text', text: lines.join('\n') }];
|
|
167
|
+
}
|
|
168
|
+
for (const entry of result.entries) {
|
|
169
|
+
const displayTitle = entry.title_english ?? entry.title ?? 'Unknown';
|
|
170
|
+
const score = entry.mean_score !== null ? ` · ${entry.mean_score}/100` : '';
|
|
171
|
+
const fmt = entry.format ? ` · ${entry.format}` : '';
|
|
172
|
+
const status = entry.status ? ` status:${entry.status}` : '';
|
|
173
|
+
const cover = entry.cover_image_url ? ` cover:${entry.cover_image_url}` : '';
|
|
174
|
+
const titleRomaji = entry.title ? ` title:${entry.title}` : '';
|
|
175
|
+
if (result.mode === 'upcoming' && entry.next_airing_at_utc) {
|
|
176
|
+
const seconds = entry.time_until_airing_seconds ?? 0;
|
|
177
|
+
const hours = Math.floor(seconds / 3600);
|
|
178
|
+
const days = Math.floor(hours / 24);
|
|
179
|
+
const countdown = days > 0 ? `${days}d ${hours % 24}h` : `${hours}h`;
|
|
180
|
+
lines.push(`**${displayTitle}** [AL:${entry.id}]${fmt}${score}${status}${titleRomaji}`, ` Ep ${entry.next_episode} in **${countdown}** — ${entry.next_airing_at_utc} (time_until_airing_seconds:${entry.time_until_airing_seconds ?? 0})${cover}`);
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
const ep = entry.episodes !== null ? ` · ${entry.episodes} eps` : '';
|
|
184
|
+
const airing = entry.next_airing_at_utc
|
|
185
|
+
? ` · Next ep ${entry.next_episode}: ${entry.next_airing_at_utc} (time_until_airing_seconds:${entry.time_until_airing_seconds ?? 0})`
|
|
186
|
+
: '';
|
|
187
|
+
lines.push(`**${displayTitle}** [AL:${entry.id}]${fmt}${ep}${score}${status}${airing}${titleRomaji}${cover}`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if (result.has_next_page) {
|
|
191
|
+
lines.push('', `_More results available (page ${result.page + 1})._`);
|
|
192
|
+
}
|
|
193
|
+
return [{ type: 'text', text: lines.join('\n') }];
|
|
194
|
+
},
|
|
195
|
+
});
|
|
196
|
+
//# sourceMappingURL=anime-get-schedule.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anime-get-schedule.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/anime-get-schedule.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview anime_get_studio tool — studio filmography by name or AniList studio ID.
|
|
3
|
+
* @module mcp-server/tools/definitions/anime-get-studio.tool
|
|
4
|
+
*/
|
|
5
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
export declare const animeGetStudio: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
8
|
+
name: z.ZodOptional<z.ZodString>;
|
|
9
|
+
id: z.ZodOptional<z.ZodNumber>;
|
|
10
|
+
sort: z.ZodDefault<z.ZodEnum<{
|
|
11
|
+
SCORE_DESC: "SCORE_DESC";
|
|
12
|
+
POPULARITY_DESC: "POPULARITY_DESC";
|
|
13
|
+
START_DATE_DESC: "START_DATE_DESC";
|
|
14
|
+
START_DATE: "START_DATE";
|
|
15
|
+
}>>;
|
|
16
|
+
page: z.ZodDefault<z.ZodNumber>;
|
|
17
|
+
per_page: z.ZodDefault<z.ZodNumber>;
|
|
18
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
19
|
+
studio_id: z.ZodNumber;
|
|
20
|
+
studio_name: z.ZodString;
|
|
21
|
+
is_animation_studio: z.ZodBoolean;
|
|
22
|
+
studio_site_url: z.ZodNullable<z.ZodString>;
|
|
23
|
+
page: z.ZodNumber;
|
|
24
|
+
has_next_page: z.ZodBoolean;
|
|
25
|
+
total_titles: z.ZodNullable<z.ZodNumber>;
|
|
26
|
+
filmography: z.ZodArray<z.ZodObject<{
|
|
27
|
+
id: z.ZodNumber;
|
|
28
|
+
id_mal: z.ZodNullable<z.ZodNumber>;
|
|
29
|
+
title: z.ZodNullable<z.ZodString>;
|
|
30
|
+
title_english: z.ZodNullable<z.ZodString>;
|
|
31
|
+
type: z.ZodEnum<{
|
|
32
|
+
ANIME: "ANIME";
|
|
33
|
+
MANGA: "MANGA";
|
|
34
|
+
}>;
|
|
35
|
+
format: z.ZodNullable<z.ZodString>;
|
|
36
|
+
status: z.ZodNullable<z.ZodString>;
|
|
37
|
+
season: z.ZodNullable<z.ZodString>;
|
|
38
|
+
season_year: z.ZodNullable<z.ZodNumber>;
|
|
39
|
+
episodes: z.ZodNullable<z.ZodNumber>;
|
|
40
|
+
mean_score: z.ZodNullable<z.ZodNumber>;
|
|
41
|
+
is_adult: z.ZodBoolean;
|
|
42
|
+
cover_image_url: z.ZodNullable<z.ZodString>;
|
|
43
|
+
}, z.core.$strip>>;
|
|
44
|
+
}, z.core.$strip>, readonly [{
|
|
45
|
+
readonly reason: "not_found";
|
|
46
|
+
readonly code: JsonRpcErrorCode.NotFound;
|
|
47
|
+
readonly when: "Neither name search nor ID lookup returns a result on AniList";
|
|
48
|
+
readonly recovery: "Check the studio name spelling (e.g. \"Kyoto Animation\" not \"KyoAni\") or use the correct AniList studio ID.";
|
|
49
|
+
}], undefined>;
|
|
50
|
+
//# sourceMappingURL=anime-get-studio.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anime-get-studio.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/anime-get-studio.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAmB,MAAM,+BAA+B,CAAC;AAGlF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAiLzB,CAAC"}
|