kibi-cli 2.0.0 → 2.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.
Files changed (217) hide show
  1. package/dist/cli-register-proof.d.ts.map +1 -1
  2. package/dist/cli-register-proof.js +25 -1
  3. package/dist/cli-register-reporting.d.ts.map +1 -1
  4. package/dist/cli-register-reporting.js +6 -0
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +2 -0
  7. package/dist/commands/check-generated.d.ts +7 -0
  8. package/dist/commands/check-generated.d.ts.map +1 -0
  9. package/dist/commands/check-generated.js +192 -0
  10. package/dist/commands/check.d.ts.map +1 -1
  11. package/dist/commands/check.js +3 -2
  12. package/dist/commands/doctor.d.ts.map +1 -1
  13. package/dist/commands/doctor.js +122 -1
  14. package/dist/commands/engine.d.ts.map +1 -1
  15. package/dist/commands/engine.js +3 -1
  16. package/dist/commands/init-helpers.d.ts.map +1 -1
  17. package/dist/commands/init-helpers.js +13 -7
  18. package/dist/commands/proof-explain.d.ts +10 -0
  19. package/dist/commands/proof-explain.d.ts.map +1 -0
  20. package/dist/commands/proof-explain.js +45 -0
  21. package/dist/commands/proof-impact.d.ts +7 -0
  22. package/dist/commands/proof-impact.d.ts.map +1 -0
  23. package/dist/commands/proof-impact.js +39 -0
  24. package/dist/commands/proof-migrate-legacy.js +1 -1
  25. package/dist/commands/proof-prune.js +1 -1
  26. package/dist/commands/prove.js +4 -4
  27. package/dist/commands/report.d.ts.map +1 -1
  28. package/dist/commands/report.js +17 -2
  29. package/dist/commands/sync/manifest.d.ts +1 -0
  30. package/dist/commands/sync/manifest.d.ts.map +1 -1
  31. package/dist/commands/sync/manifest.js +18 -16
  32. package/dist/commands/sync/persistence.d.ts.map +1 -1
  33. package/dist/commands/sync/persistence.js +6 -0
  34. package/dist/engine.d.ts +3 -1
  35. package/dist/engine.d.ts.map +1 -1
  36. package/dist/engine.js +134 -61
  37. package/dist/env/bootstrap.d.ts +84 -0
  38. package/dist/env/bootstrap.d.ts.map +1 -0
  39. package/dist/env/bootstrap.js +310 -0
  40. package/dist/extractors/manifest.d.ts.map +1 -1
  41. package/dist/extractors/manifest.js +1 -1
  42. package/dist/extractors/markdown.d.ts +2 -0
  43. package/dist/extractors/markdown.d.ts.map +1 -1
  44. package/dist/extractors/markdown.js +19 -0
  45. package/dist/extractors/symbols-coordinator.d.ts +8 -0
  46. package/dist/extractors/symbols-coordinator.d.ts.map +1 -1
  47. package/dist/extractors/symbols-coordinator.js +40 -0
  48. package/dist/extractors/symbols-ts.d.ts +8 -19
  49. package/dist/extractors/symbols-ts.d.ts.map +1 -1
  50. package/dist/extractors/symbols-ts.js +33 -503
  51. package/dist/intent-search.d.ts.map +1 -1
  52. package/dist/intent-search.js +4 -5
  53. package/dist/operations/modeling/model-requirement.d.ts.map +1 -1
  54. package/dist/operations/modeling/model-requirement.js +4 -0
  55. package/dist/operations/modeling/suggest-predicates.d.ts +1 -1
  56. package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
  57. package/dist/operations/modeling/suggest-predicates.js +30 -3
  58. package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -1
  59. package/dist/operations/mutation/symbol-granularity.js +9 -87
  60. package/dist/operations/planning/compile-intent.d.ts +49 -0
  61. package/dist/operations/planning/compile-intent.d.ts.map +1 -1
  62. package/dist/operations/planning/compile-intent.js +63 -3
  63. package/dist/operations/proof/baseline-diff.d.ts +41 -0
  64. package/dist/operations/proof/baseline-diff.d.ts.map +1 -0
  65. package/dist/operations/proof/baseline-diff.js +153 -0
  66. package/dist/operations/proof/explain.d.ts +75 -0
  67. package/dist/operations/proof/explain.d.ts.map +1 -0
  68. package/dist/operations/proof/explain.js +294 -0
  69. package/dist/operations/proof/impact.d.ts +45 -0
  70. package/dist/operations/proof/impact.d.ts.map +1 -0
  71. package/dist/operations/proof/impact.js +118 -0
  72. package/dist/operations/proof/ingest-proof.d.ts.map +1 -1
  73. package/dist/operations/proof/ingest-proof.js +44 -3
  74. package/dist/operations/proof/migrate-legacy-receipts.d.ts.map +1 -1
  75. package/dist/operations/proof/migrate-legacy-receipts.js +21 -17
  76. package/dist/operations/proof/prune-receipts.js +1 -1
  77. package/dist/operations/proof/receipt-document.js +2 -2
  78. package/dist/operations/semantic-advisor/analysis-receipt.d.ts.map +1 -1
  79. package/dist/operations/semantic-advisor/analysis-receipt.js +3 -9
  80. package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
  81. package/dist/operations/semantic-advisor/analyze-prose.js +18 -67
  82. package/dist/operations/semantic-advisor/plugin-orchestration.d.ts +63 -0
  83. package/dist/operations/semantic-advisor/plugin-orchestration.d.ts.map +1 -0
  84. package/dist/operations/semantic-advisor/plugin-orchestration.js +489 -0
  85. package/dist/operations/semantic-advisor/predicate-rules-core.d.ts +15 -2
  86. package/dist/operations/semantic-advisor/predicate-rules-core.d.ts.map +1 -1
  87. package/dist/operations/semantic-advisor/predicate-rules-core.js +7 -140
  88. package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts +11 -12
  89. package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts.map +1 -1
  90. package/dist/operations/semantic-advisor/predicate-rules-launcher.js +6 -94
  91. package/dist/operations/semantic-advisor/predicate-rules-policy.d.ts +16 -0
  92. package/dist/operations/semantic-advisor/predicate-rules-policy.d.ts.map +1 -1
  93. package/dist/operations/semantic-advisor/predicate-rules-policy.js +7 -150
  94. package/dist/operations/semantic-advisor/predicate-rules-product-tail.d.ts +9 -0
  95. package/dist/operations/semantic-advisor/predicate-rules-product-tail.d.ts.map +1 -1
  96. package/dist/operations/semantic-advisor/predicate-rules-product-tail.js +7 -102
  97. package/dist/operations/semantic-advisor/predicate-rules-product.d.ts +13 -0
  98. package/dist/operations/semantic-advisor/predicate-rules-product.d.ts.map +1 -1
  99. package/dist/operations/semantic-advisor/predicate-rules-product.js +7 -133
  100. package/dist/operations/semantic-advisor/types.d.ts +1 -0
  101. package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
  102. package/dist/plugins/compose-ontology-packs.d.ts +51 -0
  103. package/dist/plugins/compose-ontology-packs.d.ts.map +1 -0
  104. package/dist/plugins/compose-ontology-packs.js +257 -0
  105. package/dist/plugins/compose-semantic-classifier.d.ts +42 -0
  106. package/dist/plugins/compose-semantic-classifier.d.ts.map +1 -0
  107. package/dist/plugins/compose-semantic-classifier.js +211 -0
  108. package/dist/plugins/external-allowlist.d.ts +10 -0
  109. package/dist/plugins/external-allowlist.d.ts.map +1 -0
  110. package/dist/plugins/external-allowlist.js +16 -0
  111. package/dist/plugins/index.d.ts +9 -0
  112. package/dist/plugins/index.d.ts.map +1 -0
  113. package/dist/plugins/index.js +33 -0
  114. package/dist/plugins/load-plugin.d.ts +19 -0
  115. package/dist/plugins/load-plugin.d.ts.map +1 -0
  116. package/dist/plugins/load-plugin.js +59 -0
  117. package/dist/plugins/project-config.d.ts +28 -0
  118. package/dist/plugins/project-config.d.ts.map +1 -0
  119. package/dist/plugins/project-config.js +90 -0
  120. package/dist/plugins/registry.d.ts +93 -0
  121. package/dist/plugins/registry.d.ts.map +1 -0
  122. package/dist/plugins/registry.js +338 -0
  123. package/dist/plugins/resolve-package.d.ts +47 -0
  124. package/dist/plugins/resolve-package.d.ts.map +1 -0
  125. package/dist/plugins/resolve-package.js +262 -0
  126. package/dist/plugins/source-analysis-service.d.ts +44 -0
  127. package/dist/plugins/source-analysis-service.d.ts.map +1 -0
  128. package/dist/plugins/source-analysis-service.js +232 -0
  129. package/dist/prolog/janitor.d.ts.map +1 -1
  130. package/dist/prolog/janitor.js +1 -1
  131. package/dist/prolog/store-lock.d.ts +1 -1
  132. package/dist/prolog/store-lock.d.ts.map +1 -1
  133. package/dist/proof/inspect.js +1 -1
  134. package/dist/proof/producers/playwright-case-id.js +2 -2
  135. package/dist/proof/producers/playwright-reporter.js +4 -4
  136. package/dist/public/extractors/symbols-coordinator.d.ts +1 -1
  137. package/dist/public/extractors/symbols-coordinator.d.ts.map +1 -1
  138. package/dist/public/extractors/symbols-coordinator.js +1 -1
  139. package/dist/public/impact/analyzer.d.ts +1 -1
  140. package/dist/public/impact/analyzer.d.ts.map +1 -1
  141. package/dist/public/impact/analyzer.js +6 -4
  142. package/dist/public/operations/catalog.d.ts +4 -1
  143. package/dist/public/operations/catalog.d.ts.map +1 -1
  144. package/dist/public/operations/check-executor.js +1 -1
  145. package/dist/public/operations/check-helpers.d.ts +1 -1
  146. package/dist/public/operations/check-helpers.d.ts.map +1 -1
  147. package/dist/public/operations/check-helpers.js +1 -1
  148. package/dist/public/operations/contracts.d.ts.map +1 -1
  149. package/dist/public/operations/contracts.js +35 -12
  150. package/dist/public/operations/discovery-entities.d.ts +12 -0
  151. package/dist/public/operations/discovery-entities.d.ts.map +1 -1
  152. package/dist/public/operations/discovery-entities.js +34 -0
  153. package/dist/public/operations/discovery-executors.d.ts.map +1 -1
  154. package/dist/public/operations/discovery-executors.js +23 -18
  155. package/dist/public/operations/prolog-json.d.ts +1 -1
  156. package/dist/public/operations/prolog-json.d.ts.map +1 -1
  157. package/dist/public/operations/prolog-json.js +7 -7
  158. package/dist/public/operations/runtime-types.d.ts +16 -1
  159. package/dist/public/operations/runtime-types.d.ts.map +1 -1
  160. package/dist/public/operations/specs/check-rules.generated.d.ts +1 -1
  161. package/dist/public/operations/specs/check-rules.generated.d.ts.map +1 -1
  162. package/dist/public/operations/specs/check-rules.generated.js +2 -1
  163. package/dist/public/operations/specs/check.d.ts +1 -1
  164. package/dist/public/operations/specs/discovery.d.ts +3 -0
  165. package/dist/public/operations/specs/discovery.d.ts.map +1 -1
  166. package/dist/public/operations/specs/discovery.js +3 -0
  167. package/dist/public/operations/specs/proof.js +1 -1
  168. package/dist/public/operations/specs/reporting.d.ts +1 -0
  169. package/dist/public/operations/specs/reporting.d.ts.map +1 -1
  170. package/dist/public/operations/specs/reporting.js +2 -2
  171. package/dist/public/operations/specs/semantic.d.ts +1 -1
  172. package/dist/public/operations/specs/semantic.d.ts.map +1 -1
  173. package/dist/public/operations/specs/semantic.js +54 -4
  174. package/dist/public/operations/symbol-repair-plan.d.ts.map +1 -1
  175. package/dist/public/operations/symbol-repair-plan.js +3 -1
  176. package/dist/public/operations/types.d.ts +5 -0
  177. package/dist/public/operations/types.d.ts.map +1 -1
  178. package/dist/public/proof-protocol.js +4 -4
  179. package/dist/public/skills/kibi-usage/SKILL.md +4 -1
  180. package/dist/public/skills/kibi-usage/resources/proof.md +45 -0
  181. package/dist/public/symbol-granularity.d.ts +1 -1
  182. package/dist/public/symbol-granularity.d.ts.map +1 -1
  183. package/dist/public/symbol-granularity.generated.d.ts.map +1 -1
  184. package/dist/public/symbol-granularity.generated.js +38 -5
  185. package/dist/report/html-report.css +1239 -281
  186. package/dist/runtime/cli-runtime.d.ts.map +1 -1
  187. package/dist/runtime/cli-runtime.js +18 -0
  188. package/dist/traceability/symbol-extract.d.ts +24 -7
  189. package/dist/traceability/symbol-extract.d.ts.map +1 -1
  190. package/dist/traceability/symbol-extract.js +64 -208
  191. package/dist/utils/rule-registry.generated.d.ts +5 -0
  192. package/dist/utils/rule-registry.generated.d.ts.map +1 -1
  193. package/dist/utils/rule-registry.generated.js +6 -0
  194. package/package.json +14 -11
  195. package/src/public/extractors/symbols-coordinator.ts +1 -0
  196. package/src/public/impact/analyzer.ts +15 -12
  197. package/src/public/operations/check-executor.ts +1 -1
  198. package/src/public/operations/check-helpers.ts +2 -2
  199. package/src/public/operations/contracts.ts +40 -12
  200. package/src/public/operations/discovery-entities.ts +46 -0
  201. package/src/public/operations/discovery-executors.ts +39 -26
  202. package/src/public/operations/prolog-json.ts +13 -5
  203. package/src/public/operations/runtime-types.ts +21 -2
  204. package/src/public/operations/specs/check-rules.generated.ts +2 -1
  205. package/src/public/operations/specs/discovery.ts +3 -0
  206. package/src/public/operations/specs/proof.ts +1 -1
  207. package/src/public/operations/specs/reporting.ts +2 -2
  208. package/src/public/operations/specs/semantic.ts +79 -17
  209. package/src/public/operations/symbol-repair-plan.ts +3 -4
  210. package/src/public/operations/types.ts +5 -0
  211. package/src/public/proof-fingerprint.ts +1 -1
  212. package/src/public/proof-protocol-types.d.ts +1 -1
  213. package/src/public/proof-protocol.ts +4 -4
  214. package/src/public/skills/kibi-usage/SKILL.md +4 -1
  215. package/src/public/skills/kibi-usage/resources/proof.md +45 -0
  216. package/src/public/symbol-granularity.generated.ts +45 -12
  217. package/src/public/symbol-granularity.ts +3 -3
