@dharma-ai-labs/agent-fabric 0.2.49 → 0.2.51

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 (198) hide show
  1. package/dist/index.d.ts +88 -2
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +840 -175
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.test.js +2 -2
  6. package/dist/repositoryCandidateSync.d.ts +55 -0
  7. package/dist/repositoryCandidateSync.d.ts.map +1 -0
  8. package/dist/repositoryCandidateSync.js +177 -0
  9. package/dist/repositoryCandidateSync.js.map +1 -0
  10. package/dist/repositoryCandidateSync.test.d.ts +2 -0
  11. package/dist/repositoryCandidateSync.test.d.ts.map +1 -0
  12. package/dist/repositoryCandidateSync.test.js +141 -0
  13. package/dist/repositoryCandidateSync.test.js.map +1 -0
  14. package/dist/repositoryInstalledKnowledge.d.ts +13 -0
  15. package/dist/repositoryInstalledKnowledge.d.ts.map +1 -0
  16. package/dist/repositoryInstalledKnowledge.js +25 -0
  17. package/dist/repositoryInstalledKnowledge.js.map +1 -0
  18. package/dist/repositoryInstallerFiles.d.ts +6 -0
  19. package/dist/repositoryInstallerFiles.d.ts.map +1 -0
  20. package/dist/repositoryInstallerFiles.js +113 -0
  21. package/dist/repositoryInstallerFiles.js.map +1 -0
  22. package/dist/repositoryKnowledge.d.ts +119 -0
  23. package/dist/repositoryKnowledge.d.ts.map +1 -0
  24. package/dist/repositoryKnowledge.js +462 -0
  25. package/dist/repositoryKnowledge.js.map +1 -0
  26. package/dist/repositoryKnowledge.test.d.ts +2 -0
  27. package/dist/repositoryKnowledge.test.d.ts.map +1 -0
  28. package/dist/repositoryKnowledge.test.js +245 -0
  29. package/dist/repositoryKnowledge.test.js.map +1 -0
  30. package/dist/repositoryKnowledgeRetention.test.d.ts +2 -0
  31. package/dist/repositoryKnowledgeRetention.test.d.ts.map +1 -0
  32. package/dist/repositoryKnowledgeRetention.test.js +386 -0
  33. package/dist/repositoryKnowledgeRetention.test.js.map +1 -0
  34. package/dist/repositoryOnboardingCaller.test.d.ts +2 -0
  35. package/dist/repositoryOnboardingCaller.test.d.ts.map +1 -0
  36. package/dist/repositoryOnboardingCaller.test.js +216 -0
  37. package/dist/repositoryOnboardingCaller.test.js.map +1 -0
  38. package/dist/repositoryOnboardingFlow.test.d.ts +2 -0
  39. package/dist/repositoryOnboardingFlow.test.d.ts.map +1 -0
  40. package/dist/repositoryOnboardingFlow.test.js +47 -0
  41. package/dist/repositoryOnboardingFlow.test.js.map +1 -0
  42. package/dist/repositoryPackage.d.ts +115 -0
  43. package/dist/repositoryPackage.d.ts.map +1 -0
  44. package/dist/repositoryPackage.js +1095 -0
  45. package/dist/repositoryPackage.js.map +1 -0
  46. package/dist/repositoryPackage.test.d.ts +2 -0
  47. package/dist/repositoryPackage.test.d.ts.map +1 -0
  48. package/dist/repositoryPackage.test.js +709 -0
  49. package/dist/repositoryPackage.test.js.map +1 -0
  50. package/dist/repositoryPackageDelivery.d.ts +29 -0
  51. package/dist/repositoryPackageDelivery.d.ts.map +1 -0
  52. package/dist/repositoryPackageDelivery.js +140 -0
  53. package/dist/repositoryPackageDelivery.js.map +1 -0
  54. package/dist/repositoryPackageDelivery.test.d.ts +2 -0
  55. package/dist/repositoryPackageDelivery.test.d.ts.map +1 -0
  56. package/dist/repositoryPackageDelivery.test.js +787 -0
  57. package/dist/repositoryPackageDelivery.test.js.map +1 -0
  58. package/dist/repositoryPackageDeliveryCaller.test.d.ts +2 -0
  59. package/dist/repositoryPackageDeliveryCaller.test.d.ts.map +1 -0
  60. package/dist/repositoryPackageDeliveryCaller.test.js +18 -0
  61. package/dist/repositoryPackageDeliveryCaller.test.js.map +1 -0
  62. package/dist/repositoryPackageDeliveryPreflight.test.d.ts +2 -0
  63. package/dist/repositoryPackageDeliveryPreflight.test.d.ts.map +1 -0
  64. package/dist/repositoryPackageDeliveryPreflight.test.js +29 -0
  65. package/dist/repositoryPackageDeliveryPreflight.test.js.map +1 -0
  66. package/dist/repositoryPackageTransfer.d.ts +85 -0
  67. package/dist/repositoryPackageTransfer.d.ts.map +1 -0
  68. package/dist/repositoryPackageTransfer.js +233 -0
  69. package/dist/repositoryPackageTransfer.js.map +1 -0
  70. package/dist/repositoryPackageTransfer.test.d.ts +2 -0
  71. package/dist/repositoryPackageTransfer.test.d.ts.map +1 -0
  72. package/dist/repositoryPackageTransfer.test.js +173 -0
  73. package/dist/repositoryPackageTransfer.test.js.map +1 -0
  74. package/dist/repositoryPackageTransferV2.test.d.ts +2 -0
  75. package/dist/repositoryPackageTransferV2.test.d.ts.map +1 -0
  76. package/dist/repositoryPackageTransferV2.test.js +549 -0
  77. package/dist/repositoryPackageTransferV2.test.js.map +1 -0
  78. package/dist/repositoryPackageTransferV2Schema.test.d.ts +2 -0
  79. package/dist/repositoryPackageTransferV2Schema.test.d.ts.map +1 -0
  80. package/dist/repositoryPackageTransferV2Schema.test.js +48 -0
  81. package/dist/repositoryPackageTransferV2Schema.test.js.map +1 -0
  82. package/dist/repositoryReleaseMetadata.d.ts +37 -0
  83. package/dist/repositoryReleaseMetadata.d.ts.map +1 -0
  84. package/dist/repositoryReleaseMetadata.js +251 -0
  85. package/dist/repositoryReleaseMetadata.js.map +1 -0
  86. package/dist/repositoryReleaseMetadata.test.d.ts +2 -0
  87. package/dist/repositoryReleaseMetadata.test.d.ts.map +1 -0
  88. package/dist/repositoryReleaseMetadata.test.js +297 -0
  89. package/dist/repositoryReleaseMetadata.test.js.map +1 -0
  90. package/dist/repositoryRoleDerivation.d.ts +11 -0
  91. package/dist/repositoryRoleDerivation.d.ts.map +1 -0
  92. package/dist/repositoryRoleDerivation.js +59 -0
  93. package/dist/repositoryRoleDerivation.js.map +1 -0
  94. package/dist/repositoryRoleDerivation.test.d.ts +2 -0
  95. package/dist/repositoryRoleDerivation.test.d.ts.map +1 -0
  96. package/dist/repositoryRoleDerivation.test.js +33 -0
  97. package/dist/repositoryRoleDerivation.test.js.map +1 -0
  98. package/dist/repositoryRoleMetadata.d.ts +63 -0
  99. package/dist/repositoryRoleMetadata.d.ts.map +1 -0
  100. package/dist/repositoryRoleMetadata.js +203 -0
  101. package/dist/repositoryRoleMetadata.js.map +1 -0
  102. package/dist/repositoryRoleMetadata.test.d.ts +2 -0
  103. package/dist/repositoryRoleMetadata.test.d.ts.map +1 -0
  104. package/dist/repositoryRoleMetadata.test.js +296 -0
  105. package/dist/repositoryRoleMetadata.test.js.map +1 -0
  106. package/dist/repositoryRoleQuestion.d.ts +36 -0
  107. package/dist/repositoryRoleQuestion.d.ts.map +1 -0
  108. package/dist/repositoryRoleQuestion.js +68 -0
  109. package/dist/repositoryRoleQuestion.js.map +1 -0
  110. package/dist/repositoryRoleQuestion.test.d.ts +2 -0
  111. package/dist/repositoryRoleQuestion.test.d.ts.map +1 -0
  112. package/dist/repositoryRoleQuestion.test.js +66 -0
  113. package/dist/repositoryRoleQuestion.test.js.map +1 -0
  114. package/dist/repositorySourceAuthorization.d.ts +43 -0
  115. package/dist/repositorySourceAuthorization.d.ts.map +1 -0
  116. package/dist/repositorySourceAuthorization.js +164 -0
  117. package/dist/repositorySourceAuthorization.js.map +1 -0
  118. package/dist/repositorySourceCapture.test.d.ts +2 -0
  119. package/dist/repositorySourceCapture.test.d.ts.map +1 -0
  120. package/dist/repositorySourceCapture.test.js +303 -0
  121. package/dist/repositorySourceCapture.test.js.map +1 -0
  122. package/dist/repositorySourceSync.d.ts +54 -0
  123. package/dist/repositorySourceSync.d.ts.map +1 -0
  124. package/dist/repositorySourceSync.js +88 -0
  125. package/dist/repositorySourceSync.js.map +1 -0
  126. package/dist/repositorySourceSync.test.d.ts +2 -0
  127. package/dist/repositorySourceSync.test.d.ts.map +1 -0
  128. package/dist/repositorySourceSync.test.js +218 -0
  129. package/dist/repositorySourceSync.test.js.map +1 -0
  130. package/dist/schemas/repository-knowledge-retention-v1.schema.json +26 -0
  131. package/dist/schemas/repository-knowledge-v2.schema.json +74 -0
  132. package/dist/schemas/repository-knowledge.schema.json +63 -0
  133. package/dist/schemas/repository-package-chunk-v2.schema.json +15 -0
  134. package/dist/schemas/repository-package-chunk.schema.json +18 -0
  135. package/dist/schemas/repository-package-delivery-v1.schema.json +51 -0
  136. package/dist/schemas/repository-package-envelope-v1.schema.json +16 -0
  137. package/dist/schemas/repository-package-transfer-v2.schema.json +36 -0
  138. package/dist/schemas/repository-package-transfer.schema.json +34 -0
  139. package/dist/schemas/repository-package-v2.schema.json +491 -0
  140. package/dist/schemas/repository-package-v3.schema.json +36 -0
  141. package/dist/schemas/repository-package.schema.json +94 -0
  142. package/dist/schemas/repository-release-manifest.schema.json +34 -0
  143. package/dist/schemas/repository-role-metadata.schema.json +82 -0
  144. package/dist/schemas/skill-preparation-pointer-v1.schema.json +28 -0
  145. package/dist/schemas/skill-preparation-v1.schema.json +32 -0
  146. package/dist/skillPollResponse.test.d.ts +2 -0
  147. package/dist/skillPollResponse.test.d.ts.map +1 -0
  148. package/dist/skillPollResponse.test.js +37 -0
  149. package/dist/skillPollResponse.test.js.map +1 -0
  150. package/dist/skillPreparation.test.d.ts +2 -0
  151. package/dist/skillPreparation.test.d.ts.map +1 -0
  152. package/dist/skillPreparation.test.js +163 -0
  153. package/dist/skillPreparation.test.js.map +1 -0
  154. package/dist/skillPreparationCache.d.ts +34 -0
  155. package/dist/skillPreparationCache.d.ts.map +1 -0
  156. package/dist/skillPreparationCache.js +371 -0
  157. package/dist/skillPreparationCache.js.map +1 -0
  158. package/dist/skillPreparationCache.test.d.ts +2 -0
  159. package/dist/skillPreparationCache.test.d.ts.map +1 -0
  160. package/dist/skillPreparationCache.test.js +316 -0
  161. package/dist/skillPreparationCache.test.js.map +1 -0
  162. package/dist/skillPreparationCaller.test.d.ts +2 -0
  163. package/dist/skillPreparationCaller.test.d.ts.map +1 -0
  164. package/dist/skillPreparationCaller.test.js +32 -0
  165. package/dist/skillPreparationCaller.test.js.map +1 -0
  166. package/dist/skillPreparationPump.d.ts +11 -0
  167. package/dist/skillPreparationPump.d.ts.map +1 -0
  168. package/dist/skillPreparationPump.js +41 -0
  169. package/dist/skillPreparationPump.js.map +1 -0
  170. package/dist/skillPreparationPump.test.d.ts +2 -0
  171. package/dist/skillPreparationPump.test.d.ts.map +1 -0
  172. package/dist/skillPreparationPump.test.js +87 -0
  173. package/dist/skillPreparationPump.test.js.map +1 -0
  174. package/dist/skillPreparationRecord.d.ts +2 -0
  175. package/dist/skillPreparationRecord.d.ts.map +1 -0
  176. package/dist/skillPreparationRecord.js +36 -0
  177. package/dist/skillPreparationRecord.js.map +1 -0
  178. package/dist/skillPreparationTransaction.d.ts +13 -0
  179. package/dist/skillPreparationTransaction.d.ts.map +1 -0
  180. package/dist/skillPreparationTransaction.js +236 -0
  181. package/dist/skillPreparationTransaction.js.map +1 -0
  182. package/dist/skillPreparationTransaction.test.d.ts +2 -0
  183. package/dist/skillPreparationTransaction.test.d.ts.map +1 -0
  184. package/dist/skillPreparationTransaction.test.js +181 -0
  185. package/dist/skillPreparationTransaction.test.js.map +1 -0
  186. package/dist/skillSyncPolicy.test.d.ts +2 -0
  187. package/dist/skillSyncPolicy.test.d.ts.map +1 -0
  188. package/dist/skillSyncPolicy.test.js +156 -0
  189. package/dist/skillSyncPolicy.test.js.map +1 -0
  190. package/dist/usage.d.ts +1 -1
  191. package/dist/usage.d.ts.map +1 -1
  192. package/dist/usage.js +1 -1
  193. package/dist/usage.js.map +1 -1
  194. package/dist/windowsProcessPortability.test.d.ts +2 -0
  195. package/dist/windowsProcessPortability.test.d.ts.map +1 -0
  196. package/dist/windowsProcessPortability.test.js +14 -0
  197. package/dist/windowsProcessPortability.test.js.map +1 -0
  198. package/package.json +7 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositoryKnowledge.test.d.ts","sourceRoot":"","sources":["../src/repositoryKnowledge.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,245 @@
