@extentos/mcp-server 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -0
- package/dist/cli/login.d.ts +2 -0
- package/dist/cli/login.d.ts.map +1 -0
- package/dist/cli/login.js +71 -0
- package/dist/cli/login.js.map +1 -0
- package/dist/cli/logout.d.ts +2 -0
- package/dist/cli/logout.d.ts.map +1 -0
- package/dist/cli/logout.js +65 -0
- package/dist/cli/logout.js.map +1 -0
- package/dist/cli/privacy.d.ts +3 -0
- package/dist/cli/privacy.d.ts.map +1 -0
- package/dist/cli/privacy.js +39 -0
- package/dist/cli/privacy.js.map +1 -0
- package/dist/cli/status.d.ts +2 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +9 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/update.d.ts +2 -0
- package/dist/cli/update.d.ts.map +1 -0
- package/dist/cli/update.js +8 -0
- package/dist/cli/update.js.map +1 -0
- package/dist/cli/whoami.d.ts +2 -0
- package/dist/cli/whoami.d.ts.map +1 -0
- package/dist/cli/whoami.js +8 -0
- package/dist/cli/whoami.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +69 -0
- package/dist/cli.js.map +1 -0
- package/dist/generated/schemas.d.ts +4 -0
- package/dist/generated/schemas.d.ts.map +1 -0
- package/dist/generated/schemas.js +2697 -0
- package/dist/generated/schemas.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/stub.d.ts +15 -0
- package/dist/stub.d.ts.map +1 -0
- package/dist/stub.js +20 -0
- package/dist/stub.js.map +1 -0
- package/dist/telemetry/client.d.ts +73 -0
- package/dist/telemetry/client.d.ts.map +1 -0
- package/dist/telemetry/client.js +207 -0
- package/dist/telemetry/client.js.map +1 -0
- package/dist/telemetry/consent.d.ts +19 -0
- package/dist/telemetry/consent.d.ts.map +1 -0
- package/dist/telemetry/consent.js +68 -0
- package/dist/telemetry/consent.js.map +1 -0
- package/dist/telemetry/index.d.ts +56 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +151 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/installRegistry.d.ts +18 -0
- package/dist/telemetry/installRegistry.d.ts.map +1 -0
- package/dist/telemetry/installRegistry.js +102 -0
- package/dist/telemetry/installRegistry.js.map +1 -0
- package/dist/tools/data/capabilities.d.ts +566 -0
- package/dist/tools/data/capabilities.d.ts.map +1 -0
- package/dist/tools/data/capabilities.js +243 -0
- package/dist/tools/data/capabilities.js.map +1 -0
- package/dist/tools/data/examplePatterns.d.ts +4 -0
- package/dist/tools/data/examplePatterns.d.ts.map +1 -0
- package/dist/tools/data/examplePatterns.js +546 -0
- package/dist/tools/data/examplePatterns.js.map +1 -0
- package/dist/tools/data/presetTriggers.d.ts +4 -0
- package/dist/tools/data/presetTriggers.d.ts.map +1 -0
- package/dist/tools/data/presetTriggers.js +47 -0
- package/dist/tools/data/presetTriggers.js.map +1 -0
- package/dist/tools/data/version.d.ts +31 -0
- package/dist/tools/data/version.d.ts.map +1 -0
- package/dist/tools/data/version.js +34 -0
- package/dist/tools/data/version.js.map +1 -0
- package/dist/tools/definitions.d.ts +13 -0
- package/dist/tools/definitions.d.ts.map +1 -0
- package/dist/tools/definitions.js +347 -0
- package/dist/tools/definitions.js.map +1 -0
- package/dist/tools/docs/index.d.ts +10 -0
- package/dist/tools/docs/index.d.ts.map +1 -0
- package/dist/tools/docs/index.js +220 -0
- package/dist/tools/docs/index.js.map +1 -0
- package/dist/tools/handlers/completeAuthLink.d.ts +3 -0
- package/dist/tools/handlers/completeAuthLink.d.ts.map +1 -0
- package/dist/tools/handlers/completeAuthLink.js +152 -0
- package/dist/tools/handlers/completeAuthLink.js.map +1 -0
- package/dist/tools/handlers/createSimulatorSession.d.ts +3 -0
- package/dist/tools/handlers/createSimulatorSession.d.ts.map +1 -0
- package/dist/tools/handlers/createSimulatorSession.js +231 -0
- package/dist/tools/handlers/createSimulatorSession.js.map +1 -0
- package/dist/tools/handlers/generateConnectionModule.d.ts +3 -0
- package/dist/tools/handlers/generateConnectionModule.d.ts.map +1 -0
- package/dist/tools/handlers/generateConnectionModule.js +222 -0
- package/dist/tools/handlers/generateConnectionModule.js.map +1 -0
- package/dist/tools/handlers/generateConsumer.d.ts +3 -0
- package/dist/tools/handlers/generateConsumer.d.ts.map +1 -0
- package/dist/tools/handlers/generateConsumer.js +257 -0
- package/dist/tools/handlers/generateConsumer.js.map +1 -0
- package/dist/tools/handlers/getCredentialGuide.d.ts +3 -0
- package/dist/tools/handlers/getCredentialGuide.d.ts.map +1 -0
- package/dist/tools/handlers/getCredentialGuide.js +296 -0
- package/dist/tools/handlers/getCredentialGuide.js.map +1 -0
- package/dist/tools/handlers/getEventLog.d.ts +3 -0
- package/dist/tools/handlers/getEventLog.d.ts.map +1 -0
- package/dist/tools/handlers/getEventLog.js +90 -0
- package/dist/tools/handlers/getEventLog.js.map +1 -0
- package/dist/tools/handlers/getExampleSpec.d.ts +3 -0
- package/dist/tools/handlers/getExampleSpec.d.ts.map +1 -0
- package/dist/tools/handlers/getExampleSpec.js +44 -0
- package/dist/tools/handlers/getExampleSpec.js.map +1 -0
- package/dist/tools/handlers/getPermissions.d.ts +3 -0
- package/dist/tools/handlers/getPermissions.d.ts.map +1 -0
- package/dist/tools/handlers/getPermissions.js +50 -0
- package/dist/tools/handlers/getPermissions.js.map +1 -0
- package/dist/tools/handlers/getPlatformInfo.d.ts +3 -0
- package/dist/tools/handlers/getPlatformInfo.d.ts.map +1 -0
- package/dist/tools/handlers/getPlatformInfo.js +78 -0
- package/dist/tools/handlers/getPlatformInfo.js.map +1 -0
- package/dist/tools/handlers/getProductionChecklist.d.ts +3 -0
- package/dist/tools/handlers/getProductionChecklist.d.ts.map +1 -0
- package/dist/tools/handlers/getProductionChecklist.js +238 -0
- package/dist/tools/handlers/getProductionChecklist.js.map +1 -0
- package/dist/tools/handlers/getSimulatorStatus.d.ts +3 -0
- package/dist/tools/handlers/getSimulatorStatus.d.ts.map +1 -0
- package/dist/tools/handlers/getSimulatorStatus.js +56 -0
- package/dist/tools/handlers/getSimulatorStatus.js.map +1 -0
- package/dist/tools/handlers/getVoiceCommandGuidance.d.ts +3 -0
- package/dist/tools/handlers/getVoiceCommandGuidance.d.ts.map +1 -0
- package/dist/tools/handlers/getVoiceCommandGuidance.js +200 -0
- package/dist/tools/handlers/getVoiceCommandGuidance.js.map +1 -0
- package/dist/tools/handlers/initSpec.d.ts +3 -0
- package/dist/tools/handlers/initSpec.d.ts.map +1 -0
- package/dist/tools/handlers/initSpec.js +234 -0
- package/dist/tools/handlers/initSpec.js.map +1 -0
- package/dist/tools/handlers/inspectIntegration.d.ts +3 -0
- package/dist/tools/handlers/inspectIntegration.d.ts.map +1 -0
- package/dist/tools/handlers/inspectIntegration.js +204 -0
- package/dist/tools/handlers/inspectIntegration.js.map +1 -0
- package/dist/tools/handlers/planIntegration.d.ts +3 -0
- package/dist/tools/handlers/planIntegration.d.ts.map +1 -0
- package/dist/tools/handlers/planIntegration.js +279 -0
- package/dist/tools/handlers/planIntegration.js.map +1 -0
- package/dist/tools/handlers/searchDocs.d.ts +3 -0
- package/dist/tools/handlers/searchDocs.d.ts.map +1 -0
- package/dist/tools/handlers/searchDocs.js +41 -0
- package/dist/tools/handlers/searchDocs.js.map +1 -0
- package/dist/tools/handlers/updateSpec.d.ts +3 -0
- package/dist/tools/handlers/updateSpec.d.ts.map +1 -0
- package/dist/tools/handlers/updateSpec.js +453 -0
- package/dist/tools/handlers/updateSpec.js.map +1 -0
- package/dist/tools/handlers/validateIntegration.d.ts +3 -0
- package/dist/tools/handlers/validateIntegration.d.ts.map +1 -0
- package/dist/tools/handlers/validateIntegration.js +546 -0
- package/dist/tools/handlers/validateIntegration.js.map +1 -0
- package/dist/tools/handlers/validateSpec.d.ts +3 -0
- package/dist/tools/handlers/validateSpec.d.ts.map +1 -0
- package/dist/tools/handlers/validateSpec.js +26 -0
- package/dist/tools/handlers/validateSpec.js.map +1 -0
- package/dist/tools/registry.d.ts +4 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +43 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/response.d.ts +12 -0
- package/dist/tools/response.d.ts.map +1 -0
- package/dist/tools/response.js +19 -0
- package/dist/tools/response.js.map +1 -0
- package/dist/tools/templates/androidBootstrap.d.ts +2 -0
- package/dist/tools/templates/androidBootstrap.d.ts.map +1 -0
- package/dist/tools/templates/androidBootstrap.js +40 -0
- package/dist/tools/templates/androidBootstrap.js.map +1 -0
- package/dist/tools/templates/callbackHandler.d.ts +11 -0
- package/dist/tools/templates/callbackHandler.d.ts.map +1 -0
- package/dist/tools/templates/callbackHandler.js +177 -0
- package/dist/tools/templates/callbackHandler.js.map +1 -0
- package/dist/tools/templates/iosBootstrap.d.ts +3 -0
- package/dist/tools/templates/iosBootstrap.d.ts.map +1 -0
- package/dist/tools/templates/iosBootstrap.js +50 -0
- package/dist/tools/templates/iosBootstrap.js.map +1 -0
- package/dist/tools/templates/streamConsumer.d.ts +8 -0
- package/dist/tools/templates/streamConsumer.d.ts.map +1 -0
- package/dist/tools/templates/streamConsumer.js +248 -0
- package/dist/tools/templates/streamConsumer.js.map +1 -0
- package/dist/tools/util/appPackage.d.ts +4 -0
- package/dist/tools/util/appPackage.d.ts.map +1 -0
- package/dist/tools/util/appPackage.js +16 -0
- package/dist/tools/util/appPackage.js.map +1 -0
- package/dist/tools/util/backendClient.d.ts +25 -0
- package/dist/tools/util/backendClient.d.ts.map +1 -0
- package/dist/tools/util/backendClient.js +144 -0
- package/dist/tools/util/backendClient.js.map +1 -0
- package/dist/tools/util/manifest.d.ts +9 -0
- package/dist/tools/util/manifest.d.ts.map +1 -0
- package/dist/tools/util/manifest.js +62 -0
- package/dist/tools/util/manifest.js.map +1 -0
- package/dist/tools/util/permissions.d.ts +32 -0
- package/dist/tools/util/permissions.d.ts.map +1 -0
- package/dist/tools/util/permissions.js +165 -0
- package/dist/tools/util/permissions.js.map +1 -0
- package/dist/tools/validation/validateSpec.d.ts +22 -0
- package/dist/tools/validation/validateSpec.d.ts.map +1 -0
- package/dist/tools/validation/validateSpec.js +370 -0
- package/dist/tools/validation/validateSpec.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,546 @@
|
|
|
1
|
+
// validateIntegration — whole-project correctness gate before testing.
|
|
2
|
+
// Spec: docs/mcp/MCP_TOOLS.md § validateIntegration
|
|
3
|
+
// 13 checks: 11 universal + 2 bootstrap.
|
|
4
|
+
import { readFileSync, existsSync, readdirSync } from "node:fs";
|
|
5
|
+
import { createHash } from "node:crypto";
|
|
6
|
+
import { join, isAbsolute, resolve } from "node:path";
|
|
7
|
+
import { okResponse } from "../response.js";
|
|
8
|
+
import { validateSpec } from "../validation/validateSpec.js";
|
|
9
|
+
import { deriveAndroid, deriveIos } from "../util/permissions.js";
|
|
10
|
+
const GEN_MARKER = "EXTENTOS-GENERATED";
|
|
11
|
+
export function handleValidateIntegration(raw) {
|
|
12
|
+
const args = raw && typeof raw === "object" ? raw : {};
|
|
13
|
+
const projectPath = resolveProjectPath(args.projectPath);
|
|
14
|
+
const checks = [];
|
|
15
|
+
const manifestPath = join(projectPath, "extentos.manifest.json");
|
|
16
|
+
const manifestExists = existsSync(manifestPath);
|
|
17
|
+
checks.push({
|
|
18
|
+
name: "manifest_exists",
|
|
19
|
+
passed: manifestExists,
|
|
20
|
+
severity: manifestExists ? undefined : "error",
|
|
21
|
+
details: manifestExists
|
|
22
|
+
? `Found extentos.manifest.json at ${manifestPath}.`
|
|
23
|
+
: `No manifest at ${manifestPath}.`,
|
|
24
|
+
fix: manifestExists ? undefined : "Run generateConnectionModule to bootstrap the integration.",
|
|
25
|
+
});
|
|
26
|
+
if (!manifestExists) {
|
|
27
|
+
return okResponse({
|
|
28
|
+
valid: false,
|
|
29
|
+
checks,
|
|
30
|
+
summary: `Integration not installed yet — run generateConnectionModule first.`,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
let manifest;
|
|
34
|
+
try {
|
|
35
|
+
manifest = JSON.parse(readFileSync(manifestPath, "utf8"));
|
|
36
|
+
checks.push({
|
|
37
|
+
name: "manifest_parses",
|
|
38
|
+
passed: true,
|
|
39
|
+
details: `manifestVersion ${JSON.stringify(manifest.manifestVersion)}.`,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
catch (e) {
|
|
43
|
+
checks.push({
|
|
44
|
+
name: "manifest_parses",
|
|
45
|
+
passed: false,
|
|
46
|
+
severity: "error",
|
|
47
|
+
details: `Failed to parse manifest: ${errMessage(e)}.`,
|
|
48
|
+
fix: "Repair JSON or restore from git history.",
|
|
49
|
+
});
|
|
50
|
+
return okResponse({ valid: false, checks, summary: "Manifest parse failure blocks all further checks." });
|
|
51
|
+
}
|
|
52
|
+
const platform = typeof manifest.platform === "string" ? manifest.platform : "";
|
|
53
|
+
const specInfo = manifest.spec ?? {};
|
|
54
|
+
const specRelPath = typeof specInfo.path === "string" ? specInfo.path : "";
|
|
55
|
+
const specAbsPath = specRelPath ? join(projectPath, specRelPath) : "";
|
|
56
|
+
const specExists = specRelPath ? existsSync(specAbsPath) : false;
|
|
57
|
+
checks.push({
|
|
58
|
+
name: "spec_exists",
|
|
59
|
+
passed: specExists,
|
|
60
|
+
severity: specExists ? undefined : "error",
|
|
61
|
+
details: specExists
|
|
62
|
+
? `Spec at ${specRelPath}.`
|
|
63
|
+
: `Spec not found at ${specRelPath || "(no path in manifest)"}.`,
|
|
64
|
+
fix: specExists ? undefined : "Re-run generateConnectionModule to restore the empty spec file, then initSpec.",
|
|
65
|
+
});
|
|
66
|
+
let spec = null;
|
|
67
|
+
let specRawText = "";
|
|
68
|
+
if (specExists) {
|
|
69
|
+
try {
|
|
70
|
+
specRawText = readFileSync(specAbsPath, "utf8");
|
|
71
|
+
spec = JSON.parse(specRawText);
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
checks.push({
|
|
75
|
+
name: "spec_validates",
|
|
76
|
+
passed: false,
|
|
77
|
+
severity: "error",
|
|
78
|
+
details: `Spec JSON parse error: ${errMessage(e)}.`,
|
|
79
|
+
fix: "Repair the JSON; validateSpec can help pinpoint the issue.",
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (spec) {
|
|
84
|
+
const result = validateSpec(spec);
|
|
85
|
+
const passed = result.status === "valid";
|
|
86
|
+
checks.push({
|
|
87
|
+
name: "spec_validates",
|
|
88
|
+
passed,
|
|
89
|
+
severity: passed ? (result.warnings.length ? "warn" : undefined) : "error",
|
|
90
|
+
details: passed
|
|
91
|
+
? `Spec passes the 11 validation rules (${result.warnings.length} warning${result.warnings.length === 1 ? "" : "s"}).`
|
|
92
|
+
: `${result.errors.length} error${result.errors.length === 1 ? "" : "s"}: ${result.errors
|
|
93
|
+
.slice(0, 3)
|
|
94
|
+
.map((e) => e.rule)
|
|
95
|
+
.join(", ")}${result.errors.length > 3 ? "…" : ""}.`,
|
|
96
|
+
fix: passed ? undefined : "Call validateSpec to see the full error list with fix hints.",
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
// generated_files_exist
|
|
100
|
+
const generatedFiles = Array.isArray(manifest.generatedFiles)
|
|
101
|
+
? manifest.generatedFiles
|
|
102
|
+
: [];
|
|
103
|
+
const missingFiles = [];
|
|
104
|
+
const markerMissing = [];
|
|
105
|
+
const hashMismatch = [];
|
|
106
|
+
for (const gf of generatedFiles) {
|
|
107
|
+
const rel = typeof gf.path === "string" ? gf.path : "";
|
|
108
|
+
const recordedHash = typeof gf.hash === "string" ? gf.hash : "";
|
|
109
|
+
if (!rel)
|
|
110
|
+
continue;
|
|
111
|
+
const abs = join(projectPath, rel);
|
|
112
|
+
if (!existsSync(abs)) {
|
|
113
|
+
missingFiles.push(rel);
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
const text = readFileSync(abs, "utf8");
|
|
117
|
+
if (!text.includes(GEN_MARKER))
|
|
118
|
+
markerMissing.push(rel);
|
|
119
|
+
else if (`sha256:${sha256(text)}` !== recordedHash)
|
|
120
|
+
hashMismatch.push(rel);
|
|
121
|
+
}
|
|
122
|
+
{
|
|
123
|
+
const issues = missingFiles.length + markerMissing.length;
|
|
124
|
+
const passed = issues === 0;
|
|
125
|
+
const parts = [];
|
|
126
|
+
if (missingFiles.length)
|
|
127
|
+
parts.push(`missing: ${missingFiles.join(", ")}`);
|
|
128
|
+
if (markerMissing.length)
|
|
129
|
+
parts.push(`marker absent: ${markerMissing.join(", ")}`);
|
|
130
|
+
checks.push({
|
|
131
|
+
name: "generated_files_exist",
|
|
132
|
+
passed,
|
|
133
|
+
severity: passed ? undefined : "error",
|
|
134
|
+
details: passed
|
|
135
|
+
? `${generatedFiles.length} generated file${generatedFiles.length === 1 ? "" : "s"} present with markers.`
|
|
136
|
+
: parts.join("; "),
|
|
137
|
+
fix: passed
|
|
138
|
+
? undefined
|
|
139
|
+
: "Re-run generateConsumer / generateConnectionModule to regenerate — USER-CODE regions will be preserved.",
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
// dependency_declared
|
|
143
|
+
const depResult = inspectDependency(projectPath, platform, manifest);
|
|
144
|
+
checks.push({
|
|
145
|
+
name: "dependency_declared",
|
|
146
|
+
passed: depResult.found,
|
|
147
|
+
severity: depResult.found ? undefined : "error",
|
|
148
|
+
details: depResult.found
|
|
149
|
+
? `${depResult.coordinate} found in ${depResult.file}.`
|
|
150
|
+
: `Expected ${depResult.coordinate ?? "(none)"} in ${depResult.file ?? "(manifest has no build file path)"} — not found.`,
|
|
151
|
+
fix: depResult.found ? undefined : "Add the dependency manually or re-run generateConnectionModule.",
|
|
152
|
+
});
|
|
153
|
+
// permissions_complete
|
|
154
|
+
if (spec) {
|
|
155
|
+
const derived = platform === "android" ? deriveAndroid(spec) : null;
|
|
156
|
+
const derivedIos = platform === "ios" ? deriveIos(spec) : null;
|
|
157
|
+
const expected = derived?.permissions ?? derivedIos?.plistKeys.map((k) => k.key) ?? [];
|
|
158
|
+
const actualRaw = Array.isArray(manifest.permissions) ? manifest.permissions : [];
|
|
159
|
+
const actual = actualRaw.filter((p) => typeof p === "string");
|
|
160
|
+
const missing = expected.filter((e) => !actual.includes(e));
|
|
161
|
+
const passed = missing.length === 0;
|
|
162
|
+
checks.push({
|
|
163
|
+
name: "permissions_complete",
|
|
164
|
+
passed,
|
|
165
|
+
severity: passed ? undefined : "error",
|
|
166
|
+
details: passed
|
|
167
|
+
? `Manifest declares all ${expected.length} expected ${platform === "android" ? "permission" : "Info.plist key"}${expected.length === 1 ? "" : "s"}.`
|
|
168
|
+
: `Missing ${missing.length}: ${missing.join(", ")}.`,
|
|
169
|
+
fix: passed ? undefined : "Re-run initSpec/updateSpec — they refresh the manifest's permissions array.",
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
// background_execution_declared
|
|
173
|
+
if (spec) {
|
|
174
|
+
const { passed, details, fix } = checkBackgroundExecution(projectPath, platform, spec);
|
|
175
|
+
checks.push({
|
|
176
|
+
name: "background_execution_declared",
|
|
177
|
+
passed,
|
|
178
|
+
severity: passed ? undefined : "error",
|
|
179
|
+
details,
|
|
180
|
+
fix,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
// handler_coverage
|
|
184
|
+
if (spec) {
|
|
185
|
+
const handlers = collectHandlers(spec);
|
|
186
|
+
const bootstrapFile = findBootstrap(projectPath, generatedFiles, platform);
|
|
187
|
+
const callbackFile = findCallbackFile(projectPath, generatedFiles, platform);
|
|
188
|
+
const sourceText = [bootstrapFile, callbackFile]
|
|
189
|
+
.filter(Boolean)
|
|
190
|
+
.map((p) => readTextSafe(p))
|
|
191
|
+
.join("\n");
|
|
192
|
+
const missingHandlers = handlers.filter((h) => !sourceText.includes(`"${h}"`) && !sourceText.includes(`case "${h}"`));
|
|
193
|
+
const passed = missingHandlers.length === 0;
|
|
194
|
+
checks.push({
|
|
195
|
+
name: "handler_coverage",
|
|
196
|
+
passed,
|
|
197
|
+
severity: passed ? undefined : "error",
|
|
198
|
+
details: passed
|
|
199
|
+
? `${handlers.length} handler${handlers.length === 1 ? "" : "s"} referenced in the generated dispatch.`
|
|
200
|
+
: `Missing stubs: ${missingHandlers.join(", ")}.`,
|
|
201
|
+
fix: passed ? undefined : "Call generateConsumer({ kind: 'callback' }) to regenerate the dispatch.",
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
// no_drift
|
|
205
|
+
const manifestSpecHash = typeof specInfo.hash === "string" ? specInfo.hash : "sha256:empty";
|
|
206
|
+
const liveSpecHash = spec ? `sha256:${sha256(JSON.stringify(spec, null, 2))}` : "sha256:empty";
|
|
207
|
+
const specDrift = manifestSpecHash !== "sha256:empty" && manifestSpecHash !== liveSpecHash;
|
|
208
|
+
const anyDrift = specDrift || hashMismatch.length > 0;
|
|
209
|
+
checks.push({
|
|
210
|
+
name: "no_drift",
|
|
211
|
+
passed: !anyDrift,
|
|
212
|
+
severity: anyDrift ? "warn" : undefined,
|
|
213
|
+
details: anyDrift
|
|
214
|
+
? `${specDrift ? "Spec hash drift. " : ""}${hashMismatch.length ? `File drift: ${hashMismatch.join(", ")}.` : ""}`.trim()
|
|
215
|
+
: "All hashes match manifest records.",
|
|
216
|
+
fix: anyDrift
|
|
217
|
+
? "Re-run inspectIntegration to re-sync basedOn token before the next updateSpec."
|
|
218
|
+
: undefined,
|
|
219
|
+
});
|
|
220
|
+
// connection_page_config_valid
|
|
221
|
+
const cpCheck = checkConnectionPage(projectPath);
|
|
222
|
+
if (cpCheck)
|
|
223
|
+
checks.push(cpCheck);
|
|
224
|
+
// bootstrap_registration_present
|
|
225
|
+
if (spec) {
|
|
226
|
+
const bCheck = checkBootstrap(projectPath, generatedFiles, platform);
|
|
227
|
+
checks.push(bCheck);
|
|
228
|
+
}
|
|
229
|
+
// ui_artifact_matches_usage
|
|
230
|
+
const uiCheck = checkUiArtifact(projectPath, platform, manifest);
|
|
231
|
+
if (uiCheck)
|
|
232
|
+
checks.push(uiCheck);
|
|
233
|
+
const errorCount = checks.filter((c) => !c.passed && c.severity === "error").length;
|
|
234
|
+
const warnCount = checks.filter((c) => !c.passed && c.severity === "warn").length;
|
|
235
|
+
const valid = errorCount === 0;
|
|
236
|
+
const summary = valid
|
|
237
|
+
? `All correctness checks pass${warnCount ? ` (${warnCount} warning${warnCount === 1 ? "" : "s"})` : ""}. Safe to test.`
|
|
238
|
+
: `${errorCount} error${errorCount === 1 ? "" : "s"}, ${warnCount} warning${warnCount === 1 ? "" : "s"} — fix before testing.`;
|
|
239
|
+
return okResponse({ valid, checks, summary });
|
|
240
|
+
}
|
|
241
|
+
function inspectDependency(projectPath, platform, manifest) {
|
|
242
|
+
if (platform === "android") {
|
|
243
|
+
const gradle = manifest.gradle;
|
|
244
|
+
const coord = typeof gradle?.coordinate === "string" ? gradle.coordinate : null;
|
|
245
|
+
const buildFile = typeof gradle?.buildFile === "string" ? gradle.buildFile : "app/build.gradle.kts";
|
|
246
|
+
const abs = join(projectPath, buildFile);
|
|
247
|
+
if (!coord || !existsSync(abs))
|
|
248
|
+
return { found: false, coordinate: coord, file: buildFile };
|
|
249
|
+
const text = readFileSync(abs, "utf8");
|
|
250
|
+
const coreId = coord.split(":").slice(0, 2).join(":");
|
|
251
|
+
return { found: text.includes(coreId), coordinate: coord, file: buildFile };
|
|
252
|
+
}
|
|
253
|
+
if (platform === "ios") {
|
|
254
|
+
const spm = manifest.spm;
|
|
255
|
+
const pkg = typeof spm?.package === "string" ? spm.package : null;
|
|
256
|
+
const projectFile = typeof spm?.projectFile === "string" ? spm.projectFile : "Package.swift";
|
|
257
|
+
const abs = join(projectPath, projectFile);
|
|
258
|
+
if (!pkg || !existsSync(abs))
|
|
259
|
+
return { found: false, coordinate: pkg, file: projectFile };
|
|
260
|
+
const text = readFileSync(abs, "utf8");
|
|
261
|
+
return { found: text.includes(pkg), coordinate: pkg, file: projectFile };
|
|
262
|
+
}
|
|
263
|
+
return { found: false, coordinate: null, file: null };
|
|
264
|
+
}
|
|
265
|
+
function checkBackgroundExecution(projectPath, platform, spec) {
|
|
266
|
+
const streams = Array.isArray(spec.streams) ? spec.streams : [];
|
|
267
|
+
if (!streams.length) {
|
|
268
|
+
return { passed: true, details: "No streams declared — background execution not required." };
|
|
269
|
+
}
|
|
270
|
+
if (platform === "android") {
|
|
271
|
+
const candidates = ["app/src/main/AndroidManifest.xml"];
|
|
272
|
+
for (const rel of candidates) {
|
|
273
|
+
const abs = join(projectPath, rel);
|
|
274
|
+
if (!existsSync(abs))
|
|
275
|
+
continue;
|
|
276
|
+
const text = readFileSync(abs, "utf8");
|
|
277
|
+
if (text.includes("android:foregroundServiceType")) {
|
|
278
|
+
return { passed: true, details: "AndroidManifest declares foregroundServiceType." };
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return {
|
|
282
|
+
passed: false,
|
|
283
|
+
details: "Spec uses streams but AndroidManifest has no <service android:foregroundServiceType=...> entry.",
|
|
284
|
+
fix: "Run getPermissions to see the required declaration, then patch AndroidManifest.xml.",
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
if (platform === "ios") {
|
|
288
|
+
const candidates = ["Info.plist", "MyApp/Info.plist"];
|
|
289
|
+
for (const rel of candidates) {
|
|
290
|
+
const abs = join(projectPath, rel);
|
|
291
|
+
if (!existsSync(abs))
|
|
292
|
+
continue;
|
|
293
|
+
const text = readFileSync(abs, "utf8");
|
|
294
|
+
if (text.includes("UIBackgroundModes")) {
|
|
295
|
+
return { passed: true, details: "Info.plist declares UIBackgroundModes." };
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
return {
|
|
299
|
+
passed: false,
|
|
300
|
+
details: "Spec uses streams but Info.plist has no UIBackgroundModes array.",
|
|
301
|
+
fix: "Add UIBackgroundModes with bluetooth-central + external-accessory (+ audio if mic streaming).",
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
return { passed: false, details: `Unknown platform ${platform}.` };
|
|
305
|
+
}
|
|
306
|
+
function collectHandlers(spec) {
|
|
307
|
+
const set = new Set();
|
|
308
|
+
const triggers = Array.isArray(spec.triggers) ? spec.triggers : [];
|
|
309
|
+
for (const t of triggers) {
|
|
310
|
+
walkActions(t.actions, (a) => {
|
|
311
|
+
if (a.type === "app_callback" && typeof a.handler === "string")
|
|
312
|
+
set.add(a.handler);
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
return [...set].sort();
|
|
316
|
+
}
|
|
317
|
+
function walkActions(actions, visit) {
|
|
318
|
+
if (!Array.isArray(actions))
|
|
319
|
+
return;
|
|
320
|
+
for (const a of actions) {
|
|
321
|
+
visit(a);
|
|
322
|
+
if (a.type === "branch") {
|
|
323
|
+
walkActions(a.then, visit);
|
|
324
|
+
walkActions(a.else, visit);
|
|
325
|
+
}
|
|
326
|
+
if (a.actions)
|
|
327
|
+
walkActions(a.actions, visit);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
function findBootstrap(projectPath, generatedFiles, platform) {
|
|
331
|
+
const ext = platform === "android" ? ".kt" : ".swift";
|
|
332
|
+
for (const gf of generatedFiles) {
|
|
333
|
+
const p = typeof gf.path === "string" ? gf.path : "";
|
|
334
|
+
if (p.endsWith(`ExtentosBootstrap${ext}`)) {
|
|
335
|
+
const abs = join(projectPath, p);
|
|
336
|
+
if (existsSync(abs))
|
|
337
|
+
return abs;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return null;
|
|
341
|
+
}
|
|
342
|
+
function findCallbackFile(projectPath, generatedFiles, platform) {
|
|
343
|
+
const ext = platform === "android" ? ".kt" : ".swift";
|
|
344
|
+
for (const gf of generatedFiles) {
|
|
345
|
+
const p = typeof gf.path === "string" ? gf.path : "";
|
|
346
|
+
if (p.endsWith(`ExtentosCallbacks${ext}`)) {
|
|
347
|
+
const abs = join(projectPath, p);
|
|
348
|
+
if (existsSync(abs))
|
|
349
|
+
return abs;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return null;
|
|
353
|
+
}
|
|
354
|
+
function checkBootstrap(projectPath, generatedFiles, platform) {
|
|
355
|
+
const bootstrap = findBootstrap(projectPath, generatedFiles, platform);
|
|
356
|
+
if (!bootstrap) {
|
|
357
|
+
return {
|
|
358
|
+
name: "bootstrap_registration_present",
|
|
359
|
+
passed: false,
|
|
360
|
+
severity: "error",
|
|
361
|
+
details: `ExtentosBootstrap${platform === "android" ? ".kt" : ".swift"} not found.`,
|
|
362
|
+
fix: "Run generateConnectionModule.",
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
const text = readTextSafe(bootstrap);
|
|
366
|
+
const registrationMatches = (text.match(/registerAppCallbackHandler/g) ?? []).length;
|
|
367
|
+
if (registrationMatches === 0) {
|
|
368
|
+
return {
|
|
369
|
+
name: "bootstrap_registration_present",
|
|
370
|
+
passed: false,
|
|
371
|
+
severity: "error",
|
|
372
|
+
details: "No registerAppCallbackHandler(...) call in bootstrap.",
|
|
373
|
+
fix: 'Re-run generateConsumer(kind: "callback") — it will regenerate the bootstrap patch.',
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
if (registrationMatches > 1) {
|
|
377
|
+
return {
|
|
378
|
+
name: "bootstrap_registration_present",
|
|
379
|
+
passed: false,
|
|
380
|
+
severity: "error",
|
|
381
|
+
details: `Bootstrap contains ${registrationMatches} registration calls — exactly one is expected.`,
|
|
382
|
+
fix: 'Re-run generateConsumer(kind: "callback") to reset the bootstrap dispatch.',
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
if (platform === "ios" && !text.includes("handleUrl")) {
|
|
386
|
+
return {
|
|
387
|
+
name: "bootstrap_registration_present",
|
|
388
|
+
passed: false,
|
|
389
|
+
severity: "error",
|
|
390
|
+
details: "iOS bootstrap is missing Wearables.shared.handleUrl(...) wiring — breaks Meta companion auth callback.",
|
|
391
|
+
fix: 'Add .onOpenURL { Wearables.shared.handleUrl($0) } to the @main App or re-run generateConnectionModule.',
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
return {
|
|
395
|
+
name: "bootstrap_registration_present",
|
|
396
|
+
passed: true,
|
|
397
|
+
details: "Bootstrap exists with exactly one registration call.",
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
function checkUiArtifact(projectPath, platform, manifest) {
|
|
401
|
+
const uiSymbols = ["ExtentosConnectionPage", "ExtentosTheme", "rememberExtentosState", "ExtentosState"];
|
|
402
|
+
let anyUsage = false;
|
|
403
|
+
for (const root of candidateSourceRoots(projectPath, platform)) {
|
|
404
|
+
if (!existsSync(root))
|
|
405
|
+
continue;
|
|
406
|
+
const text = readProjectText(root);
|
|
407
|
+
if (uiSymbols.some((s) => text.includes(s))) {
|
|
408
|
+
anyUsage = true;
|
|
409
|
+
break;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
if (!anyUsage)
|
|
413
|
+
return null;
|
|
414
|
+
if (platform === "android") {
|
|
415
|
+
const gradle = manifest.gradle;
|
|
416
|
+
const extras = Array.isArray(gradle?.additionalArtifacts)
|
|
417
|
+
? gradle.additionalArtifacts
|
|
418
|
+
: [];
|
|
419
|
+
const hasUi = extras.some((a) => typeof a.coordinate === "string" && a.coordinate.includes(":glasses-ui:"));
|
|
420
|
+
return {
|
|
421
|
+
name: "ui_artifact_matches_usage",
|
|
422
|
+
passed: hasUi,
|
|
423
|
+
severity: hasUi ? undefined : "warn",
|
|
424
|
+
details: hasUi
|
|
425
|
+
? "com.extentos:glasses-ui declared; UI usage matches."
|
|
426
|
+
: "UI symbols referenced but com.extentos:glasses-ui not in gradle.additionalArtifacts.",
|
|
427
|
+
fix: hasUi ? undefined : "Add com.extentos:glasses-ui to your Gradle dependencies (implementation scope).",
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
if (platform === "ios") {
|
|
431
|
+
const spm = manifest.spm;
|
|
432
|
+
const extras = Array.isArray(spm?.additionalProducts)
|
|
433
|
+
? spm.additionalProducts
|
|
434
|
+
: [];
|
|
435
|
+
const hasUi = extras.some((a) => a.product === "GlassesUI");
|
|
436
|
+
return {
|
|
437
|
+
name: "ui_artifact_matches_usage",
|
|
438
|
+
passed: hasUi,
|
|
439
|
+
severity: hasUi ? undefined : "warn",
|
|
440
|
+
details: hasUi
|
|
441
|
+
? "GlassesUI product linked; UI usage matches."
|
|
442
|
+
: "UI symbols referenced but GlassesUI not in spm.additionalProducts.",
|
|
443
|
+
fix: hasUi ? undefined : "Add GlassesUI product to your target via SPM.",
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
return null;
|
|
447
|
+
}
|
|
448
|
+
function checkConnectionPage(projectPath) {
|
|
449
|
+
const candidates = [
|
|
450
|
+
"app/src/main/assets/extentos.connection-page.json",
|
|
451
|
+
"Resources/extentos.connection-page.json",
|
|
452
|
+
"extentos.connection-page.json",
|
|
453
|
+
];
|
|
454
|
+
for (const rel of candidates) {
|
|
455
|
+
const abs = join(projectPath, rel);
|
|
456
|
+
if (!existsSync(abs))
|
|
457
|
+
continue;
|
|
458
|
+
try {
|
|
459
|
+
const parsed = JSON.parse(readFileSync(abs, "utf8"));
|
|
460
|
+
if (parsed.schemaVersion !== 1) {
|
|
461
|
+
return {
|
|
462
|
+
name: "connection_page_config_valid",
|
|
463
|
+
passed: false,
|
|
464
|
+
severity: "error",
|
|
465
|
+
details: `extentos.connection-page.json has schemaVersion ${JSON.stringify(parsed.schemaVersion)}; only 1 is supported.`,
|
|
466
|
+
fix: "Set schemaVersion: 1 or delete the file to fall back to defaults.",
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
const knownKeys = new Set(["schemaVersion", "sections", "appearance"]);
|
|
470
|
+
const unknown = Object.keys(parsed).filter((k) => !knownKeys.has(k));
|
|
471
|
+
return {
|
|
472
|
+
name: "connection_page_config_valid",
|
|
473
|
+
passed: true,
|
|
474
|
+
severity: unknown.length ? "warn" : undefined,
|
|
475
|
+
details: unknown.length
|
|
476
|
+
? `Config valid; ${unknown.length} unknown top-level field${unknown.length === 1 ? "" : "s"}: ${unknown.join(", ")}.`
|
|
477
|
+
: "extentos.connection-page.json is valid (schemaVersion 1).",
|
|
478
|
+
};
|
|
479
|
+
}
|
|
480
|
+
catch (e) {
|
|
481
|
+
return {
|
|
482
|
+
name: "connection_page_config_valid",
|
|
483
|
+
passed: false,
|
|
484
|
+
severity: "error",
|
|
485
|
+
details: `extentos.connection-page.json parse error: ${errMessage(e)}.`,
|
|
486
|
+
fix: "Repair the JSON or delete the file to fall back to defaults.",
|
|
487
|
+
};
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
return null;
|
|
491
|
+
}
|
|
492
|
+
function candidateSourceRoots(projectPath, platform) {
|
|
493
|
+
if (platform === "android") {
|
|
494
|
+
return [join(projectPath, "app/src/main/java"), join(projectPath, "app/src/main/kotlin")];
|
|
495
|
+
}
|
|
496
|
+
if (platform === "ios") {
|
|
497
|
+
return [projectPath];
|
|
498
|
+
}
|
|
499
|
+
return [];
|
|
500
|
+
}
|
|
501
|
+
function readProjectText(root, depth = 0, cap = 6) {
|
|
502
|
+
if (depth > cap)
|
|
503
|
+
return "";
|
|
504
|
+
let text = "";
|
|
505
|
+
let entries;
|
|
506
|
+
try {
|
|
507
|
+
entries = readdirSync(root, { withFileTypes: true });
|
|
508
|
+
}
|
|
509
|
+
catch {
|
|
510
|
+
return "";
|
|
511
|
+
}
|
|
512
|
+
for (const entry of entries) {
|
|
513
|
+
const name = entry.name;
|
|
514
|
+
if (name.startsWith(".") || name === "node_modules" || name === "build" || name === "Pods")
|
|
515
|
+
continue;
|
|
516
|
+
const abs = join(root, name);
|
|
517
|
+
if (entry.isDirectory()) {
|
|
518
|
+
text += readProjectText(abs, depth + 1, cap);
|
|
519
|
+
}
|
|
520
|
+
else if (/\.(kt|swift)$/.test(name)) {
|
|
521
|
+
text += "\n" + readTextSafe(abs);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
return text;
|
|
525
|
+
}
|
|
526
|
+
function readTextSafe(abs) {
|
|
527
|
+
try {
|
|
528
|
+
return readFileSync(abs, "utf8");
|
|
529
|
+
}
|
|
530
|
+
catch {
|
|
531
|
+
return "";
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
function sha256(text) {
|
|
535
|
+
return createHash("sha256").update(text).digest("hex");
|
|
536
|
+
}
|
|
537
|
+
function errMessage(e) {
|
|
538
|
+
return e instanceof Error ? e.message : String(e);
|
|
539
|
+
}
|
|
540
|
+
function resolveProjectPath(v) {
|
|
541
|
+
if (typeof v === "string" && v.length > 0) {
|
|
542
|
+
return isAbsolute(v) ? v : resolve(process.cwd(), v);
|
|
543
|
+
}
|
|
544
|
+
return process.cwd();
|
|
545
|
+
}
|
|
546
|
+
//# sourceMappingURL=validateIntegration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateIntegration.js","sourceRoot":"","sources":["../../../src/tools/handlers/validateIntegration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateSpec.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/validateSpec.ts"],"names":[],"mappings":"AAKA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5E,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAmB3D"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// validateSpec — detached spec validation (no filesystem).
|
|
2
|
+
// Spec: docs/mcp/MCP_TOOLS.md § validateSpec
|
|
3
|
+
// Wraps the reference validateSpec() in ../validation/validateSpec.ts.
|
|
4
|
+
import { validateSpec } from "../validation/validateSpec.js";
|
|
5
|
+
import { okResponse, errorResponse } from "../response.js";
|
|
6
|
+
export function handleValidateSpec(raw) {
|
|
7
|
+
if (!raw || typeof raw !== "object") {
|
|
8
|
+
return errorResponse({
|
|
9
|
+
code: "invalid_arguments",
|
|
10
|
+
message: "validateSpec requires an object argument with { spec }.",
|
|
11
|
+
fixHint: "Pass { spec: <spec object> }.",
|
|
12
|
+
retryable: false,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
const obj = raw;
|
|
16
|
+
if (!obj.spec || typeof obj.spec !== "object") {
|
|
17
|
+
return errorResponse({
|
|
18
|
+
code: "invalid_arguments",
|
|
19
|
+
message: "spec is required and must be an object.",
|
|
20
|
+
fixHint: "Pass the spec JSON you want validated as { spec: {...} }.",
|
|
21
|
+
retryable: false,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
return okResponse(validateSpec(obj.spec));
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=validateSpec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateSpec.js","sourceRoot":"","sources":["../../../src/tools/handlers/validateSpec.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,6CAA6C;AAC7C,uEAAuE;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAmB,MAAM,gBAAgB,CAAC;AAE5E,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC7C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,aAAa,CAAC;YACnB,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,yDAAyD;YAClE,OAAO,EAAE,+BAA+B;YACxC,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;IACL,CAAC;IACD,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,aAAa,CAAC;YACnB,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,yCAAyC;YAClD,OAAO,EAAE,2DAA2D;YACpE,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAqBhD,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAE9E,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAoBhD,CAAC"}
|