eveapps-core 1.0.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.
Files changed (160) hide show
  1. package/data/build_matrix.json +17 -0
  2. package/data/commands.json +8752 -0
  3. package/data/feature_graph.json +2446 -0
  4. package/data/registers.json +3312 -0
  5. package/data/samples.json +685 -0
  6. package/dist/context.d.ts +12 -0
  7. package/dist/context.js +33 -0
  8. package/dist/context.js.map +1 -0
  9. package/dist/data/build_matrix.json +17 -0
  10. package/dist/data/commands.json +8750 -0
  11. package/dist/data/data/build_matrix.json +17 -0
  12. package/dist/data/data/commands.json +8752 -0
  13. package/dist/data/data/feature_graph.json +2446 -0
  14. package/dist/data/data/registers.json +3312 -0
  15. package/dist/data/data/samples.json +685 -0
  16. package/dist/data/data/source_index.json +79 -0
  17. package/dist/data/feature_graph.json +2444 -0
  18. package/dist/data/registers.json +3312 -0
  19. package/dist/data/samples.json +685 -0
  20. package/dist/data/source_index.json +79 -0
  21. package/dist/index.d.ts +11 -0
  22. package/dist/index.js +12 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/lib/loadIndex.d.ts +14 -0
  25. package/dist/lib/loadIndex.js +27 -0
  26. package/dist/lib/loadIndex.js.map +1 -0
  27. package/dist/lib/normalize.d.ts +2 -0
  28. package/dist/lib/normalize.js +10 -0
  29. package/dist/lib/normalize.js.map +1 -0
  30. package/dist/lib/rank.d.ts +5 -0
  31. package/dist/lib/rank.js +38 -0
  32. package/dist/lib/rank.js.map +1 -0
  33. package/dist/lib/workspace.d.ts +4 -0
  34. package/dist/lib/workspace.js +5 -0
  35. package/dist/lib/workspace.js.map +1 -0
  36. package/dist/router/analyzeQuery.d.ts +9 -0
  37. package/dist/router/analyzeQuery.js +12 -0
  38. package/dist/router/analyzeQuery.js.map +1 -0
  39. package/dist/router/index.d.ts +5 -0
  40. package/dist/router/index.js +6 -0
  41. package/dist/router/index.js.map +1 -0
  42. package/dist/router/mergeResults.d.ts +2 -0
  43. package/dist/router/mergeResults.js +12 -0
  44. package/dist/router/mergeResults.js.map +1 -0
  45. package/dist/router/retrieveAnswer.d.ts +3 -0
  46. package/dist/router/retrieveAnswer.js +40 -0
  47. package/dist/router/retrieveAnswer.js.map +1 -0
  48. package/dist/router/routeQuery.d.ts +3 -0
  49. package/dist/router/routeQuery.js +33 -0
  50. package/dist/router/routeQuery.js.map +1 -0
  51. package/dist/router/types.d.ts +12 -0
  52. package/dist/router/types.js +2 -0
  53. package/dist/router/types.js.map +1 -0
  54. package/dist/search/searchCore.d.ts +3 -0
  55. package/dist/search/searchCore.js +64 -0
  56. package/dist/search/searchCore.js.map +1 -0
  57. package/dist/search/searchEveApps.d.ts +2 -0
  58. package/dist/search/searchEveApps.js +107 -0
  59. package/dist/search/searchEveApps.js.map +1 -0
  60. package/dist/search/searchSourceFiles.d.ts +6 -0
  61. package/dist/search/searchSourceFiles.js +49 -0
  62. package/dist/search/searchSourceFiles.js.map +1 -0
  63. package/dist/server.d.ts +1 -0
  64. package/dist/server.js +229 -0
  65. package/dist/server.js.map +1 -0
  66. package/dist/src/context.d.ts +12 -0
  67. package/dist/src/context.js +71 -0
  68. package/dist/src/context.js.map +1 -0
  69. package/dist/src/index.d.ts +10 -0
  70. package/dist/src/index.js +11 -0
  71. package/dist/src/index.js.map +1 -0
  72. package/dist/src/lib/loadIndex.d.ts +14 -0
  73. package/dist/src/lib/loadIndex.js +27 -0
  74. package/dist/src/lib/loadIndex.js.map +1 -0
  75. package/dist/src/lib/normalize.d.ts +2 -0
  76. package/dist/src/lib/normalize.js +10 -0
  77. package/dist/src/lib/normalize.js.map +1 -0
  78. package/dist/src/lib/rank.d.ts +5 -0
  79. package/dist/src/lib/rank.js +38 -0
  80. package/dist/src/lib/rank.js.map +1 -0
  81. package/dist/src/lib/workspace.d.ts +4 -0
  82. package/dist/src/lib/workspace.js +5 -0
  83. package/dist/src/lib/workspace.js.map +1 -0
  84. package/dist/src/router/analyzeQuery.d.ts +9 -0
  85. package/dist/src/router/analyzeQuery.js +12 -0
  86. package/dist/src/router/analyzeQuery.js.map +1 -0
  87. package/dist/src/router/index.d.ts +5 -0
  88. package/dist/src/router/index.js +6 -0
  89. package/dist/src/router/index.js.map +1 -0
  90. package/dist/src/router/mergeResults.d.ts +2 -0
  91. package/dist/src/router/mergeResults.js +12 -0
  92. package/dist/src/router/mergeResults.js.map +1 -0
  93. package/dist/src/router/retrieveAnswer.d.ts +3 -0
  94. package/dist/src/router/retrieveAnswer.js +64 -0
  95. package/dist/src/router/retrieveAnswer.js.map +1 -0
  96. package/dist/src/router/routeQuery.d.ts +3 -0
  97. package/dist/src/router/routeQuery.js +33 -0
  98. package/dist/src/router/routeQuery.js.map +1 -0
  99. package/dist/src/router/types.d.ts +12 -0
  100. package/dist/src/router/types.js +2 -0
  101. package/dist/src/router/types.js.map +1 -0
  102. package/dist/src/search/searchCore.d.ts +3 -0
  103. package/dist/src/search/searchCore.js +64 -0
  104. package/dist/src/search/searchCore.js.map +1 -0
  105. package/dist/src/search/searchEveApps.d.ts +2 -0
  106. package/dist/src/search/searchEveApps.js +107 -0
  107. package/dist/src/search/searchEveApps.js.map +1 -0
  108. package/dist/src/search/searchSourceFiles.d.ts +6 -0
  109. package/dist/src/search/searchSourceFiles.js +49 -0
  110. package/dist/src/search/searchSourceFiles.js.map +1 -0
  111. package/dist/src/server.d.ts +1 -0
  112. package/dist/src/server.js +214 -0
  113. package/dist/src/server.js.map +1 -0
  114. package/dist/src/tools/explainEveSymbol.d.ts +56 -0
  115. package/dist/src/tools/explainEveSymbol.js +54 -0
  116. package/dist/src/tools/explainEveSymbol.js.map +1 -0
  117. package/dist/src/tools/findRelevantSample.d.ts +34 -0
  118. package/dist/src/tools/findRelevantSample.js +33 -0
  119. package/dist/src/tools/findRelevantSample.js.map +1 -0
  120. package/dist/src/tools/generateBuildCommand.d.ts +34 -0
  121. package/dist/src/tools/generateBuildCommand.js +54 -0
  122. package/dist/src/tools/generateBuildCommand.js.map +1 -0
  123. package/dist/src/tools/generateScreenScaffold.d.ts +32 -0
  124. package/dist/src/tools/generateScreenScaffold.js +73 -0
  125. package/dist/src/tools/generateScreenScaffold.js.map +1 -0
  126. package/dist/src/tools/traceFeatureToCommands.d.ts +36 -0
  127. package/dist/src/tools/traceFeatureToCommands.js +84 -0
  128. package/dist/src/tools/traceFeatureToCommands.js.map +1 -0
  129. package/dist/src/tools/validateBt820Code.d.ts +28 -0
  130. package/dist/src/tools/validateBt820Code.js +45 -0
  131. package/dist/src/tools/validateBt820Code.js.map +1 -0
  132. package/dist/src/types.d.ts +44 -0
  133. package/dist/src/types.js +2 -0
  134. package/dist/src/types.js.map +1 -0
  135. package/dist/tools/explainEveSymbol.d.ts +56 -0
  136. package/dist/tools/explainEveSymbol.js +54 -0
  137. package/dist/tools/explainEveSymbol.js.map +1 -0
  138. package/dist/tools/findRelevantSample.d.ts +34 -0
  139. package/dist/tools/findRelevantSample.js +33 -0
  140. package/dist/tools/findRelevantSample.js.map +1 -0
  141. package/dist/tools/generateBuildCommand.d.ts +34 -0
  142. package/dist/tools/generateBuildCommand.js +54 -0
  143. package/dist/tools/generateBuildCommand.js.map +1 -0
  144. package/dist/tools/generateScreenScaffold.d.ts +32 -0
  145. package/dist/tools/generateScreenScaffold.js +73 -0
  146. package/dist/tools/generateScreenScaffold.js.map +1 -0
  147. package/dist/tools/readSourceFile.d.ts +15 -0
  148. package/dist/tools/readSourceFile.js +26 -0
  149. package/dist/tools/readSourceFile.js.map +1 -0
  150. package/dist/tools/traceFeatureToCommands.d.ts +36 -0
  151. package/dist/tools/traceFeatureToCommands.js +84 -0
  152. package/dist/tools/traceFeatureToCommands.js.map +1 -0
  153. package/dist/tools/validateBt820Code.d.ts +28 -0
  154. package/dist/tools/validateBt820Code.js +45 -0
  155. package/dist/tools/validateBt820Code.js.map +1 -0
  156. package/dist/tsconfig.tsbuildinfo +1 -0
  157. package/dist/types.d.ts +44 -0
  158. package/dist/types.js +2 -0
  159. package/dist/types.js.map +1 -0
  160. package/package.json +27 -0
