ios-agent-mcp 2.0.0 → 2.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.
- package/README.md +64 -7
- package/dist/analyzers/memory.d.ts +12 -0
- package/dist/analyzers/memory.js +81 -0
- package/dist/analyzers/memory.js.map +1 -0
- package/dist/analyzers/performance.d.ts +10 -0
- package/dist/analyzers/performance.js +106 -0
- package/dist/analyzers/performance.js.map +1 -0
- package/dist/analyzers/security.d.ts +2 -0
- package/dist/analyzers/security.js +82 -0
- package/dist/analyzers/security.js.map +1 -0
- package/dist/analyzers/skill.d.ts +34 -0
- package/dist/analyzers/skill.js +483 -0
- package/dist/analyzers/skill.js.map +1 -0
- package/dist/analyzers/testing.d.ts +16 -0
- package/dist/analyzers/testing.js +135 -0
- package/dist/analyzers/testing.js.map +1 -0
- package/dist/analyzers/types.d.ts +19 -1
- package/dist/analyzers/types.js +65 -3
- package/dist/analyzers/types.js.map +1 -1
- package/dist/index.js +159 -4
- package/dist/index.js.map +1 -1
- package/dist/report.d.ts +10 -0
- package/dist/report.js +40 -0
- package/dist/report.js.map +1 -1
- package/dist/resources.d.ts +67 -0
- package/dist/resources.js +222 -0
- package/dist/resources.js.map +1 -0
- package/dist/result.d.ts +203 -0
- package/dist/result.js +135 -0
- package/dist/result.js.map +1 -0
- package/dist/scan.d.ts +9 -0
- package/dist/scan.js +110 -0
- package/dist/scan.js.map +1 -1
- package/dist/version.d.ts +1 -0
- package/dist/version.js +4 -0
- package/dist/version.js.map +1 -0
- package/mcp.json +76 -11
- package/package.json +6 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/analyzers/testing.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,7 +35,25 @@ export declare function sortFindings(findings: Finding[]): Finding[];
|
|
|
35
35
|
* the signal-to-noise ratio high enough that the output is worth reading.
|
|
36
36
|
*/
|
|
37
37
|
export declare function isSupportFile(path: string): boolean;
|
|
38
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* Strip `//` line comments so commented-out code is not reported.
|
|
40
|
+
*
|
|
41
|
+
* String-literal aware. A naive `indexOf("//")` truncates
|
|
42
|
+
* `let base = "http://api.example.com"` at the scheme separator, which made
|
|
43
|
+
* every rule blind to the rest of any line containing a URL — including the
|
|
44
|
+
* cleartext-HTTP check, which could therefore never fire. Escapes are honoured
|
|
45
|
+
* so `"a\"//b"` does not end the literal early.
|
|
46
|
+
*/
|
|
39
47
|
export declare function stripComment(line: string): string;
|
|
40
48
|
/** Walk lines with 1-indexed numbers, skipping comment-only content. */
|
|
41
49
|
export declare function eachLine(file: SourceFile, visit: (line: string, number: number, raw: string) => void): void;
|
|
50
|
+
/**
|
|
51
|
+
* Blank the contents of string literals, preserving the quotes and length.
|
|
52
|
+
*
|
|
53
|
+
* For rules that must not match words appearing in user-facing text. The
|
|
54
|
+
* `await-inside-xctassert` rule fired on
|
|
55
|
+
* `XCTAssertTrue(x, "set before the await")` — the word was in the assertion
|
|
56
|
+
* *message*, not the expression. Keeping the delimiters means column offsets
|
|
57
|
+
* and any surrounding syntax still line up.
|
|
58
|
+
*/
|
|
59
|
+
export declare function withoutStringLiterals(line: string): string;
|
package/dist/analyzers/types.js
CHANGED
|
@@ -17,10 +17,37 @@ export function sortFindings(findings) {
|
|
|
17
17
|
export function isSupportFile(path) {
|
|
18
18
|
return /(Tests?|Mock\w*|Stub\w*|Fake\w*|Preview\w*|\w*Preview|Fixtures?)\.swift$/i.test(path);
|
|
19
19
|
}
|
|
20
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Strip `//` line comments so commented-out code is not reported.
|
|
22
|
+
*
|
|
23
|
+
* String-literal aware. A naive `indexOf("//")` truncates
|
|
24
|
+
* `let base = "http://api.example.com"` at the scheme separator, which made
|
|
25
|
+
* every rule blind to the rest of any line containing a URL — including the
|
|
26
|
+
* cleartext-HTTP check, which could therefore never fire. Escapes are honoured
|
|
27
|
+
* so `"a\"//b"` does not end the literal early.
|
|
28
|
+
*/
|
|
21
29
|
export function stripComment(line) {
|
|
22
|
-
|
|
23
|
-
|
|
30
|
+
let inString = false;
|
|
31
|
+
for (let index = 0; index < line.length; index += 1) {
|
|
32
|
+
const character = line[index];
|
|
33
|
+
if (inString) {
|
|
34
|
+
if (character === "\\") {
|
|
35
|
+
index += 1; // skip the escaped character
|
|
36
|
+
}
|
|
37
|
+
else if (character === '"') {
|
|
38
|
+
inString = false;
|
|
39
|
+
}
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (character === '"') {
|
|
43
|
+
inString = true;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (character === "/" && line[index + 1] === "/") {
|
|
47
|
+
return line.slice(0, index);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return line;
|
|
24
51
|
}
|
|
25
52
|
/** Walk lines with 1-indexed numbers, skipping comment-only content. */
|
|
26
53
|
export function eachLine(file, visit) {
|
|
@@ -44,4 +71,39 @@ export function eachLine(file, visit) {
|
|
|
44
71
|
visit(code, index + 1, raw);
|
|
45
72
|
}
|
|
46
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Blank the contents of string literals, preserving the quotes and length.
|
|
76
|
+
*
|
|
77
|
+
* For rules that must not match words appearing in user-facing text. The
|
|
78
|
+
* `await-inside-xctassert` rule fired on
|
|
79
|
+
* `XCTAssertTrue(x, "set before the await")` — the word was in the assertion
|
|
80
|
+
* *message*, not the expression. Keeping the delimiters means column offsets
|
|
81
|
+
* and any surrounding syntax still line up.
|
|
82
|
+
*/
|
|
83
|
+
export function withoutStringLiterals(line) {
|
|
84
|
+
let result = "";
|
|
85
|
+
let inString = false;
|
|
86
|
+
for (let index = 0; index < line.length; index += 1) {
|
|
87
|
+
const character = line[index];
|
|
88
|
+
if (inString) {
|
|
89
|
+
if (character === "\\") {
|
|
90
|
+
result += " ";
|
|
91
|
+
index += 1;
|
|
92
|
+
}
|
|
93
|
+
else if (character === '"') {
|
|
94
|
+
inString = false;
|
|
95
|
+
result += '"';
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
result += " ";
|
|
99
|
+
}
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (character === '"') {
|
|
103
|
+
inString = true;
|
|
104
|
+
}
|
|
105
|
+
result += character;
|
|
106
|
+
}
|
|
107
|
+
return result;
|
|
108
|
+
}
|
|
47
109
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/analyzers/types.ts"],"names":[],"mappings":"AAiCA,MAAM,cAAc,GAA6B;IAC/C,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,qEAAqE;AACrE,MAAM,UAAU,YAAY,CAAC,QAAmB;IAC9C,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC;QACvD,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5B,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAClB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,2EAA2E,CAAC,IAAI,CACrF,IAAI,CACL,CAAC;AACJ,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/analyzers/types.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2,14 +2,21 @@
|
|
|
2
2
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
3
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
4
|
import { z } from "zod";
|
|
5
|
+
import { VERSION } from "./version.js";
|
|
5
6
|
import { analyzeConcurrency } from "./analyzers/concurrency.js";
|
|
6
7
|
import { analyzeArchitecture } from "./analyzers/architecture.js";
|
|
7
8
|
import { analyzeSwiftUI } from "./analyzers/swiftui.js";
|
|
8
9
|
import { analyzeAvailability } from "./analyzers/availability.js";
|
|
9
10
|
import { analyzeAppStore, analyzeProjectLevelAppStore } from "./analyzers/appstore.js";
|
|
11
|
+
import { lintSkill } from "./analyzers/skill.js";
|
|
12
|
+
import { analyzeMemory } from "./analyzers/memory.js";
|
|
13
|
+
import { analyzeSecurity } from "./analyzers/security.js";
|
|
14
|
+
import { analyzeTesting, analyzeTestCoverage } from "./analyzers/testing.js";
|
|
15
|
+
import { analyzePerformance } from "./analyzers/performance.js";
|
|
10
16
|
import { readProjectContext, readSwiftFiles, resolveProjectRoot, summarizeProject, } from "./scan.js";
|
|
11
|
-
import { renderFindings } from "./report.js";
|
|
12
|
-
|
|
17
|
+
import { renderFindings, renderSkillLint } from "./report.js";
|
|
18
|
+
import { buildReviewOutput, reviewOutputShape } from "./result.js";
|
|
19
|
+
import { projectDependenciesResource, projectInfoResource, projectIssuesResource, resolveRootFrom, } from "./resources.js";
|
|
13
20
|
/**
|
|
14
21
|
* Handle CLI flags before starting the stdio transport.
|
|
15
22
|
*
|
|
@@ -34,6 +41,7 @@ function handleCLIFlags(argv) {
|
|
|
34
41
|
"",
|
|
35
42
|
"USAGE",
|
|
36
43
|
" ios-agent-mcp Start the server (stdio transport)",
|
|
44
|
+
" ios-agent-mcp --project P Serve ios:// resources for project P",
|
|
37
45
|
" ios-agent-mcp --help Show this message",
|
|
38
46
|
" ios-agent-mcp --version Print the version",
|
|
39
47
|
"",
|
|
@@ -49,8 +57,19 @@ function handleCLIFlags(argv) {
|
|
|
49
57
|
" review_swiftui Views, state, Dynamic Type, tokens",
|
|
50
58
|
" check_availability_guards Missing and over-restrictive @available",
|
|
51
59
|
" audit_app_store_readiness Purpose strings, privacy, accessibility",
|
|
60
|
+
" review_swift_memory Retain cycles and object lifetime",
|
|
61
|
+
" review_swift_security Secrets, storage, ATS, TLS, weak crypto",
|
|
62
|
+
" review_swift_testing Flaky, vacuous, and missing tests",
|
|
63
|
+
" review_swift_performance Work on the render path",
|
|
64
|
+
" lint_skill Skill metadata, agent tool grants, mirrors",
|
|
52
65
|
"",
|
|
53
|
-
"Each tool takes one argument: an absolute path
|
|
66
|
+
"Each tool takes one argument: an absolute path. The first ten want a",
|
|
67
|
+
"Swift project root; lint_skill wants an Agent Skill repository root.",
|
|
68
|
+
"",
|
|
69
|
+
"RESOURCES (root: --project, IOS_AGENT_PROJECT, or a .ios-agent/ marker)",
|
|
70
|
+
" ios://project/info Structure, architecture, DI, frameworks",
|
|
71
|
+
" ios://project/dependencies Third-party packages and Apple frameworks",
|
|
72
|
+
" ios://project/issues Every finding, all categories",
|
|
54
73
|
"",
|
|
55
74
|
"DOCS https://github.com/Nagarjuna2997/ios-agent-skill/tree/main/docs/mcp",
|
|
56
75
|
"",
|
|
@@ -84,11 +103,15 @@ async function scanAndRender(path, title, analyze) {
|
|
|
84
103
|
text: `No Swift files found under \`${root}\`.\n\nCheck the path points at the project root. Build directories (\`.build\`, \`DerivedData\`, \`Pods\`) are skipped deliberately.`,
|
|
85
104
|
},
|
|
86
105
|
],
|
|
106
|
+
structuredContent: { ...buildReviewOutput(title, [], 0) },
|
|
87
107
|
};
|
|
88
108
|
}
|
|
89
109
|
const findings = await analyze(files);
|
|
110
|
+
// Both halves, always: markdown for a human reading the transcript, and
|
|
111
|
+
// structuredContent for a workflow that must branch without parsing prose.
|
|
90
112
|
return {
|
|
91
113
|
content: [{ type: "text", text: renderFindings(title, findings, files.length) }],
|
|
114
|
+
structuredContent: { ...buildReviewOutput(title, findings, files.length) },
|
|
92
115
|
};
|
|
93
116
|
}
|
|
94
117
|
catch (error) {
|
|
@@ -107,21 +130,25 @@ server.registerTool("review_swift_concurrency", {
|
|
|
107
130
|
title: "Review Swift concurrency and actor isolation",
|
|
108
131
|
description: "Check a Swift project for Swift 6 concurrency and isolation defects: @Observable types missing @MainActor, Task.detached, DispatchQueue.main.async in async code, @unchecked Sendable, nonisolated(unsafe), unstructured Tasks in onAppear, empty catch blocks, and types named Task that shadow _Concurrency.Task. Use when reviewing Swift code, migrating to Swift 6, or diagnosing a data race.",
|
|
109
132
|
inputSchema: pathInput,
|
|
133
|
+
outputSchema: reviewOutputShape,
|
|
110
134
|
}, async ({ path }) => scanAndRender(path, "Swift Concurrency Review", (files) => files.flatMap(analyzeConcurrency)));
|
|
111
135
|
server.registerTool("review_swift_architecture", {
|
|
112
136
|
title: "Review iOS architecture boundaries",
|
|
113
137
|
description: "Check a Swift project for architecture and testability defects: dependencies defaulting to live implementations, the presentation layer naming concrete data-layer types (URLSession, APIClient, ModelContext), singletons resolved inside view models, the domain layer importing UI frameworks, nested NavigationStacks, and deprecated NavigationView. Use when reviewing MVVM or Clean Architecture code, or when a screen cannot be previewed without a network.",
|
|
114
138
|
inputSchema: pathInput,
|
|
139
|
+
outputSchema: reviewOutputShape,
|
|
115
140
|
}, async ({ path }) => scanAndRender(path, "Architecture Review", (files) => files.flatMap(analyzeArchitecture)));
|
|
116
141
|
server.registerTool("review_swiftui", {
|
|
117
142
|
title: "Review SwiftUI views and state",
|
|
118
143
|
description: "Check SwiftUI code for view and state defects: fixed font sizes and heights that break Dynamic Type, AnyView, deprecated .cornerRadius, literal spacing values instead of design tokens, materials applied over solid backgrounds, transient presentation state stored on models, legacy ObservableObject and @EnvironmentObject, and try!. Use when reviewing or building SwiftUI screens.",
|
|
119
144
|
inputSchema: pathInput,
|
|
145
|
+
outputSchema: reviewOutputShape,
|
|
120
146
|
}, async ({ path }) => scanAndRender(path, "SwiftUI Review", (files) => files.flatMap(analyzeSwiftUI)));
|
|
121
147
|
server.registerTool("check_availability_guards", {
|
|
122
148
|
title: "Check iOS availability guards",
|
|
123
149
|
description: "Verify that version-gated Apple APIs are guarded on the version where they were INTRODUCED rather than the newest SDK. Catches both missing guards and over-restrictive ones — for example Liquid Glass (iOS 26) guarded at iOS 27, which silently drops every iOS 26 device to the fallback. Also flags Foundation Models used without a runtime SystemLanguageModel.availability check. Use before shipping, or after bumping an SDK.",
|
|
124
150
|
inputSchema: pathInput,
|
|
151
|
+
outputSchema: reviewOutputShape,
|
|
125
152
|
}, async ({ path }) => scanAndRender(path, "Availability Guard Check", (files) => files.flatMap(analyzeAvailability)));
|
|
126
153
|
server.registerTool("audit_app_store_readiness", {
|
|
127
154
|
title: "Audit App Store submission readiness",
|
|
@@ -176,6 +203,10 @@ server.registerTool("analyze_swift_project", {
|
|
|
176
203
|
Architecture: files.flatMap(analyzeArchitecture),
|
|
177
204
|
SwiftUI: files.flatMap(analyzeSwiftUI),
|
|
178
205
|
Availability: files.flatMap(analyzeAvailability),
|
|
206
|
+
Memory: files.flatMap(analyzeMemory),
|
|
207
|
+
Security: files.flatMap(analyzeSecurity),
|
|
208
|
+
Performance: files.flatMap(analyzePerformance),
|
|
209
|
+
Testing: [...analyzeTestCoverage(files), ...files.flatMap(analyzeTesting)],
|
|
179
210
|
"App Store": [
|
|
180
211
|
...analyzeProjectLevelAppStore(context),
|
|
181
212
|
...files.flatMap((file) => analyzeAppStore(file, context)),
|
|
@@ -194,6 +225,14 @@ server.registerTool("analyze_swift_project", {
|
|
|
194
225
|
`- **Xcode project:** ${summary.hasXcodeProject ? "yes" : "no"}`,
|
|
195
226
|
`- **Test files:** ${summary.hasTests ? "found" : "**none found**"}`,
|
|
196
227
|
"",
|
|
228
|
+
"## Shape",
|
|
229
|
+
"",
|
|
230
|
+
`- **UI framework:** ${summary.uiFramework}`,
|
|
231
|
+
`- **Architecture:** ${summary.architecture}`,
|
|
232
|
+
` - evidence: ${summary.architectureEvidence.join("; ") || "none"}`,
|
|
233
|
+
`- **Dependency injection:** ${summary.usesDependencyInjection ? "protocol existentials injected through init" : "**not detected** — no `any Protocol` initializer parameters found"}`,
|
|
234
|
+
`- **Third-party dependencies:** ${summary.dependencies.slice(0, 20).join(", ") || "none detected"}`,
|
|
235
|
+
"",
|
|
197
236
|
`- **Frameworks:** ${summary.frameworks.slice(0, 25).join(", ") || "none detected"}`,
|
|
198
237
|
"",
|
|
199
238
|
"## Findings by category",
|
|
@@ -206,6 +245,10 @@ server.registerTool("analyze_swift_project", {
|
|
|
206
245
|
Architecture: "review_swift_architecture",
|
|
207
246
|
SwiftUI: "review_swiftui",
|
|
208
247
|
Availability: "check_availability_guards",
|
|
248
|
+
Memory: "review_swift_memory",
|
|
249
|
+
Security: "review_swift_security",
|
|
250
|
+
Performance: "review_swift_performance",
|
|
251
|
+
Testing: "review_swift_testing",
|
|
209
252
|
"App Store": "audit_app_store_readiness",
|
|
210
253
|
};
|
|
211
254
|
let total = 0;
|
|
@@ -219,7 +262,37 @@ server.registerTool("analyze_swift_project", {
|
|
|
219
262
|
lines.push("", total === 0
|
|
220
263
|
? "**No findings in any category.**"
|
|
221
264
|
: `**${total} findings total.** Run the tool in the right-hand column for details on any category.`, "", "---", "", "_Static analysis only. It cannot prove the app builds or behaves correctly — run `swift build` and `swift test` for that._");
|
|
222
|
-
|
|
265
|
+
const everyFinding = Object.values(categories).flat();
|
|
266
|
+
return {
|
|
267
|
+
content: [{ type: "text", text: lines.join("\n") }],
|
|
268
|
+
structuredContent: {
|
|
269
|
+
...buildReviewOutput("Project analysis", everyFinding, files.length),
|
|
270
|
+
project: {
|
|
271
|
+
swift_files: summary.swiftFileCount,
|
|
272
|
+
lines: summary.lineCount,
|
|
273
|
+
deployment_target: summary.deploymentTarget,
|
|
274
|
+
swift_tools_version: summary.swiftToolsVersion,
|
|
275
|
+
ui_framework: summary.uiFramework,
|
|
276
|
+
architecture: summary.architecture,
|
|
277
|
+
architecture_evidence: summary.architectureEvidence,
|
|
278
|
+
dependencies: summary.dependencies,
|
|
279
|
+
frameworks: summary.frameworks,
|
|
280
|
+
uses_dependency_injection: summary.usesDependencyInjection,
|
|
281
|
+
has_tests: summary.hasTests,
|
|
282
|
+
has_package_swift: summary.hasPackageSwift,
|
|
283
|
+
has_xcode_project: summary.hasXcodeProject,
|
|
284
|
+
},
|
|
285
|
+
categories: Object.fromEntries(Object.entries(categories).map(([name, found]) => [
|
|
286
|
+
name,
|
|
287
|
+
{
|
|
288
|
+
blocker: found.filter((f) => f.severity === "blocker").length,
|
|
289
|
+
serious: found.filter((f) => f.severity === "serious").length,
|
|
290
|
+
minor: found.filter((f) => f.severity === "minor").length,
|
|
291
|
+
tool: toolFor[name],
|
|
292
|
+
},
|
|
293
|
+
])),
|
|
294
|
+
},
|
|
295
|
+
};
|
|
223
296
|
}
|
|
224
297
|
catch (error) {
|
|
225
298
|
return {
|
|
@@ -233,6 +306,88 @@ server.registerTool("analyze_swift_project", {
|
|
|
233
306
|
};
|
|
234
307
|
}
|
|
235
308
|
});
|
|
309
|
+
server.registerTool("lint_skill", {
|
|
310
|
+
title: "Lint an Agent Skill repository",
|
|
311
|
+
description: "Validate the metadata of an Agent Skill repository rather than Swift source: SKILL.md frontmatter (required keys, kebab-case name, semver version, description length limits), subagent definitions in .claude/agents/ (name matches filename, unknown tool names, and read-only agents that are nonetheless granted Edit or Write), whether generated mirror files such as CLAUDE.md and AGENTS.md have drifted from SKILL.md, and backtick-quoted doc paths that do not resolve. Use when authoring or reviewing a skill, before publishing a release, or when a subagent or skill is not being invoked as expected.",
|
|
312
|
+
inputSchema: {
|
|
313
|
+
path: z
|
|
314
|
+
.string()
|
|
315
|
+
.describe("Absolute path to the skill repository root (the folder containing SKILL.md)."),
|
|
316
|
+
},
|
|
317
|
+
}, async ({ path }) => {
|
|
318
|
+
try {
|
|
319
|
+
const root = await resolveProjectRoot(path);
|
|
320
|
+
const result = await lintSkill(root);
|
|
321
|
+
return { content: [{ type: "text", text: renderSkillLint(result) }] };
|
|
322
|
+
}
|
|
323
|
+
catch (error) {
|
|
324
|
+
return {
|
|
325
|
+
content: [
|
|
326
|
+
{
|
|
327
|
+
type: "text",
|
|
328
|
+
text: `Lint failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
329
|
+
},
|
|
330
|
+
],
|
|
331
|
+
isError: true,
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
});
|
|
335
|
+
server.registerTool("review_swift_memory", {
|
|
336
|
+
title: "Review memory and retain cycles",
|
|
337
|
+
description: "Check a Swift project for retain cycles and lifetime defects: repeating Timers and block-based NotificationCenter observers capturing self strongly, Combine sinks stored in a cancellables set owned by the same object, non-weak delegate properties, stored closure properties capturing self, `unowned self` in escaping closures, and long-running unstructured Tasks that keep an object alive after its screen is gone. Use when memory grows over time, when deinit is never called, or before shipping a screen with timers or subscriptions.",
|
|
338
|
+
inputSchema: pathInput,
|
|
339
|
+
outputSchema: reviewOutputShape,
|
|
340
|
+
}, async ({ path }) => scanAndRender(path, "Memory Review", (files) => files.flatMap(analyzeMemory)));
|
|
341
|
+
server.registerTool("review_swift_security", {
|
|
342
|
+
title: "Review iOS security",
|
|
343
|
+
description: "Check a Swift project for security defects: hardcoded API keys, tokens, and passwords in source; credentials written to UserDefaults instead of the Keychain; App Transport Security disabled; cleartext http:// endpoints; TLS server trust accepted without evaluation; MD5 and SHA-1; Keychain items with over-permissive accessibility; non-cryptographic randomness used for nonces and salts; secrets written to logs; and string interpolation into evaluated JavaScript. Use before shipping, during a security review, or when handling credentials.",
|
|
344
|
+
inputSchema: pathInput,
|
|
345
|
+
outputSchema: reviewOutputShape,
|
|
346
|
+
}, async ({ path }) => scanAndRender(path, "Security Review", (files) => files.flatMap(analyzeSecurity)));
|
|
347
|
+
server.registerTool("review_swift_testing", {
|
|
348
|
+
title: "Review test suite quality",
|
|
349
|
+
description: "Check a Swift test suite for defects that make it unreliable or vacuous: tests that wait by sleeping, tests with no assertion at all, `await` inside an XCTAssert autoclosure (which does not compile), live URLSession calls in tests, `try!`, static mutable state that makes results order-dependent, long expectation timeouts covering for races, and XCTAssertTrue on an equality that hides both values on failure. Also reports when a project has no tests or very few. Use when tests are flaky, before trusting a green suite, or when adding coverage.",
|
|
350
|
+
inputSchema: pathInput,
|
|
351
|
+
outputSchema: reviewOutputShape,
|
|
352
|
+
}, async ({ path }) => scanAndRender(path, "Test Suite Review", (files) => [
|
|
353
|
+
...analyzeTestCoverage(files),
|
|
354
|
+
...files.flatMap(analyzeTesting),
|
|
355
|
+
]));
|
|
356
|
+
server.registerTool("review_swift_performance", {
|
|
357
|
+
title: "Review SwiftUI and Swift performance",
|
|
358
|
+
description: "Check for runtime cost that shows up as dropped frames: DateFormatter and JSONDecoder allocated inside `body`, collections sorted or filtered on every render, ForEach over indices instead of stable identity, non-lazy stacks inside a ScrollView, AsyncImage with no frame, blocking file or network I/O on the render path, and GeometryReader wrapping an entire body. Use when scrolling stutters, launch is slow, or before shipping a list-heavy screen.",
|
|
359
|
+
inputSchema: pathInput,
|
|
360
|
+
outputSchema: reviewOutputShape,
|
|
361
|
+
}, async ({ path }) => scanAndRender(path, "Performance Review", (files) => files.flatMap(analyzePerformance)));
|
|
362
|
+
// Resources: nouns a client can read without the model deciding to ask.
|
|
363
|
+
//
|
|
364
|
+
// The root comes from --project, IOS_AGENT_PROJECT, the nearest ancestor
|
|
365
|
+
// holding a .ios-agent/ marker, or the working directory
|
|
366
|
+
// the client spawned the server in. Every payload reports which one won, so an
|
|
367
|
+
// empty project is never mistaken for a wrong path.
|
|
368
|
+
const RESOLVED_ROOT = resolveRootFrom(process.argv.slice(2), process.env);
|
|
369
|
+
const PROJECT_ROOT = RESOLVED_ROOT.root;
|
|
370
|
+
server.registerResource("project-info", "ios://project/info", {
|
|
371
|
+
title: "iOS project info",
|
|
372
|
+
description: "Structure and shape of the configured Swift project: file and line counts, deployment target, UI framework, inferred architecture with the evidence behind it, whether dependency injection is in use, and which Apple frameworks it imports.",
|
|
373
|
+
mimeType: "application/json",
|
|
374
|
+
}, async (uri) => ({
|
|
375
|
+
contents: [await projectInfoResource(uri.href, PROJECT_ROOT, RESOLVED_ROOT.source)],
|
|
376
|
+
}));
|
|
377
|
+
server.registerResource("project-dependencies", "ios://project/dependencies", {
|
|
378
|
+
title: "iOS project dependencies",
|
|
379
|
+
description: "Third-party packages resolved from Package.swift, Package.resolved, or a Podfile, plus the Apple frameworks the project imports.",
|
|
380
|
+
mimeType: "application/json",
|
|
381
|
+
}, async (uri) => ({
|
|
382
|
+
contents: [await projectDependenciesResource(uri.href, PROJECT_ROOT)],
|
|
383
|
+
}));
|
|
384
|
+
server.registerResource("project-issues", "ios://project/issues", {
|
|
385
|
+
title: "iOS project issues",
|
|
386
|
+
description: "Every finding across all nine analysis categories for the configured project, with counts by severity and by category. Capped at 100 issues, with the remainder reported as a count.",
|
|
387
|
+
mimeType: "application/json",
|
|
388
|
+
}, async (uri) => ({
|
|
389
|
+
contents: [await projectIssuesResource(uri.href, PROJECT_ROOT)],
|
|
390
|
+
}));
|
|
236
391
|
const transport = new StdioServerTransport();
|
|
237
392
|
await server.connect(transport);
|
|
238
393
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,IAAc;IACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;YACE,iBAAiB,OAAO,EAAE;YAC1B,EAAE;YACF,qEAAqE;YACrE,EAAE;YACF,wEAAwE;YACxE,iEAAiE;YACjE,EAAE;YACF,OAAO;YACP,iEAAiE;YACjE,gDAAgD;YAChD,gDAAgD;YAChD,EAAE;YACF,OAAO;YACP,oEAAoE;YACpE,qDAAqD;YACrD,2CAA2C;YAC3C,EAAE;YACF,OAAO;YACP,oEAAoE;YACpE,wEAAwE;YACxE,iEAAiE;YACjE,mEAAmE;YACnE,wEAAwE;YACxE,wEAAwE;YACxE,EAAE;YACF,yEAAyE;YACzE,EAAE;YACF,2EAA2E;YAC3E,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG;IAChB,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,CAAC,kGAAkG,CAAC;CAChH,CAAC;AAEF,uFAAuF;AACvF,KAAK,UAAU,aAAa,CAC1B,IAAY,EACZ,KAAa,EACb,OAA8F;IAE9F,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QAEzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,gCAAgC,IAAI,uIAAuI;qBAClL;iBACF;aACF,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;SACjF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,gBAAgB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBAC/E;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;IACE,KAAK,EAAE,8CAA8C;IACrD,WAAW,EACT,qYAAqY;IACvY,WAAW,EAAE,SAAS;CACvB,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CACjB,aAAa,CAAC,IAAI,EAAE,0BAA0B,EAAE,CAAC,KAAK,EAAE,EAAE,CACxD,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAClC,CACJ,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;IACE,KAAK,EAAE,oCAAoC;IAC3C,WAAW,EACT,ucAAuc;IACzc,WAAW,EAAE,SAAS;CACvB,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CACjB,aAAa,CAAC,IAAI,EAAE,qBAAqB,EAAE,CAAC,KAAK,EAAE,EAAE,CACnD,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,CACnC,CACJ,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;IACE,KAAK,EAAE,gCAAgC;IACvC,WAAW,EACT,6XAA6X;IAC/X,WAAW,EAAE,SAAS;CACvB,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CACjB,aAAa,CAAC,IAAI,EAAE,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAClF,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;IACE,KAAK,EAAE,+BAA+B;IACtC,WAAW,EACT,yaAAya;IAC3a,WAAW,EAAE,SAAS;CACvB,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CACjB,aAAa,CAAC,IAAI,EAAE,0BAA0B,EAAE,CAAC,KAAK,EAAE,EAAE,CACxD,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,CACnC,CACJ,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;IACE,KAAK,EAAE,sCAAsC;IAC7C,WAAW,EACT,6VAA6V;IAC/V,WAAW,EAAE,SAAS;CACvB,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACzC,cAAc,CAAC,IAAI,CAAC;YACpB,kBAAkB,CAAC,IAAI,CAAC;SACzB,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG;YACf,GAAG,2BAA2B,CAAC,OAAO,CAAC;YACvC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SAC3D,CAAC;QACF,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,cAAc,CAAC,2BAA2B,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;iBAC1E;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,iBAAiB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBAChF;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;IACE,KAAK,EAAE,yBAAyB;IAChC,WAAW,EACT,4YAA4Y;IAC9Y,WAAW,EAAE,SAAS;CACvB,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACzC,cAAc,CAAC,IAAI,CAAC;YACpB,kBAAkB,CAAC,IAAI,CAAC;SACzB,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEpD,MAAM,UAAU,GAAG;YACjB,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC;YAC9C,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC;YAChD,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;YACtC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC;YAChD,WAAW,EAAE;gBACX,GAAG,2BAA2B,CAAC,OAAO,CAAC;gBACvC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;aAC3D;SACF,CAAC;QAEF,MAAM,KAAK,GAAa;YACtB,0BAA0B;YAC1B,EAAE;YACF,cAAc;YACd,EAAE;YACF,sBAAsB,OAAO,CAAC,cAAc,EAAE;YAC9C,gBAAgB,OAAO,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE;YACpD,4BAA4B,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE;YAC3G,8BAA8B,OAAO,CAAC,iBAAiB,IAAI,cAAc,EAAE;YAC3E,wBAAwB,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;YAChE,wBAAwB,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;YAChE,qBAAqB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,EAAE;YACpE,EAAE;YACF,qBAAqB,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,eAAe,EAAE;YACpF,EAAE;YACF,yBAAyB;YACzB,EAAE;YACF,0DAA0D;YAC1D,0BAA0B;SAC3B,CAAC;QAEF,MAAM,OAAO,GAA2B;YACtC,WAAW,EAAE,0BAA0B;YACvC,YAAY,EAAE,2BAA2B;YACzC,OAAO,EAAE,gBAAgB;YACzB,YAAY,EAAE,2BAA2B;YACzC,WAAW,EAAE,2BAA2B;SACzC,CAAC;QAEF,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1D,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;YACxE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;YACxE,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;YACpE,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC;YACzB,KAAK,CAAC,IAAI,CACR,KAAK,IAAI,MAAM,OAAO,MAAM,OAAO,MAAM,KAAK,QAAQ,OAAO,CAAC,IAAI,CAAC,MAAM,CAC1E,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,IAAI,CACR,EAAE,EACF,KAAK,KAAK,CAAC;YACT,CAAC,CAAC,kCAAkC;YACpC,CAAC,CAAC,KAAK,KAAK,uFAAuF,EACrG,EAAE,EACF,KAAK,EACL,EAAE,EACF,4HAA4H,CAC7H,CAAC;QAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IAC1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,oBAAoB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBACnF;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,IAAc;IACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;YACE,iBAAiB,OAAO,EAAE;YAC1B,EAAE;YACF,qEAAqE;YACrE,EAAE;YACF,wEAAwE;YACxE,iEAAiE;YACjE,EAAE;YACF,OAAO;YACP,iEAAiE;YACjE,mEAAmE;YACnE,gDAAgD;YAChD,gDAAgD;YAChD,EAAE;YACF,OAAO;YACP,oEAAoE;YACpE,qDAAqD;YACrD,2CAA2C;YAC3C,EAAE;YACF,OAAO;YACP,oEAAoE;YACpE,wEAAwE;YACxE,iEAAiE;YACjE,mEAAmE;YACnE,wEAAwE;YACxE,wEAAwE;YACxE,kEAAkE;YAClE,wEAAwE;YACxE,kEAAkE;YAClE,wDAAwD;YACxD,2EAA2E;YAC3E,EAAE;YACF,sEAAsE;YACtE,sEAAsE;YACtE,EAAE;YACF,0EAA0E;YAC1E,wEAAwE;YACxE,0EAA0E;YAC1E,8DAA8D;YAC9D,EAAE;YACF,2EAA2E;YAC3E,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG;IAChB,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,CAAC,kGAAkG,CAAC;CAChH,CAAC;AAEF,uFAAuF;AACvF,KAAK,UAAU,aAAa,CAC1B,IAAY,EACZ,KAAa,EACb,OAA8F;IAM9F,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QAEzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,gCAAgC,IAAI,uIAAuI;qBAClL;iBACF;gBACD,iBAAiB,EAAE,EAAE,GAAG,iBAAiB,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE;aAC1D,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,wEAAwE;QACxE,2EAA2E;QAC3E,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAChF,iBAAiB,EAAE,EAAE,GAAG,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;SAC3E,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,gBAAgB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBAC/E;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;IACE,KAAK,EAAE,8CAA8C;IACrD,WAAW,EACT,qYAAqY;IACvY,WAAW,EAAE,SAAS;IACtB,YAAY,EAAE,iBAAiB;CAChC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CACjB,aAAa,CAAC,IAAI,EAAE,0BAA0B,EAAE,CAAC,KAAK,EAAE,EAAE,CACxD,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAClC,CACJ,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;IACE,KAAK,EAAE,oCAAoC;IAC3C,WAAW,EACT,ucAAuc;IACzc,WAAW,EAAE,SAAS;IACtB,YAAY,EAAE,iBAAiB;CAChC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CACjB,aAAa,CAAC,IAAI,EAAE,qBAAqB,EAAE,CAAC,KAAK,EAAE,EAAE,CACnD,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,CACnC,CACJ,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;IACE,KAAK,EAAE,gCAAgC;IACvC,WAAW,EACT,6XAA6X;IAC/X,WAAW,EAAE,SAAS;IACtB,YAAY,EAAE,iBAAiB;CAChC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CACjB,aAAa,CAAC,IAAI,EAAE,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAClF,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;IACE,KAAK,EAAE,+BAA+B;IACtC,WAAW,EACT,yaAAya;IAC3a,WAAW,EAAE,SAAS;IACtB,YAAY,EAAE,iBAAiB;CAChC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CACjB,aAAa,CAAC,IAAI,EAAE,0BAA0B,EAAE,CAAC,KAAK,EAAE,EAAE,CACxD,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,CACnC,CACJ,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;IACE,KAAK,EAAE,sCAAsC;IAC7C,WAAW,EACT,6VAA6V;IAC/V,WAAW,EAAE,SAAS;CACvB,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACzC,cAAc,CAAC,IAAI,CAAC;YACpB,kBAAkB,CAAC,IAAI,CAAC;SACzB,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG;YACf,GAAG,2BAA2B,CAAC,OAAO,CAAC;YACvC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SAC3D,CAAC;QACF,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,cAAc,CAAC,2BAA2B,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;iBAC1E;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,iBAAiB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBAChF;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;IACE,KAAK,EAAE,yBAAyB;IAChC,WAAW,EACT,4YAA4Y;IAC9Y,WAAW,EAAE,SAAS;CACvB,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACzC,cAAc,CAAC,IAAI,CAAC;YACpB,kBAAkB,CAAC,IAAI,CAAC;SACzB,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEpD,MAAM,UAAU,GAAG;YACjB,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC;YAC9C,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC;YAChD,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;YACtC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC;YAChD,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;YACpC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;YACxC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC;YAC9C,OAAO,EAAE,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAC1E,WAAW,EAAE;gBACX,GAAG,2BAA2B,CAAC,OAAO,CAAC;gBACvC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;aAC3D;SACF,CAAC;QAEF,MAAM,KAAK,GAAa;YACtB,0BAA0B;YAC1B,EAAE;YACF,cAAc;YACd,EAAE;YACF,sBAAsB,OAAO,CAAC,cAAc,EAAE;YAC9C,gBAAgB,OAAO,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE;YACpD,4BAA4B,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE;YAC3G,8BAA8B,OAAO,CAAC,iBAAiB,IAAI,cAAc,EAAE;YAC3E,wBAAwB,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;YAChE,wBAAwB,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;YAChE,qBAAqB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,EAAE;YACpE,EAAE;YACF,UAAU;YACV,EAAE;YACF,uBAAuB,OAAO,CAAC,WAAW,EAAE;YAC5C,uBAAuB,OAAO,CAAC,YAAY,EAAE;YAC7C,iBAAiB,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE;YACpE,+BAA+B,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,6CAA6C,CAAC,CAAC,CAAC,mEAAmE,EAAE;YACtL,mCAAmC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,eAAe,EAAE;YACpG,EAAE;YACF,qBAAqB,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,eAAe,EAAE;YACpF,EAAE;YACF,yBAAyB;YACzB,EAAE;YACF,0DAA0D;YAC1D,0BAA0B;SAC3B,CAAC;QAEF,MAAM,OAAO,GAA2B;YACtC,WAAW,EAAE,0BAA0B;YACvC,YAAY,EAAE,2BAA2B;YACzC,OAAO,EAAE,gBAAgB;YACzB,YAAY,EAAE,2BAA2B;YACzC,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,uBAAuB;YACjC,WAAW,EAAE,0BAA0B;YACvC,OAAO,EAAE,sBAAsB;YAC/B,WAAW,EAAE,2BAA2B;SACzC,CAAC;QAEF,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1D,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;YACxE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;YACxE,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;YACpE,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC;YACzB,KAAK,CAAC,IAAI,CACR,KAAK,IAAI,MAAM,OAAO,MAAM,OAAO,MAAM,KAAK,QAAQ,OAAO,CAAC,IAAI,CAAC,MAAM,CAC1E,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,IAAI,CACR,EAAE,EACF,KAAK,KAAK,CAAC;YACT,CAAC,CAAC,kCAAkC;YACpC,CAAC,CAAC,KAAK,KAAK,uFAAuF,EACrG,EAAE,EACF,KAAK,EACL,EAAE,EACF,4HAA4H,CAC7H,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;QAEtD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5D,iBAAiB,EAAE;gBACjB,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC;gBACpE,OAAO,EAAE;oBACP,WAAW,EAAE,OAAO,CAAC,cAAc;oBACnC,KAAK,EAAE,OAAO,CAAC,SAAS;oBACxB,iBAAiB,EAAE,OAAO,CAAC,gBAAgB;oBAC3C,mBAAmB,EAAE,OAAO,CAAC,iBAAiB;oBAC9C,YAAY,EAAE,OAAO,CAAC,WAAW;oBACjC,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,qBAAqB,EAAE,OAAO,CAAC,oBAAoB;oBACnD,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,yBAAyB,EAAE,OAAO,CAAC,uBAAuB;oBAC1D,SAAS,EAAE,OAAO,CAAC,QAAQ;oBAC3B,iBAAiB,EAAE,OAAO,CAAC,eAAe;oBAC1C,iBAAiB,EAAE,OAAO,CAAC,eAAe;iBAC3C;gBACD,UAAU,EAAE,MAAM,CAAC,WAAW,CAC5B,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;oBAChD,IAAI;oBACJ;wBACE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM;wBAC7D,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM;wBAC7D,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM;wBACzD,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;qBACpB;iBACF,CAAC,CACH;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,oBAAoB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBACnF;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;IACE,KAAK,EAAE,gCAAgC;IACvC,WAAW,EACT,wlBAAwlB;IAC1lB,WAAW,EAAE;QACX,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,CACP,8EAA8E,CAC/E;KACJ;CACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IACjF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,gBAAgB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBAC/E;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;IACE,KAAK,EAAE,iCAAiC;IACxC,WAAW,EACT,whBAAwhB;IAC1hB,WAAW,EAAE,SAAS;IACtB,YAAY,EAAE,iBAAiB;CAChC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CACjB,aAAa,CAAC,IAAI,EAAE,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAChF,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;IACE,KAAK,EAAE,qBAAqB;IAC5B,WAAW,EACT,+hBAA+hB;IACjiB,WAAW,EAAE,SAAS;IACtB,YAAY,EAAE,iBAAiB;CAChC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CACjB,aAAa,CAAC,IAAI,EAAE,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CACpF,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;IACE,KAAK,EAAE,2BAA2B;IAClC,WAAW,EACT,oiBAAoiB;IACtiB,WAAW,EAAE,SAAS;IACtB,YAAY,EAAE,iBAAiB;CAChC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CACjB,aAAa,CAAC,IAAI,EAAE,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;IAClD,GAAG,mBAAmB,CAAC,KAAK,CAAC;IAC7B,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;CACjC,CAAC,CACL,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;IACE,KAAK,EAAE,sCAAsC;IAC7C,WAAW,EACT,kcAAkc;IACpc,WAAW,EAAE,SAAS;IACtB,YAAY,EAAE,iBAAiB;CAChC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CACjB,aAAa,CAAC,IAAI,EAAE,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE,CAClD,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAClC,CACJ,CAAC;AAEF,wEAAwE;AACxE,EAAE;AACF,yEAAyE;AACzE,yDAAyD;AACzD,+EAA+E;AAC/E,oDAAoD;AACpD,MAAM,aAAa,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAC1E,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC;AAExC,MAAM,CAAC,gBAAgB,CACrB,cAAc,EACd,oBAAoB,EACpB;IACE,KAAK,EAAE,kBAAkB;IACzB,WAAW,EACT,+OAA+O;IACjP,QAAQ,EAAE,kBAAkB;CAC7B,EACD,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACd,QAAQ,EAAE,CAAC,MAAM,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACpF,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,gBAAgB,CACrB,sBAAsB,EACtB,4BAA4B,EAC5B;IACE,KAAK,EAAE,0BAA0B;IACjC,WAAW,EACT,kIAAkI;IACpI,QAAQ,EAAE,kBAAkB;CAC7B,EACD,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACd,QAAQ,EAAE,CAAC,MAAM,2BAA2B,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;CACtE,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,gBAAgB,CACrB,gBAAgB,EAChB,sBAAsB,EACtB;IACE,KAAK,EAAE,oBAAoB;IAC3B,WAAW,EACT,sLAAsL;IACxL,QAAQ,EAAE,kBAAkB;CAC7B,EACD,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACd,QAAQ,EAAE,CAAC,MAAM,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;CAChE,CAAC,CACH,CAAC;AAEF,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAG7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
|
package/dist/report.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Finding } from "./analyzers/types.js";
|
|
2
|
+
import { SkillLintResult } from "./analyzers/skill.js";
|
|
2
3
|
/**
|
|
3
4
|
* Render findings as readable markdown.
|
|
4
5
|
*
|
|
@@ -9,3 +10,12 @@ import { Finding } from "./analyzers/types.js";
|
|
|
9
10
|
export declare function renderFindings(title: string, findings: Finding[], scanned: number, options?: {
|
|
10
11
|
limit?: number;
|
|
11
12
|
}): string;
|
|
13
|
+
/**
|
|
14
|
+
* Render a skill-repository lint as markdown.
|
|
15
|
+
*
|
|
16
|
+
* Separate from `renderFindings` because the locations are markdown and YAML
|
|
17
|
+
* files — rendering a `tools:` line inside a `swift` fence would be a lie about
|
|
18
|
+
* what was inspected. The "Checked" section is not decoration: an empty report
|
|
19
|
+
* with no statement of scope is indistinguishable from a check that never ran.
|
|
20
|
+
*/
|
|
21
|
+
export declare function renderSkillLint(result: SkillLintResult): string;
|
package/dist/report.js
CHANGED
|
@@ -38,4 +38,44 @@ export function renderFindings(title, findings, scanned, options = {}) {
|
|
|
38
38
|
"run `swift build` and `swift test` for that._");
|
|
39
39
|
return lines.join("\n");
|
|
40
40
|
}
|
|
41
|
+
const SEVERITY_RANK = { blocker: 0, serious: 1, minor: 2 };
|
|
42
|
+
/**
|
|
43
|
+
* Render a skill-repository lint as markdown.
|
|
44
|
+
*
|
|
45
|
+
* Separate from `renderFindings` because the locations are markdown and YAML
|
|
46
|
+
* files — rendering a `tools:` line inside a `swift` fence would be a lie about
|
|
47
|
+
* what was inspected. The "Checked" section is not decoration: an empty report
|
|
48
|
+
* with no statement of scope is indistinguishable from a check that never ran.
|
|
49
|
+
*/
|
|
50
|
+
export function renderSkillLint(result) {
|
|
51
|
+
const { findings, checked } = result;
|
|
52
|
+
const sorted = [...findings].sort((a, b) => SEVERITY_RANK[a.severity] - SEVERITY_RANK[b.severity] ||
|
|
53
|
+
a.file.localeCompare(b.file) ||
|
|
54
|
+
a.line - b.line);
|
|
55
|
+
const lines = ["# Skill Repository Lint", "", "## Checked", ""];
|
|
56
|
+
lines.push(`- **SKILL.md:** ${checked.skillFile ? "found" : "**not found**"}`, `- **Subagent definitions:** ${checked.agentCount}`, checked.mirrorCheckSkipped
|
|
57
|
+
? "- **Mirrors:** skipped — no file matches SKILL.md's body, so this repository does not use the generated-mirror pattern"
|
|
58
|
+
: `- **Mirrors compared:** ${checked.mirrorsCompared}`, `- **Referenced paths resolved:** ${checked.referencedPaths}`, "");
|
|
59
|
+
if (sorted.length === 0) {
|
|
60
|
+
lines.push("**No findings.** Frontmatter, agent tool permissions, mirror sync, and doc references all pass.", "", "_Metadata only. This does not check that the instructions are correct, only that they are well-formed and internally consistent._");
|
|
61
|
+
return lines.join("\n");
|
|
62
|
+
}
|
|
63
|
+
const counts = {
|
|
64
|
+
blocker: sorted.filter((f) => f.severity === "blocker").length,
|
|
65
|
+
serious: sorted.filter((f) => f.severity === "serious").length,
|
|
66
|
+
minor: sorted.filter((f) => f.severity === "minor").length,
|
|
67
|
+
};
|
|
68
|
+
lines.push(`## ${sorted.length} finding${sorted.length === 1 ? "" : "s"}`, "", `🔴 ${counts.blocker} blocker · 🟠 ${counts.serious} serious · 🟡 ${counts.minor} minor`, "");
|
|
69
|
+
for (const finding of sorted) {
|
|
70
|
+
const location = finding.line > 0 ? `${finding.file}:${finding.line}` : finding.file;
|
|
71
|
+
lines.push(`### ${ICON[finding.severity]} ${location} — ${finding.message}`, "");
|
|
72
|
+
if (finding.excerpt) {
|
|
73
|
+
lines.push("```", finding.excerpt, "```", "");
|
|
74
|
+
}
|
|
75
|
+
lines.push(`**Why it matters:** ${finding.consequence}`, "", `**Fix:** ${finding.fix}`, "", `_Rule \`${finding.rule}\`_`, "");
|
|
76
|
+
}
|
|
77
|
+
lines.push("---", "", "_Metadata only. This does not check that the instructions are correct, only " +
|
|
78
|
+
"that they are well-formed and internally consistent._");
|
|
79
|
+
return lines.join("\n");
|
|
80
|
+
}
|
|
41
81
|
//# sourceMappingURL=report.js.map
|
package/dist/report.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource-backed project state.
|
|
3
|
+
*
|
|
4
|
+
* Tools are verbs the model chooses to call. Resources are nouns a client can
|
|
5
|
+
* read without being asked — so `ios://project/info` lets a client attach the
|
|
6
|
+
* project's shape to context up front, instead of the model having to think to
|
|
7
|
+
* run an analysis first.
|
|
8
|
+
*
|
|
9
|
+
* WHY THERE IS A CONFIGURED ROOT
|
|
10
|
+
*
|
|
11
|
+
* Resources are addressed by a fixed URI with no arguments, so `ios://project/…`
|
|
12
|
+
* only means something if the server knows which project it is. MCP clients
|
|
13
|
+
* already configure servers per project — `.cursor/mcp.json` lives in the
|
|
14
|
+
* repository, `claude mcp add` is run from it — so a root passed at launch fits
|
|
15
|
+
* how the server is actually deployed.
|
|
16
|
+
*
|
|
17
|
+
* WHY THERE IS NO ios://project/build-status
|
|
18
|
+
*
|
|
19
|
+
* It would have to run `xcodebuild`. That needs macOS and Xcode, and it breaks
|
|
20
|
+
* the `filesystem: read, network: none` contract that lets this package install
|
|
21
|
+
* anywhere in ~26 KB. Build and simulator state belong in the separate package
|
|
22
|
+
* that already requires a full toolchain — see ROADMAP.md.
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* The directory `ios-agent` keeps its internal files in.
|
|
26
|
+
*
|
|
27
|
+
* Read-only here: this server never creates it. Its presence is used purely as
|
|
28
|
+
* a project-root marker, the same way git treats `.git` — which is what lets
|
|
29
|
+
* the CLI and this server agree on a root without either configuring the other.
|
|
30
|
+
*/
|
|
31
|
+
export declare const INTERNAL_DIR = ".ios-agent";
|
|
32
|
+
/**
|
|
33
|
+
* Walk up from `start` looking for a directory containing `.ios-agent/`.
|
|
34
|
+
*
|
|
35
|
+
* Returns `undefined` rather than a fallback, so the caller decides what an
|
|
36
|
+
* absent marker means. Guessing here is how a server ends up analyzing a user's
|
|
37
|
+
* home directory because it was launched from the wrong place.
|
|
38
|
+
*/
|
|
39
|
+
export declare function findProjectRootUpwards(start: string): string | undefined;
|
|
40
|
+
export type RootSource = "flag" | "environment" | "marker" | "cwd";
|
|
41
|
+
export interface ResolvedRoot {
|
|
42
|
+
readonly root: string;
|
|
43
|
+
readonly source: RootSource;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Resolve the project root, and say how.
|
|
47
|
+
*
|
|
48
|
+
* Order: `--project`, then `IOS_AGENT_PROJECT`, then the nearest ancestor with
|
|
49
|
+
* a `.ios-agent/` marker, then cwd. The marker step is what makes the server
|
|
50
|
+
* work when a client spawns it from a nested directory — previously that
|
|
51
|
+
* silently analyzed whatever subtree it happened to land in.
|
|
52
|
+
*
|
|
53
|
+
* The `source` travels with the root because an implicit root is unfalsifiable:
|
|
54
|
+
* an empty result looks identical whether the project has no Swift or the
|
|
55
|
+
* server is pointed somewhere else entirely.
|
|
56
|
+
*/
|
|
57
|
+
export declare function resolveRootFrom(argv: string[], env: NodeJS.ProcessEnv): ResolvedRoot;
|
|
58
|
+
/** Resolve the project root from an explicit flag, the environment, a marker, or cwd. */
|
|
59
|
+
export declare function projectRootFrom(argv: string[], env: NodeJS.ProcessEnv): string;
|
|
60
|
+
export interface ResourcePayload {
|
|
61
|
+
uri: string;
|
|
62
|
+
mimeType: string;
|
|
63
|
+
text: string;
|
|
64
|
+
}
|
|
65
|
+
export declare function projectInfoResource(uri: string, root: string, source?: RootSource): Promise<ResourcePayload>;
|
|
66
|
+
export declare function projectDependenciesResource(uri: string, root: string): Promise<ResourcePayload>;
|
|
67
|
+
export declare function projectIssuesResource(uri: string, root: string): Promise<ResourcePayload>;
|