@stoneforge/quarry 0.1.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 (330) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +160 -0
  3. package/dist/api/index.d.ts +8 -0
  4. package/dist/api/index.d.ts.map +1 -0
  5. package/dist/api/index.js +8 -0
  6. package/dist/api/index.js.map +1 -0
  7. package/dist/api/quarry-api.d.ts +268 -0
  8. package/dist/api/quarry-api.d.ts.map +1 -0
  9. package/dist/api/quarry-api.js +3905 -0
  10. package/dist/api/quarry-api.js.map +1 -0
  11. package/dist/api/types.d.ts +1359 -0
  12. package/dist/api/types.d.ts.map +1 -0
  13. package/dist/api/types.js +204 -0
  14. package/dist/api/types.js.map +1 -0
  15. package/dist/bin/sf.d.ts +3 -0
  16. package/dist/bin/sf.d.ts.map +1 -0
  17. package/dist/bin/sf.js +9 -0
  18. package/dist/bin/sf.js.map +1 -0
  19. package/dist/cli/commands/admin.d.ts +11 -0
  20. package/dist/cli/commands/admin.d.ts.map +1 -0
  21. package/dist/cli/commands/admin.js +465 -0
  22. package/dist/cli/commands/admin.js.map +1 -0
  23. package/dist/cli/commands/alias.d.ts +8 -0
  24. package/dist/cli/commands/alias.d.ts.map +1 -0
  25. package/dist/cli/commands/alias.js +70 -0
  26. package/dist/cli/commands/alias.js.map +1 -0
  27. package/dist/cli/commands/channel.d.ts +13 -0
  28. package/dist/cli/commands/channel.d.ts.map +1 -0
  29. package/dist/cli/commands/channel.js +680 -0
  30. package/dist/cli/commands/channel.js.map +1 -0
  31. package/dist/cli/commands/completion.d.ts +8 -0
  32. package/dist/cli/commands/completion.d.ts.map +1 -0
  33. package/dist/cli/commands/completion.js +87 -0
  34. package/dist/cli/commands/completion.js.map +1 -0
  35. package/dist/cli/commands/config.d.ts +12 -0
  36. package/dist/cli/commands/config.d.ts.map +1 -0
  37. package/dist/cli/commands/config.js +242 -0
  38. package/dist/cli/commands/config.js.map +1 -0
  39. package/dist/cli/commands/crud.d.ts +64 -0
  40. package/dist/cli/commands/crud.d.ts.map +1 -0
  41. package/dist/cli/commands/crud.js +805 -0
  42. package/dist/cli/commands/crud.js.map +1 -0
  43. package/dist/cli/commands/dep.d.ts +16 -0
  44. package/dist/cli/commands/dep.d.ts.map +1 -0
  45. package/dist/cli/commands/dep.js +499 -0
  46. package/dist/cli/commands/dep.js.map +1 -0
  47. package/dist/cli/commands/document.d.ts +12 -0
  48. package/dist/cli/commands/document.d.ts.map +1 -0
  49. package/dist/cli/commands/document.js +1039 -0
  50. package/dist/cli/commands/document.js.map +1 -0
  51. package/dist/cli/commands/embeddings.d.ts +12 -0
  52. package/dist/cli/commands/embeddings.d.ts.map +1 -0
  53. package/dist/cli/commands/embeddings.js +273 -0
  54. package/dist/cli/commands/embeddings.js.map +1 -0
  55. package/dist/cli/commands/entity.d.ts +16 -0
  56. package/dist/cli/commands/entity.d.ts.map +1 -0
  57. package/dist/cli/commands/entity.js +522 -0
  58. package/dist/cli/commands/entity.js.map +1 -0
  59. package/dist/cli/commands/gc.d.ts +10 -0
  60. package/dist/cli/commands/gc.d.ts.map +1 -0
  61. package/dist/cli/commands/gc.js +257 -0
  62. package/dist/cli/commands/gc.js.map +1 -0
  63. package/dist/cli/commands/help.d.ts +11 -0
  64. package/dist/cli/commands/help.d.ts.map +1 -0
  65. package/dist/cli/commands/help.js +169 -0
  66. package/dist/cli/commands/help.js.map +1 -0
  67. package/dist/cli/commands/history.d.ts +9 -0
  68. package/dist/cli/commands/history.d.ts.map +1 -0
  69. package/dist/cli/commands/history.js +160 -0
  70. package/dist/cli/commands/history.js.map +1 -0
  71. package/dist/cli/commands/identity.d.ts +18 -0
  72. package/dist/cli/commands/identity.d.ts.map +1 -0
  73. package/dist/cli/commands/identity.js +698 -0
  74. package/dist/cli/commands/identity.js.map +1 -0
  75. package/dist/cli/commands/inbox.d.ts +20 -0
  76. package/dist/cli/commands/inbox.d.ts.map +1 -0
  77. package/dist/cli/commands/inbox.js +493 -0
  78. package/dist/cli/commands/inbox.js.map +1 -0
  79. package/dist/cli/commands/init.d.ts +20 -0
  80. package/dist/cli/commands/init.d.ts.map +1 -0
  81. package/dist/cli/commands/init.js +144 -0
  82. package/dist/cli/commands/init.js.map +1 -0
  83. package/dist/cli/commands/install.d.ts +9 -0
  84. package/dist/cli/commands/install.d.ts.map +1 -0
  85. package/dist/cli/commands/install.js +200 -0
  86. package/dist/cli/commands/install.js.map +1 -0
  87. package/dist/cli/commands/library.d.ts +12 -0
  88. package/dist/cli/commands/library.d.ts.map +1 -0
  89. package/dist/cli/commands/library.js +665 -0
  90. package/dist/cli/commands/library.js.map +1 -0
  91. package/dist/cli/commands/message.d.ts +11 -0
  92. package/dist/cli/commands/message.d.ts.map +1 -0
  93. package/dist/cli/commands/message.js +608 -0
  94. package/dist/cli/commands/message.js.map +1 -0
  95. package/dist/cli/commands/plan.d.ts +17 -0
  96. package/dist/cli/commands/plan.d.ts.map +1 -0
  97. package/dist/cli/commands/plan.js +698 -0
  98. package/dist/cli/commands/plan.js.map +1 -0
  99. package/dist/cli/commands/playbook.d.ts +12 -0
  100. package/dist/cli/commands/playbook.d.ts.map +1 -0
  101. package/dist/cli/commands/playbook.js +730 -0
  102. package/dist/cli/commands/playbook.js.map +1 -0
  103. package/dist/cli/commands/reset.d.ts +12 -0
  104. package/dist/cli/commands/reset.d.ts.map +1 -0
  105. package/dist/cli/commands/reset.js +306 -0
  106. package/dist/cli/commands/reset.js.map +1 -0
  107. package/dist/cli/commands/serve.d.ts +11 -0
  108. package/dist/cli/commands/serve.d.ts.map +1 -0
  109. package/dist/cli/commands/serve.js +106 -0
  110. package/dist/cli/commands/serve.js.map +1 -0
  111. package/dist/cli/commands/stats.d.ts +8 -0
  112. package/dist/cli/commands/stats.d.ts.map +1 -0
  113. package/dist/cli/commands/stats.js +82 -0
  114. package/dist/cli/commands/stats.js.map +1 -0
  115. package/dist/cli/commands/sync.d.ts +14 -0
  116. package/dist/cli/commands/sync.d.ts.map +1 -0
  117. package/dist/cli/commands/sync.js +370 -0
  118. package/dist/cli/commands/sync.js.map +1 -0
  119. package/dist/cli/commands/task.d.ts +25 -0
  120. package/dist/cli/commands/task.d.ts.map +1 -0
  121. package/dist/cli/commands/task.js +1153 -0
  122. package/dist/cli/commands/task.js.map +1 -0
  123. package/dist/cli/commands/team.d.ts +13 -0
  124. package/dist/cli/commands/team.d.ts.map +1 -0
  125. package/dist/cli/commands/team.js +471 -0
  126. package/dist/cli/commands/team.js.map +1 -0
  127. package/dist/cli/commands/workflow.d.ts +16 -0
  128. package/dist/cli/commands/workflow.d.ts.map +1 -0
  129. package/dist/cli/commands/workflow.js +753 -0
  130. package/dist/cli/commands/workflow.js.map +1 -0
  131. package/dist/cli/completion.d.ts +28 -0
  132. package/dist/cli/completion.d.ts.map +1 -0
  133. package/dist/cli/completion.js +295 -0
  134. package/dist/cli/completion.js.map +1 -0
  135. package/dist/cli/db.d.ts +38 -0
  136. package/dist/cli/db.d.ts.map +1 -0
  137. package/dist/cli/db.js +90 -0
  138. package/dist/cli/db.js.map +1 -0
  139. package/dist/cli/formatter.d.ts +87 -0
  140. package/dist/cli/formatter.d.ts.map +1 -0
  141. package/dist/cli/formatter.js +464 -0
  142. package/dist/cli/formatter.js.map +1 -0
  143. package/dist/cli/index.d.ts +33 -0
  144. package/dist/cli/index.d.ts.map +1 -0
  145. package/dist/cli/index.js +38 -0
  146. package/dist/cli/index.js.map +1 -0
  147. package/dist/cli/parser.d.ts +45 -0
  148. package/dist/cli/parser.d.ts.map +1 -0
  149. package/dist/cli/parser.js +256 -0
  150. package/dist/cli/parser.js.map +1 -0
  151. package/dist/cli/plugin-loader.d.ts +39 -0
  152. package/dist/cli/plugin-loader.d.ts.map +1 -0
  153. package/dist/cli/plugin-loader.js +165 -0
  154. package/dist/cli/plugin-loader.js.map +1 -0
  155. package/dist/cli/plugin-registry.d.ts +50 -0
  156. package/dist/cli/plugin-registry.d.ts.map +1 -0
  157. package/dist/cli/plugin-registry.js +206 -0
  158. package/dist/cli/plugin-registry.js.map +1 -0
  159. package/dist/cli/plugin-types.d.ts +106 -0
  160. package/dist/cli/plugin-types.d.ts.map +1 -0
  161. package/dist/cli/plugin-types.js +103 -0
  162. package/dist/cli/plugin-types.js.map +1 -0
  163. package/dist/cli/runner.d.ts +35 -0
  164. package/dist/cli/runner.d.ts.map +1 -0
  165. package/dist/cli/runner.js +340 -0
  166. package/dist/cli/runner.js.map +1 -0
  167. package/dist/cli/suggest.d.ts +15 -0
  168. package/dist/cli/suggest.d.ts.map +1 -0
  169. package/dist/cli/suggest.js +49 -0
  170. package/dist/cli/suggest.js.map +1 -0
  171. package/dist/cli/types.d.ts +138 -0
  172. package/dist/cli/types.d.ts.map +1 -0
  173. package/dist/cli/types.js +63 -0
  174. package/dist/cli/types.js.map +1 -0
  175. package/dist/config/config.d.ts +86 -0
  176. package/dist/config/config.d.ts.map +1 -0
  177. package/dist/config/config.js +348 -0
  178. package/dist/config/config.js.map +1 -0
  179. package/dist/config/defaults.d.ts +66 -0
  180. package/dist/config/defaults.d.ts.map +1 -0
  181. package/dist/config/defaults.js +114 -0
  182. package/dist/config/defaults.js.map +1 -0
  183. package/dist/config/duration.d.ts +75 -0
  184. package/dist/config/duration.d.ts.map +1 -0
  185. package/dist/config/duration.js +190 -0
  186. package/dist/config/duration.js.map +1 -0
  187. package/dist/config/env.d.ts +67 -0
  188. package/dist/config/env.d.ts.map +1 -0
  189. package/dist/config/env.js +207 -0
  190. package/dist/config/env.js.map +1 -0
  191. package/dist/config/file.d.ts +97 -0
  192. package/dist/config/file.d.ts.map +1 -0
  193. package/dist/config/file.js +365 -0
  194. package/dist/config/file.js.map +1 -0
  195. package/dist/config/index.d.ts +35 -0
  196. package/dist/config/index.d.ts.map +1 -0
  197. package/dist/config/index.js +41 -0
  198. package/dist/config/index.js.map +1 -0
  199. package/dist/config/merge.d.ts +53 -0
  200. package/dist/config/merge.d.ts.map +1 -0
  201. package/dist/config/merge.js +226 -0
  202. package/dist/config/merge.js.map +1 -0
  203. package/dist/config/types.d.ts +257 -0
  204. package/dist/config/types.d.ts.map +1 -0
  205. package/dist/config/types.js +72 -0
  206. package/dist/config/types.js.map +1 -0
  207. package/dist/config/validation.d.ts +55 -0
  208. package/dist/config/validation.d.ts.map +1 -0
  209. package/dist/config/validation.js +251 -0
  210. package/dist/config/validation.js.map +1 -0
  211. package/dist/http/index.d.ts +8 -0
  212. package/dist/http/index.d.ts.map +1 -0
  213. package/dist/http/index.js +12 -0
  214. package/dist/http/index.js.map +1 -0
  215. package/dist/http/sync-handlers.d.ts +162 -0
  216. package/dist/http/sync-handlers.d.ts.map +1 -0
  217. package/dist/http/sync-handlers.js +271 -0
  218. package/dist/http/sync-handlers.js.map +1 -0
  219. package/dist/index.d.ts +25 -0
  220. package/dist/index.d.ts.map +1 -0
  221. package/dist/index.js +69 -0
  222. package/dist/index.js.map +1 -0
  223. package/dist/server/index.d.ts +34 -0
  224. package/dist/server/index.d.ts.map +1 -0
  225. package/dist/server/index.js +3329 -0
  226. package/dist/server/index.js.map +1 -0
  227. package/dist/server/static.d.ts +18 -0
  228. package/dist/server/static.d.ts.map +1 -0
  229. package/dist/server/static.js +71 -0
  230. package/dist/server/static.js.map +1 -0
  231. package/dist/server/ws/broadcaster.d.ts +8 -0
  232. package/dist/server/ws/broadcaster.d.ts.map +1 -0
  233. package/dist/server/ws/broadcaster.js +7 -0
  234. package/dist/server/ws/broadcaster.js.map +1 -0
  235. package/dist/server/ws/handler.d.ts +55 -0
  236. package/dist/server/ws/handler.d.ts.map +1 -0
  237. package/dist/server/ws/handler.js +160 -0
  238. package/dist/server/ws/handler.js.map +1 -0
  239. package/dist/services/blocked-cache.d.ts +297 -0
  240. package/dist/services/blocked-cache.d.ts.map +1 -0
  241. package/dist/services/blocked-cache.js +755 -0
  242. package/dist/services/blocked-cache.js.map +1 -0
  243. package/dist/services/dependency.d.ts +205 -0
  244. package/dist/services/dependency.d.ts.map +1 -0
  245. package/dist/services/dependency.js +566 -0
  246. package/dist/services/dependency.js.map +1 -0
  247. package/dist/services/embeddings/fusion.d.ts +33 -0
  248. package/dist/services/embeddings/fusion.d.ts.map +1 -0
  249. package/dist/services/embeddings/fusion.js +34 -0
  250. package/dist/services/embeddings/fusion.js.map +1 -0
  251. package/dist/services/embeddings/index.d.ts +12 -0
  252. package/dist/services/embeddings/index.d.ts.map +1 -0
  253. package/dist/services/embeddings/index.js +10 -0
  254. package/dist/services/embeddings/index.js.map +1 -0
  255. package/dist/services/embeddings/local-provider.d.ts +31 -0
  256. package/dist/services/embeddings/local-provider.d.ts.map +1 -0
  257. package/dist/services/embeddings/local-provider.js +80 -0
  258. package/dist/services/embeddings/local-provider.js.map +1 -0
  259. package/dist/services/embeddings/service.d.ts +76 -0
  260. package/dist/services/embeddings/service.d.ts.map +1 -0
  261. package/dist/services/embeddings/service.js +153 -0
  262. package/dist/services/embeddings/service.js.map +1 -0
  263. package/dist/services/embeddings/types.d.ts +70 -0
  264. package/dist/services/embeddings/types.d.ts.map +1 -0
  265. package/dist/services/embeddings/types.js +8 -0
  266. package/dist/services/embeddings/types.js.map +1 -0
  267. package/dist/services/id-length-cache.d.ts +156 -0
  268. package/dist/services/id-length-cache.d.ts.map +1 -0
  269. package/dist/services/id-length-cache.js +197 -0
  270. package/dist/services/id-length-cache.js.map +1 -0
  271. package/dist/services/inbox.d.ts +147 -0
  272. package/dist/services/inbox.d.ts.map +1 -0
  273. package/dist/services/inbox.js +428 -0
  274. package/dist/services/inbox.js.map +1 -0
  275. package/dist/services/index.d.ts +10 -0
  276. package/dist/services/index.d.ts.map +1 -0
  277. package/dist/services/index.js +10 -0
  278. package/dist/services/index.js.map +1 -0
  279. package/dist/services/priority-service.d.ts +145 -0
  280. package/dist/services/priority-service.d.ts.map +1 -0
  281. package/dist/services/priority-service.js +272 -0
  282. package/dist/services/priority-service.js.map +1 -0
  283. package/dist/services/search-utils.d.ts +47 -0
  284. package/dist/services/search-utils.d.ts.map +1 -0
  285. package/dist/services/search-utils.js +83 -0
  286. package/dist/services/search-utils.js.map +1 -0
  287. package/dist/sync/hash.d.ts +48 -0
  288. package/dist/sync/hash.d.ts.map +1 -0
  289. package/dist/sync/hash.js +136 -0
  290. package/dist/sync/hash.js.map +1 -0
  291. package/dist/sync/index.d.ts +11 -0
  292. package/dist/sync/index.d.ts.map +1 -0
  293. package/dist/sync/index.js +16 -0
  294. package/dist/sync/index.js.map +1 -0
  295. package/dist/sync/merge.d.ts +80 -0
  296. package/dist/sync/merge.d.ts.map +1 -0
  297. package/dist/sync/merge.js +310 -0
  298. package/dist/sync/merge.js.map +1 -0
  299. package/dist/sync/serialization.d.ts +132 -0
  300. package/dist/sync/serialization.d.ts.map +1 -0
  301. package/dist/sync/serialization.js +306 -0
  302. package/dist/sync/serialization.js.map +1 -0
  303. package/dist/sync/service.d.ts +102 -0
  304. package/dist/sync/service.d.ts.map +1 -0
  305. package/dist/sync/service.js +493 -0
  306. package/dist/sync/service.js.map +1 -0
  307. package/dist/sync/types.d.ts +275 -0
  308. package/dist/sync/types.d.ts.map +1 -0
  309. package/dist/sync/types.js +76 -0
  310. package/dist/sync/types.js.map +1 -0
  311. package/dist/systems/identity.d.ts +479 -0
  312. package/dist/systems/identity.d.ts.map +1 -0
  313. package/dist/systems/identity.js +817 -0
  314. package/dist/systems/identity.js.map +1 -0
  315. package/dist/systems/index.d.ts +8 -0
  316. package/dist/systems/index.d.ts.map +1 -0
  317. package/dist/systems/index.js +29 -0
  318. package/dist/systems/index.js.map +1 -0
  319. package/package.json +121 -0
  320. package/web/assets/charts-vendor-D1YcbGux.js +55 -0
  321. package/web/assets/dnd-vendor-DmxE-_ZH.js +5 -0
  322. package/web/assets/editor-vendor-BxraAWts.js +279 -0
  323. package/web/assets/index-B77vv208.js +341 -0
  324. package/web/assets/index-CF_XnVLh.css +1 -0
  325. package/web/assets/router-vendor-BCKpRBrB.js +41 -0
  326. package/web/assets/ui-vendor-DUahGnbT.js +45 -0
  327. package/web/assets/utils-vendor-CfYKiENT.js +813 -0
  328. package/web/favicon.ico +0 -0
  329. package/web/index.html +23 -0
  330. package/web/logo.png +0 -0
