@devflow-tools/knowledge-engine 0.16.27 → 0.16.28

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 (70) hide show
  1. package/dist/context7-fetcher.d.ts +2 -0
  2. package/dist/context7-fetcher.d.ts.map +1 -1
  3. package/dist/context7-fetcher.js +35 -2
  4. package/dist/context7-fetcher.js.map +1 -1
  5. package/dist/dependency-source-compiler.d.ts +24 -0
  6. package/dist/dependency-source-compiler.d.ts.map +1 -0
  7. package/dist/dependency-source-compiler.js +265 -0
  8. package/dist/dependency-source-compiler.js.map +1 -0
  9. package/dist/evidence-graph.d.ts +24 -0
  10. package/dist/evidence-graph.d.ts.map +1 -0
  11. package/dist/evidence-graph.js +82 -0
  12. package/dist/evidence-graph.js.map +1 -0
  13. package/dist/fetcher.d.ts +11 -0
  14. package/dist/fetcher.d.ts.map +1 -1
  15. package/dist/fetcher.js +12 -0
  16. package/dist/fetcher.js.map +1 -1
  17. package/dist/git-fetcher.d.ts +2 -0
  18. package/dist/git-fetcher.d.ts.map +1 -1
  19. package/dist/git-fetcher.js +47 -0
  20. package/dist/git-fetcher.js.map +1 -1
  21. package/dist/hybrid-search.d.ts +6 -2
  22. package/dist/hybrid-search.d.ts.map +1 -1
  23. package/dist/hybrid-search.js +192 -56
  24. package/dist/hybrid-search.js.map +1 -1
  25. package/dist/index.d.ts +14 -1
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +9 -1
  28. package/dist/index.js.map +1 -1
  29. package/dist/knowledge-compiler.d.ts +48 -0
  30. package/dist/knowledge-compiler.d.ts.map +1 -0
  31. package/dist/knowledge-compiler.js +121 -0
  32. package/dist/knowledge-compiler.js.map +1 -0
  33. package/dist/knowledge-engine.d.ts +25 -1
  34. package/dist/knowledge-engine.d.ts.map +1 -1
  35. package/dist/knowledge-engine.js +446 -64
  36. package/dist/knowledge-engine.js.map +1 -1
  37. package/dist/knowledge-quality.d.ts +3 -0
  38. package/dist/knowledge-quality.d.ts.map +1 -1
  39. package/dist/knowledge-quality.js +14 -5
  40. package/dist/knowledge-quality.js.map +1 -1
  41. package/dist/knowledge-store.d.ts +61 -0
  42. package/dist/knowledge-store.d.ts.map +1 -1
  43. package/dist/knowledge-store.js +448 -1
  44. package/dist/knowledge-store.js.map +1 -1
  45. package/dist/markdown-converter.d.ts +1 -1
  46. package/dist/markdown-converter.js +1 -1
  47. package/dist/retrieval-scoring-profile.d.ts +20 -0
  48. package/dist/retrieval-scoring-profile.d.ts.map +1 -0
  49. package/dist/retrieval-scoring-profile.js +35 -0
  50. package/dist/retrieval-scoring-profile.js.map +1 -0
  51. package/dist/source-catalog.d.ts +57 -0
  52. package/dist/source-catalog.d.ts.map +1 -0
  53. package/dist/source-catalog.js +351 -0
  54. package/dist/source-catalog.js.map +1 -0
  55. package/dist/source-readiness.d.ts +7 -0
  56. package/dist/source-readiness.d.ts.map +1 -1
  57. package/dist/source-readiness.js +31 -2
  58. package/dist/source-readiness.js.map +1 -1
  59. package/dist/source-selector.d.ts +11 -0
  60. package/dist/source-selector.d.ts.map +1 -1
  61. package/dist/source-selector.js +160 -15
  62. package/dist/source-selector.js.map +1 -1
  63. package/dist/structural-markdown-chunker.d.ts +33 -0
  64. package/dist/structural-markdown-chunker.d.ts.map +1 -0
  65. package/dist/structural-markdown-chunker.js +328 -0
  66. package/dist/structural-markdown-chunker.js.map +1 -0
  67. package/dist/types.d.ts +1 -1
  68. package/dist/types.d.ts.map +1 -1
  69. package/dist/types.js.map +1 -1
  70. package/package.json +5 -5
