@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 @@
1
+ {"version":3,"file":"sync-manifest.d.ts","sourceRoot":"","sources":["../../src/sync/sync-manifest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,wBAAsB,YAAY,CACjC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,WAAW,GAClB,OAAO,CAAC,kBAAkB,CAAC,CA+D7B"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Sync Manifest Helper (Consumer)
3
+ *
4
+ * Core bidirectional sync logic for a single manifest.
5
+ * Extracted from MaintenanceStorageSyncJob to keep file size under limit.
6
+ */
7
+ import { logger } from '@vibesdotdev/logging';
8
+ const LOG_PREFIX = '[maintenance.storage-sync]';
9
+ export async function syncManifest(manifestId, syncState, helpers) {
10
+ const { getVibesRuntime } = await import('@vibesdotdev/runtime');
11
+ const runtime = getVibesRuntime();
12
+ const { StorageManifest } = await import('../manifest/index.js');
13
+ // Load local data via default adapter
14
+ const localManifest = new StorageManifest(manifestId);
15
+ let localData;
16
+ try {
17
+ localData = await localManifest.load();
18
+ }
19
+ catch (schemaError) {
20
+ // Schema validation failed — data exists but doesn't match current schema.
21
+ // This is a data migration issue, not a sync issue.
22
+ const msg = schemaError instanceof Error ? schemaError.message : String(schemaError);
23
+ helpers.markError(syncState, manifestId, `Schema validation failed: ${msg}`);
24
+ return {
25
+ manifestId,
26
+ action: 'error',
27
+ message: `Local data fails schema validation (needs migration): ${msg}`
28
+ };
29
+ }
30
+ const localHash = localData ? helpers.computeHash(localData) : null;
31
+ // Load remote data via cloud-api adapter
32
+ const { remoteData, remoteHash } = await loadRemoteData(runtime, manifestId, helpers);
33
+ const prev = helpers.getManifestSyncState(syncState, manifestId);
34
+ // Decision matrix
35
+ if (!localData && !remoteData) {
36
+ return { manifestId, action: 'skipped', message: 'No data on either side' };
37
+ }
38
+ if (localHash === remoteHash) {
39
+ if (prev.syncStatus !== 'in-sync') {
40
+ helpers.markSynced(syncState, manifestId, localHash ?? '', 'push');
41
+ }
42
+ return { manifestId, action: 'skipped', message: 'Already in sync' };
43
+ }
44
+ const localChanged = localHash !== prev.localHash;
45
+ const remoteChanged = remoteHash !== prev.remoteHash;
46
+ if (localChanged && remoteChanged && remoteHash !== null) {
47
+ helpers.markConflict(syncState, manifestId, localHash ?? '', remoteHash);
48
+ return { manifestId, action: 'conflict', message: 'Both local and remote changed' };
49
+ }
50
+ if (remoteChanged && !localChanged && remoteData) {
51
+ if (helpers.dryRun) {
52
+ return { manifestId, action: 'pulled', message: '[dry-run] Would pull from cloud' };
53
+ }
54
+ await localManifest.save(remoteData);
55
+ helpers.markSynced(syncState, manifestId, remoteHash ?? '', 'pull');
56
+ logger.info(`${LOG_PREFIX} Pulled ${manifestId} from cloud`);
57
+ return { manifestId, action: 'pulled' };
58
+ }
59
+ if (localData) {
60
+ return pushToCloud(runtime, manifestId, localData, localHash, syncState, helpers);
61
+ }
62
+ return { manifestId, action: 'skipped', message: 'No actionable state' };
63
+ }
64
+ async function loadRemoteData(runtime, manifestId, helpers) {
65
+ try {
66
+ const cloudAdapter = await runtime
67
+ .query('storage/adapter')
68
+ .filter((d) => d.id === 'storage.cloud-api')
69
+ .resolve();
70
+ if (!cloudAdapter)
71
+ return { remoteData: null, remoteHash: null };
72
+ const descriptor = runtime
73
+ .query('storage/manifest')
74
+ .filter((d) => d.id === manifestId)
75
+ .firstDescriptor();
76
+ if (!descriptor)
77
+ return { remoteData: null, remoteHash: null };
78
+ const adapter = cloudAdapter;
79
+ const cloudConfig = descriptor.adapterConfig?.['storage.cloud-api'];
80
+ if (cloudConfig?.endpoint) {
81
+ adapter.registerEndpoint(descriptor.namespace, cloudConfig.endpoint);
82
+ }
83
+ await adapter.ensureReady();
84
+ const store = adapter.documentStore(descriptor.namespace, descriptor.schema);
85
+ const remoteData = await store.load();
86
+ const remoteHash = remoteData ? helpers.computeHash(remoteData) : null;
87
+ return { remoteData, remoteHash };
88
+ }
89
+ catch (error) {
90
+ logger.debug(`${LOG_PREFIX} Cloud read failed for ${manifestId}`, {
91
+ error: error.message
92
+ });
93
+ return { remoteData: null, remoteHash: null };
94
+ }
95
+ }
96
+ async function pushToCloud(runtime, manifestId, localData, localHash, syncState, helpers) {
97
+ if (helpers.dryRun) {
98
+ return { manifestId, action: 'pushed', message: '[dry-run] Would push to cloud' };
99
+ }
100
+ try {
101
+ const cloudAdapter = await runtime
102
+ .query('storage/adapter')
103
+ .filter((d) => d.id === 'storage.cloud-api')
104
+ .resolve();
105
+ if (!cloudAdapter) {
106
+ helpers.markLocalAhead(syncState, manifestId, localHash ?? '');
107
+ return { manifestId, action: 'skipped', message: 'Cloud adapter not available for push' };
108
+ }
109
+ const descriptor = runtime
110
+ .query('storage/manifest')
111
+ .filter((d) => d.id === manifestId)
112
+ .firstDescriptor();
113
+ const adapter = cloudAdapter;
114
+ if (!descriptor) {
115
+ helpers.markLocalAhead(syncState, manifestId, localHash ?? '');
116
+ return {
117
+ manifestId,
118
+ action: 'skipped',
119
+ message: 'Manifest descriptor not registered for push'
120
+ };
121
+ }
122
+ // Register per-manifest endpoint override
123
+ const cloudConfig = descriptor.adapterConfig?.['storage.cloud-api'];
124
+ if (cloudConfig?.endpoint) {
125
+ adapter.registerEndpoint(descriptor.namespace, cloudConfig.endpoint);
126
+ }
127
+ await adapter.ensureReady();
128
+ const store = adapter.documentStore(descriptor.namespace, descriptor.schema);
129
+ await store.save(localData);
130
+ helpers.markSynced(syncState, manifestId, localHash ?? '', 'push');
131
+ logger.info(`${LOG_PREFIX} Pushed ${manifestId} to cloud`);
132
+ return { manifestId, action: 'pushed' };
133
+ }
134
+ catch (error) {
135
+ const msg = error.message;
136
+ helpers.markError(syncState, manifestId, msg);
137
+ return { manifestId, action: 'error', message: `Push failed: ${msg}` };
138
+ }
139
+ }
140
+ //# sourceMappingURL=sync-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-manifest.js","sourceRoot":"","sources":["../../src/sync/sync-manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Storage Sync State Tracking (Consumer)
3
+ *
4
+ * Tracks per-manifest sync state: hashes, timestamps, and conflict status.
5
+ * Stored in ~/.vibes/sync-state.json via direct JSON I/O (intentionally
6
+ * bypasses StorageManifest to avoid circular dependency).
7
+ *
8
+ * Consumer-scoped: uses host fs for persistence.
9
+ */
10
+ import { type SyncState, type ManifestSyncState } from './schemas/sync-state';
11
+ export type { SyncState, SyncStatus, ManifestSyncState } from './schemas/sync-state';
12
+ export declare function loadSyncState(): Promise<SyncState>;
13
+ export declare function saveSyncState(state: SyncState): Promise<void>;
14
+ export declare function getManifestSyncState(state: SyncState, manifestId: string): ManifestSyncState;
15
+ export declare function updateManifestSyncState(state: SyncState, manifestId: string, update: Partial<ManifestSyncState>): void;
16
+ export declare function markSynced(state: SyncState, manifestId: string, hash: string, direction: 'push' | 'pull'): void;
17
+ export declare function markLocalAhead(state: SyncState, manifestId: string, localHash: string): void;
18
+ export declare function markRemoteAhead(state: SyncState, manifestId: string, remoteHash: string): void;
19
+ export declare function markConflict(state: SyncState, manifestId: string, localHash: string, remoteHash: string): void;
20
+ export declare function markError(state: SyncState, manifestId: string, errorMessage: string): void;
21
+ export declare function markAllPaused(state: SyncState): void;
22
+ export declare function computeHash(data: unknown): string;
23
+ //# sourceMappingURL=sync-state.consumer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-state.consumer.d.ts","sourceRoot":"","sources":["../../src/sync/sync-state.consumer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,EAAmB,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG/F,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AA2BrF,wBAAsB,aAAa,IAAI,OAAO,CAAC,SAAS,CAAC,CAaxD;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAUnE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,iBAAiB,CAE5F;AAED,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAChC,IAAI,CAGN;AAED,wBAAgB,UAAU,CACzB,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAAG,MAAM,GACxB,IAAI,CAWN;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAM5F;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAM9F;AAED,wBAAgB,YAAY,CAC3B,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GAChB,IAAI,CAMN;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAE1F;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAIpD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEjD"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Storage Sync State Tracking (Consumer)
3
+ *
4
+ * Tracks per-manifest sync state: hashes, timestamps, and conflict status.
5
+ * Stored in ~/.vibes/sync-state.json via direct JSON I/O (intentionally
6
+ * bypasses StorageManifest to avoid circular dependency).
7
+ *
8
+ * Consumer-scoped: uses host fs for persistence.
9
+ */
10
+ import { existsSync } from 'fs';
11
+ import { join } from 'path';
12
+ import { homedir } from 'os';
13
+ import { createHash } from 'node:crypto';
14
+ import { SyncStateSchema } from './schemas/sync-state.js';
15
+ const SYNC_STATE_DIR = join(homedir(), '.vibes');
16
+ const SYNC_STATE_PATH = join(SYNC_STATE_DIR, 'sync-state.json');
17
+ function createDefaultState() {
18
+ return {
19
+ version: 1,
20
+ updatedAt: new Date().toISOString(),
21
+ manifests: {}
22
+ };
23
+ }
24
+ function createDefaultManifestState(manifestId) {
25
+ return {
26
+ manifestId,
27
+ localHash: null,
28
+ remoteHash: null,
29
+ lastLocalChange: null,
30
+ lastRemoteChange: null,
31
+ lastSyncAt: null,
32
+ lastSyncDirection: null,
33
+ syncStatus: 'never-synced',
34
+ errorMessage: null
35
+ };
36
+ }
37
+ export async function loadSyncState() {
38
+ if (!existsSync(SYNC_STATE_PATH)) {
39
+ return createDefaultState();
40
+ }
41
+ try {
42
+ const { readFile } = await import('node:fs/promises');
43
+ const raw = await readFile(SYNC_STATE_PATH, 'utf-8');
44
+ const parsed = JSON.parse(raw);
45
+ return SyncStateSchema.parse(parsed);
46
+ }
47
+ catch {
48
+ return createDefaultState();
49
+ }
50
+ }
51
+ export async function saveSyncState(state) {
52
+ state.updatedAt = new Date().toISOString();
53
+ if (!existsSync(SYNC_STATE_DIR)) {
54
+ const { mkdir } = await import('node:fs/promises');
55
+ await mkdir(SYNC_STATE_DIR, { recursive: true });
56
+ }
57
+ const { writeFile } = await import('node:fs/promises');
58
+ await writeFile(SYNC_STATE_PATH, JSON.stringify(state, null, 2));
59
+ }
60
+ export function getManifestSyncState(state, manifestId) {
61
+ return state.manifests[manifestId] ?? createDefaultManifestState(manifestId);
62
+ }
63
+ export function updateManifestSyncState(state, manifestId, update) {
64
+ const current = getManifestSyncState(state, manifestId);
65
+ state.manifests[manifestId] = { ...current, ...update, manifestId };
66
+ }
67
+ export function markSynced(state, manifestId, hash, direction) {
68
+ const now = new Date().toISOString();
69
+ updateManifestSyncState(state, manifestId, {
70
+ localHash: hash,
71
+ remoteHash: hash,
72
+ lastSyncAt: now,
73
+ lastSyncDirection: direction,
74
+ syncStatus: 'in-sync',
75
+ errorMessage: null,
76
+ ...(direction === 'push' ? { lastLocalChange: now } : { lastRemoteChange: now })
77
+ });
78
+ }
79
+ export function markLocalAhead(state, manifestId, localHash) {
80
+ updateManifestSyncState(state, manifestId, {
81
+ localHash,
82
+ lastLocalChange: new Date().toISOString(),
83
+ syncStatus: 'local-ahead'
84
+ });
85
+ }
86
+ export function markRemoteAhead(state, manifestId, remoteHash) {
87
+ updateManifestSyncState(state, manifestId, {
88
+ remoteHash,
89
+ lastRemoteChange: new Date().toISOString(),
90
+ syncStatus: 'remote-ahead'
91
+ });
92
+ }
93
+ export function markConflict(state, manifestId, localHash, remoteHash) {
94
+ updateManifestSyncState(state, manifestId, {
95
+ localHash,
96
+ remoteHash,
97
+ syncStatus: 'conflict'
98
+ });
99
+ }
100
+ export function markError(state, manifestId, errorMessage) {
101
+ updateManifestSyncState(state, manifestId, { errorMessage });
102
+ }
103
+ export function markAllPaused(state) {
104
+ for (const manifestId of Object.keys(state.manifests)) {
105
+ updateManifestSyncState(state, manifestId, { syncStatus: 'paused' });
106
+ }
107
+ }
108
+ export function computeHash(data) {
109
+ return createHash('sha256').update(JSON.stringify(data)).digest('hex');
110
+ }
111
+ //# sourceMappingURL=sync-state.consumer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-state.consumer.js","sourceRoot":"","sources":["../../src/sync/sync-state.consumer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Storage transform registration + resolution helpers.
3
+ *
4
+ * Plugins register transforms via `createStorageTransform()` (returns
5
+ * descriptor + implementation) and `runtime.registerDescriptor` +
6
+ * `runtime.registerLoader`. Consumers (typically `vibesCrudCollection`)
7
+ * call `resolveStorageTransform(runtime, id)` to pull both the descriptor
8
+ * metadata and the live `fromRow` / `toRow` functions.
9
+ *
10
+ * The runtime kind itself (`storage/transform`) is declared in
11
+ * `storage.plugin.ts` so it's available before any app plugin tries to
12
+ * register against it.
13
+ */
14
+ import type { RuntimeImplementationWrapper } from '@vibesdotdev/runtime';
15
+ import { type StorageTransformDescriptor, type StorageTransformImplementation } from './transform-descriptor.ts';
16
+ export { StorageTransformDescriptorSchema, type StorageTransformDescriptor, type StorageTransformImplementation } from './transform-descriptor.ts';
17
+ /**
18
+ * Minimal shape required from the runtime for transform resolution.
19
+ * Avoids a hard import of `VibesRuntime` so this module stays
20
+ * dependency-light.
21
+ */
22
+ interface RuntimeForTransform {
23
+ query(kind: string): {
24
+ withId(id: string): {
25
+ firstDescriptor?: () => StorageTransformDescriptor | null;
26
+ resolve?: () => Promise<unknown> | unknown;
27
+ };
28
+ };
29
+ }
30
+ export interface CreateStorageTransformOptions<TRow, TDescriptor> {
31
+ /** Stable id, typically `<manifest-id>` (e.g. `'ai.providers'`). */
32
+ id: string;
33
+ /** Storage manifest this transform is paired with. */
34
+ manifestId?: string;
35
+ /** Human description for diagnostics. */
36
+ description?: string;
37
+ /** Row → descriptor mapping (read path). */
38
+ fromRow: (row: TRow) => TDescriptor;
39
+ /** Descriptor → row mapping (write path). Omit for read-only manifests. */
40
+ toRow?: (descriptor: Partial<TDescriptor>) => Partial<TRow>;
41
+ }
42
+ /**
43
+ * Build the descriptor + runtime implementation pair for a transform.
44
+ *
45
+ * Usage from an app-local plugin / hook:
46
+ *
47
+ * ```ts
48
+ * const aiProvidersTransform = createStorageTransform<ProviderRow, ProviderDescriptor>({
49
+ * id: 'ai.providers',
50
+ * manifestId: 'ai.providers',
51
+ * fromRow: (row) => ({ id: row.id, kind: 'ai/provider', ... }),
52
+ * toRow: (d) => ({ name: d.name, ... })
53
+ * });
54
+ *
55
+ * runtime.registerDescriptor('storage/transform', aiProvidersTransform.descriptor);
56
+ * runtime.registerLoader(
57
+ * 'storage/transform',
58
+ * aiProvidersTransform.descriptor.id,
59
+ * async () => aiProvidersTransform.implementation
60
+ * );
61
+ * ```
62
+ */
63
+ export declare function createStorageTransform<TRow, TDescriptor>(options: CreateStorageTransformOptions<TRow, TDescriptor>): {
64
+ descriptor: StorageTransformDescriptor;
65
+ implementation: RuntimeImplementationWrapper<StorageTransformImplementation<TRow, TDescriptor>>;
66
+ };
67
+ /**
68
+ * Resolve a transform's live implementation from the runtime by id.
69
+ *
70
+ * Returns `null` when no transform is registered for the id — callers
71
+ * should treat that as "no row↔descriptor mapping configured" and fall
72
+ * back to identity (the row IS the descriptor wire shape).
73
+ */
74
+ export declare function resolveStorageTransform<TRow = unknown, TDescriptor = unknown>(runtime: RuntimeForTransform, id: string): Promise<StorageTransformImplementation<TRow, TDescriptor> | null>;
75
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transform/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAEN,KAAK,0BAA0B,EAC/B,KAAK,8BAA8B,EACnC,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACN,gCAAgC,EAChC,KAAK,0BAA0B,EAC/B,KAAK,8BAA8B,EACnC,MAAM,2BAA2B,CAAC;AAKnC;;;;GAIG;AACH,UAAU,mBAAmB;IAC5B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG;QACpB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG;YACnB,eAAe,CAAC,EAAE,MAAM,0BAA0B,GAAG,IAAI,CAAC;YAC1D,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;SAC3C,CAAC;KACF,CAAC;CACF;AAED,MAAM,WAAW,6BAA6B,CAAC,IAAI,EAAE,WAAW;IAC/D,oEAAoE;IACpE,EAAE,EAAE,MAAM,CAAC;IACX,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,WAAW,CAAC;IACpC,2EAA2E;IAC3E,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5D;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,WAAW,EACvD,OAAO,EAAE,6BAA6B,CAAC,IAAI,EAAE,WAAW,CAAC,GACvD;IACF,UAAU,EAAE,0BAA0B,CAAC;IACvC,cAAc,EAAE,4BAA4B,CAAC,8BAA8B,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;CAChG,CAqBA;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,GAAG,OAAO,EAAE,WAAW,GAAG,OAAO,EAClF,OAAO,EAAE,mBAAmB,EAC5B,EAAE,EAAE,MAAM,GACR,OAAO,CAAC,8BAA8B,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,CAYnE"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Storage transform registration + resolution helpers.
3
+ *
4
+ * Plugins register transforms via `createStorageTransform()` (returns
5
+ * descriptor + implementation) and `runtime.registerDescriptor` +
6
+ * `runtime.registerLoader`. Consumers (typically `vibesCrudCollection`)
7
+ * call `resolveStorageTransform(runtime, id)` to pull both the descriptor
8
+ * metadata and the live `fromRow` / `toRow` functions.
9
+ *
10
+ * The runtime kind itself (`storage/transform`) is declared in
11
+ * `storage.plugin.ts` so it's available before any app plugin tries to
12
+ * register against it.
13
+ */
14
+ import { createRuntimeImplementation } from '@vibesdotdev/runtime';
15
+ import { StorageTransformDescriptorSchema } from "./transform-descriptor.js";
16
+ export { StorageTransformDescriptorSchema } from "./transform-descriptor.js";
17
+ /**
18
+ * Build the descriptor + runtime implementation pair for a transform.
19
+ *
20
+ * Usage from an app-local plugin / hook:
21
+ *
22
+ * ```ts
23
+ * const aiProvidersTransform = createStorageTransform<ProviderRow, ProviderDescriptor>({
24
+ * id: 'ai.providers',
25
+ * manifestId: 'ai.providers',
26
+ * fromRow: (row) => ({ id: row.id, kind: 'ai/provider', ... }),
27
+ * toRow: (d) => ({ name: d.name, ... })
28
+ * });
29
+ *
30
+ * runtime.registerDescriptor('storage/transform', aiProvidersTransform.descriptor);
31
+ * runtime.registerLoader(
32
+ * 'storage/transform',
33
+ * aiProvidersTransform.descriptor.id,
34
+ * async () => aiProvidersTransform.implementation
35
+ * );
36
+ * ```
37
+ */
38
+ export function createStorageTransform(options) {
39
+ const direction = options.toRow ? 'bidirectional' : 'read';
40
+ const descriptor = StorageTransformDescriptorSchema.parse({
41
+ kind: 'storage/transform',
42
+ id: options.id,
43
+ manifestId: options.manifestId,
44
+ description: options.description,
45
+ direction
46
+ });
47
+ const impl = options.toRow
48
+ ? { fromRow: options.fromRow, toRow: options.toRow }
49
+ : { fromRow: options.fromRow };
50
+ const implementation = createRuntimeImplementation({
51
+ id: descriptor.id,
52
+ kind: 'storage/transform',
53
+ implementation: impl
54
+ });
55
+ return { descriptor, implementation };
56
+ }
57
+ /**
58
+ * Resolve a transform's live implementation from the runtime by id.
59
+ *
60
+ * Returns `null` when no transform is registered for the id — callers
61
+ * should treat that as "no row↔descriptor mapping configured" and fall
62
+ * back to identity (the row IS the descriptor wire shape).
63
+ */
64
+ export async function resolveStorageTransform(runtime, id) {
65
+ const scoped = runtime.query('storage/transform').withId(id);
66
+ if (typeof scoped.resolve !== 'function')
67
+ return null;
68
+ try {
69
+ const resolved = await scoped.resolve();
70
+ if (!resolved || typeof resolved !== 'object')
71
+ return null;
72
+ const impl = resolved;
73
+ if (typeof impl.fromRow !== 'function')
74
+ return null;
75
+ return impl;
76
+ }
77
+ catch {
78
+ return null;
79
+ }
80
+ }
81
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transform/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAEnE,OAAO,EACN,gCAAgC,EAGhC,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACN,gCAAgC,EAGhC,MAAM,2BAA2B,CAAC;AAgCnC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,sBAAsB,CACrC,OAAyD;IAKzD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3D,MAAM,UAAU,GAAG,gCAAgC,CAAC,KAAK,CAAC;QACzD,IAAI,EAAE,mBAAmB;QACzB,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,SAAS;KACT,CAAC,CAAC;IAEH,MAAM,IAAI,GAAsD,OAAO,CAAC,KAAK;QAC5E,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;QACpD,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;IAEhC,MAAM,cAAc,GAAG,2BAA2B,CAAC;QAClD,EAAE,EAAE,UAAU,CAAC,EAAE;QACjB,IAAI,EAAE,mBAAmB;QACzB,cAAc,EAAE,IAAI;KACpB,CAAoF,CAAC;IAEtF,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;AACvC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC5C,OAA4B,EAC5B,EAAU;IAEV,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7D,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IACtD,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACxC,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3D,MAAM,IAAI,GAAG,QAAsE,CAAC;QACpF,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC;QACpD,OAAO,IAAyD,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Storage Transform Descriptor Schema
3
+ *
4
+ * Descriptors for `storage/transform` runtime kind. A transform converts
5
+ * between a storage-adapter row shape (e.g. a Drizzle row from `model_providers`)
6
+ * and the manifest's wire-shape descriptor (e.g. `AIProviderDescriptor`).
7
+ *
8
+ * The descriptor is data (id + metadata); the actual `fromRow` / `toRow`
9
+ * functions live in the runtime implementation registered via
10
+ * `runtime.registerLoader('storage/transform', id, ...)`. This split keeps
11
+ * descriptors serializable while implementations can hold closures.
12
+ */
13
+ import * as z from 'zod/v4';
14
+ export declare const StorageTransformDescriptorSchema: z.ZodObject<{
15
+ id: z.ZodString;
16
+ name: z.ZodOptional<z.ZodString>;
17
+ description: z.ZodOptional<z.ZodString>;
18
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
19
+ hardware: z.ZodOptional<z.ZodArray<z.ZodString>>;
20
+ enabled: z.ZodOptional<z.ZodBoolean>;
21
+ priority: z.ZodOptional<z.ZodNumber>;
22
+ requiredContext: z.ZodOptional<z.ZodArray<z.ZodString>>;
23
+ optionalContext: z.ZodOptional<z.ZodArray<z.ZodString>>;
24
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
25
+ kind: z.ZodLiteral<"storage/transform">;
26
+ manifestId: z.ZodOptional<z.ZodString>;
27
+ direction: z.ZodDefault<z.ZodEnum<{
28
+ read: "read";
29
+ write: "write";
30
+ bidirectional: "bidirectional";
31
+ }>>;
32
+ }, z.core.$strip>;
33
+ export type StorageTransformDescriptor = z.infer<typeof StorageTransformDescriptorSchema>;
34
+ /**
35
+ * Runtime implementation interface for `storage/transform`.
36
+ *
37
+ * `TRow` is the storage adapter's native row shape (a Drizzle `$inferSelect`
38
+ * type for `storage.drizzle.*`, a JSON-blob shape for `storage.json`, etc.).
39
+ * `TDescriptor` is the wire-shape descriptor consumed by manifests and
40
+ * exposed to cross-app callers via `vibesCrudCollection`.
41
+ */
42
+ export interface StorageTransformImplementation<TRow = unknown, TDescriptor = unknown> {
43
+ /** Map a single row from the storage adapter into a wire-shape descriptor. */
44
+ fromRow(row: TRow): TDescriptor;
45
+ /**
46
+ * Map a wire-shape descriptor (or partial patch) into an adapter row
47
+ * shape suitable for insert/update. Omit for read-only transforms.
48
+ */
49
+ toRow?(descriptor: Partial<TDescriptor>): Partial<TRow>;
50
+ }
51
+ //# sourceMappingURL=transform-descriptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-descriptor.d.ts","sourceRoot":"","sources":["../../src/transform/transform-descriptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAG5B,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;iBAgB3C,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAC;AAE1F;;;;;;;GAOG;AACH,MAAM,WAAW,8BAA8B,CAAC,IAAI,GAAG,OAAO,EAAE,WAAW,GAAG,OAAO;IACpF,8EAA8E;IAC9E,OAAO,CAAC,GAAG,EAAE,IAAI,GAAG,WAAW,CAAC;IAChC;;;OAGG;IACH,KAAK,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Storage Transform Descriptor Schema
3
+ *
4
+ * Descriptors for `storage/transform` runtime kind. A transform converts
5
+ * between a storage-adapter row shape (e.g. a Drizzle row from `model_providers`)
6
+ * and the manifest's wire-shape descriptor (e.g. `AIProviderDescriptor`).
7
+ *
8
+ * The descriptor is data (id + metadata); the actual `fromRow` / `toRow`
9
+ * functions live in the runtime implementation registered via
10
+ * `runtime.registerLoader('storage/transform', id, ...)`. This split keeps
11
+ * descriptors serializable while implementations can hold closures.
12
+ */
13
+ import * as z from 'zod/v4';
14
+ import { RuntimeDescriptorSchema } from '@vibesdotdev/runtime/schemas/descriptor';
15
+ export const StorageTransformDescriptorSchema = RuntimeDescriptorSchema.extend({
16
+ kind: z.literal('storage/transform'),
17
+ /**
18
+ * Optional binding to a `storage/manifest` descriptor — most transforms
19
+ * exist to serve one specific manifest. Helpers can verify that the
20
+ * caller's descriptor matches when resolving by id.
21
+ */
22
+ manifestId: z.string().optional(),
23
+ /**
24
+ * Direction this transform supports. `'bidirectional'` is the common
25
+ * case (DB row ↔ wire descriptor); `'read'` means the manifest is
26
+ * read-only over HTTP (no write-path mapping needed).
27
+ */
28
+ direction: z.enum(['read', 'write', 'bidirectional']).default('bidirectional')
29
+ });
30
+ //# sourceMappingURL=transform-descriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-descriptor.js","sourceRoot":"","sources":["../../src/transform/transform-descriptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAElF,MAAM,CAAC,MAAM,gCAAgC,GAAG,uBAAuB,CAAC,MAAM,CAAC;IAC9E,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC;IAEpC;;;;OAIG;IACH,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAEjC;;;;OAIG;IACH,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;CAC9E,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Storage Explorer — tui/app descriptor
3
+ *
4
+ * Interactive storage browser for inspecting adapter health,
5
+ * browsing namespaces, and viewing stored entries.
6
+ *
7
+ * NOTE: The actual TUI types (TuiAppDescriptor) live in @vibesdotdev/tui, but
8
+ * storage must not depend on tui in production (that would re-create the cycle).
9
+ * We declare the shape inline here using the base RuntimeDescriptor-compatible fields.
10
+ */
11
+ import type { RuntimeDescriptor } from '@vibesdotdev/runtime';
12
+ declare const descriptor: RuntimeDescriptor & Record<string, unknown>;
13
+ export default descriptor;
14
+ //# sourceMappingURL=storage-explorer.descriptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-explorer.descriptor.d.ts","sourceRoot":"","sources":["../../src/tui/storage-explorer.descriptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,QAAA,MAAM,UAAU,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAgBZ,CAAC;AAEjD,eAAe,UAAU,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Storage Explorer — tui/app descriptor
3
+ *
4
+ * Interactive storage browser for inspecting adapter health,
5
+ * browsing namespaces, and viewing stored entries.
6
+ *
7
+ * NOTE: The actual TUI types (TuiAppDescriptor) live in @vibesdotdev/tui, but
8
+ * storage must not depend on tui in production (that would re-create the cycle).
9
+ * We declare the shape inline here using the base RuntimeDescriptor-compatible fields.
10
+ */
11
+ const descriptor = {
12
+ kind: 'tui/app',
13
+ id: 'storage.explorer',
14
+ name: 'Storage Explorer',
15
+ description: 'Inspect storage adapters, namespaces, and persisted runtime data.',
16
+ tags: ['system', 'ops'],
17
+ // TUI-specific fields passed through as opaque data
18
+ title: 'Storage Explorer',
19
+ icon: '🗄',
20
+ category: 'System',
21
+ audience: 'ops',
22
+ order: 5,
23
+ route: '/storage',
24
+ sidebar: true,
25
+ embeddable: true,
26
+ enabled: true
27
+ };
28
+ export default descriptor;
29
+ //# sourceMappingURL=storage-explorer.descriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-explorer.descriptor.js","sourceRoot":"","sources":["../../src/tui/storage-explorer.descriptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,UAAU,GAAgD;IAC/D,IAAI,EAAE,SAAS;IACf,EAAE,EAAE,kBAAkB;IACtB,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,mEAAmE;IAChF,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;IACvB,oDAAoD;IACpD,KAAK,EAAE,kBAAkB;IACzB,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,KAAK;IACf,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,UAAU;IACjB,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,IAAI;CACkC,CAAC;AAEjD,eAAe,UAAU,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Storage Explorer TUI implementation (consumer stub).
3
+ *
4
+ * The actual implementation requires @vibesdotdev/tui components.
5
+ * This stub is loaded at runtime only when the TUI stack is present.
6
+ * When TUI is not available, the onRegister hook in storage.plugin.ts
7
+ * skips registration entirely via runtime.hasKind('tui/app').
8
+ */
9
+ declare const implementation: Record<string, unknown>;
10
+ export default implementation;
11
+ //# sourceMappingURL=storage-explorer.impl.consumer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-explorer.impl.consumer.d.ts","sourceRoot":"","sources":["../../src/tui/storage-explorer.impl.consumer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,QAAA,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAE3C,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Storage Explorer TUI implementation (consumer stub).
3
+ *
4
+ * The actual implementation requires @vibesdotdev/tui components.
5
+ * This stub is loaded at runtime only when the TUI stack is present.
6
+ * When TUI is not available, the onRegister hook in storage.plugin.ts
7
+ * skips registration entirely via runtime.hasKind('tui/app').
8
+ */
9
+ const implementation = {
10
+ render: () => ({ type: 'placeholder', message: 'Storage Explorer requires TUI runtime' })
11
+ };
12
+ export default implementation;
13
+ //# sourceMappingURL=storage-explorer.impl.consumer.js.map