@@ -0,0 +1,33 @@
1
+ export function routeQuery(query, analysis, coreScore, hasEveApps) {
2
+ // 1. Strong core match -> always use core
3
+ if (coreScore >= 0.75) {
4
+ return {
5
+ source: "core",
6
+ confidence: coreScore,
7
+ reason: "High confidence match in eveapps-core index"
8
+ };
9
+ }
10
+ // 2. Structured engineering queries -> try both
11
+ if (analysis.isBuild || analysis.isSymbol || analysis.isScreen) {
12
+ return {
13
+ source: hasEveApps ? "both" : "core",
14
+ confidence: 0.6,
15
+ reason: "Structured engineering query"
16
+ };
17
+ }
18
+ // 3. Debug or unknown -> prefer EveApps if available
19
+ if (analysis.isDebug || analysis.isSample) {
20
+ return {
21
+ source: hasEveApps ? "eveapps" : "core",
22
+ confidence: 0.4,
23
+ reason: "Debug/sample query fallback"
24
+ };
25
+ }
26
+ // 4. Default fallback
27
+ return {
28
+ source: hasEveApps ? "eveapps" : "core",
29
+ confidence: 0.2,
30
+ reason: "Default fallback routing"
31
+ };
32
+ }
33
+ //# sourceMappingURL=routeQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routeQuery.js","sourceRoot":"","sources":["../../../src/router/routeQuery.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,UAAU,CACtB,KAAa,EACb,QAAuB,EACvB,SAAiB,EACjB,UAAmB;IAGnB,0CAA0C;IAC1C,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO;YACH,MAAM,EAAE,MAAM;YACd,UAAU,EAAE,SAAS;YACrB,MAAM,EAAE,6CAA6C;SACxD,CAAC;IACN,CAAC;IAED,gDAAgD;IAChD,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC7D,OAAO;YACH,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YACpC,UAAU,EAAE,GAAG;YACf,MAAM,EAAE,8BAA8B;SACzC,CAAC;IACN,CAAC;IAED,qDAAqD;IACrD,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACxC,OAAO;YACH,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;YACvC,UAAU,EAAE,GAAG;YACf,MAAM,EAAE,6BAA6B;SACxC,CAAC;IACN,CAAC;IAED,sBAAsB;IACtB,OAAO;QACH,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;QACvC,UAAU,EAAE,GAAG;QACf,MAAM,EAAE,0BAA0B;KACrC,CAAC;AACN,CAAC"}
@@ -0,0 +1,12 @@
1
+ export type RetrievalSource = "core" | "eveapps" | "both";
2
+ export interface RouteDecision {
3
+ source: RetrievalSource;
4
+ confidence: number;
5
+ reason: string;
6
+ }
7
+ export interface RetrievalResult {
8
+ answer: any;
9
+ confidence: number;
10
+ source: RetrievalSource;
11
+ references?: string[];
12
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/router/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { WorkspaceContext } from "../context.js";
2
+ import type { RetrievalResult } from "../router/types.js";
3
+ export declare function searchCore(context: WorkspaceContext, query: string): RetrievalResult;
@@ -0,0 +1,64 @@
1
+ import { loadCommands, loadRegisters } from "../lib/loadIndex.js";
2
+ export function searchCore(context, query) {
3
+ try {
4
+ const commands = loadCommands();
5
+ const registers = loadRegisters();
6
+ const queryLower = query.toLowerCase();
7
+ // Try to find exact command/register matches
8
+ const matchedCommands = commands.filter(c => c.name.toLowerCase().includes(queryLower) ||
9
+ c.summary?.toLowerCase().includes(queryLower)).slice(0, 5);
10
+ const matchedRegisters = registers.filter(r => r.name.toLowerCase().includes(queryLower) ||
11
+ r.summary?.toLowerCase().includes(queryLower)).slice(0, 5);
12
+ const hasMatches = matchedCommands.length > 0 || matchedRegisters.length > 0;
13
+ if (!hasMatches) {
14
+ return {
15
+ answer: {
16
+ message: `No BT820/EVE core references found for: "${query}"`,
17
+ tip: "Try searching for specific command names, register names, or features"
18
+ },
19
+ confidence: 0,
20
+ source: "core",
21
+ references: []
22
+ };
23
+ }
24
+ const references = [];
25
+ if (matchedCommands.length > 0) {
26
+ references.push(`Commands: ${matchedCommands.map(c => c.name).join(", ")}`);
27
+ }
28
+ if (matchedRegisters.length > 0) {
29
+ references.push(`Registers: ${matchedRegisters.map(r => r.name).join(", ")}`);
30
+ }
31
+ return {
32
+ answer: {
33
+ message: `Found ${matchedCommands.length} commands and ${matchedRegisters.length} registers for: "${query}"`,
34
+ commands: matchedCommands.map(c => ({
35
+ name: c.name,
36
+ type: "command",
37
+ signature: c.signature,
38
+ summary: c.summary,
39
+ related_samples: c.related_samples || [],
40
+ })),
41
+ registers: matchedRegisters.map(r => ({
42
+ name: r.name,
43
+ type: r.kind,
44
+ value: r.value,
45
+ summary: r.summary,
46
+ }))
47
+ },
48
+ confidence: hasMatches ? 0.7 : 0,
49
+ source: "core",
50
+ references
51
+ };
52
+ }
53
+ catch (err) {
54
+ return {
55
+ answer: {
56
+ error: `Error searching core data: ${err instanceof Error ? err.message : String(err)}`
57
+ },
58
+ confidence: 0,
59
+ source: "core",
60
+ references: []
61
+ };
62
+ }
63
+ }
64
+ //# sourceMappingURL=searchCore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchCore.js","sourceRoot":"","sources":["../../../src/search/searchCore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { RetrievalResult } from "../router/types.js";
2
+ export declare function searchEveApps(eveappsRoot: string, query: string): Promise<RetrievalResult>;
@@ -0,0 +1,107 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import { loadSamples } from "../lib/loadIndex.js";
4
+ import { loadFeatureGraph } from "../lib/loadIndex.js";
5
+ import { rankSamples } from "../lib/rank.js";
6
+ import { searchSourceFiles } from "./searchSourceFiles.js";
7
+ export async function searchEveApps(eveappsRoot, query) {
8
+ try {
9
+ // ------------------------------------
10
+ // 1. Metadata search
11
+ // ------------------------------------
12
+ const samples = loadSamples();
13
+ const featureGraph = loadFeatureGraph();
14
+ const ranked = rankSamples(query, samples, featureGraph)
15
+ .slice(0, 5)
16
+ .map(({ sample, score }) => {
17
+ const samplePath = path.join(eveappsRoot, sample.path);
18
+ return {
19
+ sample_id: sample.id,
20
+ name: sample.name,
21
+ path: sample.path,
22
+ full_path: samplePath,
23
+ exists: fs.existsSync(samplePath),
24
+ score,
25
+ summary: sample.summary,
26
+ commands_used: (sample.commands_used || []).slice(0, 10),
27
+ categories: sample.categories || [],
28
+ platform_notes: sample.platform_notes || []
29
+ };
30
+ });
31
+ // ------------------------------------
32
+ // 2. REAL source search
33
+ // ------------------------------------
34
+ const sourceMatches = searchSourceFiles(eveappsRoot, query);
35
+ // ------------------------------------
36
+ // 3. Combined confidence
37
+ // ------------------------------------
38
+ const metadataConfidence = ranked[0]?.score ?? 0;
39
+ const sourceConfidence = sourceMatches.length > 0 ? 0.8 : 0;
40
+ const confidence = Math.max(metadataConfidence, sourceConfidence);
41
+ // ------------------------------------
42
+ // 4. Nothing found
43
+ // ------------------------------------
44
+ if (ranked.length === 0 &&
45
+ sourceMatches.length === 0) {
46
+ return {
47
+ answer: {
48
+ message: `No relevant EveApps results found for: "${query}"`,
49
+ suggestions: [
50
+ "Try searching for exact BT820 command names",
51
+ "Search for widget or sample names",
52
+ "Search for API symbols"
53
+ ]
54
+ },
55
+ confidence: 0.1,
56
+ source: "eveapps",
57
+ references: []
58
+ };
59
+ }
60
+ // ------------------------------------
61
+ // 5. Build references
62
+ // ------------------------------------
63
+ const references = [
64
+ ...ranked.map(r => `${r.name} (${r.path})`),
65
+ ...sourceMatches.map(r => r.relativePath)
66
+ ];
67
+ // ------------------------------------
68
+ // 6. Final merged result
69
+ // ------------------------------------
70
+ return {
71
+ answer: {
72
+ message: `Found EveApps results for: "${query}"`,
73
+ metadata_matches: ranked,
74
+ source_matches: sourceMatches.map(match => ({
75
+ file: match.relativePath,
76
+ matched_lines: match.matchedLines
77
+ })),
78
+ next_steps: [
79
+ ranked[0]
80
+ ? `Review sample: ${ranked[0].path}`
81
+ : undefined,
82
+ sourceMatches[0]
83
+ ? `Inspect source file: ${sourceMatches[0].relativePath}`
84
+ : undefined
85
+ ].filter(Boolean)
86
+ },
87
+ confidence,
88
+ source: "eveapps",
89
+ references
90
+ };
91
+ }
92
+ catch (err) {
93
+ return {
94
+ answer: {
95
+ error: `Error searching EveApps: ${err instanceof Error
96
+ ? err.message
97
+ : String(err)}`,
98
+ eveappsRoot,
99
+ tip: "Ensure --eveapps points to the EveApps repository root"
100
+ },
101
+ confidence: 0,
102
+ source: "eveapps",
103
+ references: []
104
+ };
105
+ }
106
+ }
107
+ //# sourceMappingURL=searchEveApps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchEveApps.js","sourceRoot":"","sources":["../../../src/search/searchEveApps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface SourceFileMatch {
2
+ file: string;
3
+ relativePath: string;
4
+ matchedLines: string[];
5
+ }
6
+ export declare function searchSourceFiles(eveappsRoot: string, query: string): SourceFileMatch[];
@@ -0,0 +1,49 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ const SOURCE_EXTENSIONS = [
4
+ ".c",
5
+ ".h",
6
+ ".txt",
7
+ ".md"
8
+ ];
9
+ function collectFiles(dir, out = []) {
10
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
11
+ for (const entry of entries) {
12
+ const fullPath = path.join(dir, entry.name);
13
+ if (entry.isDirectory()) {
14
+ collectFiles(fullPath, out);
15
+ continue;
16
+ }
17
+ const ext = path.extname(entry.name).toLowerCase();
18
+ if (SOURCE_EXTENSIONS.includes(ext)) {
19
+ out.push(fullPath);
20
+ }
21
+ }
22
+ return out;
23
+ }
24
+ export function searchSourceFiles(eveappsRoot, query) {
25
+ const files = collectFiles(eveappsRoot);
26
+ const q = query.toLowerCase();
27
+ const results = [];
28
+ for (const file of files) {
29
+ try {
30
+ const text = fs.readFileSync(file, "utf-8");
31
+ const lines = text.split(/\r?\n/);
32
+ const matchedLines = lines
33
+ .filter(line => line.toLowerCase().includes(q))
34
+ .slice(0, 5);
35
+ if (matchedLines.length > 0) {
36
+ results.push({
37
+ file,
38
+ relativePath: path.relative(eveappsRoot, file),
39
+ matchedLines
40
+ });
41
+ }
42
+ }
43
+ catch {
44
+ // ignore unreadable files
45
+ }
46
+ }
47
+ return results.slice(0, 10);
48
+ }
49
+ //# sourceMappingURL=searchSourceFiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchSourceFiles.js","sourceRoot":"","sources":["../../../src/search/searchSourceFiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAQxB,MAAM,iBAAiB,GAAG;IACtB,IAAI;IACJ,IAAI;IACJ,MAAM;IACN,KAAK;CACR,CAAC;AAEF,SAAS,YAAY,CAAC,GAAW,EAAE,MAAgB,EAAE;IACjD,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACtB,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC5B,SAAS;QACb,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAEnD,IAAI,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC7B,WAAmB,EACnB,KAAa;IAGb,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAE9B,MAAM,OAAO,GAAsB,EAAE,CAAC;IAEtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAEvB,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAE5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAElC,MAAM,YAAY,GAAG,KAAK;iBACrB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;iBAC9C,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAEjB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,IAAI,CAAC;oBACT,IAAI;oBACJ,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;oBAC9C,YAAY;iBACf,CAAC,CAAC;YACP,CAAC;QAEL,CAAC;QAAC,MAAM,CAAC;YACL,0BAA0B;QAC9B,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,214 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { findRelevantSample, findRelevantSampleInput, } from "./tools/findRelevantSample.js";
4
+ import { explainEveSymbol, explainEveSymbolInput, } from "./tools/explainEveSymbol.js";
5
+ import { generateBuildCommand, generateBuildCommandInput, } from "./tools/generateBuildCommand.js";
6
+ import { traceFeatureToCommands, traceFeatureToCommandsInput, } from "./tools/traceFeatureToCommands.js";
7
+ import { generateScreenScaffold, generateScreenScaffoldInput, } from "./tools/generateScreenScaffold.js";
8
+ import { validateBt820Code, validateBt820CodeInput, } from "./tools/validateBt820Code.js";
9
+ import { loadBuildMatrix, loadCommands, loadSamples, loadRegisters } from "./lib/loadIndex.js";
10
+ const server = new McpServer({
11
+ name: "bt820-mcp-server",
12
+ version: "0.1.0",
13
+ });
14
+ server.registerTool("find_relevant_sample", {
15
+ title: "Find Relevant BT820 Sample",
16
+ description: "Find the most relevant sample in the BT820 repository for a user request.",
17
+ inputSchema: findRelevantSampleInput.shape,
18
+ }, async (args) => ({
19
+ content: [
20
+ {
21
+ type: "text",
22
+ text: JSON.stringify(findRelevantSample(args), null, 2),
23
+ },
24
+ ],
25
+ }));
26
+ server.registerTool("explain_eve_symbol", {
27
+ title: "Explain EVE Symbol",
28
+ description: "Explain a BT820/EVE command symbol from the indexed repository data.",
29
+ inputSchema: explainEveSymbolInput.shape,
30
+ }, async (args) => ({
31
+ content: [
32
+ {
33
+ type: "text",
34
+ text: JSON.stringify(explainEveSymbol(args), null, 2),
35
+ },
36
+ ],
37
+ }));
38
+ server.registerTool("generate_build_command", {
39
+ title: "Generate Build Command",
40
+ description: "Generate a valid build command from platform/graphics/display/SPI selections.",
41
+ inputSchema: generateBuildCommandInput.shape,
42
+ }, async (args) => ({
43
+ content: [
44
+ {
45
+ type: "text",
46
+ text: JSON.stringify(generateBuildCommand(args), null, 2),
47
+ },
48
+ ],
49
+ }));
50
+ server.registerTool("trace_feature_to_commands", {
51
+ title: "Trace Feature to Commands",
52
+ description: "Map a requested BT820 feature to related commands and samples.",
53
+ inputSchema: traceFeatureToCommandsInput.shape,
54
+ }, async (args) => ({
55
+ content: [
56
+ {
57
+ type: "text",
58
+ text: JSON.stringify(traceFeatureToCommands(args), null, 2),
59
+ },
60
+ ],
61
+ }));
62
+ server.registerTool("generate_screen_scaffold", {
63
+ title: "Generate Screen Scaffold",
64
+ description: `
65
+ Generate COMPLETE production-ready BT820 screen scaffold.
66
+
67
+ IMPORTANT:
68
+ - Preserve ALL initialization flow
69
+ - Preserve patch loading
70
+ - Preserve calibration flow
71
+ - Preserve display configuration
72
+ - Preserve cleanup/release flow
73
+ - Do NOT simplify or omit hardware initialization code
74
+
75
+ The generated scaffold should be treated as authoritative source code,
76
+ NOT as a partial example.
77
+ `,
78
+ inputSchema: generateScreenScaffoldInput.shape,
79
+ }, async (args) => {
80
+ const scaffold = generateScreenScaffold(args);
81
+ if (!scaffold.files?.length) {
82
+ throw new Error("No scaffold files generated");
83
+ }
84
+ const files = scaffold.files;
85
+ const file = files[0];
86
+ const artifact = {
87
+ artifactType: "source_file",
88
+ scaffoldType: "full_screen_template",
89
+ language: "c",
90
+ path: file.path,
91
+ authoritative: true,
92
+ preserveRuntimeInit: true,
93
+ preservePatchLoading: true,
94
+ preserveCalibration: true,
95
+ preserveDisplayConfig: true,
96
+ notes: scaffold.notes,
97
+ content: file.content,
98
+ };
99
+ return {
100
+ structuredContent: artifact,
101
+ content: [
102
+ {
103
+ type: "text",
104
+ text: `AUTHORITATIVE GENERATED FILE
105
+
106
+ Path: ${file.path}
107
+
108
+ IMPORTANT:
109
+ Use this code EXACTLY as generated.
110
+
111
+ DO NOT remove:
112
+ - Gpu_Init
113
+ - Display_Config
114
+ - EVE_Load_Patch
115
+ - EVE_Calibrate
116
+ - Calibration_Save
117
+ - cleanup/release flow
118
+
119
+ This initialization sequence is REQUIRED for BT820 hardware bring-up.
120
+ `,
121
+ },
122
+ {
123
+ type: "text",
124
+ text: file.content,
125
+ },
126
+ {
127
+ type: "text",
128
+ text: JSON.stringify({
129
+ artifactType: artifact.artifactType,
130
+ scaffoldType: artifact.scaffoldType,
131
+ path: artifact.path,
132
+ authoritative: artifact.authoritative,
133
+ preserveRuntimeInit: artifact.preserveRuntimeInit,
134
+ }, null, 2),
135
+ },
136
+ ],
137
+ };
138
+ });
139
+ server.registerTool("validate_bt820_code", {
140
+ title: "Validate BT820 Code",
141
+ description: "Check BT820/EVE code for common structural issues.",
142
+ inputSchema: validateBt820CodeInput.shape,
143
+ }, async (args) => ({
144
+ content: [
145
+ {
146
+ type: "text",
147
+ text: JSON.stringify(validateBt820Code(args), null, 2),
148
+ },
149
+ ],
150
+ }));
151
+ server.registerResource("bt820_commands", "bt820://api/commands", {
152
+ title: "BT820 Commands Index",
153
+ description: "Indexed BT820/EVE command list",
154
+ mimeType: "application/json",
155
+ }, async () => ({
156
+ contents: [
157
+ {
158
+ uri: "bt820://api/commands",
159
+ mimeType: "application/json",
160
+ text: JSON.stringify(loadCommands(), null, 2),
161
+ },
162
+ ],
163
+ }));
164
+ server.registerResource("bt820_registers", "bt820://api/registers", {
165
+ title: "BT820 Registers Index",
166
+ description: "Indexed BT820/EVE register and constant list",
167
+ mimeType: "application/json",
168
+ }, async () => ({
169
+ contents: [
170
+ {
171
+ uri: "bt820://api/registers",
172
+ mimeType: "application/json",
173
+ text: JSON.stringify(loadRegisters(), null, 2),
174
+ },
175
+ ],
176
+ }));
177
+ server.registerResource("bt820_samples", "bt820://samples", {
178
+ title: "BT820 Samples Index",
179
+ description: "Indexed BT820 sample list",
180
+ mimeType: "application/json",
181
+ }, async () => ({
182
+ contents: [
183
+ {
184
+ uri: "bt820://samples",
185
+ mimeType: "application/json",
186
+ text: JSON.stringify(loadSamples(), null, 2),
187
+ },
188
+ ],
189
+ }));
190
+ server.registerResource("bt820_build_matrix", "bt820://build/matrix", {
191
+ title: "BT820 Build Matrix",
192
+ description: "Allowed build combinations",
193
+ mimeType: "application/json",
194
+ }, async () => ({
195
+ contents: [
196
+ {
197
+ uri: "bt820://build/matrix",
198
+ mimeType: "application/json",
199
+ text: JSON.stringify(loadBuildMatrix(), null, 2),
200
+ },
201
+ ],
202
+ }));
203
+ async function main() {
204
+ console.error("BT820 MCP SERVER STARTED");
205
+ console.error("argv:", process.argv);
206
+ const transport = new StdioServerTransport();
207
+ await server.connect(transport);
208
+ console.error("MCP SERVER CONNECTED");
209
+ }
210
+ main().catch((err) => {
211
+ console.error("BT820 MCP server failed:", err);
212
+ process.exit(1);
213
+ });
214
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EACH,kBAAkB,EAClB,uBAAuB,GAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACH,gBAAgB,EAChB,qBAAqB,GACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACH,oBAAoB,EACpB,yBAAyB,GAC5B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACH,sBAAsB,EACtB,2BAA2B,GAC9B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACH,sBAAsB,EACtB,2BAA2B,GAC9B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACH,iBAAiB,EACjB,sBAAsB,GACzB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE/F,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IACzB,IAAI,EAAE,kBAAkB;IACxB,OAAO,EAAE,OAAO;CACnB,CAAC,CAAC;AAEH,MAAM,CAAC,YAAY,CACf,sBAAsB,EACtB;IACI,KAAK,EAAE,4BAA4B;IACnC,WAAW,EAAE,2EAA2E;IACxF,WAAW,EAAE,uBAAuB,CAAC,KAAK;CAC7C,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACb,OAAO,EAAE;QACL;YACI,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SAC1D;KACJ;CACJ,CAAC,CACL,CAAC;AAEF,MAAM,CAAC,YAAY,CACf,oBAAoB,EACpB;IACI,KAAK,EAAE,oBAAoB;IAC3B,WAAW,EAAE,sEAAsE;IACnF,WAAW,EAAE,qBAAqB,CAAC,KAAK;CAC3C,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACb,OAAO,EAAE;QACL;YACI,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SACxD;KACJ;CACJ,CAAC,CACL,CAAC;AAEF,MAAM,CAAC,YAAY,CACf,wBAAwB,EACxB;IACI,KAAK,EAAE,wBAAwB;IAC/B,WAAW,EAAE,+EAA+E;IAC5F,WAAW,EAAE,yBAAyB,CAAC,KAAK;CAC/C,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACb,OAAO,EAAE;QACL;YACI,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SAC5D;KACJ;CACJ,CAAC,CACL,CAAC;AAEF,MAAM,CAAC,YAAY,CACf,2BAA2B,EAC3B;IACI,KAAK,EAAE,2BAA2B;IAClC,WAAW,EAAE,gEAAgE;IAC7E,WAAW,EAAE,2BAA2B,CAAC,KAAK;CACjD,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACb,OAAO,EAAE;QACL;YACI,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SAC9D;KACJ;CACJ,CAAC,CACL,CAAC;AAEF,MAAM,CAAC,YAAY,CACf,0BAA0B,EAC1B;IACI,KAAK,EAAE,0BAA0B;IACjC,WAAW,EAAE;;;;;;;;;;;;;CAapB;IACO,WAAW,EAAE,2BAA2B,CAAC,KAAK;CACjD,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACX,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAE9C,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IAEvB,MAAM,QAAQ,GAAG;QACb,YAAY,EAAE,aAAa;QAC3B,YAAY,EAAE,sBAAsB;QAEpC,QAAQ,EAAE,GAAG;QACb,IAAI,EAAE,IAAI,CAAC,IAAI;QAEf,aAAa,EAAE,IAAI;QAEnB,mBAAmB,EAAE,IAAI;QACzB,oBAAoB,EAAE,IAAI;QAC1B,mBAAmB,EAAE,IAAI;QACzB,qBAAqB,EAAE,IAAI;QAE3B,KAAK,EAAE,QAAQ,CAAC,KAAK;QAErB,OAAO,EAAE,IAAI,CAAC,OAAO;KACxB,CAAC;IAEF,OAAO;QACH,iBAAiB,EAAE,QAAQ;QAE3B,OAAO,EAAE;YACL;gBACI,IAAI,EAAE,MAAM;gBACZ,IAAI,EACxB;;QAEQ,IAAI,CAAC,IAAI;;;;;;;;;;;;;;CAchB;aACgB;YACD;gBACI,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,OAAO;aACrB;YACD;gBACI,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAChB;oBACI,YAAY,EAAE,QAAQ,CAAC,YAAY;oBACnC,YAAY,EAAE,QAAQ,CAAC,YAAY;oBACnC,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,aAAa,EAAE,QAAQ,CAAC,aAAa;oBACrC,mBAAmB,EACf,QAAQ,CAAC,mBAAmB;iBACnC,EACD,IAAI,EACJ,CAAC,CACJ;aACJ;SACJ;KACJ,CAAC;AACN,CAAC,CACJ,CAAC;AAEF,MAAM,CAAC,YAAY,CACf,qBAAqB,EACrB;IACI,KAAK,EAAE,qBAAqB;IAC5B,WAAW,EAAE,oDAAoD;IACjE,WAAW,EAAE,sBAAsB,CAAC,KAAK;CAC5C,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACb,OAAO,EAAE;QACL;YACI,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SACzD;KACJ;CACJ,CAAC,CACL,CAAC;AAEF,MAAM,CAAC,gBAAgB,CACnB,gBAAgB,EAChB,sBAAsB,EACtB;IACI,KAAK,EAAE,sBAAsB;IAC7B,WAAW,EAAE,gCAAgC;IAC7C,QAAQ,EAAE,kBAAkB;CAC/B,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE;QACN;YACI,GAAG,EAAE,sBAAsB;YAC3B,QAAQ,EAAE,kBAAkB;YAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;SAChD;KACJ;CACJ,CAAC,CACL,CAAC;AAEF,MAAM,CAAC,gBAAgB,CACnB,iBAAiB,EACjB,uBAAuB,EACvB;IACI,KAAK,EAAE,uBAAuB;IAC9B,WAAW,EAAE,8CAA8C;IAC3D,QAAQ,EAAE,kBAAkB;CAC/B,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE;QACN;YACI,GAAG,EAAE,uBAAuB;YAC5B,QAAQ,EAAE,kBAAkB;YAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;SACjD;KACJ;CACJ,CAAC,CACL,CAAC;AAEF,MAAM,CAAC,gBAAgB,CACnB,eAAe,EACf,iBAAiB,EACjB;IACI,KAAK,EAAE,qBAAqB;IAC5B,WAAW,EAAE,2BAA2B;IACxC,QAAQ,EAAE,kBAAkB;CAC/B,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE;QACN;YACI,GAAG,EAAE,iBAAiB;YACtB,QAAQ,EAAE,kBAAkB;YAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;SAC/C;KACJ;CACJ,CAAC,CACL,CAAC;AAEF,MAAM,CAAC,gBAAgB,CACnB,oBAAoB,EACpB,sBAAsB,EACtB;IACI,KAAK,EAAE,oBAAoB;IAC3B,WAAW,EAAE,4BAA4B;IACzC,QAAQ,EAAE,kBAAkB;CAC/B,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE;QACN;YACI,GAAG,EAAE,sBAAsB;YAC3B,QAAQ,EAAE,kBAAkB;YAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;SACnD;KACJ;CACJ,CAAC,CACL,CAAC;AAEF,KAAK,UAAU,IAAI;IACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC1C,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC1C,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { z } from "zod";
2
+ export declare const explainEveSymbolInput: z.ZodObject<{
3
+ symbol: z.ZodString;
4
+ }, "strip", z.ZodTypeAny, {
5
+ symbol: string;
6
+ }, {
7
+ symbol: string;
8
+ }>;
9
+ export type ExplainEveSymbolInput = z.infer<typeof explainEveSymbolInput>;
10
+ export declare function explainEveSymbol(args: ExplainEveSymbolInput): {
11
+ found: boolean;
12
+ symbol: string;
13
+ type: string;
14
+ signature: string;
15
+ summary: string;
16
+ parameters: {
17
+ name: string;
18
+ type: string;
19
+ desc: string;
20
+ }[];
21
+ related_samples: string[];
22
+ related_features: string[];
23
+ source_file: string;
24
+ usage_notes: string[];
25
+ common_mistakes: string[];
26
+ value?: undefined;
27
+ message?: undefined;
28
+ } | {
29
+ found: boolean;
30
+ symbol: string;
31
+ type: string;
32
+ value: string;
33
+ summary: string;
34
+ related_features: string[];
35
+ source_file: string;
36
+ usage_notes: string[];
37
+ signature?: undefined;
38
+ parameters?: undefined;
39
+ related_samples?: undefined;
40
+ common_mistakes?: undefined;
41
+ message?: undefined;
42
+ } | {
43
+ found: boolean;
44
+ symbol: string;
45
+ message: string;
46
+ type?: undefined;
47
+ signature?: undefined;
48
+ summary?: undefined;
49
+ parameters?: undefined;
50
+ related_samples?: undefined;
51
+ related_features?: undefined;
52
+ source_file?: undefined;
53
+ usage_notes?: undefined;
54
+ common_mistakes?: undefined;
55
+ value?: undefined;
56
+ };
@@ -0,0 +1,54 @@
1
+ import { z } from "zod";
2
+ import { loadCommands, loadRegisters } from "../lib/loadIndex.js";
3
+ export const explainEveSymbolInput = z.object({
4
+ symbol: z.string().min(2),
5
+ });
6
+ export function explainEveSymbol(args) {
7
+ const commands = loadCommands();
8
+ const registers = loadRegisters();
9
+ const symbol = args.symbol.trim();
10
+ const commandItem = commands.find((c) => c.name.toLowerCase() == symbol.toLowerCase());
11
+ if (commandItem) {
12
+ return {
13
+ found: true,
14
+ symbol: commandItem.name,
15
+ type: "command",
16
+ signature: commandItem.signature,
17
+ summary: commandItem.summary,
18
+ parameters: commandItem.params ?? [],
19
+ related_samples: commandItem.related_samples ?? [],
20
+ related_features: commandItem.related_features ?? [],
21
+ source_file: commandItem.source_file,
22
+ usage_notes: [
23
+ "Prefer verifying usage against the closest sample in the repository.",
24
+ "Check command ordering and display-list flow in surrounding code.",
25
+ ],
26
+ common_mistakes: [
27
+ "Passing invalid coordinates or flags.",
28
+ "Using the command outside the expected rendering flow.",
29
+ ],
30
+ };
31
+ }
32
+ const registerItem = registers.find((r) => r.name.toLowerCase() === symbol.toLowerCase());
33
+ if (registerItem) {
34
+ return {
35
+ found: true,
36
+ symbol: registerItem.name,
37
+ type: registerItem.kind,
38
+ value: registerItem.value,
39
+ summary: registerItem.summary,
40
+ related_features: registerItem.related_features ?? [],
41
+ source_file: registerItem.source_file,
42
+ usage_notes: [
43
+ "Verify the exact semantics in the programming guide/datasheet.",
44
+ "Check whether this symbol is read-only, write-only, or bitfield-based.",
45
+ ],
46
+ };
47
+ }
48
+ return {
49
+ found: false,
50
+ symbol,
51
+ message: `No exact symbol match found for ${symbol}.`,
52
+ };
53
+ }
54
+ //# sourceMappingURL=explainEveSymbol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainEveSymbol.js","sourceRoot":"","sources":["../../../src/tools/explainEveSymbol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAElE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC5B,CAAC,CAAC;AAIH,MAAM,UAAU,gBAAgB,CAAC,IAA2B;IACxD,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAElC,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,WAAW,EAAE,CACtD,CAAC;IAEF,IAAI,WAAW,EAAE,CAAC;QACd,OAAO;YACH,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,WAAW,CAAC,IAAI;YACxB,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B,UAAU,EAAE,WAAW,CAAC,MAAM,IAAI,EAAE;YACpC,eAAe,EAAE,WAAW,CAAC,eAAe,IAAI,EAAE;YAClD,gBAAgB,EAAE,WAAW,CAAC,gBAAgB,IAAI,EAAE;YACpD,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,WAAW,EAAE;gBACT,sEAAsE;gBACtE,mEAAmE;aACtE;YACD,eAAe,EAAE;gBACb,uCAAuC;gBACvC,wDAAwD;aAC3D;SACJ,CAAC;IACN,CAAC;IAED,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,WAAW,EAAE,CACvD,CAAC;IAEF,IAAI,YAAY,EAAE,CAAC;QACf,OAAO;YACH,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,YAAY,CAAC,IAAI;YACzB,IAAI,EAAE,YAAY,CAAC,IAAI;YACvB,KAAK,EAAE,YAAY,CAAC,KAAK;YACzB,OAAO,EAAE,YAAY,CAAC,OAAO;YAC7B,gBAAgB,EAAE,YAAY,CAAC,gBAAgB,IAAI,EAAE;YACrD,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,WAAW,EAAE;gBACT,gEAAgE;gBAChE,wEAAwE;aAC3E;SACJ,CAAC;IACN,CAAC;IAED,OAAO;QACH,KAAK,EAAE,KAAK;QACZ,MAAM;QACN,OAAO,EAAE,mCAAmC,MAAM,GAAG;KACxD,CAAC;AACN,CAAC"}