@bridgetek/eveapps-pre82x-core 1.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 +138 -0
- package/data/build_matrix.json +226 -0
- package/data/commands.json +10755 -0
- package/data/feature_graph.json +4979 -0
- package/data/graphics.json +169 -0
- package/data/modules.json +331 -0
- package/data/registers.json +5163 -0
- package/data/samples.json +765 -0
- package/dist/context.d.ts +7 -0
- package/dist/context.js +32 -0
- package/dist/context.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/confidence.d.ts +6 -0
- package/dist/lib/confidence.js +18 -0
- package/dist/lib/confidence.js.map +1 -0
- package/dist/lib/eveSymbolAliases.d.ts +10 -0
- package/dist/lib/eveSymbolAliases.js +58 -0
- package/dist/lib/eveSymbolAliases.js.map +1 -0
- package/dist/lib/loadIndex.d.ts +26 -0
- package/dist/lib/loadIndex.js +33 -0
- package/dist/lib/loadIndex.js.map +1 -0
- package/dist/lib/moduleGraphicsLookup.d.ts +18 -0
- package/dist/lib/moduleGraphicsLookup.js +66 -0
- package/dist/lib/moduleGraphicsLookup.js.map +1 -0
- package/dist/lib/normalize.d.ts +3 -0
- package/dist/lib/normalize.js +21 -0
- package/dist/lib/normalize.js.map +1 -0
- package/dist/lib/rank.d.ts +6 -0
- package/dist/lib/rank.js +51 -0
- package/dist/lib/rank.js.map +1 -0
- package/dist/lib/registerVariants.d.ts +13 -0
- package/dist/lib/registerVariants.js +77 -0
- package/dist/lib/registerVariants.js.map +1 -0
- package/dist/lib/workspace.d.ts +4 -0
- package/dist/lib/workspace.js +5 -0
- package/dist/lib/workspace.js.map +1 -0
- package/dist/router/analyzeQuery.d.ts +9 -0
- package/dist/router/analyzeQuery.js +12 -0
- package/dist/router/analyzeQuery.js.map +1 -0
- package/dist/router/index.d.ts +5 -0
- package/dist/router/index.js +6 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/mergeResults.d.ts +2 -0
- package/dist/router/mergeResults.js +25 -0
- package/dist/router/mergeResults.js.map +1 -0
- package/dist/router/retrieveAnswer.d.ts +3 -0
- package/dist/router/retrieveAnswer.js +51 -0
- package/dist/router/retrieveAnswer.js.map +1 -0
- package/dist/router/routeQuery.d.ts +3 -0
- package/dist/router/routeQuery.js +33 -0
- package/dist/router/routeQuery.js.map +1 -0
- package/dist/router/types.d.ts +13 -0
- package/dist/router/types.js +2 -0
- package/dist/router/types.js.map +1 -0
- package/dist/search/searchCore.d.ts +3 -0
- package/dist/search/searchCore.js +103 -0
- package/dist/search/searchCore.js.map +1 -0
- package/dist/search/searchEveApps.d.ts +2 -0
- package/dist/search/searchEveApps.js +111 -0
- package/dist/search/searchEveApps.js.map +1 -0
- package/dist/search/searchSourceFiles.d.ts +7 -0
- package/dist/search/searchSourceFiles.js +71 -0
- package/dist/search/searchSourceFiles.js.map +1 -0
- package/dist/server.d.ts +1 -0
- package/dist/server.js +217 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/explainEveSymbol.d.ts +84 -0
- package/dist/tools/explainEveSymbol.js +81 -0
- package/dist/tools/explainEveSymbol.js.map +1 -0
- package/dist/tools/findRelevantSample.d.ts +34 -0
- package/dist/tools/findRelevantSample.js +33 -0
- package/dist/tools/findRelevantSample.js.map +1 -0
- package/dist/tools/generateBuildCommand.d.ts +62 -0
- package/dist/tools/generateBuildCommand.js +103 -0
- package/dist/tools/generateBuildCommand.js.map +1 -0
- package/dist/tools/generateScreenScaffold.d.ts +34 -0
- package/dist/tools/generateScreenScaffold.js +118 -0
- package/dist/tools/generateScreenScaffold.js.map +1 -0
- package/dist/tools/lookupModuleGraphics.d.ts +29 -0
- package/dist/tools/lookupModuleGraphics.js +25 -0
- package/dist/tools/lookupModuleGraphics.js.map +1 -0
- package/dist/tools/readSourceFile.d.ts +15 -0
- package/dist/tools/readSourceFile.js +39 -0
- package/dist/tools/readSourceFile.js.map +1 -0
- package/dist/tools/traceFeatureToCommands.d.ts +38 -0
- package/dist/tools/traceFeatureToCommands.js +90 -0
- package/dist/tools/traceFeatureToCommands.js.map +1 -0
- package/dist/tools/validatePre820Code.d.ts +37 -0
- package/dist/tools/validatePre820Code.js +88 -0
- package/dist/tools/validatePre820Code.js.map +1 -0
- package/dist/types.d.ts +72 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +30 -0
package/dist/server.js
ADDED
|
@@ -0,0 +1,217 @@
|
|
|
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 { validatePre820Code, validatePre820CodeInput, } from "./tools/validatePre820Code.js";
|
|
9
|
+
import { readSourceFile, readSourceFileInput, } from "./tools/readSourceFile.js";
|
|
10
|
+
import { loadBuildMatrix, loadCommands, loadSamples, loadRegisters } from "./lib/loadIndex.js";
|
|
11
|
+
const server = new McpServer({
|
|
12
|
+
name: "EveApps-Pre82x",
|
|
13
|
+
version: "1.1.0",
|
|
14
|
+
});
|
|
15
|
+
server.registerTool("find_relevant_sample", {
|
|
16
|
+
title: "Find Relevant PRE820 Sample",
|
|
17
|
+
description: "Find the most relevant sample in the PRE820 repository for a user request.",
|
|
18
|
+
inputSchema: findRelevantSampleInput.shape,
|
|
19
|
+
}, async (args) => ({
|
|
20
|
+
content: [
|
|
21
|
+
{
|
|
22
|
+
type: "text",
|
|
23
|
+
text: JSON.stringify(findRelevantSample(args), null, 2),
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
}));
|
|
27
|
+
server.registerTool("explain_eve_symbol", {
|
|
28
|
+
title: "Explain EVE Symbol",
|
|
29
|
+
description: "Explain a PRE820/EVE helper or GPU macro, including canonical EVE_CoDl and EVE_CoCmd helpers. Prefer helpers over raw XXX and CMD_XXX macros in generated application code.",
|
|
30
|
+
inputSchema: explainEveSymbolInput.shape,
|
|
31
|
+
}, async (args) => ({
|
|
32
|
+
content: [
|
|
33
|
+
{
|
|
34
|
+
type: "text",
|
|
35
|
+
text: JSON.stringify(explainEveSymbol(args), null, 2),
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
}));
|
|
39
|
+
server.registerTool("generate_build_command", {
|
|
40
|
+
title: "Generate Build Command",
|
|
41
|
+
description: "Generate a valid build command from platform/graphics/display/SPI selections.",
|
|
42
|
+
inputSchema: generateBuildCommandInput.shape,
|
|
43
|
+
}, async (args) => ({
|
|
44
|
+
content: [
|
|
45
|
+
{
|
|
46
|
+
type: "text",
|
|
47
|
+
text: JSON.stringify(generateBuildCommand(args), null, 2),
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
}));
|
|
51
|
+
server.registerTool("trace_feature_to_commands", {
|
|
52
|
+
title: "Trace Feature to Commands",
|
|
53
|
+
description: "Map a requested PRE820 feature to related commands and samples.",
|
|
54
|
+
inputSchema: traceFeatureToCommandsInput.shape,
|
|
55
|
+
}, async (args) => ({
|
|
56
|
+
content: [
|
|
57
|
+
{
|
|
58
|
+
type: "text",
|
|
59
|
+
text: JSON.stringify(traceFeatureToCommands(args), null, 2),
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
}));
|
|
63
|
+
server.registerTool("generate_screen_scaffold", {
|
|
64
|
+
title: "Generate Screen Scaffold",
|
|
65
|
+
description: `
|
|
66
|
+
Generate a partial PRE820 screen scaffold for integration into an EveApps project.
|
|
67
|
+
|
|
68
|
+
IMPORTANT:
|
|
69
|
+
- Treat the output as a starting point, not production-ready source
|
|
70
|
+
- Add the requested controls inside the display frame
|
|
71
|
+
- Verify application globals and platform-specific initialization
|
|
72
|
+
- Compile and test the result in the target project
|
|
73
|
+
|
|
74
|
+
The generated scaffold is not authoritative and must be reviewed before use.
|
|
75
|
+
`,
|
|
76
|
+
inputSchema: generateScreenScaffoldInput.shape,
|
|
77
|
+
}, async (args) => {
|
|
78
|
+
const scaffold = generateScreenScaffold(args);
|
|
79
|
+
if (!scaffold.files?.length) {
|
|
80
|
+
throw new Error("No scaffold files generated");
|
|
81
|
+
}
|
|
82
|
+
const files = scaffold.files;
|
|
83
|
+
const file = files[0];
|
|
84
|
+
const artifact = {
|
|
85
|
+
artifactType: "source_scaffold",
|
|
86
|
+
scaffoldType: "partial_screen_scaffold",
|
|
87
|
+
language: "c",
|
|
88
|
+
path: file.path,
|
|
89
|
+
complete: scaffold.complete,
|
|
90
|
+
authoritative: scaffold.authoritative,
|
|
91
|
+
includesRuntimeInit: true,
|
|
92
|
+
includesCalibration: true,
|
|
93
|
+
notes: scaffold.notes,
|
|
94
|
+
content: file.content,
|
|
95
|
+
};
|
|
96
|
+
return {
|
|
97
|
+
structuredContent: artifact,
|
|
98
|
+
content: [
|
|
99
|
+
{
|
|
100
|
+
type: "text",
|
|
101
|
+
text: `GENERATED PRE820 SCREEN SCAFFOLD
|
|
102
|
+
|
|
103
|
+
Path: ${file.path}
|
|
104
|
+
|
|
105
|
+
This is a partial starting point, not production-ready or authoritative code.
|
|
106
|
+
Add controls inside the display frame, verify application globals and
|
|
107
|
+
platform-specific initialization, then compile and test in the target project.
|
|
108
|
+
`,
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
type: "text",
|
|
112
|
+
text: file.content,
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
type: "text",
|
|
116
|
+
text: JSON.stringify({
|
|
117
|
+
artifactType: artifact.artifactType,
|
|
118
|
+
scaffoldType: artifact.scaffoldType,
|
|
119
|
+
path: artifact.path,
|
|
120
|
+
complete: artifact.complete,
|
|
121
|
+
authoritative: artifact.authoritative,
|
|
122
|
+
includesRuntimeInit: artifact.includesRuntimeInit,
|
|
123
|
+
}, null, 2),
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
};
|
|
127
|
+
});
|
|
128
|
+
server.registerTool("validate_pre820_code", {
|
|
129
|
+
title: "Validate PRE820 Code",
|
|
130
|
+
description: "Check PRE820/EVE code and recommend EVE_CoDl or EVE_CoCmd helpers for equivalent raw GPU macros, while allowing intentional packed command usage.",
|
|
131
|
+
inputSchema: validatePre820CodeInput.shape,
|
|
132
|
+
}, async (args) => ({
|
|
133
|
+
content: [
|
|
134
|
+
{
|
|
135
|
+
type: "text",
|
|
136
|
+
text: JSON.stringify(validatePre820Code(args), null, 2),
|
|
137
|
+
},
|
|
138
|
+
],
|
|
139
|
+
}));
|
|
140
|
+
server.registerTool("pre820_read_file", {
|
|
141
|
+
title: "Read raw source file",
|
|
142
|
+
description: "Read the raw contents of a file from the local EveApps repository.",
|
|
143
|
+
inputSchema: readSourceFileInput.shape,
|
|
144
|
+
}, async (args) => ({
|
|
145
|
+
content: [
|
|
146
|
+
{
|
|
147
|
+
type: "text",
|
|
148
|
+
text: JSON.stringify(readSourceFile(args, {
|
|
149
|
+
workspaceRoot: process.cwd(),
|
|
150
|
+
eveappsRoot: process.env.EVEAPPS_ROOT,
|
|
151
|
+
}), null, 2),
|
|
152
|
+
},
|
|
153
|
+
],
|
|
154
|
+
}));
|
|
155
|
+
server.registerResource("pre820_commands", "pre820://api/commands", {
|
|
156
|
+
title: "PRE820 Commands Index",
|
|
157
|
+
description: "Indexed PRE820/EVE command list",
|
|
158
|
+
mimeType: "application/json",
|
|
159
|
+
}, async () => ({
|
|
160
|
+
contents: [
|
|
161
|
+
{
|
|
162
|
+
uri: "pre820://api/commands",
|
|
163
|
+
mimeType: "application/json",
|
|
164
|
+
text: JSON.stringify(loadCommands(), null, 2),
|
|
165
|
+
},
|
|
166
|
+
],
|
|
167
|
+
}));
|
|
168
|
+
server.registerResource("pre820_registers", "pre820://api/registers", {
|
|
169
|
+
title: "PRE820 Registers Index",
|
|
170
|
+
description: "Indexed PRE820/EVE register and constant list",
|
|
171
|
+
mimeType: "application/json",
|
|
172
|
+
}, async () => ({
|
|
173
|
+
contents: [
|
|
174
|
+
{
|
|
175
|
+
uri: "pre820://api/registers",
|
|
176
|
+
mimeType: "application/json",
|
|
177
|
+
text: JSON.stringify(loadRegisters(), null, 2),
|
|
178
|
+
},
|
|
179
|
+
],
|
|
180
|
+
}));
|
|
181
|
+
server.registerResource("pre820_samples", "pre820://samples", {
|
|
182
|
+
title: "PRE820 Samples Index",
|
|
183
|
+
description: "Indexed PRE820 sample list",
|
|
184
|
+
mimeType: "application/json",
|
|
185
|
+
}, async () => ({
|
|
186
|
+
contents: [
|
|
187
|
+
{
|
|
188
|
+
uri: "pre820://samples",
|
|
189
|
+
mimeType: "application/json",
|
|
190
|
+
text: JSON.stringify(loadSamples(), null, 2),
|
|
191
|
+
},
|
|
192
|
+
],
|
|
193
|
+
}));
|
|
194
|
+
server.registerResource("pre820_build_matrix", "pre820://build/matrix", {
|
|
195
|
+
title: "PRE820 Build Matrix",
|
|
196
|
+
description: "Allowed build combinations",
|
|
197
|
+
mimeType: "application/json",
|
|
198
|
+
}, async () => ({
|
|
199
|
+
contents: [
|
|
200
|
+
{
|
|
201
|
+
uri: "pre820://build/matrix",
|
|
202
|
+
mimeType: "application/json",
|
|
203
|
+
text: JSON.stringify(loadBuildMatrix(), null, 2),
|
|
204
|
+
},
|
|
205
|
+
],
|
|
206
|
+
}));
|
|
207
|
+
async function main() {
|
|
208
|
+
console.error("MCP SERVER STARTED");
|
|
209
|
+
const transport = new StdioServerTransport();
|
|
210
|
+
await server.connect(transport);
|
|
211
|
+
console.error("MCP SERVER CONNECTED");
|
|
212
|
+
}
|
|
213
|
+
main().catch((err) => {
|
|
214
|
+
console.error("EveApps-Pre82x MCP server failed:", err);
|
|
215
|
+
process.exit(1);
|
|
216
|
+
});
|
|
217
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const explainEveSymbolInput: z.ZodObject<{
|
|
3
|
+
symbol: z.ZodString;
|
|
4
|
+
graphics: z.ZodOptional<z.ZodString>;
|
|
5
|
+
family: z.ZodOptional<z.ZodString>;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
symbol: string;
|
|
8
|
+
graphics?: string | undefined;
|
|
9
|
+
family?: string | undefined;
|
|
10
|
+
}, {
|
|
11
|
+
symbol: string;
|
|
12
|
+
graphics?: string | undefined;
|
|
13
|
+
family?: string | undefined;
|
|
14
|
+
}>;
|
|
15
|
+
export type ExplainEveSymbolInput = z.infer<typeof explainEveSymbolInput>;
|
|
16
|
+
export declare function explainEveSymbol(args: ExplainEveSymbolInput): {
|
|
17
|
+
found: boolean;
|
|
18
|
+
symbol: string;
|
|
19
|
+
requested_symbol: string;
|
|
20
|
+
canonical_symbol: string;
|
|
21
|
+
preferred_for_generated_code: string;
|
|
22
|
+
equivalent_symbols: string[];
|
|
23
|
+
type: string;
|
|
24
|
+
signature: string;
|
|
25
|
+
summary: string;
|
|
26
|
+
parameters: {
|
|
27
|
+
name: string;
|
|
28
|
+
type: string;
|
|
29
|
+
desc: string;
|
|
30
|
+
}[];
|
|
31
|
+
related_samples: string[];
|
|
32
|
+
related_features: string[];
|
|
33
|
+
source_file: string;
|
|
34
|
+
usage_notes: string[];
|
|
35
|
+
common_mistakes: string[];
|
|
36
|
+
value?: undefined;
|
|
37
|
+
variants?: undefined;
|
|
38
|
+
resolved_for?: undefined;
|
|
39
|
+
message?: undefined;
|
|
40
|
+
} | {
|
|
41
|
+
found: boolean;
|
|
42
|
+
symbol: string;
|
|
43
|
+
type: string;
|
|
44
|
+
value: string | null;
|
|
45
|
+
variants: import("../lib/loadIndex.js").RegisterVariant[] | undefined;
|
|
46
|
+
resolved_for: {
|
|
47
|
+
requested_graphics: string | undefined;
|
|
48
|
+
graphics: string | undefined;
|
|
49
|
+
family: string | undefined;
|
|
50
|
+
} | undefined;
|
|
51
|
+
summary: string;
|
|
52
|
+
related_features: string[];
|
|
53
|
+
source_file: string;
|
|
54
|
+
usage_notes: string[];
|
|
55
|
+
requested_symbol?: undefined;
|
|
56
|
+
canonical_symbol?: undefined;
|
|
57
|
+
preferred_for_generated_code?: undefined;
|
|
58
|
+
equivalent_symbols?: undefined;
|
|
59
|
+
signature?: undefined;
|
|
60
|
+
parameters?: undefined;
|
|
61
|
+
related_samples?: undefined;
|
|
62
|
+
common_mistakes?: undefined;
|
|
63
|
+
message?: undefined;
|
|
64
|
+
} | {
|
|
65
|
+
found: boolean;
|
|
66
|
+
symbol: string;
|
|
67
|
+
message: string;
|
|
68
|
+
requested_symbol?: undefined;
|
|
69
|
+
canonical_symbol?: undefined;
|
|
70
|
+
preferred_for_generated_code?: undefined;
|
|
71
|
+
equivalent_symbols?: undefined;
|
|
72
|
+
type?: undefined;
|
|
73
|
+
signature?: undefined;
|
|
74
|
+
summary?: undefined;
|
|
75
|
+
parameters?: undefined;
|
|
76
|
+
related_samples?: undefined;
|
|
77
|
+
related_features?: undefined;
|
|
78
|
+
source_file?: undefined;
|
|
79
|
+
usage_notes?: undefined;
|
|
80
|
+
common_mistakes?: undefined;
|
|
81
|
+
value?: undefined;
|
|
82
|
+
variants?: undefined;
|
|
83
|
+
resolved_for?: undefined;
|
|
84
|
+
};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { loadCommands, loadGraphics, loadModules, loadRegisters } from "../lib/loadIndex.js";
|
|
3
|
+
import { expandEveSymbolAliases } from "../lib/eveSymbolAliases.js";
|
|
4
|
+
import { resolveGraphicsContext, resolveRegisterVariant } from "../lib/registerVariants.js";
|
|
5
|
+
export const explainEveSymbolInput = z.object({
|
|
6
|
+
symbol: z.string().min(2),
|
|
7
|
+
graphics: z.string().min(1).optional(),
|
|
8
|
+
family: z.string().min(1).optional(),
|
|
9
|
+
});
|
|
10
|
+
export function explainEveSymbol(args) {
|
|
11
|
+
const commands = loadCommands();
|
|
12
|
+
const registers = loadRegisters();
|
|
13
|
+
const graphicsIndex = loadGraphics();
|
|
14
|
+
const modulesIndex = loadModules();
|
|
15
|
+
const symbol = args.symbol.trim();
|
|
16
|
+
const equivalentSymbols = expandEveSymbolAliases(symbol, commands.map(command => command.name));
|
|
17
|
+
const commandItem = commands.find((c) => c.name.toLowerCase() === symbol.toLowerCase() ||
|
|
18
|
+
equivalentSymbols.some(alias => alias.toLowerCase() === c.name.toLowerCase()));
|
|
19
|
+
if (commandItem) {
|
|
20
|
+
const isCoCmd = commandItem.name.startsWith("EVE_CoCmd_");
|
|
21
|
+
return {
|
|
22
|
+
found: true,
|
|
23
|
+
symbol: commandItem.name,
|
|
24
|
+
requested_symbol: symbol,
|
|
25
|
+
canonical_symbol: commandItem.name,
|
|
26
|
+
preferred_for_generated_code: commandItem.name,
|
|
27
|
+
equivalent_symbols: equivalentSymbols.filter(alias => alias.toLowerCase() !== commandItem.name.toLowerCase()),
|
|
28
|
+
type: "command",
|
|
29
|
+
signature: commandItem.signature,
|
|
30
|
+
summary: commandItem.summary,
|
|
31
|
+
parameters: commandItem.params ?? [],
|
|
32
|
+
related_samples: commandItem.related_samples ?? [],
|
|
33
|
+
related_features: commandItem.related_features ?? [],
|
|
34
|
+
source_file: commandItem.source_file,
|
|
35
|
+
usage_notes: [
|
|
36
|
+
`Treat the ${isCoCmd ? "EVE_CoCmd helper and its CMD_* token" : "EVE_CoDl helper and its display-list macro"} as equivalent when searching and classifying usage in existing code.`,
|
|
37
|
+
`Prefer the ${isCoCmd ? "EVE_CoCmd" : "EVE_CoDl"} helper when generating new application code; use the raw macro for intentionally packed or low-level command words.`,
|
|
38
|
+
"Prefer verifying usage against the closest sample in the repository.",
|
|
39
|
+
"Check command ordering and display-list flow in surrounding code.",
|
|
40
|
+
],
|
|
41
|
+
common_mistakes: [
|
|
42
|
+
"Passing invalid coordinates or flags.",
|
|
43
|
+
"Using the command outside the expected rendering flow.",
|
|
44
|
+
],
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const registerItem = registers.find((r) => r.name.toLowerCase() === symbol.toLowerCase());
|
|
48
|
+
if (registerItem) {
|
|
49
|
+
const graphicsContext = resolveGraphicsContext(args.graphics, graphicsIndex, modulesIndex);
|
|
50
|
+
const family = args.family ?? graphicsContext?.family;
|
|
51
|
+
const resolvedVariant = resolveRegisterVariant(registerItem, {
|
|
52
|
+
family,
|
|
53
|
+
graphics: graphicsContext?.graphics ?? args.graphics,
|
|
54
|
+
});
|
|
55
|
+
return {
|
|
56
|
+
found: true,
|
|
57
|
+
symbol: registerItem.name,
|
|
58
|
+
type: registerItem.kind,
|
|
59
|
+
value: resolvedVariant?.value ?? registerItem.value ?? null,
|
|
60
|
+
variants: registerItem.variants ?? undefined,
|
|
61
|
+
resolved_for: resolvedVariant ? {
|
|
62
|
+
requested_graphics: args.graphics,
|
|
63
|
+
graphics: graphicsContext?.graphics ?? args.graphics,
|
|
64
|
+
family,
|
|
65
|
+
} : undefined,
|
|
66
|
+
summary: registerItem.summary,
|
|
67
|
+
related_features: registerItem.related_features ?? [],
|
|
68
|
+
source_file: registerItem.source_file,
|
|
69
|
+
usage_notes: [
|
|
70
|
+
"Verify the exact semantics in the programming guide/datasheet.",
|
|
71
|
+
"Check whether this symbol is read-only, write-only, or bitfield-based.",
|
|
72
|
+
],
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
found: false,
|
|
77
|
+
symbol,
|
|
78
|
+
message: `No exact symbol match found for ${symbol}.`,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=explainEveSymbol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explainEveSymbol.js","sourceRoot":"","sources":["../../src/tools/explainEveSymbol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const findRelevantSampleInput: z.ZodObject<{
|
|
3
|
+
query: z.ZodString;
|
|
4
|
+
platform: z.ZodOptional<z.ZodString>;
|
|
5
|
+
display: z.ZodOptional<z.ZodString>;
|
|
6
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
query: string;
|
|
9
|
+
limit: number;
|
|
10
|
+
platform?: string | undefined;
|
|
11
|
+
display?: string | undefined;
|
|
12
|
+
}, {
|
|
13
|
+
query: string;
|
|
14
|
+
platform?: string | undefined;
|
|
15
|
+
display?: string | undefined;
|
|
16
|
+
limit?: number | undefined;
|
|
17
|
+
}>;
|
|
18
|
+
export type FindRelevantSampleInput = z.infer<typeof findRelevantSampleInput>;
|
|
19
|
+
export declare function findRelevantSample(args: FindRelevantSampleInput): {
|
|
20
|
+
matches: {
|
|
21
|
+
sample_id: string;
|
|
22
|
+
name: string;
|
|
23
|
+
path: string;
|
|
24
|
+
score: number;
|
|
25
|
+
summary: string;
|
|
26
|
+
commands: string[];
|
|
27
|
+
reason: string;
|
|
28
|
+
}[];
|
|
29
|
+
recommended_starting_point: string | null;
|
|
30
|
+
assumptions: {
|
|
31
|
+
platform: string | null;
|
|
32
|
+
display: string | null;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { loadFeatureGraph, loadSamples } from "../lib/loadIndex.js";
|
|
3
|
+
import { rankSamples } from "../lib/rank.js";
|
|
4
|
+
export const findRelevantSampleInput = z.object({
|
|
5
|
+
query: z.string().min(3),
|
|
6
|
+
platform: z.string().optional(),
|
|
7
|
+
display: z.string().optional(),
|
|
8
|
+
limit: z.number().int().min(1).max(10).default(3),
|
|
9
|
+
});
|
|
10
|
+
export function findRelevantSample(args) {
|
|
11
|
+
const samples = loadSamples();
|
|
12
|
+
const featureGraph = loadFeatureGraph();
|
|
13
|
+
const ranked = rankSamples(args.query, samples, featureGraph, args.platform)
|
|
14
|
+
.slice(0, args.limit)
|
|
15
|
+
.map(({ sample, score }) => ({
|
|
16
|
+
sample_id: sample.id,
|
|
17
|
+
name: sample.name,
|
|
18
|
+
path: sample.path,
|
|
19
|
+
score,
|
|
20
|
+
summary: sample.summary,
|
|
21
|
+
commands: sample.commands_used,
|
|
22
|
+
reason: `Matched query against sample summary/categories/commands${args.platform ? ` and preferred platform ${args.platform}` : ""}.`,
|
|
23
|
+
}));
|
|
24
|
+
return {
|
|
25
|
+
matches: ranked,
|
|
26
|
+
recommended_starting_point: ranked[0]?.sample_id ?? null,
|
|
27
|
+
assumptions: {
|
|
28
|
+
platform: args.platform ?? null,
|
|
29
|
+
display: args.display ?? null,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=findRelevantSample.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findRelevantSample.js","sourceRoot":"","sources":["../../src/tools/findRelevantSample.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;CACpD,CAAC,CAAC;AAIH,MAAM,UAAU,kBAAkB,CAAC,IAA6B;IAC5D,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC;IAExC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC;SACvE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;SACpB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACzB,SAAS,EAAE,MAAM,CAAC,EAAE;QACpB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,MAAM,CAAC,aAAa;QAC9B,MAAM,EAAE,2DAA2D,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,2BAA2B,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG;KACxI,CAAC,CAAC,CAAC;IAER,OAAO;QACH,OAAO,EAAE,MAAM;QACf,0BAA0B,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,IAAI;QACxD,WAAW,EAAE;YACT,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;YAC/B,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;SAChC;KACJ,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const generateBuildCommandInput: z.ZodObject<{
|
|
3
|
+
platform: z.ZodString;
|
|
4
|
+
graphics: z.ZodString;
|
|
5
|
+
display: z.ZodString;
|
|
6
|
+
toolchain: z.ZodDefault<z.ZodEnum<["cmake", "nmake"]>>;
|
|
7
|
+
project: z.ZodOptional<z.ZodString>;
|
|
8
|
+
ft9xx_toolchain: z.ZodOptional<z.ZodString>;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
platform: string;
|
|
11
|
+
graphics: string;
|
|
12
|
+
display: string;
|
|
13
|
+
toolchain: "cmake" | "nmake";
|
|
14
|
+
project?: string | undefined;
|
|
15
|
+
ft9xx_toolchain?: string | undefined;
|
|
16
|
+
}, {
|
|
17
|
+
platform: string;
|
|
18
|
+
graphics: string;
|
|
19
|
+
display: string;
|
|
20
|
+
toolchain?: "cmake" | "nmake" | undefined;
|
|
21
|
+
project?: string | undefined;
|
|
22
|
+
ft9xx_toolchain?: string | undefined;
|
|
23
|
+
}>;
|
|
24
|
+
export type GenerateBuildCommandInput = z.infer<typeof generateBuildCommandInput>;
|
|
25
|
+
export declare function generateBuildCommand(args: GenerateBuildCommandInput): {
|
|
26
|
+
valid: boolean;
|
|
27
|
+
errors: string[];
|
|
28
|
+
suggested_fixes: string[];
|
|
29
|
+
command?: undefined;
|
|
30
|
+
commands?: undefined;
|
|
31
|
+
configureCommand?: undefined;
|
|
32
|
+
buildCommand?: undefined;
|
|
33
|
+
platform?: undefined;
|
|
34
|
+
platformName?: undefined;
|
|
35
|
+
graphicsName?: undefined;
|
|
36
|
+
displayName?: undefined;
|
|
37
|
+
generator?: undefined;
|
|
38
|
+
buildTool?: undefined;
|
|
39
|
+
requirements?: undefined;
|
|
40
|
+
notes?: undefined;
|
|
41
|
+
} | {
|
|
42
|
+
valid: boolean;
|
|
43
|
+
command: string;
|
|
44
|
+
commands: string[];
|
|
45
|
+
configureCommand: string | undefined;
|
|
46
|
+
buildCommand: string | undefined;
|
|
47
|
+
platform: {
|
|
48
|
+
generator?: string;
|
|
49
|
+
buildTool?: string;
|
|
50
|
+
host?: string[];
|
|
51
|
+
requires?: string[];
|
|
52
|
+
} | undefined;
|
|
53
|
+
platformName: string | undefined;
|
|
54
|
+
graphicsName: string | undefined;
|
|
55
|
+
displayName: string | undefined;
|
|
56
|
+
generator: string;
|
|
57
|
+
buildTool: string;
|
|
58
|
+
requirements: string[];
|
|
59
|
+
notes: string[];
|
|
60
|
+
errors?: undefined;
|
|
61
|
+
suggested_fixes?: undefined;
|
|
62
|
+
};
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { loadBuildMatrix } from "../lib/loadIndex.js";
|
|
3
|
+
const projectNamePattern = /^[A-Za-z0-9][A-Za-z0-9_.+-]*$/;
|
|
4
|
+
const toolchainPathPattern = /^(?:[A-Za-z]:[\\/]|\/)[A-Za-z0-9 _().+\\/-]+$/;
|
|
5
|
+
export const generateBuildCommandInput = z.object({
|
|
6
|
+
platform: z.string().min(1),
|
|
7
|
+
graphics: z.string().min(1),
|
|
8
|
+
display: z.string().min(1),
|
|
9
|
+
toolchain: z.enum(["cmake", "nmake"]).default("cmake"),
|
|
10
|
+
project: z.string().max(120).regex(projectNamePattern, "Project must be a DemoApps or SampleApp folder name").optional(),
|
|
11
|
+
ft9xx_toolchain: z.string().trim().min(1).max(260).regex(toolchainPathPattern, "FT9XX toolchain must be an absolute path without shell metacharacters").optional(),
|
|
12
|
+
});
|
|
13
|
+
function normalize(value) {
|
|
14
|
+
return value.trim().toLowerCase();
|
|
15
|
+
}
|
|
16
|
+
export function generateBuildCommand(args) {
|
|
17
|
+
const matrix = loadBuildMatrix();
|
|
18
|
+
const errors = [];
|
|
19
|
+
const selectedToolchain = args.toolchain ?? "cmake";
|
|
20
|
+
// Public callers can invoke this function without going through Zod.
|
|
21
|
+
if (args.project && (args.project.length > 120 || !projectNamePattern.test(args.project))) {
|
|
22
|
+
errors.push("Project must be a DemoApps or SampleApp folder name.");
|
|
23
|
+
}
|
|
24
|
+
if (args.ft9xx_toolchain && (args.ft9xx_toolchain.length > 260 ||
|
|
25
|
+
!toolchainPathPattern.test(args.ft9xx_toolchain))) {
|
|
26
|
+
errors.push("FT9XX toolchain must be an absolute path without shell metacharacters.");
|
|
27
|
+
}
|
|
28
|
+
const platformMatch = Object.entries(matrix.platforms).find(([name]) => normalize(name) === normalize(args.platform));
|
|
29
|
+
const platformName = platformMatch?.[0];
|
|
30
|
+
const platform = platformMatch?.[1];
|
|
31
|
+
if (!platformName || !platform) {
|
|
32
|
+
errors.push(`Unknown platform: ${args.platform}`);
|
|
33
|
+
}
|
|
34
|
+
const graphicsList = matrix.graphics ?? [];
|
|
35
|
+
const graphicsName = graphicsList.find((item) => normalize(item) === normalize(args.graphics));
|
|
36
|
+
if (!graphicsName) {
|
|
37
|
+
errors.push(`Unsupported graphics: ${args.graphics}`);
|
|
38
|
+
}
|
|
39
|
+
const displayList = matrix.displays ?? [];
|
|
40
|
+
const displayName = displayList.find((item) => normalize(item) === normalize(args.display));
|
|
41
|
+
if (!displayName) {
|
|
42
|
+
errors.push(`Unsupported display: ${args.display}`);
|
|
43
|
+
}
|
|
44
|
+
const isFt9xx = platform?.requires?.includes("FT9XX_TOOLCHAIN") ?? false;
|
|
45
|
+
if (isFt9xx && !args.ft9xx_toolchain) {
|
|
46
|
+
errors.push("FT9XX platforms require ft9xx_toolchain.");
|
|
47
|
+
}
|
|
48
|
+
if (isFt9xx && selectedToolchain !== "cmake") {
|
|
49
|
+
errors.push("FT9XX platforms must use the CMake build flow.");
|
|
50
|
+
}
|
|
51
|
+
if (errors.length > 0) {
|
|
52
|
+
return {
|
|
53
|
+
valid: false,
|
|
54
|
+
errors,
|
|
55
|
+
suggested_fixes: [
|
|
56
|
+
"Check platform/graphics/display spelling in build_matrix.json",
|
|
57
|
+
"Use a display and graphics value listed in the repository matrix",
|
|
58
|
+
"For FT90X/FT93X, provide the FT9XX Toolchain installation path",
|
|
59
|
+
],
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
const generatorName = platform.generator ?? "Unix Makefiles";
|
|
63
|
+
const buildTool = platform.buildTool ?? matrix.generators?.[generatorName]?.tool ?? "make";
|
|
64
|
+
const definitions = [
|
|
65
|
+
`-DEVE_APPS_PLATFORM=${platformName}`,
|
|
66
|
+
`-DEVE_APPS_GRAPHICS=${graphicsName}`,
|
|
67
|
+
`-DEVE_APPS_DISPLAY=${displayName}`,
|
|
68
|
+
...(isFt9xx
|
|
69
|
+
? [`"-DFT9XX_TOOLCHAIN=${args.ft9xx_toolchain}"`]
|
|
70
|
+
: []),
|
|
71
|
+
];
|
|
72
|
+
const configureCommand = `cmake -G "${generatorName}" ${definitions.join(" ")} ..`;
|
|
73
|
+
const buildCommand = `cmake --build ./${args.project ? ` --target ${args.project}` : ""}`;
|
|
74
|
+
const commands = selectedToolchain === "cmake"
|
|
75
|
+
? [
|
|
76
|
+
"cmake -E make_directory build",
|
|
77
|
+
"cd build",
|
|
78
|
+
configureCommand,
|
|
79
|
+
buildCommand,
|
|
80
|
+
]
|
|
81
|
+
: [`${buildTool} ${args.project ?? "SampleApp"}`];
|
|
82
|
+
return {
|
|
83
|
+
valid: true,
|
|
84
|
+
command: commands.join(" && "),
|
|
85
|
+
commands,
|
|
86
|
+
configureCommand: selectedToolchain === "cmake" ? configureCommand : undefined,
|
|
87
|
+
buildCommand: selectedToolchain === "cmake" ? buildCommand : commands[0],
|
|
88
|
+
platform,
|
|
89
|
+
platformName,
|
|
90
|
+
graphicsName,
|
|
91
|
+
displayName,
|
|
92
|
+
generator: generatorName,
|
|
93
|
+
buildTool,
|
|
94
|
+
requirements: platform.requires ?? [],
|
|
95
|
+
notes: [
|
|
96
|
+
"Generated from the current build_matrix.json schema",
|
|
97
|
+
...(isFt9xx
|
|
98
|
+
? ["FT90X/FT93X uses Eclipse CDT4 - Unix Makefiles and requires FT9XX_TOOLCHAIN"]
|
|
99
|
+
: ["Add board-specific prerequisites separately if needed"]),
|
|
100
|
+
],
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=generateBuildCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateBuildCommand.js","sourceRoot":"","sources":["../../src/tools/generateBuildCommand.ts"],"names":[],"mappings":"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"}
|