@handong66/evidoc-mcp-server 0.1.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.
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ export declare const READ_ONLY_TOOLS: readonly ["evidoc.agent_scan", "evidoc.get_drift_status", "evidoc.diagnose_drift", "evidoc.suggest_doc_fix", "evidoc.get_repo_contract", "evidoc.search_docs", "evidoc.check_worktree_drift", "evidoc.explain_drift", "evidoc.get_evidence_pack", "evidoc.draft_doc_patch", "evidoc.validate_patch"];
4
+ export declare const WRITE_TOOLS: readonly ["evidoc.record_review"];
5
+ export type EvidocMcpTool = (typeof READ_ONLY_TOOLS)[number] | (typeof WRITE_TOOLS)[number];
6
+ export interface McpToolDefinition {
7
+ name: EvidocMcpTool;
8
+ description: string;
9
+ inputSchema: {
10
+ type: "object";
11
+ properties: Record<string, unknown>;
12
+ required?: string[];
13
+ };
14
+ }
15
+ export interface McpToolResult {
16
+ isError: boolean;
17
+ content: Array<{
18
+ type: "text";
19
+ text: string;
20
+ }>;
21
+ }
22
+ export interface McpContext {
23
+ cwd: string;
24
+ allowWrites: boolean;
25
+ }
26
+ export interface JsonRpcRequest {
27
+ jsonrpc: "2.0";
28
+ id?: string | number | null;
29
+ method: string;
30
+ params?: unknown;
31
+ }
32
+ export interface JsonRpcResponse {
33
+ jsonrpc: "2.0";
34
+ id?: string | number | null;
35
+ result?: unknown;
36
+ error?: {
37
+ code: number;
38
+ message: string;
39
+ };
40
+ }
41
+ export declare function isWriteToolAllowed(tool: EvidocMcpTool, allowWrites: boolean): boolean;
42
+ export declare function listMcpTools(): McpToolDefinition[];
43
+ export declare function createMcpSdkServer(context: McpContext): McpServer;
44
+ export declare function callMcpTool(tool: EvidocMcpTool, args: Record<string, unknown> | undefined, context: McpContext): Promise<McpToolResult>;
45
+ export declare function handleJsonRpcRequest(request: JsonRpcRequest, context?: Partial<McpContext>): Promise<JsonRpcResponse>;
46
+ export declare function runMcpStdio(context?: Partial<McpContext>): Promise<void>;
47
+ export declare function resolveMcpStartupCwd(defaultCwd: string): Promise<string>;
@@ -0,0 +1,563 @@
1
+ #!/usr/bin/env node
2
+ import { realpathSync } from "node:fs";
3
+ import { access, appendFile, mkdir, readFile } from "node:fs/promises";
4
+ import { dirname, join } from "node:path";
5
+ import { pathToFileURL } from "node:url";
6
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
8
+ import { checkRepository, createAgentRuntimeContract, readFindingDocuments, resolveExistingPathInsideRoot, resolveExistingRootInsideBoundary, resolveWritablePathInsideRoot } from "@handong66/evidoc-core";
9
+ import { createPatchProposals, validatePatchProposal } from "@handong66/evidoc-patcher";
10
+ import { formatMarkdownReport } from "@handong66/evidoc-reports";
11
+ import { serializeReviewLogEntry } from "@handong66/evidoc-review-log";
12
+ import { z } from "zod";
13
+ export const READ_ONLY_TOOLS = [
14
+ "evidoc.agent_scan",
15
+ "evidoc.get_drift_status",
16
+ "evidoc.diagnose_drift",
17
+ "evidoc.suggest_doc_fix",
18
+ "evidoc.get_repo_contract",
19
+ "evidoc.search_docs",
20
+ "evidoc.check_worktree_drift",
21
+ "evidoc.explain_drift",
22
+ "evidoc.get_evidence_pack",
23
+ "evidoc.draft_doc_patch",
24
+ "evidoc.validate_patch"
25
+ ];
26
+ export const WRITE_TOOLS = [
27
+ "evidoc.record_review"
28
+ ];
29
+ export function isWriteToolAllowed(tool, allowWrites) {
30
+ return allowWrites || !WRITE_TOOLS.includes(tool);
31
+ }
32
+ export function listMcpTools() {
33
+ return [
34
+ {
35
+ name: "evidoc.agent_scan",
36
+ description: "Default agent entrypoint: run a fresh repo-local scan and return actionable evidence, freshness, read-parity, and next commands in one bundle.",
37
+ inputSchema: { type: "object", properties: { root: { type: "string" } } }
38
+ },
39
+ {
40
+ name: "evidoc.get_drift_status",
41
+ description: "Return the Evidoc Agent Runtime Contract for the current repository. Use this before speaking about drift status in an agent reply.",
42
+ inputSchema: { type: "object", properties: { root: { type: "string" } } }
43
+ },
44
+ {
45
+ name: "evidoc.diagnose_drift",
46
+ description: "Return Evidoc findings with runtime fingerprints and agent-actionable repair context without writing files.",
47
+ inputSchema: { type: "object", properties: { root: { type: "string" } } }
48
+ },
49
+ {
50
+ name: "evidoc.suggest_doc_fix",
51
+ description: "Return evidence-bound documentation patch proposals plus the matching runtime fingerprint. Does not write files.",
52
+ inputSchema: { type: "object", properties: { root: { type: "string" } } }
53
+ },
54
+ {
55
+ name: "evidoc.get_repo_contract",
56
+ description: "Read the local Evidoc pursuit goal and architecture contract when present.",
57
+ inputSchema: { type: "object", properties: { root: { type: "string" } } }
58
+ },
59
+ {
60
+ name: "evidoc.search_docs",
61
+ description: "Search repository Markdown documents for a literal query.",
62
+ inputSchema: {
63
+ type: "object",
64
+ properties: { root: { type: "string" }, query: { type: "string" } },
65
+ required: ["query"]
66
+ }
67
+ },
68
+ {
69
+ name: "evidoc.check_worktree_drift",
70
+ description: "Run a read-only Evidoc scan for the current repository.",
71
+ inputSchema: { type: "object", properties: { root: { type: "string" } } }
72
+ },
73
+ {
74
+ name: "evidoc.explain_drift",
75
+ description: "Explain a finding by id or by index from the current report.",
76
+ inputSchema: {
77
+ type: "object",
78
+ properties: { root: { type: "string" }, findingId: { type: "string" }, index: { type: "number" } }
79
+ }
80
+ },
81
+ {
82
+ name: "evidoc.get_evidence_pack",
83
+ description: "Return a compact evidence pack for all current drift findings.",
84
+ inputSchema: { type: "object", properties: { root: { type: "string" } } }
85
+ },
86
+ {
87
+ name: "evidoc.draft_doc_patch",
88
+ description: "Draft evidence-bound patch proposals without writing files.",
89
+ inputSchema: { type: "object", properties: { root: { type: "string" } } }
90
+ },
91
+ {
92
+ name: "evidoc.validate_patch",
93
+ description: "Validate that a proposed patch is bound to a current finding and allowed path.",
94
+ inputSchema: {
95
+ type: "object",
96
+ properties: { root: { type: "string" }, proposal: { type: "object" } },
97
+ required: ["proposal"]
98
+ }
99
+ },
100
+ {
101
+ name: "evidoc.record_review",
102
+ description: "Append a human review decision to .evidoc/review-log.jsonl.",
103
+ inputSchema: {
104
+ type: "object",
105
+ properties: {
106
+ root: { type: "string" },
107
+ findingId: { type: "string" },
108
+ decision: { type: "string" },
109
+ reviewer: { type: "string" },
110
+ expiresAt: { type: "string" },
111
+ note: { type: "string" }
112
+ },
113
+ required: ["findingId", "decision", "reviewer"]
114
+ }
115
+ }
116
+ ];
117
+ }
118
+ export function createMcpSdkServer(context) {
119
+ const server = new McpServer({ name: "evidoc", version: "0.1.0" });
120
+ for (const tool of listMcpTools()) {
121
+ server.registerTool(tool.name, {
122
+ description: tool.description,
123
+ inputSchema: sdkInputSchemaFor(tool.name)
124
+ }, async (args) => {
125
+ const result = await callMcpTool(tool.name, args, context);
126
+ return { content: result.content, isError: result.isError };
127
+ });
128
+ }
129
+ return server;
130
+ }
131
+ export async function callMcpTool(tool, args = {}, context) {
132
+ if (!isWriteToolAllowed(tool, context.allowWrites)) {
133
+ return textResult(`Tool ${tool} requires allowWrites=true.`, true);
134
+ }
135
+ try {
136
+ const root = await resolveMcpRoot(context, args);
137
+ if (!root) {
138
+ return textResult(mcpRootError(args), true);
139
+ }
140
+ if (tool === "evidoc.agent_scan") {
141
+ const report = await checkRepository(root);
142
+ const documents = await readFindingDocuments(root, report);
143
+ const proposals = createPatchProposals(report, documents);
144
+ return textResult(JSON.stringify(createAgentScanPayload(report, proposals), null, 2));
145
+ }
146
+ if (tool === "evidoc.get_drift_status") {
147
+ const report = await checkRepository(root);
148
+ return textResult(JSON.stringify({
149
+ runtime: createMcpRuntimeContract(report),
150
+ summary: report.summary
151
+ }, null, 2));
152
+ }
153
+ if (tool === "evidoc.diagnose_drift") {
154
+ const report = await checkRepository(root);
155
+ const documents = await readFindingDocuments(root, report);
156
+ const proposals = createPatchProposals(report, documents);
157
+ return textResult(JSON.stringify(createAgentDiagnosisPayload(report, proposals), null, 2));
158
+ }
159
+ if (tool === "evidoc.suggest_doc_fix") {
160
+ const report = await checkRepository(root);
161
+ const documents = await readFindingDocuments(root, report);
162
+ const proposals = createPatchProposals(report, documents);
163
+ return textResult(JSON.stringify({
164
+ runtime: createMcpRuntimeContract(report),
165
+ proposals
166
+ }, null, 2));
167
+ }
168
+ if (tool === "evidoc.check_worktree_drift") {
169
+ const report = await checkRepository(root);
170
+ return textResult(formatMarkdownReport(report));
171
+ }
172
+ if (tool === "evidoc.get_evidence_pack") {
173
+ const report = await checkRepository(root);
174
+ return textResult(JSON.stringify({ root: report.root, findings: report.findings }, null, 2));
175
+ }
176
+ if (tool === "evidoc.explain_drift") {
177
+ const report = await checkRepository(root);
178
+ const finding = typeof args.findingId === "string"
179
+ ? report.findings.find((candidate) => candidate.id === args.findingId)
180
+ : report.findings[typeof args.index === "number" ? args.index : 0];
181
+ if (!finding)
182
+ return textResult("No matching Evidoc finding.", true);
183
+ return textResult(JSON.stringify(finding, null, 2));
184
+ }
185
+ if (tool === "evidoc.search_docs") {
186
+ const query = typeof args.query === "string" ? args.query : "";
187
+ if (!query)
188
+ return textResult("query is required.", true);
189
+ const report = await checkRepository(root);
190
+ const matches = [];
191
+ for (const document of report.documents) {
192
+ const documentPath = await resolveExistingPathInsideRoot(root, document.path);
193
+ if (!documentPath)
194
+ continue;
195
+ const text = await readFile(documentPath, "utf8");
196
+ text.split(/\r?\n/).forEach((line, index) => {
197
+ if (line.includes(query)) {
198
+ matches.push({ path: document.path, line: index + 1, text: line });
199
+ }
200
+ });
201
+ }
202
+ return textResult(JSON.stringify(matches, null, 2));
203
+ }
204
+ if (tool === "evidoc.get_repo_contract") {
205
+ const paths = [
206
+ "docs/vision/pursuit-goal.zh-CN.md",
207
+ "docs/architecture/full-scope-architecture.md"
208
+ ];
209
+ const documents = {};
210
+ for (const path of paths) {
211
+ try {
212
+ const documentPath = await resolveExistingPathInsideRoot(root, path);
213
+ documents[path] = documentPath ? await readFile(documentPath, "utf8") : "";
214
+ }
215
+ catch {
216
+ documents[path] = "";
217
+ }
218
+ }
219
+ return textResult(JSON.stringify(documents, null, 2));
220
+ }
221
+ if (tool === "evidoc.draft_doc_patch") {
222
+ const report = await checkRepository(root);
223
+ const documents = await readFindingDocuments(root, report);
224
+ return textResult(JSON.stringify(createPatchProposals(report, documents), null, 2));
225
+ }
226
+ if (tool === "evidoc.validate_patch") {
227
+ const report = await checkRepository(root);
228
+ return textResult(JSON.stringify(validatePatchProposal(args.proposal, report), null, 2));
229
+ }
230
+ if (tool === "evidoc.record_review") {
231
+ const findingId = stringArg(args, "findingId");
232
+ const decision = stringArg(args, "decision");
233
+ const reviewer = stringArg(args, "reviewer");
234
+ const logPath = await resolveWritablePathInsideRoot(root, ".evidoc/review-log.jsonl");
235
+ if (!logPath)
236
+ return textResult("review log path must stay inside repository root.", true);
237
+ await mkdir(dirname(logPath), { recursive: true });
238
+ await appendFile(logPath, `${serializeReviewLogEntry({
239
+ findingId,
240
+ decision,
241
+ reviewer,
242
+ reviewedAt: new Date().toISOString(),
243
+ expiresAt: typeof args.expiresAt === "string" ? args.expiresAt : undefined,
244
+ note: typeof args.note === "string" ? args.note : undefined
245
+ })}\n`, "utf8");
246
+ return textResult(`Recorded review decision for ${findingId}.`);
247
+ }
248
+ return textResult(`Unknown Evidoc tool: ${tool}`, true);
249
+ }
250
+ catch (error) {
251
+ return textResult(error instanceof Error ? error.message : String(error), true);
252
+ }
253
+ }
254
+ export async function handleJsonRpcRequest(request, context = {}) {
255
+ const id = request.id ?? null;
256
+ try {
257
+ if (request.method === "initialize") {
258
+ return {
259
+ jsonrpc: "2.0",
260
+ id,
261
+ result: {
262
+ protocolVersion: "2024-11-05",
263
+ capabilities: { tools: {} },
264
+ serverInfo: { name: "evidoc", version: "0.0.0" },
265
+ instructions: "Call evidoc.agent_scan first for repair work, or evidoc.get_drift_status before speaking about drift status. These read-only tools return the Agent Runtime Contract, freshness, read-parity evidence, patch classifications, next commands, and privacy constraints.",
266
+ privacy: {
267
+ repositoryContentUpload: "never_by_default",
268
+ telemetry: "disabled_by_default"
269
+ }
270
+ }
271
+ };
272
+ }
273
+ if (request.method === "tools/list") {
274
+ return { jsonrpc: "2.0", id, result: { tools: listMcpTools() } };
275
+ }
276
+ if (request.method === "tools/call") {
277
+ const params = asRecord(request.params);
278
+ const name = params.name;
279
+ if (!isEvidocTool(name)) {
280
+ return { jsonrpc: "2.0", id, error: { code: -32602, message: "Unknown tool." } };
281
+ }
282
+ const result = await callMcpTool(name, asRecord(params.arguments), {
283
+ cwd: context.cwd ?? process.cwd(),
284
+ allowWrites: context.allowWrites ?? false
285
+ });
286
+ return { jsonrpc: "2.0", id, result };
287
+ }
288
+ return { jsonrpc: "2.0", id, error: { code: -32601, message: "Method not found." } };
289
+ }
290
+ catch (error) {
291
+ return {
292
+ jsonrpc: "2.0",
293
+ id,
294
+ error: {
295
+ code: -32603,
296
+ message: error instanceof Error ? error.message : String(error)
297
+ }
298
+ };
299
+ }
300
+ }
301
+ export async function runMcpStdio(context = {}) {
302
+ const cwd = await resolveMcpStartupCwd(context.cwd ?? process.cwd());
303
+ const server = createMcpSdkServer({
304
+ cwd,
305
+ allowWrites: context.allowWrites ?? false
306
+ });
307
+ const transport = new StdioServerTransport();
308
+ await server.connect(transport);
309
+ }
310
+ function textResult(text, isError = false) {
311
+ return {
312
+ isError,
313
+ content: [{ type: "text", text }]
314
+ };
315
+ }
316
+ function createAgentScanPayload(report, proposals) {
317
+ const runtime = createMcpRuntimeContract(report);
318
+ const proposalByFinding = new Map(proposals.map((proposal) => [proposal.findingId, proposal]));
319
+ const affectedDocuments = [...new Set(report.findings.map((finding) => finding.docPath))].sort();
320
+ const evidenceToInspect = evidenceCategories(report.findings);
321
+ const findings = report.findings.map((finding) => {
322
+ const proposal = proposalByFinding.get(finding.id);
323
+ return {
324
+ id: finding.id,
325
+ ruleId: finding.ruleId,
326
+ status: finding.status,
327
+ severity: finding.severity,
328
+ location: `${finding.docPath}:${finding.line}`,
329
+ message: finding.message,
330
+ suggestedAction: finding.suggestedAction,
331
+ repairMode: repairModeFor(finding, proposal),
332
+ patchClassification: proposal?.classification ?? "blocked",
333
+ evidence: finding.evidence
334
+ };
335
+ });
336
+ return {
337
+ schemaVersion: "evidoc.agent_scan.v1",
338
+ root: report.root,
339
+ scannedAt: report.scannedAt,
340
+ runtime,
341
+ mcp: {
342
+ tool: "evidoc.agent_scan",
343
+ defaultTool: true,
344
+ otherReadTools: READ_ONLY_TOOLS.filter((tool) => tool !== "evidoc.agent_scan")
345
+ },
346
+ coldStart: {
347
+ status: "ready",
348
+ rootResolved: true,
349
+ fallback: "If status is not ready, pass an explicit root or launch the MCP server from a repository root."
350
+ },
351
+ freshness: {
352
+ status: "fresh",
353
+ partial: false,
354
+ scanScope: "full_repository",
355
+ checkedAt: new Date().toISOString(),
356
+ staleAfter: "next repository content, config, or review-log change",
357
+ reasons: []
358
+ },
359
+ summary: report.summary,
360
+ readParity: {
361
+ canActFromThis: report.findings.every((finding) => finding.evidence.length > 0),
362
+ affectedDocuments,
363
+ evidenceToInspect,
364
+ stopReadingWhen: [
365
+ "the finding has structured evidence and the affected document is unchanged since scannedAt",
366
+ "the proposed edit only touches the reported document path",
367
+ "verification reruns Evidoc after any edit"
368
+ ],
369
+ insufficientEvidence: findings
370
+ .filter((finding) => Array.isArray(finding.evidence) && finding.evidence.length === 0)
371
+ .map((finding) => finding.id)
372
+ },
373
+ findings,
374
+ patchPlan: {
375
+ safeAutoFixCandidates: proposals.filter((proposal) => proposal.classification === "safe").length,
376
+ reviewCandidates: proposals.filter((proposal) => proposal.classification === "review").length,
377
+ blockedCandidates: proposals.filter((proposal) => proposal.classification === "blocked").length
378
+ },
379
+ nextCommands: {
380
+ diagnose: "npx evidoc diagnose --root <target-repository-root>",
381
+ safeFixPreview: "npx evidoc fix --safe --json --root <target-repository-root>",
382
+ verify: "npx evidoc check --fail-on=review_needed --root <target-repository-root>",
383
+ sourceCheckoutFallback: "replace `npx evidoc` with `npm run evidoc --` from an Evidoc source checkout before npm publication"
384
+ },
385
+ privacy: {
386
+ repositoryContentUpload: "never_by_default",
387
+ telemetry: "disabled_by_default",
388
+ writes: "none"
389
+ }
390
+ };
391
+ }
392
+ function createAgentDiagnosisPayload(report, proposals) {
393
+ const runtime = createMcpRuntimeContract(report);
394
+ const proposalByFinding = new Map(proposals.map((proposal) => [proposal.findingId, proposal]));
395
+ return {
396
+ schemaVersion: "evidoc.diagnose_drift.v1",
397
+ root: report.root,
398
+ scannedAt: report.scannedAt,
399
+ runtime,
400
+ summary: report.summary,
401
+ findings: report.findings.map((finding) => {
402
+ const runtimeFinding = runtime.findings.find((candidate) => candidate.findingId === finding.id);
403
+ const proposal = proposalByFinding.get(finding.id);
404
+ return {
405
+ fingerprint: runtimeFinding?.fingerprint,
406
+ findingId: finding.id,
407
+ ruleId: finding.ruleId,
408
+ status: finding.status,
409
+ severity: finding.severity,
410
+ location: `${finding.docPath}:${finding.line}`,
411
+ message: finding.message,
412
+ suggestedAction: finding.suggestedAction,
413
+ repairMode: repairModeFor(finding, proposal),
414
+ patchClassification: proposal?.classification ?? "blocked",
415
+ evidence: finding.evidence
416
+ };
417
+ }),
418
+ nextCommands: {
419
+ diagnose: "npx evidoc diagnose --root <target-repository-root>",
420
+ safeFixPreview: "npx evidoc fix --safe --json --root <target-repository-root>",
421
+ verify: "npx evidoc check --fail-on=review_needed --root <target-repository-root>"
422
+ }
423
+ };
424
+ }
425
+ function createMcpRuntimeContract(report) {
426
+ return createAgentRuntimeContract(report, {
427
+ event: "mcp",
428
+ mode: "advisory",
429
+ scope: "full_repository"
430
+ });
431
+ }
432
+ function repairModeFor(finding, proposal) {
433
+ if (proposal?.classification === "safe")
434
+ return "safe_deterministic_fix";
435
+ if (finding.evidence.length > 0)
436
+ return "review_with_structured_evidence";
437
+ return "review_only_missing_evidence";
438
+ }
439
+ function evidenceCategories(findings) {
440
+ const categories = new Set();
441
+ for (const finding of findings) {
442
+ const evidenceKinds = finding.evidence.map((item) => item.kind);
443
+ if (evidenceKinds.includes("command") ||
444
+ evidenceKinds.includes("agent_instruction") ||
445
+ finding.ruleId.includes("package-manager")) {
446
+ categories.add("package.json/lockfiles");
447
+ }
448
+ if (evidenceKinds.includes("api") || finding.ruleId.includes("api.")) {
449
+ categories.add("OpenAPI specs");
450
+ }
451
+ if (evidenceKinds.includes("symbol") ||
452
+ finding.ruleId.includes("symbol.") ||
453
+ finding.ruleId.includes("path.")) {
454
+ categories.add("referenced source/path targets");
455
+ }
456
+ if (evidenceKinds.includes("config") || finding.ruleId.includes("config.")) {
457
+ categories.add(".evidoc/config.json");
458
+ }
459
+ }
460
+ const ordered = [
461
+ "package.json/lockfiles",
462
+ "OpenAPI specs",
463
+ "referenced source/path targets",
464
+ ".evidoc/config.json"
465
+ ].filter((category) => categories.has(category));
466
+ return ordered.length > 0 ? ordered : ["finding locations and current repository files"];
467
+ }
468
+ async function resolveMcpRoot(context, args) {
469
+ const hasExplicitRoot = typeof args.root === "string";
470
+ const root = await resolveExistingRootInsideBoundary(context.cwd, hasExplicitRoot ? args.root : ".");
471
+ if (!root)
472
+ return undefined;
473
+ if (!(await looksLikeRepositoryRoot(root))) {
474
+ return undefined;
475
+ }
476
+ return root;
477
+ }
478
+ function mcpRootError(args) {
479
+ if (typeof args.root === "string")
480
+ return "root must stay inside MCP cwd and point at a repository root.";
481
+ return "MCP tool needs an explicit root because the server startup cwd is not a repository. Pass root or launch the MCP server from the repository root.";
482
+ }
483
+ async function looksLikeRepositoryRoot(root) {
484
+ return ((await exists(join(root, ".git"))) ||
485
+ (await exists(join(root, ".evidoc", "config.json"))));
486
+ }
487
+ export async function resolveMcpStartupCwd(defaultCwd) {
488
+ const configuredRoot = process.env.EVIDOC_ROOT;
489
+ if (!configuredRoot)
490
+ return defaultCwd;
491
+ try {
492
+ return realpathSync(configuredRoot);
493
+ }
494
+ catch (error) {
495
+ const detail = error instanceof Error ? error.message : String(error);
496
+ throw new Error(`EVIDOC_ROOT does not resolve to an existing directory: ${configuredRoot}. ${detail}`);
497
+ }
498
+ }
499
+ async function exists(path) {
500
+ try {
501
+ await access(path);
502
+ return true;
503
+ }
504
+ catch {
505
+ return false;
506
+ }
507
+ }
508
+ function asRecord(value) {
509
+ return value && typeof value === "object" && !Array.isArray(value)
510
+ ? value
511
+ : {};
512
+ }
513
+ function stringArg(args, key) {
514
+ const value = args[key];
515
+ if (typeof value !== "string" || value.length === 0) {
516
+ throw new Error(`${key} is required.`);
517
+ }
518
+ return value;
519
+ }
520
+ function isEvidocTool(value) {
521
+ return (typeof value === "string" &&
522
+ [...READ_ONLY_TOOLS, ...WRITE_TOOLS].includes(value));
523
+ }
524
+ function sdkInputSchemaFor(tool) {
525
+ const root = z.string().optional();
526
+ if (tool === "evidoc.search_docs") {
527
+ return { root, query: z.string() };
528
+ }
529
+ if (tool === "evidoc.explain_drift") {
530
+ return { root, findingId: z.string().optional(), index: z.number().optional() };
531
+ }
532
+ if (tool === "evidoc.validate_patch") {
533
+ return { root, proposal: z.record(z.string(), z.unknown()) };
534
+ }
535
+ if (tool === "evidoc.record_review") {
536
+ return {
537
+ root,
538
+ findingId: z.string(),
539
+ decision: z.enum(["accepted", "false_positive", "deferred", "fixed"]),
540
+ reviewer: z.string(),
541
+ expiresAt: z.string().optional(),
542
+ note: z.string().optional()
543
+ };
544
+ }
545
+ return { root };
546
+ }
547
+ function isDirectExecution(metaUrl) {
548
+ if (!process.argv[1])
549
+ return false;
550
+ try {
551
+ return metaUrl === pathToFileURL(realpathSync(process.argv[1])).href;
552
+ }
553
+ catch {
554
+ return metaUrl === pathToFileURL(process.argv[1]).href;
555
+ }
556
+ }
557
+ if (isDirectExecution(import.meta.url)) {
558
+ await runMcpStdio({
559
+ cwd: process.cwd(),
560
+ allowWrites: process.argv.includes("--allow-writes")
561
+ });
562
+ }
563
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,oBAAoB,EACpB,6BAA6B,EAC7B,iCAAiC,EACjC,6BAA6B,EAI9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAsB,MAAM,2BAA2B,CAAC;AAC5G,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAuB,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,mBAAmB;IACnB,yBAAyB;IACzB,uBAAuB;IACvB,wBAAwB;IACxB,0BAA0B;IAC1B,oBAAoB;IACpB,6BAA6B;IAC7B,sBAAsB;IACtB,0BAA0B;IAC1B,wBAAwB;IACxB,uBAAuB;CACf,CAAC;AAEX,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,sBAAsB;CACd,CAAC;AAyCX,MAAM,UAAU,kBAAkB,CAAC,IAAmB,EAAE,WAAoB;IAC1E,OAAO,WAAW,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAoC,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO;QACL;YACE,IAAI,EAAE,mBAAmB;YACzB,WAAW,EACT,gJAAgJ;YAClJ,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;SAC1E;QACD;YACE,IAAI,EAAE,yBAAyB;YAC/B,WAAW,EACT,qIAAqI;YACvI,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;SAC1E;QACD;YACE,IAAI,EAAE,uBAAuB;YAC7B,WAAW,EACT,6GAA6G;YAC/G,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;SAC1E;QACD;YACE,IAAI,EAAE,wBAAwB;YAC9B,WAAW,EACT,kHAAkH;YACpH,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;SAC1E;QACD;YACE,IAAI,EAAE,0BAA0B;YAChC,WAAW,EAAE,4EAA4E;YACzF,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;SAC1E;QACD;YACE,IAAI,EAAE,oBAAoB;YAC1B,WAAW,EAAE,2DAA2D;YACxE,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;gBACnE,QAAQ,EAAE,CAAC,OAAO,CAAC;aACpB;SACF;QACD;YACE,IAAI,EAAE,6BAA6B;YACnC,WAAW,EAAE,yDAAyD;YACtE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;SAC1E;QACD;YACE,IAAI,EAAE,sBAAsB;YAC5B,WAAW,EAAE,8DAA8D;YAC3E,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;aACnG;SACF;QACD;YACE,IAAI,EAAE,0BAA0B;YAChC,WAAW,EAAE,gEAAgE;YAC7E,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;SAC1E;QACD;YACE,IAAI,EAAE,wBAAwB;YAC9B,WAAW,EAAE,6DAA6D;YAC1E,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;SAC1E;QACD;YACE,IAAI,EAAE,uBAAuB;YAC7B,WAAW,EAAE,gFAAgF;YAC7F,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;gBACtE,QAAQ,EAAE,CAAC,UAAU,CAAC;aACvB;SACF;QACD;YACE,IAAI,EAAE,sBAAsB;YAC5B,WAAW,EAAE,6DAA6D;YAC1E,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACxB,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC7B,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC5B,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC5B,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC7B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBACzB;gBACD,QAAQ,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC;aAChD;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAmB;IACpD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAEnE,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,YAAY,CACjB,IAAI,CAAC,IAAI,EACT;YACE,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;SAC1C,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAA+B,EAAE,OAAO,CAAC,CAAC;YACtF,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAC9D,CAAC,CACF,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAmB,EACnB,OAAgC,EAAE,EAClC,OAAmB;IAEnB,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACnD,OAAO,UAAU,CAAC,QAAQ,IAAI,6BAA6B,EAAE,IAAI,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3D,MAAM,SAAS,GAAG,oBAAoB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC1D,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACxF,CAAC;QAED,IAAI,IAAI,KAAK,yBAAyB,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;YAC3C,OAAO,UAAU,CACf,IAAI,CAAC,SAAS,CACZ;gBACE,OAAO,EAAE,wBAAwB,CAAC,MAAM,CAAC;gBACzC,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,KAAK,uBAAuB,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3D,MAAM,SAAS,GAAG,oBAAoB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC1D,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,2BAA2B,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7F,CAAC;QAED,IAAI,IAAI,KAAK,wBAAwB,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3D,MAAM,SAAS,GAAG,oBAAoB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC1D,OAAO,UAAU,CACf,IAAI,CAAC,SAAS,CACZ;gBACE,OAAO,EAAE,wBAAwB,CAAC,MAAM,CAAC;gBACzC,SAAS;aACV,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,KAAK,6BAA6B,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;YAC3C,OAAO,UAAU,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,IAAI,KAAK,0BAA0B,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;YAC3C,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/F,CAAC;QAED,IAAI,IAAI,KAAK,sBAAsB,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,OAAO,GACX,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;gBAChC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC;gBACtE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,IAAI,CAAC,OAAO;gBAAE,OAAO,UAAU,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;YACrE,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,IAAI,CAAC,KAAK;gBAAE,OAAO,UAAU,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAwD,EAAE,CAAC;YACxE,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACxC,MAAM,YAAY,GAAG,MAAM,6BAA6B,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC9E,IAAI,CAAC,YAAY;oBAAE,SAAS;gBAC5B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;gBAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;oBAC1C,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;wBACzB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;oBACrE,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,IAAI,KAAK,0BAA0B,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG;gBACZ,mCAAmC;gBACnC,8CAA8C;aAC/C,CAAC;YACF,MAAM,SAAS,GAA2B,EAAE,CAAC;YAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC;oBACH,MAAM,YAAY,GAAG,MAAM,6BAA6B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACrE,SAAS,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC;YACD,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,IAAI,KAAK,wBAAwB,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3D,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACtF,CAAC;QAED,IAAI,IAAI,KAAK,uBAAuB,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;YAC3C,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAiB,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACpG,CAAC;QAED,IAAI,IAAI,KAAK,sBAAsB,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,UAAU,CAAmB,CAAC;YAC/D,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,MAAM,6BAA6B,CAAC,IAAI,EAAE,0BAA0B,CAAC,CAAC;YACtF,IAAI,CAAC,OAAO;gBAAE,OAAO,UAAU,CAAC,mDAAmD,EAAE,IAAI,CAAC,CAAC;YAC3F,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,MAAM,UAAU,CACd,OAAO,EACP,GAAG,uBAAuB,CAAC;gBACzB,SAAS;gBACT,QAAQ;gBACR,QAAQ;gBACR,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACpC,SAAS,EAAE,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;gBAC1E,IAAI,EAAE,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;aAC5D,CAAC,IAAI,EACN,MAAM,CACP,CAAC;YACF,OAAO,UAAU,CAAC,gCAAgC,SAAS,GAAG,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,UAAU,CAAC,wBAAwB,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,UAAU,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;IAClF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAuB,EACvB,UAA+B,EAAE;IAEjC,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC;IAE9B,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACpC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,EAAE;gBACF,MAAM,EAAE;oBACN,eAAe,EAAE,YAAY;oBAC7B,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;oBAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE;oBAChD,YAAY,EACV,uQAAuQ;oBACzQ,OAAO,EAAE;wBACP,uBAAuB,EAAE,kBAAkB;wBAC3C,SAAS,EAAE,qBAAqB;qBACjC;iBACF;aACF,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACpC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;QACnE,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,CAAC;YACnF,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;gBACjE,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;gBACjC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,KAAK;aAC1C,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;QACxC,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,CAAC;IACvF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,EAAE;YACF,KAAK,EAAE;gBACL,IAAI,EAAE,CAAC,KAAK;gBACZ,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAChE;SACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAA+B,EAAE;IACjE,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,kBAAkB,CAAC;QAChC,GAAG;QACH,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,KAAK;KAC1C,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,OAAO,GAAG,KAAK;IAC/C,OAAO;QACL,OAAO;QACP,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAmB,EAAE,SAA0B;IAC7E,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC/F,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACjG,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC/C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnD,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE;YAC9C,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,UAAU,EAAE,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC;YAC5C,mBAAmB,EAAE,QAAQ,EAAE,cAAc,IAAI,SAAS;YAC1D,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,aAAa,EAAE,sBAAsB;QACrC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,OAAO;QACP,GAAG,EAAE;YACH,IAAI,EAAE,mBAAmB;YACzB,WAAW,EAAE,IAAI;YACjB,cAAc,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,mBAAmB,CAAC;SAC/E;QACD,SAAS,EAAE;YACT,MAAM,EAAE,OAAO;YACf,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,gGAAgG;SAC3G;QACD,SAAS,EAAE;YACT,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,iBAAiB;YAC5B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,UAAU,EAAE,uDAAuD;YACnE,OAAO,EAAE,EAAE;SACZ;QACD,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU,EAAE;YACV,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/E,iBAAiB;YACjB,iBAAiB;YACjB,eAAe,EAAE;gBACf,4FAA4F;gBAC5F,2DAA2D;gBAC3D,2CAA2C;aAC5C;YACD,oBAAoB,EAAE,QAAQ;iBAC3B,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;iBACrF,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;SAChC;QACD,QAAQ;QACR,SAAS,EAAE;YACT,qBAAqB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,cAAc,KAAK,MAAM,CAAC,CAAC,MAAM;YAChG,gBAAgB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,MAAM;YAC7F,iBAAiB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,MAAM;SAChG;QACD,YAAY,EAAE;YACZ,QAAQ,EAAE,qDAAqD;YAC/D,cAAc,EAAE,8DAA8D;YAC9E,MAAM,EAAE,0EAA0E;YAClF,sBAAsB,EAAE,qGAAqG;SAC9H;QACD,OAAO,EAAE;YACP,uBAAuB,EAAE,kBAAkB;YAC3C,SAAS,EAAE,qBAAqB;YAChC,MAAM,EAAE,MAAM;SACf;KACF,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAAC,MAAmB,EAAE,SAA0B;IAClF,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC/F,OAAO;QACL,aAAa,EAAE,0BAA0B;QACzC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,OAAO;QACP,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YACxC,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;YAChG,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACnD,OAAO;gBACL,WAAW,EAAE,cAAc,EAAE,WAAW;gBACxC,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,QAAQ,EAAE,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE;gBAC9C,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,UAAU,EAAE,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC;gBAC5C,mBAAmB,EAAE,QAAQ,EAAE,cAAc,IAAI,SAAS;gBAC1D,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B,CAAC;QACJ,CAAC,CAAC;QACF,YAAY,EAAE;YACZ,QAAQ,EAAE,qDAAqD;YAC/D,cAAc,EAAE,8DAA8D;YAC9E,MAAM,EAAE,0EAA0E;SACnF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAmB;IACnD,OAAO,0BAA0B,CAAC,MAAM,EAAE;QACxC,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,iBAAiB;KACzB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,OAAqB,EAAE,QAAmC;IAC/E,IAAI,QAAQ,EAAE,cAAc,KAAK,MAAM;QAAE,OAAO,wBAAwB,CAAC;IACzE,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,iCAAiC,CAAC;IAC1E,OAAO,8BAA8B,CAAC;AACxC,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAwB;IAClD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,IACE,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC;YACjC,aAAa,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAC1C,CAAC;YACD,UAAU,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrE,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAClC,CAAC;QACD,IACE,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAChC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;YAClC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAChC,CAAC;YACD,UAAU,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3E,UAAU,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG;QACd,wBAAwB;QACxB,eAAe;QACf,gCAAgC;QAChC,qBAAqB;KACtB,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,gDAAgD,CAAC,CAAC;AAC3F,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,OAAmB,EACnB,IAA6B;IAE7B,MAAM,eAAe,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;IACtD,MAAM,IAAI,GAAG,MAAM,iCAAiC,CAClD,OAAO,CAAC,GAAG,EACX,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAc,CAAC,CAAC,CAAC,GAAG,CAC5C,CAAC;IACF,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,IAAI,CAAC,CAAC,MAAM,uBAAuB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC3C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,IAA6B;IACjD,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,+DAA+D,CAAC;IAC1G,OAAO,kJAAkJ,CAAC;AAC5J,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,IAAY;IACjD,OAAO,CACL,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAClC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CACrD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,UAAkB;IAC3D,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAC/C,IAAI,CAAC,cAAc;QAAE,OAAO,UAAU,CAAC;IACvC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,cAAc,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,0DAA0D,cAAc,KAAK,MAAM,EAAE,CAAC,CAAC;IACzG,CAAC;AACH,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAChE,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,SAAS,CAAC,IAA6B,EAAE,GAAW;IAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,eAAe,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACxB,CAAC,GAAG,eAAe,EAAE,GAAG,WAAW,CAAuB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC5E,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAmB;IAC5C,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC;IACnC,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;QAClC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IACrC,CAAC;IACD,IAAI,IAAI,KAAK,sBAAsB,EAAE,CAAC;QACpC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAClF,CAAC;IACD,IAAI,IAAI,KAAK,uBAAuB,EAAE,CAAC;QACrC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;IAC/D,CAAC;IACD,IAAI,IAAI,KAAK,sBAAsB,EAAE,CAAC;QACpC,OAAO;YACL,IAAI;YACJ,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;YACrB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YACrE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAChC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SAC5B,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe;IACxC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,OAAO,KAAK,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,KAAK,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,CAAC;AACH,CAAC;AAED,IAAI,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACvC,MAAM,WAAW,CAAC;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;KACrD,CAAC,CAAC;AACL,CAAC"}
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "@handong66/evidoc-mcp-server",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "scripts": {
6
+ "prepublishOnly": "node ../../scripts/ensure-built-package.mjs"
7
+ },
8
+ "exports": {
9
+ ".": "./dist/src/index.js"
10
+ },
11
+ "types": "./dist/src/index.d.ts",
12
+ "bin": {
13
+ "repo-evidoc-mcp": "dist/src/index.js"
14
+ },
15
+ "files": [
16
+ "dist/src"
17
+ ],
18
+ "dependencies": {
19
+ "@handong66/evidoc-core": "0.1.0",
20
+ "@handong66/evidoc-patcher": "0.1.0",
21
+ "@handong66/evidoc-reports": "0.1.0",
22
+ "@handong66/evidoc-review-log": "0.1.0",
23
+ "@modelcontextprotocol/sdk": "^1.29.0",
24
+ "zod": "^4.4.3"
25
+ },
26
+ "license": "MIT",
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "git+https://github.com/handong66/Evidoc.git"
30
+ },
31
+ "bugs": {
32
+ "url": "https://github.com/handong66/Evidoc/issues"
33
+ },
34
+ "homepage": "https://github.com/handong66/Evidoc#readme"
35
+ }