@kb-labs/core-config 1.2.0 → 1.4.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 (173) hide show
  1. package/dist/index.d.ts +1016 -25
  2. package/dist/index.js +1533 -29
  3. package/dist/index.js.map +1 -1
  4. package/package.json +2 -2
  5. package/dist/__tests__/cache.spec.d.ts +0 -6
  6. package/dist/__tests__/cache.spec.d.ts.map +0 -1
  7. package/dist/__tests__/cache.spec.js +0 -87
  8. package/dist/__tests__/cache.spec.js.map +0 -1
  9. package/dist/__tests__/fs-atomic.spec.d.ts +0 -6
  10. package/dist/__tests__/fs-atomic.spec.d.ts.map +0 -1
  11. package/dist/__tests__/fs-atomic.spec.js +0 -153
  12. package/dist/__tests__/fs-atomic.spec.js.map +0 -1
  13. package/dist/__tests__/get-product-config-edge-cases.spec.d.ts +0 -6
  14. package/dist/__tests__/get-product-config-edge-cases.spec.d.ts.map +0 -1
  15. package/dist/__tests__/get-product-config-edge-cases.spec.js +0 -334
  16. package/dist/__tests__/get-product-config-edge-cases.spec.js.map +0 -1
  17. package/dist/__tests__/init-workspace.spec.d.ts +0 -6
  18. package/dist/__tests__/init-workspace.spec.d.ts.map +0 -1
  19. package/dist/__tests__/init-workspace.spec.js +0 -101
  20. package/dist/__tests__/init-workspace.spec.js.map +0 -1
  21. package/dist/__tests__/kb-error.spec.d.ts +0 -6
  22. package/dist/__tests__/kb-error.spec.d.ts.map +0 -1
  23. package/dist/__tests__/kb-error.spec.js +0 -193
  24. package/dist/__tests__/kb-error.spec.js.map +0 -1
  25. package/dist/__tests__/preset-lockfile.spec.d.ts +0 -6
  26. package/dist/__tests__/preset-lockfile.spec.d.ts.map +0 -1
  27. package/dist/__tests__/preset-lockfile.spec.js +0 -142
  28. package/dist/__tests__/preset-lockfile.spec.js.map +0 -1
  29. package/dist/__tests__/product-config-profiles.spec.d.ts +0 -6
  30. package/dist/__tests__/product-config-profiles.spec.d.ts.map +0 -1
  31. package/dist/__tests__/product-config-profiles.spec.js +0 -82
  32. package/dist/__tests__/product-config-profiles.spec.js.map +0 -1
  33. package/dist/__tests__/product-config.spec.d.ts +0 -6
  34. package/dist/__tests__/product-config.spec.d.ts.map +0 -1
  35. package/dist/__tests__/product-config.spec.js +0 -304
  36. package/dist/__tests__/product-config.spec.js.map +0 -1
  37. package/dist/__tests__/profiles-demo.d.ts +0 -11
  38. package/dist/__tests__/profiles-demo.d.ts.map +0 -1
  39. package/dist/__tests__/profiles-demo.js +0 -173
  40. package/dist/__tests__/profiles-demo.js.map +0 -1
  41. package/dist/__tests__/profiles-resolver.spec.d.ts +0 -2
  42. package/dist/__tests__/profiles-resolver.spec.d.ts.map +0 -1
  43. package/dist/__tests__/profiles-resolver.spec.js +0 -114
  44. package/dist/__tests__/profiles-resolver.spec.js.map +0 -1
  45. package/dist/__tests__/profiles-section.spec.d.ts +0 -2
  46. package/dist/__tests__/profiles-section.spec.d.ts.map +0 -1
  47. package/dist/__tests__/profiles-section.spec.js +0 -50
  48. package/dist/__tests__/profiles-section.spec.js.map +0 -1
  49. package/dist/__tests__/runtime.spec.d.ts +0 -2
  50. package/dist/__tests__/runtime.spec.d.ts.map +0 -1
  51. package/dist/__tests__/runtime.spec.js +0 -170
  52. package/dist/__tests__/runtime.spec.js.map +0 -1
  53. package/dist/__tests__/upsert-lockfile.spec.d.ts +0 -1
  54. package/dist/__tests__/upsert-lockfile.spec.d.ts.map +0 -1
  55. package/dist/__tests__/upsert-lockfile.spec.js +0 -2
  56. package/dist/__tests__/upsert-lockfile.spec.js.map +0 -1
  57. package/dist/__tests__/validate-config.spec.d.ts +0 -2
  58. package/dist/__tests__/validate-config.spec.d.ts.map +0 -1
  59. package/dist/__tests__/validate-config.spec.js +0 -14
  60. package/dist/__tests__/validate-config.spec.js.map +0 -1
  61. package/dist/api/init-workspace.d.ts +0 -10
  62. package/dist/api/init-workspace.d.ts.map +0 -1
  63. package/dist/api/init-workspace.js +0 -186
  64. package/dist/api/init-workspace.js.map +0 -1
  65. package/dist/api/product-config.d.ts +0 -20
  66. package/dist/api/product-config.d.ts.map +0 -1
  67. package/dist/api/product-config.js +0 -236
  68. package/dist/api/product-config.js.map +0 -1
  69. package/dist/api/read-config.d.ts +0 -22
  70. package/dist/api/read-config.d.ts.map +0 -1
  71. package/dist/api/read-config.js +0 -112
  72. package/dist/api/read-config.js.map +0 -1
  73. package/dist/api/read-kb-config.d.ts +0 -12
  74. package/dist/api/read-kb-config.d.ts.map +0 -1
  75. package/dist/api/read-kb-config.js +0 -47
  76. package/dist/api/read-kb-config.js.map +0 -1
  77. package/dist/api/upsert-lockfile.d.ts +0 -10
  78. package/dist/api/upsert-lockfile.d.ts.map +0 -1
  79. package/dist/api/upsert-lockfile.js +0 -63
  80. package/dist/api/upsert-lockfile.js.map +0 -1
  81. package/dist/cache/fs-cache.d.ts +0 -38
  82. package/dist/cache/fs-cache.d.ts.map +0 -1
  83. package/dist/cache/fs-cache.js +0 -142
  84. package/dist/cache/fs-cache.js.map +0 -1
  85. package/dist/errors/kb-error.d.ts +0 -35
  86. package/dist/errors/kb-error.d.ts.map +0 -1
  87. package/dist/errors/kb-error.js +0 -57
  88. package/dist/errors/kb-error.js.map +0 -1
  89. package/dist/hash/config-hash.d.ts +0 -17
  90. package/dist/hash/config-hash.d.ts.map +0 -1
  91. package/dist/hash/config-hash.js +0 -55
  92. package/dist/hash/config-hash.js.map +0 -1
  93. package/dist/index.d.ts.map +0 -1
  94. package/dist/lockfile/lockfile.d.ts +0 -53
  95. package/dist/lockfile/lockfile.d.ts.map +0 -1
  96. package/dist/lockfile/lockfile.js +0 -142
  97. package/dist/lockfile/lockfile.js.map +0 -1
  98. package/dist/merge/layered-merge.d.ts +0 -16
  99. package/dist/merge/layered-merge.d.ts.map +0 -1
  100. package/dist/merge/layered-merge.js +0 -87
  101. package/dist/merge/layered-merge.js.map +0 -1
  102. package/dist/preset/resolve-preset.d.ts +0 -28
  103. package/dist/preset/resolve-preset.d.ts.map +0 -1
  104. package/dist/preset/resolve-preset.js +0 -104
  105. package/dist/preset/resolve-preset.js.map +0 -1
  106. package/dist/profiles/loader.d.ts +0 -12
  107. package/dist/profiles/loader.d.ts.map +0 -1
  108. package/dist/profiles/loader.js +0 -34
  109. package/dist/profiles/loader.js.map +0 -1
  110. package/dist/profiles/resolver.d.ts +0 -11
  111. package/dist/profiles/resolver.d.ts.map +0 -1
  112. package/dist/profiles/resolver.js +0 -252
  113. package/dist/profiles/resolver.js.map +0 -1
  114. package/dist/profiles/scope-selector.d.ts +0 -19
  115. package/dist/profiles/scope-selector.d.ts.map +0 -1
  116. package/dist/profiles/scope-selector.js +0 -64
  117. package/dist/profiles/scope-selector.js.map +0 -1
  118. package/dist/profiles/types.d.ts +0 -462
  119. package/dist/profiles/types.d.ts.map +0 -1
  120. package/dist/profiles/types.js +0 -68
  121. package/dist/profiles/types.js.map +0 -1
  122. package/dist/runtime/index.d.ts +0 -2
  123. package/dist/runtime/index.d.ts.map +0 -1
  124. package/dist/runtime/index.js +0 -2
  125. package/dist/runtime/index.js.map +0 -1
  126. package/dist/runtime/runtime.d.ts +0 -46
  127. package/dist/runtime/runtime.d.ts.map +0 -1
  128. package/dist/runtime/runtime.js +0 -126
  129. package/dist/runtime/runtime.js.map +0 -1
  130. package/dist/types/index.d.ts +0 -2
  131. package/dist/types/index.d.ts.map +0 -1
  132. package/dist/types/index.js +0 -2
  133. package/dist/types/index.js.map +0 -1
  134. package/dist/types/init.d.ts +0 -33
  135. package/dist/types/init.d.ts.map +0 -1
  136. package/dist/types/init.js +0 -6
  137. package/dist/types/init.js.map +0 -1
  138. package/dist/types/preset.d.ts +0 -27
  139. package/dist/types/preset.d.ts.map +0 -1
  140. package/dist/types/preset.js +0 -6
  141. package/dist/types/preset.js.map +0 -1
  142. package/dist/types/types.d.ts +0 -70
  143. package/dist/types/types.d.ts.map +0 -1
  144. package/dist/types/types.js +0 -2
  145. package/dist/types/types.js.map +0 -1
  146. package/dist/utils/__tests__/env.spec.d.ts +0 -2
  147. package/dist/utils/__tests__/env.spec.d.ts.map +0 -1
  148. package/dist/utils/__tests__/env.spec.js +0 -33
  149. package/dist/utils/__tests__/env.spec.js.map +0 -1
  150. package/dist/utils/env.d.ts +0 -7
  151. package/dist/utils/env.d.ts.map +0 -1
  152. package/dist/utils/env.js +0 -25
  153. package/dist/utils/env.js.map +0 -1
  154. package/dist/utils/fs-atomic.d.ts +0 -15
  155. package/dist/utils/fs-atomic.d.ts.map +0 -1
  156. package/dist/utils/fs-atomic.js +0 -46
  157. package/dist/utils/fs-atomic.js.map +0 -1
  158. package/dist/utils/index.d.ts +0 -3
  159. package/dist/utils/index.d.ts.map +0 -1
  160. package/dist/utils/index.js +0 -3
  161. package/dist/utils/index.js.map +0 -1
  162. package/dist/utils/paths.d.ts +0 -21
  163. package/dist/utils/paths.d.ts.map +0 -1
  164. package/dist/utils/paths.js +0 -32
  165. package/dist/utils/paths.js.map +0 -1
  166. package/dist/utils/product-normalize.d.ts +0 -25
  167. package/dist/utils/product-normalize.d.ts.map +0 -1
  168. package/dist/utils/product-normalize.js +0 -48
  169. package/dist/utils/product-normalize.js.map +0 -1
  170. package/dist/validation/validate-config.d.ts +0 -10
  171. package/dist/validation/validate-config.d.ts.map +0 -1
  172. package/dist/validation/validate-config.js +0 -21
  173. package/dist/validation/validate-config.js.map +0 -1
