axiom-mcp 2.19.6

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 (56) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +409 -0
  3. package/dist/bundle.json +609177 -0
  4. package/dist/catalog/index.d.ts +26 -0
  5. package/dist/catalog/index.d.ts.map +1 -0
  6. package/dist/catalog/index.js +173 -0
  7. package/dist/catalog/index.js.map +1 -0
  8. package/dist/config.d.ts +31 -0
  9. package/dist/config.d.ts.map +1 -0
  10. package/dist/config.js +60 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/index.d.ts +3 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +130 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/loader/dev-loader.d.ts +55 -0
  17. package/dist/loader/dev-loader.d.ts.map +1 -0
  18. package/dist/loader/dev-loader.js +223 -0
  19. package/dist/loader/dev-loader.js.map +1 -0
  20. package/dist/loader/parser.d.ts +117 -0
  21. package/dist/loader/parser.d.ts.map +1 -0
  22. package/dist/loader/parser.js +204 -0
  23. package/dist/loader/parser.js.map +1 -0
  24. package/dist/loader/prod-loader.d.ts +42 -0
  25. package/dist/loader/prod-loader.d.ts.map +1 -0
  26. package/dist/loader/prod-loader.js +144 -0
  27. package/dist/loader/prod-loader.js.map +1 -0
  28. package/dist/loader/types.d.ts +55 -0
  29. package/dist/loader/types.d.ts.map +1 -0
  30. package/dist/loader/types.js +2 -0
  31. package/dist/loader/types.js.map +1 -0
  32. package/dist/loader/xcode-docs.d.ts +18 -0
  33. package/dist/loader/xcode-docs.d.ts.map +1 -0
  34. package/dist/loader/xcode-docs.js +91 -0
  35. package/dist/loader/xcode-docs.js.map +1 -0
  36. package/dist/prompts/handler.d.ts +57 -0
  37. package/dist/prompts/handler.d.ts.map +1 -0
  38. package/dist/prompts/handler.js +95 -0
  39. package/dist/prompts/handler.js.map +1 -0
  40. package/dist/resources/handler.d.ts +51 -0
  41. package/dist/resources/handler.d.ts.map +1 -0
  42. package/dist/resources/handler.js +99 -0
  43. package/dist/resources/handler.js.map +1 -0
  44. package/dist/scripts/bundle.d.ts +13 -0
  45. package/dist/scripts/bundle.d.ts.map +1 -0
  46. package/dist/scripts/bundle.js +137 -0
  47. package/dist/scripts/bundle.js.map +1 -0
  48. package/dist/search/index.d.ts +65 -0
  49. package/dist/search/index.d.ts.map +1 -0
  50. package/dist/search/index.js +227 -0
  51. package/dist/search/index.js.map +1 -0
  52. package/dist/tools/handler.d.ts +40 -0
  53. package/dist/tools/handler.d.ts.map +1 -0
  54. package/dist/tools/handler.js +265 -0
  55. package/dist/tools/handler.js.map +1 -0
  56. package/package.json +53 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/resources/handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Bundle generator for production deployment
