@devflow-tools/semantic-engine 0.18.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 (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +24 -0
  3. package/dist/__tests__/channel-query-plan.test.d.ts +2 -0
  4. package/dist/__tests__/channel-query-plan.test.d.ts.map +1 -0
  5. package/dist/__tests__/channel-query-plan.test.js +78 -0
  6. package/dist/__tests__/channel-query-plan.test.js.map +1 -0
  7. package/dist/__tests__/domain-action-planner.test.d.ts +2 -0
  8. package/dist/__tests__/domain-action-planner.test.d.ts.map +1 -0
  9. package/dist/__tests__/domain-action-planner.test.js +67 -0
  10. package/dist/__tests__/domain-action-planner.test.js.map +1 -0
  11. package/dist/__tests__/retrieval-query-sampling-resolver.test.d.ts +2 -0
  12. package/dist/__tests__/retrieval-query-sampling-resolver.test.d.ts.map +1 -0
  13. package/dist/__tests__/retrieval-query-sampling-resolver.test.js +182 -0
  14. package/dist/__tests__/retrieval-query-sampling-resolver.test.js.map +1 -0
  15. package/dist/__tests__/semantic-authority-merger.test.d.ts +2 -0
  16. package/dist/__tests__/semantic-authority-merger.test.d.ts.map +1 -0
  17. package/dist/__tests__/semantic-authority-merger.test.js +50 -0
  18. package/dist/__tests__/semantic-authority-merger.test.js.map +1 -0
  19. package/dist/__tests__/semantic-context-resolver.test.d.ts +2 -0
  20. package/dist/__tests__/semantic-context-resolver.test.d.ts.map +1 -0
  21. package/dist/__tests__/semantic-context-resolver.test.js +258 -0
  22. package/dist/__tests__/semantic-context-resolver.test.js.map +1 -0
  23. package/dist/__tests__/semantic-router.test.d.ts +2 -0
  24. package/dist/__tests__/semantic-router.test.d.ts.map +1 -0
  25. package/dist/__tests__/semantic-router.test.js +69 -0
  26. package/dist/__tests__/semantic-router.test.js.map +1 -0
  27. package/dist/__tests__/task-claim-compiler.test.d.ts +2 -0
  28. package/dist/__tests__/task-claim-compiler.test.d.ts.map +1 -0
  29. package/dist/__tests__/task-claim-compiler.test.js +127 -0
  30. package/dist/__tests__/task-claim-compiler.test.js.map +1 -0
  31. package/dist/domain-action-planner.d.ts +3 -0
  32. package/dist/domain-action-planner.d.ts.map +1 -0
  33. package/dist/domain-action-planner.js +163 -0
  34. package/dist/domain-action-planner.js.map +1 -0
  35. package/dist/index.d.ts +13 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +13 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/query-plan-compilers.d.ts +15 -0
  40. package/dist/query-plan-compilers.d.ts.map +1 -0
  41. package/dist/query-plan-compilers.js +178 -0
  42. package/dist/query-plan-compilers.js.map +1 -0
  43. package/dist/retrieval-query-proposal.d.ts +22 -0
  44. package/dist/retrieval-query-proposal.d.ts.map +1 -0
  45. package/dist/retrieval-query-proposal.js +114 -0
  46. package/dist/retrieval-query-proposal.js.map +1 -0
  47. package/dist/retrieval-query-sampling-resolver.d.ts +41 -0
  48. package/dist/retrieval-query-sampling-resolver.d.ts.map +1 -0
  49. package/dist/retrieval-query-sampling-resolver.js +248 -0
  50. package/dist/retrieval-query-sampling-resolver.js.map +1 -0
  51. package/dist/semantic-authority-merger.d.ts +20 -0
  52. package/dist/semantic-authority-merger.d.ts.map +1 -0
  53. package/dist/semantic-authority-merger.js +209 -0
  54. package/dist/semantic-authority-merger.js.map +1 -0
  55. package/dist/semantic-claim-validator.d.ts +15 -0
  56. package/dist/semantic-claim-validator.d.ts.map +1 -0
  57. package/dist/semantic-claim-validator.js +139 -0
  58. package/dist/semantic-claim-validator.js.map +1 -0
  59. package/dist/semantic-context-resolver.d.ts +49 -0
  60. package/dist/semantic-context-resolver.d.ts.map +1 -0
  61. package/dist/semantic-context-resolver.js +137 -0
  62. package/dist/semantic-context-resolver.js.map +1 -0
  63. package/dist/semantic-resolver.d.ts +10 -0
  64. package/dist/semantic-resolver.d.ts.map +1 -0
  65. package/dist/semantic-resolver.js +16 -0
  66. package/dist/semantic-resolver.js.map +1 -0
  67. package/dist/semantic-route-catalog.d.ts +35 -0
  68. package/dist/semantic-route-catalog.d.ts.map +1 -0
  69. package/dist/semantic-route-catalog.js +53 -0
  70. package/dist/semantic-route-catalog.js.map +1 -0
  71. package/dist/semantic-router.d.ts +39 -0
  72. package/dist/semantic-router.d.ts.map +1 -0
  73. package/dist/semantic-router.js +175 -0
  74. package/dist/semantic-router.js.map +1 -0
  75. package/dist/semantic-structural-evidence.d.ts +27 -0
  76. package/dist/semantic-structural-evidence.d.ts.map +1 -0
  77. package/dist/semantic-structural-evidence.js +134 -0
  78. package/dist/semantic-structural-evidence.js.map +1 -0
  79. package/dist/task-claim-compiler.d.ts +13 -0
  80. package/dist/task-claim-compiler.d.ts.map +1 -0
  81. package/dist/task-claim-compiler.js +210 -0
  82. package/dist/task-claim-compiler.js.map +1 -0
  83. package/package.json +37 -0
@@ -0,0 +1,175 @@
1
+ import { EMBEDDING_MODEL_ID, EMBEDDING_MODEL_REVISION, } from '@devflow-tools/sdk';
2
+ import { SEMANTIC_ROUTE_CATALOG, } from './semantic-route-catalog.js';
3
+ import { requestValidatedEmbeddingBatch } from '@devflow-tools/provider-runtime';
4
+ export const SHADOW_SEMANTIC_THRESHOLDS = {
5
+ schemaVersion: 'semantic-thresholds.v1',
6
+ version: 'shadow-bootstrap.v1',
7
+ minimumScore: 0.55,
8
+ minimumMargin: 0.08,
9
+ };
10
+ export class SemanticRouter {
11
+ encoder;
12
+ routes;
13
+ thresholds;
14
+ embeddedRoutes = null;
15
+ warmupPromise = null;
16
+ constructor(encoder, routes = SEMANTIC_ROUTE_CATALOG.routes, thresholds = SHADOW_SEMANTIC_THRESHOLDS) {
17
+ this.encoder = encoder;
18
+ this.routes = routes;
19
+ this.thresholds = thresholds;
20
+ }
21
+ warmup() {
22
+ this.warmupPromise ??= this.initialize().finally(() => {
23
+ if (!this.embeddedRoutes)
24
+ this.warmupPromise = null;
25
+ });
26
+ return this.warmupPromise;
27
+ }
28
+ async route(prompt) {
29
+ const startedAt = performance.now();
30
+ if (!this.embeddedRoutes && !(await this.warmup())) {
31
+ return this.unavailable(startedAt, 'encoder_unavailable');
32
+ }
33
+ try {
34
+ const [query] = await this.encoder.embedBatch([prompt.normalize('NFKC')]);
35
+ if (!query)
36
+ return this.unavailable(startedAt, 'query_embedding_missing');
37
+ const allScores = this.embeddedRoutes.map(item => scoreRoute(query, item));
38
+ const fieldGroups = [...new Set(this.routes.map(item => item.field))]
39
+ .map(field => allScores.filter(item => item.field === field).sort(compareScoredRoute));
40
+ const fieldWinners = fieldGroups.flatMap(group => group.slice(0, 2));
41
+ const ranked = fieldWinners.sort(compareScoredRoute);
42
+ const top = ranked[0];
43
+ const acceptedRoutes = fieldGroups.flatMap(group => {
44
+ const winner = group[0];
45
+ const runnerUp = group[1];
46
+ const fieldMargin = winner && runnerUp ? winner.score - runnerUp.score : undefined;
47
+ return winner && winner.score >= this.thresholds.minimumScore
48
+ && (fieldMargin === undefined || fieldMargin >= this.thresholds.minimumMargin)
49
+ ? [winner.route]
50
+ : [];
51
+ });
52
+ const ambiguousFields = fieldGroups.filter(group => {
53
+ const winner = group[0];
54
+ const runnerUp = group[1];
55
+ return winner && winner.score >= this.thresholds.minimumScore && runnerUp
56
+ && winner.score - runnerUp.score < this.thresholds.minimumMargin;
57
+ });
58
+ const topGroup = top ? fieldGroups.find(group => group[0]?.field === top.field) : undefined;
59
+ const margin = topGroup?.[0] && topGroup[1]
60
+ ? topGroup[0].score - topGroup[1].score : undefined;
61
+ const candidates = ranked.map(item => ({
62
+ route: item.route,
63
+ score: item.score,
64
+ prototypeIds: item.prototypeIds,
65
+ }));
66
+ if (acceptedRoutes.length === 0 && ambiguousFields.length === 0) {
67
+ return decision('out_of_scope', candidates, margin, this, startedAt, 'minimum_score_not_met');
68
+ }
69
+ if (acceptedRoutes.length === 0 && ambiguousFields.length > 0) {
70
+ return decision('escalation_required', candidates, margin, this, startedAt, 'minimum_margin_not_met');
71
+ }
72
+ return decision('accepted', candidates, margin, this, startedAt, 'route_accepted', acceptedRoutes);
73
+ }
74
+ catch {
75
+ return this.unavailable(startedAt, 'encoder_failed');
76
+ }
77
+ }
78
+ get modelId() { return this.encoder.modelId; }
79
+ get modelRevision() { return this.encoder.modelRevision; }
80
+ get thresholdVersion() { return this.thresholds.version; }
81
+ async initialize() {
82
+ if (!(await this.encoder.warmup()))
83
+ return false;
84
+ const flattened = this.routes.flatMap(item => [
85
+ ...item.positives.map(prototype => ({ route: item, kind: 'positive', prototype })),
86
+ ...item.contrasts.map(prototype => ({ route: item, kind: 'contrast', prototype })),
87
+ ]);
88
+ try {
89
+ const embeddings = await this.encoder.embedBatch(flattened.map(item => item.prototype.text));
90
+ if (embeddings.length !== flattened.length || embeddings.some(item => !validVector(item)))
91
+ return false;
92
+ const grouped = new Map();
93
+ flattened.forEach((item, index) => {
94
+ const entry = grouped.get(item.route.id) ?? { route: item.route, positives: [], contrasts: [] };
95
+ entry[item.kind === 'positive' ? 'positives' : 'contrasts'].push(embeddings[index]);
96
+ grouped.set(item.route.id, entry);
97
+ });
98
+ this.embeddedRoutes = this.routes.map(item => grouped.get(item.id));
99
+ return true;
100
+ }
101
+ catch {
102
+ this.embeddedRoutes = null;
103
+ return false;
104
+ }
105
+ }
106
+ unavailable(startedAt, reason) {
107
+ return decision('unavailable', [], undefined, this, startedAt, reason);
108
+ }
109
+ }
110
+ export class EmbeddingProviderSemanticEncoder {
111
+ provider;
112
+ modelId = EMBEDDING_MODEL_ID;
113
+ modelRevision = EMBEDDING_MODEL_REVISION;
114
+ constructor(provider) {
115
+ this.provider = provider;
116
+ }
117
+ warmup() { return this.provider.warmup(); }
118
+ embedBatch(texts) {
119
+ return requestValidatedEmbeddingBatch({
120
+ provider: this.provider,
121
+ purpose: 'semantic_routing',
122
+ texts,
123
+ });
124
+ }
125
+ }
126
+ function scoreRoute(query, embedded) {
127
+ const positiveScores = embedded.positives.map(value => cosine(query, value));
128
+ const contrastScores = embedded.contrasts.map(value => cosine(query, value));
129
+ const positive = Math.max(...positiveScores);
130
+ const contrast = contrastScores.length > 0 ? Math.max(...contrastScores) : 0;
131
+ const winningPositive = positiveScores.indexOf(positive);
132
+ const winningContrast = contrastScores.indexOf(contrast);
133
+ return {
134
+ route: embedded.route.id,
135
+ field: embedded.route.field,
136
+ score: positive - contrast,
137
+ prototypeIds: [
138
+ embedded.route.positives[winningPositive]?.id,
139
+ embedded.route.contrasts[winningContrast]?.id,
140
+ ].filter((value) => Boolean(value)),
141
+ };
142
+ }
143
+ function compareScoredRoute(left, right) {
144
+ return right.score - left.score || left.route.localeCompare(right.route);
145
+ }
146
+ function cosine(left, right) {
147
+ if (left.length === 0 || left.length !== right.length)
148
+ return -1;
149
+ let dot = 0;
150
+ let leftNorm = 0;
151
+ let rightNorm = 0;
152
+ for (let index = 0; index < left.length; index += 1) {
153
+ dot += left[index] * right[index];
154
+ leftNorm += left[index] ** 2;
155
+ rightNorm += right[index] ** 2;
156
+ }
157
+ return leftNorm > 0 && rightNorm > 0 ? dot / Math.sqrt(leftNorm * rightNorm) : -1;
158
+ }
159
+ function validVector(value) {
160
+ return value instanceof Float32Array && value.length > 0 && !value.some(item => !Number.isFinite(item));
161
+ }
162
+ function decision(status, candidates, margin, router, startedAt, reason, acceptedRoutes) {
163
+ return {
164
+ status,
165
+ candidates,
166
+ ...(acceptedRoutes?.length ? { acceptedRoutes } : {}),
167
+ ...(margin !== undefined ? { margin } : {}),
168
+ thresholdVersion: router.thresholdVersion,
169
+ modelId: router.modelId,
170
+ modelRevision: router.modelRevision,
171
+ latencyMs: Math.max(0, Math.round((performance.now() - startedAt) * 1000) / 1000),
172
+ reason,
173
+ };
174
+ }
175
+ //# sourceMappingURL=semantic-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-router.js","sourceRoot":"","sources":["../src/semantic-router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type KnowledgeChunkKind, type SemanticEvidenceSpanV1 } from '@devflow-tools/sdk';
2
+ export interface StructuralKnowledgeNeed {
3
+ kind: KnowledgeChunkKind;
4
+ entity?: string;
5
+ evidence: SemanticEvidenceSpanV1;
6
+ }
7
+ export interface StructuralSemanticEvidence {
8
+ normalizedPrompt: string;
9
+ command?: string;
10
+ targetAnchors: string[];
11
+ packageVersions: Array<{
12
+ name: string;
13
+ version: string;
14
+ }>;
15
+ symbols: string[];
16
+ memoryDirectives: SemanticEvidenceSpanV1[];
17
+ knowledgeNeeds: StructuralKnowledgeNeed[];
18
+ prohibitions: SemanticEvidenceSpanV1[];
19
+ positiveActionSpans: SemanticEvidenceSpanV1[];
20
+ conditions: SemanticEvidenceSpanV1[];
21
+ }
22
+ export declare function extractStructuralSemanticEvidence(input: {
23
+ prompt: string;
24
+ command?: string;
25
+ targetAnchors?: string[];
26
+ }): StructuralSemanticEvidence;
27
+ //# sourceMappingURL=semantic-structural-evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-structural-evidence.d.ts","sourceRoot":"","sources":["../src/semantic-structural-evidence.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC5B,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,sBAAsB,CAAC;CAClC;AAED,MAAM,WAAW,0BAA0B;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,gBAAgB,EAAE,sBAAsB,EAAE,CAAC;IAC3C,cAAc,EAAE,uBAAuB,EAAE,CAAC;IAC1C,YAAY,EAAE,sBAAsB,EAAE,CAAC;IACvC,mBAAmB,EAAE,sBAAsB,EAAE,CAAC;IAC9C,UAAU,EAAE,sBAAsB,EAAE,CAAC;CACtC;AAuCD,wBAAgB,iCAAiC,CAAC,KAAK,EAAE;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,GAAG,0BAA0B,CAiB7B"}
@@ -0,0 +1,134 @@
1
+ import { semanticTextHash, } from '@devflow-tools/sdk';
2
+ const PROHIBITION_RULES = [
3
+ { pattern: /\b(?:do\s+not|don't|never|must\s+not|without)\s+(?:execute|run|change|modify|edit|create|fix|build|publish|release)(?:\s+anything|\s+files?)?/giu, value: 'all_mutation' },
4
+ { pattern: /\b(?:no|without)\s+(?:file|code|project)\s+changes?\b/giu, value: 'all_mutation' },
5
+ { pattern: /\b(?:only|just)\s+(?:analy[sz]e|explain|review|inspect)\b/giu, value: 'all_mutation' },
6
+ { pattern: /(?:不要|禁止|不可|不能|无需|无须|不需要|不)\s*(?:重新)?(?:执行|运行|修改|编辑|创建|生成|修复|构建|编译|发布|发版)(?:任何)?(?:文件|代码|命令|内容)?/gu, value: 'all_mutation' },
7
+ { pattern: /(?:只|仅)(?:做|进行)?(?:分析|解释|审查|查看)(?:原因|日志|代码)?/gu, value: 'all_mutation' },
8
+ ];
9
+ const ACTION_RULES = [
10
+ { pattern: /\b(?:publish|release)\b|发布|发版/giu, value: 'release' },
11
+ { pattern: /\b(?:install|add dependency|upgrade dependency)\b|安装依赖|更新依赖/giu, value: 'install' },
12
+ { pattern: /\b(?:run|execute|write)\s+(?:the\s+)?tests?\b|运行测试|执行测试|编写测试/giu, value: 'test' },
13
+ { pattern: /\b(?:compile|bundle|build)\b|构建|编译|打包/giu, value: 'build' },
14
+ { pattern: /\b(?:fix|debug|resolve)\b|修复|调试|解决/giu, value: 'debug' },
15
+ { pattern: /\b(?:create|generate|implement|scaffold|add)\b|创建|生成|实现|新增|开发/giu, value: 'create' },
16
+ { pattern: /\b(?:modify|edit|update|refactor|change|optimize)\b|修改|编辑|更新|重构|调整|优化/giu, value: 'modify' },
17
+ { pattern: /\b(?:write|update)\s+(?:the\s+)?(?:docs?|documentation)\b|编写文档|更新文档/giu, value: 'document' },
18
+ { pattern: /\b(?:format|prettier)\b|格式化/giu, value: 'format' },
19
+ ];
20
+ const CONDITION_RULES = [
21
+ { pattern: /\b(?:if|when|once|after|only after|provided that)\b[^,.;,。;]{0,100}/giu, value: text => text.trim() },
22
+ { pattern: /(?:如果|若|当|等到|确认|完成|通过)[^,。;;]{0,80}(?:后|之后|再|才)/gu, value: text => text.trim() },
23
+ ];
24
+ const MEMORY_DIRECTIVE_RULES = [
25
+ {
26
+ pattern: /\b(?:recall|retrieve|look up)\b[^,.;]{0,48}\b(?:memory|preference|convention|decision)s?\b|(?:召回|回忆|检索|查询|读取)[^,。;;]{0,48}(?:记忆|偏好|约定|决策)/giu,
27
+ value: 'recall',
28
+ },
29
+ ];
30
+ export function extractStructuralSemanticEvidence(input) {
31
+ const normalizedPrompt = input.prompt.normalize('NFKC');
32
+ return {
33
+ normalizedPrompt,
34
+ ...(input.command ? { command: input.command } : {}),
35
+ targetAnchors: [...new Set([
36
+ ...(input.targetAnchors ?? []),
37
+ ...extractExplicitCodeTargets(normalizedPrompt),
38
+ ])].slice(0, 16),
39
+ packageVersions: extractPackageVersions(normalizedPrompt),
40
+ symbols: extractSymbols(normalizedPrompt),
41
+ memoryDirectives: collectSpans(normalizedPrompt, MEMORY_DIRECTIVE_RULES, 'memory', 'structural'),
42
+ knowledgeNeeds: extractKnowledgeNeeds(normalizedPrompt),
43
+ prohibitions: collectSpans(normalizedPrompt, PROHIBITION_RULES, 'negation', 'structural'),
44
+ positiveActionSpans: collectSpans(normalizedPrompt, ACTION_RULES, 'action', 'structural'),
45
+ conditions: collectSpans(normalizedPrompt, CONDITION_RULES, 'condition', 'structural'),
46
+ };
47
+ }
48
+ function extractKnowledgeNeeds(prompt) {
49
+ const needs = [];
50
+ for (const match of prompt.matchAll(/\b(?:query|consult|read|look up)\b[^,.;]{0,80}\b(?:api|docs?|documentation|reference)\b|(?:查询|查阅|检索|阅读)[^,。;;]{0,80}(?:API|接口|文档|资料|参考)/giu)) {
51
+ const text = match[0];
52
+ const start = match.index;
53
+ if (start === undefined || !text)
54
+ continue;
55
+ const kind = knowledgeKind(text);
56
+ const entity = (text.match(/\b[A-Z][A-Za-z0-9_$-]{1,}\b/gu) ?? [])
57
+ .find(value => value.toLocaleLowerCase('en-US') !== 'api');
58
+ needs.push({
59
+ kind,
60
+ ...(entity ? { entity } : {}),
61
+ evidence: {
62
+ field: 'knowledge', source: 'structural', value: kind,
63
+ start, end: start + text.length, textHash: semanticTextHash(text), confidence: 1,
64
+ },
65
+ });
66
+ }
67
+ return needs;
68
+ }
69
+ function extractExplicitCodeTargets(prompt) {
70
+ const values = new Set();
71
+ for (const match of prompt.matchAll(/(?:\b(?:locate|find|open|inspect)\b|定位|查找|找到|查看)\s+[`'"]?([A-Z][A-Za-z0-9_$]{2,})[`'"]?(?:\s*(?:component|class|function|module|组件|类|函数|模块))?/giu)) {
72
+ values.add(match[1]);
73
+ }
74
+ return [...values].slice(0, 16);
75
+ }
76
+ function knowledgeKind(text) {
77
+ if (/\bapi\b|接口|参数|签名|组件/iu.test(text))
78
+ return 'api';
79
+ if (/migration|migrat|upgrade|升级|迁移|破坏性变更/iu.test(text))
80
+ return 'migration';
81
+ if (/error|exception|failure|错误|异常|失败/iu.test(text))
82
+ return 'error';
83
+ if (/behavior|behaviour|runtime|行为|机制/iu.test(text))
84
+ return 'behavior';
85
+ return 'overview';
86
+ }
87
+ function collectSpans(prompt, rules, field, source) {
88
+ const spans = [];
89
+ const seen = new Set();
90
+ for (const rule of rules) {
91
+ rule.pattern.lastIndex = 0;
92
+ for (const match of prompt.matchAll(rule.pattern)) {
93
+ const text = match[0];
94
+ const start = match.index;
95
+ if (start === undefined || text.length === 0)
96
+ continue;
97
+ const value = typeof rule.value === 'function' ? rule.value(text) : rule.value;
98
+ const key = `${field}:${value}:${start}:${text.length}`;
99
+ if (seen.has(key))
100
+ continue;
101
+ seen.add(key);
102
+ spans.push({
103
+ field,
104
+ source,
105
+ value,
106
+ start,
107
+ end: start + text.length,
108
+ textHash: semanticTextHash(text),
109
+ confidence: 1,
110
+ });
111
+ }
112
+ }
113
+ return spans.sort((left, right) => left.start - right.start || left.end - right.end || left.value.localeCompare(right.value));
114
+ }
115
+ function extractPackageVersions(prompt) {
116
+ const result = new Map();
117
+ for (const match of prompt.matchAll(/(@?[a-z][a-z0-9._/-]*)\s+v?(\d+(?:\.\d+){0,2})/giu)) {
118
+ result.set(match[1], match[2]);
119
+ }
120
+ return [...result].map(([name, version]) => ({ name, version })).slice(0, 16);
121
+ }
122
+ function extractSymbols(prompt) {
123
+ const values = new Set();
124
+ for (const pattern of [
125
+ /\b[A-Za-z_$][A-Za-z0-9_$]*(?:\.[A-Za-z_$][A-Za-z0-9_$]*)+\b/gu,
126
+ /\b[A-Z][A-Za-z0-9_$]{2,}\b/gu,
127
+ /`([A-Za-z_$][A-Za-z0-9_$]*(?:\.[A-Za-z_$][A-Za-z0-9_$]*)*)`/gu,
128
+ ]) {
129
+ for (const match of prompt.matchAll(pattern))
130
+ values.add(match[1] ?? match[0]);
131
+ }
132
+ return [...values].slice(0, 16);
133
+ }
134
+ //# sourceMappingURL=semantic-structural-evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-structural-evidence.js","sourceRoot":"","sources":["../src/semantic-structural-evidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { type ActionAuthority, type ChannelDisposition, type SemanticFacts, type ValidatedSemanticClaimV1 } from '@devflow-tools/sdk';
2
+ export interface CompiledSemanticAuthority {
3
+ facts: SemanticFacts;
4
+ dispositions: ChannelDisposition[];
5
+ actionAuthority: ActionAuthority;
6
+ claims: ValidatedSemanticClaimV1[];
7
+ }
8
+ export declare function compileSemanticFacts(input: {
9
+ sourceHash: string;
10
+ claims: ValidatedSemanticClaimV1[];
11
+ providerReceiptIds: string[];
12
+ }): CompiledSemanticAuthority;
13
+ //# sourceMappingURL=task-claim-compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-claim-compiler.d.ts","sourceRoot":"","sources":["../src/task-claim-compiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EAEpB,KAAK,kBAAkB,EAIvB,KAAK,aAAa,EAMlB,KAAK,wBAAwB,EAC9B,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,aAAa,CAAC;IACrB,YAAY,EAAE,kBAAkB,EAAE,CAAC;IACnC,eAAe,EAAE,eAAe,CAAC;IACjC,MAAM,EAAE,wBAAwB,EAAE,CAAC;CACpC;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,wBAAwB,EAAE,CAAC;IACnC,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B,GAAG,yBAAyB,CAoD5B"}
@@ -0,0 +1,210 @@
1
+ import { createSemanticFacts, isMutatingTaskAction, semanticEvidenceId, stableRuntimeHash, } from '@devflow-tools/sdk';
2
+ export function compileSemanticFacts(input) {
3
+ const claims = uniqueBy(input.claims, item => item.claimId)
4
+ .sort((left, right) => left.claimId.localeCompare(right.claimId));
5
+ const providerReceiptIds = [...new Set(input.providerReceiptIds)].sort();
6
+ if (claims.some(claim => !providerReceiptIds.includes(claim.providerReceiptId))) {
7
+ throw new Error('TASK_CLAIM_PROVIDER_RECEIPT_MISSING');
8
+ }
9
+ for (const claim of claims)
10
+ assertClaimIntegrity(input.sourceHash, claim);
11
+ const intent = selectScalar(claims, 'intent');
12
+ const action = selectScalar(claims, 'action');
13
+ const memory = selectScalar(claims, 'memory_directive');
14
+ const outOfScope = selectScalar(claims, 'out_of_scope');
15
+ const conflicts = [intent.conflict, action.conflict, memory.conflict, outOfScope.conflict]
16
+ .filter((item) => Boolean(item))
17
+ .sort((left, right) => left.field.localeCompare(right.field));
18
+ const memoryDirective = memory.conflict ? 'ambiguous' : memory.value ?? 'none';
19
+ const knowledgeNeeds = uniqueKnowledge(claims
20
+ .filter(isKind('knowledge_need')).map(item => item.claim.value));
21
+ const structuralNegations = claims.filter(isKind('negation'))
22
+ .filter(item => item.source === 'structural');
23
+ const structuralConditions = claims.filter(isKind('condition'))
24
+ .filter(item => item.source === 'structural');
25
+ const evidence = uniqueEvidence(claims.flatMap(item => item.evidence));
26
+ const confidence = compileConfidence(claims);
27
+ const facts = createSemanticFacts({
28
+ sourceHash: input.sourceHash,
29
+ intents: uniqueStrings(claims.filter(isKind('intent')).map(item => item.claim.value)),
30
+ actions: uniqueStrings(claims.filter(isKind('action')).map(item => item.claim.value)),
31
+ entities: uniqueStrings(claims.filter(isKind('entity')).map(item => item.claim.value)),
32
+ targets: uniqueStrings(claims.filter(isKind('target')).map(item => item.claim.value)),
33
+ constraints: uniqueStrings(claims.filter(isKind('constraint')).map(item => item.claim.value)),
34
+ prohibitions: uniqueStrings(claims.filter(isKind('negation')).map(item => item.claim.value)),
35
+ conditions: uniqueStrings(claims.filter(isKind('condition')).map(item => item.claim.value)),
36
+ memoryDirective,
37
+ knowledgeNeeds,
38
+ confidence,
39
+ evidence,
40
+ conflicts,
41
+ });
42
+ return {
43
+ facts,
44
+ dispositions: compileChannelDispositions(facts, claims),
45
+ actionAuthority: compileActionAuthority({
46
+ action: action.conflict ? undefined : action.value,
47
+ targets: facts.targets,
48
+ structuralNegations,
49
+ structuralConditions,
50
+ claims,
51
+ }),
52
+ claims,
53
+ };
54
+ }
55
+ function compileActionAuthority(input) {
56
+ const structuralActions = input.claims.filter(claim => claim.source === 'structural'
57
+ && claim.claim.kind === 'action' && claim.claim.value === input.action);
58
+ const conditionEvidenceIds = uniqueStrings(input.structuralConditions.flatMap(item => item.evidenceIds));
59
+ const authorityEvidenceIds = uniqueStrings(structuralActions.flatMap(item => item.evidenceIds));
60
+ const mutation = input.structuralNegations.length > 0
61
+ ? 'prohibited'
62
+ : !input.action || !isMutatingTaskAction(input.action)
63
+ ? 'not_requested'
64
+ : conditionEvidenceIds.length > 0
65
+ ? 'conditional'
66
+ : authorityEvidenceIds.length > 0
67
+ ? 'authorized'
68
+ : 'not_requested';
69
+ const reasonCode = mutation === 'prohibited' ? 'explicit_structural_prohibition'
70
+ : mutation === 'conditional' ? 'condition_proof_required'
71
+ : mutation === 'authorized' ? 'explicit_structural_action'
72
+ : input.action && isMutatingTaskAction(input.action)
73
+ ? 'structural_action_absent' : 'mutation_not_requested';
74
+ const body = {
75
+ mutation,
76
+ ...(input.action ? { action: input.action } : {}),
77
+ targetAnchors: input.targets,
78
+ conditionEvidenceIds,
79
+ authorityEvidenceIds,
80
+ reasonCode,
81
+ };
82
+ return Object.freeze({ ...body, authorityHash: stableRuntimeHash(body) });
83
+ }
84
+ function compileChannelDispositions(facts, claims) {
85
+ return ['code', 'memory', 'knowledge'].map(channel => {
86
+ const prohibited = claims.filter(claim => claim.source === 'structural'
87
+ && claim.claim.kind === 'negation' && claim.claim.value === `channel:${channel}`);
88
+ const required = channelEvidence(channel, claims, facts);
89
+ if (prohibited.length > 0)
90
+ return {
91
+ channel, requirement: 'prohibited', reasonCode: 'explicit_channel_prohibition',
92
+ evidenceIds: uniqueStrings(prohibited.flatMap(item => item.evidenceIds)),
93
+ };
94
+ if (required.length > 0)
95
+ return {
96
+ channel, requirement: 'required', reasonCode: 'explicit_channel_request',
97
+ evidenceIds: uniqueStrings(required.flatMap(item => item.evidenceIds)),
98
+ };
99
+ return { channel, requirement: 'optional', reasonCode: 'safe_read_default', evidenceIds: [] };
100
+ });
101
+ }
102
+ function channelEvidence(channel, claims, facts) {
103
+ if (channel === 'code') {
104
+ const targets = claims.filter(isKind('target'));
105
+ if (targets.length > 0)
106
+ return targets;
107
+ if (facts.actions.some(action => ['test', 'build', 'release', 'verify'].includes(action))) {
108
+ return claims.filter(isKind('action'));
109
+ }
110
+ return [];
111
+ }
112
+ if (channel === 'memory') {
113
+ return facts.memoryDirective === 'none' || facts.memoryDirective === 'ambiguous'
114
+ ? [] : claims.filter(isKind('memory_directive'));
115
+ }
116
+ return claims.filter(isKind('knowledge_need'));
117
+ }
118
+ function selectScalar(claims, kind) {
119
+ const candidates = claims.filter(item => item.claim.kind === kind);
120
+ if (candidates.length === 0)
121
+ return {};
122
+ const topRank = Math.max(...candidates.map(item => sourceRank(item.source)));
123
+ const top = candidates.filter(item => sourceRank(item.source) === topRank);
124
+ const topValues = uniqueStrings(top.map(item => printable(item.claim.value)));
125
+ if (topValues.length > 1) {
126
+ return {
127
+ conflict: {
128
+ field: kind,
129
+ claimIds: top.map(item => item.claimId).sort(),
130
+ values: topValues,
131
+ resolution: 'abstain',
132
+ },
133
+ };
134
+ }
135
+ const selected = [...top].sort((left, right) => right.confidence - left.confidence || left.claimId.localeCompare(right.claimId))[0];
136
+ const differing = candidates.filter(item => printable(item.claim.value) !== topValues[0]);
137
+ return {
138
+ value: selected.claim.value,
139
+ ...(differing.length > 0 ? {
140
+ conflict: {
141
+ field: kind,
142
+ claimIds: [selected, ...differing].map(item => item.claimId).sort(),
143
+ values: uniqueStrings([topValues[0], ...differing.map(item => printable(item.claim.value))]),
144
+ resolution: resolutionFor(selected.source),
145
+ },
146
+ } : {}),
147
+ };
148
+ }
149
+ function isKind(kind) {
150
+ return (claim) => claim.claim.kind === kind;
151
+ }
152
+ function sourceRank(source) {
153
+ if (source === 'structural')
154
+ return 3;
155
+ if (source === 'host_sampling')
156
+ return 2;
157
+ return 1;
158
+ }
159
+ function resolutionFor(source) {
160
+ if (source === 'structural')
161
+ return 'structural_wins';
162
+ if (source === 'host_sampling')
163
+ return 'host_wins';
164
+ return 'embedding_wins';
165
+ }
166
+ function assertClaimIntegrity(sourceHash, claim) {
167
+ const { claimHash, ...body } = claim;
168
+ if (stableRuntimeHash(body) !== claimHash)
169
+ throw new Error('TASK_CLAIM_HASH_MISMATCH');
170
+ if (claim.sourceHash !== sourceHash)
171
+ throw new Error('TASK_CLAIM_SOURCE_HASH_MISMATCH');
172
+ if (claim.evidence.length === 0 || claim.evidence.some(item => !claim.evidenceIds.includes(semanticEvidenceId(item)))) {
173
+ throw new Error('TASK_CLAIM_EVIDENCE_INVALID');
174
+ }
175
+ if (!sourceHash)
176
+ throw new Error('TASK_CLAIM_SOURCE_HASH_MISSING');
177
+ }
178
+ function compileConfidence(claims) {
179
+ if (claims.length === 0)
180
+ return { overall: 0 };
181
+ const perField = {};
182
+ for (const claim of claims) {
183
+ const field = claim.evidence[0].field;
184
+ perField[field] = Math.max(perField[field] ?? 0, claim.confidence);
185
+ }
186
+ return { overall: claims.reduce((sum, item) => sum + item.confidence, 0) / claims.length, ...perField };
187
+ }
188
+ function uniqueKnowledge(values) {
189
+ const unique = uniqueBy(values, item => stableRuntimeHash(item));
190
+ return unique.filter(item => isScopedKnowledgeNeed(item)
191
+ || !unique.some(candidate => candidate.kind === item.kind && isScopedKnowledgeNeed(candidate)))
192
+ .sort((left, right) => stableRuntimeHash(left).localeCompare(stableRuntimeHash(right)));
193
+ }
194
+ function isScopedKnowledgeNeed(value) {
195
+ return Boolean(value.entity || value.symbol || value.version);
196
+ }
197
+ function uniqueEvidence(values) {
198
+ return uniqueBy(values, semanticEvidenceId)
199
+ .sort((left, right) => semanticEvidenceId(left).localeCompare(semanticEvidenceId(right)));
200
+ }
201
+ function uniqueStrings(values) {
202
+ return [...new Set(values)].sort();
203
+ }
204
+ function uniqueBy(values, key) {
205
+ return [...new Map(values.map(value => [key(value), value])).values()];
206
+ }
207
+ function printable(value) {
208
+ return typeof value === 'string' ? value : JSON.stringify(value);
209
+ }
210
+ //# sourceMappingURL=task-claim-compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-claim-compiler.js","sourceRoot":"","sources":["../src/task-claim-compiler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,GAclB,MAAM,oBAAoB,CAAC;AAS5B,MAAM,UAAU,oBAAoB,CAAC,KAIpC;IACC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;SACxD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACpE,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACzE,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC;QAChF,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,oBAAoB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAE1E,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC;SACvF,MAAM,CAAC,CAAC,IAAI,EAAmC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAChE,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAChE,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC;IAC/E,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM;SAC1C,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACnE,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;SAC1D,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC;IAChD,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;SAC5D,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,mBAAmB,CAAC;QAChC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAA0B;QAC9G,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAA0B;QAC9G,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtF,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrF,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7F,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5F,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3F,eAAe;QACf,cAAc;QACd,UAAU;QACV,QAAQ;QACR,SAAS;KACV,CAAC,CAAC;IACH,OAAO;QACL,KAAK;QACL,YAAY,EAAE,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC;QACvD,eAAe,EAAE,sBAAsB,CAAC;YACtC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;YAClD,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,mBAAmB;YACnB,oBAAoB;YACpB,MAAM;SACP,CAAC;QACF,MAAM;KACP,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAM/B;IACC,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,YAAY;WAC/E,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1E,MAAM,oBAAoB,GAAG,aAAa,CAAC,KAAK,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACzG,MAAM,oBAAoB,GAAG,aAAa,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAChG,MAAM,QAAQ,GAAgC,KAAK,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC;QAChF,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC;YACpD,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC;gBAC/B,CAAC,CAAC,aAAa;gBACf,CAAC,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC;oBAC/B,CAAC,CAAC,YAAY;oBACd,CAAC,CAAC,eAAe,CAAC;IAC1B,MAAM,UAAU,GAAG,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,iCAAiC;QAC9E,CAAC,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,0BAA0B;YACvD,CAAC,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,4BAA4B;gBACxD,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC;oBAClD,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,wBAAwB,CAAC;IAChE,MAAM,IAAI,GAAG;QACX,QAAQ;QACR,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,aAAa,EAAE,KAAK,CAAC,OAAO;QAC5B,oBAAoB;QACpB,oBAAoB;QACpB,UAAU;KACX,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,0BAA0B,CACjC,KAAoB,EACpB,MAAkC;IAElC,OAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;QAC9D,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,YAAY;eAClE,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,WAAW,OAAO,EAAE,CAAC,CAAC;QACpF,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACzD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO;gBAChC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,8BAA8B;gBAC9E,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aACzE,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO;gBAC9B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,0BAA0B;gBACxE,WAAW,EAAE,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aACvE,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAChG,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CACtB,OAAoB,EACpB,MAAkC,EAClC,KAAoB;IAEpB,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC;QACvC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YAC1F,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,eAAe,KAAK,MAAM,IAAI,KAAK,CAAC,eAAe,KAAK,WAAW;YAC9E,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACjD,CAAC;AAeD,SAAS,YAAY,CACnB,MAAkC,EAClC,IAAgB;IAEhB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAE/D,CAAC;IACH,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,CAAC;IAC3E,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9E,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,QAAQ,EAAE;gBACR,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;gBAC9C,MAAM,EAAE,SAAS;gBACjB,UAAU,EAAE,SAAS;aACtB;SACF,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC7C,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;IACvF,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1F,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK;QAC3B,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YACzB,QAAQ,EAAE;gBACR,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;gBACnE,MAAM,EAAE,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC7F,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;aAC3C;SACF,CAAC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAA4C,IAAU;IACnE,OAAO,CAAC,KAA+B,EAErC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,UAAU,CAAC,MAA2B;IAC7C,IAAI,MAAM,KAAK,YAAY;QAAE,OAAO,CAAC,CAAC;IACtC,IAAI,MAAM,KAAK,eAAe;QAAE,OAAO,CAAC,CAAC;IACzC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,aAAa,CAAC,MAA2B;IAChD,IAAI,MAAM,KAAK,YAAY;QAAE,OAAO,iBAAiB,CAAC;IACtD,IAAI,MAAM,KAAK,eAAe;QAAE,OAAO,WAAW,CAAC;IACnD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,SAAS,oBAAoB,CAAC,UAAkB,EAAE,KAA+B;IAC/E,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IACrC,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACvF,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACxF,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC5D,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAkC;IAC3D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAmD,EAAE,CAAC;IACpE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC;QACvC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;AAC1G,CAAC;AAED,SAAS,eAAe,CAAC,MAAuB;IAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC;WACnD,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC;SAC9F,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAoB;IACjD,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,cAAc,CAAC,MAAgC;IACtD,OAAO,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;SACxC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,aAAa,CAAC,MAAgB;IACrC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACrC,CAAC;AAED,SAAS,QAAQ,CAAI,MAAW,EAAE,GAAyB;IACzD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC"}