@@ -1,236 +0,0 @@
1
- /**
2
- * @module @kb-labs/core/config/api/product-config
3
- * High-level product configuration resolver with layered merge
4
- */
5
- import { promises as fsp } from 'node:fs';
6
- import path from 'node:path';
7
- // Note: KbError and ERROR_HINTS are available if needed for future error handling
8
- import { readWorkspaceConfig } from './read-config';
9
- import { layeredMergeWithTrace } from '../merge/layered-merge';
10
- import { toFsProduct } from '../utils/product-normalize';
11
- import { computeConfigHash } from '../hash/config-hash';
12
- import { resolvePreset, getPresetConfigForProduct } from '../preset/resolve-preset';
13
- import { updateLockfile } from '../lockfile/lockfile';
14
- /**
15
- * Get product configuration with layered merge and trace
16
- */
17
- export async function getProductConfig(opts, schema) {
18
- const { cwd, product, cli = {}, writeFinal = false, profileLayer } = opts;
19
- const fsProduct = toFsProduct(product);
20
- // Read workspace configuration
21
- const workspaceConfig = await readWorkspaceConfig(cwd);
22
- // Build configuration layers
23
- const layers = [];
24
- // 1. Runtime defaults
25
- layers.push({
26
- label: 'runtime',
27
- value: getRuntimeDefaults(product),
28
- source: 'runtime:defaults',
29
- });
30
- // 2. Profile defaults
31
- if (profileLayer && profileLayer.products) {
32
- // profileLayer.products is already the product-specific overlay (not a map of products)
33
- const profileOverlay = profileLayer.products;
34
- layers.push({
35
- label: 'profile',
36
- value: profileOverlay,
37
- source: profileLayer.source,
38
- });
39
- if (profileLayer.scope && profileLayer.scope.products) {
40
- // profileLayer.scope.products is already the scope-specific overlay
41
- const scopeOverlay = profileLayer.scope.products;
42
- layers.push({
43
- label: 'profile-scope',
44
- value: scopeOverlay,
45
- source: profileLayer.scope.source,
46
- });
47
- }
48
- }
49
- else {
50
- layers.push({
51
- label: 'profile',
52
- value: {},
53
- source: 'profile:none',
54
- });
55
- }
56
- // 3. Preset defaults (resolve org preset if configured)
57
- let presetConfig = {};
58
- if (workspaceConfig?.data) {
59
- const workspaceData = workspaceConfig.data;
60
- if (workspaceData.$extends) {
61
- try {
62
- const preset = await resolvePreset(workspaceData.$extends, cwd);
63
- presetConfig = getPresetConfigForProduct(preset, product);
64
- layers.push({
65
- label: 'preset',
66
- value: presetConfig,
67
- source: `preset:${workspaceData.$extends}`,
68
- });
69
- }
70
- catch (error) {
71
- // Preset resolution failed, continue without preset
72
- console.warn(`Warning: Could not resolve preset ${workspaceData.$extends}:`, error);
73
- }
74
- }
75
- }
76
- if (Object.keys(presetConfig).length === 0) {
77
- layers.push({
78
- label: 'preset',
79
- value: {},
80
- source: 'preset:none',
81
- });
82
- }
83
- // 4. Workspace config
84
- if (workspaceConfig?.data) {
85
- const workspaceData = workspaceConfig.data?.products?.[fsProduct] || {};
86
- layers.push({
87
- label: 'workspace',
88
- value: workspaceData,
89
- source: 'workspace:kb-labs.config',
90
- });
91
- }
92
- // 5. Local config (.kb/<product>/<product>.config.json)
93
- const localConfigPath = path.join(cwd, '.kb', fsProduct, `${fsProduct}.config.json`);
94
- try {
95
- const localConfig = await fsp.readFile(localConfigPath, 'utf-8');
96
- const localData = JSON.parse(localConfig);
97
- layers.push({
98
- label: 'local',
99
- value: localData,
100
- source: `local:.kb/${fsProduct}/${fsProduct}.config.json`,
101
- });
102
- }
103
- catch {
104
- // Local config is optional
105
- }
106
- // 6. CLI overrides
107
- if (Object.keys(cli).length > 0) {
108
- layers.push({
109
- label: 'cli',
110
- value: cli,
111
- source: 'cli:overrides',
112
- });
113
- }
114
- // Merge all layers
115
- const { merged, trace } = layeredMergeWithTrace(layers);
116
- // Validate against schema if provided
117
- if (schema) {
118
- // Schema validation will be implemented with AJV
119
- // For now, we'll skip validation
120
- }
121
- // Write final config if requested
122
- if (writeFinal) {
123
- await writeFinalConfig(cwd, fsProduct, merged);
124
- }
125
- // Update lockfile with config hash
126
- try {
127
- const configHash = computeConfigHash(merged);
128
- const configHashes = {};
129
- configHashes[product] = configHash;
130
- await updateLockfile(cwd, {
131
- configHashes
132
- });
133
- }
134
- catch (error) {
135
- // Lockfile update is optional, don't fail the config resolution
136
- console.warn('Warning: Could not update lockfile:', error);
137
- }
138
- return {
139
- config: merged,
140
- trace,
141
- };
142
- }
143
- /**
144
- * Explain product configuration (trace only)
145
- */
146
- export async function explainProductConfig(opts, schema) {
147
- const result = await getProductConfig(opts, schema);
148
- return { trace: result.trace };
149
- }
150
- /**
151
- * Get runtime defaults for a product
152
- */
153
- function getRuntimeDefaults(product) {
154
- const defaults = {
155
- devlink: {
156
- watch: true,
157
- build: true,
158
- },
159
- release: {
160
- registry: 'https://registry.npmjs.org',
161
- strategy: 'semver',
162
- bump: 'auto',
163
- strict: true,
164
- verify: ['audit', 'build', 'tests'],
165
- publish: { npm: true, github: false },
166
- rollback: { enabled: true, maxHistory: 5 },
167
- output: { json: true, md: true, text: true },
168
- changelog: {
169
- enabled: true,
170
- includeTypes: ['feat', 'fix', 'perf', 'refactor', 'revert'],
171
- excludeTypes: ['chore', 'ci'],
172
- ignoreAuthors: ['dependabot', 'renovate', 'github-actions[bot]', '*[bot]'],
173
- collapseMerges: true,
174
- collapseReverts: true,
175
- preferMergeSummary: true,
176
- bumpStrategy: 'independent',
177
- workspace: true,
178
- perPackage: true,
179
- format: 'both',
180
- level: 'standard',
181
- locale: 'en',
182
- cache: true,
183
- requireAudit: true,
184
- requireSignedTags: false,
185
- redactPatterns: ['(?i)token=\\w+', '(?i)apikey=\\w+', '(https?://[^\\s]+@[^\\s]+)', '(gh[ps]_[A-Za-z0-9_]+)'],
186
- maxBodyLength: 500,
187
- ignoreSubmodules: true,
188
- },
189
- git: {
190
- provider: 'auto',
191
- autoUnshallow: false,
192
- },
193
- },
194
- aiReview: {
195
- enabled: true,
196
- rules: [],
197
- },
198
- aiDocs: {
199
- enabled: true,
200
- templates: [],
201
- },
202
- devkit: {
203
- sync: true,
204
- check: true,
205
- },
206
- analytics: {
207
- enabled: true,
208
- sinks: [],
209
- buffer: {},
210
- },
211
- };
212
- return defaults[product] || {};
213
- }
214
- /**
215
- * Write final configuration to .kb/<product>/<product>.config.json
216
- */
217
- async function writeFinalConfig(cwd, fsProduct, config) {
218
- const configDir = path.join(cwd, '.kb', fsProduct);
219
- const configPath = path.join(configDir, `${fsProduct}.config.json`);
220
- // Ensure directory exists
221
- await fsp.mkdir(configDir, { recursive: true });
222
- // Write config with schema version
223
- const finalConfig = {
224
- $schema: 'https://schemas.kb-labs.dev/config.schema.json',
225
- schemaVersion: '1.0',
226
- ...config,
227
- };
228
- await fsp.writeFile(configPath, JSON.stringify(finalConfig, null, 2));
229
- }
230
- /**
231
- * Get configuration hash for lockfile
232
- */
233
- export function getConfigHash(config) {
234
- return computeConfigHash(config);
235
- }
236
- //# sourceMappingURL=product-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"product-config.js","sourceRoot":"","sources":["../../src/api/product-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,kFAAkF;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAoB,EACpB,MAAW;IAEX,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,GAAG,EAAE,EAAE,UAAU,GAAG,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAC1E,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAEvC,+BAA+B;IAC/B,MAAM,eAAe,GAAG,MAAM,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAEvD,6BAA6B;IAC7B,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,sBAAsB;IACtB,MAAM,CAAC,IAAI,CAAC;QACV,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC;QAClC,MAAM,EAAE,kBAAkB;KAC3B,CAAC,CAAC;IAEH,sBAAsB;IACtB,IAAI,YAAY,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC1C,wFAAwF;QACxF,MAAM,cAAc,GAAG,YAAY,CAAC,QAAmC,CAAC;QAExE,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,cAAc;YACrB,MAAM,EAAE,YAAY,CAAC,MAAM;SAC5B,CAAC,CAAC;QAEH,IAAI,YAAY,CAAC,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACtD,oEAAoE;YACpE,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,QAAmC,CAAC;YAC5E,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,YAAY;gBACnB,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,MAAM;aAClC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,cAAc;SACvB,CAAC,CAAC;IACL,CAAC;IAED,wDAAwD;IACxD,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,eAAe,EAAE,IAAI,EAAE,CAAC;QAC1B,MAAM,aAAa,GAAG,eAAe,CAAC,IAAW,CAAC;QAClD,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;gBAChE,YAAY,GAAG,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAE1D,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,QAAQ;oBACf,KAAK,EAAE,YAAY;oBACnB,MAAM,EAAE,UAAU,aAAa,CAAC,QAAQ,EAAE;iBAC3C,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,oDAAoD;gBACpD,OAAO,CAAC,IAAI,CAAC,qCAAqC,aAAa,CAAC,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;YACtF,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,aAAa;SACtB,CAAC,CAAC;IACL,CAAC;IAED,sBAAsB;IACtB,IAAI,eAAe,EAAE,IAAI,EAAE,CAAC;QAC1B,MAAM,aAAa,GAAI,eAAe,CAAC,IAAY,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACjF,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,aAAa;YACpB,MAAM,EAAE,0BAA0B;SACnC,CAAC,CAAC;IACL,CAAC;IAED,wDAAwD;IACxD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,cAAc,CAAC,CAAC;IACrF,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,aAAa,SAAS,IAAI,SAAS,cAAc;SAC1D,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;IAED,mBAAmB;IACnB,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,eAAe;SACxB,CAAC,CAAC;IACL,CAAC;IAED,mBAAmB;IACnB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAExD,sCAAsC;IACtC,IAAI,MAAM,EAAE,CAAC;QACX,iDAAiD;QACjD,iCAAiC;IACnC,CAAC;IAED,kCAAkC;IAClC,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,mCAAmC;IACnC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAE7C,MAAM,YAAY,GAAwB,EAAE,CAAC;QAC7C,YAAY,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC;QACnC,MAAM,cAAc,CAAC,GAAG,EAAE;YACxB,YAAY;SACb,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,gEAAgE;QAChE,OAAO,CAAC,IAAI,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO;QACL,MAAM,EAAE,MAAW;QACnB,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAwC,EACxC,MAAW;IAEX,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpD,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,OAAe;IACzC,MAAM,QAAQ,GAAwB;QACpC,OAAO,EAAE;YACP,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,IAAI;SACZ;QACD,OAAO,EAAE;YACP,QAAQ,EAAE,4BAA4B;YACtC,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;YACnC,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;YACrC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE;YAC1C,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;YAC5C,SAAS,EAAE;gBACT,OAAO,EAAE,IAAI;gBACb,YAAY,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC;gBAC3D,YAAY,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;gBAC7B,aAAa,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,qBAAqB,EAAE,QAAQ,CAAC;gBAC1E,cAAc,EAAE,IAAI;gBACpB,eAAe,EAAE,IAAI;gBACrB,kBAAkB,EAAE,IAAI;gBACxB,YAAY,EAAE,aAAa;gBAC3B,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,IAAI;gBAChB,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,UAAU;gBACjB,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE,IAAI;gBACX,YAAY,EAAE,IAAI;gBAClB,iBAAiB,EAAE,KAAK;gBACxB,cAAc,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,wBAAwB,CAAC;gBAC7G,aAAa,EAAE,GAAG;gBAClB,gBAAgB,EAAE,IAAI;aACvB;YACD,GAAG,EAAE;gBACH,QAAQ,EAAE,MAAM;gBAChB,aAAa,EAAE,KAAK;aACrB;SACF;QACD,QAAQ,EAAE;YACR,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,EAAE;SACV;QACD,MAAM,EAAE;YACN,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,EAAE;SACd;QACD,MAAM,EAAE;YACN,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,IAAI;SACZ;QACD,SAAS,EAAE;YACT,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;SACX;KACF,CAAC;IAEF,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAAC,GAAW,EAAE,SAAiB,EAAE,MAAW;IACzE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,SAAS,cAAc,CAAC,CAAC;IAEpE,0BAA0B;IAC1B,MAAM,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhD,mCAAmC;IACnC,MAAM,WAAW,GAAG;QAClB,OAAO,EAAE,gDAAgD;QACzD,aAAa,EAAE,KAAK;QACpB,GAAG,MAAM;KACV,CAAC;IAEF,MAAM,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAW;IACvC,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC"}
@@ -1,22 +0,0 @@
1
- /**
2
- * @module @kb-labs/core/config/api/read-config
3
- * Enhanced config file reading with YAML support and find-up
4
- */
5
- export interface ConfigFileResult {
6
- data: unknown;
7
- format: 'json' | 'yaml';
8
- path: string;
9
- }
10
- /**
11
- * Read config file with format detection and caching
12
- */
13
- export declare function readConfigFile(filePath: string): Promise<ConfigFileResult>;
14
- /**
15
- * Find git root directory
16
- */
17
- export declare function findGitRoot(startDir: string): Promise<string | null>;
18
- /**
19
- * Read workspace config with find-up to git root
20
- */
21
- export declare function readWorkspaceConfig(cwd: string): Promise<ConfigFileResult | null>;
22
- //# sourceMappingURL=read-config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read-config.d.ts","sourceRoot":"","sources":["../../src/api/read-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+ChF;AA8CD;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiB1E;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAQvF"}
@@ -1,112 +0,0 @@
1
- /**
2
- * @module @kb-labs/core/config/api/read-config
3
- * Enhanced config file reading with YAML support and find-up
4
- */
5
- import { promises as fsp } from 'node:fs';
6
- import path from 'node:path';
7
- import { extname } from 'node:path';
8
- import YAML from 'yaml';
9
- import { KbError, ERROR_HINTS } from '../errors/kb-error';
10
- import { fsCache } from '../cache/fs-cache';
11
- /**
12
- * Read config file with format detection and caching
13
- */
14
- export async function readConfigFile(filePath) {
15
- const absPath = path.resolve(filePath);
16
- // Check cache first
17
- const cached = await fsCache.get(absPath);
18
- if (cached !== null) {
19
- return cached;
20
- }
21
- try {
22
- const raw = await fsp.readFile(absPath, 'utf-8');
23
- const ext = extname(absPath).toLowerCase();
24
- let data;
25
- let format;
26
- if (ext === '.yaml' || ext === '.yml') {
27
- data = YAML.parse(raw);
28
- format = 'yaml';
29
- }
30
- else {
31
- data = JSON.parse(raw);
32
- format = 'json';
33
- }
34
- const result = { data, format, path: absPath };
35
- // Cache the result
36
- await fsCache.set(absPath, result);
37
- return result;
38
- }
39
- catch (error) {
40
- if (error instanceof SyntaxError) {
41
- throw new KbError('ERR_CONFIG_INVALID', `Failed to parse config file: ${filePath}`, ERROR_HINTS.ERR_CONFIG_INVALID, { filePath, error: error.message });
42
- }
43
- throw new KbError('ERR_CONFIG_NOT_FOUND', `Config file not found: ${filePath}`, ERROR_HINTS.ERR_CONFIG_NOT_FOUND, { filePath, error: error instanceof Error ? error.message : String(error) });
44
- }
45
- }
46
- /**
47
- * Find nearest config file walking up from startDir to git root
48
- * Prioritizes .kb/kb-labs.config.* over kb-labs.config.* for backward compatibility
49
- */
50
- async function findNearestConfig(startDir, filenames = []) {
51
- const start = path.resolve(startDir);
52
- const tried = [];
53
- let dir = start;
54
- // Default filenames if not provided: prioritize .kb/ location
55
- const defaultFilenames = [
56
- '.kb/kb.config.yaml',
57
- '.kb/kb.config.yml',
58
- '.kb/kb.config.json',
59
- ];
60
- const searchFilenames = filenames.length > 0 ? filenames : defaultFilenames;
61
- while (true) {
62
- for (const filename of searchFilenames) {
63
- const candidate = path.join(dir, filename);
64
- tried.push(candidate);
65
- try {
66
- await fsp.access(candidate);
67
- return { path: candidate, tried };
68
- }
69
- catch {
70
- // Continue to next filename
71
- }
72
- }
73
- const parent = path.dirname(dir);
74
- if (parent === dir) {
75
- // Reached filesystem root
76
- break;
77
- }
78
- dir = parent;
79
- }
80
- return { path: null, tried };
81
- }
82
- /**
83
- * Find git root directory
84
- */
85
- export async function findGitRoot(startDir) {
86
- let dir = path.resolve(startDir);
87
- while (true) {
88
- try {
89
- await fsp.access(path.join(dir, '.git'));
90
- return dir;
91
- }
92
- catch {
93
- const parent = path.dirname(dir);
94
- if (parent === dir) {
95
- break;
96
- }
97
- dir = parent;
98
- }
99
- }
100
- return null;
101
- }
102
- /**
103
- * Read workspace config with find-up to git root
104
- */
105
- export async function readWorkspaceConfig(cwd) {
106
- const { path: configPath } = await findNearestConfig(cwd);
107
- if (!configPath) {
108
- return null;
109
- }
110
- return readConfigFile(configPath);
111
- }
112
- //# sourceMappingURL=read-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read-config.js","sourceRoot":"","sources":["../../src/api/read-config.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- /**
2
- * @module @kb-labs/core-config/api/read-kb-config
3
- * Find + read kb.config.* files (product-level workspace config).
4
- */
5
- import { type ConfigFileResult } from './read-config';
6
- export type KbConfigResult = ConfigFileResult;
7
- export declare function findKbConfig(cwd: string, filenames?: string[]): Promise<{
8
- path: string | null;
9
- tried: string[];
10
- }>;
11
- export declare function readKbConfig(cwd: string): Promise<KbConfigResult | null>;
12
- //# sourceMappingURL=read-kb-config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read-kb-config.d.ts","sourceRoot":"","sources":["../../src/api/read-kb-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAA+B,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAWnF,MAAM,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAE9C,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,SAAS,GAAE,MAAM,EAAwB,GACxC,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA0BnD;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAM9E"}
@@ -1,47 +0,0 @@
1
- /**
2
- * @module @kb-labs/core-config/api/read-kb-config
3
- * Find + read kb.config.* files (product-level workspace config).
4
- */
5
- import path from 'node:path';
6
- import { promises as fsp } from 'node:fs';
7
- import { findGitRoot, readConfigFile } from './read-config';
8
- const KB_CONFIG_FILENAMES = [
9
- 'kb.config.json',
10
- 'kb.config.yaml',
11
- 'kb.config.yml',
12
- '.kb/kb.config.json',
13
- '.kb/kb.config.yaml',
14
- '.kb/kb.config.yml',
15
- ];
16
- export async function findKbConfig(cwd, filenames = KB_CONFIG_FILENAMES) {
17
- const tried = [];
18
- const gitRoot = await findGitRoot(cwd);
19
- const stopDir = gitRoot || path.parse(cwd).root;
20
- let dir = path.resolve(cwd);
21
- while (true) {
22
- for (const filename of filenames) {
23
- const candidate = path.join(dir, filename);
24
- tried.push(candidate);
25
- try {
26
- await fsp.access(candidate);
27
- return { path: candidate, tried };
28
- }
29
- catch {
30
- // continue
31
- }
32
- }
33
- if (dir === stopDir || dir === path.dirname(dir)) {
34
- break;
35
- }
36
- dir = path.dirname(dir);
37
- }
38
- return { path: null, tried };
39
- }
40
- export async function readKbConfig(cwd) {
41
- const { path } = await findKbConfig(cwd);
42
- if (!path) {
43
- return null;
44
- }
45
- return readConfigFile(path);
46
- }
47
- //# sourceMappingURL=read-kb-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read-kb-config.js","sourceRoot":"","sources":["../../src/api/read-kb-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAyB,MAAM,eAAe,CAAC;AAEnF,MAAM,mBAAmB,GAAG;IAC1B,gBAAgB;IAChB,gBAAgB;IAChB,eAAe;IACf,oBAAoB;IACpB,oBAAoB;IACpB,mBAAmB;CACpB,CAAC;AAIF,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAW,EACX,YAAsB,mBAAmB;IAEzC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;IAChD,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,IAAI,EAAE,CAAC;QACZ,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC5B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,WAAW;YACb,CAAC;QACH,CAAC;QAED,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACjD,MAAM;QACR,CAAC;QAED,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW;IAC5C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC"}
@@ -1,10 +0,0 @@
1
- /**
2
- * @module @kb-labs/core/config/api/upsert-lockfile
3
- * Upsert lockfile operations
4
- */
5
- import type { UpsertLockfileOptions, InitResult } from '../types/init';
6
- /**
7
- * Upsert lockfile with new references
8
- */
9
- export declare function upsertLockfile(opts: UpsertLockfileOptions): Promise<InitResult>;
10
- //# sourceMappingURL=upsert-lockfile.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"upsert-lockfile.d.ts","sourceRoot":"","sources":["../../src/api/upsert-lockfile.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEvE;;GAEG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,UAAU,CAAC,CAyDrB"}
@@ -1,63 +0,0 @@
1
- /**
2
- * @module @kb-labs/core/config/api/upsert-lockfile
3
- * Upsert lockfile operations
4
- */
5
- import path from 'node:path';
6
- import { promises as fs } from 'node:fs';
7
- import { readLockfile, writeLockfile } from '../lockfile/lockfile';
8
- import { ensureWithinWorkspace } from '../utils/fs-atomic';
9
- /**
10
- * Upsert lockfile with new references
11
- */
12
- export async function upsertLockfile(opts) {
13
- const cwd = path.resolve(opts.cwd);
14
- const lockfilePath = path.join(cwd, '.kb', 'lock.json');
15
- const oldLockfilePath = path.join(cwd, '.kb', 'lockfile.json');
16
- const result = {
17
- actions: [],
18
- created: [],
19
- updated: [],
20
- skipped: [],
21
- warnings: [],
22
- };
23
- // Ensure we're writing within workspace
24
- ensureWithinWorkspace(lockfilePath, cwd);
25
- // Check for deprecated lockfile location
26
- try {
27
- await fs.access(oldLockfilePath);
28
- result.warnings.push('Deprecated lockfile found at .kb/lockfile.json, please migrate to .kb/lock.json');
29
- }
30
- catch {
31
- // No old lockfile, that's fine
32
- }
33
- // Read existing lockfile
34
- const existing = await readLockfile(cwd);
35
- // Build lockfile data
36
- const lockfileData = {
37
- $schema: 'https://schemas.kb-labs.dev/lockfile.schema.json',
38
- schemaVersion: '1.0',
39
- orgPreset: opts.presetRef !== undefined ? opts.presetRef || undefined : existing?.orgPreset,
40
- profile: opts.profileRef !== undefined ? opts.profileRef || undefined : existing?.profile,
41
- policyBundle: opts.policyBundle !== undefined ? opts.policyBundle || undefined : existing?.policyBundle,
42
- hashes: existing?.hashes || {},
43
- generatedAt: new Date().toISOString(),
44
- };
45
- if (!existing) {
46
- // Creating new lockfile
47
- if (!opts.dryRun) {
48
- await writeLockfile(cwd, lockfileData);
49
- }
50
- result.actions.push({ kind: 'write', path: lockfilePath });
51
- result.created.push(lockfilePath);
52
- }
53
- else {
54
- // Updating existing lockfile
55
- if (!opts.dryRun) {
56
- await writeLockfile(cwd, lockfileData);
57
- }
58
- result.actions.push({ kind: 'update', path: lockfilePath });
59
- result.updated.push(lockfilePath);
60
- }
61
- return result;
62
- }
63
- //# sourceMappingURL=upsert-lockfile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"upsert-lockfile.js","sourceRoot":"","sources":["../../src/api/upsert-lockfile.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAqB,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAG3D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAA2B;IAE3B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IACxD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IAE/D,MAAM,MAAM,GAAe;QACzB,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,wCAAwC;IACxC,qBAAqB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAEzC,yCAAyC;IACzC,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACjC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,iFAAiF,CAClF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;IAED,yBAAyB;IACzB,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IAEzC,sBAAsB;IACtB,MAAM,YAAY,GAAiB;QACjC,OAAO,EAAE,kDAAkD;QAC3D,aAAa,EAAE,KAAK;QACpB,SAAS,EAAE,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS;QAC3F,OAAO,EAAE,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO;QACzF,YAAY,EAAE,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY;QACvG,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,EAAE;QAC9B,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC;IAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,wBAAwB;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,aAAa,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,6BAA6B;QAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,aAAa,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,38 +0,0 @@
1
- /**
2
- * @module @kb-labs/core/config/cache/fs-cache
3
- * LRU cache for filesystem reads with clearCaches() support
4
- */
5
- declare class FSCache {
6
- private cache;
7
- private keyCache;
8
- /**
9
- * Generate cache key from file path, mtime, and size
10
- */
11
- private getCacheKey;
12
- /**
13
- * Get cached file data if available and not stale
14
- */
15
- get(absPath: string): Promise<any | null>;
16
- /**
17
- * Cache file data
18
- */
19
- set(absPath: string, data: any): Promise<void>;
20
- /**
21
- * Clear all caches
22
- */
23
- clearCaches(): void;
24
- /**
25
- * Get cache statistics
26
- */
27
- getStats(): {
28
- size: number;
29
- keySize: number;
30
- };
31
- }
32
- declare const fsCache: FSCache;
33
- export { fsCache, FSCache };
34
- /**
35
- * Clear all filesystem caches
36
- */
37
- export declare function clearCaches(): void;
38
- //# sourceMappingURL=fs-cache.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fs-cache.d.ts","sourceRoot":"","sources":["../../src/cache/fs-cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA6DH,cAAM,OAAO;IACX,OAAO,CAAC,KAAK,CAAyC;IACtD,OAAO,CAAC,QAAQ,CAAuC;IAEvD;;OAEG;YACW,WAAW;IAsBzB;;OAEG;IACG,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAiC/C;;OAEG;IACG,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpD;;OAEG;IACH,WAAW,IAAI,IAAI;IAKnB;;OAEG;IACH,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAM9C;AAGD,QAAA,MAAM,OAAO,SAAgB,CAAC;AAE9B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAE5B;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC"}