@@ -0,0 +1,35 @@
1
+ export const KNOWLEDGE_RETRIEVAL_SCORING_PROFILE = {
2
+ version: 'knowledge-r6b.rrf-v1',
3
+ rrfK: 60,
4
+ channelWeights: {
5
+ exact: 0.40,
6
+ bm25: 0.30,
7
+ entity: 0.20,
8
+ vector: 0.10,
9
+ },
10
+ pageTailWeight: 0.15,
11
+ pageTailCap: 0.12,
12
+ graphSeedMinimum: 0.32,
13
+ graphCandidateMinimum: 0.10,
14
+ };
15
+ export function weightedReciprocalRankFusion(input) {
16
+ const profile = input.profile ?? KNOWLEDGE_RETRIEVAL_SCORING_PROFILE;
17
+ const scores = new Map();
18
+ const activeChannels = Object.keys(profile.channelWeights)
19
+ .filter(channel => (input.channelRanks[channel]?.length ?? 0) > 0);
20
+ const maximum = activeChannels.reduce((sum, channel) => sum + profile.channelWeights[channel] / (profile.rrfK + 1), 0);
21
+ for (const channel of activeChannels) {
22
+ const weight = profile.channelWeights[channel];
23
+ input.channelRanks[channel].forEach((id, index) => {
24
+ const current = scores.get(id) ?? { rawScore: 0, normalizedScore: 0, channelRanks: {} };
25
+ current.rawScore += weight / (profile.rrfK + index + 1);
26
+ current.channelRanks[channel] = index + 1;
27
+ scores.set(id, current);
28
+ });
29
+ }
30
+ for (const value of scores.values()) {
31
+ value.normalizedScore = maximum > 0 ? Math.min(1, value.rawScore / maximum) : 0;
32
+ }
33
+ return scores;
34
+ }
35
+ //# sourceMappingURL=retrieval-scoring-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retrieval-scoring-profile.js","sourceRoot":"","sources":["../src/retrieval-scoring-profile.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,mCAAmC,GAAqC;IACnF,OAAO,EAAE,sBAAsB;IAC/B,IAAI,EAAE,EAAE;IACR,cAAc,EAAE;QACd,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;KACb;IACD,cAAc,EAAE,IAAI;IACpB,WAAW,EAAE,IAAI;IACjB,gBAAgB,EAAE,IAAI;IACtB,qBAAqB,EAAE,IAAI;CAC5B,CAAC;AAEF,MAAM,UAAU,4BAA4B,CAAC,KAG5C;IAKC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,mCAAmC,CAAC;IACrE,MAAM,MAAM,GAAG,IAAI,GAAG,EAIlB,CAAC;IACL,MAAM,cAAc,GAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAiC;SACxF,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CACrD,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC/C,KAAK,CAAC,YAAY,CAAC,OAAO,CAAE,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;YACjD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;YACxF,OAAO,CAAC,QAAQ,IAAI,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;YAC1C,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QACpC,KAAK,CAAC,eAAe,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,57 @@
1
+ import type { KnowledgeAuthority, KnowledgeCoverageGap, KnowledgeReadiness, KnowledgeSourceCatalog, KnowledgeSourceCatalogEntry, KnowledgeSourceKind, KnowledgeSourceSchema, KnowledgeTaskKind, KnowledgeVersionPolicy, ProjectKnowledgeProfile } from '@devflow-tools/sdk';
2
+ import type { KnowledgeStore } from './knowledge-store.js';
3
+ export interface BuildProjectKnowledgeProfileOptions {
4
+ activeSkills?: string[];
5
+ languages?: string[];
6
+ supportedTaskKinds?: KnowledgeTaskKind[];
7
+ generatedAt?: number;
8
+ }
9
+ export interface CreateKnowledgeSourceSchemaInput {
10
+ id: string;
11
+ sourceId: string;
12
+ sourceKind: KnowledgeSourceKind;
13
+ authority: KnowledgeAuthority;
14
+ versionPolicy: KnowledgeVersionPolicy;
15
+ allowedEntities?: string[];
16
+ supportedTaskKinds?: KnowledgeTaskKind[];
17
+ refreshStrategy?: KnowledgeSourceSchema['refreshStrategy'];
18
+ refreshIntervalMs?: number;
19
+ schemaVersion?: number;
20
+ }
21
+ export declare class SourceCatalog {
22
+ private readonly store;
23
+ readonly projectRoot: string;
24
+ constructor(store: KnowledgeStore, projectRoot: string);
25
+ refreshProjectProfile(options?: BuildProjectKnowledgeProfileOptions): ProjectKnowledgeProfile;
26
+ registerSourceSchema(input: CreateKnowledgeSourceSchemaInput): KnowledgeSourceSchema;
27
+ beginRefresh(sourceId: string, inputContentHash: string): ReturnType<KnowledgeStore['beginRefreshJob']>;
28
+ activateSource(input: {
29
+ schemaId: string;
30
+ version?: string;
31
+ contentHash: string;
32
+ readiness: KnowledgeReadiness;
33
+ entities?: string[];
34
+ symbols?: string[];
35
+ taskKinds?: KnowledgeTaskKind[];
36
+ refreshJobId?: string;
37
+ }): {
38
+ entry: KnowledgeSourceCatalogEntry;
39
+ snapshotId: string;
40
+ changed: boolean;
41
+ };
42
+ failRefresh(refreshJobId: string, error: unknown): boolean;
43
+ recordCoverageGap(input: Omit<KnowledgeCoverageGap, 'id' | 'projectRoot' | 'detectedAt'> & {
44
+ detectedAt?: number;
45
+ }): KnowledgeCoverageGap;
46
+ requireCoverage(input: {
47
+ sourceId: string;
48
+ entity?: string;
49
+ symbol?: string;
50
+ requiredVersion?: string;
51
+ taskKind?: KnowledgeTaskKind;
52
+ }): KnowledgeCoverageGap | null;
53
+ getCatalog(): KnowledgeSourceCatalog;
54
+ }
55
+ export declare function buildProjectKnowledgeProfile(projectRoot: string, options?: BuildProjectKnowledgeProfileOptions): ProjectKnowledgeProfile;
56
+ export declare function createKnowledgeSourceSchema(input: CreateKnowledgeSourceSchemaInput): KnowledgeSourceSchema;
57
+ //# sourceMappingURL=source-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-catalog.d.ts","sourceRoot":"","sources":["../src/source-catalog.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,EACtB,2BAA2B,EAC3B,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAoB3D,MAAM,WAAW,mCAAmC;IAClD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gCAAgC;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,mBAAmB,CAAC;IAChC,SAAS,EAAE,kBAAkB,CAAC;IAC9B,aAAa,EAAE,sBAAsB,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACzC,eAAe,CAAC,EAAE,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;IAC3D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,aAAa;IAItB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAGV,KAAK,EAAE,cAAc,EACtC,WAAW,EAAE,MAAM;IAKrB,qBAAqB,CAAC,OAAO,GAAE,mCAAwC,GAAG,uBAAuB;IAMjG,oBAAoB,CAAC,KAAK,EAAE,gCAAgC,GAAG,qBAAqB;IAMpF,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAQvG,cAAc,CAAC,KAAK,EAAE;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,kBAAkB,CAAC;QAC9B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,SAAS,CAAC,EAAE,iBAAiB,EAAE,CAAC;QAChC,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG;QAAE,KAAK,EAAE,2BAA2B,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAqChF,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO;IAO1D,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,GAAG,aAAa,GAAG,YAAY,CAAC,GACpF;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,oBAAoB;IAqBlD,eAAe,CAAC,KAAK,EAAE;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;KAC9B,GAAG,oBAAoB,GAAG,IAAI;IAmC/B,UAAU,IAAI,sBAAsB;CAyBrC;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,mCAAwC,GAChD,uBAAuB,CAqCzB;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,gCAAgC,GACtC,qBAAqB,CAcvB"}
@@ -0,0 +1,351 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { closeSync, existsSync, openSync, readSync } from 'node:fs';
3
+ import { join, resolve } from 'node:path';
4
+ const MAX_MANIFEST_BYTES = 512 * 1024;
5
+ const DEFAULT_TASK_KINDS = [
6
+ 'overview', 'create', 'modify', 'debug', 'test', 'build', 'migrate', 'explain',
7
+ ];
8
+ const FRAMEWORK_PACKAGES = [
9
+ { packageName: 'react', name: 'react' },
10
+ { packageName: 'next', name: 'nextjs' },
11
+ { packageName: 'vue', name: 'vue' },
12
+ { packageName: '@angular/core', name: 'angular' },
13
+ { packageName: '@nestjs/core', name: 'nest' },
14
+ { packageName: '@tarojs/taro', name: 'taro' },
15
+ { packageName: 'electron', name: 'electron' },
16
+ { packageName: 'tailwindcss', name: 'tailwind' },
17
+ { packageName: 'vitest', name: 'vitest' },
18
+ { packageName: '@rsbuild/core', name: 'rsbuild' },
19
+ ];
20
+ export class SourceCatalog {
21
+ store;
22
+ projectRoot;
23
+ constructor(store, projectRoot) {
24
+ this.store = store;
25
+ this.projectRoot = resolve(projectRoot);
26
+ }
27
+ refreshProjectProfile(options = {}) {
28
+ const profile = buildProjectKnowledgeProfile(this.projectRoot, options);
29
+ this.store.upsertProjectProfile(profile);
30
+ return profile;
31
+ }
32
+ registerSourceSchema(input) {
33
+ const schema = createKnowledgeSourceSchema(input);
34
+ this.store.upsertSourceSchema(schema);
35
+ return schema;
36
+ }
37
+ beginRefresh(sourceId, inputContentHash) {
38
+ return this.store.beginRefreshJob({
39
+ projectRoot: this.projectRoot,
40
+ sourceId,
41
+ inputContentHash,
42
+ });
43
+ }
44
+ activateSource(input) {
45
+ const profile = this.store.getProjectProfile(this.projectRoot)
46
+ ?? this.refreshProjectProfile();
47
+ const schema = this.store.getSourceSchema(input.schemaId);
48
+ if (!schema)
49
+ throw new Error(`Knowledge source schema ${input.schemaId} is not registered`);
50
+ const versionGap = validateSourceVersion(schema, input.version);
51
+ if (versionGap) {
52
+ this.recordCoverageGap({
53
+ sourceId: schema.sourceId,
54
+ kind: 'incompatible_version',
55
+ requiredVersion: schema.versionPolicy.expectedVersion,
56
+ availableVersion: input.version,
57
+ reason: versionGap,
58
+ });
59
+ throw new Error(versionGap);
60
+ }
61
+ const entry = {
62
+ sourceId: schema.sourceId,
63
+ schemaId: schema.id,
64
+ sourceKind: schema.sourceKind,
65
+ authority: schema.authority,
66
+ version: input.version,
67
+ contentHash: input.contentHash,
68
+ readiness: input.readiness,
69
+ entities: uniqueStrings(input.entities ?? []),
70
+ symbols: uniqueStrings(input.symbols ?? []),
71
+ taskKinds: uniqueTaskKinds(input.taskKinds ?? schema.supportedTaskKinds),
72
+ };
73
+ const activated = this.store.activateCatalogEntry({
74
+ projectRoot: this.projectRoot,
75
+ profileHash: profile.profileHash,
76
+ entry,
77
+ });
78
+ if (input.refreshJobId)
79
+ this.store.completeRefreshJob(input.refreshJobId, activated.snapshotId);
80
+ return { entry: { ...entry, activeRevisionId: activated.snapshotId }, ...activated };
81
+ }
82
+ failRefresh(refreshJobId, error) {
83
+ return this.store.failRefreshJob(refreshJobId, error instanceof Error ? error.message : String(error));
84
+ }
85
+ recordCoverageGap(input) {
86
+ const detectedAt = input.detectedAt ?? Date.now();
87
+ const identity = [
88
+ this.projectRoot,
89
+ input.sourceId,
90
+ input.kind,
91
+ input.entity ?? '',
92
+ input.symbol ?? '',
93
+ input.requiredVersion ?? '',
94
+ input.taskKind ?? '',
95
+ ].join('\0');
96
+ const gap = {
97
+ ...input,
98
+ id: `knowledge-gap:${createHash('sha256').update(identity).digest('hex').slice(0, 32)}`,
99
+ projectRoot: this.projectRoot,
100
+ detectedAt,
101
+ };
102
+ this.store.recordCoverageGap(gap);
103
+ return gap;
104
+ }
105
+ requireCoverage(input) {
106
+ const entry = this.store.listActiveCatalogEntries(this.projectRoot)
107
+ .find(candidate => candidate.sourceId === input.sourceId);
108
+ if (!entry) {
109
+ return this.recordCoverageGap({
110
+ ...input,
111
+ kind: 'missing_source',
112
+ reason: `Knowledge source ${input.sourceId} has no active compiled revision`,
113
+ });
114
+ }
115
+ if (input.requiredVersion && major(input.requiredVersion) !== major(entry.version)) {
116
+ return this.recordCoverageGap({
117
+ ...input,
118
+ kind: 'incompatible_version',
119
+ availableVersion: entry.version,
120
+ reason: `Knowledge source ${input.sourceId} does not satisfy major version ${input.requiredVersion}`,
121
+ });
122
+ }
123
+ if (input.symbol && !hasNormalized(entry.symbols, input.symbol)) {
124
+ return this.recordCoverageGap({
125
+ ...input,
126
+ kind: 'missing_api',
127
+ reason: `Knowledge source ${input.sourceId} does not cover API ${input.symbol}`,
128
+ });
129
+ }
130
+ if (input.entity && !hasNormalized(entry.entities, input.entity)) {
131
+ return this.recordCoverageGap({
132
+ ...input,
133
+ kind: 'missing_entity',
134
+ reason: `Knowledge source ${input.sourceId} does not cover entity ${input.entity}`,
135
+ });
136
+ }
137
+ return null;
138
+ }
139
+ getCatalog() {
140
+ const profile = this.store.getProjectProfile(this.projectRoot)
141
+ ?? this.refreshProjectProfile();
142
+ const sources = this.store.listActiveCatalogEntries(this.projectRoot);
143
+ const coverageGaps = this.store.listCoverageGaps(this.projectRoot);
144
+ const generatedAt = Math.max(profile.generatedAt, ...sources.map(source => source.readiness.lastAttempt ?? source.readiness.lastSuccessfulRefresh ?? 0), ...coverageGaps.map(gap => gap.detectedAt));
145
+ const catalogHash = hashStable({
146
+ projectRoot: this.projectRoot,
147
+ profileHash: profile.profileHash,
148
+ sources,
149
+ coverageGaps,
150
+ });
151
+ return {
152
+ projectRoot: this.projectRoot,
153
+ profileHash: profile.profileHash,
154
+ catalogHash,
155
+ generatedAt,
156
+ sources,
157
+ coverageGaps,
158
+ };
159
+ }
160
+ }
161
+ export function buildProjectKnowledgeProfile(projectRoot, options = {}) {
162
+ const root = resolve(projectRoot);
163
+ const manifest = readJson(join(root, 'package.json'));
164
+ const dependencies = collectDependencies(manifest);
165
+ const packageManager = parsePackageManager(manifest.packageManager);
166
+ const languages = uniqueStrings([
167
+ ...(options.languages ?? []),
168
+ ...detectLanguages(root, dependencies),
169
+ ]).sort();
170
+ const frameworks = FRAMEWORK_PACKAGES.flatMap(definition => {
171
+ const version = dependencies[definition.packageName];
172
+ return version ? [{ name: definition.name, version, packageName: definition.packageName }] : [];
173
+ }).sort((left, right) => left.name.localeCompare(right.name));
174
+ const activeSkills = uniqueStrings([
175
+ ...(options.activeSkills ?? []),
176
+ ...Object.keys(dependencies)
177
+ .filter(name => name.startsWith('@devflow-tools/plugin-'))
178
+ .map(name => name.slice('@devflow-tools/plugin-'.length)),
179
+ ]).sort();
180
+ const supportedTaskKinds = uniqueTaskKinds(options.supportedTaskKinds ?? inferTaskKinds(manifest, dependencies));
181
+ const generatedAt = options.generatedAt ?? Date.now();
182
+ const profileMaterial = {
183
+ projectRoot: root,
184
+ packageManager,
185
+ languages,
186
+ frameworks,
187
+ dependencies,
188
+ activeSkills,
189
+ supportedTaskKinds,
190
+ };
191
+ return {
192
+ ...profileMaterial,
193
+ profileHash: hashStable(profileMaterial),
194
+ generatedAt,
195
+ };
196
+ }
197
+ export function createKnowledgeSourceSchema(input) {
198
+ const material = {
199
+ id: input.id,
200
+ sourceId: input.sourceId,
201
+ sourceKind: input.sourceKind,
202
+ authority: input.authority,
203
+ versionPolicy: input.versionPolicy,
204
+ allowedEntities: uniqueStrings(input.allowedEntities ?? []).sort(),
205
+ supportedTaskKinds: uniqueTaskKinds(input.supportedTaskKinds ?? DEFAULT_TASK_KINDS),
206
+ refreshStrategy: input.refreshStrategy ?? 'on_demand',
207
+ ...(input.refreshIntervalMs !== undefined ? { refreshIntervalMs: input.refreshIntervalMs } : {}),
208
+ schemaVersion: input.schemaVersion ?? 1,
209
+ };
210
+ return { ...material, contentHash: hashStable(material) };
211
+ }
212
+ function validateSourceVersion(schema, version) {
213
+ const policy = schema.versionPolicy;
214
+ if (policy.mode === 'unversioned')
215
+ return null;
216
+ if (!version)
217
+ return `Knowledge source ${schema.sourceId} is missing a required version`;
218
+ if (!policy.expectedVersion)
219
+ return null;
220
+ if (policy.mode === 'exact' && normalizeVersion(version) !== normalizeVersion(policy.expectedVersion)) {
221
+ return `Knowledge source ${schema.sourceId} version ${version} is incompatible with exact version ${policy.expectedVersion}`;
222
+ }
223
+ if (policy.mode === 'exact_major' && major(version) !== major(policy.expectedVersion)) {
224
+ return `Knowledge source ${schema.sourceId} version ${version} is incompatible with major version ${policy.expectedVersion}`;
225
+ }
226
+ return null;
227
+ }
228
+ function collectDependencies(manifest) {
229
+ const result = {};
230
+ for (const field of ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies']) {
231
+ const values = manifest[field];
232
+ if (!values || typeof values !== 'object' || Array.isArray(values))
233
+ continue;
234
+ for (const [name, version] of Object.entries(values)) {
235
+ if (typeof version === 'string' && !(name in result))
236
+ result[name] = version;
237
+ }
238
+ }
239
+ return Object.fromEntries(Object.entries(result).sort(([left], [right]) => left.localeCompare(right)));
240
+ }
241
+ function detectLanguages(root, dependencies) {
242
+ const languages = [];
243
+ if (existsSync(join(root, 'tsconfig.json')) || 'typescript' in dependencies)
244
+ languages.push('typescript');
245
+ if (existsSync(join(root, 'package.json')))
246
+ languages.push('javascript');
247
+ if (existsSync(join(root, 'pyproject.toml')) || existsSync(join(root, 'requirements.txt')))
248
+ languages.push('python');
249
+ if (existsSync(join(root, 'go.mod')))
250
+ languages.push('go');
251
+ if (existsSync(join(root, 'Cargo.toml')))
252
+ languages.push('rust');
253
+ if (existsSync(join(root, 'pom.xml')) || existsSync(join(root, 'build.gradle')))
254
+ languages.push('java');
255
+ return languages;
256
+ }
257
+ function inferTaskKinds(manifest, dependencies) {
258
+ const tasks = new Set(['overview', 'create', 'modify', 'debug', 'explain']);
259
+ const scripts = manifest.scripts && typeof manifest.scripts === 'object' && !Array.isArray(manifest.scripts)
260
+ ? manifest.scripts
261
+ : {};
262
+ if ('test' in scripts || ['vitest', 'jest', 'mocha'].some(name => name in dependencies))
263
+ tasks.add('test');
264
+ if ('build' in scripts || ['vite', '@rsbuild/core', 'webpack', 'next'].some(name => name in dependencies))
265
+ tasks.add('build');
266
+ if (Object.keys(dependencies).length > 0)
267
+ tasks.add('migrate');
268
+ return [...tasks];
269
+ }
270
+ function parsePackageManager(value) {
271
+ if (typeof value !== 'string' || !value.trim())
272
+ return undefined;
273
+ const [name, version] = value.trim().split('@');
274
+ return name ? { name, ...(version ? { version } : {}) } : undefined;
275
+ }
276
+ function readJson(path) {
277
+ const text = readBoundedText(path, MAX_MANIFEST_BYTES);
278
+ if (!text)
279
+ return {};
280
+ try {
281
+ const value = JSON.parse(text);
282
+ return value && typeof value === 'object' && !Array.isArray(value)
283
+ ? value
284
+ : {};
285
+ }
286
+ catch {
287
+ return {};
288
+ }
289
+ }
290
+ function readBoundedText(path, maxBytes) {
291
+ if (!existsSync(path))
292
+ return null;
293
+ let descriptor;
294
+ try {
295
+ descriptor = openSync(path, 'r');
296
+ const buffer = Buffer.allocUnsafe(maxBytes);
297
+ const bytes = readSync(descriptor, buffer, 0, maxBytes, 0);
298
+ return buffer.subarray(0, bytes).toString('utf8');
299
+ }
300
+ catch {
301
+ return null;
302
+ }
303
+ finally {
304
+ if (descriptor !== undefined)
305
+ closeSync(descriptor);
306
+ }
307
+ }
308
+ function uniqueStrings(values) {
309
+ const seen = new Set();
310
+ return values.filter(value => {
311
+ const key = normalize(value);
312
+ if (!key || seen.has(key))
313
+ return false;
314
+ seen.add(key);
315
+ return true;
316
+ });
317
+ }
318
+ function uniqueTaskKinds(values) {
319
+ return [...new Set(values)].sort();
320
+ }
321
+ function hasNormalized(values, target) {
322
+ const expected = normalize(target);
323
+ return values.some(value => normalize(value) === expected);
324
+ }
325
+ function normalize(value) {
326
+ return value.normalize('NFKC').trim().toLocaleLowerCase('en-US').replace(/\s+/gu, ' ');
327
+ }
328
+ function normalizeVersion(value) {
329
+ return value.trim().replace(/^[~^<>=v\s]+/u, '').split(/[-+]/u)[0] ?? '';
330
+ }
331
+ function major(value) {
332
+ if (!value)
333
+ return null;
334
+ return normalizeVersion(value).match(/^\d+/u)?.[0] ?? null;
335
+ }
336
+ function hashStable(value) {
337
+ return createHash('sha256').update(stableJson(value)).digest('hex');
338
+ }
339
+ function stableJson(value) {
340
+ if (Array.isArray(value))
341
+ return `[${value.map(stableJson).join(',')}]`;
342
+ if (value && typeof value === 'object') {
343
+ return `{${Object.entries(value)
344
+ .filter(([, entry]) => entry !== undefined)
345
+ .sort(([left], [right]) => left.localeCompare(right))
346
+ .map(([key, entry]) => `${JSON.stringify(key)}:${stableJson(entry)}`)
347
+ .join(',')}}`;
348
+ }
349
+ return JSON.stringify(value);
350
+ }
351
+ //# sourceMappingURL=source-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-catalog.js","sourceRoot":"","sources":["../src/source-catalog.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,13 @@ export interface ProjectKnowledgeVersions {
2
2
  react?: string;
