@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,417 @@
1
+ /**
2
+ * Config Loader - Local-First Implementation
3
+ *
4
+ * Hybrid configuration loading using runtime-composed strategy.
5
+ * Implements local-first policy through runtime resolution, not internal branching.
6
+ *
7
+ * Scope: { hardware: ['consumer'], qualifiers: { storage: 'local-first' }}
8
+ *
9
+ * This replaces the syncDirection branching in UnifiedConfigLoader with a pure
10
+ * runtime-composed approach. The cloud client is resolved via runtime.query when needed.
11
+ */
12
+
13
+ import { createRuntimeImplementation, getVibesRuntime } from '@vibesdotdev/runtime';
14
+ import type { ConfigManifest } from '../../manifest/types.ts';
15
+ import type { VibesRuntime } from '@vibesdotdev/runtime';
16
+ import type { ConfigLoaderInterface, LoadResult, SaveResult } from './loader.descriptor.ts';
17
+ import type { StorageDocumentStoreInterface } from '@vibesdotdev/storage/interfaces';
18
+ import * as z from 'zod/v4';
19
+
20
+ /** Local storage adapter interface */
21
+ interface LocalConfigStorageAdapter<T> {
22
+ load(): Promise<T | null>;
23
+ save(data: T): Promise<void>;
24
+ exists(): Promise<boolean>;
25
+ delete(): Promise<void>;
26
+ }
27
+
28
+ /** Deferred LocalDB adapter - loads the real adapter dynamically */
29
+ function createDeferredLocalDBAdapter<T>(options: {
30
+ scope: 'project' | 'global';
31
+ namespace: string;
32
+ encrypt?: boolean;
33
+ }): LocalConfigStorageAdapter<T> {
34
+ let docStore: StorageDocumentStoreInterface<T> | null = null;
35
+
36
+ async function getDocStore(): Promise<StorageDocumentStoreInterface<T>> {
37
+ if (!docStore) {
38
+ interface AdapterModule {
39
+ default: {
40
+ impl: {
41
+ configure(config: { basePath: string }): void;
42
+ documentStore<U>(
43
+ namespace: string,
44
+ schema: z.ZodType<U>
45
+ ): StorageDocumentStoreInterface<U>;
46
+ };
47
+ };
48
+ }
49
+ const modulePath = '@vibesdotdev/storage-adapter-localdb/localdb.adapter.impl';
50
+ const { default: implementation } = (await import(
51
+ /* @vite-ignore */ modulePath
52
+ )) as AdapterModule;
53
+ const adapter = implementation.impl;
54
+
55
+ const basePath =
56
+ options.scope === 'project'
57
+ ? `${process.cwd()}/.vibes`
58
+ : `${process.env.HOME ?? '~'}/.vibes`;
59
+
60
+ adapter.configure({ basePath });
61
+
62
+ docStore = adapter.documentStore<T>(options.namespace, z.unknown() as z.ZodType<T>);
63
+ }
64
+ return docStore;
65
+ }
66
+
67
+ return {
68
+ async load(): Promise<T | null> {
69
+ const store = await getDocStore();
70
+ return store.load();
71
+ },
72
+ async save(data: T): Promise<void> {
73
+ const store = await getDocStore();
74
+ return store.save(data);
75
+ },
76
+ async exists(): Promise<boolean> {
77
+ const store = await getDocStore();
78
+ return store.exists();
79
+ },
80
+ async delete(): Promise<void> {
81
+ const store = await getDocStore();
82
+ return store.delete();
83
+ }
84
+ };
85
+ }
86
+
87
+ /** Cloud client interface - resolved from runtime */
88
+ interface CloudSettingsClient {
89
+ get<T>(namespace: string): Promise<T | null>;
90
+ set<T>(namespace: string, data: T): Promise<void>;
91
+ delete(namespace: string): Promise<void>;
92
+ }
93
+
94
+ /** Create a fetch-based cloud settings client */
95
+ function createFetchCloudClient(options: {
96
+ baseUrl: string;
97
+ getAuthToken: () => Promise<string | null>;
98
+ }): CloudSettingsClient {
99
+ const { baseUrl, getAuthToken } = options;
100
+
101
+ return {
102
+ async get<T>(namespace: string): Promise<T | null> {
103
+ const token = await getAuthToken();
104
+ if (!token) return null;
105
+
106
+ const res = await fetch(`${baseUrl}/api/settings/${encodeURIComponent(namespace)}`, {
107
+ headers: { Authorization: `Bearer ${token}` }
108
+ });
109
+
110
+ if (!res.ok) return null;
111
+ return res.json() as Promise<T>;
112
+ },
113
+
114
+ async set<T>(namespace: string, data: T): Promise<void> {
115
+ const token = await getAuthToken();
116
+ if (!token) throw new Error('Not authenticated');
117
+
118
+ await fetch(`${baseUrl}/api/settings/${encodeURIComponent(namespace)}`, {
119
+ method: 'PUT',
120
+ headers: {
121
+ 'Content-Type': 'application/json',
122
+ Authorization: `Bearer ${token}`
123
+ },
124
+ body: JSON.stringify(data)
125
+ });
126
+ },
127
+
128
+ async delete(namespace: string): Promise<void> {
129
+ const token = await getAuthToken();
130
+ if (!token) throw new Error('Not authenticated');
131
+
132
+ await fetch(`${baseUrl}/api/settings/${encodeURIComponent(namespace)}`, {
133
+ method: 'DELETE',
134
+ headers: { Authorization: `Bearer ${token}` }
135
+ });
136
+ }
137
+ };
138
+ }
139
+
140
+ /**
141
+ * Local-First Config Loader
142
+ *
143
+ * Hybrid implementation that composes local and cloud storage through runtime.
144
+ * No internal branching - cloud client is resolved via runtime.query.
145
+ *
146
+ * Load strategy: local first, then cloud (with optional caching)
147
+ * Save strategy: local always, cloud when authenticated
148
+ */
149
+ export class LocalFirstConfigLoader implements ConfigLoaderInterface {
150
+ private runtime: VibesRuntime;
151
+ private localAdapters = new Map<string, LocalConfigStorageAdapter<unknown>>();
152
+
153
+ constructor() {
154
+ this.runtime = getVibesRuntime();
155
+ }
156
+
157
+ /**
158
+ * Resolve cloud client from runtime when needed
159
+ * Returns null if cloud is not available (not authenticated)
160
+ */
161
+ private async resolveCloudClient(): Promise<CloudSettingsClient | null> {
162
+ try {
163
+ // Query runtime for cloud storage adapter
164
+ const cloudAdapter = await this.runtime
165
+ .query('storage/adapter')
166
+ .matching({
167
+ qualifiers: { type: 'cloud', purpose: 'settings' }
168
+ })
169
+ .resolve();
170
+
171
+ if (cloudAdapter && typeof cloudAdapter === 'object') {
172
+ // Check if it has document store capabilities
173
+ if ('documentStore' in cloudAdapter) {
174
+ return this.wrapAdapterAsCloudClient(cloudAdapter);
175
+ }
176
+ }
177
+
178
+ // Fallback: try to resolve from context/config
179
+ try {
180
+ const configContext = await this.runtime.context<{
181
+ cloudBaseUrl?: string;
182
+ getAuthToken?: () => Promise<string | null>;
183
+ }>('config');
184
+ if (configContext && typeof configContext === 'object') {
185
+ const baseUrl = configContext.cloudBaseUrl;
186
+ const getAuthToken = configContext.getAuthToken;
187
+ if (baseUrl && getAuthToken) {
188
+ return createFetchCloudClient({ baseUrl, getAuthToken });
189
+ }
190
+ }
191
+ } catch {
192
+ // Config context not available
193
+ }
194
+ } catch {
195
+ // Cloud not available
196
+ }
197
+
198
+ return null;
199
+ }
200
+
201
+ /**
202
+ * Wrap a storage adapter as cloud client interface
203
+ */
204
+ private wrapAdapterAsCloudClient(adapter: object): CloudSettingsClient {
205
+ return {
206
+ async get<T>(namespace: string): Promise<T | null> {
207
+ // The adapter already has namespace baked in via documentStore()
208
+ const store = (adapter as { load?: () => Promise<T | null> }).load;
209
+ if (store) {
210
+ return store.call(adapter);
211
+ }
212
+ return null;
213
+ },
214
+ async set<T>(namespace: string, data: T): Promise<void> {
215
+ const save = (adapter as { save?: (data: T) => Promise<void> }).save;
216
+ if (save) {
217
+ return save.call(adapter, data);
218
+ }
219
+ },
220
+ async delete(namespace: string): Promise<void> {
221
+ const del = (adapter as { delete?: () => Promise<void> }).delete;
222
+ if (del) {
223
+ return del.call(adapter);
224
+ }
225
+ }
226
+ };
227
+ }
228
+
229
+ /**
230
+ * Load configuration: local first, then cloud
231
+ */
232
+ async load<T>(manifest: ConfigManifest): Promise<LoadResult<T>> {
233
+ const namespace = manifest.storage.namespace;
234
+
235
+ try {
236
+ // Step 1: Try local first
237
+ const localAdapter = this.getLocalAdapter<T>(namespace, manifest);
238
+ const localData = await localAdapter.load();
239
+
240
+ if (localData !== null) {
241
+ return {
242
+ data: localData,
243
+ source: 'local',
244
+ inSync: true,
245
+ lastSyncedAt: null
246
+ };
247
+ }
248
+
249
+ // Step 2: Local empty, try cloud (resolved via runtime)
250
+ const cloudClient = await this.resolveCloudClient();
251
+ if (cloudClient) {
252
+ const cloudData = await cloudClient.get<T>(namespace);
253
+ if (cloudData !== null) {
254
+ // Cache to local for future loads
255
+ await localAdapter.save(cloudData);
256
+ return {
257
+ data: cloudData,
258
+ source: 'cloud',
259
+ inSync: true,
260
+ lastSyncedAt: new Date()
261
+ };
262
+ }
263
+ }
264
+
265
+ // Step 3: Neither has data
266
+ return {
267
+ data: null,
268
+ source: 'default',
269
+ inSync: true,
270
+ lastSyncedAt: null
271
+ };
272
+ } catch (error) {
273
+ return {
274
+ data: null,
275
+ source: 'default',
276
+ inSync: false,
277
+ lastSyncedAt: null,
278
+ syncError: error instanceof Error ? error.message : 'Load failed'
279
+ };
280
+ }
281
+ }
282
+
283
+ /**
284
+ * Save configuration: local always, cloud when available
285
+ */
286
+ async save<T>(manifest: ConfigManifest, data: T): Promise<SaveResult> {
287
+ const namespace = manifest.storage.namespace;
288
+
289
+ try {
290
+ // Step 1: Save to local
291
+ const localAdapter = this.getLocalAdapter<T>(namespace, manifest);
292
+ await localAdapter.save(data);
293
+
294
+ // Step 2: Try to sync to cloud (resolved via runtime)
295
+ const cloudClient = await this.resolveCloudClient();
296
+ if (cloudClient) {
297
+ await cloudClient.set(namespace, data);
298
+ return {
299
+ success: true,
300
+ direction: 'push',
301
+ changesApplied: 1
302
+ };
303
+ }
304
+
305
+ // No cloud available, local-only save
306
+ return {
307
+ success: true,
308
+ direction: 'none',
309
+ changesApplied: 1
310
+ };
311
+ } catch (error) {
312
+ return {
313
+ success: false,
314
+ direction: 'none',
315
+ changesApplied: 0,
316
+ error: error instanceof Error ? error.message : 'Save failed'
317
+ };
318
+ }
319
+ }
320
+
321
+ /**
322
+ * Sync between local and cloud
323
+ */
324
+ async sync(
325
+ manifest: ConfigManifest,
326
+ direction: 'push' | 'pull' | 'auto' = 'auto'
327
+ ): Promise<SaveResult> {
328
+ const namespace = manifest.storage.namespace;
329
+
330
+ try {
331
+ const localAdapter = this.getLocalAdapter<unknown>(namespace, manifest);
332
+ const cloudClient = await this.resolveCloudClient();
333
+
334
+ if (!cloudClient) {
335
+ return {
336
+ success: true,
337
+ direction: 'none',
338
+ changesApplied: 0
339
+ };
340
+ }
341
+
342
+ const localData = await localAdapter.load();
343
+ const cloudData = await cloudClient.get(namespace);
344
+
345
+ // Determine actual direction
346
+ let actualDirection = direction;
347
+ if (direction === 'auto') {
348
+ // Prefer local if it exists (CLI edits take precedence)
349
+ actualDirection = localData !== null ? 'push' : 'pull';
350
+ }
351
+
352
+ if (actualDirection === 'push' && localData !== null) {
353
+ await cloudClient.set(namespace, localData);
354
+ return {
355
+ success: true,
356
+ direction: 'push',
357
+ changesApplied: 1
358
+ };
359
+ } else if (actualDirection === 'pull' && cloudData !== null) {
360
+ await localAdapter.save(cloudData);
361
+ return {
362
+ success: true,
363
+ direction: 'pull',
364
+ changesApplied: 1
365
+ };
366
+ }
367
+
368
+ return {
369
+ success: true,
370
+ direction: 'none',
371
+ changesApplied: 0
372
+ };
373
+ } catch (error) {
374
+ return {
375
+ success: false,
376
+ direction: 'none',
377
+ changesApplied: 0,
378
+ error: error instanceof Error ? error.message : 'Sync failed'
379
+ };
380
+ }
381
+ }
382
+
383
+ // Private helpers
384
+
385
+ private getLocalAdapter<T>(
386
+ namespace: string,
387
+ manifest: ConfigManifest
388
+ ): LocalConfigStorageAdapter<T> {
389
+ let adapter = this.localAdapters.get(namespace);
390
+ if (!adapter) {
391
+ adapter = createDeferredLocalDBAdapter({
392
+ scope: manifest.storage.scope === 'project' ? 'project' : 'global',
393
+ namespace,
394
+ encrypt: manifest.storage.encryptSensitive
395
+ });
396
+ this.localAdapters.set(namespace, adapter);
397
+ }
398
+ return adapter as LocalConfigStorageAdapter<T>;
399
+ }
400
+ }
401
+
402
+ /**
403
+ * Runtime implementation registration
404
+ *
405
+ * Scope: consumer hardware with local-first storage qualifier.
406
+ * No syncDirection parameter - the qualifier encodes the policy.
407
+ * Cloud resolved through runtime.query, not internal composition.
408
+ */
409
+ export default createRuntimeImplementation({
410
+ kind: 'config/loader',
411
+ id: 'config.loader.local-first',
412
+ implementation: LocalFirstConfigLoader,
413
+ constraint: {
414
+ hardware: ['consumer'],
415
+ qualifiers: { storage: 'local-first' }
416
+ }
417
+ });
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Config Loader - Consumer Implementation
3
+ *
4
+ * Local-only configuration loading using LocalDB storage.
5
+ * Single-purpose: handles local persistence only, no cloud logic.
6
+ *
7
+ * Scope: { hardware: ['consumer'], qualifiers: { storage: 'local' }}
8
+ *
9
+ * This replaces the branching logic in UnifiedConfigLoader with a pure
10
+ * runtime-selected implementation.
11
+ */
12
+
13
+ import { createRuntimeImplementation } from '@vibesdotdev/runtime';
14
+ import type { ConfigManifest } from '../../manifest/types.ts';
15
+ import type { StorageDocumentStoreInterface } from '@vibesdotdev/storage/interfaces';
16
+ import * as z from 'zod/v4';
17
+ import type { ConfigLoaderInterface, LoadResult, SaveResult } from './loader.descriptor.ts';
18
+
19
+ /** Simple local storage adapter interface */
20
+ interface LocalConfigStorageAdapter<T> {
21
+ load(): Promise<T | null>;
22
+ save(data: T): Promise<void>;
23
+ exists(): Promise<boolean>;
24
+ delete(): Promise<void>;
25
+ }
26
+
27
+ /** Deferred LocalDB adapter - loads the real adapter dynamically */
28
+ function createDeferredLocalDBAdapter<T>(options: {
29
+ scope: 'project' | 'global';
30
+ namespace: string;
31
+ encrypt?: boolean;
32
+ }): LocalConfigStorageAdapter<T> {
33
+ let docStore: StorageDocumentStoreInterface<T> | null = null;
34
+
35
+ async function getDocStore(): Promise<StorageDocumentStoreInterface<T>> {
36
+ if (!docStore) {
37
+ interface AdapterModule {
38
+ default: {
39
+ impl: {
40
+ configure(config: { basePath: string }): void;
41
+ documentStore<U>(
42
+ namespace: string,
43
+ schema: z.ZodType<U>
44
+ ): StorageDocumentStoreInterface<U>;
45
+ };
46
+ };
47
+ }
48
+ const modulePath = '@vibesdotdev/storage-adapter-localdb/localdb.adapter.impl';
49
+ const { default: implementation } = (await import(
50
+ /* @vite-ignore */ modulePath
51
+ )) as AdapterModule;
52
+ const adapter = implementation.impl;
53
+
54
+ const basePath =
55
+ options.scope === 'project'
56
+ ? `${process.cwd()}/.vibes`
57
+ : `${process.env.HOME ?? '~'}/.vibes`;
58
+
59
+ adapter.configure({ basePath });
60
+
61
+ docStore = adapter.documentStore<T>(options.namespace, z.unknown() as z.ZodType<T>);
62
+ }
63
+ return docStore;
64
+ }
65
+
66
+ return {
67
+ async load(): Promise<T | null> {
68
+ const store = await getDocStore();
69
+ return store.load();
70
+ },
71
+ async save(data: T): Promise<void> {
72
+ const store = await getDocStore();
73
+ return store.save(data);
74
+ },
75
+ async exists(): Promise<boolean> {
76
+ const store = await getDocStore();
77
+ return store.exists();
78
+ },
79
+ async delete(): Promise<void> {
80
+ const store = await getDocStore();
81
+ return store.delete();
82
+ }
83
+ };
84
+ }
85
+
86
+ /**
87
+ * Local Config Loader
88
+ *
89
+ * Single-purpose implementation for local-only configuration.
90
+ * No cloud dependencies. No syncDirection. No branching logic.
91
+ */
92
+ export class LocalConfigLoader implements ConfigLoaderInterface {
93
+ private adapters = new Map<string, LocalConfigStorageAdapter<unknown>>();
94
+
95
+ /**
96
+ * Load configuration from local storage only
97
+ */
98
+ async load<T>(manifest: ConfigManifest): Promise<LoadResult<T>> {
99
+ const namespace = manifest.storage.namespace;
100
+
101
+ try {
102
+ const adapter = this.getAdapter<T>(namespace, manifest);
103
+ const data = await adapter.load();
104
+
105
+ return {
106
+ data,
107
+ source: data !== null ? 'local' : 'default',
108
+ inSync: true,
109
+ lastSyncedAt: null
110
+ };
111
+ } catch (error) {
112
+ return {
113
+ data: null,
114
+ source: 'default',
115
+ inSync: false,
116
+ lastSyncedAt: null,
117
+ syncError: error instanceof Error ? error.message : 'Load failed'
118
+ };
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Save configuration to local storage only
124
+ */
125
+ async save<T>(manifest: ConfigManifest, data: T): Promise<SaveResult> {
126
+ const namespace = manifest.storage.namespace;
127
+
128
+ try {
129
+ const adapter = this.getAdapter<T>(namespace, manifest);
130
+ await adapter.save(data);
131
+
132
+ return {
133
+ success: true,
134
+ direction: 'none',
135
+ changesApplied: 1
136
+ };
137
+ } catch (error) {
138
+ return {
139
+ success: false,
140
+ direction: 'none',
141
+ changesApplied: 0,
142
+ error: error instanceof Error ? error.message : 'Save failed'
143
+ };
144
+ }
145
+ }
146
+
147
+ /**
148
+ * Delete configuration from local storage
149
+ */
150
+ async delete(manifest: ConfigManifest): Promise<SaveResult> {
151
+ const namespace = manifest.storage.namespace;
152
+
153
+ try {
154
+ const adapter = this.getAdapter<unknown>(namespace, manifest);
155
+ await adapter.delete();
156
+
157
+ this.adapters.delete(namespace);
158
+
159
+ return {
160
+ success: true,
161
+ direction: 'none',
162
+ changesApplied: 1
163
+ };
164
+ } catch (error) {
165
+ return {
166
+ success: false,
167
+ direction: 'none',
168
+ changesApplied: 0,
169
+ error: error instanceof Error ? error.message : 'Delete failed'
170
+ };
171
+ }
172
+ }
173
+
174
+ /**
175
+ * Check if configuration exists locally
176
+ */
177
+ async exists(manifest: ConfigManifest): Promise<boolean> {
178
+ const namespace = manifest.storage.namespace;
179
+ const adapter = this.getAdapter<unknown>(namespace, manifest);
180
+ return adapter.exists();
181
+ }
182
+
183
+ // Private helpers
184
+
185
+ private getAdapter<T>(namespace: string, manifest: ConfigManifest): LocalConfigStorageAdapter<T> {
186
+ let adapter = this.adapters.get(namespace);
187
+ if (!adapter) {
188
+ adapter = createDeferredLocalDBAdapter({
189
+ scope: manifest.storage.scope === 'project' ? 'project' : 'global',
190
+ namespace,
191
+ encrypt: manifest.storage.encryptSensitive
192
+ });
193
+ this.adapters.set(namespace, adapter);
194
+ }
195
+ return adapter as LocalConfigStorageAdapter<T>;
196
+ }
197
+ }
198
+
199
+ /**
200
+ * Runtime implementation registration
201
+ *
202
+ * Scope: consumer hardware with local storage qualifier.
203
+ * No syncDirection. No cloud dependencies. Single-purpose.
204
+ */
205
+ export default createRuntimeImplementation({
206
+ kind: 'config/loader',
207
+ id: 'config.loader.local',
208
+ implementation: LocalConfigLoader,
209
+ constraint: {
210
+ hardware: ['consumer'],
211
+ qualifiers: { storage: 'local' }
212
+ }
213
+ });