@oml/server 0.14.17 → 0.16.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.
@@ -1,13 +1,94 @@
1
1
  // Copyright (c) 2026 Modelware. All rights reserved.
2
- import * as fs from 'node:fs/promises';
3
- import * as path from 'node:path';
4
- import { pathToFileURL } from 'node:url';
5
2
  import { createHash } from 'node:crypto';
6
- import { extractLeadingFrontMatter, MarkdownHandlerRegistry, MarkdownPreviewRuntime } from '@oml/markdown';
7
3
  import { createDefaultShaclService } from '@oml/owl';
8
- import { getOntologyModelIndex, normalizeNamespace } from '@oml/language';
9
- import { buildTemplateCatalog, expandTemplateComposeBlocks, findFilesByExtension, frontMatterString, isTemplateMarkdownFile, normalizeContextOntologyIri, } from './template.js';
4
+ import { normalizeNamespace } from '@oml/language';
5
+ import { getIndexedShaclBlocks } from './shacl-index.js';
10
6
  const validationRuntimeCaches = new WeakMap();
7
+ function collectDocumentVersions(client) {
8
+ const versions = new Map();
9
+ for (const doc of client.getWorkspaceOmlDocuments()) {
10
+ const uri = String(doc?.uri ?? '').trim();
11
+ if (!uri) {
12
+ continue;
13
+ }
14
+ versions.set(uri, Number(doc?.textDocument?.version ?? -1));
15
+ }
16
+ return versions;
17
+ }
18
+ function areDocumentVersionsEqual(left, right) {
19
+ if (left.size !== right.size) {
20
+ return false;
21
+ }
22
+ for (const [uri, version] of left.entries()) {
23
+ if ((right.get(uri) ?? Number.NaN) !== version) {
24
+ return false;
25
+ }
26
+ }
27
+ return true;
28
+ }
29
+ function diagnosticsFingerprint(doc) {
30
+ const diagnostics = Array.isArray(doc?.diagnostics) ? doc.diagnostics : [];
31
+ return diagnostics
32
+ .map((diagnostic) => [
33
+ Number(diagnostic?.severity ?? 0),
34
+ Number(diagnostic?.range?.start?.line ?? -1),
35
+ Number(diagnostic?.range?.start?.character ?? -1),
36
+ String(diagnostic?.message ?? ''),
37
+ String(diagnostic?.source ?? ''),
38
+ String(diagnostic?.code ?? ''),
39
+ ].join('|'))
40
+ .sort()
41
+ .join('\n');
42
+ }
43
+ function collectDiagnosticsSnapshot(client) {
44
+ const snapshot = new Map();
45
+ for (const doc of client.getWorkspaceOmlDocuments()) {
46
+ const uri = String(doc?.uri ?? '').trim();
47
+ if (!uri) {
48
+ continue;
49
+ }
50
+ const version = Number(doc?.textDocument?.version ?? -1);
51
+ snapshot.set(uri, `${version}::${diagnosticsFingerprint(doc)}`);
52
+ }
53
+ return snapshot;
54
+ }
55
+ function areSnapshotsEqual(left, right) {
56
+ if (left.size !== right.size) {
57
+ return false;
58
+ }
59
+ for (const [uri, fingerprint] of left.entries()) {
60
+ if ((right.get(uri) ?? '') !== fingerprint) {
61
+ return false;
62
+ }
63
+ }
64
+ return true;
65
+ }
66
+ async function waitForStableValidatedSnapshot(client) {
67
+ await client.waitForValidated();
68
+ let previous = collectDocumentVersions(client);
69
+ for (let i = 0; i < 3; i += 1) {
70
+ await Promise.resolve();
71
+ await client.waitForValidated();
72
+ const current = collectDocumentVersions(client);
73
+ if (areDocumentVersionsEqual(previous, current)) {
74
+ return;
75
+ }
76
+ previous = current;
77
+ }
78
+ }
79
+ async function waitForStableDiagnosticsSnapshot(client) {
80
+ await client.waitForValidated();
81
+ let previous = collectDiagnosticsSnapshot(client);
82
+ for (let i = 0; i < 4; i += 1) {
83
+ await Promise.resolve();
84
+ await client.waitForValidated();
85
+ const current = collectDiagnosticsSnapshot(client);
86
+ if (areSnapshotsEqual(previous, current)) {
87
+ return;
88
+ }
89
+ previous = current;
90
+ }
91
+ }
11
92
  function diagnosticKindFromSeverity(severity) {
12
93
  if (severity === 1)
13
94
  return 'error';
@@ -49,11 +130,54 @@ function getModelContentFingerprints(client) {
49
130
  }
50
131
  return fingerprints;
51
132
  }