3
3
  typescript?: string;
4
4
  node?: string;
5
+ vue?: string;
6
+ angular?: string;
7
+ nextjs?: string;
8
+ nest?: string;
9
+ vitest?: string;
10
+ tailwind?: string;
11
+ dependencies?: Record<string, string>;
5
12
  }
6
13
  export declare function detectProjectKnowledgeVersions(projectRoot: string): ProjectKnowledgeVersions;
7
14
  export declare function isKnowledgeVersionCompatible(source: string, documentVersion: string | null | undefined, projectVersions: ProjectKnowledgeVersions): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"source-readiness.d.ts","sourceRoot":"","sources":["../src/source-readiness.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,MAAM,GAAG,wBAAwB,CAkB5F;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC1C,eAAe,EAAE,wBAAwB,GACxC,OAAO,CAMT;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,wBAAwB,GACxC,MAAM,GAAG,SAAS,CAGpB"}
1
+ {"version":3,"file":"source-readiness.d.ts","sourceRoot":"","sources":["../src/source-readiness.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,MAAM,GAAG,wBAAwB,CA6B5F;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC1C,eAAe,EAAE,wBAAwB,GACxC,OAAO,CAST;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,wBAAwB,GACxC,MAAM,GAAG,SAAS,CAMpB"}
@@ -11,10 +11,21 @@ export function detectProjectKnowledgeVersions(projectRoot) {
11
11
  ...asRecord(pkg.devDependencies),
12
12
  ...asRecord(pkg.peerDependencies),
13
13
  };
14
+ const dependencyVersions = Object.fromEntries(Object.entries(dependencies).flatMap(([name, value]) => {
15
+ const version = majorVersion(value);
16
+ return version ? [[name, version]] : [];
17
+ }));
14
18
  return {
15
19
  react: majorVersion(dependencies.react),
16
20
  typescript: majorVersion(dependencies.typescript),
17
21
  node: majorVersion(asRecord(pkg.engines).node),
22
+ vue: majorVersion(dependencies.vue),
23
+ angular: majorVersion(dependencies['@angular/core']),
24
+ nextjs: majorVersion(dependencies.next),
25
+ nest: majorVersion(dependencies['@nestjs/core']),
26
+ vitest: majorVersion(dependencies.vitest),
27
+ tailwind: majorVersion(dependencies.tailwindcss),
28
+ dependencies: dependencyVersions,
18
29
  };
19
30
  }
