@aarav-j/zephyr-mcp-server 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +199 -0
- package/dist/db.d.ts +72 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +343 -0
- package/dist/db.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +451 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/doxygen.d.ts +14 -0
- package/dist/parsers/doxygen.d.ts.map +1 -0
- package/dist/parsers/doxygen.js +184 -0
- package/dist/parsers/doxygen.js.map +1 -0
- package/dist/parsers/dt-bindings.d.ts +10 -0
- package/dist/parsers/dt-bindings.d.ts.map +1 -0
- package/dist/parsers/dt-bindings.js +82 -0
- package/dist/parsers/dt-bindings.js.map +1 -0
- package/dist/parsers/kconfig.d.ts +11 -0
- package/dist/parsers/kconfig.d.ts.map +1 -0
- package/dist/parsers/kconfig.js +187 -0
- package/dist/parsers/kconfig.js.map +1 -0
- package/dist/test-db.d.ts +2 -0
- package/dist/test-db.d.ts.map +1 -0
- package/dist/test-db.js +119 -0
- package/dist/test-db.js.map +1 -0
- package/dist/test-doxygen.d.ts +2 -0
- package/dist/test-doxygen.d.ts.map +1 -0
- package/dist/test-doxygen.js +49 -0
- package/dist/test-doxygen.js.map +1 -0
- package/package.json +33 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doxygen.js","sourceRoot":"","sources":["../../src/parsers/doxygen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DtBindingRow } from "../db.js";
|
|
2
|
+
/**
|
|
3
|
+
* Parse a single Devicetree binding YAML file and extract binding info.
|
|
4
|
+
*/
|
|
5
|
+
export declare function parseDtBindingFile(filePath: string, repoRoot: string): DtBindingRow | null;
|
|
6
|
+
/**
|
|
7
|
+
* Parse all DT binding YAML files in a directory tree.
|
|
8
|
+
*/
|
|
9
|
+
export declare function parseDtBindingsTree(repoRoot: string): DtBindingRow[];
|
|
10
|
+
//# sourceMappingURL=dt-bindings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dt-bindings.d.ts","sourceRoot":"","sources":["../../src/parsers/dt-bindings.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,YAAY,GAAG,IAAI,CAwCrB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE,CAiCpE"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { readFileSync, readdirSync, existsSync } from "node:fs";
|
|
2
|
+
import { join, relative } from "node:path";
|
|
3
|
+
import { load } from "js-yaml";
|
|
4
|
+
/**
|
|
5
|
+
* Parse a single Devicetree binding YAML file and extract binding info.
|
|
6
|
+
*/
|
|
7
|
+
export function parseDtBindingFile(filePath, repoRoot) {
|
|
8
|
+
const content = readFileSync(filePath, "utf-8");
|
|
9
|
+
let parsed;
|
|
10
|
+
try {
|
|
11
|
+
parsed = load(content);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null; // Not valid YAML
|
|
15
|
+
}
|
|
16
|
+
if (!parsed || typeof parsed !== "object")
|
|
17
|
+
return null;
|
|
18
|
+
if (!("compatible" in parsed) || typeof parsed.compatible !== "string") {
|
|
19
|
+
// This binding may include others but has no compatible string — skip
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
const compatible = parsed.compatible;
|
|
23
|
+
const description = typeof parsed.description === "string" ? parsed.description : null;
|
|
24
|
+
const properties = parsed.properties && typeof parsed.properties === "object"
|
|
25
|
+
? JSON.stringify(parsed.properties)
|
|
26
|
+
: null;
|
|
27
|
+
const childBinding = parsed["child-binding"] && typeof parsed["child-binding"] === "object"
|
|
28
|
+
? JSON.stringify(parsed["child-binding"])
|
|
29
|
+
: null;
|
|
30
|
+
const bus = typeof parsed.bus === "string" ? parsed.bus : null;
|
|
31
|
+
const onBus = typeof parsed["on-bus"] === "string" ? parsed["on-bus"] : null;
|
|
32
|
+
const path = relative(repoRoot, filePath);
|
|
33
|
+
return {
|
|
34
|
+
compatible,
|
|
35
|
+
description,
|
|
36
|
+
properties,
|
|
37
|
+
child_binding: childBinding,
|
|
38
|
+
bus,
|
|
39
|
+
on_bus: onBus,
|
|
40
|
+
path,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Parse all DT binding YAML files in a directory tree.
|
|
45
|
+
*/
|
|
46
|
+
export function parseDtBindingsTree(repoRoot) {
|
|
47
|
+
const allRows = [];
|
|
48
|
+
const visited = new Set();
|
|
49
|
+
function walkDir(dirPath) {
|
|
50
|
+
if (!existsSync(dirPath))
|
|
51
|
+
return;
|
|
52
|
+
const entries = readdirSync(dirPath, { withFileTypes: true });
|
|
53
|
+
for (const entry of entries) {
|
|
54
|
+
const fullPath = join(dirPath, entry.name);
|
|
55
|
+
// Avoid hidden dirs and build directories
|
|
56
|
+
if (entry.name.startsWith("."))
|
|
57
|
+
continue;
|
|
58
|
+
if (entry.name === "build")
|
|
59
|
+
continue;
|
|
60
|
+
if (entry.isDirectory()) {
|
|
61
|
+
walkDir(fullPath);
|
|
62
|
+
}
|
|
63
|
+
else if (entry.isFile() && entry.name.endsWith(".yaml")) {
|
|
64
|
+
const absPath = fullPath;
|
|
65
|
+
if (visited.has(absPath))
|
|
66
|
+
continue;
|
|
67
|
+
visited.add(absPath);
|
|
68
|
+
try {
|
|
69
|
+
const row = parseDtBindingFile(absPath, repoRoot);
|
|
70
|
+
if (row)
|
|
71
|
+
allRows.push(row);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
walkDir(repoRoot);
|
|
80
|
+
return allRows;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=dt-bindings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dt-bindings.js","sourceRoot":"","sources":["../../src/parsers/dt-bindings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { KconfigRow } from "../db.js";
|
|
2
|
+
/**
|
|
3
|
+
* Parse a single Kconfig file and extract config symbols.
|
|
4
|
+
* This is a simplified parser — it doesn't handle the full Kconfig grammar.
|
|
5
|
+
*/
|
|
6
|
+
export declare function parseKconfigFile(filePath: string, repoRoot: string): KconfigRow[];
|
|
7
|
+
/**
|
|
8
|
+
* Parse all Kconfig files in a directory tree.
|
|
9
|
+
*/
|
|
10
|
+
export declare function parseKconfigTree(repoRoot: string): KconfigRow[];
|
|
11
|
+
//# sourceMappingURL=kconfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kconfig.d.ts","sourceRoot":"","sources":["../../src/parsers/kconfig.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAkBtC;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,UAAU,EAAE,CAuId;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CAmC/D"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal Kconfig parser that extracts symbols from Kconfig* files.
|
|
3
|
+
* Uses regex-based extraction — not as accurate as kconfiglib, but
|
|
4
|
+
* captures the vast majority of symbols in Zephyr's Kconfig tree.
|
|
5
|
+
*/
|
|
6
|
+
import { readFileSync, readdirSync, existsSync } from "node:fs";
|
|
7
|
+
import { join, relative } from "node:path";
|
|
8
|
+
const CONFIG_RE = /^config\s+(\w+)/m;
|
|
9
|
+
const TYPE_RE = /^\s*(bool|string|int|hex|tristate)\s*(.*)$/m;
|
|
10
|
+
const PROMPT_RE = /^\s*prompt\s+"(.+?)"/m;
|
|
11
|
+
const DEFAULT_RE = /^\s*default\s+(.+?)(?:\s+if\s+.+)?$/m;
|
|
12
|
+
const DEPENDS_RE = /^\s*depends\s+on\s+(.+)$/m;
|
|
13
|
+
const SELECT_RE = /^\s*select\s+(\w+)/m;
|
|
14
|
+
const RANGE_RE = /^\s*range\s+(\S+)\s+(\S+)/m;
|
|
15
|
+
const HELP_RE = /^\s*help$/m;
|
|
16
|
+
const SOURCE_RE = /^source\s+\"(.+?)\"/m;
|
|
17
|
+
const MENU_RE = /^(menu|if|choice|endmenu|endif|endchoice)\b/m;
|
|
18
|
+
/** Check if a file is a Kconfig file by name. */
|
|
19
|
+
function isKconfigFile(name) {
|
|
20
|
+
return name.startsWith("Kconfig") || name.startsWith("Kconfig.");
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Parse a single Kconfig file and extract config symbols.
|
|
24
|
+
* This is a simplified parser — it doesn't handle the full Kconfig grammar.
|
|
25
|
+
*/
|
|
26
|
+
export function parseKconfigFile(filePath, repoRoot) {
|
|
27
|
+
const rows = [];
|
|
28
|
+
const content = readFileSync(filePath, "utf-8");
|
|
29
|
+
const lines = content.split("\n");
|
|
30
|
+
const relPath = relative(repoRoot, filePath);
|
|
31
|
+
let i = 0;
|
|
32
|
+
const len = lines.length;
|
|
33
|
+
while (i < len) {
|
|
34
|
+
const line = lines[i].trim();
|
|
35
|
+
// Check for config symbol start
|
|
36
|
+
const configMatch = line.match(CONFIG_RE);
|
|
37
|
+
if (configMatch) {
|
|
38
|
+
const name = `CONFIG_${configMatch[1]}`;
|
|
39
|
+
i++;
|
|
40
|
+
// Collect attributes until next config/menu/source/end-of-file
|
|
41
|
+
let type = null;
|
|
42
|
+
let prompt = null;
|
|
43
|
+
let defaultVal = null;
|
|
44
|
+
let dependsOn = [];
|
|
45
|
+
let selects = [];
|
|
46
|
+
let rangeMin = null;
|
|
47
|
+
let rangeMax = null;
|
|
48
|
+
let helpLines = [];
|
|
49
|
+
let inHelp = false;
|
|
50
|
+
while (i < len) {
|
|
51
|
+
const attrLine = lines[i].trim();
|
|
52
|
+
// Stop at next config, menu keyword, or source
|
|
53
|
+
if (CONFIG_RE.test(attrLine) || MENU_RE.test(attrLine) || SOURCE_RE.test(attrLine)) {
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
// Skip source lines embedded in config
|
|
57
|
+
if (attrLine.startsWith("source ")) {
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
// In help text, collect lines
|
|
61
|
+
if (inHelp) {
|
|
62
|
+
if (attrLine === "" || attrLine.startsWith(" ") || attrLine.startsWith("\t")) {
|
|
63
|
+
helpLines.push(lines[i]);
|
|
64
|
+
i++;
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
inHelp = false;
|
|
69
|
+
// Don't break — may be another attribute
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Type (bool, string, int, hex, tristate)
|
|
74
|
+
const typeMatch = attrLine.match(TYPE_RE);
|
|
75
|
+
if (typeMatch) {
|
|
76
|
+
type = typeMatch[1];
|
|
77
|
+
// Prompt may be on same line or separate
|
|
78
|
+
if (typeMatch[2].trim().startsWith('"')) {
|
|
79
|
+
const promptMatch = typeMatch[2].trim().match(/^"(.+?)"/);
|
|
80
|
+
if (promptMatch)
|
|
81
|
+
prompt = promptMatch[1];
|
|
82
|
+
}
|
|
83
|
+
i++;
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
// Prompt
|
|
87
|
+
const promptMatch = attrLine.match(PROMPT_RE);
|
|
88
|
+
if (promptMatch) {
|
|
89
|
+
prompt = promptMatch[1];
|
|
90
|
+
i++;
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
// Default
|
|
94
|
+
const defaultMatch = attrLine.match(DEFAULT_RE);
|
|
95
|
+
if (defaultMatch) {
|
|
96
|
+
defaultVal = defaultMatch[1].trim();
|
|
97
|
+
i++;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
// Depends on
|
|
101
|
+
const dependsMatch = attrLine.match(DEPENDS_RE);
|
|
102
|
+
if (dependsMatch) {
|
|
103
|
+
const deps = dependsMatch[1]
|
|
104
|
+
.split(/&&|\|\|/)
|
|
105
|
+
.map((d) => d.trim().replace(/^!/, ""))
|
|
106
|
+
.filter((d) => d.length > 0 && d !== "y" && d !== "n")
|
|
107
|
+
.map((d) => (d.startsWith("CONFIG_") ? d : `CONFIG_${d}`));
|
|
108
|
+
dependsOn.push(...deps);
|
|
109
|
+
i++;
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
// Range
|
|
113
|
+
const rangeMatch = attrLine.match(RANGE_RE);
|
|
114
|
+
if (rangeMatch) {
|
|
115
|
+
rangeMin = rangeMatch[1];
|
|
116
|
+
rangeMax = rangeMatch[2];
|
|
117
|
+
i++;
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
// Help start
|
|
121
|
+
if (HELP_RE.test(attrLine)) {
|
|
122
|
+
inHelp = true;
|
|
123
|
+
i++;
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
i++;
|
|
127
|
+
}
|
|
128
|
+
rows.push({
|
|
129
|
+
name,
|
|
130
|
+
type,
|
|
131
|
+
prompt,
|
|
132
|
+
default_val: defaultVal,
|
|
133
|
+
depends_on: dependsOn.length > 0 ? JSON.stringify(dependsOn) : null,
|
|
134
|
+
select_list: selects.length > 0 ? JSON.stringify(selects) : null,
|
|
135
|
+
range_min: rangeMin,
|
|
136
|
+
range_max: rangeMax,
|
|
137
|
+
help_text: helpLines.length > 0 ? helpLines.join("\n").trim() : null,
|
|
138
|
+
path: relPath,
|
|
139
|
+
});
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
i++;
|
|
143
|
+
}
|
|
144
|
+
return rows;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Parse all Kconfig files in a directory tree.
|
|
148
|
+
*/
|
|
149
|
+
export function parseKconfigTree(repoRoot) {
|
|
150
|
+
const allRows = [];
|
|
151
|
+
const visited = new Set();
|
|
152
|
+
function walkDir(dirPath) {
|
|
153
|
+
if (!existsSync(dirPath))
|
|
154
|
+
return;
|
|
155
|
+
const entries = readdirSync(dirPath, { withFileTypes: true });
|
|
156
|
+
for (const entry of entries) {
|
|
157
|
+
const fullPath = join(dirPath, entry.name);
|
|
158
|
+
const relPath = relative(repoRoot, fullPath);
|
|
159
|
+
// Avoid symlinks, hidden dirs, build directories
|
|
160
|
+
if (entry.name.startsWith("."))
|
|
161
|
+
continue;
|
|
162
|
+
if (entry.name === "build")
|
|
163
|
+
continue;
|
|
164
|
+
if (entry.name === "modules")
|
|
165
|
+
continue; // external modules
|
|
166
|
+
if (entry.isDirectory()) {
|
|
167
|
+
walkDir(fullPath);
|
|
168
|
+
}
|
|
169
|
+
else if (entry.isFile() && isKconfigFile(entry.name)) {
|
|
170
|
+
if (visited.has(relPath))
|
|
171
|
+
continue;
|
|
172
|
+
visited.add(relPath);
|
|
173
|
+
try {
|
|
174
|
+
const rows = parseKconfigFile(fullPath, repoRoot);
|
|
175
|
+
allRows.push(...rows);
|
|
176
|
+
}
|
|
177
|
+
catch (err) {
|
|
178
|
+
// Silently skip unparseable files
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
walkDir(repoRoot);
|
|
185
|
+
return allRows;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=kconfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kconfig.js","sourceRoot":"","sources":["../../src/parsers/kconfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-db.d.ts","sourceRoot":"","sources":["../src/test-db.ts"],"names":[],"mappings":""}
|
package/dist/test-db.js
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quick test for the SQLite database layer.
|
|
3
|
+
* Run: npx tsx src/test-db.ts
|
|
4
|
+
*/
|
|
5
|
+
import { ZephyrDatabase, getCacheDir } from "./db.js";
|
|
6
|
+
import { join } from "node:path";
|
|
7
|
+
import { unlinkSync, existsSync } from "node:fs";
|
|
8
|
+
const testPath = join(getCacheDir(), "test.db");
|
|
9
|
+
for (const f of [testPath, testPath + "-wal", testPath + "-shm"]) {
|
|
10
|
+
if (existsSync(f))
|
|
11
|
+
unlinkSync(f);
|
|
12
|
+
}
|
|
13
|
+
const db = new ZephyrDatabase(testPath);
|
|
14
|
+
db.initialize();
|
|
15
|
+
// Seed test data with all required fields
|
|
16
|
+
db.insertFunction({
|
|
17
|
+
name: "k_sem_take",
|
|
18
|
+
signature: "int k_sem_take(struct k_sem *sem, k_timeout_t timeout)",
|
|
19
|
+
brief: "Take a semaphore, pend if not available.",
|
|
20
|
+
description: "This routine takes sem, waiting if needed up to timeout units of time.",
|
|
21
|
+
params: JSON.stringify([
|
|
22
|
+
{ name: "sem", type: "struct k_sem *", description: "Semaphore object." },
|
|
23
|
+
{ name: "timeout", type: "k_timeout_t", description: "Timeout value." },
|
|
24
|
+
]),
|
|
25
|
+
return_type: "int",
|
|
26
|
+
return_desc: "0 on success, -EAGAIN on timeout, -EINVAL on bad args.",
|
|
27
|
+
header: "include/zephyr/kernel.h",
|
|
28
|
+
section: "Kernel / Semaphores",
|
|
29
|
+
group_id: "semaphore",
|
|
30
|
+
});
|
|
31
|
+
db.insertFunction({
|
|
32
|
+
name: "k_sem_give",
|
|
33
|
+
signature: "void k_sem_give(struct k_sem *sem)",
|
|
34
|
+
brief: "Give a semaphore.",
|
|
35
|
+
description: null,
|
|
36
|
+
params: JSON.stringify([
|
|
37
|
+
{ name: "sem", type: "struct k_sem *", description: "Semaphore object." },
|
|
38
|
+
]),
|
|
39
|
+
return_type: "void",
|
|
40
|
+
return_desc: null,
|
|
41
|
+
header: "include/zephyr/kernel.h",
|
|
42
|
+
section: "Kernel / Semaphores",
|
|
43
|
+
group_id: "semaphore",
|
|
44
|
+
});
|
|
45
|
+
db.insertKconfig({
|
|
46
|
+
name: "CONFIG_GPIO",
|
|
47
|
+
type: "bool",
|
|
48
|
+
prompt: "GPIO support",
|
|
49
|
+
default_val: null,
|
|
50
|
+
depends_on: JSON.stringify([]),
|
|
51
|
+
select_list: null,
|
|
52
|
+
range_min: null,
|
|
53
|
+
range_max: null,
|
|
54
|
+
help_text: null,
|
|
55
|
+
path: "drivers/gpio/Kconfig",
|
|
56
|
+
});
|
|
57
|
+
db.insertDtBinding({
|
|
58
|
+
compatible: "st,stm32-gpio",
|
|
59
|
+
description: "STM32 GPIO controller",
|
|
60
|
+
properties: JSON.stringify({
|
|
61
|
+
reg: { type: "array", required: true, description: "MMIO register range" },
|
|
62
|
+
clocks: { type: "phandle-array", required: true },
|
|
63
|
+
}),
|
|
64
|
+
child_binding: null,
|
|
65
|
+
bus: "gpio",
|
|
66
|
+
on_bus: null,
|
|
67
|
+
path: "dts/bindings/gpio/st,stm32-gpio.yaml",
|
|
68
|
+
});
|
|
69
|
+
db.insertDocChunk({
|
|
70
|
+
title: "Semaphores",
|
|
71
|
+
heading_path: "Kernel / Synchronization / Semaphores",
|
|
72
|
+
body: "Semaphores are a standard locking pattern. Use k_sem_init() to initialize, k_sem_take() to acquire, and k_sem_give() to release.",
|
|
73
|
+
source_url: "https://docs.zephyrproject.org/latest/kernel/services/synchronization/semaphores.html",
|
|
74
|
+
domain: "guide",
|
|
75
|
+
});
|
|
76
|
+
db.rebuildFts();
|
|
77
|
+
// Test queries
|
|
78
|
+
let passed = 0;
|
|
79
|
+
let failed = 0;
|
|
80
|
+
function check(desc, ok) {
|
|
81
|
+
if (ok) {
|
|
82
|
+
passed++;
|
|
83
|
+
console.log(` \u2713 ${desc}`);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
failed++;
|
|
87
|
+
console.log(` \u2717 ${desc}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const fn = db.getFunctionByName("k_sem_take");
|
|
91
|
+
check("getFunctionByName returns result", fn !== undefined);
|
|
92
|
+
check("correct name", fn?.name === "k_sem_take");
|
|
93
|
+
check("correct signature", fn?.signature === "int k_sem_take(struct k_sem *sem, k_timeout_t timeout)");
|
|
94
|
+
check("has params", fn?.params !== null && fn?.params !== undefined);
|
|
95
|
+
check("has header", fn?.header === "include/zephyr/kernel.h");
|
|
96
|
+
const results = db.searchFunctions("k_sem");
|
|
97
|
+
check("searchFunctions returns 2 results", results.length === 2);
|
|
98
|
+
const kres = db.searchKconfig("CONFIG_GPIO");
|
|
99
|
+
check("searchKconfig returns GPIO", kres.length >= 1 && kres[0]?.name === "CONFIG_GPIO");
|
|
100
|
+
const dres = db.searchBindings("stm32");
|
|
101
|
+
check("searchBindings returns stm32", dres.length >= 1 && dres[0]?.compatible === "st,stm32-gpio");
|
|
102
|
+
const docRes = db.searchDocs("semaphore");
|
|
103
|
+
check("searchDocs returns semaphore docs", docRes.length >= 1);
|
|
104
|
+
if (docRes.length > 0) {
|
|
105
|
+
check("doc result has correct title", docRes[0]?.title === "Semaphores");
|
|
106
|
+
}
|
|
107
|
+
// Meta
|
|
108
|
+
db.setMeta("version", "v4.1.0");
|
|
109
|
+
check("getMeta returns stored version", db.getMeta("version") === "v4.1.0");
|
|
110
|
+
db.close();
|
|
111
|
+
// Cleanup
|
|
112
|
+
for (const f of [testPath, testPath + "-wal", testPath + "-shm"]) {
|
|
113
|
+
if (existsSync(f))
|
|
114
|
+
unlinkSync(f);
|
|
115
|
+
}
|
|
116
|
+
console.log(`\n${passed}/${passed + failed} passed`);
|
|
117
|
+
if (failed > 0)
|
|
118
|
+
process.exit(1);
|
|
119
|
+
//# sourceMappingURL=test-db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-db.js","sourceRoot":"","sources":["../src/test-db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-doxygen.d.ts","sourceRoot":"","sources":["../src/test-doxygen.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test the Doxygen XML parser against the fixture file.
|
|
3
|
+
* Run: npx tsx src/test-doxygen.ts
|
|
4
|
+
*/
|
|
5
|
+
import { parseDoxygenFile } from "./parsers/doxygen.js";
|
|
6
|
+
import { join } from "node:path";
|
|
7
|
+
import { fileURLToPath } from "node:url";
|
|
8
|
+
import { dirname } from "node:path";
|
|
9
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
const fixturePath = join(__dirname, "..", "test", "fixtures", "doxygen-group-semaphore.xml");
|
|
11
|
+
let passed = 0;
|
|
12
|
+
let failed = 0;
|
|
13
|
+
function check(desc, ok) {
|
|
14
|
+
if (ok) {
|
|
15
|
+
passed++;
|
|
16
|
+
console.log(` \u2713 ${desc}`);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
failed++;
|
|
20
|
+
console.log(` \u2717 ${desc}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const result = parseDoxygenFile(fixturePath);
|
|
24
|
+
const fns = result.functions;
|
|
25
|
+
check("parsed functions", fns.length > 0);
|
|
26
|
+
check("found k_sem_init", fns.some((f) => f.name === "k_sem_init"));
|
|
27
|
+
check("found k_sem_take", fns.some((f) => f.name === "k_sem_take"));
|
|
28
|
+
check("found k_sem_give", fns.some((f) => f.name === "k_sem_give"));
|
|
29
|
+
const take = fns.find((f) => f.name === "k_sem_take");
|
|
30
|
+
check("k_sem_take has correct signature", take.signature === "int k_sem_take(struct k_sem *sem, k_timeout_t timeout)");
|
|
31
|
+
check("found k_sem_init", fns.some((f) => f.name === "k_sem_init") === true);
|
|
32
|
+
check("found k_sem_take", fns.some((f) => f.name === "k_sem_take") === true);
|
|
33
|
+
check("found k_sem_give", fns.some((f) => f.name === "k_sem_give") === true);
|
|
34
|
+
check("k_sem_take has header", take.header === "include/zephyr/kernel.h");
|
|
35
|
+
check("k_sem_take has group_id", take.group_id === "semaphore");
|
|
36
|
+
if (take.params) {
|
|
37
|
+
const params = JSON.parse(take.params);
|
|
38
|
+
check("k_sem_take has 2 params", params.length === 2);
|
|
39
|
+
check("first param is sem", params[0].name === "sem");
|
|
40
|
+
check("first param type", params[0].type === "struct k_sem *");
|
|
41
|
+
check("second param is timeout", params[1].name === "timeout");
|
|
42
|
+
check("second param type", params[1].type === "k_timeout_t");
|
|
43
|
+
}
|
|
44
|
+
check("k_sem_init has return_type int", fns.find((f) => f.name === "k_sem_init")?.return_type === "int");
|
|
45
|
+
check("k_sem_give has return_type void", fns.find((f) => f.name === "k_sem_give")?.return_type === "void");
|
|
46
|
+
console.log(`\n${passed}/${passed + failed} passed`);
|
|
47
|
+
if (failed > 0)
|
|
48
|
+
process.exit(1);
|
|
49
|
+
//# sourceMappingURL=test-doxygen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-doxygen.js","sourceRoot":"","sources":["../src/test-doxygen.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@aarav-j/zephyr-mcp-server",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP server for Zephyr RTOS documentation - API signatures, Kconfig symbols, and Devicetree bindings",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"zephyr-mcp": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist/"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"start": "node dist/index.js",
|
|
16
|
+
"dev": "tsc --watch",
|
|
17
|
+
"build-index": "node dist/scripts/build-index.js",
|
|
18
|
+
"lint": "tsc --noEmit"
|
|
19
|
+
},
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"@modelcontextprotocol/sdk": "^1.8.0",
|
|
22
|
+
"better-sqlite3": "^11.7.0",
|
|
23
|
+
"fast-xml-parser": "^5.0.0",
|
|
24
|
+
"js-yaml": "^4.1.0",
|
|
25
|
+
"node-fetch": "^3.3.2"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/better-sqlite3": "^7.6.12",
|
|
29
|
+
"@types/js-yaml": "^4.0.9",
|
|
30
|
+
"@types/node": "^22.13.0",
|
|
31
|
+
"typescript": "^5.7.0"
|
|
32
|
+
}
|
|
33
|
+
}
|