@@ -15,526 +15,56 @@
15
15
  You should have received a copy of the GNU Affero General Public License
16
16
  along with this program. If not, see <https://www.gnu.org/licenses/>.
17
17
  */
18
- import { access, readFile } from "node:fs/promises";
19
- import * as path from "node:path";
20
- import { Project, ScriptKind, SyntaxKind, } from "ts-morph";
21
- const SUPPORTED_SOURCE_EXTENSIONS = new Set([
22
- ".ts",
23
- ".tsx",
24
- ".js",
25
- ".jsx",
26
- ".mts",
27
- ".cts",
28
- ".mjs",
29
- ".cjs",
30
- ]);
18
+ import { createBuiltinTsMorphSourceAnalysisProvider, enrichSymbolCoordinatesWithTsMorph as enrichBuiltinSymbolCoordinates, isPrivateClassMember as isBuiltinPrivateClassMember, onlyCandidate as onlyBuiltinCandidate, } from "kibi-plugin-builtin";
19
+ // implements REQ-capability-plugin-builtin-parity-v1
20
+ export const isPrivateClassMember = isBuiltinPrivateClassMember;
21
+ /**
22
+ * Thin host adapter over kibi-plugin-builtin's ts-morph extractor.
23
+ * Preserves the historical `ts-morph` provider id for sync callers and tests.
24
+ */
31
25
  // implements REQ-001