20
31
  catch {
@@ -23,7 +34,10 @@ export function detectProjectKnowledgeVersions(projectRoot) {
23
34
  }
24
35
  export function isKnowledgeVersionCompatible(source, documentVersion, projectVersions) {
25
36
  const family = sourceFamily(source);
26
- const expected = family ? projectVersions[family] : undefined;
37
+ const dependencyName = source.startsWith('dependency:') ? source.slice('dependency:'.length) : undefined;
38
+ const expected = dependencyName
39
+ ? projectVersions.dependencies?.[dependencyName]
40
+ : family ? projectVersions[family] : undefined;
27
41
  if (!expected || !documentVersion)
28
42
  return true;
29
43
  const actual = majorVersion(documentVersion);
@@ -31,7 +45,10 @@ export function isKnowledgeVersionCompatible(source, documentVersion, projectVer
31
45
  }
32
46
  export function expectedVersionForSource(source, projectVersions) {
33
47
  const family = sourceFamily(source);
34
- return family ? projectVersions[family] : undefined;
48
+ const dependencyName = source.startsWith('dependency:') ? source.slice('dependency:'.length) : undefined;
49
+ return dependencyName
50
+ ? projectVersions.dependencies?.[dependencyName]
51
+ : family ? projectVersions[family] : undefined;
35
52
  }
36
53
  function sourceFamily(source) {
37
54
  if (/react/iu.test(source))
@@ -40,6 +57,18 @@ function sourceFamily(source) {
40
57
  return 'typescript';
41
58
  if (/\bnode(?:js|\.js)?\b/iu.test(source))
42
59
  return 'node';
60
+ if (/vue/iu.test(source))
61
+ return 'vue';
62
+ if (/angular/iu.test(source))
63
+ return 'angular';
64
+ if (/next(?:js|\.js)?/iu.test(source))
65
+ return 'nextjs';
66
+ if (/nest/iu.test(source))
67
+ return 'nest';
68
+ if (/vitest/iu.test(source))
69
+ return 'vitest';
70
+ if (/tailwind/iu.test(source))
71
+ return 'tailwind';
43
72
  return undefined;
44
73
  }
45
74
  function majorVersion(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"source-readiness.js","sourceRoot":"","sources":["../src/source-readiness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQjC,MAAM,UAAU,8BAA8B,CAAC,WAAmB;IAChE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAA4B,CAAC;QACrF,MAAM,YAAY,GAAG;YACnB,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;YAC7B,GAAG,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC;YAChC,GAAG,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC;SAClC,CAAC;QACF,OAAO;YACL,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC;YACvC,UAAU,EAAE,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC;YACjD,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;SAC/C,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,MAAc,EACd,eAA0C,EAC1C,eAAyC;IAEzC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9D,IAAI,CAAC,QAAQ,IAAI,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;IAC7C,OAAO,CAAC,MAAM,IAAI,MAAM,KAAK,QAAQ,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,MAAc,EACd,eAAyC;IAEzC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,OAAO,CAAC;IAC3C,IAAI,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5D,IAAI,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACzD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAChE,CAAC,CAAC,KAAgC;QAClC,CAAC,CAAC,EAAE,CAAC;AACT,CAAC"}
1
+ {"version":3,"file":"source-readiness.js","sourceRoot":"","sources":["../src/source-readiness.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { KnowledgeCoverageGap, KnowledgeNeed, KnowledgeSourceCatalog, ProjectKnowledgeProfile, RetrievalTaskAction } from '@devflow-tools/sdk';
1
2
  export interface KnowledgeProjectSignals {
2
3
  frameworks?: string[];
3
4
  languages?: string[];
@@ -8,7 +9,13 @@ export interface KnowledgeProjectSignals {
8
9
  export interface KnowledgeSourceSelection {
9
10
  sources: string[];
10
11
  rejectedSources: string[];
12
+ rejections: Array<{
13
+ source: string;
14
+ reason: string;
15
+ }>;
11
16
  signals: string[];
17
+ missingNeeds: KnowledgeNeed[];
18
+ coverageGaps: Array<Omit<KnowledgeCoverageGap, 'id' | 'projectRoot' | 'detectedAt'>>;
12
19
  }
13
20
  export declare function selectKnowledgeSources(input: {
14
21
  query: string;
@@ -16,5 +23,9 @@ export declare function selectKnowledgeSources(input: {
16
23
  explicitSources?: string[];
17
24
  projectRoot?: string;
18
25
  projectSignals?: KnowledgeProjectSignals;
26
+ projectProfile?: ProjectKnowledgeProfile | null;
27
+ catalog?: KnowledgeSourceCatalog | null;
28
+ action?: RetrievalTaskAction;
29
+ knowledgeNeeds?: KnowledgeNeed[];
19
30
  }): KnowledgeSourceSelection;
20
31
  //# sourceMappingURL=source-selector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"source-selector.d.ts","sourceRoot":"","sources":["../src/source-selector.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,uBAAuB;IACtC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AACD,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AA8CD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,uBAAuB,CAAC;CAC1C,GAAG,wBAAwB,CAuE3B"}
1
+ {"version":3,"file":"source-selector.d.ts","sourceRoot":"","sources":["../src/source-selector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,sBAAsB,EAGtB,uBAAuB,EACvB,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,uBAAuB;IACtC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AACD,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,aAAa,EAAE,CAAC;IAC9B,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,GAAG,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC;CACtF;AA8CD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC,cAAc,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAChD,OAAO,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACxC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;CAClC,GAAG,wBAAwB,CA4I3B"}