4
+ *
5
+ * Reads skills, commands, and agents from the Claude Code plugin directory
6
+ * and generates a standalone bundle.json for production distribution.
7
+ *
8
+ * Usage:
9
+ * npm run bundle
10
+ * node scripts/bundle.js /path/to/plugin
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/scripts/bundle.ts"],"names":[],"mappings":";AAEA;;;;;;;;;GASG"}
@@ -0,0 +1,137 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Bundle generator for production deployment
4
+ *
5
+ * Reads skills, commands, and agents from the Claude Code plugin directory
6
+ * and generates a standalone bundle.json for production distribution.
7
+ *
8
+ * Usage:
9
+ * npm run bundle
10
+ * node scripts/bundle.js /path/to/plugin
11
+ */
12
+ import { readdir, readFile, writeFile, mkdir, stat } from 'fs/promises';
13
+ import { join } from 'path';
14
+ import { parseSkill, parseCommand, parseAgent, applyAnnotations } from '../loader/parser.js';
15
+ import { buildIndex, serializeIndex } from '../search/index.js';
16
+ import { buildCatalog } from '../catalog/index.js';
17
+ async function loadAnnotations() {
18
+ try {
19
+ const annotationsPath = join(process.cwd(), 'skill-annotations.json');
20
+ const content = await readFile(annotationsPath, 'utf-8');
21
+ return JSON.parse(content);
22
+ }
23
+ catch {
24
+ console.warn('Warning: skill-annotations.json not found, using defaults');
25
+ return {};
26
+ }
27
+ }
28
+ async function generateBundle(pluginPath) {
29
+ console.log(`Reading plugin from: ${pluginPath}`);
30
+ const bundle = {
31
+ version: '0.2.0',
32
+ generatedAt: new Date().toISOString(),
33
+ skills: {},
34
+ commands: {},
35
+ agents: {},
36
+ catalog: null,
37
+ searchIndex: null,
38
+ };
39
+ // Load annotations for MCP metadata
40
+ const annotations = await loadAnnotations();
41
+ // Load skills (subdirectories: skills/<name>/SKILL.md)
42
+ const skillsDir = join(pluginPath, 'skills');
43
+ const skillEntries = await readdir(skillsDir);
44
+ for (const entry of skillEntries) {
45
+ const entryPath = join(skillsDir, entry);
46
+ const entryStat = await stat(entryPath);
47
+ if (entryStat.isDirectory()) {
48
+ const skillFile = join(entryPath, 'SKILL.md');
49
+ try {
50
+ const content = await readFile(skillFile, 'utf-8');
51
+ const skill = applyAnnotations(parseSkill(content, entry), annotations);
52
+ bundle.skills[skill.name] = skill;
53
+ }
54
+ catch {
55
+ // No SKILL.md in this directory, skip
56
+ }
57
+ }
58
+ }
59
+ console.log(`Found ${Object.keys(bundle.skills).length} skills`);
60
+ // Load commands
61
+ const commandsDir = join(pluginPath, 'commands');
62
+ const commandFiles = (await readdir(commandsDir)).filter(f => f.endsWith('.md'));
63
+ console.log(`Found ${commandFiles.length} command files`);
64
+ for (const file of commandFiles) {
65
+ try {
66
+ const content = await readFile(join(commandsDir, file), 'utf-8');
67
+ const command = parseCommand(content, file);
68
+ bundle.commands[command.name] = command;
69
+ }
70
+ catch (err) {
71
+ console.warn(`Warning: Failed to parse command ${file}, skipping: ${err.message?.slice(0, 100)}`);
72
+ }
73
+ }
74
+ // Load agents
75
+ const agentsDir = join(pluginPath, 'agents');
76
+ const agentFiles = (await readdir(agentsDir)).filter(f => f.endsWith('.md'));
77
+ console.log(`Found ${agentFiles.length} agent files`);
78
+ for (const file of agentFiles) {
79
+ try {
80
+ const content = await readFile(join(agentsDir, file), 'utf-8');
81
+ const agent = parseAgent(content, file);
82
+ bundle.agents[agent.name] = agent;
83
+ }
84
+ catch (err) {
85
+ console.warn(`Warning: Failed to parse agent ${file}, skipping: ${err.message?.slice(0, 100)}`);
86
+ }
87
+ }
88
+ // Build search index
89
+ const skillsMap = new Map();
90
+ for (const [name, skill] of Object.entries(bundle.skills)) {
91
+ skillsMap.set(name, skill);
92
+ }
93
+ const agentsMap = new Map(Object.entries(bundle.agents).map(([name, agent]) => [name, agent]));
94
+ console.log('Building search index...');
95
+ const searchIndex = buildIndex(skillsMap);
96
+ bundle.searchIndex = serializeIndex(searchIndex);
97
+ console.log(`Search index: ${searchIndex.docCount} documents`);
98
+ // Build catalog
99
+ console.log('Building catalog...');
100
+ const catalog = buildCatalog(skillsMap, agentsMap);
101
+ bundle.catalog = catalog;
102
+ console.log(`Catalog: ${Object.keys(catalog.categories).length} categories`);
103
+ return bundle;
104
+ }
105
+ async function main() {
106
+ const pluginPath = process.argv[2] || join(process.cwd(), '../.claude-plugin/plugins/axiom');
107
+ const outputDir = join(process.cwd(), 'dist');
108
+ const outputPath = join(outputDir, 'bundle.json');
109
+ console.log('Axiom MCP Server - Bundle Generator v2');
110
+ console.log('======================================');
111
+ console.log();
112
+ try {
113
+ // Ensure dist/ exists
114
+ await mkdir(outputDir, { recursive: true });
115
+ const bundle = await generateBundle(pluginPath);
116
+ console.log();
117
+ console.log('Bundle Summary:');
118
+ console.log(`- Skills: ${Object.keys(bundle.skills).length}`);
119
+ console.log(`- Commands: ${Object.keys(bundle.commands).length}`);
120
+ console.log(`- Agents: ${Object.keys(bundle.agents).length}`);
121
+ console.log(`- Search Index: ${bundle.searchIndex.docCount} documents`);
122
+ console.log(`- Catalog Categories: ${Object.keys(bundle.catalog.categories).length}`);
123
+ console.log(`- Generated: ${bundle.generatedAt}`);
124
+ await writeFile(outputPath, JSON.stringify(bundle, null, 2), 'utf-8');
125
+ console.log();
126
+ console.log(`Bundle written to: ${outputPath}`);
127
+ const stats = await import('fs').then(fs => fs.promises.stat(outputPath));
128
+ const sizeMB = (stats.size / 1024 / 1024).toFixed(2);
129
+ console.log(`Size: ${sizeMB} MB`);
130
+ }
131
+ catch (error) {
132
+ console.error('Error generating bundle:', error);
133
+ process.exit(1);
134
+ }
135
+ }
136
+ main();
137
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/scripts/bundle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { Skill, SkillType, SkillSource } from '../loader/parser.js';
2
+ declare const FIELD_WEIGHTS: {
3
+ name: number;
4
+ description: number;
5
+ tags: number;
6
+ sectionHeadings: number;
7
+ body: number;
8
+ };
9
+ export interface SearchResult {
10
+ name: string;
11
+ score: number;
12
+ skillType: SkillType;
13
+ source: SkillSource;
14
+ category?: string;
15
+ description: string;
16
+ matchingSections: string[];
17
+ }
18
+ interface TermEntry {
19
+ docName: string;
20
+ field: keyof typeof FIELD_WEIGHTS;
21
+ tf: number;
22
+ }
23
+ export interface SearchIndex {
24
+ invertedIndex: Map<string, TermEntry[]>;
25
+ docLengths: Map<string, number>;
26
+ avgDocLength: number;
27
+ docCount: number;
28
+ sectionTerms: Map<string, Map<string, Set<string>>>;
29
+ }
30
+ interface SerializedSearchIndex {
31
+ invertedIndex: Record<string, TermEntry[]>;
32
+ docLengths: Record<string, number>;
33
+ avgDocLength: number;
34
+ docCount: number;
35
+ sectionTerms: Record<string, Record<string, string[]>>;
36
+ }
37
+ /**
38
+ * Tokenize text into normalized terms.
39
+ * Simple suffix stripping instead of Porter stemmer to preserve
40
+ * technical terms like NavigationStack, Sendable.
41
+ */
42
+ export declare function tokenize(text: string): string[];
43
+ /**
44
+ * Build an inverted index from a collection of skills.
45
+ */
46
+ export declare function buildIndex(skills: Map<string, Skill>): SearchIndex;
47
+ /**
48
+ * Search the index using BM25 scoring with field weights.
49
+ */
50
+ export declare function search(index: SearchIndex, query: string, options?: {
51
+ limit?: number;
52
+ skillType?: string;
53
+ category?: string;
54
+ source?: string;
55
+ }, skills?: Map<string, Skill>): SearchResult[];
56
+ /**
57
+ * Serialize a SearchIndex to a plain JSON-safe object for bundling.
58
+ */
59
+ export declare function serializeIndex(index: SearchIndex): SerializedSearchIndex;
60
+ /**
61
+ * Deserialize a bundled SearchIndex back into the runtime format.
62
+ */
63
+ export declare function deserializeIndex(data: SerializedSearchIndex): SearchIndex;
64
+ export {};
65
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/search/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AASpE,QAAA,MAAM,aAAa;;;;;;CAMlB,CAAC;AAMF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,OAAO,aAAa,CAAC;IAClC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACxC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;CACrD;AAED,UAAU,qBAAqB;IAC7B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;CACxD;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAgB/C;AAUD;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,WAAW,CAiElE;AAED;;GAEG;AACH,wBAAgB,MAAM,CACpB,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EACpF,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAC1B,YAAY,EAAE,CAgEhB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,qBAAqB,CA0BxE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,qBAAqB,GAAG,WAAW,CA2BzE"}
@@ -0,0 +1,227 @@
1
+ const STOPWORDS = new Set([
2
+ 'a', 'an', 'and', 'are', 'as', 'at', 'be', 'by', 'for', 'from',
3
+ 'has', 'have', 'in', 'is', 'it', 'its', 'of', 'on', 'or', 'that',
4
+ 'the', 'this', 'to', 'was', 'were', 'will', 'with', 'you', 'your',
5
+ ]);
6
+ // Field weight multipliers for BM25 scoring
7
+ const FIELD_WEIGHTS = {
8
+ name: 3.0,
9
+ description: 2.0,
10
+ tags: 2.0,
11
+ sectionHeadings: 1.5,
12
+ body: 1.0,
13
+ };
14
+ // BM25 parameters
15
+ const K1 = 1.2;
16
+ const B = 0.75;
17
+ /**
18
+ * Tokenize text into normalized terms.
19
+ * Simple suffix stripping instead of Porter stemmer to preserve
20
+ * technical terms like NavigationStack, Sendable.
21
+ */
22
+ export function tokenize(text) {
23
+ return text
24
+ .toLowerCase()
25
+ .split(/[^a-z0-9@]+/)
26
+ .filter(t => t.length > 1 && !STOPWORDS.has(t))
27
+ .map(t => {
28
+ // Simple suffix stripping — only common English suffixes
29
+ // Preserves technical terms by not stemming aggressively
30
+ if (t.endsWith('ing') && t.length > 5)
31
+ return t.slice(0, -3);
32
+ if (t.endsWith('tion') && t.length > 6)
33
+ return t.slice(0, -4);
34
+ if (t.endsWith('ness') && t.length > 6)
35
+ return t.slice(0, -4);
36
+ if (t.endsWith('ment') && t.length > 6)
37
+ return t.slice(0, -4);
38
+ if (t.endsWith('able') && t.length > 6)
39
+ return t.slice(0, -4);
40
+ if (t.endsWith('ible') && t.length > 6)
41
+ return t.slice(0, -4);
42
+ return t;
43
+ });
44
+ }
45
+ function countTerms(tokens) {
46
+ const counts = new Map();
47
+ for (const t of tokens) {
48
+ counts.set(t, (counts.get(t) || 0) + 1);
49
+ }
50
+ return counts;
51
+ }
52
+ /**
53
+ * Build an inverted index from a collection of skills.
54
+ */
55
+ export function buildIndex(skills) {
56
+ const invertedIndex = new Map();
57
+ const docLengths = new Map();
58
+ const sectionTerms = new Map();
59
+ let totalLength = 0;
60
+ function addTerms(docName, field, tokens) {
61
+ const counts = countTerms(tokens);
62
+ for (const [term, tf] of counts) {
63
+ if (!invertedIndex.has(term)) {
64
+ invertedIndex.set(term, []);
65
+ }
66
+ invertedIndex.get(term).push({ docName, field, tf });
67
+ }
68
+ }
69
+ for (const [name, skill] of skills) {
70
+ // Skip router skills from search — they're internal routing mechanisms
71
+ if (skill.skillType === 'router')
72
+ continue;
73
+ // Name field
74
+ const nameTokens = tokenize(skill.name.replace(/[-_]/g, ' '));
75
+ addTerms(name, 'name', nameTokens);
76
+ // Description field
77
+ const descTokens = tokenize(skill.description);
78
+ addTerms(name, 'description', descTokens);
79
+ // Tags field
80
+ const tagTokens = tokenize(skill.tags.join(' '));
81
+ addTerms(name, 'tags', tagTokens);
82
+ // Section headings
83
+ const headingTokens = tokenize(skill.sections.map(s => s.heading).join(' '));
84
+ addTerms(name, 'sectionHeadings', headingTokens);
85
+ // Body
86
+ const bodyTokens = tokenize(skill.content);
87
+ addTerms(name, 'body', bodyTokens);
88
+ // Track section-level terms for matching sections in results
89
+ const docSections = new Map();
90
+ for (const section of skill.sections) {
91
+ const lines = skill.content.split('\n').slice(section.startLine, section.endLine + 1);
92
+ const sectionText = section.heading + ' ' + lines.join(' ');
93
+ const terms = new Set(tokenize(sectionText));
94
+ docSections.set(section.heading, terms);
95
+ }
96
+ sectionTerms.set(name, docSections);
97
+ const docLength = nameTokens.length + descTokens.length + tagTokens.length + headingTokens.length + bodyTokens.length;
98
+ docLengths.set(name, docLength);
99
+ totalLength += docLength;
100
+ }
101
+ const docCount = docLengths.size;
102
+ return {
103
+ invertedIndex,
104
+ docLengths,
105
+ avgDocLength: docCount > 0 ? totalLength / docCount : 0,
106
+ docCount,
107
+ sectionTerms,
108
+ };
109
+ }
110
+ /**
111
+ * Search the index using BM25 scoring with field weights.
112
+ */
113
+ export function search(index, query, options, skills) {
114
+ const queryTerms = tokenize(query);
115
+ if (queryTerms.length === 0)
116
+ return [];
117
+ const limit = options?.limit ?? 10;
118
+ const scores = new Map();
119
+ const matchedSections = new Map();
120
+ for (const term of queryTerms) {
121
+ const entries = index.invertedIndex.get(term);
122
+ if (!entries)
123
+ continue;
124
+ // IDF: log((N - n + 0.5) / (n + 0.5) + 1)
125
+ const docsWithTerm = new Set(entries.map(e => e.docName)).size;
126
+ const idf = Math.log((index.docCount - docsWithTerm + 0.5) / (docsWithTerm + 0.5) + 1);
127
+ for (const entry of entries) {
128
+ const docLen = index.docLengths.get(entry.docName) || 0;
129
+ const weight = FIELD_WEIGHTS[entry.field];
130
+ // BM25: idf * (tf * (k1 + 1)) / (tf + k1 * (1 - b + b * dl/avgdl))
131
+ const numerator = entry.tf * (K1 + 1);
132
+ const denominator = entry.tf + K1 * (1 - B + B * docLen / index.avgDocLength);
133
+ const fieldScore = idf * (numerator / denominator) * weight;
134
+ scores.set(entry.docName, (scores.get(entry.docName) || 0) + fieldScore);
135
+ // Track matching sections
136
+ const docSections = index.sectionTerms.get(entry.docName);
137
+ if (docSections) {
138
+ if (!matchedSections.has(entry.docName)) {
139
+ matchedSections.set(entry.docName, new Set());
140
+ }
141
+ for (const [heading, terms] of docSections) {
142
+ if (terms.has(term)) {
143
+ matchedSections.get(entry.docName).add(heading);
144
+ }
145
+ }
146
+ }
147
+ }
148
+ }
149
+ // Build results, applying filters
150
+ const results = [];
151
+ for (const [name, score] of scores) {
152
+ const skill = skills?.get(name);
153
+ if (options?.skillType && skill?.skillType !== options.skillType)
154
+ continue;
155
+ if (options?.category && skill?.category !== options.category)
156
+ continue;
157
+ if (options?.source && skill?.source !== options.source)
158
+ continue;
159
+ results.push({
160
+ name,
161
+ score,
162
+ skillType: skill?.skillType || 'discipline',
163
+ source: skill?.source || 'axiom',
164
+ category: skill?.category,
165
+ description: skill?.description || '',
166
+ matchingSections: Array.from(matchedSections.get(name) || []),
167
+ });
168
+ }
169
+ results.sort((a, b) => b.score - a.score);
170
+ return results.slice(0, limit);
171
+ }
172
+ /**
173
+ * Serialize a SearchIndex to a plain JSON-safe object for bundling.
174
+ */
175
+ export function serializeIndex(index) {
176
+ const invertedIndex = {};
177
+ for (const [term, entries] of index.invertedIndex) {
178
+ invertedIndex[term] = entries;
179
+ }
180
+ const docLengths = {};
181
+ for (const [name, length] of index.docLengths) {
182
+ docLengths[name] = length;
183
+ }
184
+ const sectionTerms = {};
185
+ for (const [doc, sections] of index.sectionTerms) {
186
+ sectionTerms[doc] = {};
187
+ for (const [heading, terms] of sections) {
188
+ sectionTerms[doc][heading] = Array.from(terms);
189
+ }
190
+ }
191
+ return {
192
+ invertedIndex,
193
+ docLengths,
194
+ avgDocLength: index.avgDocLength,
195
+ docCount: index.docCount,
196
+ sectionTerms,
197
+ };
198
+ }
199
+ /**
200
+ * Deserialize a bundled SearchIndex back into the runtime format.
201
+ */
202
+ export function deserializeIndex(data) {
203
+ const invertedIndex = new Map();
204
+ for (const [term, entries] of Object.entries(data.invertedIndex)) {
205
+ invertedIndex.set(term, entries);
206
+ }
207
+ const docLengths = new Map();
208
+ for (const [name, length] of Object.entries(data.docLengths)) {
209
+ docLengths.set(name, length);
210
+ }
211
+ const sectionTerms = new Map();
212
+ for (const [doc, sections] of Object.entries(data.sectionTerms)) {
213
+ const sectionMap = new Map();
214
+ for (const [heading, terms] of Object.entries(sections)) {
215
+ sectionMap.set(heading, new Set(terms));
216
+ }
217
+ sectionTerms.set(doc, sectionMap);
218
+ }
219
+ return {
220
+ invertedIndex,
221
+ docLengths,
222
+ avgDocLength: data.avgDocLength,
223
+ docCount: data.docCount,
224
+ sectionTerms,
225
+ };
226
+ }
227
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/search/index.ts"],"names":[],"mappings":"AAEA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IACxB,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM;IAC9D,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM;IAChE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CAClE,CAAC,CAAC;AAEH,4CAA4C;AAC5C,MAAM,aAAa,GAAG;IACpB,IAAI,EAAE,GAAG;IACT,WAAW,EAAE,GAAG;IAChB,IAAI,EAAE,GAAG;IACT,eAAe,EAAE,GAAG;IACpB,IAAI,EAAE,GAAG;CACV,CAAC;AAEF,kBAAkB;AAClB,MAAM,EAAE,GAAG,GAAG,CAAC;AACf,MAAM,CAAC,GAAG,IAAI,CAAC;AAkCf;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,IAAI;SACR,WAAW,EAAE;SACb,KAAK,CAAC,aAAa,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAC9C,GAAG,CAAC,CAAC,CAAC,EAAE;QACP,yDAAyD;QACzD,yDAAyD;QACzD,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,UAAU,CAAC,MAAgB;IAClC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,MAA0B;IACnD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAuB,CAAC;IACrD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoC,CAAC;IAEjE,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,SAAS,QAAQ,CAAC,OAAe,EAAE,KAAiC,EAAE,MAAgB;QACpF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAClC,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC;YAChC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9B,CAAC;YACD,aAAa,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACnC,uEAAuE;QACvE,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ;YAAE,SAAS;QAE3C,aAAa;QACb,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAEnC,oBAAoB;QACpB,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/C,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;QAE1C,aAAa;QACb,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QAElC,mBAAmB;QACnB,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7E,QAAQ,CAAC,IAAI,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC;QAEjD,OAAO;QACP,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAEnC,6DAA6D;QAC7D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAuB,CAAC;QACnD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YACtF,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;YAC7C,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAEpC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QACtH,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAChC,WAAW,IAAI,SAAS,CAAC;IAC3B,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC;IAEjC,OAAO;QACL,aAAa;QACb,UAAU;QACV,YAAY,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACvD,QAAQ;QACR,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM,CACpB,KAAkB,EAClB,KAAa,EACb,OAAoF,EACpF,MAA2B;IAE3B,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEvD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,0CAA0C;QAC1C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAEvF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAE1C,mEAAmE;YACnE,MAAM,SAAS,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACtC,MAAM,WAAW,GAAG,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;YAC9E,MAAM,UAAU,GAAG,GAAG,GAAG,CAAC,SAAS,GAAG,WAAW,CAAC,GAAG,MAAM,CAAC;YAE5D,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;YAEzE,0BAA0B;YAC1B,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC1D,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;oBACxC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;gBAChD,CAAC;gBACD,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC;oBAC3C,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;wBACpB,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBACnD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,OAAO,EAAE,SAAS,IAAI,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS;YAAE,SAAS;QAC3E,IAAI,OAAO,EAAE,QAAQ,IAAI,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,QAAQ;YAAE,SAAS;QACxE,IAAI,OAAO,EAAE,MAAM,IAAI,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM;YAAE,SAAS;QAElE,OAAO,CAAC,IAAI,CAAC;YACX,IAAI;YACJ,KAAK;YACL,SAAS,EAAE,KAAK,EAAE,SAAS,IAAI,YAAY;YAC3C,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,OAAO;YAChC,QAAQ,EAAE,KAAK,EAAE,QAAQ;YACzB,WAAW,EAAE,KAAK,EAAE,WAAW,IAAI,EAAE;YACrC,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAkB;IAC/C,MAAM,aAAa,GAAgC,EAAE,CAAC;IACtD,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QAClD,aAAa,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;IAChC,CAAC;IAED,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QAC9C,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;IAC5B,CAAC;IAED,MAAM,YAAY,GAA6C,EAAE,CAAC;IAClE,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACjD,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;YACxC,YAAY,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,OAAO;QACL,aAAa;QACb,UAAU;QACV,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAA2B;IAC1D,MAAM,aAAa,GAAG,IAAI,GAAG,EAAuB,CAAC;IACrD,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QACjE,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7D,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoC,CAAC;IACjE,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QAChE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;QAClD,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxD,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACpC,CAAC;IAED,OAAO;QACL,aAAa;QACb,UAAU;QACV,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,YAAY;KACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { Loader } from '../loader/types.js';
2
+ import { Logger } from '../config.js';
3
+ export interface McpTool {
4
+ name: string;
5
+ description: string;
6
+ inputSchema: {
7
+ type: string;
8
+ properties?: Record<string, any>;
9
+ required?: string[];
10
+ };
11
+ }
12
+ interface ToolResponse {
13
+ [key: string]: unknown;
14
+ content: Array<{
15
+ type: string;
16
+ text: string;
17
+ }>;
18
+ }
19
+ /**
20
+ * Dynamic toolset handler implementing 4 tools:
21
+ * - axiom_get_catalog: Structured taxonomy of skills by category
22
+ * - axiom_search_skills: BM25 text search with ranked results
23
+ * - axiom_read_skill: Section-filtered content delivery
24
+ * - axiom_run_agent: Agent instructions and metadata
25
+ */
26
+ export declare class DynamicToolsHandler {
27
+ private loader;
28
+ private logger;
29
+ constructor(loader: Loader, logger: Logger);
30
+ listTools(): Promise<{
31
+ tools: McpTool[];
32
+ }>;
33
+ callTool(name: string, args: Record<string, any>): Promise<ToolResponse>;
34
+ private handleGetCatalog;
35
+ private handleSearchSkills;
36
+ private handleReadSkill;
37
+ private handleRunAgent;
38
+ }
39
+ export {};
40
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/tools/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,UAAU,YAAY;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAED;;;;;;GAMG;AACH,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;gBADN,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM;IAGlB,SAAS,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IAuG1C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;YAiBhE,gBAAgB;YA0ChB,kBAAkB;YAqClB,eAAe;YAmDf,cAAc;CAqB7B"}