@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,67 @@
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
+ import * as z from 'zod/v4';
12
+ import { RuntimeDescriptorSchema } from '@vibesdotdev/runtime/schemas/descriptor';
13
+ export const SyncDirectionSchema = z.enum(['bidirectional', 'push-only', 'pull-only']);
14
+ export const ConflictStrategySchema = z.enum(['local-wins', 'remote-wins', 'manual', 'newest']);
15
+ export const OwnershipFilterSchema = z.enum(['all', 'user-only', 'system-only']);
16
+ /**
17
+ * Schema for a sync-bridge descriptor.
18
+ *
19
+ * Extends RuntimeDescriptor with source/target/sync configuration.
20
+ */
21
+ export const SyncBridgeDescriptorSchema = RuntimeDescriptorSchema.extend({
22
+ kind: z.literal('storage/sync-bridge'),
23
+ /** Source: where descriptors live locally */
24
+ source: z.object({
25
+ /** The runtime kind ID to collect descriptors from (e.g. 'dev/benchmark-suite') */
26
+ runtimeKind: z.string().min(1),
27
+ /** Optional: field on the descriptor that holds the version number */
28
+ versionField: z.string().optional(),
29
+ /** Optional: field on the descriptor that holds the source type ('system' | 'user') */
30
+ sourceTypeField: z.string().optional()
31
+ }),
32
+ /** Target: the cloud CRUD API to sync against */
33
+ target: z.object({
34
+ /** API path for the collection endpoint (e.g. '/api/dev/benchmarks') */
35
+ apiPath: z.string().min(1),
36
+ /** API path for a single entity, with :id placeholder (e.g. '/api/dev/benchmarks/:id') */
37
+ entityPath: z.string().optional(),
38
+ /** The field name in API responses that contains the list of items */
39
+ listField: z.string().optional(),
40
+ /** The field name for the total count in list responses */
41
+ totalField: z.string().optional(),
42
+ /** Request soft-deleted rows when the remote API supports it */
43
+ includeDeleted: z.boolean().optional()
44
+ }),
45
+ /** Sync behavior configuration */
46
+ sync: z
47
+ .object({
48
+ /** Sync direction */
49
+ direction: SyncDirectionSchema.default('bidirectional'),
50
+ /** Which entities to sync based on ownership */
51
+ ownershipFilter: OwnershipFilterSchema.default('all'),
52
+ /** How to handle conflicts when both sides changed */
53
+ conflictStrategy: ConflictStrategySchema.default('local-wins'),
54
+ /** Fields to strip before pushing to cloud (e.g. secrets) */
55
+ sensitiveFields: z.array(z.string()).default([]),
56
+ /** The field that uniquely identifies an entity */
57
+ idField: z.string().default('id')
58
+ })
59
+ .default({
60
+ direction: 'bidirectional',
61
+ ownershipFilter: 'all',
62
+ conflictStrategy: 'local-wins',
63
+ sensitiveFields: [],
64
+ idField: 'id'
65
+ })
66
+ }).passthrough();
67
+ //# sourceMappingURL=sync-bridge-descriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-bridge-descriptor.js","sourceRoot":"","sources":["../../src/schemas/sync-bridge-descriptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAElF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;AAGvF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAGhG,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;AAGjF;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,uBAAuB,CAAC,MAAM,CAAC;IACxE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC;IAEtC,6CAA6C;IAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,mFAAmF;QACnF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAE9B,sEAAsE;QACtE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAEnC,uFAAuF;QACvF,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACtC,CAAC;IAEF,iDAAiD;IACjD,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,wEAAwE;QACxE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAE1B,0FAA0F;QAC1F,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAEjC,sEAAsE;QACtE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAEhC,2DAA2D;QAC3D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAEjC,gEAAgE;QAChE,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;KACtC,CAAC;IAEF,kCAAkC;IAClC,IAAI,EAAE,CAAC;SACL,MAAM,CAAC;QACP,qBAAqB;QACrB,SAAS,EAAE,mBAAmB,CAAC,OAAO,CAAC,eAAe,CAAC;QAEvD,gDAAgD;QAChD,eAAe,EAAE,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC;QAErD,sDAAsD;QACtD,gBAAgB,EAAE,sBAAsB,CAAC,OAAO,CAAC,YAAY,CAAC;QAE9D,6DAA6D;QAC7D,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QAEhD,mDAAmD;QACnD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;KACjC,CAAC;SACD,OAAO,CAAC;QACR,SAAS,EAAE,eAAe;QAC1B,eAAe,EAAE,KAAK;QACtB,gBAAgB,EAAE,YAAY;QAC9B,eAAe,EAAE,EAAE;QACnB,OAAO,EAAE,IAAI;KACb,CAAC;CACH,CAAC,CAAC,WAAW,EAAE,CAAC"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Generic Storage Manifest Route Handler
3
+ *
4
+ * SvelteKit-friendly handler that serves the canonical HTTP surface
5
+ * for `storage/manifest` descriptors via `/api/storage/[id]`.
6
+ *
7
+ * The owning app mounts a single `[id]/+server.ts` that calls
8
+ * `createManifestRouteHandler({ appId, loaders })`. The handler:
9
+ *
10
+ * 1. Looks up the descriptor at `params.id` via the runtime
11
+ * (`runtime.query('storage/manifest').withId(params.id)`).
12
+ * 2. Verifies the descriptor declares the running app as its owner
13
+ * via `adapterConfig['storage.cloud-api'].ownerApp === appId`.
14
+ * Cross-app callers get a 403, which keeps the contract clean
15
+ * and prevents accidental data leaks from a borrower app being
16
+ * asked to serve data it doesn't own.
17
+ * 3. Dispatches to a per-descriptor loader the app provides — one
18
+ * function per descriptor for `load` / `save` / `delete`.
19
+ * Loaders are the bridge between the owning app's local data
20
+ * surface (D1 table, libsql, file, etc.) and the manifest's
21
+ * wire shape that other apps consume via the `storage.cloud-api`
22
+ * adapter.
23
+ *
24
+ * Loaders are registered explicitly per descriptor (not auto-discovered)
25
+ * so the owning app stays in control of validation, authorization, and
26
+ * the local data path. A descriptor without a loader returns 404.
27
+ *
28
+ * Framework-agnostic by design: the handler accepts a structural
29
+ * `ManifestRouteEvent` matching SvelteKit's `RequestEvent` shape but
30
+ * doesn't import `@sveltejs/kit`. Apps re-export the produced GET/PUT/
31
+ * DELETE/HEAD from a `+server.ts` file.
32
+ */
33
+ import type { StorageManifestDescriptor } from '../schemas/manifest-descriptor.ts';
34
+ /**
35
+ * Structural type matching SvelteKit's `RequestEvent`. Keeps this
36
+ * module framework-agnostic. `locals` stays `unknown` because each
37
+ * app types its own `App.Locals` interface without an index signature —
38
+ * loaders cast it as needed.
39
+ */
40
+ export interface ManifestRouteEvent {
41
+ params: Partial<Record<string, string>>;
42
+ request: Request;
43
+ url: URL;
44
+ locals: unknown;
45
+ }
46
+ export type ManifestOperation = 'read' | 'write' | 'delete';
47
+ export interface ManifestLoader<T = unknown> {
48
+ /** Load the full manifest payload (typically a `Record<id, descriptor>`). */
49
+ load: (event: ManifestRouteEvent) => Promise<T | null>;
50
+ /** Optional write path; omit to make the descriptor read-only over HTTP. */
51
+ save?: (event: ManifestRouteEvent, data: T) => Promise<void>;
52
+ /** Optional delete path; omit to make the descriptor non-deletable over HTTP. */
53
+ delete?: (event: ManifestRouteEvent) => Promise<void>;
54
+ /**
55
+ * Optional per-request authorization. Return `false` to send 403.
56
+ * Default: allow all (the SvelteKit auth hooks have already gated
57
+ * unauthenticated traffic before this handler runs).
58
+ */
59
+ authorize?: (event: ManifestRouteEvent, op: ManifestOperation) => boolean | Promise<boolean>;
60
+ /** Optional zod schema for validating PUT bodies before the loader sees them. */
61
+ validate?: (data: unknown) => unknown;
62
+ }
63
+ export interface ManifestRouteOptions {
64
+ /** This app's id; must match `descriptor.adapterConfig['storage.cloud-api'].ownerApp`. */
65
+ appId: string;
66
+ /** Map of descriptor id → loader. Missing entries return 404. */
67
+ loaders: Record<string, ManifestLoader>;
68
+ /**
69
+ * Resolver for the runtime descriptor lookup. Defaults to
70
+ * `(id) => getVibesRuntime().query('storage/manifest').withId(id).firstDescriptor()`.
71
+ * Override for tests.
72
+ */
73
+ resolveDescriptor?: (id: string) => Promise<StorageManifestDescriptor | null>;
74
+ /**
75
+ * Returns the expected `Authorization: Bearer <token>` for internal
76
+ * cross-app calls. When the inbound request's bearer matches, loader
77
+ * `authorize` hooks are bypassed and `event.locals.user` is augmented
78
+ * with `{ id: 'system', isSuperuser: true, internal: true }` so loaders see
79
+ * a system-admin actor. Lets one cloud worker fetch the manifests it
80
+ * doesn't own from the owning worker's `[id]/+server.ts` without
81
+ * forwarding the end-user's session cookie cross-origin.
82
+ */
83
+ internalServiceToken?: () => string | null | undefined;
84
+ }
85
+ export type ManifestRouteHandlers = {
86
+ GET: (event: ManifestRouteEvent) => Promise<Response>;
87
+ PUT: (event: ManifestRouteEvent) => Promise<Response>;
88
+ DELETE: (event: ManifestRouteEvent) => Promise<Response>;
89
+ HEAD: (event: ManifestRouteEvent) => Promise<Response>;
90
+ };
91
+ export declare function createManifestRouteHandler(opts: ManifestRouteOptions): ManifestRouteHandlers;
92
+ //# sourceMappingURL=manifest-route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-route.d.ts","sourceRoot":"","sources":["../../src/server/manifest-route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAGH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAInF;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE5D,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IAC1C,6EAA6E;IAC7E,IAAI,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACvD,4EAA4E;IAC5E,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,iFAAiF;IACjF,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,EAAE,iBAAiB,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7F,iFAAiF;IACjF,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,oBAAoB;IACpC,0FAA0F;IAC1F,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACxC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAC;IAC9E;;;;;;;;OAQG;IACH,oBAAoB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACvD;AAuBD,MAAM,MAAM,qBAAqB,GAAG;IACnC,GAAG,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtD,GAAG,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzD,IAAI,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CACvD,CAAC;AAyEF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,oBAAoB,GAAG,qBAAqB,CA8H5F"}
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Generic Storage Manifest Route Handler
3
+ *
4
+ * SvelteKit-friendly handler that serves the canonical HTTP surface
5
+ * for `storage/manifest` descriptors via `/api/storage/[id]`.
6
+ *
7
+ * The owning app mounts a single `[id]/+server.ts` that calls
8
+ * `createManifestRouteHandler({ appId, loaders })`. The handler:
9
+ *
10
+ * 1. Looks up the descriptor at `params.id` via the runtime
11
+ * (`runtime.query('storage/manifest').withId(params.id)`).
12
+ * 2. Verifies the descriptor declares the running app as its owner
13
+ * via `adapterConfig['storage.cloud-api'].ownerApp === appId`.
14
+ * Cross-app callers get a 403, which keeps the contract clean
15
+ * and prevents accidental data leaks from a borrower app being
16
+ * asked to serve data it doesn't own.
17
+ * 3. Dispatches to a per-descriptor loader the app provides — one
18
+ * function per descriptor for `load` / `save` / `delete`.
19
+ * Loaders are the bridge between the owning app's local data
20
+ * surface (D1 table, libsql, file, etc.) and the manifest's
21
+ * wire shape that other apps consume via the `storage.cloud-api`
22
+ * adapter.
23
+ *
24
+ * Loaders are registered explicitly per descriptor (not auto-discovered)
25
+ * so the owning app stays in control of validation, authorization, and
26
+ * the local data path. A descriptor without a loader returns 404.
27
+ *
28
+ * Framework-agnostic by design: the handler accepts a structural
29
+ * `ManifestRouteEvent` matching SvelteKit's `RequestEvent` shape but
30
+ * doesn't import `@sveltejs/kit`. Apps re-export the produced GET/PUT/
31
+ * DELETE/HEAD from a `+server.ts` file.
32
+ */
33
+ import { getLogger } from '@vibesdotdev/logging';
34
+ const logger = getLogger('storage.manifest-route');
35
+ function tryAuthorizeInternal(event, opts) {
36
+ const expected = opts.internalServiceToken?.()?.trim();
37
+ if (!expected)
38
+ return false;
39
+ const header = event.request.headers.get('authorization');
40
+ if (!header || !header.toLowerCase().startsWith('bearer '))
41
+ return false;
42
+ const presented = header.slice(7).trim();
43
+ if (!presented || presented !== expected)
44
+ return false;
45
+ const augmented = {
46
+ user: { id: 'system', email: 'system@vibes.internal', isSuperuser: true, internal: true }
47
+ };
48
+ event.locals = augmented;
49
+ return true;
50
+ }
51
+ function jsonResponse(status, body) {
52
+ return new Response(JSON.stringify(body), {
53
+ status,
54
+ headers: { 'content-type': 'application/json' }
55
+ });
56
+ }
57
+ async function defaultResolveDescriptor(id) {
58
+ const { getVibesRuntime } = await import('@vibesdotdev/runtime');
59
+ const runtime = getVibesRuntime();
60
+ const scoped = runtime.query('storage/manifest').withId(id);
61
+ if (typeof scoped.firstDescriptor !== 'function')
62
+ return null;
63
+ return scoped.firstDescriptor() ?? null;
64
+ }
65
+ function getOwnerApp(descriptor) {
66
+ const raw = descriptor.adapterConfig?.['storage.cloud-api'];
67
+ if (!raw || typeof raw !== 'object')
68
+ return null;
69
+ const value = raw.ownerApp;
70
+ return typeof value === 'string' && value.length > 0 ? value : null;
71
+ }
72
+ async function resolveAndGate(event, opts) {
73
+ const id = event.params.id;
74
+ if (!id)
75
+ return { ok: false, response: jsonResponse(400, { error: 'Missing descriptor id' }) };
76
+ const resolveDescriptor = opts.resolveDescriptor ?? defaultResolveDescriptor;
77
+ const descriptor = await resolveDescriptor(id);
78
+ if (!descriptor) {
79
+ return { ok: false, response: jsonResponse(404, { error: `Unknown storage descriptor: ${id}` }) };
80
+ }
81
+ const owner = getOwnerApp(descriptor);
82
+ if (!owner) {
83
+ return {
84
+ ok: false,
85
+ response: jsonResponse(403, {
86
+ error: `Descriptor '${id}' does not declare ownerApp. Cross-app HTTP access requires adapterConfig['storage.cloud-api'].ownerApp.`
87
+ })
88
+ };
89
+ }
90
+ if (owner !== opts.appId) {
91
+ return {
92
+ ok: false,
93
+ response: jsonResponse(403, {
94
+ error: `Descriptor '${id}' is owned by '${owner}', not '${opts.appId}'. Request the owning app's origin.`
95
+ })
96
+ };
97
+ }
98
+ const loader = opts.loaders[id];
99
+ if (!loader) {
100
+ return {
101
+ ok: false,
102
+ response: jsonResponse(404, {
103
+ error: `App '${opts.appId}' owns descriptor '${id}' but has not registered a loader for it.`
104
+ })
105
+ };
106
+ }
107
+ return { ok: true, descriptor, loader };
108
+ }
109
+ export function createManifestRouteHandler(opts) {
110
+ if (!opts.appId)
111
+ throw new Error('createManifestRouteHandler: appId is required');
112
+ const authorize = async (event, loader, op, internal) => {
113
+ if (internal)
114
+ return true;
115
+ if (!loader.authorize)
116
+ return true;
117
+ try {
118
+ return await loader.authorize(event, op);
119
+ }
120
+ catch (error) {
121
+ logger.warn(`authorize threw for ${event.params.id}`, {
122
+ error: error instanceof Error ? error.message : String(error)
123
+ });
124
+ return false;
125
+ }
126
+ };
127
+ const GET = async (event) => {
128
+ const gated = await resolveAndGate(event, opts);
129
+ if (!gated.ok)
130
+ return gated.response;
131
+ const internal = tryAuthorizeInternal(event, opts);
132
+ if (!(await authorize(event, gated.loader, 'read', internal))) {
133
+ return jsonResponse(403, { error: 'Forbidden' });
134
+ }
135
+ try {
136
+ const value = await gated.loader.load(event);
137
+ // `{ value }` matches the wire shape consumed by the cloud-api
138
+ // adapter's fetch client (see `cloud-api.fetch-client.ts:131`,
139
+ // `data.value` lookup). Keeping this in lockstep with the adapter
140
+ // means borrower apps get descriptor records back without bespoke
141
+ // translation per app.
142
+ return jsonResponse(200, { value });
143
+ }
144
+ catch (error) {
145
+ logger.error(`load failed for ${event.params.id}`, {
146
+ error: error instanceof Error ? error.message : String(error)
147
+ });
148
+ return jsonResponse(500, { error: 'Failed to load manifest data' });
149
+ }
150
+ };
151
+ const HEAD = async (event) => {
152
+ const gated = await resolveAndGate(event, opts);
153
+ if (!gated.ok) {
154
+ return new Response(null, { status: gated.response.status });
155
+ }
156
+ const internal = tryAuthorizeInternal(event, opts);
157
+ if (!(await authorize(event, gated.loader, 'read', internal))) {
158
+ return new Response(null, { status: 403 });
159
+ }
160
+ try {
161
+ const data = await gated.loader.load(event);
162
+ return new Response(null, { status: data == null ? 404 : 200 });
163
+ }
164
+ catch {
165
+ return new Response(null, { status: 500 });
166
+ }
167
+ };
168
+ const PUT = async (event) => {
169
+ const gated = await resolveAndGate(event, opts);
170
+ if (!gated.ok)
171
+ return gated.response;
172
+ if (!gated.loader.save) {
173
+ return jsonResponse(405, { error: 'Descriptor is read-only over HTTP' });
174
+ }
175
+ const internal = tryAuthorizeInternal(event, opts);
176
+ if (!(await authorize(event, gated.loader, 'write', internal))) {
177
+ return jsonResponse(403, { error: 'Forbidden' });
178
+ }
179
+ let body;
180
+ try {
181
+ body = await event.request.json();
182
+ }
183
+ catch {
184
+ return jsonResponse(400, { error: 'Body must be valid JSON' });
185
+ }
186
+ // Cloud-api fetch client wraps the payload as `{ value: data }`
187
+ // (see `cloud-api.fetch-client.ts:144`). Unwrap once on the server
188
+ // so loaders see the raw manifest record.
189
+ const unwrappedBody = body && typeof body === 'object' && 'value' in body
190
+ ? body.value
191
+ : body;
192
+ try {
193
+ const validated = gated.loader.validate ? gated.loader.validate(unwrappedBody) : unwrappedBody;
194
+ await gated.loader.save(event, validated);
195
+ return jsonResponse(200, { ok: true });
196
+ }
197
+ catch (error) {
198
+ const message = error instanceof Error ? error.message : String(error);
199
+ logger.error(`save failed for ${event.params.id}`, { error: message });
200
+ return jsonResponse(500, { error: 'Failed to save manifest data', detail: message });
201
+ }
202
+ };
203
+ const DELETE = async (event) => {
204
+ const gated = await resolveAndGate(event, opts);
205
+ if (!gated.ok)
206
+ return gated.response;
207
+ if (!gated.loader.delete) {
208
+ return jsonResponse(405, { error: 'Descriptor is not deletable over HTTP' });
209
+ }
210
+ const internal = tryAuthorizeInternal(event, opts);
211
+ if (!(await authorize(event, gated.loader, 'delete', internal))) {
212
+ return jsonResponse(403, { error: 'Forbidden' });
213
+ }
214
+ try {
215
+ await gated.loader.delete(event);
216
+ return jsonResponse(200, { ok: true });
217
+ }
218
+ catch (error) {
219
+ const message = error instanceof Error ? error.message : String(error);
220
+ logger.error(`delete failed for ${event.params.id}`, { error: message });
221
+ return jsonResponse(500, { error: 'Failed to delete manifest data', detail: message });
222
+ }
223
+ };
224
+ return { GET, PUT, DELETE, HEAD };
225
+ }
226
+ //# sourceMappingURL=manifest-route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-route.js","sourceRoot":"","sources":["../../src/server/manifest-route.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Storage Policy Context Descriptor
3
+ *
4
+ * Registers the storage/policy context kind with the runtime.
5
+ * This context provides storage policy resolution and overrides.
6
+ */
7
+ declare const _default: {
8
+ id: string;
9
+ kind: "context";
10
+ name: string;
11
+ description: string;
12
+ tags: string[];
13
+ enabled: true;
14
+ };
15
+ export default _default;
16
+ //# sourceMappingURL=storage-policy.context.descriptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-policy.context.descriptor.d.ts","sourceRoot":"","sources":["../src/storage-policy.context.descriptor.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;;;;;;;;;AACH,wBAQG"}
@@ -0,0 +1,16 @@
1
+ import { createRuntimeAsset } from "@vibesdotdev/runtime/factory/asset";
2
+ /**
3
+ * Storage Policy Context Descriptor
4
+ *
5
+ * Registers the storage/policy context kind with the runtime.
6
+ * This context provides storage policy resolution and overrides.
7
+ */
8
+ export default createRuntimeAsset({
9
+ id: "storage/policy",
10
+ kind: "context",
11
+ name: "Storage Policy Context",
12
+ description: "Provides storage policy resolution and runtime overrides for storage adapters",
13
+ tags: ["storage", "policy", "context"],
14
+ enabled: true,
15
+ });
16
+ //# sourceMappingURL=storage-policy.context.descriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-policy.context.descriptor.js","sourceRoot":"","sources":["../src/storage-policy.context.descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE;;;;;GAKG;AACH,eAAe,kBAAkB,CAAC;IAChC,EAAE,EAAE,gBAAgB;IACpB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EACT,+EAA+E;IACjF,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC;IACtC,OAAO,EAAE,IAAI;CACd,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { StoragePolicyContext } from './policy/types';
2
+ /**
3
+ * Load Storage Policy Context
4
+ *
5
+ * Provides the default storage policy context for consumer environments.
6
+ * The runtime resolves the active adapter through scope-based selection;
7
+ * this context provides the fallback policy when no manifest-specific
8
+ * policy is registered.
9
+ *
10
+ * Apps can register a custom policy context through the runtime's context
11
+ * kind to override these defaults (e.g. cloud apps using API adapters).
12
+ */
13
+ export declare function loadStoragePolicyContext(): Promise<StoragePolicyContext>;
14
+ //# sourceMappingURL=storage-policy.context.server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-policy.context.server.d.ts","sourceRoot":"","sources":["../src/storage-policy.context.server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAwC,MAAM,gBAAgB,CAAC;AAEjG;;;;;;;;;;GAUG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAoB9E"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Load Storage Policy Context
3
+ *
4
+ * Provides the default storage policy context for consumer environments.
5
+ * The runtime resolves the active adapter through scope-based selection;
6
+ * this context provides the fallback policy when no manifest-specific
7
+ * policy is registered.
8
+ *
9
+ * Apps can register a custom policy context through the runtime's context
10
+ * kind to override these defaults (e.g. cloud apps using API adapters).
11
+ */
12
+ export async function loadStoragePolicyContext() {
13
+ return {
14
+ resolveStoragePolicy: async (namespace, options) => {
15
+ return {
16
+ mode: 'persistent',
17
+ adapter: 'localdb',
18
+ namespace,
19
+ ...options
20
+ };
21
+ },
22
+ resolveStoragePolicyOverrides: async (_context) => {
23
+ return {};
24
+ }
25
+ };
26
+ }
27
+ //# sourceMappingURL=storage-policy.context.server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-policy.context.server.js","sourceRoot":"","sources":["../src/storage-policy.context.server.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC7C,OAAO;QACN,oBAAoB,EAAE,KAAK,EAC1B,SAAiB,EACjB,OAAiC,EACR,EAAE;YAC3B,OAAO;gBACN,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,SAAS;gBAClB,SAAS;gBACT,GAAG,OAAO;aACV,CAAC;QACH,CAAC;QAED,6BAA6B,EAAE,KAAK,EACnC,QAAiC,EACA,EAAE;YACnC,OAAO,EAAE,CAAC;QACX,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Storage Plugin
3
+ *
4
+ * Registers storage/adapter, storage/manifest, and storage/record kinds with the runtime.
5
+ * This is the entry point for the storage module's runtime integration.
6
+ *
7
+ * Also registers storage-owned TUI surfaces during activation:
8
+ * - `storage.explorer` (tui/app) — interactive storage browser
9
+ * - `storage.open` (tui/command) — opens the explorer via `/storage`
10
+ */
11
+ /**
12
+ * Storage plugin - registers storage kinds with the runtime.
13
+ *
14
+ * Kinds registered:
15
+ * - `storage/adapter` - Storage backends. Adapter implementations live in sibling
16
+ * packages (`storage-adapter-{memory,json,localdb,cloud-api,drizzle}`) and register
17
+ * themselves via their own plugins. The storage core does not import them.
18
+ * - `storage/manifest` - Storable data type definitions
19
+ * - `storage/record` - Single-table CRUD operations with relations
20
+ * - `storage/sync-bridge` - Declarative runtime kind ↔ cloud CRUD sync
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * import { getVibesRuntime } from '@vibesdotdev/runtime/factory/plugin';
25
+ * import storagePlugin from './storage.plugin';
26
+ *
27
+ * const runtime = getVibesRuntime();
28
+ * await runtime.registerPlugin(storagePlugin);
29
+ *
30
+ * // Now you can query storage adapters
31
+ * const adapter = await runtime.query('storage/adapter')
32
+ * .forHardware('consumer')
33
+ * .resolve();
34
+ * ```
35
+ */
36
+ declare const _default: import("@vibesdotdev/runtime").RuntimePlugin;
37
+ export default _default;
38
+ //# sourceMappingURL=storage.plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.plugin.d.ts","sourceRoot":"","sources":["../src/storage.plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAoJH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;;AACH,wBAiFG"}