@ankimcp/anki-mcp-server 0.13.1 → 0.14.0

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/README.md CHANGED
@@ -48,7 +48,8 @@ For comprehensive guides, real-world examples, and step-by-step tutorials on usi
48
48
  - `changeDeck` - Move cards to a different deck
49
49
 
50
50
  ### Note Management
51
- - `addNote` - Create new notes
51
+ - `addNote` - Create a single note
52
+ - `addNotes` - Create multiple notes in batch (up to 100, partial success supported)
52
53
  - `findNotes` - Search for notes using Anki query syntax
53
54
  - `notesInfo` - Get detailed information about notes (fields, tags, CSS)
54
55
  - `updateNoteFields` - Update existing note fields (CSS-aware, supports HTML)
@@ -788,7 +789,7 @@ This project follows [Semantic Versioning](https://semver.org/) with a pre-1.0 d
788
789
  - Will be released when the API is stable and tested
789
790
  - Breaking changes will require major version bumps (2.0.0, etc.)
790
791
 
791
- **Current Status**: `0.8.0` - Active beta development. New features include integrated ngrok tunneling (`--ngrok` flag), the `twenty_rules` prompt for evidence-based flashcard creation, media file management, and improved prompt system. APIs may change based on feedback and testing.
792
+ **Current Status**: `0.14.0` - Active beta development. Recent features include batch note creation (`addNotes`), integrated ngrok tunneling (`--ngrok` flag), media file management, model/template management, and comprehensive deck statistics. APIs may change based on feedback and testing.
792
793
 
793
794
  ## Similar Projects
794
795
 
@@ -14,6 +14,7 @@ export { ModelStylingTool } from "./tools/model-styling.tool";
14
14
  export { CreateModelTool } from "./tools/create-model.tool";
15
15
  export { UpdateModelStylingTool } from "./tools/update-model-styling.tool";
16
16
  export { AddNoteTool } from "./tools/add-note.tool";
17
+ export { AddNotesTool } from "./tools/add-notes.tool";
17
18
  export { FindNotesTool } from "./tools/find-notes.tool";
18
19
  export { NotesInfoTool } from "./tools/notes-info.tool";
19
20
  export { UpdateNoteFieldsTool } from "./tools/update-note-fields.tool";
@@ -39,6 +40,7 @@ import { ModelStylingTool } from "./tools/model-styling.tool";
39
40
  import { CreateModelTool } from "./tools/create-model.tool";
40
41
  import { UpdateModelStylingTool } from "./tools/update-model-styling.tool";
41
42
  import { AddNoteTool } from "./tools/add-note.tool";
43
+ import { AddNotesTool } from "./tools/add-notes.tool";
42
44
  import { FindNotesTool } from "./tools/find-notes.tool";
43
45
  import { NotesInfoTool } from "./tools/notes-info.tool";
44
46
  import { UpdateNoteFieldsTool } from "./tools/update-note-fields.tool";
@@ -52,7 +54,7 @@ import { ReviewStatsTool } from "./tools/review-stats";
52
54
  import { ReviewSessionPrompt } from "./prompts/review-session.prompt";
53
55
  import { TwentyRulesPrompt } from "./prompts/twenty-rules.prompt";
54
56
  import { SystemInfoResource } from "./resources/system-info.resource";
55
- export declare const ESSENTIAL_MCP_TOOLS: (typeof SyncTool | typeof GetDueCardsTool | typeof GetCardsTool | typeof PresentCardTool | typeof RateCardTool | typeof ModelNamesTool | typeof ModelFieldNamesTool | typeof ModelStylingTool | typeof CreateModelTool | typeof UpdateModelStylingTool | typeof AddNoteTool | typeof FindNotesTool | typeof NotesInfoTool | typeof UpdateNoteFieldsTool | typeof DeleteNotesTool | typeof MediaActionsTool | typeof GetTagsTool | typeof TagActionsTool | typeof DeckActionsTool | typeof CollectionStatsTool | typeof ReviewStatsTool | typeof ReviewSessionPrompt | typeof TwentyRulesPrompt | typeof SystemInfoResource)[];
57
+ export declare const ESSENTIAL_MCP_TOOLS: (typeof SyncTool | typeof GetDueCardsTool | typeof GetCardsTool | typeof PresentCardTool | typeof RateCardTool | typeof ModelNamesTool | typeof ModelFieldNamesTool | typeof ModelStylingTool | typeof CreateModelTool | typeof UpdateModelStylingTool | typeof AddNoteTool | typeof AddNotesTool | typeof FindNotesTool | typeof NotesInfoTool | typeof UpdateNoteFieldsTool | typeof DeleteNotesTool | typeof MediaActionsTool | typeof GetTagsTool | typeof TagActionsTool | typeof DeckActionsTool | typeof CollectionStatsTool | typeof ReviewStatsTool | typeof ReviewSessionPrompt | typeof TwentyRulesPrompt | typeof SystemInfoResource)[];
56
58
  export interface McpPrimitivesAnkiEssentialModuleOptions {
57
59
  ankiConfigProvider: Provider;
58
60
  }
@@ -21,7 +21,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
21
21
  };