1
+ import assert from 'node:assert/strict';
2
+ import { createHash } from 'node:crypto';
3
+ import { mkdir, mkdtemp, readFile, rename, rm, symlink, unlink, writeFile } from 'node:fs/promises';
4
+ import { createRequire } from 'node:module';
5
+ import { tmpdir } from 'node:os';
6
+ import { dirname, resolve } from 'node:path';
7
+ import test from 'node:test';
8
+ import { initializeRepositoryKnowledge, readRepositoryKnowledge, validateRepositoryKnowledgeCatalog, REPOSITORY_KNOWLEDGE_CATALOG_PATH, REPOSITORY_KNOWLEDGE_INIT_PATH, } from './repositoryKnowledge.js';
9
+ const root = '.agents/skills/dharma-agent-fabric';
10
+ const now = new Date('2026-09-17T00:00:00.000Z');
11
+ async function fixture(t) {
12
+ const workspace = await mkdtemp(resolve(tmpdir(), 'repository-knowledge-'));
13
+ t.after(() => rm(workspace, { recursive: true, force: true }));
14
+ const put = async (path, value) => {
15
+ await mkdir(dirname(resolve(workspace, path)), { recursive: true });
16
+ await writeFile(resolve(workspace, path), value);
17
+ };
18
+ await put(`${root}/.dharma-agent-fabric.json`, JSON.stringify({ managedBy: 'dharma-agent-fabric', workspaceId: 'device-local' }));
19
+ return { workspace, organizationId: 'org_fixture', repositoryAgentId: 'repository-agent-fixture', now, put };
20
+ }
21
+ function canonical(value) {
22
+ if (Array.isArray(value))
23
+ return `[${value.map(canonical).join(',')}]`;
24
+ if (value && typeof value === 'object')
25
+ return `{${Object.entries(value).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)
26
+ .map(([key, item]) => `${JSON.stringify(key)}:${canonical(item)}`).join(',')}}`;
27
+ return JSON.stringify(value);
28
+ }
29
+ function rehash(catalog) {
30
+ const { catalogHash: _hash, ...content } = catalog;
31
+ return { ...content, catalogHash: `sha256:${createHash('sha256').update(canonical(content)).digest('hex')}` };
32
+ }
33
+ test('knowledge initialization and reads permit system ancestor aliases but not workspace aliases', async (t) => {
34
+ const f = await fixture(t);
35
+ const parent = await mkdtemp(resolve(tmpdir(), 'knowledge-system-alias-'));
36
+ t.after(() => rm(parent, { recursive: true, force: true }));
37
+ const alias = resolve(parent, 'system-alias');
38
+ await symlink(dirname(f.workspace), alias, process.platform === 'win32' ? 'junction' : 'dir');
39
+ const workspace = resolve(alias, f.workspace.slice(dirname(f.workspace).length + 1));
40
+ const first = await initializeRepositoryKnowledge({ ...f, workspace });
41
+ assert.equal(first.disposition, 'initialized');
42
+ assert.deepEqual(await readRepositoryKnowledge({ ...f, workspace }), await readRepositoryKnowledge(f));
43
+ assert.equal((await initializeRepositoryKnowledge(f)).disposition, 'reused');
44
+ const linkedWorkspace = resolve(parent, 'workspace-alias');
45
+ await symlink(f.workspace, linkedWorkspace, process.platform === 'win32' ? 'junction' : 'dir');
46
+ await assert.rejects(initializeRepositoryKnowledge({ ...f, workspace: linkedWorkspace }), /symlink/);
47
+ await assert.rejects(readRepositoryKnowledge({ ...f, workspace: linkedWorkspace }), /symlink/);
48
+ });
49
+ test('initializes only local unsigned empty knowledge with deterministic shared repository identity', async (t) => {
50
+ const a = await fixture(t);
51
+ const b = await fixture(t);
52
+ await a.put('.env', 'API_KEY=never-collect-this-secret');
53
+ const first = await initializeRepositoryKnowledge(a);
54
+ const second = await initializeRepositoryKnowledge({ ...b, now: new Date('2026-09-18T00:00:00.000Z') });
55
+ assert.equal(first.disposition, 'initialized');
56
+ assert.equal(first.relativePath, REPOSITORY_KNOWLEDGE_CATALOG_PATH);
57
+ assert.equal(first.catalog.knowledgeBaseId, second.catalog.knowledgeBaseId);
58
+ assert.deepEqual(first.catalog.concepts, []);
59
+ assert.deepEqual(first.catalog.provenance, { origin: 'locally_initialized', authority: 'unsigned', serverReleaseId: null });
60
+ assert.deepEqual(first.catalog.repoAtlas, { association: 'local_scope_only', findingsState: 'not_observed',
61
+ organizationId: a.organizationId, repositoryAgentId: a.repositoryAgentId });
62
+ const bytes = await readFile(resolve(a.workspace, first.relativePath), 'utf8');
63
+ assert.ok(!bytes.includes(a.workspace));
64
+ assert.ok(!bytes.includes('never-collect-this-secret'));
65
+ assert.ok(!bytes.includes('device-local'));
66
+ assert.equal(validateRepositoryKnowledgeCatalog(JSON.parse(bytes), a).knowledgeBaseId, first.catalog.knowledgeBaseId);
67
+ });
68
+ test('reads without creating anything and offers an explicit dry-run initialization', async (t) => {
69
+ const f = await fixture(t);
70
+ assert.equal(await readRepositoryKnowledge(f), null);
71
+ const plan = await initializeRepositoryKnowledge({ ...f, dryRun: true });
72
+ assert.equal(plan.disposition, 'planned');
73
+ await assert.rejects(readFile(resolve(f.workspace, REPOSITORY_KNOWLEDGE_INIT_PATH)), { code: 'ENOENT' });
74
+ await assert.rejects(readFile(resolve(f.workspace, REPOSITORY_KNOWLEDGE_CATALOG_PATH)), { code: 'ENOENT' });
75
+ });
76
+ test('replay preserves existing concepts and exact catalog bytes, not the new clock', async (t) => {
77
+ const f = await fixture(t);
78
+ const first = await initializeRepositoryKnowledge(f);
79
+ const updated = rehash({ ...first.catalog, concepts: [{ conceptId: 'concept_review',
80
+ relativePath: 'concepts/review.md', sha256: `sha256:${'a'.repeat(64)}` }] });
81
+ const staged = resolve(f.workspace, `${root}/updated.json`);
82
+ const bytes = `${canonical(updated)}\n`;
83
+ await writeFile(staged, bytes);
84
+ await rename(staged, resolve(f.workspace, first.relativePath));
85
+ const replay = await initializeRepositoryKnowledge({ ...f, now: new Date('2026-09-19T00:00:00.000Z') });
86
+ assert.equal(replay.disposition, 'reused');
87
+ assert.deepEqual(replay.catalog, updated);
88
+ assert.equal(await readFile(resolve(f.workspace, first.relativePath), 'utf8'), bytes);
89
+ });
90
+ test('concurrent first creation publishes one complete catalog and reuses it', async (t) => {
91
+ const f = await fixture(t);
92
+ const results = await Promise.all(Array.from({ length: 12 }, () => initializeRepositoryKnowledge(f)));
93
+ assert.equal(results.filter(result => result.disposition === 'initialized').length, 1);
94
+ assert.ok(results.every(result => canonical(result.catalog) === canonical(results[0].catalog)));
95
+ assert.deepEqual(await readRepositoryKnowledge(f), results[0].catalog);
96
+ });
97
+ test('competing organizations cannot share or replace a first initialization', async (t) => {
98
+ const f = await fixture(t);
99
+ const inputs = [f, { ...f, organizationId: 'org_other' }];
100
+ const results = await Promise.allSettled(inputs.map(input => initializeRepositoryKnowledge(input)));
101
+ assert.equal(results.filter(result => result.status === 'fulfilled').length, 1);
102
+ assert.equal(results.filter(result => result.status === 'rejected').length, 1);
103
+ const winner = results.findIndex(result => result.status === 'fulfilled');
104
+ const catalog = await readRepositoryKnowledge(inputs[winner]);
105
+ assert.equal(catalog?.organizationId, inputs[winner].organizationId);
106
+ await assert.rejects(readRepositoryKnowledge(inputs[1 - winner]));
107
+ });
108
+ test('resumes interruption after durable intent publication with or without the empty directory', async (t) => {
109
+ for (const emptyDirectory of [false, true]) {
110
+ const f = await fixture(t);
111
+ const first = await initializeRepositoryKnowledge(f);
112
+ await unlink(resolve(f.workspace, first.relativePath));
113
+ if (!emptyDirectory)
114
+ await rm(resolve(f.workspace, `${root}/knowledge`), { recursive: true });
115
+ assert.equal(await readRepositoryKnowledge(f), null);
116
+ const recovered = await initializeRepositoryKnowledge(f);
117
+ assert.deepEqual(recovered.catalog, first.catalog);
118
+ assert.equal(recovered.disposition, 'initialized');
119
+ }
120
+ });
121
+ test('ignores but never deletes an interrupted private staging file', async (t) => {
122
+ const f = await fixture(t);
123
+ const path = `${root}/.knowledge-init-00000000-0000-4000-8000-000000000000.tmp`;
124
+ await f.put(path, 'incomplete private staging');
125
+ await initializeRepositoryKnowledge(f);
126
+ assert.equal(await readFile(resolve(f.workspace, path), 'utf8'), 'incomplete private staging');
127
+ });
128
+ test('fails closed on a corrupt or foreign initialization record without publishing a catalog', async (t) => {
129
+ const f = await fixture(t);
130
+ const { catalog } = await initializeRepositoryKnowledge({ ...f, dryRun: true });
131
+ for (const bytes of ['{', canonical(rehash({ ...catalog, organizationId: 'org_other' }))]) {
132
+ await f.put(REPOSITORY_KNOWLEDGE_INIT_PATH, bytes);
133
+ await assert.rejects(initializeRepositoryKnowledge(f), /invalid|identity|scope/i);
134
+ await assert.rejects(readRepositoryKnowledge(f), /invalid|identity|scope/i);
135
+ await assert.rejects(readFile(resolve(f.workspace, REPOSITORY_KNOWLEDGE_CATALOG_PATH)), { code: 'ENOENT' });
136
+ assert.equal(await readFile(resolve(f.workspace, REPOSITORY_KNOWLEDGE_INIT_PATH), 'utf8'), bytes);
137
+ }
138
+ });
139
+ test('rejects other organization and repository identities, including valid rehashed foreign scopes', async (t) => {
140
+ const f = await fixture(t);
141
+ const result = await initializeRepositoryKnowledge(f);
142
+ for (const input of [{ ...f, organizationId: 'org_other' }, { ...f, repositoryAgentId: 'another-agent' }]) {
143
+ await assert.rejects(initializeRepositoryKnowledge(input), /identity|scope/i);
144
+ await assert.rejects(readRepositoryKnowledge(input), /identity|scope/i);
145
+ }
146
+ const foreign = rehash({ ...result.catalog, repoAtlas: { ...result.catalog.repoAtlas, repositoryAgentId: 'another-agent' } });
147
+ assert.throws(() => validateRepositoryKnowledgeCatalog(foreign, f), /identity|scope/i);
148
+ });
149
+ test('rejects unmanaged skill roots, knowledge directories, and pre-existing catalogs without overwriting', async (t) => {
150
+ for (const variant of ['marker', 'empty', 'file']) {
151
+ const f = await fixture(t);
152
+ if (variant === 'marker')
153
+ await unlink(resolve(f.workspace, `${root}/.dharma-agent-fabric.json`));
154
+ if (variant === 'empty')
155
+ await mkdir(resolve(f.workspace, `${root}/knowledge`));
156
+ if (variant === 'file')
157
+ await f.put(REPOSITORY_KNOWLEDGE_CATALOG_PATH, '{"customerOwned":true}');
158
+ await assert.rejects(initializeRepositoryKnowledge(f), /unmanaged|invalid/i);
159
+ await assert.rejects(readRepositoryKnowledge(f), /unmanaged|invalid/i);
160
+ if (variant === 'file')
161
+ assert.equal(await readFile(resolve(f.workspace, REPOSITORY_KNOWLEDGE_CATALOG_PATH), 'utf8'), '{"customerOwned":true}');
162
+ }
163
+ });
164
+ test('does not adopt unmanaged files during initialization recovery', async (t) => {
165
+ const f = await fixture(t);
166
+ await initializeRepositoryKnowledge(f);
167
+ await unlink(resolve(f.workspace, REPOSITORY_KNOWLEDGE_CATALOG_PATH));
168
+ await f.put(`${root}/knowledge/customer.md`, 'customer content');
169
+ await assert.rejects(initializeRepositoryKnowledge(f), /unmanaged/i);
170
+ assert.equal(await readFile(resolve(f.workspace, `${root}/knowledge/customer.md`), 'utf8'), 'customer content');
171
+ });
172
+ test('rejects static symlinks at every managed boundary and the workspace itself', async (t) => {
173
+ for (const path of ['.agents', `${root}/knowledge`, REPOSITORY_KNOWLEDGE_CATALOG_PATH,
174
+ REPOSITORY_KNOWLEDGE_INIT_PATH, `${root}/.dharma-agent-fabric.json`]) {
175
+ const f = await fixture(t);
176
+ const outside = await fixture(t);
177
+ const target = resolve(f.workspace, path);
178
+ await mkdir(dirname(target), { recursive: true });
179
+ await rm(target, { recursive: true, force: true });
180
+ const isFile = path.endsWith('.json');
181
+ await symlink(isFile ? resolve(outside.workspace, `${root}/.dharma-agent-fabric.json`) : outside.workspace, target, isFile ? 'file' : process.platform === 'win32' ? 'junction' : 'dir');
182
+ await assert.rejects(initializeRepositoryKnowledge(f), /symlink/i);
183
+ await assert.rejects(readRepositoryKnowledge(f), /symlink/i);
184
+ }
185
+ const f = await fixture(t);
186
+ const alias = `${f.workspace}-alias`;
187
+ t.after(() => rm(alias, { force: true }));
188
+ await symlink(f.workspace, alias, process.platform === 'win32' ? 'junction' : 'dir');
189
+ await assert.rejects(initializeRepositoryKnowledge({ ...f, workspace: alias }), /symlink/i);
190
+ });
191
+ test('fails closed on corrupt, oversized, forged provenance and invalid integrity catalogs', async (t) => {
192
+ const f = await fixture(t);
193
+ const result = await initializeRepositoryKnowledge(f);
194
+ for (const bytes of ['{', 'x'.repeat(1_048_577), canonical({ ...result.catalog, catalogHash: `sha256:${'0'.repeat(64)}` }),
195
+ canonical(rehash({ ...result.catalog, provenance: { ...result.catalog.provenance, authority: 'signed' } }))]) {
196
+ await writeFile(resolve(f.workspace, REPOSITORY_KNOWLEDGE_CATALOG_PATH), bytes);
197
+ await assert.rejects(readRepositoryKnowledge(f), /invalid|limit|integrity/i);
198
+ await assert.rejects(initializeRepositoryKnowledge(f), /invalid|limit|integrity/i);
199
+ assert.equal(await readFile(resolve(f.workspace, REPOSITORY_KNOWLEDGE_CATALOG_PATH), 'utf8'), bytes);
200
+ }
201
+ });
202
+ test('rejects unsafe POSIX/Windows concept paths, environment/secret references and invalid shared identities', async (t) => {
203
+ const f = await fixture(t);
204
+ const { catalog } = await initializeRepositoryKnowledge(f);
205
+ for (const relativePath of ['../secret.md', '/etc/passwd', 'C:\\private\\file.md', '\\\\host\\share\\file.md',
206
+ 'concepts/../escape.md', 'concepts/.env', 'concepts/secrets.md', 'concepts/credentials.json',
207
+ 'concepts/CON.md', 'concepts/readme.md:stream', 'concepts/guide./file.md']) {
208
+ const value = rehash({ ...catalog, concepts: [{ conceptId: 'concept_safe', relativePath, sha256: `sha256:${'a'.repeat(64)}` }] });
209
+ assert.throws(() => validateRepositoryKnowledgeCatalog(value, f), /invalid|unsafe/i);
210
+ }
211
+ for (const repositoryAgentId of ['../repo', 'C:\\repo', 'repo/child', 'repo:stream', ' repo', '', undefined, null]) {
212
+ await assert.rejects(initializeRepositoryKnowledge({ ...f, repositoryAgentId: repositoryAgentId }), /identity/i);
213
+ }
214
+ const injected = rehash({ ...catalog, password: 'never-retain-this-secret' });
215
+ assert.throws(() => validateRepositoryKnowledgeCatalog(injected, f), /invalid/i);
216
+ });
217
+ test('JSON schema and runtime validator agree on catalog structure and unsigned provenance', async (t) => {
218
+ const f = await fixture(t);
219
+ const { catalog } = await initializeRepositoryKnowledge(f);
220
+ const require = createRequire(import.meta.url);
221
+ const Ajv2020 = require('ajv/dist/2020.js').default;
222
+ const addFormats = require('ajv-formats').default;
223
+ const schema = JSON.parse(await readFile(new URL('../../../schemas/repository-knowledge.schema.json', import.meta.url), 'utf8'));
224
+ const ajv = new Ajv2020({ strict: true });
225
+ addFormats(ajv);
226
+ const validate = ajv.compile(schema);
227
+ assert.equal(validate(catalog), true, JSON.stringify(validate.errors));
228
+ for (const invalid of [{ ...catalog, workspaceId: 'not-shared' },
229
+ { ...catalog, initializedAt: '2026-02-31T00:00:00.000Z' },
230
+ { ...catalog, provenance: { ...catalog.provenance, serverReleaseId: 'invented-server-release' } },
231
+ { ...catalog, concepts: [{ conceptId: 'concept_bad', relativePath: '../secret.md', sha256: 'invalid' }] }]) {
232
+ assert.equal(validate(invalid), false);
233
+ assert.throws(() => validateRepositoryKnowledgeCatalog(invalid, f));
234
+ }
235
+ });
236
+ test('rejects duplicate concept identities and Windows case-colliding paths without rewriting', async (t) => {
237
+ const f = await fixture(t);
238
+ const { catalog } = await initializeRepositoryKnowledge(f);
239
+ const concept = { conceptId: 'concept_review', relativePath: 'concepts/Review.md', sha256: `sha256:${'a'.repeat(64)}` };
240
+ for (const second of [{ ...concept, relativePath: 'concepts/Other.md' },
241
+ { ...concept, conceptId: 'concept_other', relativePath: 'concepts/review.md' }]) {
242
+ assert.throws(() => validateRepositoryKnowledgeCatalog(rehash({ ...catalog, concepts: [concept, second] }), f), /invalid|unsafe/i);
243
+ }
244
+ });
245
+ //# sourceMappingURL=repositoryKnowledge.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositoryKnowledge.test.js","sourceRoot":"","sources":["../src/repositoryKnowledge.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpG,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,IAA0B,MAAM,WAAW,CAAC;AACnD,OAAO,EACL,6BAA6B,EAAE,uBAAuB,EAAE,kCAAkC,EAC1F,iCAAiC,EAAE,8BAA8B,GAClE,MAAM,0BAA0B,CAAC;AAElC,MAAM,IAAI,GAAG,oCAAoC,CAAC;AAClD,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;AACjD,KAAK,UAAU,OAAO,CAAC,CAAc;IACnC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,KAAK,EAAE,IAAY,EAAE,KAAa,EAAE,EAAE;QAChD,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC;IACF,MAAM,GAAG,CAAC,GAAG,IAAI,4BAA4B,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,qBAAqB,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;IAClI,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAC/G,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACvE,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACpH,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAClF,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AACD,SAAS,MAAM,CAAoC,OAAU;IAC3D,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC;IACnD,OAAO,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAO,CAAC;AACrH,CAAC;AAED,IAAI,CAAC,6FAA6F,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC5G,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,yBAAyB,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC9C,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9F,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACrF,MAAM,KAAK,GAAG,MAAM,6BAA6B,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IACvE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC/C,MAAM,CAAC,SAAS,CAAC,MAAM,uBAAuB,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;IACvG,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC7E,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC3D,MAAM,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,eAAe,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/F,MAAM,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;IACrG,MAAM,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AACjG,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+FAA+F,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC9G,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,mCAAmC,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,MAAM,6BAA6B,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;IACxG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC/C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,iCAAiC,CAAC,CAAC;IACpE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5E,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC7C,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,qBAAqB,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5H,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc;QACxG,cAAc,EAAE,CAAC,CAAC,cAAc,EAAE,iBAAiB,EAAE,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/E,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACxD,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;IAC3C,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AACxH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+EAA+E,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC9F,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,CAAC,KAAK,CAAC,MAAM,uBAAuB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,MAAM,6BAA6B,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC1C,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,8BAA8B,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzG,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC9G,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+EAA+E,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC9F,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,MAAM,6BAA6B,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,gBAAgB;gBACjF,YAAY,EAAE,oBAAoB,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,IAAI,eAAe,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;IACxC,MAAM,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC/B,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;IACxG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;AACxF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wEAAwE,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACvF,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,KAAK,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACvF,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACjG,MAAM,CAAC,SAAS,CAAC,MAAM,uBAAuB,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC;AAC1E,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wEAAwE,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACvF,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAChF,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,MAAM,CAAC,MAAM,CAAE,CAAC,CAAC;IAC/D,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,MAAM,CAAE,CAAC,cAAc,CAAC,CAAC;IACtE,MAAM,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAE,CAAC,CAAC,CAAC;AACrE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2FAA2F,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC1G,KAAK,MAAM,cAAc,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,6BAA6B,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,cAAc;YAAE,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9F,MAAM,CAAC,KAAK,CAAC,MAAM,uBAAuB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,MAAM,6BAA6B,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+DAA+D,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC9E,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,GAAG,IAAI,2DAA2D,CAAC;IAChF,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,4BAA4B,CAAC,CAAC;IAChD,MAAM,6BAA6B,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,EAAE,4BAA4B,CAAC,CAAC;AACjG,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yFAAyF,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACxG,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,6BAA6B,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAChF,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1F,MAAM,CAAC,CAAC,GAAG,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACnD,MAAM,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC;QAClF,MAAM,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC;QAC5E,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5G,MAAM,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,8BAA8B,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;IACpG,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+FAA+F,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC9G,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAAC,CAAC,CAAC,CAAC;IACtD,KAAK,MAAM,KAAK,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC;QAC1G,MAAM,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC,CAAC;QAC9E,MAAM,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;IAC9H,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,kCAAkC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;AACzF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qGAAqG,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACpH,KAAK,MAAM,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,OAAO,KAAK,QAAQ;YAAE,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,IAAI,4BAA4B,CAAC,CAAC,CAAC;QAClG,IAAI,OAAO,KAAK,OAAO;YAAE,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC;QAChF,IAAI,OAAO,KAAK,MAAM;YAAE,MAAM,CAAC,CAAC,GAAG,CAAC,iCAAiC,EAAE,wBAAwB,CAAC,CAAC;QACjG,MAAM,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;QAC7E,MAAM,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;QACvE,IAAI,OAAO,KAAK,MAAM;YAAE,MAAM,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,iCAAiC,CAAC,EAAE,MAAM,CAAC,EAAE,wBAAwB,CAAC,CAAC;IAClJ,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+DAA+D,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC9E,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,6BAA6B,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAAC,CAAC;IACtE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,wBAAwB,EAAE,kBAAkB,CAAC,CAAC;IACjE,MAAM,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IACrE,MAAM,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,IAAI,wBAAwB,CAAC,EAAE,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAC;AAClH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,4EAA4E,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC3F,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,YAAY,EAAE,iCAAiC;QACnF,8BAA8B,EAAE,GAAG,IAAI,4BAA4B,CAAC,EAAE,CAAC;QACvE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,4BAA4B,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EACxG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC/E,MAAM,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACnE,MAAM,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,SAAS,QAAQ,CAAC;IACrC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1C,MAAM,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACrF,MAAM,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;AAC9F,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sFAAsF,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACrG,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAAC,CAAC,CAAC,CAAC;IACtD,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACxH,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/G,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,iCAAiC,CAAC,EAAE,KAAK,CAAC,CAAC;QAChF,MAAM,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC;QAC7E,MAAM,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC;QACnF,MAAM,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,iCAAiC,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;IACvG,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yGAAyG,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACxH,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,6BAA6B,CAAC,CAAC,CAAC,CAAC;IAC3D,KAAK,MAAM,YAAY,IAAI,CAAC,cAAc,EAAE,aAAa,EAAE,sBAAsB,EAAE,0BAA0B;QAC3G,uBAAuB,EAAE,eAAe,EAAE,qBAAqB,EAAE,2BAA2B;QAC5F,iBAAiB,EAAE,2BAA2B,EAAE,yBAAyB,CAAC,EAAE,CAAC;QAC7E,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QAClI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,kCAAkC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACvF,CAAC;IACD,KAAK,MAAM,iBAAiB,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;QACnH,MAAM,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,EAAE,GAAG,CAAC,EAAE,iBAAiB,EAAE,iBAA2B,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;IAC7H,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,0BAA0B,EAAE,CAAC,CAAC;IAC9E,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,kCAAkC,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AACnF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sFAAsF,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACrG,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,6BAA6B,CAAC,CAAC,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC;IACpD,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,GAAG,CAAC,mDAAmD,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACjI,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,UAAU,CAAC,GAAG,CAAC,CAAC;IAChB,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,KAAK,MAAM,OAAO,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE;QAC9D,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,0BAA0B,EAAE;QACzD,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,eAAe,EAAE,yBAAyB,EAAE,EAAE;QACjG,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7G,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,kCAAkC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yFAAyF,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACxG,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,6BAA6B,CAAC,CAAC,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;IACxH,KAAK,MAAM,MAAM,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE;QACrE,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC,EAAE,CAAC;QAClF,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,kCAAkC,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACrI,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=repositoryKnowledgeRetention.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositoryKnowledgeRetention.test.d.ts","sourceRoot":"","sources":["../src/repositoryKnowledgeRetention.test.ts"],"names":[],"mappings":""}