@cyanheads/openfec-mcp-server 0.2.3 → 0.3.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/CLAUDE.md +1 -1
- package/README.md +1 -1
- package/dist/mcp-server/prompts/definitions/campaign-analysis.prompt.d.ts.map +1 -1
- package/dist/mcp-server/prompts/definitions/campaign-analysis.prompt.js +1 -2
- package/dist/mcp-server/prompts/definitions/campaign-analysis.prompt.js.map +1 -1
- package/dist/mcp-server/prompts/definitions/money-trail.prompt.d.ts.map +1 -1
- package/dist/mcp-server/prompts/definitions/money-trail.prompt.js +1 -3
- package/dist/mcp-server/prompts/definitions/money-trail.prompt.js.map +1 -1
- package/dist/mcp-server/resources/definitions/candidate.resource.d.ts.map +1 -1
- package/dist/mcp-server/resources/definitions/candidate.resource.js +3 -0
- package/dist/mcp-server/resources/definitions/candidate.resource.js.map +1 -1
- package/dist/mcp-server/tools/definitions/index.d.ts +9 -0
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/lookup-calendar.tool.d.ts +1 -0
- package/dist/mcp-server/tools/definitions/lookup-calendar.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/lookup-calendar.tool.js +23 -51
- package/dist/mcp-server/tools/definitions/lookup-calendar.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/lookup-elections.tool.d.ts +1 -0
- package/dist/mcp-server/tools/definitions/lookup-elections.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/lookup-elections.tool.js +45 -42
- package/dist/mcp-server/tools/definitions/lookup-elections.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-candidates.tool.d.ts +1 -0
- package/dist/mcp-server/tools/definitions/search-candidates.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-candidates.tool.js +15 -24
- package/dist/mcp-server/tools/definitions/search-candidates.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-committees.tool.d.ts +1 -0
- package/dist/mcp-server/tools/definitions/search-committees.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-committees.tool.js +8 -24
- package/dist/mcp-server/tools/definitions/search-committees.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-contributions.tool.d.ts +1 -0
- package/dist/mcp-server/tools/definitions/search-contributions.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-contributions.tool.js +32 -49
- package/dist/mcp-server/tools/definitions/search-contributions.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-disbursements.tool.d.ts +1 -0
- package/dist/mcp-server/tools/definitions/search-disbursements.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-disbursements.tool.js +25 -43
- package/dist/mcp-server/tools/definitions/search-disbursements.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-expenditures.tool.d.ts +1 -0
- package/dist/mcp-server/tools/definitions/search-expenditures.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-expenditures.tool.js +25 -43
- package/dist/mcp-server/tools/definitions/search-expenditures.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-filings.tool.d.ts +1 -0
- package/dist/mcp-server/tools/definitions/search-filings.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-filings.tool.js +8 -36
- package/dist/mcp-server/tools/definitions/search-filings.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-legal.tool.d.ts +1 -0
- package/dist/mcp-server/tools/definitions/search-legal.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-legal.tool.js +23 -32
- package/dist/mcp-server/tools/definitions/search-legal.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/utils/format-helpers.d.ts +21 -0
- package/dist/mcp-server/tools/definitions/utils/format-helpers.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/utils/format-helpers.js +84 -0
- package/dist/mcp-server/tools/definitions/utils/format-helpers.js.map +1 -1
- package/dist/services/openfec/openfec-service.d.ts +2 -0
- package/dist/services/openfec/openfec-service.d.ts.map +1 -1
- package/dist/services/openfec/openfec-service.js +12 -4
- package/dist/services/openfec/openfec-service.js.map +1 -1
- package/package.json +1 -1
- package/server.json +3 -3
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
8
8
|
import { invalidParams } from '@cyanheads/mcp-ts-core/errors';
|
|
9
9
|
import { decodeCursor, getOpenFecService } from '../../../services/openfec/openfec-service.js';
|
|
10
|
-
import {
|
|
10
|
+
import { buildSearchCriteria, formatEmptyResult, renderRecord, SearchCriteriaSchema, } from './utils/format-helpers.js';
|
|
11
11
|
import { validateCandidateId, validateCommitteeId } from './utils/id-validators.js';
|
|
12
12
|
/** Expand S/O indicator to a readable label. */
|
|
13
13
|
const supportOpposeLabel = (code) => code === 'S' ? 'SUPPORT' : code === 'O' ? 'OPPOSE' : String(code ?? '');
|
|
@@ -96,6 +96,7 @@ export const searchExpenditures = tool('openfec_search_expenditures', {
|
|
|
96
96
|
})
|
|
97
97
|
.optional()
|
|
98
98
|
.describe('Page-based pagination info (by_candidate mode only).'),
|
|
99
|
+
search_criteria: SearchCriteriaSchema,
|
|
99
100
|
}),
|
|
100
101
|
async handler(input, ctx) {
|
|
101
102
|
const fec = getOpenFecService();
|
|
@@ -155,6 +156,7 @@ export const searchExpenditures = tool('openfec_search_expenditures', {
|
|
|
155
156
|
results: result.results,
|
|
156
157
|
next_cursor: result.nextCursor,
|
|
157
158
|
count: result.pagination.count,
|
|
159
|
+
search_criteria: result.results.length === 0 ? buildSearchCriteria(input) : undefined,
|
|
158
160
|
};
|
|
159
161
|
}
|
|
160
162
|
/* ---------------------------------------------------------------- */
|
|
@@ -186,62 +188,42 @@ export const searchExpenditures = tool('openfec_search_expenditures', {
|
|
|
186
188
|
return {
|
|
187
189
|
results: result.results,
|
|
188
190
|
pagination: result.pagination,
|
|
191
|
+
search_criteria: result.results.length === 0 ? buildSearchCriteria(input) : undefined,
|
|
189
192
|
};
|
|
190
193
|
},
|
|
191
194
|
format: (result) => {
|
|
192
195
|
if (result.results.length === 0) {
|
|
193
|
-
return
|
|
194
|
-
{
|
|
195
|
-
type: 'text',
|
|
196
|
-
text: 'No independent expenditures found. Try a different cycle, broaden filters, or verify the candidate_id/committee_id. Not all races attract significant outside spending.',
|
|
197
|
-
},
|
|
198
|
-
];
|
|
196
|
+
return formatEmptyResult(result.search_criteria, 'Try a different cycle, broaden filters, or verify the candidate_id/committee_id. Not all races attract significant outside spending.');
|
|
199
197
|
}
|
|
200
198
|
const isItemized = 'next_cursor' in result && result.next_cursor !== undefined;
|
|
199
|
+
const lines = [];
|
|
201
200
|
if (isItemized) {
|
|
202
|
-
|
|
203
|
-
`**${result.count
|
|
204
|
-
|
|
201
|
+
if (result.count != null) {
|
|
202
|
+
lines.push(`**${result.count.toLocaleString()} total independent expenditures**\n`);
|
|
203
|
+
}
|
|
205
204
|
for (const r of result.results) {
|
|
206
205
|
const indicator = supportOpposeLabel(r.support_oppose_indicator);
|
|
207
|
-
const
|
|
208
|
-
|
|
209
|
-
const committee = r.committee_name ?? r.committee_id ?? '';
|
|
210
|
-
const candidate = r.candidate_name ?? r.candidate_id ?? '';
|
|
211
|
-
const office = r.candidate_office ?? '';
|
|
212
|
-
const state = r.candidate_office_state ?? '';
|
|
213
|
-
const payee = r.payee_name ?? '';
|
|
214
|
-
const desc = r.expenditure_description ?? '';
|
|
215
|
-
const notice = r.is_notice ? ' [24/48h NOTICE]' : '';
|
|
216
|
-
lines.push(`- **[${indicator}]** ${amount} — ${candidate} (${office}${state ? `-${state}` : ''})${notice}`);
|
|
217
|
-
lines.push(` By: ${committee} on ${date}`);
|
|
218
|
-
if (payee)
|
|
219
|
-
lines.push(` Payee: ${payee}`);
|
|
220
|
-
if (desc)
|
|
221
|
-
lines.push(` ${desc}`);
|
|
206
|
+
const candidate = String(r.candidate_name ?? r.candidate_id ?? 'Unknown');
|
|
207
|
+
lines.push(`**[${indicator}] ${candidate}**\n${renderRecord(r, new Set(['candidate_name', 'support_oppose_indicator']))}`);
|
|
222
208
|
}
|
|
223
209
|
if (result.next_cursor) {
|
|
224
|
-
lines.push(
|
|
210
|
+
lines.push('\n_More results available — pass cursor to continue._');
|
|
225
211
|
}
|
|
226
|
-
return [{ type: 'text', text: lines.join('\n') }];
|
|
227
|
-
}
|
|
228
|
-
// By candidate aggregate
|
|
229
|
-
const lines = [
|
|
230
|
-
`**${result.pagination?.count?.toLocaleString() ?? '?'} candidate-committee pairs**\n`,
|
|
231
|
-
];
|
|
232
|
-
for (const r of result.results) {
|
|
233
|
-
const indicator = supportOpposeLabel(r.support_oppose_indicator);
|
|
234
|
-
const candidate = r.candidate_name ?? r.candidate_id ?? 'Unknown';
|
|
235
|
-
const committee = r.committee_name ?? r.committee_id ?? 'Unknown';
|
|
236
|
-
const total = fmt$(r.total);
|
|
237
|
-
const count = typeof r.count === 'number' ? ` (${r.count.toLocaleString()} expenditures)` : '';
|
|
238
|
-
lines.push(`- **[${indicator}]** ${candidate}`);
|
|
239
|
-
lines.push(` ${total}${count} from ${committee}`);
|
|
240
212
|
}
|
|
241
|
-
|
|
242
|
-
|
|
213
|
+
else {
|
|
214
|
+
if (result.pagination?.count != null) {
|
|
215
|
+
lines.push(`**${result.pagination.count.toLocaleString()} candidate-committee pairs**\n`);
|
|
216
|
+
}
|
|
217
|
+
for (const r of result.results) {
|
|
218
|
+
const indicator = supportOpposeLabel(r.support_oppose_indicator);
|
|
219
|
+
const candidate = String(r.candidate_name ?? r.candidate_id ?? 'Unknown');
|
|
220
|
+
lines.push(`**[${indicator}] ${candidate}**\n${renderRecord(r, new Set(['candidate_name', 'support_oppose_indicator']))}`);
|
|
221
|
+
}
|
|
222
|
+
if (result.pagination && result.pagination.page < result.pagination.pages) {
|
|
223
|
+
lines.push(`\n_Page ${result.pagination.page} of ${result.pagination.pages}_`);
|
|
224
|
+
}
|
|
243
225
|
}
|
|
244
|
-
return [{ type: 'text', text: lines.join('\n') }];
|
|
226
|
+
return [{ type: 'text', text: lines.join('\n\n') }];
|
|
245
227
|
},
|
|
246
228
|
});
|
|
247
229
|
//# sourceMappingURL=search-expenditures.tool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-expenditures.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-expenditures.tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAExF,OAAO,
|
|
1
|
+
{"version":3,"file":"search-expenditures.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-expenditures.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,5 +27,6 @@ export declare const searchFilings: import("@cyanheads/mcp-ts-core").ToolDefinit
|
|
|
27
27
|
count: z.ZodNumber;
|
|
28
28
|
per_page: z.ZodNumber;
|
|
29
29
|
}, z.core.$strip>;
|
|
30
|
+
search_criteria: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
30
31
|
}, z.core.$strip>>;
|
|
31
32
|
//# sourceMappingURL=search-filings.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-filings.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-filings.tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"search-filings.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-filings.tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAYjD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;kBA0GxB,CAAC"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
8
8
|
import { getOpenFecService } from '../../../services/openfec/openfec-service.js';
|
|
9
|
-
import {
|
|
9
|
+
import { buildSearchCriteria, formatEmptyResult, PaginationSchema, renderRecord, SearchCriteriaSchema, str, } from './utils/format-helpers.js';
|
|
10
10
|
export const searchFilings = tool('openfec_search_filings', {
|
|
11
11
|
description: 'Search FEC filings and reports by committee, candidate, form type, or date range. ' +
|
|
12
12
|
'Covers financial reports (F3/F3P/F3X), statements of candidacy (F2), ' +
|
|
@@ -44,6 +44,7 @@ export const searchFilings = tool('openfec_search_filings', {
|
|
|
44
44
|
.array(z.record(z.string(), z.unknown()))
|
|
45
45
|
.describe('Filing records with form_type, committee, report_type, financial totals, pdf_url, etc.'),
|
|
46
46
|
pagination: PaginationSchema.describe('Page-based pagination metadata.'),
|
|
47
|
+
search_criteria: SearchCriteriaSchema,
|
|
47
48
|
}),
|
|
48
49
|
async handler(input, ctx) {
|
|
49
50
|
const fec = getOpenFecService();
|
|
@@ -70,50 +71,21 @@ export const searchFilings = tool('openfec_search_filings', {
|
|
|
70
71
|
return {
|
|
71
72
|
filings: result.results,
|
|
72
73
|
pagination: result.pagination,
|
|
74
|
+
search_criteria: result.results.length === 0 ? buildSearchCriteria(input) : undefined,
|
|
73
75
|
};
|
|
74
76
|
},
|
|
75
77
|
format(result) {
|
|
76
78
|
if (result.filings.length === 0) {
|
|
77
|
-
return
|
|
78
|
-
{
|
|
79
|
-
type: 'text',
|
|
80
|
-
text: 'No filings found. Try removing the form_type or report_type filter, broadening the date range, or verifying the committee_id.',
|
|
81
|
-
},
|
|
82
|
-
];
|
|
79
|
+
return formatEmptyResult(result.search_criteria, 'Try removing the form_type or report_type filter, broadening the date range, or verifying the committee_id.');
|
|
83
80
|
}
|
|
81
|
+
const headerKeys = new Set(['form_type', 'committee_name', 'committee_id']);
|
|
84
82
|
const lines = result.filings.map((f) => {
|
|
85
83
|
const formType = str(f, 'form_type');
|
|
86
84
|
const committeeName = str(f, 'committee_name');
|
|
87
85
|
const committeeId = str(f, 'committee_id');
|
|
88
|
-
const
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
const coverageEnd = str(f, 'coverage_end_date');
|
|
92
|
-
const candidateName = str(f, 'candidate_name');
|
|
93
|
-
const pdfUrl = str(f, 'pdf_url');
|
|
94
|
-
let line = `**${formType}** — ${committeeName} (${committeeId})`;
|
|
95
|
-
if (reportType)
|
|
96
|
-
line += `\n Report: ${reportType}`;
|
|
97
|
-
if (f.report_year)
|
|
98
|
-
line += ` (${f.report_year})`;
|
|
99
|
-
if (receiptDate)
|
|
100
|
-
line += ` | Filed: ${receiptDate}`;
|
|
101
|
-
if (candidateName)
|
|
102
|
-
line += `\n Candidate: ${candidateName}`;
|
|
103
|
-
// Financial totals
|
|
104
|
-
const hasFinancials = typeof f.total_receipts === 'number' || typeof f.total_disbursements === 'number';
|
|
105
|
-
if (hasFinancials) {
|
|
106
|
-
line += `\n Receipts: ${fmt$(f.total_receipts)} | Disbursements: ${fmt$(f.total_disbursements)}`;
|
|
107
|
-
line += ` | Cash: ${fmt$(f.cash_on_hand_end_period)} | Debt: ${fmt$(f.debts_owed_by_committee)}`;
|
|
108
|
-
}
|
|
109
|
-
if (coverageStart && coverageEnd) {
|
|
110
|
-
line += `\n Coverage: ${coverageStart} to ${coverageEnd}`;
|
|
111
|
-
}
|
|
112
|
-
if (f.is_amended === true)
|
|
113
|
-
line += ' | AMENDED';
|
|
114
|
-
if (pdfUrl)
|
|
115
|
-
line += `\n PDF: ${pdfUrl}`;
|
|
116
|
-
return line;
|
|
86
|
+
const header = `**${formType}** — ${committeeName} (${committeeId})`;
|
|
87
|
+
const fields = renderRecord(f, headerKeys);
|
|
88
|
+
return fields ? `${header}\n${fields}` : header;
|
|
117
89
|
});
|
|
118
90
|
const { page, pages, count } = result.pagination;
|
|
119
91
|
lines.push(`\n---\nPage ${page} of ${pages} (${count} total)`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-filings.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-filings.tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE1E,OAAO,
|
|
1
|
+
{"version":3,"file":"search-filings.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-filings.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,5 +28,6 @@ export declare const searchLegal: import("@cyanheads/mcp-ts-core").ToolDefinitio
|
|
|
28
28
|
}, z.core.$strip>, z.ZodObject<{
|
|
29
29
|
results: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
30
30
|
total_count: z.ZodNumber;
|
|
31
|
+
search_criteria: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
31
32
|
}, z.core.$strip>>;
|
|
32
33
|
//# sourceMappingURL=search-legal.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-legal.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-legal.tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"search-legal.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-legal.tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAoBjD,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;kBA2KtB,CAAC"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
8
8
|
import { invalidParams } from '@cyanheads/mcp-ts-core/errors';
|
|
9
9
|
import { getOpenFecService } from '../../../services/openfec/openfec-service.js';
|
|
10
|
-
import {
|
|
10
|
+
import { buildSearchCriteria, formatEmptyResult, renderRecord, SearchCriteriaSchema, } from './utils/format-helpers.js';
|
|
11
11
|
/** Human-readable labels for document type discriminators. */
|
|
12
12
|
const typeLabels = {
|
|
13
13
|
advisory_opinion: 'Advisory Opinion',
|
|
@@ -25,7 +25,7 @@ export const searchLegal = tool('openfec_search_legal', {
|
|
|
25
25
|
type: z
|
|
26
26
|
.enum(['advisory_opinions', 'murs', 'adrs', 'admin_fines', 'statutes'])
|
|
27
27
|
.optional()
|
|
28
|
-
.describe('Document type filter. Omit to search all types.'),
|
|
28
|
+
.describe('Document type filter. Omit to search all types. admin_fines is slow without a query or respondent filter.'),
|
|
29
29
|
ao_number: z.string().optional().describe('Specific advisory opinion number (e.g. "2024-01").'),
|
|
30
30
|
case_number: z.string().optional().describe('Specific MUR or ADR case number.'),
|
|
31
31
|
respondent: z.string().optional().describe('Respondent name (enforcement cases).'),
|
|
@@ -57,6 +57,7 @@ export const searchLegal = tool('openfec_search_legal', {
|
|
|
57
57
|
.array(z.record(z.string(), z.unknown()))
|
|
58
58
|
.describe('Legal documents with a document_type discriminator (advisory_opinion, mur, adr, admin_fine, statute).'),
|
|
59
59
|
total_count: z.number().describe('Total matching documents across all types.'),
|
|
60
|
+
search_criteria: SearchCriteriaSchema,
|
|
60
61
|
}),
|
|
61
62
|
async handler(input, ctx) {
|
|
62
63
|
const hasFilter = input.query || input.type || input.ao_number || input.case_number;
|
|
@@ -123,18 +124,16 @@ export const searchLegal = tool('openfec_search_legal', {
|
|
|
123
124
|
}
|
|
124
125
|
return d;
|
|
125
126
|
});
|
|
126
|
-
return {
|
|
127
|
+
return {
|
|
128
|
+
results: trimmed,
|
|
129
|
+
total_count: data.totalCount,
|
|
130
|
+
search_criteria: trimmed.length === 0 ? buildSearchCriteria(input) : undefined,
|
|
131
|
+
};
|
|
127
132
|
},
|
|
128
133
|
format: (result) => {
|
|
129
134
|
if (result.results.length === 0) {
|
|
130
|
-
return
|
|
131
|
-
{
|
|
132
|
-
type: 'text',
|
|
133
|
-
text: 'No legal documents found. Try different search terms, remove the type filter to search all document types, or check the ao_number/case_number format.',
|
|
134
|
-
},
|
|
135
|
-
];
|
|
135
|
+
return formatEmptyResult(result.search_criteria, 'Try different search terms, remove the type filter to search all document types, or check the ao_number/case_number format.');
|
|
136
136
|
}
|
|
137
|
-
/** Group results by document_type for readable output. */
|
|
138
137
|
const grouped = new Map();
|
|
139
138
|
for (const doc of result.results) {
|
|
140
139
|
const docType = String(doc.document_type ?? 'unknown');
|
|
@@ -145,32 +144,24 @@ export const searchLegal = tool('openfec_search_legal', {
|
|
|
145
144
|
}
|
|
146
145
|
group.push(doc);
|
|
147
146
|
}
|
|
147
|
+
const headerKeys = new Set(['ao_no', 'case_no', 'no', 'name', 'document_type']);
|
|
148
148
|
const sections = [];
|
|
149
149
|
for (const [docType, docs] of grouped) {
|
|
150
150
|
const label = typeLabels[docType] ?? docType;
|
|
151
|
-
const
|
|
152
|
-
const id = doc.ao_no ?? doc.case_no ?? doc.no ?? '';
|
|
153
|
-
const name = doc.name
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
?
|
|
157
|
-
:
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
if (name)
|
|
164
|
-
parts.push(String(name));
|
|
165
|
-
if (date)
|
|
166
|
-
parts.push(`(${date})`);
|
|
167
|
-
if (penalty)
|
|
168
|
-
parts.push(penalty);
|
|
169
|
-
if (summary)
|
|
170
|
-
parts.push(`\n ${String(summary).slice(0, 300)}`);
|
|
171
|
-
return parts.join(' ');
|
|
151
|
+
const items = docs.map((doc) => {
|
|
152
|
+
const id = String(doc.ao_no ?? doc.case_no ?? doc.no ?? '');
|
|
153
|
+
const name = doc.name ? String(doc.name) : '';
|
|
154
|
+
const header = id
|
|
155
|
+
? name
|
|
156
|
+
? `**${id}** — ${name}`
|
|
157
|
+
: `**${id}**`
|
|
158
|
+
: name
|
|
159
|
+
? `**${name}**`
|
|
160
|
+
: '**Document**';
|
|
161
|
+
const fields = renderRecord(doc, headerKeys);
|
|
162
|
+
return fields ? `${header}\n${fields}` : header;
|
|
172
163
|
});
|
|
173
|
-
sections.push(`### ${label}\n${
|
|
164
|
+
sections.push(`### ${label}\n${items.join('\n\n')}`);
|
|
174
165
|
}
|
|
175
166
|
sections.push(`\n_${result.total_count} total matching document(s)_`);
|
|
176
167
|
return [{ type: 'text', text: sections.join('\n\n') }];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-legal.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-legal.tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE1E,OAAO,
|
|
1
|
+
{"version":3,"file":"search-legal.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-legal.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,22 @@
|
|
|
5
5
|
* @module src/mcp-server/tools/definitions/format-helpers
|
|
6
6
|
*/
|
|
7
7
|
import { z } from '@cyanheads/mcp-ts-core';
|
|
8
|
+
/**
|
|
9
|
+
* Build a search criteria summary from tool input.
|
|
10
|
+
* Strips undefined/null, empty strings, and pagination params so only
|
|
11
|
+
* meaningful search filters remain.
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildSearchCriteria(input: Record<string, unknown>): Record<string, unknown>;
|
|
14
|
+
/**
|
|
15
|
+
* Render an empty-result format block with echoed search criteria and a
|
|
16
|
+
* domain-specific suggestion. Used by all tool format() functions.
|
|
17
|
+
*/
|
|
18
|
+
export declare function formatEmptyResult(criteria: Record<string, unknown> | undefined, hint: string): {
|
|
19
|
+
type: 'text';
|
|
20
|
+
text: string;
|
|
21
|
+
}[];
|
|
22
|
+
/** Reusable optional search_criteria output field schema. */
|
|
23
|
+
export declare const SearchCriteriaSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
8
24
|
/** Format a number as USD or return 'N/A' for non-numeric values. */
|
|
9
25
|
export declare const fmt$: (n: unknown) => string;
|
|
10
26
|
/** Safely read a string field from an untyped record. */
|
|
@@ -16,4 +32,9 @@ export declare const PaginationSchema: z.ZodObject<{
|
|
|
16
32
|
count: z.ZodNumber;
|
|
17
33
|
per_page: z.ZodNumber;
|
|
18
34
|
}, z.core.$strip>;
|
|
35
|
+
/**
|
|
36
|
+
* Render all non-empty fields from a record as indented `key: value` lines.
|
|
37
|
+
* Pass `skip` to exclude fields already rendered in a header line.
|
|
38
|
+
*/
|
|
39
|
+
export declare function renderRecord(rec: Record<string, unknown>, skip?: ReadonlySet<string>): string;
|
|
19
40
|
//# sourceMappingURL=format-helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-helpers.d.ts","sourceRoot":"","sources":["../../../../../src/mcp-server/tools/definitions/utils/format-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"format-helpers.d.ts","sourceRoot":"","sources":["../../../../../src/mcp-server/tools/definitions/utils/format-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAa3C;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQ3F;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC7C,IAAI,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAalC;AAED,6DAA6D;AAC7D,eAAO,MAAM,oBAAoB,uDAM9B,CAAC;AAEJ,qEAAqE;AACrE,eAAO,MAAM,IAAI,GAAI,GAAG,OAAO,KAAG,MACwB,CAAC;AAE3D,yDAAyD;AACzD,eAAO,MAAM,GAAG,GAAI,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,MAAM,KAAG,MACN,CAAC;AAE3D,oDAAoD;AACpD,eAAO,MAAM,gBAAgB;;;;;iBAK3B,CAAC;AAEH;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,CAQ7F"}
|
|
@@ -5,6 +5,54 @@
|
|
|
5
5
|
* @module src/mcp-server/tools/definitions/format-helpers
|
|
6
6
|
*/
|
|
7
7
|
import { z } from '@cyanheads/mcp-ts-core';
|
|
8
|
+
/** Pagination and internal params excluded from search criteria echo. */
|
|
9
|
+
const PAGINATION_KEYS = new Set([
|
|
10
|
+
'page',
|
|
11
|
+
'per_page',
|
|
12
|
+
'cursor',
|
|
13
|
+
'from_hit',
|
|
14
|
+
'hits_returned',
|
|
15
|
+
'most_recent',
|
|
16
|
+
'election_full',
|
|
17
|
+
]);
|
|
18
|
+
/**
|
|
19
|
+
* Build a search criteria summary from tool input.
|
|
20
|
+
* Strips undefined/null, empty strings, and pagination params so only
|
|
21
|
+
* meaningful search filters remain.
|
|
22
|
+
*/
|
|
23
|
+
export function buildSearchCriteria(input) {
|
|
24
|
+
const criteria = {};
|
|
25
|
+
for (const [key, value] of Object.entries(input)) {
|
|
26
|
+
if (value === undefined || value === null || value === '')
|
|
27
|
+
continue;
|
|
28
|
+
if (PAGINATION_KEYS.has(key))
|
|
29
|
+
continue;
|
|
30
|
+
criteria[key] = value;
|
|
31
|
+
}
|
|
32
|
+
return criteria;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Render an empty-result format block with echoed search criteria and a
|
|
36
|
+
* domain-specific suggestion. Used by all tool format() functions.
|
|
37
|
+
*/
|
|
38
|
+
export function formatEmptyResult(criteria, hint) {
|
|
39
|
+
const lines = ['No results found.'];
|
|
40
|
+
if (criteria && Object.keys(criteria).length > 0) {
|
|
41
|
+
lines.push('', '**Search criteria used:**');
|
|
42
|
+
for (const [key, value] of Object.entries(criteria)) {
|
|
43
|
+
const display = typeof value === 'object' ? JSON.stringify(value) : String(value);
|
|
44
|
+
lines.push(` ${key}: ${display}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
lines.push('', hint);
|
|
48
|
+
return [{ type: 'text', text: lines.join('\n') }];
|
|
49
|
+
}
|
|
50
|
+
/** Reusable optional search_criteria output field schema. */
|
|
51
|
+
export const SearchCriteriaSchema = z
|
|
52
|
+
.record(z.string(), z.unknown())
|
|
53
|
+
.optional()
|
|
54
|
+
.describe('Echo of the search filters that produced this result set. ' +
|
|
55
|
+
'Populated when results are empty to help diagnose why nothing matched.');
|
|
8
56
|
/** Format a number as USD or return 'N/A' for non-numeric values. */
|
|
9
57
|
export const fmt$ = (n) => typeof n === 'number' ? `$${n.toLocaleString()}` : 'N/A';
|
|
10
58
|
/** Safely read a string field from an untyped record. */
|
|
@@ -16,4 +64,40 @@ export const PaginationSchema = z.object({
|
|
|
16
64
|
count: z.number().describe('Total result count.'),
|
|
17
65
|
per_page: z.number().describe('Results per page.'),
|
|
18
66
|
});
|
|
67
|
+
/**
|
|
68
|
+
* Render all non-empty fields from a record as indented `key: value` lines.
|
|
69
|
+
* Pass `skip` to exclude fields already rendered in a header line.
|
|
70
|
+
*/
|
|
71
|
+
export function renderRecord(rec, skip) {
|
|
72
|
+
const lines = [];
|
|
73
|
+
for (const [key, value] of Object.entries(rec)) {
|
|
74
|
+
if (skip?.has(key))
|
|
75
|
+
continue;
|
|
76
|
+
const text = renderValue(value);
|
|
77
|
+
if (text !== null)
|
|
78
|
+
lines.push(` ${key}: ${text}`);
|
|
79
|
+
}
|
|
80
|
+
return lines.join('\n');
|
|
81
|
+
}
|
|
82
|
+
/** Format a single value for display. Returns null for empty/null/undefined. */
|
|
83
|
+
function renderValue(value) {
|
|
84
|
+
if (value === null || value === undefined || value === '')
|
|
85
|
+
return null;
|
|
86
|
+
if (typeof value === 'boolean')
|
|
87
|
+
return String(value);
|
|
88
|
+
if (typeof value === 'number')
|
|
89
|
+
return String(value);
|
|
90
|
+
if (typeof value === 'string')
|
|
91
|
+
return value;
|
|
92
|
+
if (Array.isArray(value)) {
|
|
93
|
+
if (value.length === 0)
|
|
94
|
+
return null;
|
|
95
|
+
return value
|
|
96
|
+
.map((v) => (typeof v === 'object' && v !== null ? JSON.stringify(v) : String(v)))
|
|
97
|
+
.join(', ');
|
|
98
|
+
}
|
|
99
|
+
if (typeof value === 'object')
|
|
100
|
+
return JSON.stringify(value);
|
|
101
|
+
return String(value);
|
|
102
|
+
}
|
|
19
103
|
//# sourceMappingURL=format-helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-helpers.js","sourceRoot":"","sources":["../../../../../src/mcp-server/tools/definitions/utils/format-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAE3C,qEAAqE;AACrE,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAU,EAAU,EAAE,CACzC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAE3D,yDAAyD;AACzD,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,GAA4B,EAAE,GAAW,EAAU,EAAE,CACvE,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,GAAG,CAAC,GAAG,CAAY,CAAC,CAAC,CAAC,EAAE,CAAC;AAE3D,oDAAoD;AACpD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC7D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACpD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACjD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;CACnD,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"format-helpers.js","sourceRoot":"","sources":["../../../../../src/mcp-server/tools/definitions/utils/format-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,8 @@ export declare class OpenFecService {
|
|
|
42
42
|
getExpendituresByCandidate(params: FecParams, ctx: Context): Promise<PageResult>;
|
|
43
43
|
searchFilings(params: FecParams, ctx: Context): Promise<PageResult>;
|
|
44
44
|
searchElections(params: FecParams, ctx: Context): Promise<PageResult>;
|
|
45
|
+
/** Search elections with ZIP support — uses /elections/search/ which accepts zip. */
|
|
46
|
+
searchElectionsByZip(params: FecParams, ctx: Context): Promise<PageResult>;
|
|
45
47
|
/** Fetch election summary — flat response (no pagination wrapper). */
|
|
46
48
|
getElectionSummary(params: FecParams, ctx: Context): Promise<ElectionSummary>;
|
|
47
49
|
searchLegal(params: FecParams, ctx: Context): Promise<LegalResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openfec-service.d.ts","sourceRoot":"","sources":["../../../src/services/openfec/openfec-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,OAAO,KAAK,EACV,eAAe,EAGf,SAAS,EAET,WAAW,EACX,UAAU,EACV,UAAU,EACX,MAAM,YAAY,CAAC;AAMpB,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAExE;AAED,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEnE;AAwBD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;;IAUtC,iEAAiE;IACjE,OAAO,CAAC,QAAQ;IAehB;;;OAGG;YACW,SAAS;IAuCvB;;;OAGG;YACW,SAAS;IAyCvB,2EAA2E;YAC7D,gBAAgB;IA4C9B,sFAAsF;IACtF,OAAO,CAAC,gBAAgB;IAUxB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAItE,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAIpE,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAQxE,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAItE,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAQpE,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAIzE,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAkB7F,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAIzE,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAe7F,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAIxE,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAQhF,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAQnE,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAIrE,sEAAsE;IAChE,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC;IAiCnF,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IAQlE,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAItE,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAIvE,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;CAGvE;
|
|
1
|
+
{"version":3,"file":"openfec-service.d.ts","sourceRoot":"","sources":["../../../src/services/openfec/openfec-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,OAAO,KAAK,EACV,eAAe,EAGf,SAAS,EAET,WAAW,EACX,UAAU,EACV,UAAU,EACX,MAAM,YAAY,CAAC;AAMpB,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAExE;AAED,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEnE;AAwBD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;;IAUtC,iEAAiE;IACjE,OAAO,CAAC,QAAQ;IAehB;;;OAGG;YACW,SAAS;IAuCvB;;;OAGG;YACW,SAAS;IAyCvB,2EAA2E;YAC7D,gBAAgB;IA4C9B,sFAAsF;IACtF,OAAO,CAAC,gBAAgB;IAUxB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAItE,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAIpE,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAQxE,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAItE,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAQpE,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAIzE,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAkB7F,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAIzE,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAe7F,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAIxE,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAQhF,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAQnE,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAIrE,qFAAqF;IACrF,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAI1E,sEAAsE;IAChE,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC;IAiCnF,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IAQlE,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAItE,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAIvE,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;CAGvE;AA2ED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CAIlD"}
|