32
26
  export function createTsMorphSourceAnalysisProvider() {
33
- const project = new Project({
34
- skipAddingFilesFromTsConfig: true,
35
- });
27
+ const provider = createBuiltinTsMorphSourceAnalysisProvider();
36
28
  return {
37
29
  id: "ts-morph",
38
30
  supportsFile(filePath) {
39
- return SUPPORTED_SOURCE_EXTENSIONS.has(path.extname(filePath).toLowerCase());
31
+ return provider.supportsFile(filePath);
40
32
  },
41
33
  analyzeText(filePath, content) {
42
- const sourceFile = project.createSourceFile(filePath, content, {
43
- overwrite: true,
44
- scriptKind: chooseScriptKind(filePath),
45
- });
34
+ const result = provider.analyzeText(filePath, content);
46
35
  return {
47
- sourceFile: filePath,
48
- language: inferSourceLanguage(filePath),
36
+ sourceFile: result.sourceFile,
37
+ language: result.language,
49
38
  providerId: "ts-morph",
50
39
  module: {
51
- title: inferModuleTitle(filePath),
52
- language: inferSourceLanguage(filePath),
53
- analysisMode: "parser",
40
+ title: result.module.title,
41
+ language: result.module.language,
42
+ analysisMode: result.module.analysisMode,
43
+ ...(result.module.fallbackReason
44
+ ? { fallbackReason: result.module.fallbackReason }
45
+ : {}),
54
46
  },
55
- symbols: collectSourceSymbols(sourceFile),
47
+ symbols: result.symbols.map((symbol) => ({
48
+ name: symbol.name,
49
+ kind: symbol.kind,
50
+ startLine: symbol.startLine,
51
+ startColumn: symbol.startColumn,
52
+ endLine: symbol.endLine,
53
+ endColumn: symbol.endColumn,
54
+ ...(symbol.directiveText
55
+ ? { directiveText: symbol.directiveText }
56
+ : {}),
57
+ })),
56
58
  };
57
59
  },
58
60
  };
59
61
  }