@@ -0,0 +1,365 @@
1
+ /**
2
+ * Configuration File Loading
3
+ *
4
+ * Handles YAML configuration file parsing, discovery, and writing.
5
+ */
6
+ import * as fs from 'node:fs';
7
+ import * as path from 'node:path';
8
+ import * as os from 'node:os';
9
+ import * as yaml from 'yaml';
10
+ import { ValidationError, ErrorCode } from '@stoneforge/core';
11
+ import { isValidIdentityMode } from '../systems/identity.js';
12
+ import { parseDurationValue } from './duration.js';
13
+ // ============================================================================
14
+ // Constants
15
+ // ============================================================================
16
+ /** Default config file name */
17
+ export const CONFIG_FILE_NAME = 'config.yaml';
18
+ /** Default .stoneforge directory name */
19
+ export const STONEFORGE_DIR = '.stoneforge';
20
+ // ============================================================================
21
+ // File Discovery
22
+ // ============================================================================
23
+ /**
24
+ * Finds the nearest .stoneforge directory by walking up from the given directory.
25
+ *
26
+ * This function first checks the STONEFORGE_ROOT environment variable, which
27
+ * is used to support agents working in git worktrees. When an agent is spawned
28
+ * in a worktree, STONEFORGE_ROOT points to the main workspace root where the
29
+ * SQLite database lives.
30
+ *
31
+ * @param startDir - Directory to start searching from
32
+ * @returns Path to .stoneforge directory, or undefined if not found
33
+ */
34
+ export function findStoneforgeDir(startDir) {
35
+ // Check STONEFORGE_ROOT env var first - used for worktree root-finding
36
+ // When agents work in git worktrees, they need to access the main
37
+ // workspace's .stoneforge directory where the SQLite database lives
38
+ const envRoot = process.env.STONEFORGE_ROOT;
39
+ if (envRoot) {
40
+ const stoneforgePath = path.join(envRoot, STONEFORGE_DIR);
41
+ if (fs.existsSync(stoneforgePath) && fs.statSync(stoneforgePath).isDirectory()) {
42
+ return stoneforgePath;
43
+ }
44
+ }
45
+ // Fall back to walk-up search
46
+ let currentDir = path.resolve(startDir);
47
+ const root = path.parse(currentDir).root;
48
+ while (currentDir !== root) {
49
+ const stoneforgePath = path.join(currentDir, STONEFORGE_DIR);
50
+ if (fs.existsSync(stoneforgePath) && fs.statSync(stoneforgePath).isDirectory()) {
51
+ return stoneforgePath;
52
+ }
53
+ currentDir = path.dirname(currentDir);
54
+ }
55
+ // Check root
56
+ const rootStoneforgePath = path.join(root, STONEFORGE_DIR);
57
+ if (fs.existsSync(rootStoneforgePath) && fs.statSync(rootStoneforgePath).isDirectory()) {
58
+ return rootStoneforgePath;
59
+ }
60
+ return undefined;
61
+ }
62
+ /**
63
+ * Gets the global config directory path
64
+ */
65
+ export function getGlobalConfigDir() {
66
+ return path.join(os.homedir(), STONEFORGE_DIR);
67
+ }
68
+ /**
69
+ * Gets the global config file path
70
+ */
71
+ export function getGlobalConfigPath() {
72
+ return path.join(getGlobalConfigDir(), CONFIG_FILE_NAME);
73
+ }
74
+ /**
75
+ * Discovers the configuration file location
76
+ *
77
+ * @param overridePath - Optional override path to use
78
+ * @param startDir - Directory to start searching from (default: cwd)
79
+ * @returns Discovery result with path and existence info
80
+ */
81
+ export function discoverConfigFile(overridePath, startDir = process.cwd()) {
82
+ // If override path is provided, use it directly
83
+ if (overridePath) {
84
+ const resolvedPath = path.resolve(overridePath);
85
+ const exists = fs.existsSync(resolvedPath);
86
+ return {
87
+ path: resolvedPath,
88
+ exists,
89
+ stoneforgeDir: exists ? path.dirname(resolvedPath) : undefined,
90
+ };
91
+ }
92
+ // Try to find .stoneforge directory
93
+ const stoneforgeDir = findStoneforgeDir(startDir);
94
+ if (stoneforgeDir) {
95
+ const configPath = path.join(stoneforgeDir, CONFIG_FILE_NAME);
96
+ return {
97
+ path: configPath,
98
+ exists: fs.existsSync(configPath),
99
+ stoneforgeDir,
100
+ };
101
+ }
102
+ // Fall back to global config
103
+ const globalPath = getGlobalConfigPath();
104
+ return {
105
+ path: globalPath,
106
+ exists: fs.existsSync(globalPath),
107
+ stoneforgeDir: fs.existsSync(getGlobalConfigDir()) ? getGlobalConfigDir() : undefined,
108
+ };
109
+ }
110
+ // ============================================================================
111
+ // YAML Parsing
112
+ // ============================================================================
113
+ /**
114
+ * Parses YAML content into a config file structure
115
+ *
116
+ * @param content - YAML string content
117
+ * @param filePath - Path to file (for error messages)
118
+ * @returns Parsed YAML config object
119
+ */
120
+ export function parseYamlConfig(content, filePath) {
121
+ try {
122
+ const parsed = yaml.parse(content);
123
+ if (parsed === null || parsed === undefined) {
124
+ return {};
125
+ }
126
+ if (typeof parsed !== 'object' || Array.isArray(parsed)) {
127
+ throw new ValidationError(`Configuration file must contain an object${filePath ? ` (${filePath})` : ''}`, ErrorCode.INVALID_INPUT, { value: parsed });
128
+ }
129
+ return parsed;
130
+ }
131
+ catch (err) {
132
+ if (err instanceof ValidationError) {
133
+ throw err;
134
+ }
135
+ throw new ValidationError(`Failed to parse YAML configuration${filePath ? ` (${filePath})` : ''}: ${err instanceof Error ? err.message : String(err)}`, ErrorCode.INVALID_INPUT, { filePath });
136
+ }
137
+ }
138
+ /**
139
+ * Converts YAML config (snake_case) to internal format (camelCase)
140
+ *
141
+ * @param yamlConfig - Parsed YAML config
142
+ * @returns Partial configuration in internal format
143
+ */
144
+ export function convertYamlToConfig(yamlConfig) {
145
+ const result = {};
146
+ // Direct fields
147
+ if (yamlConfig.actor !== undefined) {
148
+ result.actor = yamlConfig.actor;
149
+ }
150
+ if (yamlConfig.database !== undefined) {
151
+ result.database = yamlConfig.database;
152
+ }
153
+ // Sync section
154
+ if (yamlConfig.sync) {
155
+ result.sync = {};
156
+ if (yamlConfig.sync.auto_export !== undefined) {
157
+ result.sync.autoExport = yamlConfig.sync.auto_export;
158
+ }
159
+ if (yamlConfig.sync.export_debounce !== undefined) {
160
+ result.sync.exportDebounce = parseDurationValue(yamlConfig.sync.export_debounce);
161
+ }
162
+ if (yamlConfig.sync.elements_file !== undefined) {
163
+ result.sync.elementsFile = yamlConfig.sync.elements_file;
164
+ }
165
+ if (yamlConfig.sync.dependencies_file !== undefined) {
166
+ result.sync.dependenciesFile = yamlConfig.sync.dependencies_file;
167
+ }
168
+ }
169
+ // Playbooks section
170
+ if (yamlConfig.playbooks?.paths) {
171
+ result.playbooks = {
172
+ paths: yamlConfig.playbooks.paths,
173
+ };
174
+ }
175
+ // Tombstone section
176
+ if (yamlConfig.tombstone) {
177
+ result.tombstone = {};
178
+ if (yamlConfig.tombstone.ttl !== undefined) {
179
+ result.tombstone.ttl = parseDurationValue(yamlConfig.tombstone.ttl);
180
+ }
181
+ if (yamlConfig.tombstone.min_ttl !== undefined) {
182
+ result.tombstone.minTtl = parseDurationValue(yamlConfig.tombstone.min_ttl);
183
+ }
184
+ }
185
+ // Identity section
186
+ if (yamlConfig.identity) {
187
+ result.identity = {};
188
+ if (yamlConfig.identity.mode !== undefined) {
189
+ if (!isValidIdentityMode(yamlConfig.identity.mode)) {
190
+ throw new ValidationError(`Invalid identity mode: '${yamlConfig.identity.mode}'. Must be one of: soft, cryptographic, hybrid`, ErrorCode.INVALID_INPUT, { field: 'identity.mode', value: yamlConfig.identity.mode });
191
+ }
192
+ result.identity.mode = yamlConfig.identity.mode;
193
+ }
194
+ if (yamlConfig.identity.time_tolerance !== undefined) {
195
+ result.identity.timeTolerance = parseDurationValue(yamlConfig.identity.time_tolerance);
196
+ }
197
+ }
198
+ // Plugins section
199
+ if (yamlConfig.plugins?.packages) {
200
+ result.plugins = {
201
+ packages: yamlConfig.plugins.packages,
202
+ };
203
+ }
204
+ return result;
205
+ }
206
+ /**
207
+ * Reads and parses a configuration file
208
+ *
209
+ * @param filePath - Path to the configuration file
210
+ * @returns Partial configuration from the file
211
+ */
212
+ export function readConfigFile(filePath) {
213
+ if (!fs.existsSync(filePath)) {
214
+ return {};
215
+ }
216
+ try {
217
+ const content = fs.readFileSync(filePath, 'utf-8');
218
+ const yamlConfig = parseYamlConfig(content, filePath);
219
+ return convertYamlToConfig(yamlConfig);
220
+ }
221
+ catch (err) {
222
+ if (err instanceof ValidationError) {
223
+ throw err;
224
+ }
225
+ throw new ValidationError(`Failed to read configuration file '${filePath}': ${err instanceof Error ? err.message : String(err)}`, ErrorCode.INVALID_INPUT, { filePath });
226
+ }
227
+ }
228
+ // ============================================================================
229
+ // YAML Writing
230
+ // ============================================================================
231
+ /**
232
+ * Converts internal config (camelCase) to YAML format (snake_case)
233
+ *
234
+ * @param config - Configuration in internal format
235
+ * @returns YAML config object
236
+ */
237
+ export function convertConfigToYaml(config) {
238
+ const result = {};
239
+ // Direct fields
240
+ if (config.actor !== undefined) {
241
+ result.actor = config.actor;
242
+ }
243
+ if (config.database !== undefined) {
244
+ result.database = config.database;
245
+ }
246
+ // Sync section
247
+ if (config.sync) {
248
+ result.sync = {};
249
+ if (config.sync.autoExport !== undefined) {
250
+ result.sync.auto_export = config.sync.autoExport;
251
+ }
252
+ if (config.sync.exportDebounce !== undefined) {
253
+ result.sync.export_debounce = config.sync.exportDebounce;
254
+ }
255
+ if (config.sync.elementsFile !== undefined) {
256
+ result.sync.elements_file = config.sync.elementsFile;
257
+ }
258
+ if (config.sync.dependenciesFile !== undefined) {
259
+ result.sync.dependencies_file = config.sync.dependenciesFile;
260
+ }
261
+ }
262
+ // Playbooks section
263
+ if (config.playbooks?.paths) {
264
+ result.playbooks = {
265
+ paths: config.playbooks.paths,
266
+ };
267
+ }
268
+ // Tombstone section
269
+ if (config.tombstone) {
270
+ result.tombstone = {};
271
+ if (config.tombstone.ttl !== undefined) {
272
+ result.tombstone.ttl = config.tombstone.ttl;
273
+ }
274
+ if (config.tombstone.minTtl !== undefined) {
275
+ result.tombstone.min_ttl = config.tombstone.minTtl;
276
+ }
277
+ }
278
+ // Identity section
279
+ if (config.identity) {
280
+ result.identity = {};
281
+ if (config.identity.mode !== undefined) {
282
+ result.identity.mode = config.identity.mode;
283
+ }
284
+ if (config.identity.timeTolerance !== undefined) {
285
+ result.identity.time_tolerance = config.identity.timeTolerance;
286
+ }
287
+ }
288
+ // Plugins section
289
+ if (config.plugins?.packages && config.plugins.packages.length > 0) {
290
+ result.plugins = {
291
+ packages: config.plugins.packages,
292
+ };
293
+ }
294
+ return result;
295
+ }
296
+ /**
297
+ * Serializes configuration to YAML string
298
+ *
299
+ * @param config - Configuration to serialize
300
+ * @returns YAML string
301
+ */
302
+ export function serializeConfigToYaml(config) {
303
+ const yamlConfig = convertConfigToYaml(config);
304
+ return yaml.stringify(yamlConfig, {
305
+ indent: 2,
306
+ lineWidth: 120,
307
+ });
308
+ }
309
+ /**
310
+ * Writes configuration to a file
311
+ *
312
+ * @param filePath - Path to write to
313
+ * @param config - Configuration to write
314
+ */
315
+ export function writeConfigFile(filePath, config) {
316
+ const dir = path.dirname(filePath);
317
+ // Ensure directory exists
318
+ if (!fs.existsSync(dir)) {
319
+ fs.mkdirSync(dir, { recursive: true });
320
+ }
321
+ const content = `# Stoneforge Configuration\n\n${serializeConfigToYaml(config)}`;
322
+ fs.writeFileSync(filePath, content, 'utf-8');
323
+ }
324
+ /**
325
+ * Updates a configuration file by merging with existing content
326
+ *
327
+ * @param filePath - Path to the configuration file
328
+ * @param updates - Partial configuration to merge
329
+ */
330
+ export function updateConfigFile(filePath, updates) {
331
+ // Read existing config
332
+ const existing = readConfigFile(filePath);
333
+ // Merge updates with the help of deep merge
334
+ const merged = {
335
+ ...existing,
336
+ ...updates,
337
+ sync: updates.sync ? { ...existing.sync, ...updates.sync } : existing.sync,
338
+ playbooks: updates.playbooks ? { ...existing.playbooks, ...updates.playbooks } : existing.playbooks,
339
+ tombstone: updates.tombstone ? { ...existing.tombstone, ...updates.tombstone } : existing.tombstone,
340
+ identity: updates.identity ? { ...existing.identity, ...updates.identity } : existing.identity,
341
+ };
342
+ writeConfigFile(filePath, merged);
343
+ }
344
+ // ============================================================================
345
+ // Path Expansion
346
+ // ============================================================================
347
+ /**
348
+ * Expands ~ to home directory in a path
349
+ */
350
+ export function expandPath(filePath) {
351
+ if (filePath.startsWith('~/')) {
352
+ return path.join(os.homedir(), filePath.slice(2));
353
+ }
354
+ if (filePath === '~') {
355
+ return os.homedir();
356
+ }
357
+ return filePath;
358
+ }
359
+ /**
360
+ * Expands ~ in all playbook paths
361
+ */
362
+ export function expandPlaybookPaths(paths) {
363
+ return paths.map(expandPath);
364
+ }
365
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/config/file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Configuration System
3
+ *
4
+ * Manages settings for Stoneforge, supporting file-based configuration,
5
+ * environment variables, and CLI overrides with a clear precedence hierarchy.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import {
10
+ * loadConfig,
11
+ * getConfig,
12
+ * getValue,
13
+ * setValue,
14
+ * getDefaultConfig,
15
+ * } from './config/index.js';
16
+ *
17
+ * // Load and access configuration
18
+ * const config = loadConfig();
19
+ * const actor = getValue('actor');
20
+ * const mode = getValue('identity.mode');
21
+ *
22
+ * // Modify configuration
23
+ * setValue('actor', 'my-agent');
24
+ * ```
25
+ */
26
+ export type { Duration, DurationString, SyncConfig, PlaybookConfig, TombstoneConfig, IdentityConfigSection, PluginsConfig, Configuration, PartialConfiguration, ConfigSource, TrackedValue, TrackedConfiguration, YamlConfigFile, ConfigFileDiscovery, ConfigValidationResult, ConfigPath, ConfigPathTypes, LoadConfigOptions, EnvVar, } from './types.js';
27
+ export { EnvVars, ConfigSource as ConfigSourceEnum, VALID_CONFIG_PATHS, isValidConfigPath } from './types.js';
28
+ export { DEFAULT_CONFIG, DEFAULT_SYNC_CONFIG, DEFAULT_PLAYBOOK_CONFIG, DEFAULT_TOMBSTONE_CONFIG, DEFAULT_IDENTITY_CONFIG, DEFAULT_PLUGINS_CONFIG, getDefaultConfig, ONE_SECOND, ONE_MINUTE, ONE_HOUR, ONE_DAY, MIN_EXPORT_DEBOUNCE, MAX_EXPORT_DEBOUNCE, MIN_TIME_TOLERANCE, MAX_TIME_TOLERANCE, MAX_TTL, } from './defaults.js';
29
+ export { DURATION_UNITS, isDurationString, parseDuration, parseDurationValue, tryParseDuration, formatDuration, formatDurationHuman, validateDurationRange, } from './duration.js';
30
+ export { isValidActor, validateActor, isValidDatabase, validateDatabase, isValidJsonlFilename, validateJsonlFilename, isValidPlaybookPaths, validatePlaybookPaths, validateConfiguration, validateConfigurationSafe, validatePartialConfiguration, } from './validation.js';
31
+ export { deepMerge, mergeConfiguration, mergeConfigurations, createConfiguration, cloneConfiguration, diffConfigurations, configurationsEqual, } from './merge.js';
32
+ export { CONFIG_FILE_NAME, STONEFORGE_DIR, findStoneforgeDir, getGlobalConfigDir, getGlobalConfigPath, discoverConfigFile, parseYamlConfig, convertYamlToConfig, readConfigFile, convertConfigToYaml, serializeConfigToYaml, writeConfigFile, updateConfigFile, expandPath, expandPlaybookPaths, } from './file.js';
33
+ export { parseEnvBoolean, isEnvBoolean, parseEnvDuration, getEnvVar, hasEnvVar, loadEnvConfig, getEnvConfigPath, getEnvJsonMode, getEnvVerboseMode, getEnvVarInfo, getSetEnvVars, } from './env.js';
34
+ export { loadConfig, getConfig, getTrackedConfig, reloadConfig, clearConfigCache, getValue, getValueFromConfig, getValueSource, getValueWithSource, setValue, unsetValue, getConfigPath, configFileExists, saveConfig, } from './config.js';
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,YAAY,EACV,QAAQ,EACR,cAAc,EACd,UAAU,EACV,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACtB,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,MAAM,GACP,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG9G,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,QAAQ,EACR,OAAO,EACP,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,OAAO,GACR,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,aAAa,GACd,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,UAAU,GACX,MAAM,aAAa,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Configuration System
3
+ *
4
+ * Manages settings for Stoneforge, supporting file-based configuration,
5
+ * environment variables, and CLI overrides with a clear precedence hierarchy.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import {
10
+ * loadConfig,
11
+ * getConfig,
12
+ * getValue,
13
+ * setValue,
14
+ * getDefaultConfig,
15
+ * } from './config/index.js';
16
+ *
17
+ * // Load and access configuration
18
+ * const config = loadConfig();
19
+ * const actor = getValue('actor');
20
+ * const mode = getValue('identity.mode');
21
+ *
22
+ * // Modify configuration
23
+ * setValue('actor', 'my-agent');
24
+ * ```
25
+ */
26
+ export { EnvVars, ConfigSource as ConfigSourceEnum, VALID_CONFIG_PATHS, isValidConfigPath } from './types.js';
27
+ // Defaults
28
+ export { DEFAULT_CONFIG, DEFAULT_SYNC_CONFIG, DEFAULT_PLAYBOOK_CONFIG, DEFAULT_TOMBSTONE_CONFIG, DEFAULT_IDENTITY_CONFIG, DEFAULT_PLUGINS_CONFIG, getDefaultConfig, ONE_SECOND, ONE_MINUTE, ONE_HOUR, ONE_DAY, MIN_EXPORT_DEBOUNCE, MAX_EXPORT_DEBOUNCE, MIN_TIME_TOLERANCE, MAX_TIME_TOLERANCE, MAX_TTL, } from './defaults.js';
29
+ // Duration utilities
30
+ export { DURATION_UNITS, isDurationString, parseDuration, parseDurationValue, tryParseDuration, formatDuration, formatDurationHuman, validateDurationRange, } from './duration.js';
31
+ // Validation
32
+ export { isValidActor, validateActor, isValidDatabase, validateDatabase, isValidJsonlFilename, validateJsonlFilename, isValidPlaybookPaths, validatePlaybookPaths, validateConfiguration, validateConfigurationSafe, validatePartialConfiguration, } from './validation.js';
33
+ // Merge utilities
34
+ export { deepMerge, mergeConfiguration, mergeConfigurations, createConfiguration, cloneConfiguration, diffConfigurations, configurationsEqual, } from './merge.js';
35
+ // File operations
36
+ export { CONFIG_FILE_NAME, STONEFORGE_DIR, findStoneforgeDir, getGlobalConfigDir, getGlobalConfigPath, discoverConfigFile, parseYamlConfig, convertYamlToConfig, readConfigFile, convertConfigToYaml, serializeConfigToYaml, writeConfigFile, updateConfigFile, expandPath, expandPlaybookPaths, } from './file.js';
37
+ // Environment variables
38
+ export { parseEnvBoolean, isEnvBoolean, parseEnvDuration, getEnvVar, hasEnvVar, loadEnvConfig, getEnvConfigPath, getEnvJsonMode, getEnvVerboseMode, getEnvVarInfo, getSetEnvVars, } from './env.js';
39
+ // Main configuration API
40
+ export { loadConfig, getConfig, getTrackedConfig, reloadConfig, clearConfigCache, getValue, getValueFromConfig, getValueSource, getValueWithSource, setValue, unsetValue, getConfigPath, configFileExists, saveConfig, } from './config.js';
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAyBH,OAAO,EAAE,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE9G,WAAW;AACX,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,QAAQ,EACR,OAAO,EACP,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,OAAO,GACR,MAAM,eAAe,CAAC;AAEvB,qBAAqB;AACrB,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAEvB,aAAa;AACb,OAAO,EACL,YAAY,EACZ,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AAEzB,kBAAkB;AAClB,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,kBAAkB;AAClB,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAEnB,wBAAwB;AACxB,OAAO,EACL,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,aAAa,GACd,MAAM,UAAU,CAAC;AAElB,yBAAyB;AACzB,OAAO,EACL,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,UAAU,GACX,MAAM,aAAa,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Configuration Merging
3
+ *
4
+ * Deep merge utilities for combining configuration from multiple sources
5
+ * with precedence handling.
6
+ */
7
+ import type { Configuration, PartialConfiguration } from './types.js';
8
+ /**
9
+ * Deep merges two objects, with source values overriding target values
10
+ * Arrays are replaced, not merged
11
+ *
12
+ * @param target - Base object
13
+ * @param source - Override object
14
+ * @returns Merged object
15
+ */
16
+ export declare function deepMerge<T extends Record<string, unknown>>(target: T, source: Partial<T>): T;
17
+ /**
18
+ * Merges partial configuration into a complete configuration
19
+ *
20
+ * @param base - Base configuration (typically defaults)
21
+ * @param partial - Partial configuration to merge in
22
+ * @returns Complete merged configuration
23
+ */
24
+ export declare function mergeConfiguration(base: Configuration, partial: PartialConfiguration): Configuration;
25
+ /**
26
+ * Merges multiple partial configurations in order
27
+ * Later configurations override earlier ones
28
+ *
29
+ * @param base - Base configuration
30
+ * @param partials - Partial configurations to merge, in order
31
+ * @returns Complete merged configuration
32
+ */
33
+ export declare function mergeConfigurations(base: Configuration, ...partials: PartialConfiguration[]): Configuration;
34
+ /**
35
+ * Creates a configuration by merging defaults with partial config
36
+ *
37
+ * @param partial - Partial configuration
38
+ * @returns Complete configuration with defaults filled in
39
+ */
40
+ export declare function createConfiguration(partial?: PartialConfiguration): Configuration;
41
+ /**
42
+ * Creates a deep clone of a configuration
43
+ */
44
+ export declare function cloneConfiguration(config: Configuration): Configuration;
45
+ /**
46
+ * Compares two configurations and returns the differences
47
+ */
48
+ export declare function diffConfigurations(a: Configuration, b: Configuration): PartialConfiguration;
49
+ /**
50
+ * Checks if two configurations are equal
51
+ */
52
+ export declare function configurationsEqual(a: Configuration, b: Configuration): boolean;
53
+ //# sourceMappingURL=merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/config/merge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAmBtE;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzD,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GACjB,CAAC,CAyBH;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,oBAAoB,GAC5B,aAAa,CA0Bf;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,aAAa,EACnB,GAAG,QAAQ,EAAE,oBAAoB,EAAE,GAClC,aAAa,CAMf;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAMjF;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAyBvE;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,CAAC,EAAE,aAAa,EAChB,CAAC,EAAE,aAAa,GACf,oBAAoB,CAiEtB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,OAAO,CAiB/E"}