@vibesdotdev/config 0.0.1

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 (620) hide show
  1. package/README.md +85 -0
  2. package/SPEC.md +71 -0
  3. package/dist/adapters/cli/flags.d.ts +75 -0
  4. package/dist/adapters/cli/flags.d.ts.map +1 -0
  5. package/dist/adapters/cli/flags.js +221 -0
  6. package/dist/adapters/cli/flags.js.map +1 -0
  7. package/dist/adapters/cli/index.d.ts +12 -0
  8. package/dist/adapters/cli/index.d.ts.map +1 -0
  9. package/dist/adapters/cli/index.js +9 -0
  10. package/dist/adapters/cli/index.js.map +1 -0
  11. package/dist/adapters/cli/mappings.d.ts +17 -0
  12. package/dist/adapters/cli/mappings.d.ts.map +1 -0
  13. package/dist/adapters/cli/mappings.js +32 -0
  14. package/dist/adapters/cli/mappings.js.map +1 -0
  15. package/dist/adapters/cli/prompts.d.ts +28 -0
  16. package/dist/adapters/cli/prompts.d.ts.map +1 -0
  17. package/dist/adapters/cli/prompts.js +55 -0
  18. package/dist/adapters/cli/prompts.js.map +1 -0
  19. package/dist/adapters/cli/schemas/flags.schema.d.ts +8 -0
  20. package/dist/adapters/cli/schemas/flags.schema.d.ts.map +1 -0
  21. package/dist/adapters/cli/schemas/flags.schema.js +2 -0
  22. package/dist/adapters/cli/schemas/flags.schema.js.map +1 -0
  23. package/dist/adapters/cli/schemas/mappings.schema.d.ts +2 -0
  24. package/dist/adapters/cli/schemas/mappings.schema.d.ts.map +1 -0
  25. package/dist/adapters/cli/schemas/mappings.schema.js +2 -0
  26. package/dist/adapters/cli/schemas/mappings.schema.js.map +1 -0
  27. package/dist/adapters/cli/schemas/prompts.schema.d.ts +5 -0
  28. package/dist/adapters/cli/schemas/prompts.schema.d.ts.map +1 -0
  29. package/dist/adapters/cli/schemas/prompts.schema.js +2 -0
  30. package/dist/adapters/cli/schemas/prompts.schema.js.map +1 -0
  31. package/dist/adapters/cli/schemas/wizard.schema.d.ts +19 -0
  32. package/dist/adapters/cli/schemas/wizard.schema.d.ts.map +1 -0
  33. package/dist/adapters/cli/schemas/wizard.schema.js +2 -0
  34. package/dist/adapters/cli/schemas/wizard.schema.js.map +1 -0
  35. package/dist/adapters/cli/wizard.d.ts +33 -0
  36. package/dist/adapters/cli/wizard.d.ts.map +1 -0
  37. package/dist/adapters/cli/wizard.js +77 -0
  38. package/dist/adapters/cli/wizard.js.map +1 -0
  39. package/dist/browser/index.d.ts +7 -0
  40. package/dist/browser/index.d.ts.map +1 -0
  41. package/dist/browser/index.js +4 -0
  42. package/dist/browser/index.js.map +1 -0
  43. package/dist/cli/settings.descriptor.d.ts +9 -0
  44. package/dist/cli/settings.descriptor.d.ts.map +1 -0
  45. package/dist/cli/settings.descriptor.js +18 -0
  46. package/dist/cli/settings.descriptor.js.map +1 -0
  47. package/dist/cli/types.d.ts +57 -0
  48. package/dist/cli/types.d.ts.map +1 -0
  49. package/dist/cli/types.js +9 -0
  50. package/dist/cli/types.js.map +1 -0
  51. package/dist/client/index.d.ts +19 -0
  52. package/dist/client/index.d.ts.map +1 -0
  53. package/dist/client/index.js +145 -0
  54. package/dist/client/index.js.map +1 -0
  55. package/dist/client/storage.d.ts +48 -0
  56. package/dist/client/storage.d.ts.map +1 -0
  57. package/dist/client/storage.js +46 -0
  58. package/dist/client/storage.js.map +1 -0
  59. package/dist/collection/collection.d.ts +46 -0
  60. package/dist/collection/collection.d.ts.map +1 -0
  61. package/dist/collection/collection.js +93 -0
  62. package/dist/collection/collection.js.map +1 -0
  63. package/dist/collection/index.d.ts +6 -0
  64. package/dist/collection/index.d.ts.map +1 -0
  65. package/dist/collection/index.js +5 -0
  66. package/dist/collection/index.js.map +1 -0
  67. package/dist/common/index.d.ts +7 -0
  68. package/dist/common/index.d.ts.map +1 -0
  69. package/dist/common/index.js +4 -0
  70. package/dist/common/index.js.map +1 -0
  71. package/dist/config.context.descriptor.d.ts +21 -0
  72. package/dist/config.context.descriptor.d.ts.map +1 -0
  73. package/dist/config.context.descriptor.js +11 -0
  74. package/dist/config.context.descriptor.js.map +1 -0
  75. package/dist/config.plugin.d.ts +15 -0
  76. package/dist/config.plugin.d.ts.map +1 -0
  77. package/dist/config.plugin.js +166 -0
  78. package/dist/config.plugin.js.map +1 -0
  79. package/dist/crud/base-types.d.ts +10 -0
  80. package/dist/crud/base-types.d.ts.map +1 -0
  81. package/dist/crud/base-types.js +10 -0
  82. package/dist/crud/base-types.js.map +1 -0
  83. package/dist/crud/index.d.ts +4 -0
  84. package/dist/crud/index.d.ts.map +1 -0
  85. package/dist/crud/index.js +2 -0
  86. package/dist/crud/index.js.map +1 -0
  87. package/dist/crud/schemas/base-types.schema.d.ts +19 -0
  88. package/dist/crud/schemas/base-types.schema.d.ts.map +1 -0
  89. package/dist/crud/schemas/base-types.schema.js +2 -0
  90. package/dist/crud/schemas/base-types.schema.js.map +1 -0
  91. package/dist/crud/schemas/shared.schema.d.ts +13 -0
  92. package/dist/crud/schemas/shared.schema.d.ts.map +1 -0
  93. package/dist/crud/schemas/shared.schema.js +2 -0
  94. package/dist/crud/schemas/shared.schema.js.map +1 -0
  95. package/dist/crud/shared.d.ts +8 -0
  96. package/dist/crud/shared.d.ts.map +1 -0
  97. package/dist/crud/shared.js +8 -0
  98. package/dist/crud/shared.js.map +1 -0
  99. package/dist/crud/types.d.ts +250 -0
  100. package/dist/crud/types.d.ts.map +1 -0
  101. package/dist/crud/types.js +22 -0
  102. package/dist/crud/types.js.map +1 -0
  103. package/dist/docs/environment.docs.descriptor.d.ts +4 -0
  104. package/dist/docs/environment.docs.descriptor.d.ts.map +1 -0
  105. package/dist/docs/environment.docs.descriptor.js +383 -0
  106. package/dist/docs/environment.docs.descriptor.js.map +1 -0
  107. package/dist/docs/manifests.docs.descriptor.d.ts +4 -0
  108. package/dist/docs/manifests.docs.descriptor.d.ts.map +1 -0
  109. package/dist/docs/manifests.docs.descriptor.js +503 -0
  110. package/dist/docs/manifests.docs.descriptor.js.map +1 -0
  111. package/dist/docs/validation.docs.descriptor.d.ts +4 -0
  112. package/dist/docs/validation.docs.descriptor.d.ts.map +1 -0
  113. package/dist/docs/validation.docs.descriptor.js +441 -0
  114. package/dist/docs/validation.docs.descriptor.js.map +1 -0
  115. package/dist/doctor.d.ts +42 -0
  116. package/dist/doctor.d.ts.map +1 -0
  117. package/dist/doctor.js +119 -0
  118. package/dist/doctor.js.map +1 -0
  119. package/dist/env.d.ts +28 -0
  120. package/dist/env.d.ts.map +1 -0
  121. package/dist/env.js +75 -0
  122. package/dist/env.js.map +1 -0
  123. package/dist/env.runtime.d.ts +19 -0
  124. package/dist/env.runtime.d.ts.map +1 -0
  125. package/dist/env.runtime.js +37 -0
  126. package/dist/env.runtime.js.map +1 -0
  127. package/dist/environment/current.d.ts +32 -0
  128. package/dist/environment/current.d.ts.map +1 -0
  129. package/dist/environment/current.js +91 -0
  130. package/dist/environment/current.js.map +1 -0
  131. package/dist/environment/environment.config.descriptor.d.ts +11 -0
  132. package/dist/environment/environment.config.descriptor.d.ts.map +1 -0
  133. package/dist/environment/environment.config.descriptor.js +51 -0
  134. package/dist/environment/environment.config.descriptor.js.map +1 -0
  135. package/dist/environment/environment.config.schema.d.ts +47 -0
  136. package/dist/environment/environment.config.schema.d.ts.map +1 -0
  137. package/dist/environment/environment.config.schema.js +19 -0
  138. package/dist/environment/environment.config.schema.js.map +1 -0
  139. package/dist/environment/environment.local.descriptor.d.ts +11 -0
  140. package/dist/environment/environment.local.descriptor.d.ts.map +1 -0
  141. package/dist/environment/environment.local.descriptor.js +42 -0
  142. package/dist/environment/environment.local.descriptor.js.map +1 -0
  143. package/dist/environment/environment.plugin.d.ts +9 -0
  144. package/dist/environment/environment.plugin.d.ts.map +1 -0
  145. package/dist/environment/environment.plugin.js +27 -0
  146. package/dist/environment/environment.plugin.js.map +1 -0
  147. package/dist/environment/environment.production.descriptor.d.ts +10 -0
  148. package/dist/environment/environment.production.descriptor.d.ts.map +1 -0
  149. package/dist/environment/environment.production.descriptor.js +37 -0
  150. package/dist/environment/environment.production.descriptor.js.map +1 -0
  151. package/dist/environment/environment.staging.descriptor.d.ts +11 -0
  152. package/dist/environment/environment.staging.descriptor.d.ts.map +1 -0
  153. package/dist/environment/environment.staging.descriptor.js +22 -0
  154. package/dist/environment/environment.staging.descriptor.js.map +1 -0
  155. package/dist/environment/index.d.ts +8 -0
  156. package/dist/environment/index.d.ts.map +1 -0
  157. package/dist/environment/index.js +9 -0
  158. package/dist/environment/index.js.map +1 -0
  159. package/dist/environment/kinds/environment.default.d.ts +23 -0
  160. package/dist/environment/kinds/environment.default.d.ts.map +1 -0
  161. package/dist/environment/kinds/environment.default.js +49 -0
  162. package/dist/environment/kinds/environment.default.js.map +1 -0
  163. package/dist/environment/kinds/environment.interface.d.ts +7 -0
  164. package/dist/environment/kinds/environment.interface.d.ts.map +1 -0
  165. package/dist/environment/kinds/environment.interface.js +7 -0
  166. package/dist/environment/kinds/environment.interface.js.map +1 -0
  167. package/dist/environment/kinds/environment.kind.d.ts +10 -0
  168. package/dist/environment/kinds/environment.kind.d.ts.map +1 -0
  169. package/dist/environment/kinds/environment.kind.js +57 -0
  170. package/dist/environment/kinds/environment.kind.js.map +1 -0
  171. package/dist/environment/kinds/environment.schema.d.ts +34 -0
  172. package/dist/environment/kinds/environment.schema.d.ts.map +1 -0
  173. package/dist/environment/kinds/environment.schema.js +46 -0
  174. package/dist/environment/kinds/environment.schema.js.map +1 -0
  175. package/dist/environment/kinds/index.d.ts +8 -0
  176. package/dist/environment/kinds/index.d.ts.map +1 -0
  177. package/dist/environment/kinds/index.js +7 -0
  178. package/dist/environment/kinds/index.js.map +1 -0
  179. package/dist/environment/kinds/schemas/environment.interface.schema.d.ts +11 -0
  180. package/dist/environment/kinds/schemas/environment.interface.schema.d.ts.map +1 -0
  181. package/dist/environment/kinds/schemas/environment.interface.schema.js +2 -0
  182. package/dist/environment/kinds/schemas/environment.interface.schema.js.map +1 -0
  183. package/dist/environment/kinds/schemas/environment.schema.d.ts +30 -0
  184. package/dist/environment/kinds/schemas/environment.schema.d.ts.map +1 -0
  185. package/dist/environment/kinds/schemas/environment.schema.js +2 -0
  186. package/dist/environment/kinds/schemas/environment.schema.js.map +1 -0
  187. package/dist/environment/schemas/current.schema.d.ts +20 -0
  188. package/dist/environment/schemas/current.schema.d.ts.map +1 -0
  189. package/dist/environment/schemas/current.schema.js +2 -0
  190. package/dist/environment/schemas/current.schema.js.map +1 -0
  191. package/dist/environment/schemas/environment.config.schema.d.ts +4 -0
  192. package/dist/environment/schemas/environment.config.schema.d.ts.map +1 -0
  193. package/dist/environment/schemas/environment.config.schema.js +2 -0
  194. package/dist/environment/schemas/environment.config.schema.js.map +1 -0
  195. package/dist/extensions/index.d.ts +8 -0
  196. package/dist/extensions/index.d.ts.map +1 -0
  197. package/dist/extensions/index.js +8 -0
  198. package/dist/extensions/index.js.map +1 -0
  199. package/dist/extensions/registry.d.ts +41 -0
  200. package/dist/extensions/registry.d.ts.map +1 -0
  201. package/dist/extensions/registry.js +142 -0
  202. package/dist/extensions/registry.js.map +1 -0
  203. package/dist/extensions/types.d.ts +101 -0
  204. package/dist/extensions/types.d.ts.map +1 -0
  205. package/dist/extensions/types.js +8 -0
  206. package/dist/extensions/types.js.map +1 -0
  207. package/dist/form/core/field-resolver.d.ts +42 -0
  208. package/dist/form/core/field-resolver.d.ts.map +1 -0
  209. package/dist/form/core/field-resolver.js +293 -0
  210. package/dist/form/core/field-resolver.js.map +1 -0
  211. package/dist/form/core/groups.d.ts +20 -0
  212. package/dist/form/core/groups.d.ts.map +1 -0
  213. package/dist/form/core/groups.js +69 -0
  214. package/dist/form/core/groups.js.map +1 -0
  215. package/dist/form/core/index.d.ts +8 -0
  216. package/dist/form/core/index.d.ts.map +1 -0
  217. package/dist/form/core/index.js +6 -0
  218. package/dist/form/core/index.js.map +1 -0
  219. package/dist/form/core/nested-utils.d.ts +40 -0
  220. package/dist/form/core/nested-utils.d.ts.map +1 -0
  221. package/dist/form/core/nested-utils.js +98 -0
  222. package/dist/form/core/nested-utils.js.map +1 -0
  223. package/dist/form/core/schemas/validation.schema.d.ts +9 -0
  224. package/dist/form/core/schemas/validation.schema.d.ts.map +1 -0
  225. package/dist/form/core/schemas/validation.schema.js +2 -0
  226. package/dist/form/core/schemas/validation.schema.js.map +1 -0
  227. package/dist/form/core/types.d.ts +103 -0
  228. package/dist/form/core/types.d.ts.map +1 -0
  229. package/dist/form/core/types.js +2 -0
  230. package/dist/form/core/types.js.map +1 -0
  231. package/dist/form/core/validation.d.ts +23 -0
  232. package/dist/form/core/validation.d.ts.map +1 -0
  233. package/dist/form/core/validation.js +103 -0
  234. package/dist/form/core/validation.js.map +1 -0
  235. package/dist/form/core/visibility.d.ts +37 -0
  236. package/dist/form/core/visibility.d.ts.map +1 -0
  237. package/dist/form/core/visibility.js +128 -0
  238. package/dist/form/core/visibility.js.map +1 -0
  239. package/dist/form/index.d.ts +8 -0
  240. package/dist/form/index.d.ts.map +1 -0
  241. package/dist/form/index.js +2 -0
  242. package/dist/form/index.js.map +1 -0
  243. package/dist/index.d.ts +18 -0
  244. package/dist/index.d.ts.map +1 -0
  245. package/dist/index.js +18 -0
  246. package/dist/index.js.map +1 -0
  247. package/dist/loader/cli/index.d.ts +61 -0
  248. package/dist/loader/cli/index.d.ts.map +1 -0
  249. package/dist/loader/cli/index.js +263 -0
  250. package/dist/loader/cli/index.js.map +1 -0
  251. package/dist/loader/cli/loaders.d.ts +13 -0
  252. package/dist/loader/cli/loaders.d.ts.map +1 -0
  253. package/dist/loader/cli/loaders.js +132 -0
  254. package/dist/loader/cli/loaders.js.map +1 -0
  255. package/dist/loader/cli/types.d.ts +152 -0
  256. package/dist/loader/cli/types.d.ts.map +1 -0
  257. package/dist/loader/cli/types.js +5 -0
  258. package/dist/loader/cli/types.js.map +1 -0
  259. package/dist/loader/cli/utils.d.ts +53 -0
  260. package/dist/loader/cli/utils.d.ts.map +1 -0
  261. package/dist/loader/cli/utils.js +198 -0
  262. package/dist/loader/cli/utils.js.map +1 -0
  263. package/dist/loader/client.d.ts +18 -0
  264. package/dist/loader/client.d.ts.map +1 -0
  265. package/dist/loader/client.js +109 -0
  266. package/dist/loader/client.js.map +1 -0
  267. package/dist/loader/discovery.d.ts +48 -0
  268. package/dist/loader/discovery.d.ts.map +1 -0
  269. package/dist/loader/discovery.js +253 -0
  270. package/dist/loader/discovery.js.map +1 -0
  271. package/dist/loader/file-loader.d.ts +17 -0
  272. package/dist/loader/file-loader.d.ts.map +1 -0
  273. package/dist/loader/file-loader.js +237 -0
  274. package/dist/loader/file-loader.js.map +1 -0
  275. package/dist/loader/index.d.ts +9 -0
  276. package/dist/loader/index.d.ts.map +1 -0
  277. package/dist/loader/index.js +8 -0
  278. package/dist/loader/index.js.map +1 -0
  279. package/dist/loader/index.server.d.ts +66 -0
  280. package/dist/loader/index.server.d.ts.map +1 -0
  281. package/dist/loader/index.server.js +256 -0
  282. package/dist/loader/index.server.js.map +1 -0
  283. package/dist/loader/merge.d.ts +88 -0
  284. package/dist/loader/merge.d.ts.map +1 -0
  285. package/dist/loader/merge.js +301 -0
  286. package/dist/loader/merge.js.map +1 -0
  287. package/dist/loader/schemas/merge.schema.d.ts +8 -0
  288. package/dist/loader/schemas/merge.schema.d.ts.map +1 -0
  289. package/dist/loader/schemas/merge.schema.js +2 -0
  290. package/dist/loader/schemas/merge.schema.js.map +1 -0
  291. package/dist/loader/schemas/validation.schema.d.ts +17 -0
  292. package/dist/loader/schemas/validation.schema.d.ts.map +1 -0
  293. package/dist/loader/schemas/validation.schema.js +2 -0
  294. package/dist/loader/schemas/validation.schema.js.map +1 -0
  295. package/dist/loader/server.d.ts +3 -0
  296. package/dist/loader/server.d.ts.map +1 -0
  297. package/dist/loader/server.js +2 -0
  298. package/dist/loader/server.js.map +1 -0
  299. package/dist/loader/types.d.ts +136 -0
  300. package/dist/loader/types.d.ts.map +1 -0
  301. package/dist/loader/types.js +24 -0
  302. package/dist/loader/types.js.map +1 -0
  303. package/dist/loader/validation.d.ts +59 -0
  304. package/dist/loader/validation.d.ts.map +1 -0
  305. package/dist/loader/validation.js +218 -0
  306. package/dist/loader/validation.js.map +1 -0
  307. package/dist/manifest/builder.d.ts +172 -0
  308. package/dist/manifest/builder.d.ts.map +1 -0
  309. package/dist/manifest/builder.js +336 -0
  310. package/dist/manifest/builder.js.map +1 -0
  311. package/dist/manifest/config-manifest.d.ts +199 -0
  312. package/dist/manifest/config-manifest.d.ts.map +1 -0
  313. package/dist/manifest/config-manifest.js +388 -0
  314. package/dist/manifest/config-manifest.js.map +1 -0
  315. package/dist/manifest/index.d.ts +10 -0
  316. package/dist/manifest/index.d.ts.map +1 -0
  317. package/dist/manifest/index.js +20 -0
  318. package/dist/manifest/index.js.map +1 -0
  319. package/dist/manifest/schema.d.ts +460 -0
  320. package/dist/manifest/schema.d.ts.map +1 -0
  321. package/dist/manifest/schema.js +187 -0
  322. package/dist/manifest/schema.js.map +1 -0
  323. package/dist/manifest/schemas/builder.schema.d.ts +20 -0
  324. package/dist/manifest/schemas/builder.schema.d.ts.map +1 -0
  325. package/dist/manifest/schemas/builder.schema.js +2 -0
  326. package/dist/manifest/schemas/builder.schema.js.map +1 -0
  327. package/dist/manifest/schemas/config-manifest.schema.d.ts +2 -0
  328. package/dist/manifest/schemas/config-manifest.schema.d.ts.map +1 -0
  329. package/dist/manifest/schemas/config-manifest.schema.js +2 -0
  330. package/dist/manifest/schemas/config-manifest.schema.js.map +1 -0
  331. package/dist/manifest/schemas/schema.schema.d.ts +83 -0
  332. package/dist/manifest/schemas/schema.schema.d.ts.map +1 -0
  333. package/dist/manifest/schemas/schema.schema.js +2 -0
  334. package/dist/manifest/schemas/schema.schema.js.map +1 -0
  335. package/dist/manifest/types.d.ts +563 -0
  336. package/dist/manifest/types.d.ts.map +1 -0
  337. package/dist/manifest/types.js +9 -0
  338. package/dist/manifest/types.js.map +1 -0
  339. package/dist/routing/index.d.ts +29 -0
  340. package/dist/routing/index.d.ts.map +1 -0
  341. package/dist/routing/index.js +35 -0
  342. package/dist/routing/index.js.map +1 -0
  343. package/dist/routing/merge.d.ts +164 -0
  344. package/dist/routing/merge.d.ts.map +1 -0
  345. package/dist/routing/merge.js +460 -0
  346. package/dist/routing/merge.js.map +1 -0
  347. package/dist/routing/registry.d.ts +145 -0
  348. package/dist/routing/registry.d.ts.map +1 -0
  349. package/dist/routing/registry.js +459 -0
  350. package/dist/routing/registry.js.map +1 -0
  351. package/dist/routing/schemas/merge.schema.d.ts +5 -0
  352. package/dist/routing/schemas/merge.schema.d.ts.map +1 -0
  353. package/dist/routing/schemas/merge.schema.js +2 -0
  354. package/dist/routing/schemas/merge.schema.js.map +1 -0
  355. package/dist/routing/types.d.ts +358 -0
  356. package/dist/routing/types.d.ts.map +1 -0
  357. package/dist/routing/types.js +89 -0
  358. package/dist/routing/types.js.map +1 -0
  359. package/dist/schema/extend-zod.d.ts +137 -0
  360. package/dist/schema/extend-zod.d.ts.map +1 -0
  361. package/dist/schema/extend-zod.js +243 -0
  362. package/dist/schema/extend-zod.js.map +1 -0
  363. package/dist/schema/index.d.ts +9 -0
  364. package/dist/schema/index.d.ts.map +1 -0
  365. package/dist/schema/index.js +10 -0
  366. package/dist/schema/index.js.map +1 -0
  367. package/dist/schema/references.d.ts +9 -0
  368. package/dist/schema/references.d.ts.map +1 -0
  369. package/dist/schema/references.js +9 -0
  370. package/dist/schema/references.js.map +1 -0
  371. package/dist/schema/resolver.d.ts +45 -0
  372. package/dist/schema/resolver.d.ts.map +1 -0
  373. package/dist/schema/resolver.js +267 -0
  374. package/dist/schema/resolver.js.map +1 -0
  375. package/dist/schema/schemas/extend-zod.schema.d.ts +16 -0
  376. package/dist/schema/schemas/extend-zod.schema.d.ts.map +1 -0
  377. package/dist/schema/schemas/extend-zod.schema.js +2 -0
  378. package/dist/schema/schemas/extend-zod.schema.js.map +1 -0
  379. package/dist/schema/schemas/references.schema.d.ts +70 -0
  380. package/dist/schema/schemas/references.schema.d.ts.map +1 -0
  381. package/dist/schema/schemas/references.schema.js +2 -0
  382. package/dist/schema/schemas/references.schema.js.map +1 -0
  383. package/dist/schemas/collection.d.ts +31 -0
  384. package/dist/schemas/collection.d.ts.map +1 -0
  385. package/dist/schemas/collection.js +22 -0
  386. package/dist/schemas/collection.js.map +1 -0
  387. package/dist/schemas/config-manifest-descriptor.d.ts +495 -0
  388. package/dist/schemas/config-manifest-descriptor.d.ts.map +1 -0
  389. package/dist/schemas/config-manifest-descriptor.js +210 -0
  390. package/dist/schemas/config-manifest-descriptor.js.map +1 -0
  391. package/dist/schemas/config-registry-state.d.ts +8 -0
  392. package/dist/schemas/config-registry-state.d.ts.map +1 -0
  393. package/dist/schemas/config-registry-state.js +6 -0
  394. package/dist/schemas/config-registry-state.js.map +1 -0
  395. package/dist/schemas/doctor.schema.d.ts +25 -0
  396. package/dist/schemas/doctor.schema.d.ts.map +1 -0
  397. package/dist/schemas/doctor.schema.js +2 -0
  398. package/dist/schemas/doctor.schema.js.map +1 -0
  399. package/dist/schemas/index.d.ts +8 -0
  400. package/dist/schemas/index.d.ts.map +1 -0
  401. package/dist/schemas/index.js +21 -0
  402. package/dist/schemas/index.js.map +1 -0
  403. package/dist/server/index.d.ts +5 -0
  404. package/dist/server/index.d.ts.map +1 -0
  405. package/dist/server/index.js +4 -0
  406. package/dist/server/index.js.map +1 -0
  407. package/dist/services/config-accessor.d.ts +40 -0
  408. package/dist/services/config-accessor.d.ts.map +1 -0
  409. package/dist/services/config-accessor.js +180 -0
  410. package/dist/services/config-accessor.js.map +1 -0
  411. package/dist/services/config-storage/index.d.ts +8 -0
  412. package/dist/services/config-storage/index.d.ts.map +1 -0
  413. package/dist/services/config-storage/index.js +7 -0
  414. package/dist/services/config-storage/index.js.map +1 -0
  415. package/dist/services/config-storage/service.d.ts +63 -0
  416. package/dist/services/config-storage/service.d.ts.map +1 -0
  417. package/dist/services/config-storage/service.js +234 -0
  418. package/dist/services/config-storage/service.js.map +1 -0
  419. package/dist/services/config.d.ts +3 -0
  420. package/dist/services/config.d.ts.map +1 -0
  421. package/dist/services/config.js +30 -0
  422. package/dist/services/config.js.map +1 -0
  423. package/dist/services/encryption.d.ts +114 -0
  424. package/dist/services/encryption.d.ts.map +1 -0
  425. package/dist/services/encryption.js +232 -0
  426. package/dist/services/encryption.js.map +1 -0
  427. package/dist/services/index.d.ts +12 -0
  428. package/dist/services/index.d.ts.map +1 -0
  429. package/dist/services/index.js +16 -0
  430. package/dist/services/index.js.map +1 -0
  431. package/dist/services/loader/loader.descriptor.d.ts +103 -0
  432. package/dist/services/loader/loader.descriptor.d.ts.map +1 -0
  433. package/dist/services/loader/loader.descriptor.js +60 -0
  434. package/dist/services/loader/loader.descriptor.js.map +1 -0
  435. package/dist/services/loader/loader.impl.cloud.d.ts +55 -0
  436. package/dist/services/loader/loader.impl.cloud.d.ts.map +1 -0
  437. package/dist/services/loader/loader.impl.cloud.js +182 -0
  438. package/dist/services/loader/loader.impl.cloud.js.map +1 -0
  439. package/dist/services/loader/loader.impl.consumer.d.ts +48 -0
  440. package/dist/services/loader/loader.impl.consumer.d.ts.map +1 -0
  441. package/dist/services/loader/loader.impl.consumer.js +175 -0
  442. package/dist/services/loader/loader.impl.consumer.js.map +1 -0
  443. package/dist/services/loader/loader.impl.consumer.local-first.d.ts +59 -0
  444. package/dist/services/loader/loader.impl.consumer.local-first.d.ts.map +1 -0
  445. package/dist/services/loader/loader.impl.consumer.local-first.js +347 -0
  446. package/dist/services/loader/loader.impl.consumer.local-first.js.map +1 -0
  447. package/dist/services/manifest-utils.d.ts +47 -0
  448. package/dist/services/manifest-utils.d.ts.map +1 -0
  449. package/dist/services/manifest-utils.js +105 -0
  450. package/dist/services/manifest-utils.js.map +1 -0
  451. package/dist/services/schemas/config-accessor.schema.d.ts +10 -0
  452. package/dist/services/schemas/config-accessor.schema.d.ts.map +1 -0
  453. package/dist/services/schemas/config-accessor.schema.js +2 -0
  454. package/dist/services/schemas/config-accessor.schema.js.map +1 -0
  455. package/dist/services/schemas/encryption.schema.d.ts +22 -0
  456. package/dist/services/schemas/encryption.schema.d.ts.map +1 -0
  457. package/dist/services/schemas/encryption.schema.js +2 -0
  458. package/dist/services/schemas/encryption.schema.js.map +1 -0
  459. package/dist/services/schemas/manifest-utils.schema.d.ts +4 -0
  460. package/dist/services/schemas/manifest-utils.schema.d.ts.map +1 -0
  461. package/dist/services/schemas/manifest-utils.schema.js +2 -0
  462. package/dist/services/schemas/manifest-utils.schema.js.map +1 -0
  463. package/dist/settings/assemble.d.ts +28 -0
  464. package/dist/settings/assemble.d.ts.map +1 -0
  465. package/dist/settings/assemble.js +30 -0
  466. package/dist/settings/assemble.js.map +1 -0
  467. package/dist/settings/index.d.ts +10 -0
  468. package/dist/settings/index.d.ts.map +1 -0
  469. package/dist/settings/index.js +10 -0
  470. package/dist/settings/index.js.map +1 -0
  471. package/dist/settings/settings-section.schema.d.ts +49 -0
  472. package/dist/settings/settings-section.schema.d.ts.map +1 -0
  473. package/dist/settings/settings-section.schema.js +70 -0
  474. package/dist/settings/settings-section.schema.js.map +1 -0
  475. package/dist/storage/adapter.d.ts +11 -0
  476. package/dist/storage/adapter.d.ts.map +1 -0
  477. package/dist/storage/adapter.js +8 -0
  478. package/dist/storage/adapter.js.map +1 -0
  479. package/dist/storage/index.d.ts +8 -0
  480. package/dist/storage/index.d.ts.map +1 -0
  481. package/dist/storage/index.js +8 -0
  482. package/dist/storage/index.js.map +1 -0
  483. package/dist/storage/schemas.d.ts +257 -0
  484. package/dist/storage/schemas.d.ts.map +1 -0
  485. package/dist/storage/schemas.js +179 -0
  486. package/dist/storage/schemas.js.map +1 -0
  487. package/dist/storage/types.d.ts +74 -0
  488. package/dist/storage/types.d.ts.map +1 -0
  489. package/dist/storage/types.js +7 -0
  490. package/dist/storage/types.js.map +1 -0
  491. package/dist/system-constants.d.ts +95 -0
  492. package/dist/system-constants.d.ts.map +1 -0
  493. package/dist/system-constants.js +110 -0
  494. package/dist/system-constants.js.map +1 -0
  495. package/package.json +417 -0
  496. package/src/adapters/cli/flags.ts +260 -0
  497. package/src/adapters/cli/index.ts +24 -0
  498. package/src/adapters/cli/mappings.ts +43 -0
  499. package/src/adapters/cli/prompts.ts +70 -0
  500. package/src/adapters/cli/schemas/flags.schema.ts +8 -0
  501. package/src/adapters/cli/schemas/mappings.schema.ts +3 -0
  502. package/src/adapters/cli/schemas/prompts.schema.ts +4 -0
  503. package/src/adapters/cli/schemas/wizard.schema.ts +21 -0
  504. package/src/adapters/cli/wizard.ts +106 -0
  505. package/src/adapters/web/components/ManifestForm.svelte +817 -0
  506. package/src/browser/index.ts +86 -0
  507. package/src/cli/settings.descriptor.ts +23 -0
  508. package/src/cli/types.ts +59 -0
  509. package/src/client/index.ts +169 -0
  510. package/src/client/storage.ts +76 -0
  511. package/src/collection/collection.ts +121 -0
  512. package/src/collection/index.ts +6 -0
  513. package/src/common/index.ts +86 -0
  514. package/src/config.context.descriptor.ts +12 -0
  515. package/src/config.plugin.ts +214 -0
  516. package/src/crud/base-types.ts +10 -0
  517. package/src/crud/index.ts +15 -0
  518. package/src/crud/schemas/base-types.schema.ts +20 -0
  519. package/src/crud/schemas/shared.schema.ts +14 -0
  520. package/src/crud/shared.ts +8 -0
  521. package/src/crud/types.ts +299 -0
  522. package/src/docs/environment.docs.descriptor.ts +385 -0
  523. package/src/docs/manifests.docs.descriptor.ts +505 -0
  524. package/src/docs/validation.docs.descriptor.ts +443 -0
  525. package/src/doctor.ts +143 -0
  526. package/src/env.runtime.ts +49 -0
  527. package/src/env.ts +91 -0
  528. package/src/environment/current.ts +108 -0
  529. package/src/environment/environment.config.descriptor.ts +60 -0
  530. package/src/environment/environment.config.schema.ts +24 -0
  531. package/src/environment/environment.local.descriptor.ts +45 -0
  532. package/src/environment/environment.plugin.ts +31 -0
  533. package/src/environment/environment.production.descriptor.ts +40 -0
  534. package/src/environment/environment.staging.descriptor.ts +25 -0
  535. package/src/environment/index.ts +22 -0
  536. package/src/environment/kinds/environment.default.ts +57 -0
  537. package/src/environment/kinds/environment.interface.ts +10 -0
  538. package/src/environment/kinds/environment.kind.ts +69 -0
  539. package/src/environment/kinds/environment.schema.ts +57 -0
  540. package/src/environment/kinds/index.ts +8 -0
  541. package/src/environment/kinds/schemas/environment.interface.schema.ts +11 -0
  542. package/src/environment/kinds/schemas/environment.schema.ts +24 -0
  543. package/src/environment/schemas/current.schema.ts +21 -0
  544. package/src/environment/schemas/environment.config.schema.ts +3 -0
  545. package/src/extensions/index.ts +26 -0
  546. package/src/extensions/registry.ts +179 -0
  547. package/src/extensions/types.ts +123 -0
  548. package/src/form/core/field-resolver.ts +380 -0
  549. package/src/form/core/groups.ts +96 -0
  550. package/src/form/core/index.ts +41 -0
  551. package/src/form/core/nested-utils.ts +115 -0
  552. package/src/form/core/schemas/validation.schema.ts +9 -0
  553. package/src/form/core/types.ts +115 -0
  554. package/src/form/core/validation.ts +137 -0
  555. package/src/form/core/visibility.ts +172 -0
  556. package/src/form/index.ts +36 -0
  557. package/src/index.ts +69 -0
  558. package/src/js-yaml.d.ts +4 -0
  559. package/src/loader/cli/index.ts +386 -0
  560. package/src/loader/cli/loaders.ts +153 -0
  561. package/src/loader/cli/types.ts +181 -0
  562. package/src/loader/cli/utils.ts +236 -0
  563. package/src/loader/client.ts +140 -0
  564. package/src/loader/discovery.ts +291 -0
  565. package/src/loader/file-loader.ts +262 -0
  566. package/src/loader/index.server.ts +389 -0
  567. package/src/loader/index.ts +18 -0
  568. package/src/loader/merge.ts +366 -0
  569. package/src/loader/schemas/merge.schema.ts +8 -0
  570. package/src/loader/schemas/validation.schema.ts +18 -0
  571. package/src/loader/server.ts +15 -0
  572. package/src/loader/types.ts +142 -0
  573. package/src/loader/validation.ts +261 -0
  574. package/src/manifest/builder.ts +452 -0
  575. package/src/manifest/config-manifest.ts +482 -0
  576. package/src/manifest/index.ts +92 -0
  577. package/src/manifest/schema.ts +249 -0
  578. package/src/manifest/schemas/builder.schema.ts +33 -0
  579. package/src/manifest/schemas/config-manifest.schema.ts +1 -0
  580. package/src/manifest/schemas/schema.schema.ts +99 -0
  581. package/src/manifest/types.ts +726 -0
  582. package/src/routing/index.ts +105 -0
  583. package/src/routing/merge.ts +589 -0
  584. package/src/routing/registry.ts +595 -0
  585. package/src/routing/schemas/merge.schema.ts +6 -0
  586. package/src/routing/types.ts +470 -0
  587. package/src/schema/extend-zod.ts +289 -0
  588. package/src/schema/index.ts +44 -0
  589. package/src/schema/references.ts +21 -0
  590. package/src/schema/resolver.ts +343 -0
  591. package/src/schema/schemas/extend-zod.schema.ts +16 -0
  592. package/src/schema/schemas/references.schema.ts +86 -0
  593. package/src/schemas/collection.ts +38 -0
  594. package/src/schemas/config-manifest-descriptor.ts +259 -0
  595. package/src/schemas/config-registry-state.ts +13 -0
  596. package/src/schemas/doctor.schema.ts +27 -0
  597. package/src/schemas/index.ts +53 -0
  598. package/src/server/index.ts +4 -0
  599. package/src/services/config-accessor.ts +218 -0
  600. package/src/services/config-storage/index.ts +8 -0
  601. package/src/services/config-storage/service.ts +355 -0
  602. package/src/services/config.ts +37 -0
  603. package/src/services/encryption.ts +260 -0
  604. package/src/services/index.ts +34 -0
  605. package/src/services/loader/loader.descriptor.ts +96 -0
  606. package/src/services/loader/loader.impl.cloud.ts +214 -0
  607. package/src/services/loader/loader.impl.consumer.local-first.ts +417 -0
  608. package/src/services/loader/loader.impl.consumer.ts +213 -0
  609. package/src/services/manifest-utils.ts +119 -0
  610. package/src/services/schemas/config-accessor.schema.ts +11 -0
  611. package/src/services/schemas/encryption.schema.ts +23 -0
  612. package/src/services/schemas/manifest-utils.schema.ts +4 -0
  613. package/src/settings/assemble.ts +46 -0
  614. package/src/settings/index.ts +19 -0
  615. package/src/settings/settings-section.schema.ts +84 -0
  616. package/src/storage/adapter.ts +12 -0
  617. package/src/storage/index.ts +48 -0
  618. package/src/storage/schemas.ts +215 -0
  619. package/src/storage/types.ts +88 -0
  620. package/src/system-constants.ts +121 -0