22
22
  var McpPrimitivesAnkiEssentialModule_1;
23
23
  Object.defineProperty(exports, "__esModule", { value: true });
24
- exports.McpPrimitivesAnkiEssentialModule = exports.ESSENTIAL_MCP_TOOLS = exports.SystemInfoResource = exports.TwentyRulesPrompt = exports.ReviewSessionPrompt = exports.ReviewStatsTool = exports.CollectionStatsTool = exports.DeckActionsTool = exports.TagActionsTool = exports.GetTagsTool = exports.MediaActionsTool = exports.DeleteNotesTool = exports.UpdateNoteFieldsTool = exports.NotesInfoTool = exports.FindNotesTool = exports.AddNoteTool = exports.UpdateModelStylingTool = exports.CreateModelTool = exports.ModelStylingTool = exports.ModelFieldNamesTool = exports.ModelNamesTool = exports.RateCardTool = exports.PresentCardTool = exports.GetCardsTool = exports.GetDueCardsTool = exports.SyncTool = exports.ReadOnlyModeError = exports.AnkiConnectError = exports.AnkiConnectClient = exports.ANKI_CONFIG = void 0;
24
+ exports.McpPrimitivesAnkiEssentialModule = exports.ESSENTIAL_MCP_TOOLS = exports.SystemInfoResource = exports.TwentyRulesPrompt = exports.ReviewSessionPrompt = exports.ReviewStatsTool = exports.CollectionStatsTool = exports.DeckActionsTool = exports.TagActionsTool = exports.GetTagsTool = exports.MediaActionsTool = exports.DeleteNotesTool = exports.UpdateNoteFieldsTool = exports.NotesInfoTool = exports.FindNotesTool = exports.AddNotesTool = exports.AddNoteTool = exports.UpdateModelStylingTool = exports.CreateModelTool = exports.ModelStylingTool = exports.ModelFieldNamesTool = exports.ModelNamesTool = exports.RateCardTool = exports.PresentCardTool = exports.GetCardsTool = exports.GetDueCardsTool = exports.SyncTool = exports.ReadOnlyModeError = exports.AnkiConnectError = exports.AnkiConnectClient = exports.ANKI_CONFIG = void 0;
25
25
  var anki_config_interface_1 = require("../../config/anki-config.interface");
26
26
  Object.defineProperty(exports, "ANKI_CONFIG", { enumerable: true, get: function () { return anki_config_interface_1.ANKI_CONFIG; } });
27
27
  __exportStar(require("../../types/anki.types"), exports);
@@ -52,6 +52,8 @@ var update_model_styling_tool_1 = require("./tools/update-model-styling.tool");
52
52
  Object.defineProperty(exports, "UpdateModelStylingTool", { enumerable: true, get: function () { return update_model_styling_tool_1.UpdateModelStylingTool; } });
53
53
  var add_note_tool_1 = require("./tools/add-note.tool");
54
54
  Object.defineProperty(exports, "AddNoteTool", { enumerable: true, get: function () { return add_note_tool_1.AddNoteTool; } });
55
+ var add_notes_tool_1 = require("./tools/add-notes.tool");
56
+ Object.defineProperty(exports, "AddNotesTool", { enumerable: true, get: function () { return add_notes_tool_1.AddNotesTool; } });
55
57
  var find_notes_tool_1 = require("./tools/find-notes.tool");
56
58
  Object.defineProperty(exports, "FindNotesTool", { enumerable: true, get: function () { return find_notes_tool_1.FindNotesTool; } });