62
+ // implements REQ-capability-plugin-builtin-parity-v1
60
63
  export async function enrichSymbolCoordinatesWithTsMorph(entries, workspaceRoot) {
61
64
  // implements REQ-vscode-traceability
62
- const project = new Project({
63
- skipAddingFilesFromTsConfig: true,
64
- });
65
- const sourceFileCache = new Map();
66
- const enriched = [];
67
- for (const entry of entries) {
68
- try {
69
- const absolutePath = await resolveSourcePath(entry.sourceFile, workspaceRoot);
70
- if (!absolutePath) {
71
- enriched.push(entry);
72
- continue;
73
- }
74
- const sourceFile = getOrAddSourceFile(project, sourceFileCache, absolutePath);
75
- if (!sourceFile) {
76
- enriched.push(await enrichWithTextFallback(entry, absolutePath));
77
- continue;
78
- }
79
- const match = findNamedDeclaration(sourceFile, entry.title);
80
- if (!match) {
81
- enriched.push(entry);
82
- continue;
83
- }
84
- const nameStart = match.getNameNode().getStart();
85
- const end = match.node.getEnd();
86
- const startLc = sourceFile.getLineAndColumnAtPos(nameStart);
87
- const endLc = sourceFile.getLineAndColumnAtPos(end);
88
- const coordinates = {
89
- sourceLine: startLc.line,
90
- sourceColumn: Math.max(0, startLc.column - 1),
91
- sourceEndLine: endLc.line,
92
- sourceEndColumn: Math.max(0, endLc.column - 1),
93
- coordinatesGeneratedAt: new Date().toISOString(),
94
- };
95
- enriched.push({
96
- ...entry,
97
- ...coordinates,
98
- });
99
- }
100
- catch (error) {
101
- const message = error instanceof Error ? error.message : String(error);
102
- console.warn(`[kibi] Failed to enrich symbol coordinates for ${entry.id}: ${message}`);
103
- const absolutePath = await resolveSourcePath(entry.sourceFile, workspaceRoot);
104
- if (!absolutePath) {
105
- enriched.push(entry);
106
- continue;
107
- }
108
- enriched.push(await enrichWithTextFallback(entry, absolutePath));
109
- }
110
- }
111
- return enriched;
112
- }
113
- async function resolveSourcePath(sourceFile, workspaceRoot) {
114
- if (!sourceFile)
115
- return null;
116
- const absolute = path.isAbsolute(sourceFile)
117
- ? sourceFile
118
- : path.resolve(workspaceRoot, sourceFile);
119
- const ext = path.extname(absolute).toLowerCase();
120
- if (!SUPPORTED_SOURCE_EXTENSIONS.has(ext))
121
- return null;
122
- try {
123
- await access(absolute);
124
- }
125
- catch {
126
- return null;
127
- }
128
- return absolute;
129
- }
130
- function getOrAddSourceFile(project, cache, absolutePath) {
131
- const cached = cache.get(absolutePath);
132
- if (cached)
133
- return cached;
134
- try {
135
- const sourceFile = project.addSourceFileAtPath(absolutePath);
136
- cache.set(absolutePath, sourceFile);
137
- return sourceFile;
138
- }
139
- catch {
140
- return null;
141
- }
142
- }
143
- function enrichWithTextFallback(entry, absolutePath) {
144
- return enrichWithTextFallbackInternal(entry, absolutePath);
145
- }
146
- async function enrichWithTextFallbackInternal(entry, absolutePath) {
147
- try {
148
- const content = await readFile(absolutePath, "utf8");
149
- const lines = content.split(/\r?\n/);
150
- const escapedTitle = entry.title.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
151
- const pattern = new RegExp(`\\b${escapedTitle}\\b`);
152
- for (let index = 0; index < lines.length; index++) {
153
- const line = lines[index];
154
- if (!line)
155
- continue;
156
- const match = pattern.exec(line);
157
- if (!match || match.index < 0)
158
- continue;
159
- return {
160
- ...entry,
161
- sourceLine: index + 1,
162
- sourceColumn: match.index,
163
- sourceEndLine: index + 1,
164
- sourceEndColumn: match.index + entry.title.length,
165
- coordinatesGeneratedAt: new Date().toISOString(),
166
- };
167
- }
168
- return entry;
169
- }
170
- catch {
171
- return entry;
172
- }
173
- }
174
- function collectSourceSymbols(sourceFile) {
175
- const symbols = [];
176
- for (const decl of sourceFile.getFunctions()) {
177
- if (!decl.isExported())
178
- continue;
179
- symbols.push(toSourceSymbolAnalysis(sourceFile, decl.getName() ?? "<anonymous>", "function", decl.getNameNode() ?? decl, decl, `${decl.getFullText()}\n${decl
180
- .getJsDocs()
181
- .map((doc) => doc.getFullText())
182
- .join("\n")}`));
183
- }
184
- for (const decl of sourceFile.getClasses()) {
185
- if (!decl.isExported())
186
- continue;
187
- symbols.push(toSourceSymbolAnalysis(sourceFile, decl.getName() ?? "<anonymous>", "class", decl.getNameNode() ?? decl, decl, decl
188
- .getJsDocs()
189
- .map((doc) => doc.getFullText())
190
- .join("\n")));
191
- appendClassMembers(sourceFile, decl, decl.getName(), symbols);
192
- }
193
- for (const decl of sourceFile.getInterfaces()) {
194
- if (!decl.isExported())
195
- continue;
196
- symbols.push(toSourceSymbolAnalysis(sourceFile, decl.getName() ?? "<anonymous>", "interface", decl.getNameNode() ?? decl, decl, decl.getText()));
197
- }
198
- for (const decl of sourceFile.getTypeAliases()) {
199
- if (!decl.isExported())
200
- continue;
201
- symbols.push(toSourceSymbolAnalysis(sourceFile, decl.getName() ?? "<anonymous>", "type", decl.getNameNode() ?? decl, decl, decl.getText()));
202
- }
203
- for (const decl of sourceFile.getEnums()) {
204
- if (!decl.isExported())
205
- continue;
206
- symbols.push(toSourceSymbolAnalysis(sourceFile, decl.getName() ?? "<anonymous>", "enum", decl.getNameNode() ?? decl, decl, decl.getText()));
207
- }
208
- for (const statement of sourceFile.getVariableStatements()) {
209
- if (!statement.isExported())
210
- continue;
211
- for (const declaration of statement.getDeclarations()) {
212
- symbols.push(toSourceSymbolAnalysis(sourceFile, declaration.getName(), "variable", declaration.getNameNode() ?? declaration, declaration, declaration.getText()));
213
- const classExpression = declaration.getInitializerIfKind(SyntaxKind.ClassExpression);
214
- if (classExpression) {
215
- appendClassMembers(sourceFile, classExpression, declaration.getName(), symbols);
216
- }
217
- }
218
- }
219
- return symbols;
220
- }
221
- function appendClassMembers(sourceFile, declaration, className, symbols) {
222
- for (const method of declaration.getMethods()) {
223
- if (isPrivateClassMember(method))
224
- continue;
225
- symbols.push(toSourceSymbolAnalysis(sourceFile, formatMethodSymbolName(className, method.getName()), "method", method.getNameNode() ?? method, method, `${method.getFullText()}\n${method
226
- .getJsDocs()
227
- .map((doc) => doc.getFullText())
228
- .join("\n")}`));
229
- }
230
- for (const property of declaration.getProperties()) {
231
- if (isPrivateClassMember(property))
232
- continue;
233
- symbols.push(toSourceSymbolAnalysis(sourceFile, formatMethodSymbolName(className, property.getName()), "property", property.getNameNode() ?? property, property, `${property.getFullText()}\n${property
234
- .getJsDocs()
235
- .map((doc) => doc.getFullText())
236
- .join("\n")}`));
237
- }
238
- for (const accessor of [
239
- ...declaration.getGetAccessors(),
240
- ...declaration.getSetAccessors(),
241
- ]) {
242
- if (isPrivateClassMember(accessor))
243
- continue;
244
- symbols.push(toSourceSymbolAnalysis(sourceFile, formatMethodSymbolName(className, accessor.getName()), "accessor", accessor.getNameNode() ?? accessor, accessor, `${accessor.getFullText()}\n${accessor
245
- .getJsDocs()
246
- .map((doc) => doc.getFullText())
247
- .join("\n")}`));
248
- }
249
- }
250
- function isPrivateClassMember(member) {
251
- return (member.hasModifier(SyntaxKind.PrivateKeyword) ||
252
- member.getName().startsWith("#"));
253
- }
254
- function toSourceSymbolAnalysis(sourceFile, name, kind, startNode, endNode, directiveText) {
255
- const start = sourceFile.getLineAndColumnAtPos(startNode.getStart());
256
- const end = sourceFile.getLineAndColumnAtPos(endNode.getEnd());
257
- return {
258
- name,
259
- kind,
260
- startLine: start.line,
261
- startColumn: Math.max(0, start.column - 1),
262
- endLine: end.line,
263
- endColumn: Math.max(0, end.column - 1),
264
- directiveText,
265
- };
266
- }
267
- function formatMethodSymbolName(className, methodName) {
268
- return className ? `${className}.${methodName}` : methodName;
269
- }
270
- function chooseScriptKind(filePath) {
271
- const lower = filePath.toLowerCase();
272
- if (lower.endsWith(".tsx"))
273
- return ScriptKind.TSX;
274
- if (lower.endsWith(".ts") ||
275
- lower.endsWith(".mts") ||
276
- lower.endsWith(".cts")) {
277
- return ScriptKind.TS;
278
- }
279
- if (lower.endsWith(".jsx"))
280
- return ScriptKind.JSX;
281
- return ScriptKind.JS;
282
- }
283
- function inferSourceLanguage(filePath) {
284
- const extension = path.extname(filePath).toLowerCase();
285
- if ([".ts", ".tsx", ".mts", ".cts"].includes(extension)) {
286
- return "typescript";
287
- }
288
- return "javascript";
289
- }
290
- function inferModuleTitle(filePath) {
291
- const extension = path.extname(filePath);
292
- const basename = path.basename(filePath, extension);
293
- return basename.length > 0 ? basename : path.basename(filePath);
65
+ return enrichBuiltinSymbolCoordinates(entries, workspaceRoot);
294
66
  }