52
- export async function lintWorkspace(client) {
133
+ function resolveFilterModelUris(client, ontologies) {
134
+ if (!Array.isArray(ontologies))
135
+ return new Set();
136
+ const ontologyIndex = client.runtime.shared.indexes?.OntologyModelIndex;
137
+ if (!ontologyIndex)
138
+ return new Set();
139
+ const modelUris = new Set();
140
+ for (const ontology of ontologies) {
141
+ const trimmed = String(ontology ?? '').trim();
142
+ if (!trimmed.startsWith('http://') && !trimmed.startsWith('https://'))
143
+ continue;
144
+ const modelUri = ontologyIndex.resolveModelUri?.(trimmed);
145
+ if (modelUri)
146
+ modelUris.add(modelUri);
147
+ }
148
+ return modelUris;
149
+ }
150
+ function resolveFilterOntologyIris(_client, ontologies) {
151
+ if (!Array.isArray(ontologies))
152
+ return new Set();
153
+ const ontologyIris = new Set();
154
+ for (const ontology of ontologies) {
155
+ const trimmed = String(ontology ?? '').trim();
156
+ if (trimmed.startsWith('http://') || trimmed.startsWith('https://')) {
157
+ ontologyIris.add(trimmed);
158
+ }
159
+ }
160
+ return ontologyIris;
161
+ }
162
+ function resolveIndexedShaclBlockModelUri(client, block) {
163
+ if (block.modelUri) {
164
+ return block.modelUri;
165
+ }
166
+ const ontologyIndex = client.runtime.shared.indexes?.OntologyModelIndex;
167
+ return ontologyIndex?.resolveModelUri?.(block.ontologyIri, block.markdownUri);
168
+ }
169
+ export async function lintWorkspace(client, params = {}) {
53
170
  const startedAt = Date.now();
54
171
  await client.ensureInitialized();
55
172
  await client.ensureWorkspaceCurrent();
56
- const docs = client.getWorkspaceOmlDocuments();
173
+ await waitForStableValidatedSnapshot(client);
174
+ await waitForStableDiagnosticsSnapshot(client);
175
+ const allDocs = client.getWorkspaceOmlDocuments();
176
+ // Filter by ontologies if specified
177
+ const filterUris = resolveFilterModelUris(client, params.ontologies);
178
+ const docs = filterUris.size > 0
179
+ ? allDocs.filter((doc) => filterUris.has(String(doc?.uri ?? '')))
180
+ : allDocs;
57
181
  const allProblems = [];
58
182
  let errors = 0;
59
183
  let warnings = 0;
@@ -100,7 +224,8 @@ export async function validateWorkspace(client, params) {
100
224
  const startedAt = Date.now();
101
225
  await client.ensureInitialized();
102
226
  await client.ensureWorkspaceCurrent();
103
- const lint = await lintWorkspace(client);
227
+ await waitForStableValidatedSnapshot(client);
228
+ const lint = await lintWorkspace(client, params);
104
229
  if (lint.errors > 0 || lint.warnings > 0) {
105
230
  return {
106
231
  success: false,
@@ -112,15 +237,16 @@ export async function validateWorkspace(client, params) {
112
237
  error: `lint failed with ${lint.errors} error(s) and ${lint.warnings} warning(s)`,
113
238
  };
114
239
  }
115
- const workspaceRoot = path.resolve(client.workspaceRoot);
116
- const markdownFiles = await findFilesByExtension(workspaceRoot, '.md');
117
- const templateCatalog = await buildTemplateCatalog(workspaceRoot);
118
- const runtime = new MarkdownPreviewRuntime(new MarkdownHandlerRegistry());
119
- const ontologyIndex = getOntologyModelIndex(client.runtime.shared);
120
240
  const reasoningService = client.runtime.Oml.reasoning.ReasoningService;
121
241
  const shaclService = createDefaultShaclService(reasoningService.getSparqlService(), (uri) => reasoningService.ensureQueryContext(uri), (uri) => reasoningService.getContextIri(uri));
122
242
  const runtimeCache = getValidationRuntimeCache(client);
123
243
  const modelFingerprints = getModelContentFingerprints(client);
244
+ const allBlocks = getIndexedShaclBlocks(client.runtime.shared);
245
+ // Filter by ontologies if specified
246
+ const filterOntologyIris = resolveFilterOntologyIris(client, params.ontologies);
247
+ const indexedShaclBlocks = filterOntologyIris.size > 0
248
+ ? allBlocks.filter((block) => filterOntologyIris.has(block.ontologyIri))
249
+ : allBlocks;
124
250
  const seenValidateKeys = new Set();
125
251
  let filesChecked = 0;
126
252
  let errors = 0;
@@ -128,144 +254,80 @@ export async function validateWorkspace(client, params) {
128
254
  let failingItems = 0;
129
255
  const details = [];
130
256
  const validationProblems = [];
131
- for (const markdownPath of markdownFiles) {
132
- const markdown = await fs.readFile(markdownPath, 'utf-8');
133
- if (isTemplateMarkdownFile(markdown)) {
257
+ for (const block of indexedShaclBlocks) {
258
+ const modelUri = resolveIndexedShaclBlockModelUri(client, block);
259
+ if (!modelUri) {
134
260
  continue;
135
261
  }
136
- const frontMatter = extractLeadingFrontMatter(markdown);
137
- const contextOntologyIri = normalizeContextOntologyIri(frontMatter?.contextOntologyIri
138
- ?? frontMatterString(frontMatter?.data, 'ontologyIri')
139
- ?? frontMatterString(frontMatter?.data, 'ontology'));
140
- const contextMemberIri = frontMatterString(frontMatter?.data, 'memberIri')
141
- ?? frontMatterString(frontMatter?.data, 'contextMemberIri');
142
- const markdownUri = pathToFileURL(markdownPath).toString();
143
- const modelUri = contextOntologyIri
144
- ? ontologyIndex.resolveModelUri(contextOntologyIri, markdownUri)
145
- : undefined;
146
- const expanded = await expandTemplateComposeBlocks(markdown, templateCatalog, {
147
- workspaceRoot,
148
- sourceMarkdownPath: markdownPath,
149
- contextOntologyIri,
150
- contextModelUri: modelUri,
151
- contextMemberIri,
152
- });
153
- const prepared = runtime.prepare(expanded);
154
- const executableBlocks = prepared.codeBlocks
155
- .filter((block) => block.language === 'table-editor')
156
- .map((block) => ({ id: block.id, source: block.content, lineStart: block.lineStart, lineEnd: block.lineEnd }));
157
- if (executableBlocks.length === 0) {
262
+ filesChecked += 1;
263
+ const blockLocation = `${block.markdownPath}:${Math.max(1, block.lineStart)}`;
264
+ const cacheKey = `${block.markdownUri}::${block.blockId}`;
265
+ const modelFingerprint = modelFingerprints.get(modelUri) ?? '';
266
+ const validateFingerprint = hashText([modelUri, modelFingerprint, block.sourceHash].join('\n'));
267
+ seenValidateKeys.add(cacheKey);
268
+ const cached = runtimeCache.validateBlockCache.get(cacheKey);
269
+ if (cached?.fingerprint === validateFingerprint) {
270
+ errors += cached.result.errors;
271
+ warnings += cached.result.warnings;
158
272
  continue;
159
273
  }
160
- const relativeMarkdown = path.relative(workspaceRoot, markdownPath) || path.basename(markdownPath);
161
- for (const block of executableBlocks) {
162
- filesChecked += 1;
163
- const blockLocation = `${relativeMarkdown}:${Math.max(1, Number(block.lineStart ?? 1))}`;
164
- const shacl = block.source.trim();
165
- if (!contextOntologyIri) {
166
- errors += 1;
167
- failingItems += 1;
168
- details.push(`Violation: ${blockLocation}: missing contextOntologyIri front-matter.`);
169
- validationProblems.push({
170
- modelUri: modelUri ?? '<unknown>',
171
- element: '-',
172
- property: '-',
173
- message: 'Missing contextOntologyIri front-matter.',
174
- });
175
- continue;
176
- }
177
- if (!modelUri) {
178
- errors += 1;
179
- failingItems += 1;
180
- details.push(`Violation: ${blockLocation}: could not resolve context model URI for ${contextOntologyIri}.`);
181
- validationProblems.push({
182
- modelUri: '<unknown>',
183
- element: '-',
184
- property: '-',
185
- message: `Could not resolve context model URI for ${contextOntologyIri}.`,
186
- });
187
- continue;
188
- }
189
- if (!shacl) {
190
- errors += 1;
191
- failingItems += 1;
192
- details.push(`Violation: ${blockLocation}: empty table-editor block.`);
274
+ const result = await shaclService.validateShacl(modelUri, block.source);
275
+ let blockErrors = 0;
276
+ let blockWarnings = 0;
277
+ if (result.error) {
278
+ blockErrors += 1;
279
+ details.push(`Violation: ${blockLocation}: ${result.error}`);
280
+ validationProblems.push({
281
+ modelUri,
282
+ element: '-',
283
+ property: '-',
284
+ message: String(result.error),
285
+ });
286
+ }
287
+ else if (!result.conforms) {
288
+ for (const issue of result.issues) {
289
+ const severityText = String(issue.severity ?? '').toLowerCase();
290
+ const focusNode = issue.focusNode ? shortIri(issue.focusNode) : '-';
291
+ const propertyName = issue.propertyName ?? (issue.path ? shortIri(issue.path) : '-');
292
+ const severityLabel = shortIri(issue.severity || 'Violation');
293
+ if (severityText.includes('warning')) {
294
+ blockWarnings += 1;
295
+ details.push(`${severityLabel}: ${blockLocation} element=${focusNode} property=${propertyName}: ${describeIssue(issue)}`);
296
+ }
297
+ else {
298
+ blockErrors += 1;
299
+ details.push(`${severityLabel}: ${blockLocation} element=${focusNode} property=${propertyName}: ${describeIssue(issue)}`);
300
+ }
193
301
  validationProblems.push({
194
302
  modelUri,
195
- element: '-',
196
- property: '-',
197
- message: 'Empty table-editor block.',
303
+ element: focusNode,
304
+ property: propertyName,
305
+ message: describeIssue(issue),
198
306
  });
199
- continue;
200
307
  }
201
- const modelFingerprint = modelFingerprints.get(modelUri) ?? '';
202
- const cacheKey = `${markdownUri}::${block.id}`;
203
- const validateFingerprint = hashText([modelUri, modelFingerprint, shacl].join('\n'));
204
- seenValidateKeys.add(cacheKey);
205
- const cached = runtimeCache.validateBlockCache.get(cacheKey);
206
- if (cached?.fingerprint === validateFingerprint) {
207
- errors += cached.result.errors;
208
- warnings += cached.result.warnings;
209
- continue;
210
- }
211
- const result = await shaclService.validateShacl(modelUri, shacl);
212
- let blockErrors = 0;
213
- let blockWarnings = 0;
214
- if (result.error) {
308
+ if (result.issues.length === 0) {
215
309
  blockErrors += 1;
216
- details.push(`Violation: ${blockLocation}: ${result.error}`);
310
+ details.push(`Violation: ${blockLocation}: SHACL validation failed without detailed issues.`);
217
311
  validationProblems.push({
218
312
  modelUri,
219
313
  element: '-',
220
314
  property: '-',
221
- message: String(result.error),
315
+ message: 'SHACL validation failed without detailed issues.',
222
316
  });
223
317
  }
224
- else if (!result.conforms) {
225
- for (const issue of result.issues) {
226
- const severityText = String(issue.severity ?? '').toLowerCase();
227
- const focusNode = issue.focusNode ? shortIri(issue.focusNode) : '-';
228
- const propertyName = issue.propertyName ?? (issue.path ? shortIri(issue.path) : '-');
229
- const severityLabel = shortIri(issue.severity || 'Violation');
230
- if (severityText.includes('warning')) {
231
- blockWarnings += 1;
232
- details.push(`${severityLabel}: ${blockLocation} element=${focusNode} property=${propertyName}: ${describeIssue(issue)}`);
233
- }
234
- else {
235
- blockErrors += 1;
236
- details.push(`${severityLabel}: ${blockLocation} element=${focusNode} property=${propertyName}: ${describeIssue(issue)}`);
237
- }
238
- validationProblems.push({
239
- modelUri,
240
- element: focusNode,
241
- property: propertyName,
242
- message: describeIssue(issue),
243
- });
244
- }
245
- if (result.issues.length === 0) {
246
- blockErrors += 1;
247
- details.push(`Violation: ${blockLocation}: SHACL validation failed without detailed issues.`);
248
- validationProblems.push({
249
- modelUri,
250
- element: '-',
251
- property: '-',
252
- message: 'SHACL validation failed without detailed issues.',
253
- });
254
- }
255
- }
256
- errors += blockErrors;
257
- warnings += blockWarnings;
258
- if (blockErrors > 0 || blockWarnings > 0) {
259
- failingItems += 1;
260
- }
261
- runtimeCache.validateBlockCache.set(cacheKey, {
262
- fingerprint: validateFingerprint,
263
- result: {
264
- errors: blockErrors,
265
- warnings: blockWarnings,
266
- },
267
- });
268
318
  }
319
+ errors += blockErrors;
320
+ warnings += blockWarnings;
321
+ if (blockErrors > 0 || blockWarnings > 0) {
322
+ failingItems += 1;
323
+ }
324
+ runtimeCache.validateBlockCache.set(cacheKey, {
325
+ fingerprint: validateFingerprint,
326
+ result: {
327
+ errors: blockErrors,
328
+ warnings: blockWarnings,
329
+ },
330
+ });
269
331
  }
270
332
  for (const key of runtimeCache.validateBlockCache.keys()) {
271
333
  if (!seenValidateKeys.has(key)) {
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/rest/validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/rest/validation.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAA0B,MAAM,kBAAkB,CAAC;AAoCjF,MAAM,uBAAuB,GAAG,IAAI,OAAO,EAAkC,CAAC;AAW9E,SAAS,uBAAuB,CAAC,MAA6B;IAC1D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,wBAAwB,EAAE,EAAE,CAAC;QAClD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,SAAS;QACb,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAiC,EAAE,KAAkC;IACnG,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAQ;IACpC,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,OAAO,WAAW;SACb,GAAG,CAAC,CAAC,UAAe,EAAE,EAAE,CAAC;QACtB,MAAM,CAAC,UAAU,EAAE,QAAQ,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,IAAI,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,UAAU,EAAE,OAAO,IAAI,EAAE,CAAC;QACjC,MAAM,CAAC,UAAU,EAAE,MAAM,IAAI,EAAE,CAAC;QAChC,MAAM,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC;KACjC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACX,IAAI,EAAE;SACN,IAAI,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,0BAA0B,CAAC,MAA6B;IAC7D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,wBAAwB,EAAE,EAAE,CAAC;QAClD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,SAAS;QACb,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACzD,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,OAAO,KAAK,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAiC,EAAE,KAAkC;IAC5F,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,WAAW,EAAE,CAAC;YACzC,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,8BAA8B,CAAC,MAA6B;IACvE,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC;IAChC,IAAI,QAAQ,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,wBAAwB,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;YAC9C,OAAO;QACX,CAAC;QACD,QAAQ,GAAG,OAAO,CAAC;IACvB,CAAC;AACL,CAAC;AAED,KAAK,UAAU,gCAAgC,CAAC,MAA6B;IACzE,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC;IAChC,IAAI,QAAQ,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;YACvC,OAAO;QACX,CAAC;QACD,QAAQ,GAAG,OAAO,CAAC;IACvB,CAAC;AACL,CAAC;AAED,SAAS,0BAA0B,CAAC,QAAiB;IACjD,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACnC,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACrC,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,aAAa,CAAC;IACzC,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAClC,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC3B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,yBAAyB,CAAC,MAA6B;IAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,MAAgB,CAAC;IAC5C,MAAM,QAAQ,GAAG,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,QAAQ,EAAE,CAAC;QACX,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,MAAM,OAAO,GAA2B;QACpC,kBAAkB,EAAE,IAAI,GAAG,EAAE;KAChC,CAAC;IACF,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,SAAS,2BAA2B,CAAC,MAA6B;IAC9D,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,wBAAwB,EAAE,CAAC;IAC/C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,SAAS;QACb,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,GAAG,EAAE,YAAY,EAAE,OAAO,KAAK,UAAU;YACzD,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YACpC,CAAC,CAAC,EAAE,CAAC;QACT,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,YAAY,CAAC;AACxB,CAAC;AAED,SAAS,sBAAsB,CAAC,MAA6B,EAAE,UAAmB;IAC9E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IACjD,MAAM,aAAa,GAAI,MAAM,CAAC,OAAO,CAAC,MAAc,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACjF,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,SAAS;QAChF,MAAM,QAAQ,GAAG,aAAa,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,QAAQ;YAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,yBAAyB,CAAC,OAA8B,EAAE,UAAmB;IAClF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IACjD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAClE,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;IACL,CAAC;IACD,OAAO,YAAY,CAAC;AACxB,CAAC;AAED,SAAS,gCAAgC,CAAC,MAA6B,EAAE,KAAwB;IAC7F,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC,QAAQ,CAAC;IAC1B,CAAC;IACD,MAAM,aAAa,GAAI,MAAM,CAAC,OAAO,CAAC,MAAc,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACjF,OAAO,aAAa,EAAE,eAAe,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAA6B,EAAE,SAAkC,EAAE;IACnG,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC;IACjC,MAAM,MAAM,CAAC,sBAAsB,EAAE,CAAC;IACtC,MAAM,8BAA8B,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,gCAAgC,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,wBAAwB,EAAE,CAAC;IAElD,oCAAoC;IACpC,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,GAAG,CAAC;QAC5B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,OAAO,CAAC;IACd,MAAM,WAAW,GAAsB,EAAE,CAAC;IAC1C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,OAAO,UAAU,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACpF,MAAM,IAAI,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBACnB,MAAM,IAAI,CAAC,CAAC;YAChB,CAAC;iBAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC5B,QAAQ,IAAI,CAAC,CAAC;YAClB,CAAC;YACD,WAAW,CAAC,IAAI,CAAC;gBACb,GAAG,EAAE,QAAQ;gBACb,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC;gBACrD,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC;gBAC5D,IAAI;gBACJ,QAAQ;gBACR,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,IAAI,EAAE,CAAC;gBAC1C,MAAM,EAAE,OAAO,UAAU,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBAC9E,IAAI,EAAE,OAAO,UAAU,EAAE,IAAI,KAAK,QAAQ,IAAI,OAAO,UAAU,EAAE,IAAI,KAAK,QAAQ;oBAC9E,CAAC,CAAC,UAAU,CAAC,IAAI;oBACjB,CAAC,CAAC,SAAS;aAClB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IACD,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC7B,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;WAC9B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;WACzC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;WACtB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAChC,CAAC;IAEF,OAAO;QACH,OAAO,EAAE,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC;QACvC,YAAY,EAAE,IAAI,CAAC,MAAM;QACzB,MAAM;QACN,QAAQ;QACR,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAC9C,QAAQ,EAAE,WAAW;KACxB,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAA6B,EAAE,MAA+B;IAClG,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC;IACjC,MAAM,MAAM,CAAC,sBAAsB,EAAE,CAAC;IACtC,MAAM,8BAA8B,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QACvC,OAAO;YACH,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAC9C,KAAK,EAAE,oBAAoB,IAAI,CAAC,MAAM,iBAAiB,IAAI,CAAC,QAAQ,aAAa;SACpF,CAAC;IACN,CAAC;IACD,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAuB,CAAC;IAC9E,MAAM,YAAY,GAAG,yBAAyB,CAC1C,gBAAgB,CAAC,gBAAgB,EAAE,EACnC,CAAC,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,GAAG,CAAC,EACjD,CAAC,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,aAAa,CAAC,GAAG,CAAC,CAC/C,CAAC;IACF,MAAM,YAAY,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,iBAAiB,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,MAAgB,CAAC,CAAC;IAEzE,oCAAoC;IACpC,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAChF,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,IAAI,GAAG,CAAC;QAClD,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACxE,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3C,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,kBAAkB,GAKnB,EAAE,CAAC;IAER,KAAK,MAAM,KAAK,IAAI,kBAAkB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,gCAAgC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,SAAS;QACb,CAAC;QACD,YAAY,IAAI,CAAC,CAAC;QAClB,MAAM,aAAa,GAAG,GAAG,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9E,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1D,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/D,MAAM,mBAAmB,GAAG,QAAQ,CAAC,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAChG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,YAAY,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7D,IAAI,MAAM,EAAE,WAAW,KAAK,mBAAmB,EAAE,CAAC;YAC9C,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;YAC/B,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;YACnC,SAAS;QACb,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACxE,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,WAAW,IAAI,CAAC,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,cAAc,aAAa,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAC7D,kBAAkB,CAAC,IAAI,CAAC;gBACpB,QAAQ;gBACR,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,GAAG;gBACb,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;aAChC,CAAC,CAAC;QACP,CAAC;aAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC1B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBAChE,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBACpE,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACrF,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,IAAI,WAAW,CAAC,CAAC;gBAC9D,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBACnC,aAAa,IAAI,CAAC,CAAC;oBACnB,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,KAAK,aAAa,YAAY,SAAS,aAAa,YAAY,KAAK,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC9H,CAAC;qBAAM,CAAC;oBACJ,WAAW,IAAI,CAAC,CAAC;oBACjB,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,KAAK,aAAa,YAAY,SAAS,aAAa,YAAY,KAAK,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC9H,CAAC;gBACD,kBAAkB,CAAC,IAAI,CAAC;oBACpB,QAAQ;oBACR,OAAO,EAAE,SAAS;oBAClB,QAAQ,EAAE,YAAY;oBACtB,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC;iBAChC,CAAC,CAAC;YACP,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,WAAW,IAAI,CAAC,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,cAAc,aAAa,oDAAoD,CAAC,CAAC;gBAC9F,kBAAkB,CAAC,IAAI,CAAC;oBACpB,QAAQ;oBACR,OAAO,EAAE,GAAG;oBACZ,QAAQ,EAAE,GAAG;oBACb,OAAO,EAAE,kDAAkD;iBAC9D,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QACD,MAAM,IAAI,WAAW,CAAC;QACtB,QAAQ,IAAI,aAAa,CAAC;QAC1B,IAAI,WAAW,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YACvC,YAAY,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,YAAY,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE;YAC1C,WAAW,EAAE,mBAAmB;YAChC,MAAM,EAAE;gBACJ,MAAM,EAAE,WAAW;gBACnB,QAAQ,EAAE,aAAa;aAC1B;SACJ,CAAC,CAAC;IACP,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,YAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;IACL,CAAC;IACD,OAAO;QACH,OAAO,EAAE,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC;QACvC,YAAY;QACZ,MAAM;QACN,QAAQ;QACR,YAAY;QACZ,OAAO;QACP,kBAAkB;QAClB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;KACjD,CAAC;AACN,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC3B,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,OAAO,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,OAAO,UAAU,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,SAAS,aAAa,CAAC,KAA4C;IAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnD,IAAI,OAAO,IAAI,OAAO,KAAK,mBAAmB,EAAE,CAAC;QAC7C,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACf,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,mBAAmB,CAAC;AAC/B,CAAC"}
package/out/server.js CHANGED
@@ -9,6 +9,7 @@ import { createConnection } from 'vscode-languageserver/node.js';
9
9
  import { startOmlLanguageServer } from './lsp/language-server.js';
10
10
  import { startOmlRestServer } from './rest/server.js';
11
11
  import { OmlFeatureGate } from './auth/feature-gate.js';
12
+ import { ReasoningServerNotifications } from './lsp/protocol/reasoner-protocol.js';
12
13
  const SERVER_DEBUG_ENABLED = false;
13
14
  function debugServerStartup(event, details = {}) {
14
15
  if (!SERVER_DEBUG_ENABLED) {
@@ -62,9 +63,15 @@ function parseRemoteOptions(argv) {
62
63
  let portValue;
63
64
  let workspaceValue;
64
65
  let tokenValue;
66
+ let entitlementExpiryValue;
67
+ let entitlementFeaturesValue;
68
+ let entitlementTokenValue;
69
+ let deviceIdValue;
70
+ let nodeIpc = false;
65
71
  for (let index = 0; index < argv.length; index += 1) {
66
72
  const arg = argv[index];
67
73
  if (arg === '--node-ipc' || arg.startsWith('--clientProcessId=')) {
74
+ nodeIpc = true;
68
75
  continue;
69
76
  }
70
77
  if (arg === '--port' || arg === '-p' || arg.startsWith('--port=')) {
@@ -88,6 +95,22 @@ function parseRemoteOptions(argv) {
88
95
  }
89
96
  continue;
90
97
  }
98
+ if (arg.startsWith('--entitlement-expiry=')) {
99
+ entitlementExpiryValue = readOptionValue(argv, index, ['--entitlement-expiry']).trim();
100
+ continue;
101
+ }
102
+ if (arg.startsWith('--entitlement-features=')) {
103
+ entitlementFeaturesValue = readOptionValue(argv, index, ['--entitlement-features']).trim();
104
+ continue;
105
+ }
106
+ if (arg.startsWith('--entitlement-token=')) {
107
+ entitlementTokenValue = readOptionValue(argv, index, ['--entitlement-token']).trim();
108
+ continue;
109
+ }
110
+ if (arg.startsWith('--device-id=')) {
111
+ deviceIdValue = readOptionValue(argv, index, ['--device-id']).trim();
112
+ continue;
113
+ }
91
114
  if (arg.startsWith('-')) {
92
115
  throw new Error(`Unknown option '${arg}'.`);
93
116
  }
@@ -97,10 +120,31 @@ function parseRemoteOptions(argv) {
97
120
  const port = Number.isFinite(rawPort) ? Math.max(0, Math.min(65535, Math.trunc(rawPort))) : 8080;
98
121
  const workspaceRoot = workspaceValue && workspaceValue.length > 0 ? workspaceValue : process.cwd();
99
122
  const token = tokenValue && tokenValue.length > 0 ? tokenValue : undefined;
100
- return { host, port, workspaceRoot, token };
123
+ let entitlementExpiry;
124
+ let entitlementFeatureIds;
125
+ if (entitlementExpiryValue) {
126
+ const parsed = Number(entitlementExpiryValue);
127
+ if (Number.isFinite(parsed) && parsed > Date.now()) {
128
+ entitlementExpiry = parsed;
129
+ }
130
+ }
131
+ if (entitlementFeaturesValue) {
132
+ try {
133
+ const parsed = JSON.parse(entitlementFeaturesValue);
134
+ if (Array.isArray(parsed) && parsed.every((x) => typeof x === 'string')) {
135
+ entitlementFeatureIds = parsed;
136
+ }
137
+ }
138
+ catch {
139
+ // Malformed — ignore.
140
+ }
141
+ }
142
+ const entitlementToken = entitlementTokenValue && entitlementTokenValue.length > 0 ? entitlementTokenValue : undefined;
143
+ const deviceId = deviceIdValue && deviceIdValue.length > 0 ? deviceIdValue : undefined;
144
+ return { host, port, workspaceRoot, token, nodeIpc, entitlementExpiry, entitlementFeatureIds, entitlementToken, deviceId };
101
145
  }
102
- function startIpcLanguageServerIfAvailable(featureGate) {
103
- if (typeof process.send !== 'function') {
146
+ function startIpcLanguageServerIfAvailable(featureGate, nodeIpc) {
147
+ if (!nodeIpc || typeof process.send !== 'function') {
104
148
  return undefined;
105
149
  }
106
150
  const connection = createConnection();
@@ -139,6 +183,9 @@ async function removeServerLock(lockFile) {
139
183
  debugServerStartup('lock.remove.begin', { lockFile });
140
184
  try {
141
185
  await fs.rm(lockFile, { force: true });
186
+ // Remove the workspace folder if it is now empty.
187
+ const workspaceDir = path.dirname(lockFile);
188
+ await fs.rm(workspaceDir, { recursive: true, force: true });
142
189
  debugServerStartup('lock.remove.success', { lockFile });
143
190
  }
144
191
  catch (error) {
@@ -176,9 +223,41 @@ export function runServerCli(argv = process.argv.slice(2)) {
176
223
  return;
177
224
  }
178
225
  void (async () => {
179
- const runtimeTool = typeof process.send === 'function' ? 'oml-code' : 'oml-cli';
226
+ const inExtensionMode = options.nodeIpc;
227
+ const runtimeTool = inExtensionMode ? 'oml-code' : 'oml-cli';
180
228
  debugServerStartup('featureGate.create', { tool: runtimeTool });
181
- const featureGate = new OmlFeatureGate({ initialAccessToken: options.token, tool: runtimeTool });
229
+ // Both extension and CLI pass cached entitlements as startup args.
230
+ // The extension manages persistence via globalState; the CLI manages it
231
+ // via its own credential store. The server never writes to any store itself.
232
+ const initialCachedExpiry = options.entitlementExpiry;
233
+ const initialCachedFeatureIds = options.entitlementFeatureIds;
234
+ const deviceId = options.deviceId;
235
+ // Use a mutable reference so the onEntitlementsCached callback can reach the
236
+ // IPC connection that is set up just after featureGate is constructed.
237
+ let ipcConnection;
238
+ const featureGate = new OmlFeatureGate({
239
+ initialAccessToken: options.token,
240
+ tool: runtimeTool,
241
+ deviceId,
242
+ initialCachedExpiry,
243
+ initialCachedFeatureIds,
244
+ onEntitlementsCached: (expiry, featureIds, entitlementsToken) => {
245
+ if (ipcConnection) {
246
+ // Extension mode — notify the extension to persist in globalState.
247
+ const params = { expiry, featureIds, entitlementsToken };
248
+ void ipcConnection.sendNotification(ReasoningServerNotifications.entitlementsCached, params);
249
+ }
250
+ else if (typeof process.send === 'function') {
251
+ // CLI mode — send over the private IPC channel so the CLI can persist it.
252
+ process.send({ type: 'entitlementsCached', expiry, featureIds, entitlementsToken });
253
+ }
254
+ },
255
+ });
256
+ // IPC server is started before primeEntitlements so ipcConnection is set
257
+ // when onEntitlementsCached fires during the initial network sync.
258
+ const ipcServer = startIpcLanguageServerIfAvailable(featureGate, options.nodeIpc);
259
+ const owner = ipcServer ? 'extension' : 'cli';
260
+ ipcConnection = ipcServer?.connection;
182
261
  if (options.token) {
183
262
  try {
184
263
  debugServerStartup('entitlements.prime.begin');
@@ -191,14 +270,11 @@ export function runServerCli(argv = process.argv.slice(2)) {
191
270
  process.stderr.write(`[oml-server] initial entitlement sync failed: ${message}\n`);
192
271
  }
193
272
  }
194
- const ipcServer = startIpcLanguageServerIfAvailable(featureGate);
195
- const owner = ipcServer ? 'extension' : 'cli';
196
273
  debugServerStartup('rest.start.begin', { owner });
197
274
  const { server, updateToken } = await startOmlRestServer({
198
275
  host: options.host,
199
276
  port: options.port,
200
277
  workspaceRoot: options.workspaceRoot,
201
- watchWorkspace: true,
202
278
  authToken: options.token,
203
279
  runtime: ipcServer?.runtime,
204
280
  featureGate,
@@ -215,6 +291,21 @@ export function runServerCli(argv = process.argv.slice(2)) {
215
291
  }
216
292
  });
217
293
  }
294
+ else if (typeof process.send === 'function') {
295
+ process.on('message', (msg) => {
296
+ if (msg && typeof msg === 'object' && msg.type === 'tokenRefreshed') {
297
+ const accessToken = msg.accessToken;
298
+ if (typeof accessToken === 'string' && accessToken) {
299
+ debugServerStartup('token.refresh.notification', { received: 'yes' });
300
+ void updateToken(accessToken).then(() => debugServerStartup('token.refresh.sync.success'), (error) => {
301
+ const message = error instanceof Error ? error.message : String(error);
302
+ debugServerStartup('token.refresh.sync.error', { error: message });
303
+ process.stderr.write(`[oml-server] token refresh entitlement sync failed: ${message}\n`);
304
+ });
305
+ }
306
+ }
307
+ });
308
+ }
218
309
  const listeningPort = resolveListeningPort(server);
219
310
  debugServerStartup('rest.start.success', { host: options.host, requestedPort: options.port, listeningPort });
220
311
  const lockFile = await writeServerLock(options.workspaceRoot, listeningPort, owner);