57
59
  var notes_info_tool_1 = require("./tools/notes-info.tool");
@@ -91,6 +93,7 @@ const model_styling_tool_2 = require("./tools/model-styling.tool");
91
93
  const create_model_tool_2 = require("./tools/create-model.tool");
92
94
  const update_model_styling_tool_2 = require("./tools/update-model-styling.tool");
93
95
  const add_note_tool_2 = require("./tools/add-note.tool");
96
+ const add_notes_tool_2 = require("./tools/add-notes.tool");
94
97
  const find_notes_tool_2 = require("./tools/find-notes.tool");
95
98
  const notes_info_tool_2 = require("./tools/notes-info.tool");
96
99
  const update_note_fields_tool_2 = require("./tools/update-note-fields.tool");
@@ -116,6 +119,7 @@ exports.ESSENTIAL_MCP_TOOLS = [
116
119
  create_model_tool_2.CreateModelTool,
117
120
  update_model_styling_tool_2.UpdateModelStylingTool,
118
121
  add_note_tool_2.AddNoteTool,
122
+ add_notes_tool_2.AddNotesTool,
119
123
  find_notes_tool_2.FindNotesTool,
120
124
  notes_info_tool_2.NotesInfoTool,
121
125
  update_note_fields_tool_2.UpdateNoteFieldsTool,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/mcp/primitives/essential/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/mcp/primitives/essential/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ import type { Context } from "@rekog/mcp-nest";
2
+ import { AnkiConnectClient } from "@/mcp/clients/anki-connect.client";
3
+ export declare class AddNotesTool {
4
+ private readonly ankiClient;
5
+ private readonly logger;
6
+ constructor(ankiClient: AnkiConnectClient);
7
+ addNotes({ deckName, modelName, tags: sharedTags, allowDuplicate, duplicateScope, notes, }: {
8
+ deckName: string;
9
+ modelName: string;
10
+ tags?: string[];
11
+ allowDuplicate?: boolean;
12
+ duplicateScope?: "deck" | "collection";
13
+ notes: Array<{
14
+ fields: Record<string, string>;
15
+ tags?: string[];
16
+ }>;
17
+ }, context: Context): Promise<{
18
+ [x: string]: unknown;
19
+ content: ({
20
+ type: "text";
21
+ text: string;
22
+ annotations?: {
23
+ audience?: ("user" | "assistant")[] | undefined;
24
+ priority?: number | undefined;
25
+ lastModified?: string | undefined;
26
+ } | undefined;
27
+ _meta?: {
28
+ [x: string]: unknown;
29
+ } | undefined;
30
+ } | {
31
+ type: "image";
32
+ data: string;
33
+ mimeType: string;
34
+ annotations?: {
35
+ audience?: ("user" | "assistant")[] | undefined;
36
+ priority?: number | undefined;
37
+ lastModified?: string | undefined;
38
+ } | undefined;
39
+ _meta?: {
40
+ [x: string]: unknown;
41
+ } | undefined;
42
+ } | {
43
+ type: "audio";
44
+ data: string;
45
+ mimeType: string;
46
+ annotations?: {
47
+ audience?: ("user" | "assistant")[] | undefined;
48
+ priority?: number | undefined;
49
+ lastModified?: string | undefined;
50
+ } | undefined;
51
+ _meta?: {
52
+ [x: string]: unknown;
53
+ } | undefined;
54
+ } | {
55
+ uri: string;
56
+ name: string;
57
+ type: "resource_link";
58
+ description?: string | undefined;
59
+ mimeType?: string | undefined;
60
+ annotations?: {
61
+ audience?: ("user" | "assistant")[] | undefined;
62
+ priority?: number | undefined;
63
+ lastModified?: string | undefined;
64
+ } | undefined;
65
+ _meta?: {
66
+ [x: string]: unknown;
67
+ } | undefined;
68
+ icons?: {
69
+ src: string;
70
+ mimeType?: string | undefined;
71
+ sizes?: string[] | undefined;
72
+ theme?: "light" | "dark" | undefined;
73
+ }[] | undefined;
74
+ title?: string | undefined;
75
+ } | {
76
+ type: "resource";
77
+ resource: {
78
+ uri: string;
79
+ text: string;
80
+ mimeType?: string | undefined;
81
+ _meta?: {
82
+ [x: string]: unknown;
83
+ } | undefined;
84
+ } | {
85
+ uri: string;
86
+ blob: string;
87
+ mimeType?: string | undefined;
88
+ _meta?: {
89
+ [x: string]: unknown;
90
+ } | undefined;
91
+ };
92
+ annotations?: {
93
+ audience?: ("user" | "assistant")[] | undefined;
94
+ priority?: number | undefined;
95
+ lastModified?: string | undefined;
96
+ } | undefined;
97
+ _meta?: {
98
+ [x: string]: unknown;
99
+ } | undefined;
100
+ })[];
101
+ _meta?: {
102
+ [x: string]: unknown;
103
+ progressToken?: string | number | undefined;
104
+ "io.modelcontextprotocol/related-task"?: {
105
+ taskId: string;
106
+ } | undefined;
107
+ } | undefined;
108
+ structuredContent?: {
109
+ [x: string]: unknown;
110
+ } | undefined;
111
+ isError?: boolean | undefined;
112
+ }>;
113
+ }
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var AddNotesTool_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.AddNotesTool = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const mcp_nest_1 = require("@rekog/mcp-nest");
16
+ const zod_1 = require("zod");
17
+ const anki_connect_client_1 = require("../../../clients/anki-connect.client");
18
+ const anki_utils_1 = require("../../../utils/anki.utils");
19
+ let AddNotesTool = AddNotesTool_1 = class AddNotesTool {
20
+ ankiClient;
21
+ logger = new common_1.Logger(AddNotesTool_1.name);
22
+ constructor(ankiClient) {
23
+ this.ankiClient = ankiClient;
24
+ }
25
+ async addNotes({ deckName, modelName, tags: sharedTags, allowDuplicate, duplicateScope, notes, }, context) {
26
+ try {
27
+ this.logger.log(`Adding ${notes.length} notes to deck "${deckName}" with model "${modelName}"`);
28
+ const totalSteps = notes.length + 2;
29
+ let currentStep = 0;
30
+ await context.reportProgress({
31
+ progress: currentStep,
32
+ total: totalSteps,
33
+ });
34
+ const fieldNames = await this.ankiClient.invoke("modelFieldNames", { modelName });
35
+ if (!fieldNames || fieldNames.length === 0) {
36
+ return (0, anki_utils_1.createErrorResponse)(new Error(`Model "${modelName}" not found or has no fields`), {
37
+ deckName,
38
+ modelName,
39
+ totalRequested: notes.length,
40
+ hint: "Use modelNames tool to see available models",
41
+ });
42
+ }
43
+ currentStep++;
44
+ await context.reportProgress({
45
+ progress: currentStep,
46
+ total: totalSteps,
47
+ });
48
+ const sortField = fieldNames[0];
49
+ const sortFieldErrors = [];
50
+ for (let i = 0; i < notes.length; i++) {
51
+ const sortFieldValue = notes[i].fields[sortField];
52
+ if (!sortFieldValue || sortFieldValue.trim() === "") {
53
+ sortFieldErrors.push({
54
+ index: i,
55
+ error: `The first field "${sortField}" cannot be empty. Anki requires the sort field to have content.`,
56
+ });
57
+ }
58
+ }
59
+ if (sortFieldErrors.length > 0) {
60
+ return (0, anki_utils_1.createErrorResponse)(new Error(`${sortFieldErrors.length} note(s) have empty sort field "${sortField}"`), {
61
+ deckName,
62
+ modelName,
63
+ totalRequested: notes.length,
64
+ invalidNotes: sortFieldErrors,
65
+ hint: `The first field "${sortField}" is the sort field and must contain non-empty content for every note.`,
66
+ });
67
+ }
68
+ currentStep++;
69
+ await context.reportProgress({
70
+ progress: currentStep,
71
+ total: totalSteps,
72
+ });
73
+ const results = [];
74
+ let createdCount = 0;
75
+ let skippedCount = 0;
76
+ let failedCount = 0;
77
+ for (let i = 0; i < notes.length; i++) {
78
+ const note = notes[i];
79
+ const mergedTags = [
80
+ ...new Set([...(sharedTags ?? []), ...(note.tags ?? [])]),
81
+ ];
82
+ const noteParams = {
83
+ deckName,
84
+ modelName,
85
+ fields: note.fields,
86
+ };
87
+ if (mergedTags.length > 0) {
88
+ noteParams.tags = mergedTags;
89
+ }
90
+ const options = {};
91
+ let hasOptions = false;
92
+ if (allowDuplicate !== undefined) {
93
+ options.allowDuplicate = allowDuplicate;
94
+ hasOptions = true;
95
+ }
96
+ if (duplicateScope !== undefined) {
97
+ options.duplicateScope = duplicateScope;
98
+ hasOptions = true;
99
+ }
100
+ if (hasOptions) {
101
+ noteParams.options = options;
102
+ }
103
+ try {
104
+ const noteId = await this.ankiClient.invoke("addNote", { note: noteParams });
105
+ if (noteId != null) {
106
+ results.push({ index: i, status: "created", noteId });
107
+ createdCount++;
108
+ }
109
+ else {
110
+ results.push({ index: i, status: "skipped", reason: "duplicate" });
111
+ skippedCount++;
112
+ }
113
+ }
114
+ catch (error) {
115
+ if (error instanceof anki_connect_client_1.ReadOnlyModeError) {
116
+ throw error;
117
+ }
118
+ const errorMessage = error instanceof Error ? error.message : String(error);
119
+ if (errorMessage.includes("duplicate") ||
120
+ errorMessage.includes("cannot create note because it is a duplicate")) {
121
+ results.push({ index: i, status: "skipped", reason: "duplicate" });
122
+ skippedCount++;
123
+ }
124
+ else {
125
+ results.push({ index: i, status: "failed", error: errorMessage });
126
+ failedCount++;
127
+ }
128
+ }
129
+ currentStep++;
130
+ await context.reportProgress({
131
+ progress: currentStep,
132
+ total: totalSteps,
133
+ });
134
+ }
135
+ this.logger.log(`Batch complete: ${createdCount} created, ${skippedCount} skipped, ${failedCount} failed`);
136
+ const response = {
137
+ success: createdCount > 0 || (failedCount === 0 && skippedCount > 0),
138
+ deckName,
139
+ modelName,
140
+ totalRequested: notes.length,
141
+ created: createdCount,
142
+ skipped: skippedCount,
143
+ failed: failedCount,
144
+ results,
145
+ };
146
+ return (0, anki_utils_1.createSuccessResponse)(response);
147
+ }
148
+ catch (error) {
149
+ this.logger.error("Failed to add notes batch", error);
150
+ return (0, anki_utils_1.createErrorResponse)(error, {
151
+ deckName,
152
+ modelName,
153
+ totalRequested: notes.length,
154
+ hint: "Make sure Anki is running and the deck/model names are correct",
155
+ });
156
+ }
157
+ }
158
+ };
159
+ exports.AddNotesTool = AddNotesTool;
160
+ __decorate([
161
+ (0, mcp_nest_1.Tool)({
162
+ name: "addNotes",
163
+ description: "Add multiple notes to Anki in a single batch. Up to 100 notes sharing the same deck and model. Supports partial success - individual failures don't affect others. IMPORTANT: Only create notes that were explicitly requested by the user.",
164
+ parameters: zod_1.z.object({
165
+ deckName: zod_1.z.string().min(1).describe("The deck to add all notes to"),
166
+ modelName: zod_1.z
167
+ .string()
168
+ .min(1)
169
+ .describe('The note type/model for all notes (e.g., "Basic", "Cloze")'),
170
+ tags: zod_1.z
171
+ .array(zod_1.z.string())
172
+ .optional()
173
+ .describe("Tags applied to all notes (merged with per-note tags)"),
174
+ allowDuplicate: zod_1.z
175
+ .boolean()
176
+ .optional()
177
+ .default(false)
178
+ .describe("Whether to allow adding duplicate notes"),
179
+ duplicateScope: zod_1.z
180
+ .enum(["deck", "collection"])
181
+ .optional()
182
+ .describe("Scope for duplicate checking"),
183
+ notes: zod_1.z
184
+ .array(zod_1.z.object({
185
+ fields: zod_1.z
186
+ .record(zod_1.z.string(), zod_1.z.string())
187
+ .describe('Field values as key-value pairs (e.g., {"Front": "question", "Back": "answer"})'),
188
+ tags: zod_1.z
189
+ .array(zod_1.z.string())
190
+ .optional()
191
+ .describe("Additional tags for this specific note (merged with shared tags)"),
192
+ }))
193
+ .min(1)
194
+ .max(100)
195
+ .describe("Array of notes to create (1-100)"),
196
+ }),
197
+ }),
198
+ __metadata("design:type", Function),
199
+ __metadata("design:paramtypes", [Object, Object]),
200
+ __metadata("design:returntype", Promise)
201
+ ], AddNotesTool.prototype, "addNotes", null);
202
+ exports.AddNotesTool = AddNotesTool = AddNotesTool_1 = __decorate([
203
+ (0, common_1.Injectable)(),
204
+ __metadata("design:paramtypes", [anki_connect_client_1.AnkiConnectClient])
205
+ ], AddNotesTool);
206
+ //# sourceMappingURL=add-notes.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-notes.tool.js","sourceRoot":"","sources":["../../../../../src/mcp/primitives/essential/tools/add-notes.tool.ts"],"names":[],"mappings":"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"}
@@ -4,14 +4,15 @@ exports.deckStats = deckStats;
4
4
  const stats_utils_1 = require("../../../../../utils/stats.utils");
5
5
  async function deckStats(params, client, onProgress) {
6
6
  const { deck, easeBuckets = [2.0, 2.5, 3.0], intervalBuckets = [7, 21, 90], } = params;
7
+ const deckNamesAndIds = await client.invoke("deckNamesAndIds", {});
8
+ const deckId = deckNamesAndIds?.[deck];
9
+ if (deckId == null) {
10
+ throw new Error(`Deck "${deck}" not found`);
11
+ }
7
12
  const deckStatsResponse = await client.invoke("getDeckStats", {
8
13
  decks: [deck],
9
14
  });
10
- if (!deckStatsResponse || Object.keys(deckStatsResponse).length === 0) {
11
- throw new Error(`Deck "${deck}" not found`);
12
- }
13
- const deckStatsArray = Object.values(deckStatsResponse);
14
- const deckStatsData = deckStatsArray.find((s) => s.name === deck);
15
+ const deckStatsData = deckStatsResponse?.[String(deckId)];
15
16
  if (!deckStatsData) {
16
17
  throw new Error(`Deck "${deck}" not found in statistics response`);
17
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"deckStats.action.js","sourceRoot":"","sources":["../../../../../../../src/mcp/primitives/essential/tools/deckActions/actions/deckStats.action.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deckStats.action.js","sourceRoot":"","sources":["../../../../../../../src/mcp/primitives/essential/tools/deckActions/actions/deckStats.action.ts"],"names":[],"mappings":"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"}
@@ -15,12 +15,13 @@ async function listDecks(params, client) {
15
15
  let decks;
16
16
  let summary;
17
17
  if (includeStats) {
18
+ const deckNamesAndIds = await client.invoke("deckNamesAndIds", {});
18
19
  const deckStatsResponse = await client.invoke("getDeckStats", {
19
20
  decks: deckNames,
20
21
  });
21
- const statsArray = Object.values(deckStatsResponse);
22
22
  decks = deckNames.map((name) => {
23
- const stats = statsArray.find((s) => s.name === name);
23
+ const deckId = deckNamesAndIds?.[name];
24
+ const stats = deckId != null ? deckStatsResponse?.[String(deckId)] : undefined;
24
25
  if (stats) {
25
26
  return {
26
27
  name,
@@ -1 +1 @@
1
- {"version":3,"file":"listDecks.action.js","sourceRoot":"","sources":["../../../../../../../src/mcp/primitives/essential/tools/deckActions/actions/listDecks.action.ts"],"names":[],"mappings":";;AAiCA,8BAoFC;AApFM,KAAK,UAAU,SAAS,CAC7B,MAAuB,EACvB,MAAyB;IAEzB,MAAM,EAAE,YAAY,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;IAGxC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAW,WAAW,CAAC,CAAC;IAE7D,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,wBAAwB;YACjC,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,CAAC;SACT,CAAC;IACJ,CAAC;IAED,IAAI,KAAiB,CAAC;IACtB,IAAI,OAAmC,CAAC;IAExC,IAAI,YAAY,EAAE,CAAC;QAGjB,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,MAAM,CAC3C,cAAc,EACd;YACE,KAAK,EAAE,SAAS;SACjB,CACF,CAAC;QAIF,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAEpD,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAE7B,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YAC3D,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO;oBACL,IAAI;oBACJ,KAAK,EAAE;wBACL,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,CAAC;wBAC3B,IAAI;wBACJ,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,CAAC;wBAC/B,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC;wBACnC,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC;wBACrC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,CAAC;wBAC/B,WAAW,EAAE,KAAK,CAAC,aAAa,IAAI,CAAC;qBACzB;iBACf,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;QAGH,OAAO,GAAG,KAAK,CAAC,MAAM,CACpB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACZ,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;gBAC1C,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;gBACtC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;gBAC7C,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;YAC9C,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,EACD,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CACrE,CAAC;IACJ,CAAC;SAAM,CAAC;QAEN,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,MAAM,GAAoB;QAC9B,OAAO,EAAE,IAAI;QACb,KAAK;QACL,KAAK,EAAE,KAAK,CAAC,MAAM;KACpB,CAAC;IAEF,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"listDecks.action.js","sourceRoot":"","sources":["../../../../../../../src/mcp/primitives/essential/tools/deckActions/actions/listDecks.action.ts"],"names":[],"mappings":"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"}
@@ -46,7 +46,6 @@ function computeBuckets(sortedValues, config) {
46
46
  ? formatLabel(null, boundaries[0])
47
47
  : `<${formatNumber(boundaries[0])}${unitSuffix || ""}`;
48
48
  buckets[label]++;
49
- placed = true;
50
49
  continue;
51
50
  }
52
51
  for (let i = 0; i < boundaries.length - 1; i++) {
@@ -1 +1 @@
1
- {"version":3,"file":"stats.utils.js","sourceRoot":"","sources":["../../../src/mcp/utils/stats.utils.ts"],"names":[],"mappings":";;AAqLA,kDAiCC;AA0BD,4CAiBC;AAsBD,0CAoCC;AAnQD,SAAS,YAAY,CAAC,CAAS;IAE7B,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IACtB,CAAC;IAED,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC;AAKD,SAAS,kBAAkB,CAAC,MAAoB;IAC9C,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAEvD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC;IACjB,CAAC;IAGD,MAAM,MAAM,GAAG;QACb,WAAW;YACT,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,EAAE,EAAE;KACzD,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,CAAC,IAAI,CACT,WAAW;YACT,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/C,CAAC,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,EAAE,EAAE,CAC3F,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,IAAI,CACT,WAAW;QACT,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;QACtD,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,EAAE,EAAE,CAC7E,CAAC;IAGF,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACvB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAKD,SAAS,cAAc,CACrB,YAAsB,EACtB,MAAoB;IAEpB,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAEvD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC;IACjB,CAAC;IAGD,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,IAAI,MAAM,GAAG,KAAK,CAAC;QAGnB,IAAI,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,WAAW;gBACvB,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;gBAClC,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,EAAE,EAAE,CAAC;YACzD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjB,MAAM,GAAG,IAAI,CAAC;YACd,SAAS;QACX,CAAC;QAGD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,IAAI,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACxD,MAAM,KAAK,GAAG,WAAW;oBACvB,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC/C,CAAC,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,EAAE,EAAE,CAAC;gBAC3F,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjB,MAAM,GAAG,IAAI,CAAC;gBACd,MAAM;YACR,CAAC;QACH,CAAC;QAGD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,WAAW;gBACvB,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;gBACtD,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,EAAE,EAAE,CAAC;YAC7E,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AA0BD,SAAgB,mBAAmB,CACjC,MAAgB,EAChB,MAAoB;IAEpB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO;YACL,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,CAAC;YACN,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC;SACpC,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAGlD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClD,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;QACrB,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC;QACrD,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAE1B,OAAO;QACL,IAAI,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM;QACzB,MAAM;QACN,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;QACd,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9B,KAAK,EAAE,MAAM,CAAC,MAAM;QACpB,OAAO,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;KACxC,CAAC;AACJ,CAAC;AA0BD,SAAgB,gBAAgB,CAAC,aAAuB;IACtD,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAEvD,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAC/B,IAAI,MAAM,KAAK,CAAC;YAAE,MAAM,CAAC,KAAK,EAAE,CAAC;aAC5B,IAAI,MAAM,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,EAAE,CAAC;aAChC,IAAI,MAAM,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,EAAE,CAAC;aAChC,IAAI,MAAM,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACrE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAE3D,OAAO;QACL,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3C,SAAS,EAAE,MAAM;KAClB,CAAC;AACJ,CAAC;AAsBD,SAAgB,eAAe,CAC7B,YAAoD;IAEpD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAC;IACX,CAAC;IAGD,MAAM,MAAM,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CACnC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAClE,CAAC;IAEF,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;IACzB,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5C,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAGhC,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAGjD,IACE,UAAU,CAAC,OAAO,EAAE,KAAK,YAAY,CAAC,OAAO,EAAE;YAC/C,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EACnB,CAAC;YACD,MAAM,EAAE,CAAC;QACX,CAAC;aAAM,CAAC;YACN,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"stats.utils.js","sourceRoot":"","sources":["../../../src/mcp/utils/stats.utils.ts"],"names":[],"mappings":";;AAoLA,kDAiCC;AA0BD,4CAiBC;AAsBD,0CAoCC;AAlQD,SAAS,YAAY,CAAC,CAAS;IAE7B,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IACtB,CAAC;IAED,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC;AAKD,SAAS,kBAAkB,CAAC,MAAoB;IAC9C,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAEvD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC;IACjB,CAAC;IAGD,MAAM,MAAM,GAAG;QACb,WAAW;YACT,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,EAAE,EAAE;KACzD,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,CAAC,IAAI,CACT,WAAW;YACT,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/C,CAAC,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,EAAE,EAAE,CAC3F,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,IAAI,CACT,WAAW;QACT,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;QACtD,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,EAAE,EAAE,CAC7E,CAAC;IAGF,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACvB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAKD,SAAS,cAAc,CACrB,YAAsB,EACtB,MAAoB;IAEpB,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAEvD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC;IACjB,CAAC;IAGD,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,IAAI,MAAM,GAAG,KAAK,CAAC;QAGnB,IAAI,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,WAAW;gBACvB,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;gBAClC,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,EAAE,EAAE,CAAC;YACzD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjB,SAAS;QACX,CAAC;QAGD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,IAAI,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACxD,MAAM,KAAK,GAAG,WAAW;oBACvB,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC/C,CAAC,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,EAAE,EAAE,CAAC;gBAC3F,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjB,MAAM,GAAG,IAAI,CAAC;gBACd,MAAM;YACR,CAAC;QACH,CAAC;QAGD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,WAAW;gBACvB,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;gBACtD,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,EAAE,EAAE,CAAC;YAC7E,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AA0BD,SAAgB,mBAAmB,CACjC,MAAgB,EAChB,MAAoB;IAEpB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO;YACL,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,CAAC;YACN,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC;SACpC,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAGlD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClD,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;QACrB,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC;QACrD,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAE1B,OAAO;QACL,IAAI,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM;QACzB,MAAM;QACN,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;QACd,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9B,KAAK,EAAE,MAAM,CAAC,MAAM;QACpB,OAAO,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;KACxC,CAAC;AACJ,CAAC;AA0BD,SAAgB,gBAAgB,CAAC,aAAuB;IACtD,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAEvD,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAC/B,IAAI,MAAM,KAAK,CAAC;YAAE,MAAM,CAAC,KAAK,EAAE,CAAC;aAC5B,IAAI,MAAM,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,EAAE,CAAC;aAChC,IAAI,MAAM,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,EAAE,CAAC;aAChC,IAAI,MAAM,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACrE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAE3D,OAAO;QACL,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3C,SAAS,EAAE,MAAM;KAClB,CAAC;AACJ,CAAC;AAsBD,SAAgB,eAAe,CAC7B,YAAoD;IAEpD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAC;IACX,CAAC;IAGD,MAAM,MAAM,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CACnC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAClE,CAAC;IAEF,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;IACzB,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5C,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAGhC,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAGjD,IACE,UAAU,CAAC,OAAO,EAAE,KAAK,YAAY,CAAC,OAAO,EAAE;YAC/C,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EACnB,CAAC;YACD,MAAM,EAAE,CAAC;QACX,CAAC;aAAM,CAAC;YACN,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}