67
+ // implements REQ-capability-plugin-builtin-parity-v1
295
68
  export function onlyCandidate(candidates) {
296
- if (candidates.length !== 1)
297
- return undefined;
298
- return candidates[0];
299
- }
300
- function findNamedDeclaration(sourceFile, title) {
301
- const qualifiedMethod = parseQualifiedMethodTitle(title);
302
- if (qualifiedMethod) {
303
- for (const cls of sourceFile.getClasses()) {
304
- if (cls.getName() !== qualifiedMethod.className)
305
- continue;
306
- const match = findClassMember(cls, qualifiedMethod.methodName);
307
- if (match)
308
- return match;
309
- }
310
- for (const statement of sourceFile.getVariableStatements()) {
311
- if (!statement.isExported())
312
- continue;
313
- for (const declaration of statement.getDeclarations()) {
314
- if (declaration.getName() !== qualifiedMethod.className)
315
- continue;
316
- const classExpression = declaration.getInitializerIfKind(SyntaxKind.ClassExpression);
317
- const match = classExpression
318
- ? findClassMember(classExpression, qualifiedMethod.methodName)
319
- : null;
320
- if (match)
321
- return match;
322
- }
323
- }
324
- return null;
325
- }
326
- const candidates = [];
327
- for (const decl of sourceFile.getFunctions()) {
328
- if (!decl.isExported())
329
- continue;
330
- if (decl.getName() !== title)
331
- continue;
332
- const nameNode = decl.getNameNode();
333
- if (!nameNode)
334
- continue;
335
- candidates.push({ node: decl, getNameNode: () => nameNode });
336
- }
337
- for (const decl of sourceFile.getClasses()) {
338
- if (!decl.isExported())
339
- continue;
340
- if (decl.getName() !== title)
341
- continue;
342
- const nameNode = decl.getNameNode();
343
- if (!nameNode)
344
- continue;
345
- candidates.push({ node: decl, getNameNode: () => nameNode });
346
- }
347
- for (const decl of sourceFile.getInterfaces()) {
348
- if (!decl.isExported())
349
- continue;
350
- if (decl.getName() !== title)
351
- continue;
352
- const nameNode = decl.getNameNode();
353
- if (!nameNode)
354
- continue;
355
- candidates.push({ node: decl, getNameNode: () => nameNode });
356
- }
357
- for (const decl of sourceFile.getTypeAliases()) {
358
- if (!decl.isExported())
359
- continue;
360
- if (decl.getName() !== title)
361
- continue;
362
- const nameNode = decl.getNameNode();
363
- if (!nameNode)
364
- continue;
365
- candidates.push({ node: decl, getNameNode: () => nameNode });
366
- }
367
- for (const decl of sourceFile.getEnums()) {
368
- if (!decl.isExported())
369
- continue;
370
- if (decl.getName() !== title)
371
- continue;
372
- const nameNode = decl.getNameNode();
373
- if (!nameNode)
374
- continue;
375
- candidates.push({ node: decl, getNameNode: () => nameNode });
376
- }
377
- for (const statement of sourceFile.getVariableStatements()) {
378
- if (!statement.isExported())
379
- continue;
380
- for (const declaration of statement.getDeclarations()) {
381
- if (declaration.getName() !== title)
382
- continue;
383
- const nameNode = declaration.getNameNode();
384
- candidates.push({ node: declaration, getNameNode: () => nameNode });
385
- }
386
- }
387
- if (candidates.length === 0) {
388
- // Second pass: unique non-exported top-level functions only
389
- const internalCandidates = [];
390
- for (const decl of sourceFile.getFunctions()) {
391
- if (decl.isExported())
392
- continue; // Already scanned in first pass
393
- if (decl.getName() !== title)
394
- continue;
395
- const nameNode = decl.getNameNode();
396
- if (!nameNode)
397
- continue;
398
- internalCandidates.push({ node: decl, getNameNode: () => nameNode });
399
- }
400
- const uniqueInternal = onlyCandidate(internalCandidates);
401
- if (uniqueInternal) {
402
- return uniqueInternal;
403
- }
404
- // Third pass: unique class methods
405
- const methodCandidates = [];
406
- for (const cls of sourceFile.getClasses()) {
407
- for (const method of cls.getMethods()) {
408
- if (method.getName() !== title)
409
- continue;
410
- const nameNode = method.getNameNode();
411
- if (!nameNode)
412
- continue;
413
- methodCandidates.push({ node: method, getNameNode: () => nameNode });
414
- }
415
- }
416
- for (const statement of sourceFile.getVariableStatements()) {
417
- if (!statement.isExported())
418
- continue;
419
- for (const declaration of statement.getDeclarations()) {
420
- const classExpression = declaration.getInitializerIfKind(SyntaxKind.ClassExpression);
421
- if (!classExpression)
422
- continue;
423
- for (const method of classExpression.getMethods()) {
424
- if (method.getName() !== title)
425
- continue;
426
- const nameNode = method.getNameNode();
427
- if (!nameNode)
428
- continue;
429
- methodCandidates.push({
430
- node: method,
431
- getNameNode: () => nameNode,
432
- });
433
- }
434
- }
435
- }
436
- const uniqueMethod = onlyCandidate(methodCandidates);
437
- if (uniqueMethod) {
438
- return uniqueMethod;
439
- }
440
- const memberCandidates = [];
441
- for (const cls of sourceFile.getClasses()) {
442
- for (const property of cls.getProperties()) {
443
- if (property.getName() !== title)
444
- continue;
445
- const nameNode = property.getNameNode();
446
- if (!nameNode)
447
- continue;
448
- memberCandidates.push({ node: property, getNameNode: () => nameNode });
449
- }
450
- for (const accessor of [
451
- ...cls.getGetAccessors(),
452
- ...cls.getSetAccessors(),
453
- ]) {
454
- if (accessor.getName() !== title)
455
- continue;
456
- const nameNode = accessor.getNameNode();
457
- if (!nameNode)
458
- continue;
459
- memberCandidates.push({ node: accessor, getNameNode: () => nameNode });
460
- }
461
- }
462
- for (const statement of sourceFile.getVariableStatements()) {
463
- if (!statement.isExported())
464
- continue;
465
- for (const declaration of statement.getDeclarations()) {
466
- const classExpression = declaration.getInitializerIfKind(SyntaxKind.ClassExpression);
467
- if (!classExpression)
468
- continue;
469
- for (const property of classExpression.getProperties()) {
470
- if (property.getName() !== title)
471
- continue;
472
- const nameNode = property.getNameNode();
473
- if (!nameNode)
474
- continue;
475
- memberCandidates.push({
476
- node: property,
477
- getNameNode: () => nameNode,
478
- });
479
- }
480
- for (const accessor of [
481
- ...classExpression.getGetAccessors(),
482
- ...classExpression.getSetAccessors(),
483
- ]) {
484
- if (accessor.getName() !== title)
485
- continue;
486
- const nameNode = accessor.getNameNode();
487
- if (!nameNode)
488
- continue;
489
- memberCandidates.push({
490
- node: accessor,
491
- getNameNode: () => nameNode,
492
- });
493
- }
494
- }
495
- }
496
- const uniqueMember = onlyCandidate(memberCandidates);
497
- if (uniqueMember) {
498
- return uniqueMember;
499
- }
500
- return null;
501
- }
502
- candidates.sort((a, b) => a.getNameNode().getStart() - b.getNameNode().getStart());
503
- return candidates[0] ?? null;
504
- }
505
- function findClassMember(declaration, name) {
506
- for (const method of declaration.getMethods()) {
507
- if (method.getName() !== name)
508
- continue;
509
- const nameNode = method.getNameNode();
510
- if (nameNode)
511
- return { node: method, getNameNode: () => nameNode };
512
- }
513
- for (const property of declaration.getProperties()) {
514
- if (property.getName() !== name)
515
- continue;
516
- const nameNode = property.getNameNode();
517
- if (nameNode)
518
- return { node: property, getNameNode: () => nameNode };
519
- }
520
- for (const accessor of [
521
- ...declaration.getGetAccessors(),
522
- ...declaration.getSetAccessors(),
523
- ]) {
524
- if (accessor.getName() !== name)
525
- continue;
526
- const nameNode = accessor.getNameNode();
527
- if (nameNode)
528
- return { node: accessor, getNameNode: () => nameNode };
529
- }
530
- return null;
531
- }
532
- function parseQualifiedMethodTitle(title) {
533
- const separatorIndex = title.lastIndexOf(".");
534
- if (separatorIndex <= 0 || separatorIndex === title.length - 1)
535
- return null;
536
- return {
537
- className: title.slice(0, separatorIndex),
538
- methodName: title.slice(separatorIndex + 1),
539
- };
69
+ return onlyBuiltinCandidate(candidates);
540
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"intent-search.d.ts","sourceRoot":"","sources":["../src/intent-search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"intent-search.d.ts","sourceRoot":"","sources":["../src/intent-search.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import path from "node:path";
2
2
  import { escapeAtom, normalizeEntityId, parseTriples } from "./prolog/codec.js";
3
- import { loadEntities, } from "./public/operations/discovery-entities.js";
3
+ import { loadEntities, loadSearchCandidates, } from "./public/operations/discovery-entities.js";
4
4
  import { loadMarkdownBody } from "./search-ranking.js";
5
5
  const GRAPH_RELATIONSHIPS = [
6
6
  "implements",
@@ -347,13 +347,12 @@ async function loadIntentCandidates(prolog, options) {
347
347
  (options.sourceLocations === undefined ||
348
348
  options.sourceLocations.length === 0)) {
349
349
  for (const term of terms) {
350
- const page = await prolog.searchEntities({
350
+ const page = await loadSearchCandidates(prolog, {
351
351
  query: term,
352
352
  ...(options.type !== undefined ? { type: options.type } : {}),
353
- limit: MAX_CANDIDATES,
354
- offset: 0,
353
+ maxCandidates: MAX_CANDIDATES,
355
354
  });
356
- for (const entity of page.entities) {
355
+ for (const entity of page) {
357
356
  candidates.set(`${String(entity.type ?? "")}::${String(entity.id ?? "")}`, { ...entity });
358
357
  }
359
358
  }
@@ -1 +1 @@
1
- {"version":3,"file":"model-requirement.d.ts","sourceRoot":"","sources":["../../../src/operations/modeling/model-requirement.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAQjF,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,iCAAiC,EACjC,uBAAuB,EACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAMhC,YAAY,EACV,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,iCAAiC,EACjC,uBAAuB,EACvB,yBAAyB,EACzB,uBAAuB,GACxB,CAAC;AAIF,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,GACA,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgDzB;AAED,wBAAsB,4BAA4B,CAChD,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAIxB;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,oBAAoB,EAC1B,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,sBAAsB,CAAC,CA4HjC;AAED,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,oBAAoB,EAC1B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,sBAAsB,CAAC,CAEjC"}
1
+ {"version":3,"file":"model-requirement.d.ts","sourceRoot":"","sources":["../../../src/operations/modeling/model-requirement.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAQjF,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,iCAAiC,EACjC,uBAAuB,EACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAMhC,YAAY,EACV,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,iCAAiC,EACjC,uBAAuB,EACvB,yBAAyB,EACzB,uBAAuB,GACxB,CAAC;AAIF,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,GACA,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgDzB;AAED,wBAAsB,4BAA4B,CAChD,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAIxB;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,oBAAoB,EAC1B,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,sBAAsB,CAAC,CA4HjC;AAED,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,oBAAoB,EAC1B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,sBAAsB,CAAC,CAMjC"}
@@ -179,5 +179,9 @@ export async function handleKbModelRequirement(_prolog, args, workspaceRoot) {
179
179
  };
180
180
  }
181
181
  export async function executeModelRequirement(args, context) {
182
+ // kb_model_requirement is intentionally off the external semantic-classifier
183
+ // allowlist: classification after modeling only produced provenance warnings
184
+ // and is not worth a metered provider call. Use kb_semantic_advisor when
185
+ // classifier routing is needed.
182
186
  return handleKbModelRequirement(context.prolog, args, context.workspaceRoot);
183
187
  }
@@ -3,6 +3,6 @@ import type { PredicateSuggestion, SuggestPredicatesArgs, SuggestPredicatesResul
3
3
  export type { BindingProvenance, PredicateScoreComponents, PredicateSuggestion, RecommendedPredicateSchema, SuggestPredicatesArgs, SuggestPredicatesResult, } from "./predicate-types.js";
4
4
  export declare function compareEligibleByApplicabilityThenName(left: Pick<PredicateSuggestion, "applicability_score" | "predicate_name">, right: Pick<PredicateSuggestion, "applicability_score" | "predicate_name">): number;
5
5
  export declare function compareEligibleByApplicabilityScoreThenName(left: Pick<PredicateSuggestion, "applicability_score" | "score" | "predicate_name">, right: Pick<PredicateSuggestion, "applicability_score" | "score" | "predicate_name">): number;
6
- export declare function handleKbSuggestPredicates(prolog: PrologPort | null, args: SuggestPredicatesArgs): Promise<SuggestPredicatesResult>;
6
+ export declare function handleKbSuggestPredicates(prolog: PrologPort | null, args: SuggestPredicatesArgs, context?: OperationContext): Promise<SuggestPredicatesResult>;
7
7
  export declare function executeSuggestPredicates(args: SuggestPredicatesArgs, context: OperationContext): Promise<SuggestPredicatesResult>;
8
8
  //# sourceMappingURL=suggest-predicates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"suggest-predicates.d.ts","sourceRoot":"","sources":["../../../src/operations/modeling/suggest-predicates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,UAAU,EACX,MAAM,0CAA0C,CAAC;AAmBlD,OAAO,KAAK,EAEV,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EACV,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,0BAA0B,EAC1B,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAoG9B,wBAAgB,sCAAsC,CACpD,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,qBAAqB,GAAG,gBAAgB,CAAC,EACzE,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,qBAAqB,GAAG,gBAAgB,CAAC,GACzE,MAAM,CAIR;AAED,wBAAgB,2CAA2C,CACzD,IAAI,EAAE,IAAI,CACR,mBAAmB,EACnB,qBAAqB,GAAG,OAAO,GAAG,gBAAgB,CACnD,EACD,KAAK,EAAE,IAAI,CACT,mBAAmB,EACnB,qBAAqB,GAAG,OAAO,GAAG,gBAAgB,CACnD,GACA,MAAM,CAKR;AAqCD,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,UAAU,GAAG,IAAI,EACzB,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,uBAAuB,CAAC,CAgLlC;AAED,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,qBAAqB,EAC3B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,uBAAuB,CAAC,CAElC"}
1
+ {"version":3,"file":"suggest-predicates.d.ts","sourceRoot":"","sources":["../../../src/operations/modeling/suggest-predicates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,UAAU,EACX,MAAM,0CAA0C,CAAC;AAoBlD,OAAO,KAAK,EAEV,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EACV,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,0BAA0B,EAC1B,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AA6H9B,wBAAgB,sCAAsC,CACpD,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,qBAAqB,GAAG,gBAAgB,CAAC,EACzE,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,qBAAqB,GAAG,gBAAgB,CAAC,GACzE,MAAM,CAIR;AAED,wBAAgB,2CAA2C,CACzD,IAAI,EAAE,IAAI,CACR,mBAAmB,EACnB,qBAAqB,GAAG,OAAO,GAAG,gBAAgB,CACnD,EACD,KAAK,EAAE,IAAI,CACT,mBAAmB,EACnB,qBAAqB,GAAG,OAAO,GAAG,gBAAgB,CACnD,GACA,MAAM,CAKR;AAqCD,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,UAAU,GAAG,IAAI,EACzB,IAAI,EAAE,qBAAqB,EAC3B,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,uBAAuB,CAAC,CA+LlC;AAED,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,qBAAqB,EAC3B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,uBAAuB,CAAC,CAElC"}