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
package/dist/server.js ADDED
@@ -0,0 +1,229 @@
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 { readSourceFile, readSourceFileInput, } from "./tools/readSourceFile.js";
10
+ import { loadBuildMatrix, loadCommands, loadSamples, loadRegisters } from "./lib/loadIndex.js";
11
+ const server = new McpServer({
12
+ name: "bt820-mcp-server",
13
+ version: "0.1.0",
14
+ });
15
+ server.registerTool("find_relevant_sample", {
16
+ title: "Find Relevant BT820 Sample",
17
+ description: "Find the most relevant sample in the BT820 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 BT820/EVE command symbol from the indexed repository data.",
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 BT820 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 COMPLETE production-ready BT820 screen scaffold.
67
+
68
+ IMPORTANT:
69
+ - Preserve ALL initialization flow
70
+ - Preserve patch loading
71
+ - Preserve calibration flow
72
+ - Preserve display configuration
73
+ - Preserve cleanup/release flow
74
+ - Do NOT simplify or omit hardware initialization code
75
+
76
+ The generated scaffold should be treated as authoritative source code,
77
+ NOT as a partial example.
78
+ `,
79
+ inputSchema: generateScreenScaffoldInput.shape,
80
+ }, async (args) => {
81
+ const scaffold = generateScreenScaffold(args);
82
+ if (!scaffold.files?.length) {
83
+ throw new Error("No scaffold files generated");
84
+ }
85
+ const files = scaffold.files;
86
+ const file = files[0];
87
+ const artifact = {
88
+ artifactType: "source_file",
89
+ scaffoldType: "full_screen_template",
90
+ language: "c",
91
+ path: file.path,
92
+ authoritative: true,
93
+ preserveRuntimeInit: true,
94
+ preservePatchLoading: true,
95
+ preserveCalibration: true,
96
+ preserveDisplayConfig: true,
97
+ notes: scaffold.notes,
98
+ content: file.content,
99
+ };
100
+ return {
101
+ structuredContent: artifact,
102
+ content: [
103
+ {
104
+ type: "text",
105
+ text: `AUTHORITATIVE GENERATED FILE
106
+
107
+ Path: ${file.path}
108
+
109
+ IMPORTANT:
110
+ Use this code EXACTLY as generated.
111
+
112
+ DO NOT remove:
113
+ - Gpu_Init
114
+ - Display_Config
115
+ - EVE_Load_Patch
116
+ - EVE_Calibrate
117
+ - Calibration_Save
118
+ - cleanup/release flow
119
+
120
+ This initialization sequence is REQUIRED for BT820 hardware bring-up.
121
+ `,
122
+ },
123
+ {
124
+ type: "text",
125
+ text: file.content,
126
+ },
127
+ {
128
+ type: "text",
129
+ text: JSON.stringify({
130
+ artifactType: artifact.artifactType,
131
+ scaffoldType: artifact.scaffoldType,
132
+ path: artifact.path,
133
+ authoritative: artifact.authoritative,
134
+ preserveRuntimeInit: artifact.preserveRuntimeInit,
135
+ }, null, 2),
136
+ },
137
+ ],
138
+ };
139
+ });
140
+ server.registerTool("validate_bt820_code", {
141
+ title: "Validate BT820 Code",
142
+ description: "Check BT820/EVE code for common structural issues.",
143
+ inputSchema: validateBt820CodeInput.shape,
144
+ }, async (args) => ({
145
+ content: [
146
+ {
147
+ type: "text",
148
+ text: JSON.stringify(validateBt820Code(args), null, 2),
149
+ },
150
+ ],
151
+ }));
152
+ server.registerTool("bt820_read_file", {
153
+ title: "Read raw source file",
154
+ description: "Read the raw contents of a file from the local EveApps repository.",
155
+ inputSchema: readSourceFileInput.shape,
156
+ }, async (args) => ({
157
+ content: [
158
+ {
159
+ type: "text",
160
+ text: JSON.stringify(readSourceFile(args, {
161
+ workspaceRoot: process.cwd(),
162
+ eveappsRoot: process.env.EVEAPPS_ROOT,
163
+ }), null, 2),
164
+ },
165
+ ],
166
+ }));
167
+ server.registerResource("bt820_commands", "bt820://api/commands", {
168
+ title: "BT820 Commands Index",
169
+ description: "Indexed BT820/EVE command list",
170
+ mimeType: "application/json",
171
+ }, async () => ({
172
+ contents: [
173
+ {
174
+ uri: "bt820://api/commands",
175
+ mimeType: "application/json",
176
+ text: JSON.stringify(loadCommands(), null, 2),
177
+ },
178
+ ],
179
+ }));
180
+ server.registerResource("bt820_registers", "bt820://api/registers", {
181
+ title: "BT820 Registers Index",
182
+ description: "Indexed BT820/EVE register and constant list",
183
+ mimeType: "application/json",
184
+ }, async () => ({
185
+ contents: [
186
+ {
187
+ uri: "bt820://api/registers",
188
+ mimeType: "application/json",
189
+ text: JSON.stringify(loadRegisters(), null, 2),
190
+ },
191
+ ],
192
+ }));
193
+ server.registerResource("bt820_samples", "bt820://samples", {
194
+ title: "BT820 Samples Index",
195
+ description: "Indexed BT820 sample list",
196
+ mimeType: "application/json",
197
+ }, async () => ({
198
+ contents: [
199
+ {
200
+ uri: "bt820://samples",
201
+ mimeType: "application/json",
202
+ text: JSON.stringify(loadSamples(), null, 2),
203
+ },
204
+ ],
205
+ }));
206
+ server.registerResource("bt820_build_matrix", "bt820://build/matrix", {
207
+ title: "BT820 Build Matrix",
208
+ description: "Allowed build combinations",
209
+ mimeType: "application/json",
210
+ }, async () => ({
211
+ contents: [
212
+ {
213
+ uri: "bt820://build/matrix",
214
+ mimeType: "application/json",
215
+ text: JSON.stringify(loadBuildMatrix(), null, 2),
216
+ },
217
+ ],
218
+ }));
219
+ async function main() {
220
+ console.error("MCP SERVER STARTED");
221
+ const transport = new StdioServerTransport();
222
+ await server.connect(transport);
223
+ console.error("MCP SERVER CONNECTED");
224
+ }
225
+ main().catch((err) => {
226
+ console.error("BT820 MCP server failed:", err);
227
+ process.exit(1);
228
+ });
229
+ //# 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,12 @@
1
+ export interface WorkspaceContextOptions {
2
+ workspaceRoot?: string;
3
+ eveappsRoot?: string;
4
+ }
5
+ export interface WorkspaceContext {
6
+ workspaceRoot?: string;
7
+ eveappsRoot?: string;
8
+ dataRoot?: string;
9
+ resolveDataPath?: (file: string) => string;
10
+ readJsonFile: <T>(file: string) => T;
11
+ }
12
+ export declare function createWorkspaceContext(options: WorkspaceContextOptions): WorkspaceContext;
@@ -0,0 +1,71 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import commands from "../data/commands.json" with { type: "json" };
4
+ import registers from "../data/registers.json" with { type: "json" };
5
+ import samples from "../data/samples.json" with { type: "json" };
6
+ import buildMatrix from "../data/build_matrix.json" with { type: "json" };
7
+ import featureGraph from "../data/feature_graph.json" with { type: "json" };
8
+ const embeddedData = {
9
+ "commands.json": commands,
10
+ "registers.json": registers,
11
+ "samples.json": samples,
12
+ "build_matrix.json": buildMatrix,
13
+ "feature_graph.json": featureGraph,
14
+ };
15
+ export function createWorkspaceContext(options) {
16
+ const workspaceRoot = options.workspaceRoot
17
+ ? path.resolve(options.workspaceRoot)
18
+ : undefined;
19
+ const eveappsRoot = options.eveappsRoot
20
+ ? path.resolve(options.eveappsRoot)
21
+ : undefined;
22
+ const dataRoot = workspaceRoot
23
+ ? path.join(workspaceRoot, "data")
24
+ : undefined;
25
+ function resolveDataPath(file) {
26
+ if (!workspaceRoot) {
27
+ throw new Error("resolveDataPath unavailable in embedded mode");
28
+ }
29
+ const candidates = [
30
+ path.join(workspaceRoot, "data", file),
31
+ path.join(workspaceRoot, "dist", "data", file)
32
+ ];
33
+ for (const p of candidates) {
34
+ if (fs.existsSync(p)) {
35
+ return p;
36
+ }
37
+ }
38
+ throw new Error(`Missing data file: ${file}\nChecked:\n${candidates.join("\n")}`);
39
+ }
40
+ function readJsonFile(file) {
41
+ // ---------------------------------
42
+ // Embedded mode (EXE-safe)
43
+ // ---------------------------------
44
+ if (!workspaceRoot) {
45
+ const embedded = embeddedData[file];
46
+ if (!embedded) {
47
+ throw new Error(`Embedded data file not found: ${file}`);
48
+ }
49
+ return embedded;
50
+ }
51
+ // ---------------------------------
52
+ // External workspace mode
53
+ // ---------------------------------
54
+ const fullPath = resolveDataPath(file);
55
+ if (!fs.existsSync(fullPath)) {
56
+ throw new Error(`Required data file not found: ${fullPath}`);
57
+ }
58
+ const content = fs.readFileSync(fullPath, "utf-8");
59
+ return JSON.parse(content);
60
+ }
61
+ return {
62
+ workspaceRoot,
63
+ eveappsRoot,
64
+ dataRoot,
65
+ resolveDataPath: workspaceRoot
66
+ ? resolveDataPath
67
+ : undefined,
68
+ readJsonFile,
69
+ };
70
+ }
71
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export * from "./tools/generateBuildCommand.js";
2
+ export * from "./tools/findRelevantSample.js";
3
+ export * from "./tools/explainEveSymbol.js";
4
+ export * from "./tools/generateScreenScaffold.js";
5
+ export * from "./tools/validateBt820Code.js";
6
+ export * from "./tools/traceFeatureToCommands.js";
7
+ export * from "./lib/loadIndex.js";
8
+ export * from "./types.js";
9
+ export * from "./context.js";
10
+ export * from "./router/index.js";
@@ -0,0 +1,11 @@
1
+ export * from "./tools/generateBuildCommand.js";
2
+ export * from "./tools/findRelevantSample.js";
3
+ export * from "./tools/explainEveSymbol.js";
4
+ export * from "./tools/generateScreenScaffold.js";
5
+ export * from "./tools/validateBt820Code.js";
6
+ export * from "./tools/traceFeatureToCommands.js";
7
+ export * from "./lib/loadIndex.js";
8
+ export * from "./types.js";
9
+ export * from "./context.js";
10
+ export * from "./router/index.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAElD,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { BuildMatrix, CommandIndexItem, FeatureGraphItem, SampleIndexItem } from "../types.js";
2
+ export interface RegisterIndexItem {
3
+ name: string;
4
+ kind: string;
5
+ value: string;
6
+ summary: string;
7
+ source_file: string;
8
+ related_features?: string[];
9
+ }
10
+ export declare function loadCommands(): CommandIndexItem[];
11
+ export declare function loadSamples(): SampleIndexItem[];
12
+ export declare function loadBuildMatrix(): BuildMatrix;
13
+ export declare function loadFeatureGraph(): Record<string, FeatureGraphItem>;
14
+ export declare function loadRegisters(): RegisterIndexItem[];
@@ -0,0 +1,27 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ const __filename = fileURLToPath(import.meta.url);
5
+ const __dirname = path.dirname(__filename);
6
+ const dataDir = path.resolve(__dirname, "../../data");
7
+ function readJsonFile(filename) {
8
+ const fullPath = path.join(dataDir, filename);
9
+ const raw = fs.readFileSync(fullPath, "utf-8");
10
+ return JSON.parse(raw);
11
+ }
12
+ export function loadCommands() {
13
+ return readJsonFile("commands.json");
14
+ }
15
+ export function loadSamples() {
16
+ return readJsonFile("samples.json");
17
+ }
18
+ export function loadBuildMatrix() {
19
+ return readJsonFile("build_matrix.json");
20
+ }
21
+ export function loadFeatureGraph() {
22
+ return readJsonFile("feature_graph.json");
23
+ }
24
+ export function loadRegisters() {
25
+ return readJsonFile("registers.json");
26
+ }
27
+ //# sourceMappingURL=loadIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadIndex.js","sourceRoot":"","sources":["../../../src/lib/loadIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAiBzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAEtD,SAAS,YAAY,CAAI,QAAgB;IACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,YAAY;IACxB,OAAO,YAAY,CAAqB,eAAe,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,WAAW;IACvB,OAAO,YAAY,CAAoB,cAAc,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,eAAe;IAC3B,OAAO,YAAY,CAAc,mBAAmB,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC5B,OAAO,YAAY,CAAmC,oBAAoB,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,aAAa;IACzB,OAAO,YAAY,CAAsB,gBAAgB,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function normalizeText(input: string): string;
2
+ export declare function tokenize(input: string): string[];
@@ -0,0 +1,10 @@
1
+ export function normalizeText(input) {
2
+ return input.trim().toLowerCase().replace(/\s+/g, " ");
3
+ }
4
+ export function tokenize(input) {
5
+ return normalizeText(input)
6
+ .split(/[^a-z0-9_+.-]+/i)
7
+ .map((s) => s.trim())
8
+ .filter(Boolean);
9
+ }
10
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../../src/lib/normalize.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,KAAa;IACvC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAa;IAClC,OAAO,aAAa,CAAC,KAAK,CAAC;SACtB,KAAK,CAAC,iBAAiB,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { FeatureGraphItem, SampleIndexItem } from "../types.js";
2
+ export declare function rankSamples(query: string, samples: SampleIndexItem[], featureGraph: Record<string, FeatureGraphItem>, platform?: string): {
3
+ sample: SampleIndexItem;
4
+ score: number;
5
+ }[];
@@ -0,0 +1,38 @@
1
+ import { tokenize, normalizeText } from "./normalize.js";
2
+ export function rankSamples(query, samples, featureGraph, platform) {
3
+ const q = normalizeText(query);
4
+ const qTokens = new Set(tokenize(query));
5
+ return samples
6
+ .map((sample) => {
7
+ let score = 0;
8
+ const haystack = normalizeText([
9
+ sample.name,
10
+ sample.summary,
11
+ ...(sample.categories ?? []),
12
+ ...(sample.keywords ?? []),
13
+ ...(sample.commands_used ?? []),
14
+ ].join(" "));
15
+ for (const token of qTokens) {
16
+ if (haystack.includes(token))
17
+ score += 2;
18
+ }
19
+ for (const [feature, meta] of Object.entries(featureGraph)) {
20
+ if (q.includes(feature) || meta.keywords.some((k) => q.includes(k.toLowerCase()))) {
21
+ if (meta.samples.includes(sample.id))
22
+ score += 5;
23
+ const overlap = sample.commands_used.filter((c) => meta.commands.some((cmd) => cmd.name === c)).length;
24
+ score += overlap;
25
+ }
26
+ }
27
+ if (platform && sample.platform_notes?.includes(platform)) {
28
+ score += 2;
29
+ }
30
+ if (sample.difficulty === "beginner") {
31
+ score += 0.5;
32
+ }
33
+ return { sample, score };
34
+ })
35
+ .filter((x) => x.score > 0)
36
+ .sort((a, b) => b.score - a.score);
37
+ }
38
+ //# sourceMappingURL=rank.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rank.js","sourceRoot":"","sources":["../../../src/lib/rank.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEzD,MAAM,UAAU,WAAW,CACvB,KAAa,EACb,OAA0B,EAC1B,YAA8C,EAC9C,QAAiB;IAEjB,MAAM,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAEzC,OAAO,OAAO;SACT,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACZ,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,MAAM,QAAQ,GAAG,aAAa,CAAC;YAC3B,MAAM,CAAC,IAAI;YACX,MAAM,CAAC,OAAO;YACd,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;YAC5B,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;YAC1B,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC;SAClC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAEb,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,KAAK,IAAI,CAAC,CAAC;QAC7C,CAAC;QAED,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC;gBAChF,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAAE,KAAK,IAAI,CAAC,CAAC;gBACjD,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACvG,KAAK,IAAI,OAAO,CAAC;YACrB,CAAC;QACL,CAAC;QAED,IAAI,QAAQ,IAAI,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxD,KAAK,IAAI,CAAC,CAAC;QACf,CAAC;QAED,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACnC,KAAK,IAAI,GAAG,CAAC;QACjB,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;SAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,4 @@
1
+ export interface WorkspaceContext {
2
+ workspaceRoot: string;
3
+ }
4
+ export declare function resolveDataPath(context: WorkspaceContext, file: string): string;
@@ -0,0 +1,5 @@
1
+ import path from "path";
2
+ export function resolveDataPath(context, file) {
3
+ return path.join(context.workspaceRoot, "data", file);
4
+ }
5
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../src/lib/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAMxB,MAAM,UAAU,eAAe,CAC3B,OAAyB,EACzB,IAAY;IAEZ,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface QueryAnalysis {
2
+ isBuild: boolean;
3
+ isScreen: boolean;
4
+ isSymbol: boolean;
5
+ isSample: boolean;
6
+ isDebug: boolean;
7
+ isGeneric: boolean;
8
+ }
9
+ export declare function analyzeQuery(query: string): QueryAnalysis;
@@ -0,0 +1,12 @@
1
+ export function analyzeQuery(query) {
2
+ const q = query.toLowerCase();
3
+ return {
4
+ isBuild: q.includes("build") || q.includes("cmake") || q.includes("compile"),
5
+ isScreen: q.includes("screen") || q.includes("ui") || q.includes("widget"),
6
+ isSymbol: q.includes("cmd") || q.includes("register") || q.includes("api"),
7
+ isSample: q.includes("sample") || q.includes("example"),
8
+ isDebug: q.includes("error") || q.includes("fail") || q.includes("issue"),
9
+ isGeneric: true
10
+ };
11
+ }
12
+ //# sourceMappingURL=analyzeQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzeQuery.js","sourceRoot":"","sources":["../../../src/router/analyzeQuery.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,YAAY,CAAC,KAAa;IACtC,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAE9B,OAAO;QACH,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC5E,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC1E,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC1E,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;QACvD,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QACzE,SAAS,EAAE,IAAI;KAClB,CAAC;AACN,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from "./types.js";
2
+ export * from "./analyzeQuery.js";
3
+ export * from "./routeQuery.js";
4
+ export * from "./retrieveAnswer.js";
5
+ export * from "./mergeResults.js";
@@ -0,0 +1,6 @@
1
+ export * from "./types.js";
2
+ export * from "./analyzeQuery.js";
3
+ export * from "./routeQuery.js";
4
+ export * from "./retrieveAnswer.js";
5
+ export * from "./mergeResults.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/router/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { RetrievalResult } from "./types.js";
2
+ export declare function mergeResults(coreResult: any, eveappsResult: any): RetrievalResult;
@@ -0,0 +1,12 @@
1
+ export function mergeResults(coreResult, eveappsResult) {
2
+ return {
3
+ answer: coreResult.answer ?? eveappsResult.answer,
4
+ confidence: Math.max(coreResult.confidence ?? 0, eveappsResult.confidence ?? 0),
5
+ source: "both",
6
+ references: [
7
+ ...(coreResult.references ?? []),
8
+ ...(eveappsResult.references ?? [])
9
+ ]
10
+ };
11
+ }
12
+ //# sourceMappingURL=mergeResults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeResults.js","sourceRoot":"","sources":["../../../src/router/mergeResults.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,UAAe,EAAE,aAAkB;IAC5D,OAAO;QACH,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM;QACjD,UAAU,EAAE,IAAI,CAAC,GAAG,CAChB,UAAU,CAAC,UAAU,IAAI,CAAC,EAC1B,aAAa,CAAC,UAAU,IAAI,CAAC,CAChC;QACD,MAAM,EAAE,MAAM;QACd,UAAU,EAAE;YACR,GAAG,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC;YAChC,GAAG,CAAC,aAAa,CAAC,UAAU,IAAI,EAAE,CAAC;SACtC;KACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { WorkspaceContext } from "../context.js";
2
+ import { RetrievalResult } from "./types.js";
3
+ export declare function retrieveAnswer(context: WorkspaceContext, query: string): Promise<RetrievalResult>;
@@ -0,0 +1,64 @@
1
+ import { analyzeQuery } from "./analyzeQuery.js";
2
+ import { routeQuery } from "./routeQuery.js";
3
+ import { mergeResults } from "./mergeResults.js";
4
+ // You already have these in eveapps-core
5
+ import { searchCore } from "../search/searchCore.js";
6
+ import { searchEveApps } from "../search/searchEveApps.js";
7
+ import { searchSourceFiles } from "../search/searchSourceFiles.js";
8
+ export async function retrieveAnswer(context, query) {
9
+ // 1. Run core search first
10
+ const coreResult = searchCore(context, query);
11
+ // 2. Analyze query intent
12
+ const analysis = analyzeQuery(query);
13
+ // 3. Decide routing
14
+ const decision = routeQuery(query, analysis, coreResult?.confidence ?? 0, !!context.eveappsRoot);
15
+ // 4. Execute based on routing decision
16
+ switch (decision.source) {
17
+ case "core":
18
+ return {
19
+ answer: coreResult.answer,
20
+ confidence: coreResult.confidence,
21
+ source: "core",
22
+ references: coreResult.references
23
+ };
24
+ case "eveapps": {
25
+ const eveappsResult = await searchEveApps(context.eveappsRoot, query);
26
+ const sourceMatches = context.eveappsRoot
27
+ ? searchSourceFiles(context.eveappsRoot, query)
28
+ : [];
29
+ return {
30
+ answer: {
31
+ ...eveappsResult.answer,
32
+ source_matches: sourceMatches
33
+ },
34
+ confidence: Math.max(eveappsResult.confidence, sourceMatches.length > 0 ? 0.85 : 0),
35
+ source: "eveapps",
36
+ references: [
37
+ ...(eveappsResult.references ?? []),
38
+ ...sourceMatches.map(s => s.relativePath)
39
+ ]
40
+ };
41
+ }
42
+ case "both": {
43
+ const eveappsResult = await searchEveApps(context.eveappsRoot, query);
44
+ const sourceMatches = context.eveappsRoot
45
+ ? searchSourceFiles(context.eveappsRoot, query)
46
+ : [];
47
+ const merged = mergeResults(coreResult, eveappsResult);
48
+ return {
49
+ ...merged,
50
+ answer: {
51
+ ...merged.answer,
52
+ source_matches: sourceMatches
53
+ },
54
+ references: [
55
+ ...(merged.references ?? []),
56
+ ...sourceMatches.map(s => s.relativePath)
57
+ ]
58
+ };
59
+ }
60
+ default:
61
+ return coreResult;
62
+ }
63
+ }
64
+ //# sourceMappingURL=retrieveAnswer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retrieveAnswer.js","sourceRoot":"","sources":["../../../src/router/retrieveAnswer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,yCAAyC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,OAAyB,EACzB,KAAa;IAGb,2BAA2B;IAC3B,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAE9C,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAErC,oBAAoB;IACpB,MAAM,QAAQ,GAAG,UAAU,CACvB,KAAK,EACL,QAAQ,EACR,UAAU,EAAE,UAAU,IAAI,CAAC,EAC3B,CAAC,CAAC,OAAO,CAAC,WAAW,CACxB,CAAC;IAEF,uCAAuC;IACvC,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;QAEtB,KAAK,MAAM;YACP,OAAO;gBACH,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,UAAU,EAAE,UAAU,CAAC,UAAU;gBACjC,MAAM,EAAE,MAAM;gBACd,UAAU,EAAE,UAAU,CAAC,UAAU;aACpC,CAAC;QAEN,KAAK,SAAS,CAAC,CAAC,CAAC;YAEb,MAAM,aAAa,GAAG,MAAM,aAAa,CACrC,OAAO,CAAC,WAAY,EACpB,KAAK,CACR,CAAC;YAEF,MAAM,aAAa,GAChB,OAAO,CAAC,WAAW;gBACd,CAAC,CAAC,iBAAiB,CACd,OAAO,CAAC,WAAW,EACnB,KAAK,CACT;gBACD,CAAC,CAAC,EAAE,CAAC;YAEb,OAAO;gBAEH,MAAM,EAAE;oBACJ,GAAG,aAAa,CAAC,MAAM;oBAEvB,cAAc,EAAE,aAAa;iBAChC;gBAED,UAAU,EAAE,IAAI,CAAC,GAAG,CAChB,aAAa,CAAC,UAAU,EACxB,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACtC;gBAED,MAAM,EAAE,SAAS;gBAEjB,UAAU,EAAE;oBACR,GAAG,CAAC,aAAa,CAAC,UAAU,IAAI,EAAE,CAAC;oBAEnC,GAAG,aAAa,CAAC,GAAG,CAChB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CACtB;iBACJ;aACJ,CAAC;QACN,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YAEV,MAAM,aAAa,GAAG,MAAM,aAAa,CACrC,OAAO,CAAC,WAAY,EACpB,KAAK,CACR,CAAC;YAEF,MAAM,aAAa,GACf,OAAO,CAAC,WAAW;gBACf,CAAC,CAAC,iBAAiB,CACb,OAAO,CAAC,WAAW,EACnB,KAAK,CACR;gBACH,CAAC,CAAC,EAAE,CAAC;YAEb,MAAM,MAAM,GAAG,YAAY,CACvB,UAAU,EACV,aAAa,CAChB,CAAC;YAEF,OAAO;gBAEH,GAAG,MAAM;gBAET,MAAM,EAAE;oBAEJ,GAAG,MAAM,CAAC,MAAM;oBAEhB,cAAc,EAAE,aAAa;iBAChC;gBAED,UAAU,EAAE;oBAER,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;oBAE5B,GAAG,aAAa,CAAC,GAAG,CAChB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CACtB;iBACJ;aACJ,CAAC;QACN,CAAC;QAED;YACI,OAAO,UAAU,CAAC;IAC1B,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { QueryAnalysis } from "./analyzeQuery.js";
2
+ import { RouteDecision } from "./types.js";
3
+ export declare function routeQuery(query: string, analysis: QueryAnalysis, coreScore: number, hasEveApps: boolean): RouteDecision;