@vibesdotdev/storage 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 (423) hide show
  1. package/README.md +75 -0
  2. package/SPEC.md +60 -0
  3. package/dist/adapters/index.d.ts +14 -0
  4. package/dist/adapters/index.d.ts.map +1 -0
  5. package/dist/adapters/index.js +15 -0
  6. package/dist/adapters/index.js.map +1 -0
  7. package/dist/bridge/index.d.ts +3 -0
  8. package/dist/bridge/index.d.ts.map +1 -0
  9. package/dist/bridge/index.js +2 -0
  10. package/dist/bridge/index.js.map +1 -0
  11. package/dist/bridge/storage-kind-bridge.d.ts +27 -0
  12. package/dist/bridge/storage-kind-bridge.d.ts.map +1 -0
  13. package/dist/bridge/storage-kind-bridge.js +110 -0
  14. package/dist/bridge/storage-kind-bridge.js.map +1 -0
  15. package/dist/bridge/types.d.ts +45 -0
  16. package/dist/bridge/types.d.ts.map +1 -0
  17. package/dist/bridge/types.js +8 -0
  18. package/dist/bridge/types.js.map +1 -0
  19. package/dist/cli/commands/list/storage.list.cli-command.descriptor.d.ts +4 -0
  20. package/dist/cli/commands/list/storage.list.cli-command.descriptor.d.ts.map +1 -0
  21. package/dist/cli/commands/list/storage.list.cli-command.descriptor.js +18 -0
  22. package/dist/cli/commands/list/storage.list.cli-command.descriptor.js.map +1 -0
  23. package/dist/cli/commands/list/storage.list.cli-command.impl.d.ts +11 -0
  24. package/dist/cli/commands/list/storage.list.cli-command.impl.d.ts.map +1 -0
  25. package/dist/cli/commands/list/storage.list.cli-command.impl.js +48 -0
  26. package/dist/cli/commands/list/storage.list.cli-command.impl.js.map +1 -0
  27. package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.descriptor.d.ts +4 -0
  28. package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.descriptor.d.ts.map +1 -0
  29. package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.descriptor.js +26 -0
  30. package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.descriptor.js.map +1 -0
  31. package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.impl.d.ts +13 -0
  32. package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.impl.d.ts.map +1 -0
  33. package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.impl.js +136 -0
  34. package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.impl.js.map +1 -0
  35. package/dist/cli/commands/sync/push/storage.sync.push.cli-command.descriptor.d.ts +4 -0
  36. package/dist/cli/commands/sync/push/storage.sync.push.cli-command.descriptor.d.ts.map +1 -0
  37. package/dist/cli/commands/sync/push/storage.sync.push.cli-command.descriptor.js +26 -0
  38. package/dist/cli/commands/sync/push/storage.sync.push.cli-command.descriptor.js.map +1 -0
  39. package/dist/cli/commands/sync/push/storage.sync.push.cli-command.impl.d.ts +13 -0
  40. package/dist/cli/commands/sync/push/storage.sync.push.cli-command.impl.d.ts.map +1 -0
  41. package/dist/cli/commands/sync/push/storage.sync.push.cli-command.impl.js +165 -0
  42. package/dist/cli/commands/sync/push/storage.sync.push.cli-command.impl.js.map +1 -0
  43. package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.descriptor.d.ts +4 -0
  44. package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.descriptor.d.ts.map +1 -0
  45. package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.descriptor.js +20 -0
  46. package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.descriptor.js.map +1 -0
  47. package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.impl.d.ts +12 -0
  48. package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.impl.d.ts.map +1 -0
  49. package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.impl.js +95 -0
  50. package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.impl.js.map +1 -0
  51. package/dist/cli/commands/sync/status/storage.sync.status.cli-command.descriptor.d.ts +4 -0
  52. package/dist/cli/commands/sync/status/storage.sync.status.cli-command.descriptor.d.ts.map +1 -0
  53. package/dist/cli/commands/sync/status/storage.sync.status.cli-command.descriptor.js +15 -0
  54. package/dist/cli/commands/sync/status/storage.sync.status.cli-command.descriptor.js.map +1 -0
  55. package/dist/cli/commands/sync/status/storage.sync.status.cli-command.impl.d.ts +13 -0
  56. package/dist/cli/commands/sync/status/storage.sync.status.cli-command.impl.d.ts.map +1 -0
  57. package/dist/cli/commands/sync/status/storage.sync.status.cli-command.impl.js +150 -0
  58. package/dist/cli/commands/sync/status/storage.sync.status.cli-command.impl.js.map +1 -0
  59. package/dist/cli/context.consumer.d.ts +26 -0
  60. package/dist/cli/context.consumer.d.ts.map +1 -0
  61. package/dist/cli/context.consumer.js +164 -0
  62. package/dist/cli/context.consumer.js.map +1 -0
  63. package/dist/cli/storage.cli-group.descriptor.d.ts +4 -0
  64. package/dist/cli/storage.cli-group.descriptor.d.ts.map +1 -0
  65. package/dist/cli/storage.cli-group.descriptor.js +11 -0
  66. package/dist/cli/storage.cli-group.descriptor.js.map +1 -0
  67. package/dist/cli/storage.sync.cli-group.descriptor.d.ts +4 -0
  68. package/dist/cli/storage.sync.cli-group.descriptor.d.ts.map +1 -0
  69. package/dist/cli/storage.sync.cli-group.descriptor.js +12 -0
  70. package/dist/cli/storage.sync.cli-group.descriptor.js.map +1 -0
  71. package/dist/cli/types.d.ts +26 -0
  72. package/dist/cli/types.d.ts.map +1 -0
  73. package/dist/cli/types.js +11 -0
  74. package/dist/cli/types.js.map +1 -0
  75. package/dist/client/index.d.ts +10 -0
  76. package/dist/client/index.d.ts.map +1 -0
  77. package/dist/client/index.js +10 -0
  78. package/dist/client/index.js.map +1 -0
  79. package/dist/client/list-browsable-adapters.d.ts +31 -0
  80. package/dist/client/list-browsable-adapters.d.ts.map +1 -0
  81. package/dist/client/list-browsable-adapters.js +40 -0
  82. package/dist/client/list-browsable-adapters.js.map +1 -0
  83. package/dist/daemon/commands/sync.d.ts +23 -0
  84. package/dist/daemon/commands/sync.d.ts.map +1 -0
  85. package/dist/daemon/commands/sync.js +169 -0
  86. package/dist/daemon/commands/sync.js.map +1 -0
  87. package/dist/docs/adapters.docs.descriptor.d.ts +4 -0
  88. package/dist/docs/adapters.docs.descriptor.d.ts.map +1 -0
  89. package/dist/docs/adapters.docs.descriptor.js +223 -0
  90. package/dist/docs/adapters.docs.descriptor.js.map +1 -0
  91. package/dist/docs/manifests.docs.descriptor.d.ts +4 -0
  92. package/dist/docs/manifests.docs.descriptor.d.ts.map +1 -0
  93. package/dist/docs/manifests.docs.descriptor.js +316 -0
  94. package/dist/docs/manifests.docs.descriptor.js.map +1 -0
  95. package/dist/docs/records.docs.descriptor.d.ts +4 -0
  96. package/dist/docs/records.docs.descriptor.d.ts.map +1 -0
  97. package/dist/docs/records.docs.descriptor.js +269 -0
  98. package/dist/docs/records.docs.descriptor.js.map +1 -0
  99. package/dist/docs/sync.docs.descriptor.d.ts +4 -0
  100. package/dist/docs/sync.docs.descriptor.d.ts.map +1 -0
  101. package/dist/docs/sync.docs.descriptor.js +279 -0
  102. package/dist/docs/sync.docs.descriptor.js.map +1 -0
  103. package/dist/index.d.ts +27 -0
  104. package/dist/index.d.ts.map +1 -0
  105. package/dist/index.js +29 -0
  106. package/dist/index.js.map +1 -0
  107. package/dist/interfaces/adapter.d.ts +382 -0
  108. package/dist/interfaces/adapter.d.ts.map +1 -0
  109. package/dist/interfaces/adapter.js +11 -0
  110. package/dist/interfaces/adapter.js.map +1 -0
  111. package/dist/interfaces/document-store.d.ts +62 -0
  112. package/dist/interfaces/document-store.d.ts.map +1 -0
  113. package/dist/interfaces/document-store.js +8 -0
  114. package/dist/interfaces/document-store.js.map +1 -0
  115. package/dist/interfaces/index.d.ts +17 -0
  116. package/dist/interfaces/index.d.ts.map +1 -0
  117. package/dist/interfaces/index.js +24 -0
  118. package/dist/interfaces/index.js.map +1 -0
  119. package/dist/interfaces/key-value.d.ts +95 -0
  120. package/dist/interfaces/key-value.d.ts.map +1 -0
  121. package/dist/interfaces/key-value.js +8 -0
  122. package/dist/interfaces/key-value.js.map +1 -0
  123. package/dist/interfaces/query-builder.d.ts +31 -0
  124. package/dist/interfaces/query-builder.d.ts.map +1 -0
  125. package/dist/interfaces/query-builder.js +11 -0
  126. package/dist/interfaces/query-builder.js.map +1 -0
  127. package/dist/interfaces/record/index.d.ts +7 -0
  128. package/dist/interfaces/record/index.d.ts.map +1 -0
  129. package/dist/interfaces/record/index.js +7 -0
  130. package/dist/interfaces/record/index.js.map +1 -0
  131. package/dist/interfaces/record/interface.d.ts +593 -0
  132. package/dist/interfaces/record/interface.d.ts.map +1 -0
  133. package/dist/interfaces/record/interface.js +49 -0
  134. package/dist/interfaces/record/interface.js.map +1 -0
  135. package/dist/interfaces/repository.d.ts +262 -0
  136. package/dist/interfaces/repository.d.ts.map +1 -0
  137. package/dist/interfaces/repository.js +8 -0
  138. package/dist/interfaces/repository.js.map +1 -0
  139. package/dist/interfaces/schema/index.d.ts +8 -0
  140. package/dist/interfaces/schema/index.d.ts.map +1 -0
  141. package/dist/interfaces/schema/index.js +10 -0
  142. package/dist/interfaces/schema/index.js.map +1 -0
  143. package/dist/interfaces/schema/schema-interface.d.ts +516 -0
  144. package/dist/interfaces/schema/schema-interface.d.ts.map +1 -0
  145. package/dist/interfaces/schema/schema-interface.js +31 -0
  146. package/dist/interfaces/schema/schema-interface.js.map +1 -0
  147. package/dist/interfaces/schema/table-interface.d.ts +250 -0
  148. package/dist/interfaces/schema/table-interface.d.ts.map +1 -0
  149. package/dist/interfaces/schema/table-interface.js +31 -0
  150. package/dist/interfaces/schema/table-interface.js.map +1 -0
  151. package/dist/interfaces/storage-consumer-fs.d.ts +40 -0
  152. package/dist/interfaces/storage-consumer-fs.d.ts.map +1 -0
  153. package/dist/interfaces/storage-consumer-fs.js +42 -0
  154. package/dist/interfaces/storage-consumer-fs.js.map +1 -0
  155. package/dist/manifest/base.d.ts +187 -0
  156. package/dist/manifest/base.d.ts.map +1 -0
  157. package/dist/manifest/base.js +516 -0
  158. package/dist/manifest/base.js.map +1 -0
  159. package/dist/manifest/cloud-sync.consumer.d.ts +7 -0
  160. package/dist/manifest/cloud-sync.consumer.d.ts.map +1 -0
  161. package/dist/manifest/cloud-sync.consumer.js +82 -0
  162. package/dist/manifest/cloud-sync.consumer.js.map +1 -0
  163. package/dist/manifest/index.d.ts +7 -0
  164. package/dist/manifest/index.d.ts.map +1 -0
  165. package/dist/manifest/index.js +7 -0
  166. package/dist/manifest/index.js.map +1 -0
  167. package/dist/manifest/source-policy.d.ts +8 -0
  168. package/dist/manifest/source-policy.d.ts.map +1 -0
  169. package/dist/manifest/source-policy.js +62 -0
  170. package/dist/manifest/source-policy.js.map +1 -0
  171. package/dist/paths.d.ts +6 -0
  172. package/dist/paths.d.ts.map +1 -0
  173. package/dist/paths.js +152 -0
  174. package/dist/paths.js.map +1 -0
  175. package/dist/policy/context.d.ts +9 -0
  176. package/dist/policy/context.d.ts.map +1 -0
  177. package/dist/policy/context.js +29 -0
  178. package/dist/policy/context.js.map +1 -0
  179. package/dist/policy/index.d.ts +4 -0
  180. package/dist/policy/index.d.ts.map +1 -0
  181. package/dist/policy/index.js +4 -0
  182. package/dist/policy/index.js.map +1 -0
  183. package/dist/policy/overrides.d.ts +40 -0
  184. package/dist/policy/overrides.d.ts.map +1 -0
  185. package/dist/policy/overrides.js +37 -0
  186. package/dist/policy/overrides.js.map +1 -0
  187. package/dist/policy/persistence.d.ts +38 -0
  188. package/dist/policy/persistence.d.ts.map +1 -0
  189. package/dist/policy/persistence.js +65 -0
  190. package/dist/policy/persistence.js.map +1 -0
  191. package/dist/policy/types.d.ts +21 -0
  192. package/dist/policy/types.d.ts.map +1 -0
  193. package/dist/policy/types.js +7 -0
  194. package/dist/policy/types.js.map +1 -0
  195. package/dist/record/base.d.ts +186 -0
  196. package/dist/record/base.d.ts.map +1 -0
  197. package/dist/record/base.js +1437 -0
  198. package/dist/record/base.js.map +1 -0
  199. package/dist/record/events.d.ts +71 -0
  200. package/dist/record/events.d.ts.map +1 -0
  201. package/dist/record/events.js +52 -0
  202. package/dist/record/events.js.map +1 -0
  203. package/dist/record/extensions.d.ts +51 -0
  204. package/dist/record/extensions.d.ts.map +1 -0
  205. package/dist/record/extensions.js +222 -0
  206. package/dist/record/extensions.js.map +1 -0
  207. package/dist/record/index.d.ts +7 -0
  208. package/dist/record/index.d.ts.map +1 -0
  209. package/dist/record/index.js +7 -0
  210. package/dist/record/index.js.map +1 -0
  211. package/dist/resolver/storage-backed-resolver.d.ts +23 -0
  212. package/dist/resolver/storage-backed-resolver.d.ts.map +1 -0
  213. package/dist/resolver/storage-backed-resolver.js +187 -0
  214. package/dist/resolver/storage-backed-resolver.js.map +1 -0
  215. package/dist/schemas/adapter-descriptor.d.ts +108 -0
  216. package/dist/schemas/adapter-descriptor.d.ts.map +1 -0
  217. package/dist/schemas/adapter-descriptor.js +101 -0
  218. package/dist/schemas/adapter-descriptor.js.map +1 -0
  219. package/dist/schemas/index.d.ts +14 -0
  220. package/dist/schemas/index.d.ts.map +1 -0
  221. package/dist/schemas/index.js +12 -0
  222. package/dist/schemas/index.js.map +1 -0
  223. package/dist/schemas/manifest-descriptor.d.ts +110 -0
  224. package/dist/schemas/manifest-descriptor.d.ts.map +1 -0
  225. package/dist/schemas/manifest-descriptor.js +114 -0
  226. package/dist/schemas/manifest-descriptor.js.map +1 -0
  227. package/dist/schemas/record/descriptor.d.ts +570 -0
  228. package/dist/schemas/record/descriptor.d.ts.map +1 -0
  229. package/dist/schemas/record/descriptor.js +389 -0
  230. package/dist/schemas/record/descriptor.js.map +1 -0
  231. package/dist/schemas/record/index.d.ts +8 -0
  232. package/dist/schemas/record/index.d.ts.map +1 -0
  233. package/dist/schemas/record/index.js +7 -0
  234. package/dist/schemas/record/index.js.map +1 -0
  235. package/dist/schemas/record/relation.d.ts +36 -0
  236. package/dist/schemas/record/relation.d.ts.map +1 -0
  237. package/dist/schemas/record/relation.js +37 -0
  238. package/dist/schemas/record/relation.js.map +1 -0
  239. package/dist/schemas/schema/descriptor.d.ts +231 -0
  240. package/dist/schemas/schema/descriptor.d.ts.map +1 -0
  241. package/dist/schemas/schema/descriptor.js +205 -0
  242. package/dist/schemas/schema/descriptor.js.map +1 -0
  243. package/dist/schemas/schema/index.d.ts +7 -0
  244. package/dist/schemas/schema/index.d.ts.map +1 -0
  245. package/dist/schemas/schema/index.js +7 -0
  246. package/dist/schemas/schema/index.js.map +1 -0
  247. package/dist/schemas/sync-bridge-descriptor.d.ts +124 -0
  248. package/dist/schemas/sync-bridge-descriptor.d.ts.map +1 -0
  249. package/dist/schemas/sync-bridge-descriptor.js +67 -0
  250. package/dist/schemas/sync-bridge-descriptor.js.map +1 -0
  251. package/dist/server/manifest-route.d.ts +92 -0
  252. package/dist/server/manifest-route.d.ts.map +1 -0
  253. package/dist/server/manifest-route.js +226 -0
  254. package/dist/server/manifest-route.js.map +1 -0
  255. package/dist/storage-policy.context.descriptor.d.ts +16 -0
  256. package/dist/storage-policy.context.descriptor.d.ts.map +1 -0
  257. package/dist/storage-policy.context.descriptor.js +16 -0
  258. package/dist/storage-policy.context.descriptor.js.map +1 -0
  259. package/dist/storage-policy.context.server.d.ts +14 -0
  260. package/dist/storage-policy.context.server.d.ts.map +1 -0
  261. package/dist/storage-policy.context.server.js +27 -0
  262. package/dist/storage-policy.context.server.js.map +1 -0
  263. package/dist/storage.plugin.d.ts +38 -0
  264. package/dist/storage.plugin.d.ts.map +1 -0
  265. package/dist/storage.plugin.js +204 -0
  266. package/dist/storage.plugin.js.map +1 -0
  267. package/dist/sync/cloud-pull.d.ts +15 -0
  268. package/dist/sync/cloud-pull.d.ts.map +1 -0
  269. package/dist/sync/cloud-pull.js +130 -0
  270. package/dist/sync/cloud-pull.js.map +1 -0
  271. package/dist/sync/cloud-record-crud-config.d.ts +19 -0
  272. package/dist/sync/cloud-record-crud-config.d.ts.map +1 -0
  273. package/dist/sync/cloud-record-crud-config.js +22 -0
  274. package/dist/sync/cloud-record-crud-config.js.map +1 -0
  275. package/dist/sync/record-sync-bridge.d.ts +5 -0
  276. package/dist/sync/record-sync-bridge.d.ts.map +1 -0
  277. package/dist/sync/record-sync-bridge.js +121 -0
  278. package/dist/sync/record-sync-bridge.js.map +1 -0
  279. package/dist/sync/resolve-sync-target.d.ts +23 -0
  280. package/dist/sync/resolve-sync-target.d.ts.map +1 -0
  281. package/dist/sync/resolve-sync-target.js +45 -0
  282. package/dist/sync/resolve-sync-target.js.map +1 -0
  283. package/dist/sync/schemas/cloud-pull.d.ts +25 -0
  284. package/dist/sync/schemas/cloud-pull.d.ts.map +1 -0
  285. package/dist/sync/schemas/cloud-pull.js +7 -0
  286. package/dist/sync/schemas/cloud-pull.js.map +1 -0
  287. package/dist/sync/schemas/index.d.ts +9 -0
  288. package/dist/sync/schemas/index.d.ts.map +1 -0
  289. package/dist/sync/schemas/index.js +9 -0
  290. package/dist/sync/schemas/index.js.map +1 -0
  291. package/dist/sync/schemas/sync-helpers.d.ts +17 -0
  292. package/dist/sync/schemas/sync-helpers.d.ts.map +1 -0
  293. package/dist/sync/schemas/sync-helpers.js +7 -0
  294. package/dist/sync/schemas/sync-helpers.js.map +1 -0
  295. package/dist/sync/schemas/sync-state.d.ts +65 -0
  296. package/dist/sync/schemas/sync-state.d.ts.map +1 -0
  297. package/dist/sync/schemas/sync-state.js +32 -0
  298. package/dist/sync/schemas/sync-state.js.map +1 -0
  299. package/dist/sync/sync-bridge.d.ts +80 -0
  300. package/dist/sync/sync-bridge.d.ts.map +1 -0
  301. package/dist/sync/sync-bridge.js +617 -0
  302. package/dist/sync/sync-bridge.js.map +1 -0
  303. package/dist/sync/sync-manifest.d.ts +20 -0
  304. package/dist/sync/sync-manifest.d.ts.map +1 -0
  305. package/dist/sync/sync-manifest.js +140 -0
  306. package/dist/sync/sync-manifest.js.map +1 -0
  307. package/dist/sync/sync-state.consumer.d.ts +23 -0
  308. package/dist/sync/sync-state.consumer.d.ts.map +1 -0
  309. package/dist/sync/sync-state.consumer.js +111 -0
  310. package/dist/sync/sync-state.consumer.js.map +1 -0
  311. package/dist/transform/index.d.ts +75 -0
  312. package/dist/transform/index.d.ts.map +1 -0
  313. package/dist/transform/index.js +81 -0
  314. package/dist/transform/index.js.map +1 -0
  315. package/dist/transform/transform-descriptor.d.ts +51 -0
  316. package/dist/transform/transform-descriptor.d.ts.map +1 -0
  317. package/dist/transform/transform-descriptor.js +30 -0
  318. package/dist/transform/transform-descriptor.js.map +1 -0
  319. package/dist/tui/storage-explorer.descriptor.d.ts +14 -0
  320. package/dist/tui/storage-explorer.descriptor.d.ts.map +1 -0
  321. package/dist/tui/storage-explorer.descriptor.js +29 -0
  322. package/dist/tui/storage-explorer.descriptor.js.map +1 -0
  323. package/dist/tui/storage-explorer.impl.consumer.d.ts +11 -0
  324. package/dist/tui/storage-explorer.impl.consumer.d.ts.map +1 -0
  325. package/dist/tui/storage-explorer.impl.consumer.js +13 -0
  326. package/dist/tui/storage-explorer.impl.consumer.js.map +1 -0
  327. package/dist/tui/storage-open.descriptor.d.ts +14 -0
  328. package/dist/tui/storage-open.descriptor.d.ts.map +1 -0
  329. package/dist/tui/storage-open.descriptor.js +28 -0
  330. package/dist/tui/storage-open.descriptor.js.map +1 -0
  331. package/dist/tui/storage-open.impl.consumer.d.ts +11 -0
  332. package/dist/tui/storage-open.impl.consumer.d.ts.map +1 -0
  333. package/dist/tui/storage-open.impl.consumer.js +13 -0
  334. package/dist/tui/storage-open.impl.consumer.js.map +1 -0
  335. package/dist/utils/error-context.d.ts +2 -0
  336. package/dist/utils/error-context.d.ts.map +1 -0
  337. package/dist/utils/error-context.js +17 -0
  338. package/dist/utils/error-context.js.map +1 -0
  339. package/package.json +241 -0
  340. package/src/adapters/index.ts +13 -0
  341. package/src/bridge/index.ts +2 -0
  342. package/src/bridge/storage-kind-bridge.ts +131 -0
  343. package/src/bridge/types.ts +46 -0
  344. package/src/cli/commands/list/storage.list.cli-command.descriptor.ts +20 -0
  345. package/src/cli/commands/list/storage.list.cli-command.impl.ts +72 -0
  346. package/src/cli/commands/sync/pull/storage.sync.pull.cli-command.descriptor.ts +28 -0
  347. package/src/cli/commands/sync/pull/storage.sync.pull.cli-command.impl.ts +171 -0
  348. package/src/cli/commands/sync/push/storage.sync.push.cli-command.descriptor.ts +28 -0
  349. package/src/cli/commands/sync/push/storage.sync.push.cli-command.impl.ts +213 -0
  350. package/src/cli/commands/sync/resolve/storage.sync.resolve.cli-command.descriptor.ts +22 -0
  351. package/src/cli/commands/sync/resolve/storage.sync.resolve.cli-command.impl.ts +129 -0
  352. package/src/cli/commands/sync/status/storage.sync.status.cli-command.descriptor.ts +17 -0
  353. package/src/cli/commands/sync/status/storage.sync.status.cli-command.impl.ts +192 -0
  354. package/src/cli/context.consumer.ts +195 -0
  355. package/src/cli/storage.cli-group.descriptor.ts +13 -0
  356. package/src/cli/storage.sync.cli-group.descriptor.ts +14 -0
  357. package/src/cli/types.ts +25 -0
  358. package/src/client/index.ts +10 -0
  359. package/src/client/list-browsable-adapters.ts +42 -0
  360. package/src/daemon/commands/sync.ts +225 -0
  361. package/src/docs/adapters.docs.descriptor.ts +225 -0
  362. package/src/docs/manifests.docs.descriptor.ts +318 -0
  363. package/src/docs/records.docs.descriptor.ts +271 -0
  364. package/src/docs/sync.docs.descriptor.ts +281 -0
  365. package/src/index.ts +109 -0
  366. package/src/interfaces/adapter.ts +451 -0
  367. package/src/interfaces/document-store.ts +74 -0
  368. package/src/interfaces/index.ts +117 -0
  369. package/src/interfaces/key-value.ts +112 -0
  370. package/src/interfaces/query-builder.ts +31 -0
  371. package/src/interfaces/record/index.ts +58 -0
  372. package/src/interfaces/record/interface.ts +723 -0
  373. package/src/interfaces/repository.ts +300 -0
  374. package/src/interfaces/schema/index.ts +37 -0
  375. package/src/interfaces/schema/schema-interface.ts +586 -0
  376. package/src/interfaces/schema/table-interface.ts +314 -0
  377. package/src/interfaces/storage-consumer-fs.ts +66 -0
  378. package/src/manifest/base.ts +594 -0
  379. package/src/manifest/cloud-sync.consumer.ts +120 -0
  380. package/src/manifest/index.ts +7 -0
  381. package/src/manifest/source-policy.ts +74 -0
  382. package/src/paths.ts +171 -0
  383. package/src/policy/context.ts +30 -0
  384. package/src/policy/index.ts +20 -0
  385. package/src/policy/overrides.ts +46 -0
  386. package/src/policy/persistence.ts +117 -0
  387. package/src/policy/types.ts +28 -0
  388. package/src/record/base.ts +1872 -0
  389. package/src/record/events.ts +56 -0
  390. package/src/record/extensions.ts +308 -0
  391. package/src/record/index.ts +7 -0
  392. package/src/resolver/storage-backed-resolver.ts +255 -0
  393. package/src/schemas/adapter-descriptor.ts +128 -0
  394. package/src/schemas/index.ts +104 -0
  395. package/src/schemas/manifest-descriptor.ts +143 -0
  396. package/src/schemas/record/descriptor.ts +621 -0
  397. package/src/schemas/record/index.ts +60 -0
  398. package/src/schemas/record/relation.ts +49 -0
  399. package/src/schemas/schema/descriptor.ts +278 -0
  400. package/src/schemas/schema/index.ts +14 -0
  401. package/src/schemas/sync-bridge-descriptor.ts +143 -0
  402. package/src/server/manifest-route.ts +319 -0
  403. package/src/storage-policy.context.descriptor.ts +17 -0
  404. package/src/storage-policy.context.server.ts +34 -0
  405. package/src/storage.plugin.ts +264 -0
  406. package/src/sync/cloud-pull.ts +202 -0
  407. package/src/sync/cloud-record-crud-config.ts +41 -0
  408. package/src/sync/record-sync-bridge.ts +183 -0
  409. package/src/sync/resolve-sync-target.ts +57 -0
  410. package/src/sync/schemas/cloud-pull.ts +26 -0
  411. package/src/sync/schemas/index.ts +18 -0
  412. package/src/sync/schemas/sync-helpers.ts +18 -0
  413. package/src/sync/schemas/sync-state.ts +41 -0
  414. package/src/sync/sync-bridge.ts +763 -0
  415. package/src/sync/sync-manifest.ts +212 -0
  416. package/src/sync/sync-state.consumer.ts +144 -0
  417. package/src/transform/index.ts +130 -0
  418. package/src/transform/transform-descriptor.ts +53 -0
  419. package/src/tui/storage-explorer.descriptor.ts +32 -0
  420. package/src/tui/storage-explorer.impl.consumer.ts +14 -0
  421. package/src/tui/storage-open.descriptor.ts +31 -0
  422. package/src/tui/storage-open.impl.consumer.ts +14 -0
  423. package/src/utils/error-context.ts +19 -0
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Storage record relation schemas / types.
3
+ *
4
+ * Extracted from `./descriptor.ts` so the record interface module
5
+ * (`../../interfaces/record/interface.ts`) can reference `StorageRelation`
6
+ * without forming a cycle (descriptor.ts itself imports
7
+ * `StorageRecordInterface` from the interface module for its sync /
8
+ * remote context types).
9
+ */
10
+
11
+ import * as z from 'zod/v4';
12
+
13
+ /** Relation types for storage records. */
14
+ export const StorageRelationTypeSchema = z.enum([
15
+ 'belongs_to', // Many-to-one (e.g., todo belongs to session)
16
+ 'has_one', // One-to-one (e.g., session has one config)
17
+ 'has_many', // One-to-many (e.g., session has many todos)
18
+ 'many_to_many' // Many-to-many (e.g., user has many roles)
19
+ ]);
20
+
21
+ /** Relation definition for a storage record. */
22
+ export const StorageRelationSchema = z.object({
23
+ /** Relation type */
24
+ type: StorageRelationTypeSchema,
25
+
26
+ /** Target record descriptor ID (e.g., 'session.sessions') */
27
+ target: z.string(),
28
+
29
+ /** Foreign key field in this table (for belongs_to) */
30
+ foreignKey: z.string().optional(),
31
+
32
+ /** Foreign key field in target table (for has_one/has_many) */
33
+ foreignKeyTarget: z.string().optional(),
34
+
35
+ /** Junction table for many_to_many relations */
36
+ through: z.string().optional(),
37
+
38
+ /** Whether this relation is optional */
39
+ optional: z.boolean().default(false),
40
+
41
+ /** Cascade delete when parent is deleted */
42
+ cascadeDelete: z.boolean().default(false),
43
+
44
+ /** Custom relation name (defaults to property key) */
45
+ as: z.string().optional()
46
+ });
47
+
48
+ export type StorageRelationType = z.infer<typeof StorageRelationTypeSchema>;
49
+ export type StorageRelation = z.infer<typeof StorageRelationSchema>;
@@ -0,0 +1,278 @@
1
+ /**
2
+ * Storage Schema Descriptor Schema
3
+ *
4
+ * Defines a multi-table schema with relations for complex modules.
5
+ * Used for modules that need multiple related tables with foreign keys.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const sessionSchemaDescriptor: StorageSchemaDescriptor = {
10
+ * kind: 'storage/schema',
11
+ * id: 'session',
12
+ * name: 'Session Storage Schema',
13
+ * description: 'Complete session storage with multiple related tables',
14
+ * tables: {
15
+ * sessions: {
16
+ * schema: SessionSchema,
17
+ * primaryKey: 'id',
18
+ * indexes: [{ fields: ['status'] }]
19
+ * },
20
+ * todos: {
21
+ * schema: TodoSchema,
22
+ * primaryKey: 'id',
23
+ * relations: {
24
+ * session: { type: 'belongs_to', target: 'sessions', foreignKey: 'sessionId' }
25
+ * }
26
+ * }
27
+ * },
28
+ * migrations: () => import('./migrations').then(m => m.SESSION_MIGRATIONS),
29
+ * allowedAdapters: ['storage.localdb'],
30
+ * dbName: 'sessions.db'
31
+ * };
32
+ * ```
33
+ */
34
+
35
+ import * as z from 'zod/v4';
36
+ import { RuntimeDescriptorSchema } from '@vibesdotdev/runtime/schemas/descriptor';
37
+ import { StorageScopeSchema } from '../manifest-descriptor';
38
+ import {
39
+ StorageRelationSchema,
40
+ StorageIndexSchema,
41
+ StorageMigrationSchema,
42
+ StorageFieldConfigSchema
43
+ } from '../record/descriptor';
44
+
45
+ /**
46
+ * Table definition within a schema
47
+ */
48
+ export const StorageTableDefinitionSchema = z.object({
49
+ /** Zod schema for the table data (stored as unknown, validated at runtime) */
50
+ schema: z.unknown(),
51
+
52
+ /** Primary key field name (default: 'id') */
53
+ primaryKey: z.string().default('id'),
54
+
55
+ /** Relations to other tables in this schema */
56
+ relations: z.record(z.string(), StorageRelationSchema).optional(),
57
+
58
+ /** Database indexes for this table */
59
+ indexes: z.array(StorageIndexSchema).default([]),
60
+
61
+ /** Auto-manage timestamps (createdAt, updatedAt) */
62
+ timestamps: z
63
+ .union([
64
+ z.boolean(),
65
+ z.object({
66
+ createdAt: z.union([z.boolean(), z.string()]).optional(),
67
+ updatedAt: z.union([z.boolean(), z.string()]).optional()
68
+ })
69
+ ])
70
+ .default(true),
71
+
72
+ /** Auto-generate IDs */
73
+ autoId: z
74
+ .union([
75
+ z.boolean(),
76
+ z.object({
77
+ field: z.string().optional(),
78
+ strategy: z.enum(['uuid', 'nanoid', 'custom']).optional(),
79
+ generator: z.optional(z.unknown())
80
+ })
81
+ ])
82
+ .default(true),
83
+
84
+ /** Soft delete field (e.g., 'deletedAt') */
85
+ softDelete: z.union([z.boolean(), z.string()]).optional(),
86
+
87
+ /** Field-specific configurations */
88
+ fieldConfig: z.record(z.string(), StorageFieldConfigSchema).optional(),
89
+
90
+ /** Enable record versioning for optimistic locking */
91
+ versioning: z.boolean().default(false),
92
+
93
+ /** Enable audit trail (createdBy, updatedBy) */
94
+ audit: z.boolean().default(false),
95
+
96
+ /** Enable change tracking for sync */
97
+ changeTracking: z.boolean().default(false),
98
+
99
+ /** Custom validation function */
100
+ validate: z.optional(z.unknown()),
101
+
102
+ /** Before create hook */
103
+ beforeCreate: z.optional(z.unknown()),
104
+
105
+ /** After create hook */
106
+ afterCreate: z.optional(z.unknown()),
107
+
108
+ /** Before update hook */
109
+ beforeUpdate: z.optional(z.unknown()),
110
+
111
+ /** After update hook */
112
+ afterUpdate: z.optional(z.unknown()),
113
+
114
+ /** Before delete hook */
115
+ beforeDelete: z.optional(z.unknown()),
116
+
117
+ /** After delete hook */
118
+ afterDelete: z.optional(z.unknown())
119
+ });
120
+
121
+ /**
122
+ * Migration source - can be inline or lazy-loaded
123
+ */
124
+ export const MigrationSourceSchema = z.union([
125
+ // Inline migrations array
126
+ z.array(StorageMigrationSchema),
127
+ // Lazy-loaded migrations (function that returns promise)
128
+ z.unknown(),
129
+ // Module import path
130
+ z.string()
131
+ ]);
132
+
133
+ /**
134
+ * Storage schema descriptor schema
135
+ */
136
+ export const StorageSchemaDescriptorSchema = RuntimeDescriptorSchema.extend({
137
+ kind: z.literal('storage/schema'),
138
+
139
+ // SCHEMA DEFINITION
140
+
141
+ /** Human-readable name */
142
+ name: z.string().min(1),
143
+
144
+ /** Human-readable description */
145
+ description: z.string().optional(),
146
+
147
+ /** Table definitions (key is table name) */
148
+ tables: z
149
+ .record(z.string(), StorageTableDefinitionSchema)
150
+ .refine((tables) => Object.keys(tables).length > 0, {
151
+ message: 'Schema must have at least one table'
152
+ }),
153
+
154
+ // MIGRATIONS
155
+
156
+ /** Inline or lazy-loaded migrations for this schema */
157
+ migrations: MigrationSourceSchema.optional(),
158
+
159
+ /** Migration key for external migrations (e.g., 'session') */
160
+ migrationKey: z.string().optional(),
161
+
162
+ /** Current schema version (default: 1) */
163
+ version: z.number().int().positive().default(1),
164
+
165
+ // ADAPTER SELECTION
166
+
167
+ /** Allowed adapter IDs (e.g., ['storage.localdb', 'storage.drizzle']) */
168
+ allowedAdapters: z.array(z.string()).min(1),
169
+
170
+ /** Default adapter to use when not specified */
171
+ defaultAdapter: z.string().optional(),
172
+
173
+ /** Adapter-specific configuration */
174
+ adapterConfig: z.record(z.string(), z.unknown()).optional(),
175
+
176
+ // SCOPE & STORAGE
177
+
178
+ /** Storage scope for path resolution */
179
+ scope: StorageScopeSchema.default('project'),
180
+
181
+ /** Custom database name (overrides default) */
182
+ dbName: z.string().optional(),
183
+
184
+ /** Database schema name (for Postgres) */
185
+ dbSchema: z.string().optional(),
186
+
187
+ /** Custom base path for database */
188
+ basePath: z.string().optional(),
189
+
190
+ // SCHEMA FEATURES
191
+
192
+ /** Enable foreign key constraints */
193
+ foreignKeys: z.boolean().default(true),
194
+
195
+ /** Enable cascade delete for relations with cascadeDelete=true */
196
+ cascadeDelete: z.boolean().default(true),
197
+
198
+ /** Enable transactions for multi-table operations */
199
+ transactions: z.boolean().default(true),
200
+
201
+ /** Enable database connection pooling */
202
+ pooling: z.boolean().default(true),
203
+
204
+ /** Pool size (if pooling enabled) */
205
+ poolSize: z.number().int().positive().default(5),
206
+
207
+ // SYNC & REPLICATION
208
+
209
+ /** Enable sync between runtimes */
210
+ sync: z.boolean().default(false),
211
+
212
+ /** Sync configuration */
213
+ syncConfig: z
214
+ .object({
215
+ /** Sync direction */
216
+ direction: z.enum(['bidirectional', 'to-cloud', 'from-cloud']).default('bidirectional'),
217
+
218
+ /** Conflict resolution strategy */
219
+ conflictResolution: z
220
+ .enum(['server-wins', 'client-wins', 'timestamp', 'custom'])
221
+ .default('timestamp'),
222
+
223
+ /** Custom conflict resolver */
224
+ conflictResolver: z.optional(z.unknown()),
225
+
226
+ /** Sync interval in milliseconds */
227
+ interval: z.number().int().positive().default(60000),
228
+
229
+ /** Tables to exclude from sync */
230
+ excludeTables: z.array(z.string()).optional()
231
+ })
232
+ .optional(),
233
+
234
+ // BACKUP & RESTORE
235
+
236
+ /** Enable automatic backups */
237
+ backup: z.boolean().default(false),
238
+
239
+ /** Backup configuration */
240
+ backupConfig: z
241
+ .object({
242
+ /** Backup interval in milliseconds */
243
+ interval: z.number().int().positive().default(86400000), // 24 hours
244
+
245
+ /** Maximum number of backups to keep */
246
+ maxBackups: z.number().int().positive().default(7),
247
+
248
+ /** Backup location */
249
+ location: z.string().optional(),
250
+
251
+ /** Tables to exclude from backup */
252
+ excludeTables: z.array(z.string()).optional()
253
+ })
254
+ .optional(),
255
+
256
+ // METADATA
257
+
258
+ /** Whether this schema is internal (not user-editable) */
259
+ internal: z.boolean().default(false),
260
+
261
+ /** Schema namespace (e.g., 'session') */
262
+ namespace: z.string().optional(),
263
+
264
+ /** Tags for categorization */
265
+ tags: z.array(z.string()).default([]),
266
+
267
+ /** Schema author/maintainer */
268
+ author: z.string().optional(),
269
+
270
+ /** Schema version history URL */
271
+ versionHistoryUrl: z.string().optional()
272
+ });
273
+
274
+ // TYPE EXPORTS
275
+
276
+ export type StorageTableDefinition = z.infer<typeof StorageTableDefinitionSchema>;
277
+ export type MigrationSource = z.infer<typeof MigrationSourceSchema>;
278
+ export type StorageSchemaDescriptor = z.infer<typeof StorageSchemaDescriptorSchema>;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Storage Schema Exports
3
+ *
4
+ * Exports all types and schemas for storage/schema descriptors.
5
+ */
6
+
7
+ export {
8
+ StorageSchemaDescriptorSchema,
9
+ StorageTableDefinitionSchema,
10
+ MigrationSourceSchema,
11
+ type StorageSchemaDescriptor,
12
+ type StorageTableDefinition,
13
+ type MigrationSource
14
+ } from './descriptor';
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Storage Sync-Bridge Descriptor Schema
3
+ *
4
+ * Declares a bidirectional sync bridge between a runtime kind (local descriptors)
5
+ * and a cloud CRUD API. Replaces hand-rolled per-module sync services with a
6
+ * declarative descriptor that the generic sync executor can process.
7
+ *
8
+ * The bridge maps local runtime descriptors ↔ remote API records, handling
9
+ * ID transformation, ownership filtering, secret stripping, and conflict resolution.
10
+ */
11
+
12
+ import * as z from 'zod/v4';
13
+ import { RuntimeDescriptorSchema } from '@vibesdotdev/runtime/schemas/descriptor';
14
+
15
+ export const SyncDirectionSchema = z.enum(['bidirectional', 'push-only', 'pull-only']);
16
+ export type SyncDirection = z.infer<typeof SyncDirectionSchema>;
17
+
18
+ export const ConflictStrategySchema = z.enum(['local-wins', 'remote-wins', 'manual', 'newest']);
19
+ export type ConflictStrategy = z.infer<typeof ConflictStrategySchema>;
20
+
21
+ export const OwnershipFilterSchema = z.enum(['all', 'user-only', 'system-only']);
22
+ export type OwnershipFilter = z.infer<typeof OwnershipFilterSchema>;
23
+
24
+ /**
25
+ * Schema for a sync-bridge descriptor.
26
+ *
27
+ * Extends RuntimeDescriptor with source/target/sync configuration.
28
+ */
29
+ export const SyncBridgeDescriptorSchema = RuntimeDescriptorSchema.extend({
30
+ kind: z.literal('storage/sync-bridge'),
31
+
32
+ /** Source: where descriptors live locally */
33
+ source: z.object({
34
+ /** The runtime kind ID to collect descriptors from (e.g. 'dev/benchmark-suite') */
35
+ runtimeKind: z.string().min(1),
36
+
37
+ /** Optional: field on the descriptor that holds the version number */
38
+ versionField: z.string().optional(),
39
+
40
+ /** Optional: field on the descriptor that holds the source type ('system' | 'user') */
41
+ sourceTypeField: z.string().optional()
42
+ }),
43
+
44
+ /** Target: the cloud CRUD API to sync against */
45
+ target: z.object({
46
+ /** API path for the collection endpoint (e.g. '/api/dev/benchmarks') */
47
+ apiPath: z.string().min(1),
48
+
49
+ /** API path for a single entity, with :id placeholder (e.g. '/api/dev/benchmarks/:id') */
50
+ entityPath: z.string().optional(),
51
+
52
+ /** The field name in API responses that contains the list of items */
53
+ listField: z.string().optional(),
54
+
55
+ /** The field name for the total count in list responses */
56
+ totalField: z.string().optional(),
57
+
58
+ /** Request soft-deleted rows when the remote API supports it */
59
+ includeDeleted: z.boolean().optional()
60
+ }),
61
+
62
+ /** Sync behavior configuration */
63
+ sync: z
64
+ .object({
65
+ /** Sync direction */
66
+ direction: SyncDirectionSchema.default('bidirectional'),
67
+
68
+ /** Which entities to sync based on ownership */
69
+ ownershipFilter: OwnershipFilterSchema.default('all'),
70
+
71
+ /** How to handle conflicts when both sides changed */
72
+ conflictStrategy: ConflictStrategySchema.default('local-wins'),
73
+
74
+ /** Fields to strip before pushing to cloud (e.g. secrets) */
75
+ sensitiveFields: z.array(z.string()).default([]),
76
+
77
+ /** The field that uniquely identifies an entity */
78
+ idField: z.string().default('id')
79
+ })
80
+ .default({
81
+ direction: 'bidirectional',
82
+ ownershipFilter: 'all',
83
+ conflictStrategy: 'local-wins',
84
+ sensitiveFields: [],
85
+ idField: 'id'
86
+ })
87
+ }).passthrough();
88
+
89
+ export type SyncBridgeDescriptor = z.infer<typeof SyncBridgeDescriptorSchema> & {
90
+ /**
91
+ * Transform a local runtime descriptor into the shape the API expects.
92
+ * Called before pushing to cloud.
93
+ */
94
+ toRemote?: (descriptor: Record<string, unknown>) => Record<string, unknown>;
95
+
96
+ /**
97
+ * Transform an API response record into a local runtime descriptor shape.
98
+ * Called after pulling from cloud.
99
+ */
100
+ fromRemote?: (record: Record<string, unknown>) => Record<string, unknown>;
101
+
102
+ /**
103
+ * Optional: Ensure remote prerequisites exist before pushing an entity.
104
+ * Useful when the remote API expects related resources (for example, a
105
+ * knowledge base) to exist before an item can be upserted.
106
+ */
107
+ beforePush?: (
108
+ descriptor: Record<string, unknown>,
109
+ context: {
110
+ apiEndpoint: string;
111
+ apiToken?: string;
112
+ fetch: (input: string, init?: RequestInit) => Promise<Response>;
113
+ }
114
+ ) => Promise<void>;
115
+
116
+ deleteRemote?: (
117
+ descriptor: Record<string, unknown>,
118
+ context: {
119
+ apiEndpoint: string;
120
+ apiToken?: string;
121
+ fetch: (input: string, init?: RequestInit) => Promise<Response>;
122
+ }
123
+ ) => Promise<void>;
124
+
125
+ /**
126
+ * Optional: Custom collection function. Defaults to runtime.query(source.runtimeKind).descriptors()
127
+ */
128
+ collect?: () => Promise<Record<string, unknown>[]> | Record<string, unknown>[];
129
+
130
+ /**
131
+ * Optional: Storage manifest ID for persisting pulled items.
132
+ * When set, pulled items are merged into this storage manifest (localdb/json).
133
+ * When omitted, pulled items are only registered with the runtime (descriptor-only bridges).
134
+ */
135
+ storageManifestId?: string;
136
+
137
+ /**
138
+ * Optional: Custom write function for pulled items.
139
+ * Called when a remote-only item needs to be persisted locally.
140
+ * When omitted and storageManifestId is set, uses StorageManifest.load/save.
141
+ */
142
+ writePulled?: (items: Record<string, unknown>[]) => Promise<void>;
143
+ };