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,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,34 @@
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
+ spi: z.ZodString;
7
+ toolchain: z.ZodDefault<z.ZodEnum<["cmake", "nmake"]>>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ platform: string;
10
+ graphics: string;
11
+ display: string;
12
+ spi: string;
13
+ toolchain: "cmake" | "nmake";
14
+ }, {
15
+ platform: string;
16
+ graphics: string;
17
+ display: string;
18
+ spi: string;
19
+ toolchain?: "cmake" | "nmake" | undefined;
20
+ }>;
21
+ export type GenerateBuildCommandInput = z.infer<typeof generateBuildCommandInput>;
22
+ export declare function generateBuildCommand(args: GenerateBuildCommandInput): {
23
+ valid: boolean;
24
+ errors: string[];
25
+ suggested_fixes: string[];
26
+ command?: undefined;
27
+ notes?: undefined;
28
+ } | {
29
+ valid: boolean;
30
+ command: string;
31
+ notes: string[];
32
+ errors?: undefined;
33
+ suggested_fixes?: undefined;
34
+ };
@@ -0,0 +1,54 @@
1
+ import { z } from "zod";
2
+ import { loadBuildMatrix } from "../lib/loadIndex.js";
3
+ export const generateBuildCommandInput = z.object({
4
+ platform: z.string(),
5
+ graphics: z.string(),
6
+ display: z.string(),
7
+ spi: z.string(),
8
+ toolchain: z.enum(["cmake", "nmake"]).default("cmake"),
9
+ });
10
+ export function generateBuildCommand(args) {
11
+ const matrix = loadBuildMatrix();
12
+ const platformKey = args.platform.toLowerCase();
13
+ const graphicsKey = args.graphics.toLowerCase();
14
+ const displayKey = args.display.toLowerCase();
15
+ const spiKey = args.spi.toLowerCase();
16
+ const platform = matrix.platforms[platformKey];
17
+ const errors = [];
18
+ if (!platform) {
19
+ errors.push(`Unknown platform: ${args.platform}`);
20
+ }
21
+ else {
22
+ if (!platform.graphics.includes(graphicsKey)) {
23
+ errors.push(`Platform ${args.platform} does not support graphics ${args.graphics}`);
24
+ }
25
+ if (!platform.spi.includes(spiKey)) {
26
+ errors.push(`Platform ${args.platform} does not support SPI mode ${args.spi}`);
27
+ }
28
+ }
29
+ if (!matrix.displays.includes(displayKey)) {
30
+ errors.push(`Unsupported display: ${args.display}`);
31
+ }
32
+ if (errors.length > 0) {
33
+ return {
34
+ valid: false,
35
+ errors,
36
+ suggested_fixes: [
37
+ "Check platform spelling in build_matrix.json",
38
+ "Use a display/SPI combination allowed by the repo",
39
+ ],
40
+ };
41
+ }
42
+ const command = args.toolchain === "cmake"
43
+ ? `cd build && cmake -G "NMake Makefiles" -DEVE_APPS_PLATFORM=EVE_PLATFORM_${args.platform.toUpperCase()} -DEVE_APPS_GRAPHICS=EVE_GRAPHICS_${args.graphics.toUpperCase()} -DEVE_APPS_DISPLAY=EVE_DISPLAY_${args.display.toUpperCase()} -DEVE_APPS_SPI=EVE_SPI_${args.spi.toUpperCase()}`
44
+ : `nmake SampleApp`;
45
+ return {
46
+ valid: true,
47
+ command,
48
+ notes: [
49
+ "Generated from local build_matrix.json",
50
+ "Add board-specific prerequisites separately if needed",
51
+ ],
52
+ };
53
+ }
54
+ //# sourceMappingURL=generateBuildCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateBuildCommand.js","sourceRoot":"","sources":["../../src/tools/generateBuildCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;CACzD,CAAC,CAAC;AAIH,MAAM,UAAU,oBAAoB,CAChC,IAA+B;IAE/B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAChD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;IAEtC,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,MAAM,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,QAAQ,8BAA8B,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,QAAQ,8BAA8B,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnF,CAAC;IACL,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO;YACH,KAAK,EAAE,KAAK;YACZ,MAAM;YACN,eAAe,EAAE;gBACb,8CAA8C;gBAC9C,mDAAmD;aACtD;SACJ,CAAC;IACN,CAAC;IAED,MAAM,OAAO,GACT,IAAI,CAAC,SAAS,KAAK,OAAO;QACtB,CAAC,CAAC,2EAA2E,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,qCAAqC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,mCAAmC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,2BAA2B,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE;QACxR,CAAC,CAAC,iBAAiB,CAAC;IAE5B,OAAO;QACH,KAAK,EAAE,IAAI;QACX,OAAO;QACP,KAAK,EAAE;YACH,wCAAwC;YACxC,uDAAuD;SAC1D;KACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { z } from "zod";
2
+ export declare const generateScreenScaffoldInput: z.ZodObject<{
3
+ screen_type: z.ZodString;
4
+ controls: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
5
+ touch: z.ZodDefault<z.ZodBoolean>;
6
+ platform: z.ZodOptional<z.ZodString>;
7
+ style: z.ZodDefault<z.ZodString>;
8
+ flash: z.ZodDefault<z.ZodBoolean>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ screen_type: string;
11
+ controls: string[];
12
+ touch: boolean;
13
+ style: string;
14
+ flash: boolean;
15
+ platform?: string | undefined;
16
+ }, {
17
+ screen_type: string;
18
+ platform?: string | undefined;
19
+ controls?: string[] | undefined;
20
+ touch?: boolean | undefined;
21
+ style?: string | undefined;
22
+ flash?: boolean | undefined;
23
+ }>;
24
+ export type GenerateScreenScaffoldInput = z.infer<typeof generateScreenScaffoldInput>;
25
+ export declare function generateScreenScaffold(args: GenerateScreenScaffoldInput): {
26
+ based_on_sample: string;
27
+ files: {
28
+ path: string;
29
+ content: string;
30
+ }[];
31
+ notes: string[];
32
+ };
@@ -0,0 +1,73 @@
1
+ import { z } from "zod";
2
+ export const generateScreenScaffoldInput = z.object({
3
+ screen_type: z.string(),
4
+ controls: z.array(z.string()).default([]),
5
+ touch: z.boolean().default(true),
6
+ platform: z.string().optional(),
7
+ style: z.string().default("repo-native-c"),
8
+ flash: z.boolean().default(false),
9
+ });
10
+ export function generateScreenScaffold(args) {
11
+ const functionName = `${args.screen_type.replace(/\s+/g, "_").toLowerCase()}_screen_draw`;
12
+ const includes = `#include "Common.h"
13
+ #include "EvePatch.h"${args.flash ? `
14
+ #include "FlashHelper.h"` : ""}`;
15
+ const displayMode = (() => {
16
+ const platform = args.platform?.toLowerCase() ?? "";
17
+ if (platform.includes("directvideo"))
18
+ return "MODE_DIRECTVIDEO";
19
+ if (platform.includes("video"))
20
+ return "MODE_VIDEO";
21
+ if (platform.includes("lvdsrx_sc"))
22
+ return "MODE_LVDSRX_SC";
23
+ if (platform.includes("lvdsrx"))
24
+ return "MODE_LVDSRX";
25
+ return "MODE_PICTURE";
26
+ })();
27
+ const content = `${includes}
28
+
29
+ void ${functionName}(EVE_HalContext* phost) {
30
+ /* Initialize display and load patch */
31
+ s_pHalContext = &s_halContext;
32
+ Gpu_Init(s_pHalContext);
33
+ Display_Config(s_pHalContext, YCBCR, ${displayMode});
34
+
35
+ if (EVE_Load_Patch(s_pHalContext, PATCH_BASE) != 0)
36
+ eve_printf_debug("load patch failed\n");
37
+ else
38
+ eve_printf_debug("load patch ok\n");
39
+
40
+ // read and store calibration settings for later use
41
+ EVE_Calibrate(s_pHalContext);
42
+ Calibration_Save(s_pHalContext);
43
+
44
+ EVE_Util_clearScreen(s_pHalContext);
45
+
46
+ /* Title */
47
+ EVE_CoCmd_text(phost, 40, 30, 30, 0, "${args.screen_type}");
48
+
49
+ /* Controls */
50
+ ${args.controls.map((c, i) => `/* TODO: control ${i + 1}: ${c} */`).join("\n ")}
51
+
52
+ ${args.touch ? "/* TODO: assign TAG values and handle touch routing */" : ""}
53
+
54
+ EVE_Util_clearScreen(s_pHalContext);
55
+ Gpu_Release(s_pHalContext);
56
+ }
57
+ `;
58
+ return {
59
+ based_on_sample: "to-be-selected-by-findRelevantSample",
60
+ files: [
61
+ {
62
+ path: `generated/${functionName}.c`,
63
+ content,
64
+ },
65
+ ],
66
+ notes: [
67
+ "Minimal scaffold only",
68
+ "You still need to add the proper frame begin/end flow",
69
+ "Use the nearest widget/touch sample as the implementation reference",
70
+ ],
71
+ };
72
+ }
73
+ //# sourceMappingURL=generateScreenScaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateScreenScaffold.js","sourceRoot":"","sources":["../../src/tools/generateScreenScaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACzC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC;IAC1C,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACpC,CAAC,CAAC;AAIH,MAAM,UAAU,sBAAsB,CAAC,IAAiC;IACpE,MAAM,YAAY,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,cAAc,CAAC;IAE1F,MAAM,QAAQ,GAAG;uBACE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;yBACX,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAE7B,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QACpD,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;YAAE,OAAO,kBAAkB,CAAC;QAChE,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,YAAY,CAAC;QACpD,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;YAAE,OAAO,gBAAgB,CAAC;QAC5D,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,aAAa,CAAC;QACtD,OAAO,cAAc,CAAC;IAC1B,CAAC,CAAC,EAAE,CAAC;IAEL,MAAM,OAAO,GAAG,GAAG,QAAQ;;OAExB,YAAY;;;;2CAIwB,WAAW;;;;;;;;;;;;;;4CAcV,IAAI,CAAC,WAAW;;;MAGtD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;;MAEhF,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,wDAAwD,CAAC,CAAC,CAAC,EAAE;;;;;CAK/E,CAAC;IAEE,OAAO;QACH,eAAe,EAAE,sCAAsC;QACvD,KAAK,EAAE;YACH;gBACI,IAAI,EAAE,aAAa,YAAY,IAAI;gBACnC,OAAO;aACV;SACJ;QACD,KAAK,EAAE;YACH,uBAAuB;YACvB,uDAAuD;YACvD,qEAAqE;SACxE;KACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { z } from "zod";
2
+ import type { WorkspaceContext } from "../context.js";
3
+ export declare const readSourceFileInput: z.ZodObject<{
4
+ relative_path: z.ZodString;
5
+ }, "strip", z.ZodTypeAny, {
6
+ relative_path: string;
7
+ }, {
8
+ relative_path: string;
9
+ }>;
10
+ export type ReadSourceFileInput = z.infer<typeof readSourceFileInput>;
11
+ export declare function readSourceFile(args: ReadSourceFileInput, context: WorkspaceContext): {
12
+ path: string;
13
+ size_bytes: number;
14
+ content: string;
15
+ };
@@ -0,0 +1,26 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import { z } from "zod";
4
+ export const readSourceFileInput = z.object({
5
+ relative_path: z
6
+ .string()
7
+ .min(1)
8
+ .describe("Path to a source file under the local EveApps repo, for example: SampleApp/Widget/Src/Widget.c"),
9
+ });
10
+ export function readSourceFile(args, context) {
11
+ const repoRoot = path.resolve(context.eveappsRoot ?? context.workspaceRoot);
12
+ const fullPath = path.resolve(repoRoot, args.relative_path);
13
+ const relativePath = path.relative(repoRoot, fullPath);
14
+ if (relativePath.startsWith("..") || path.isAbsolute(relativePath)) {
15
+ throw new Error("relative_path must stay inside the local EveApps repository root.");
16
+ }
17
+ if (!fs.existsSync(fullPath) || !fs.statSync(fullPath).isFile()) {
18
+ throw new Error(`File not found: ${args.relative_path}`);
19
+ }
20
+ return {
21
+ path: relativePath.split(path.sep).join("/"),
22
+ size_bytes: fs.statSync(fullPath).size,
23
+ content: fs.readFileSync(fullPath, "utf-8"),
24
+ };
25
+ }
26
+ //# sourceMappingURL=readSourceFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readSourceFile.js","sourceRoot":"","sources":["../../src/tools/readSourceFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,aAAa,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,gGAAgG,CAAC;CAClH,CAAC,CAAC;AAIH,MAAM,UAAU,cAAc,CAC1B,IAAyB,EACzB,OAAyB;IAEzB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEvD,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACzF,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO;QACH,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5C,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI;QACtC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC;KAC9C,CAAC;AACN,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { z } from "zod";
2
+ export declare const traceFeatureToCommandsInput: z.ZodObject<{
3
+ feature: z.ZodString;
4
+ }, "strip", z.ZodTypeAny, {
5
+ feature: string;
6
+ }, {
7
+ feature: string;
8
+ }>;
9
+ export type TraceFeatureToCommandsInput = z.infer<typeof traceFeatureToCommandsInput>;
10
+ type Command = {
11
+ name: string;
12
+ type?: string;
13
+ level?: string;
14
+ weight?: number;
15
+ };
16
+ export declare function traceFeatureToCommands(args: TraceFeatureToCommandsInput): {
17
+ message: string;
18
+ features_detected?: undefined;
19
+ top_commands?: undefined;
20
+ all_commands?: undefined;
21
+ related_samples?: undefined;
22
+ next_steps?: undefined;
23
+ } | {
24
+ features_detected: string[];
25
+ top_commands: {
26
+ name: string;
27
+ type: string | undefined;
28
+ level: string | undefined;
29
+ reason: string;
30
+ }[];
31
+ all_commands: Command[];
32
+ related_samples: string[];
33
+ next_steps: string[];
34
+ message?: undefined;
35
+ };
36
+ export {};
@@ -0,0 +1,84 @@
1
+ import { z } from "zod";
2
+ import { loadFeatureGraph } from "../lib/loadIndex.js";
3
+ export const traceFeatureToCommandsInput = z.object({
4
+ feature: z.string().min(2),
5
+ });
6
+ export function traceFeatureToCommands(args) {
7
+ const graph = loadFeatureGraph();
8
+ const input = args.feature.toLowerCase();
9
+ //callback
10
+ const matches = Object.entries(graph)
11
+ .filter(([feature, meta]) => {
12
+ return (input.includes(feature.toLowerCase()) ||
13
+ meta.keywords.some((k) => input.includes(k.toLowerCase())));
14
+ })
15
+ .map(([feature, meta]) => ({
16
+ feature,
17
+ commands: meta.commands,
18
+ samples: meta.samples,
19
+ }));
20
+ if (matches.length === 0) {
21
+ return {
22
+ message: "No matching feature found.",
23
+ };
24
+ }
25
+ // commands
26
+ const allCommands = matches.flatMap((m) => m.commands);
27
+ // remove duplicate and keep weight
28
+ const dedup = new Map();
29
+ for (const cmd of allCommands) {
30
+ const existing = dedup.get(cmd.name);
31
+ if (!existing || (cmd.weight ?? 0) > (existing.weight ?? 0)) {
32
+ dedup.set(cmd.name, cmd);
33
+ }
34
+ }
35
+ const uniqueCommands = Array.from(dedup.values());
36
+ // sort
37
+ const ranked = uniqueCommands.sort((a, b) => {
38
+ const wa = a.weight ?? 0;
39
+ const wb = b.weight ?? 0;
40
+ if (wb !== wa)
41
+ return wb - wa;
42
+ // high-level API
43
+ if (a.level === "high" && b.level !== "high")
44
+ return -1;
45
+ if (b.level === "high" && a.level !== "high")
46
+ return 1;
47
+ return 0;
48
+ });
49
+ // remove duplicate
50
+ const samples = [
51
+ ...new Set(matches.flatMap((m) => m.samples)),
52
+ ];
53
+ // explain
54
+ function explain(cmd) {
55
+ if (cmd.type === "coprocessor") {
56
+ return "High-level API, recommended for UI development";
57
+ }
58
+ if (cmd.type === "display_list") {
59
+ return "Low-level rendering command";
60
+ }
61
+ if (cmd.type === "hal") {
62
+ return "Hardware-level API";
63
+ }
64
+ return "Related command";
65
+ }
66
+ // output
67
+ return {
68
+ features_detected: matches.map((m) => m.feature),
69
+ top_commands: ranked.slice(0, 5).map((c) => ({
70
+ name: c.name,
71
+ type: c.type,
72
+ level: c.level,
73
+ reason: explain(c),
74
+ })),
75
+ all_commands: ranked, // context to AI
76
+ related_samples: samples.slice(0, 5),
77
+ next_steps: [
78
+ "Start with top_commands (prefer high-level APIs)",
79
+ "Refer to related_samples for working examples",
80
+ "Integrate commands into your rendering loop",
81
+ ],
82
+ };
83
+ }
84
+ //# sourceMappingURL=traceFeatureToCommands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traceFeatureToCommands.js","sourceRoot":"","sources":["../../src/tools/traceFeatureToCommands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { z } from "zod";
2
+ export declare const validateBt820CodeInput: z.ZodObject<{
3
+ code: z.ZodString;
4
+ platform: z.ZodOptional<z.ZodString>;
5
+ display: z.ZodOptional<z.ZodString>;
6
+ }, "strip", z.ZodTypeAny, {
7
+ code: string;
8
+ platform?: string | undefined;
9
+ display?: string | undefined;
10
+ }, {
11
+ code: string;
12
+ platform?: string | undefined;
13
+ display?: string | undefined;
14
+ }>;
15
+ export type ValidateBt820CodeInput = z.infer<typeof validateBt820CodeInput>;
16
+ export declare function validateBt820Code(args: ValidateBt820CodeInput): {
17
+ issues: {
18
+ severity: "high" | "medium" | "low";
19
+ title: string;
20
+ detail: string;
21
+ suggestion: string;
22
+ }[];
23
+ summary: {
24
+ high: number;
25
+ medium: number;
26
+ low: number;
27
+ };
28
+ };
@@ -0,0 +1,45 @@
1
+ import { z } from "zod";
2
+ export const validateBt820CodeInput = z.object({
3
+ code: z.string().min(1),
4
+ platform: z.string().optional(),
5
+ display: z.string().optional(),
6
+ });
7
+ export function validateBt820Code(args) {
8
+ const code = args.code;
9
+ const issues = [];
10
+ if (!/EVE_CoCmd_text|EVE_CoCmd_button|EVE_CoCmd_/m.test(code)) {
11
+ issues.push({
12
+ severity: "low",
13
+ title: "No obvious coprocessor commands detected",
14
+ detail: "The snippet does not appear to use known EVE command helpers.",
15
+ suggestion: "Check whether this is the intended rendering layer.",
16
+ });
17
+ }
18
+ const tagMatches = [...code.matchAll(/\bTAG\s*\(\s*(\d+)\s*\)/g)].map((m) => m[1]);
19
+ const duplicates = tagMatches.filter((tag, i) => tagMatches.indexOf(tag) !== i);
20
+ if (duplicates.length > 0) {
21
+ issues.push({
22
+ severity: "medium",
23
+ title: "Duplicate touch tag values",
24
+ detail: `Repeated TAG ids found: ${[...new Set(duplicates)].join(", ")}`,
25
+ suggestion: "Assign unique TAG values to each interactive control.",
26
+ });
27
+ }
28
+ if (!/DISPLAY|swap|Swap|DL_DISPLAY/i.test(code)) {
29
+ issues.push({
30
+ severity: "medium",
31
+ title: "Possible incomplete frame/display-list sequence",
32
+ detail: "No obvious display termination or swap marker found.",
33
+ suggestion: "Verify the display-list end and frame swap sequence.",
34
+ });
35
+ }
36
+ return {
37
+ issues,
38
+ summary: {
39
+ high: issues.filter((i) => i.severity === "high").length,
40
+ medium: issues.filter((i) => i.severity === "medium").length,
41
+ low: issues.filter((i) => i.severity === "low").length,
42
+ },
43
+ };
44
+ }
45
+ //# sourceMappingURL=validateBt820Code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateBt820Code.js","sourceRoot":"","sources":["../../src/tools/validateBt820Code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAIH,MAAM,UAAU,iBAAiB,CAAC,IAA4B;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,MAAM,MAAM,GAKP,EAAE,CAAC;IAER,IAAI,CAAC,6CAA6C,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5D,MAAM,CAAC,IAAI,CAAC;YACR,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,0CAA0C;YACjD,MAAM,EAAE,+DAA+D;YACvE,UAAU,EAAE,qDAAqD;SACpE,CAAC,CAAC;IACP,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAChF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC;YACR,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,4BAA4B;YACnC,MAAM,EAAE,2BAA2B,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACxE,UAAU,EAAE,uDAAuD;SACtE,CAAC,CAAC;IACP,CAAC;IAED,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC;YACR,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,iDAAiD;YACxD,MAAM,EAAE,sDAAsD;YAC9D,UAAU,EAAE,sDAAsD;SACrE,CAAC,CAAC;IACP,CAAC;IAED,OAAO;QACH,MAAM;QACN,OAAO,EAAE;YACL,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;YACxD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,MAAM;YAC5D,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,MAAM;SACzD;KACJ,CAAC;AACN,CAAC"}