@@ -0,0 +1,366 @@
1
+ /**
2
+ * Config Merge Utilities
3
+ *
4
+ * Deep merge configs with priority handling.
5
+ * Higher priority sources override lower priority ones.
6
+ *
7
+ * Supports graceful validation where invalid fields are discarded
8
+ * per-source, allowing valid fields from lower-priority sources
9
+ * to fill in gaps.
10
+ */
11
+
12
+ import type { z } from 'zod/v4';
13
+ import { type LoadedConfigSource, CONFIG_PRIORITIES } from './types.ts';
14
+ import {
15
+ validateGracefully,
16
+ formatValidationIssues,
17
+ type FieldValidationIssue
18
+ } from './validation.ts';
19
+
20
+ /**
21
+ * Check if value is a plain object (not array, null, Date, etc.)
22
+ */
23
+ function isPlainObject(value: unknown): value is Record<string, unknown> {
24
+ if (typeof value !== 'object' || value === null) return false;
25
+ if (Array.isArray(value)) return false;
26
+ if (value instanceof Date) return false;
27
+ if (value instanceof RegExp) return false;
28
+ if (value instanceof Map || value instanceof Set) return false;
29
+ return Object.getPrototypeOf(value) === Object.prototype;
30
+ }
31
+
32
+ /**
33
+ * Deep merge two objects
34
+ * Source values override target values.
35
+ * Both plain objects are merged recursively.
36
+ * Arrays are replaced, not merged.
37
+ */
38
+ export function deepMerge<T extends Record<string, unknown>>(target: T, source: Partial<T>): T {
39
+ const result = { ...target };
40
+
41
+ for (const key in source) {
42
+ const sourceValue = source[key];
43
+ const targetValue = result[key];
44
+
45
+ if (sourceValue === undefined) {
46
+ continue;
47
+ }
48
+
49
+ // Both are plain objects - merge recursively
50
+ if (isPlainObject(sourceValue) && isPlainObject(targetValue)) {
51
+ result[key] = deepMerge(
52
+ targetValue as Record<string, unknown>,
53
+ sourceValue as Record<string, unknown>
54
+ ) as T[Extract<keyof T, string>];
55
+ } else {
56
+ // Override with source value
57
+ result[key] = sourceValue as T[Extract<keyof T, string>];
58
+ }
59
+ }
60
+
61
+ return result;
62
+ }
63
+
64
+ /**
65
+ * Merge multiple config sources in priority order
66
+ *
67
+ * Sources with lower priority are merged first, so higher priority
68
+ * sources override them.
69
+ *
70
+ * @param sources - Array of loaded config sources
71
+ * @returns Merged config object
72
+ */
73
+ export function mergeConfigSources<T extends Record<string, unknown>>(
74
+ sources: LoadedConfigSource<T>[]
75
+ ): T {
76
+ // Sort by priority (lowest first)
77
+ const sorted = [...sources]
78
+ .filter((s) => s.loaded && s.data !== null && s.data !== undefined)
79
+ .sort((a, b) => a.priority - b.priority);
80
+
81
+ if (sorted.length === 0) {
82
+ return {} as T;
83
+ }
84
+
85
+ // Start with empty object and merge each source
86
+ let result = {} as T;
87
+ for (const source of sorted) {
88
+ if (isPlainObject(source.data)) {
89
+ result = deepMerge(result, source.data as Partial<T>);
90
+ } else {
91
+ // Non-object data - just use it directly
92
+ result = source.data;
93
+ }
94
+ }
95
+
96
+ return result;
97
+ }
98
+
99
+ /**
100
+ * Merge configs for record-type manifests
101
+ *
102
+ * For record manifests, we merge by record ID.
103
+ * Later sources can override or add records.
104
+ */
105
+ export function mergeRecordConfigs<T extends { id: string }>(
106
+ sources: LoadedConfigSource<Record<string, T> | T[]>[]
107
+ ): Record<string, T> {
108
+ const sorted = [...sources]
109
+ .filter((s) => s.loaded && s.data !== null && s.data !== undefined)
110
+ .sort((a, b) => a.priority - b.priority);
111
+
112
+ const result: Record<string, T> = {};
113
+
114
+ for (const source of sorted) {
115
+ const data = source.data;
116
+
117
+ if (Array.isArray(data)) {
118
+ // Array of records - merge by ID
119
+ for (const record of data) {
120
+ if (record && typeof record === 'object' && 'id' in record) {
121
+ const existing = result[record.id];
122
+ if (existing && isPlainObject(existing) && isPlainObject(record)) {
123
+ result[record.id] = deepMerge(existing, record) as T;
124
+ } else {
125
+ result[record.id] = record;
126
+ }
127
+ }
128
+ }
129
+ } else if (isPlainObject(data)) {
130
+ // Object keyed by ID
131
+ for (const [id, record] of Object.entries(data)) {
132
+ if (record && typeof record === 'object') {
133
+ const existing = result[id];
134
+ if (existing && isPlainObject(existing) && isPlainObject(record)) {
135
+ result[id] = deepMerge(existing, record as Partial<T>) as T;
136
+ } else {
137
+ result[id] = { ...record, id } as T;
138
+ }
139
+ }
140
+ }
141
+ }
142
+ }
143
+
144
+ return result;
145
+ }
146
+
147
+ /**
148
+ * Create a defaults source from schema defaults or provided defaults
149
+ * Accepts Partial<T> since defaults don't need to be complete
150
+ */
151
+ export function createDefaultsSource<T>(defaults: Partial<T>): LoadedConfigSource<T> {
152
+ return {
153
+ source: 'defaults',
154
+ scope: 'defaults',
155
+ priority: CONFIG_PRIORITIES.DEFAULTS,
156
+ data: defaults as T, // Defaults are merged with other sources
157
+ loaded: true
158
+ };
159
+ }
160
+
161
+ /**
162
+ * Create a storage source from adapter data
163
+ */
164
+ export function createStorageSource<T>(data: T | null): LoadedConfigSource<T> | null {
165
+ if (data === null || data === undefined) {
166
+ return null;
167
+ }
168
+
169
+ return {
170
+ source: 'storage',
171
+ scope: 'storage',
172
+ priority: CONFIG_PRIORITIES.STORAGE,
173
+ data,
174
+ loaded: true
175
+ };
176
+ }
177
+
178
+ // Validated Merge Functions
179
+
180
+ import type { ValidatedMergeResult } from './schemas/merge.schema.ts';
181
+
182
+ export type { ValidatedMergeResult } from './schemas/merge.schema.ts';
183
+
184
+ /**
185
+ * Merge config sources with per-field validation.
186
+ *
187
+ * Each source's data is validated field-by-field against the schema.
188
+ * Invalid fields are discarded, allowing valid fields from lower-priority
189
+ * sources to be used instead.
190
+ *
191
+ * @example
192
+ * ```ts
193
+ * // Project config has invalid toolApprovalMode
194
+ * const projectSource = { data: { name: 'Dev', toolApprovalMode: 'invalid' }, priority: 3 };
195
+ * // User config has valid toolApprovalMode
196
+ * const userSource = { data: { toolApprovalMode: 'auto-approve-safe' }, priority: 1 };
197
+ *
198
+ * const result = mergeConfigSourcesWithValidation([projectSource, userSource], schema);
199
+ * // result.data = { name: 'Dev', toolApprovalMode: 'auto-approve-safe' }
200
+ * // result.issues = Map { 'project' => [{ path: ['toolApprovalMode'], ... }] }
201
+ * ```
202
+ */
203
+ export function mergeConfigSourcesWithValidation<T extends Record<string, unknown>>(
204
+ sources: LoadedConfigSource<T>[],
205
+ schema: z.ZodType<T>,
206
+ options?: {
207
+ /** Whether to log validation issues */
208
+ logIssues?: boolean;
209
+ /** Custom logger */
210
+ logger?: (message: string) => void;
211
+ }
212
+ ): ValidatedMergeResult<T> {
213
+ const { logIssues = false, logger = console.warn } = options ?? {};
214
+
215
+ // Sort by priority (lowest first - will be overridden by higher)
216
+ const sorted = [...sources]
217
+ .filter((s) => s.loaded && s.data !== null && s.data !== undefined)
218
+ .sort((a, b) => a.priority - b.priority);
219
+
220
+ if (sorted.length === 0) {
221
+ return {
222
+ data: {} as T,
223
+ issues: new Map(),
224
+ hasIssues: false,
225
+ contributingSources: []
226
+ };
227
+ }
228
+
229
+ const allIssues = new Map<string, FieldValidationIssue[]>();
230
+ const contributingSources: string[] = [];
231
+
232
+ // Validate and merge each source
233
+ let result = {} as T;
234
+ for (const source of sorted) {
235
+ if (!isPlainObject(source.data)) {
236
+ // Non-object data - validate whole thing
237
+ const validation = validateGracefully(schema, source.data);
238
+ if (validation.hasIssues) {
239
+ allIssues.set(source.source, validation.issues);
240
+ if (logIssues) {
241
+ logger(formatValidationIssues(validation.issues, source.source));
242
+ }
243
+ }
244
+ if (Object.keys(validation.valid).length > 0) {
245
+ result = validation.valid as T;
246
+ contributingSources.push(source.source);
247
+ }
248
+ continue;
249
+ }
250
+
251
+ // Validate per-field
252
+ const validation = validateGracefully(schema, source.data);
253
+
254
+ if (validation.hasIssues) {
255
+ allIssues.set(source.source, validation.issues);
256
+ if (logIssues) {
257
+ logger(formatValidationIssues(validation.issues, source.source));
258
+ }
259
+ }
260
+
261
+ // Merge valid fields (higher priority overrides lower)
262
+ if (Object.keys(validation.valid).length > 0) {
263
+ result = deepMerge(result, validation.valid as Partial<T>);
264
+ contributingSources.push(source.source);
265
+ }
266
+ }
267
+
268
+ return {
269
+ data: result,
270
+ issues: allIssues,
271
+ hasIssues: allIssues.size > 0,
272
+ contributingSources
273
+ };
274
+ }
275
+
276
+ /**
277
+ * Merge record configs with per-record, per-field validation.
278
+ *
279
+ * Each record in each source is validated field-by-field.
280
+ * Invalid fields are discarded, allowing valid fields from
281
+ * lower-priority sources to fill in.
282
+ */
283
+ export function mergeRecordConfigsWithValidation<T extends { id: string }>(
284
+ sources: LoadedConfigSource<Record<string, T> | T[]>[],
285
+ recordSchema: z.ZodType<T>,
286
+ options?: {
287
+ logIssues?: boolean;
288
+ logger?: (message: string) => void;
289
+ }
290
+ ): ValidatedMergeResult<Record<string, T>> {
291
+ const { logIssues = false, logger = console.warn } = options ?? {};
292
+
293
+ const sorted = [...sources]
294
+ .filter((s) => s.loaded && s.data !== null && s.data !== undefined)
295
+ .sort((a, b) => a.priority - b.priority);
296
+
297
+ const result: Record<string, Partial<T>> = {};
298
+ const allIssues = new Map<string, FieldValidationIssue[]>();
299
+ const contributingSources: string[] = [];
300
+
301
+ for (const source of sorted) {
302
+ const data = source.data;
303
+ const sourceIssues: FieldValidationIssue[] = [];
304
+ let contributed = false;
305
+
306
+ // Normalize to record format
307
+ let records: Record<string, unknown>;
308
+ if (Array.isArray(data)) {
309
+ records = {};
310
+ for (const item of data) {
311
+ if (item && typeof item === 'object' && 'id' in item) {
312
+ records[(item as { id: string }).id] = item;
313
+ }
314
+ }
315
+ } else if (isPlainObject(data)) {
316
+ records = data;
317
+ } else {
318
+ continue;
319
+ }
320
+
321
+ // Validate and merge each record
322
+ for (const [id, record] of Object.entries(records)) {
323
+ if (!record || typeof record !== 'object') continue;
324
+
325
+ const validation = validateGracefully(recordSchema, record);
326
+
327
+ if (validation.hasIssues) {
328
+ // Prefix issues with record ID
329
+ sourceIssues.push(
330
+ ...validation.issues.map((issue) => ({
331
+ ...issue,
332
+ path: [id, ...issue.path]
333
+ }))
334
+ );
335
+ }
336
+
337
+ // Merge valid fields into this record
338
+ if (Object.keys(validation.valid).length > 0) {
339
+ const existing = result[id] ?? {};
340
+ result[id] = deepMerge(
341
+ existing as Record<string, unknown>,
342
+ { ...validation.valid, id } as Record<string, unknown>
343
+ ) as Partial<T>;
344
+ contributed = true;
345
+ }
346
+ }
347
+
348
+ if (sourceIssues.length > 0) {
349
+ allIssues.set(source.source, sourceIssues);
350
+ if (logIssues) {
351
+ logger(formatValidationIssues(sourceIssues, source.source));
352
+ }
353
+ }
354
+
355
+ if (contributed) {
356
+ contributingSources.push(source.source);
357
+ }
358
+ }
359
+
360
+ return {
361
+ data: result as Record<string, T>,
362
+ issues: allIssues,
363
+ hasIssues: allIssues.size > 0,
364
+ contributingSources
365
+ };
366
+ }
@@ -0,0 +1,8 @@
1
+ import type { FieldValidationIssue } from './validation.schema.ts';
2
+
3
+ export interface ValidatedMergeResult<T> {
4
+ data: T;
5
+ issues: Map<string, FieldValidationIssue[]>;
6
+ hasIssues: boolean;
7
+ contributingSources: string[];
8
+ }
@@ -0,0 +1,18 @@
1
+ export interface FieldValidationIssue {
2
+ path: (string | number)[];
3
+ message: string;
4
+ invalidValue?: unknown;
5
+ expected?: string;
6
+ }
7
+
8
+ export interface FieldValidationResult<T> {
9
+ valid: Partial<T>;
10
+ issues: FieldValidationIssue[];
11
+ hasIssues: boolean;
12
+ }
13
+
14
+ export interface RecordValidationResult<T> {
15
+ valid: Record<string, Partial<T>>;
16
+ issues: Map<string, FieldValidationIssue[]>;
17
+ hasIssues: boolean;
18
+ }
@@ -0,0 +1,15 @@
1
+ export type {
2
+ ConfigLoadResult as ServerConfigLoadResult,
3
+ DiscoveredConfigFile,
4
+ DiscoveryOptions,
5
+ LoadOptions as ServerLoadOptions,
6
+ LoadedConfigSource as ServerLoadedConfigSource
7
+ } from './index.server.ts';
8
+ export {
9
+ loadConfigFromManifest as serverLoadConfigFromManifest,
10
+ loadRecordConfigFromManifest as serverLoadRecordConfigFromManifest,
11
+ hasConfigFiles,
12
+ getConfigLoadDebugInfo,
13
+ discoverConfigFiles,
14
+ loadConfigFromPath
15
+ } from './index.server.ts';
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Config File Loader Types
3
+ *
4
+ * Types for the multi-source config file loading system.
5
+ */
6
+
7
+ import type { ConfigManifest } from '../manifest/types.ts';
8
+
9
+ /**
10
+ * Supported config file formats
11
+ */
12
+ export type ConfigFileFormat = 'ts' | 'js' | 'json' | 'jsonc' | 'yaml';
13
+
14
+ /**
15
+ * Config file scope (determines search paths)
16
+ */
17
+ export type ConfigFileScope = 'global' | 'local' | 'project';
18
+
19
+ /**
20
+ * Priority levels for config sources
21
+ * Higher number = higher priority (wins in merge)
22
+ */
23
+ export const CONFIG_PRIORITIES = {
24
+ /** Schema defaults */
25
+ DEFAULTS: 0,
26
+ /** Global: ~/.vibes/{namespace}.* */
27
+ GLOBAL: 1,
28
+ /** Local: ./.vibes/{namespace}.* */
29
+ LOCAL: 2,
30
+ /** Project: ./vibes.{namespace}.* */
31
+ PROJECT: 3,
32
+ /** Storage adapter (localdb/json) - user edits */
33
+ STORAGE: 4,
34
+ /** CLI overrides */
35
+ CLI: 5
36
+ } as const;
37
+
38
+ export type ConfigPriority = (typeof CONFIG_PRIORITIES)[keyof typeof CONFIG_PRIORITIES];
39
+
40
+ /**
41
+ * A discovered config file
42
+ */
43
+ export interface DiscoveredConfigFile {
44
+ /** Absolute path to the file */
45
+ path: string;
46
+ /** File format */
47
+ format: ConfigFileFormat;
48
+ /** Scope this file belongs to */
49
+ scope: ConfigFileScope;
50
+ /** Priority for merging */
51
+ priority: ConfigPriority;
52
+ /** Whether the file exists */
53
+ exists: boolean;
54
+ }
55
+
56
+ /**
57
+ * A loaded config source
58
+ */
59
+ export interface LoadedConfigSource<T = unknown> {
60
+ /** Source identifier (file path or 'storage' or 'defaults') */
61
+ source: string;
62
+ /** Scope */
63
+ scope: ConfigFileScope | 'storage' | 'defaults';
64
+ /** Priority used for merging */
65
+ priority: ConfigPriority;
66
+ /** The loaded data */
67
+ data: T;
68
+ /** Format that was loaded */
69
+ format?: ConfigFileFormat;
70
+ /** Whether this source was successfully loaded */
71
+ loaded: boolean;
72
+ /** Error if loading failed */
73
+ error?: string;
74
+ }
75
+
76
+ /**
77
+ * Result of loading config from all sources
78
+ */
79
+ export interface ConfigLoadResult<T = unknown> {
80
+ /** Merged configuration data */
81
+ data: T;
82
+ /** All sources that were checked/loaded */
83
+ sources: LoadedConfigSource<T>[];
84
+ /** Sources that were successfully loaded and merged */
85
+ mergedSources: LoadedConfigSource<T>[];
86
+ /** Whether any file sources were found */
87
+ hasFileSources: boolean;
88
+ /** Whether storage had data */
89
+ hasStorageData: boolean;
90
+ /** Validation issues found when using graceful validation (by source) */
91
+ validationIssues?: Map<string, { path: (string | number)[]; message: string }[]>;
92
+ }
93
+
94
+ /**
95
+ * Options for discovering config files
96
+ */
97
+ export interface DiscoveryOptions {
98
+ /** Namespace for the config (e.g., 'autoloop', 'ai', 'pm') */
99
+ namespace: string;
100
+ /** Scopes to search */
101
+ scopes?: ConfigFileScope[];
102
+ /** Custom patterns to search (in addition to defaults) */
103
+ patterns?: string[];
104
+ /** Fallback patterns if primary not found */
105
+ fallbackPatterns?: string[];
106
+ /** Working directory (defaults to process.cwd()) */
107
+ cwd?: string;
108
+ }
109
+
110
+ /**
111
+ * Options for loading config
112
+ */
113
+ export interface LoadOptions<T = unknown> {
114
+ /** The manifest to load config for */
115
+ manifest: ConfigManifest;
116
+ /** Working directory */
117
+ cwd?: string;
118
+ /** Whether to include storage adapter data */
119
+ includeStorage?: boolean;
120
+ /** Whether to include defaults */
121
+ includeDefaults?: boolean;
122
+ /** Custom default values */
123
+ defaults?: Partial<T>;
124
+ /** Storage adapter to use (if not using manifest's storage config) */
125
+ storageAdapter?: {
126
+ load(): Promise<T | null>;
127
+ };
128
+ /**
129
+ * Enable graceful per-field validation.
130
+ * Invalid fields are discarded instead of failing the entire load.
131
+ * This allows valid fields from lower-priority sources to fill in.
132
+ */
133
+ validateGracefully?: boolean;
134
+ /**
135
+ * Callback when validation issues are found.
136
+ * Called with the source name and list of issues.
137
+ */
138
+ onValidationIssues?: (
139
+ source: string,
140
+ issues: { path: (string | number)[]; message: string }[]
141
+ ) => void;
142
+ }