@plures/praxis 1.0.3 → 1.1.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 (530) hide show
  1. package/FRAMEWORK.md +55 -5
  2. package/README.md +162 -375
  3. package/core/codegen/docs-generator.ts +5 -2
  4. package/core/codegen/index.ts +1 -1
  5. package/core/db-adapter/index.ts +2 -2
  6. package/core/db-adapter/sync-engine.ts +17 -6
  7. package/core/logic-engine/engine.ts +1 -1
  8. package/core/logic-engine/index.ts +2 -2
  9. package/core/logic-engine/protocol.ts +1 -1
  10. package/core/logic-engine/psf-adapter.ts +8 -4
  11. package/core/logic-engine/rules.ts +1 -1
  12. package/core/schema-engine/compiler.ts +53 -11
  13. package/core/schema-engine/generator.ts +17 -7
  14. package/core/schema-engine/index.ts +2 -2
  15. package/core/schema-engine/psf.ts +12 -3
  16. package/core/schema-engine/types.ts +3 -11
  17. package/core/schema-engine/validator.ts +112 -22
  18. package/dist/browser/engine-BjdqxeXG.d.ts +333 -0
  19. package/dist/browser/index.d.ts +3004 -0
  20. package/dist/browser/index.js +2892 -0
  21. package/dist/{src → browser}/integrations/svelte.d.ts +19 -17
  22. package/dist/browser/integrations/svelte.js +298 -0
  23. package/dist/node/auth-STARLY7I.js +207 -0
  24. package/dist/node/build-Y7OT5VBF.js +144 -0
  25. package/dist/node/canvas-UERZHJYW.js +362 -0
  26. package/dist/node/chunk-DSDC2JWZ.js +256 -0
  27. package/dist/node/chunk-FXQZXAWF.js +175 -0
  28. package/dist/node/chunk-N5Y37EUV.js +202 -0
  29. package/dist/node/chunk-QGM4M3NI.js +37 -0
  30. package/dist/node/chunk-RJMWCNHR.js +175 -0
  31. package/dist/node/chunk-SRM3OPPM.js +404 -0
  32. package/dist/node/chunk-UATVJBNV.js +175 -0
  33. package/dist/node/chunk-UY7YEBE2.js +159 -0
  34. package/dist/node/chunk-XCY2VIFX.js +143 -0
  35. package/dist/node/chunk-YXH4Y7ZZ.js +349 -0
  36. package/dist/node/cli/index.cjs +215139 -0
  37. package/dist/node/cli/index.d.cts +1 -0
  38. package/dist/node/cli/index.d.ts +1 -0
  39. package/dist/node/cli/index.js +690 -0
  40. package/dist/node/cloud/index.cjs +1043 -0
  41. package/dist/node/cloud/index.d.cts +864 -0
  42. package/dist/node/cloud/index.d.ts +864 -0
  43. package/dist/node/cloud/index.js +456 -0
  44. package/dist/node/cloud-AXOK4PSN.js +212 -0
  45. package/dist/node/component.cjs +374 -0
  46. package/dist/node/component.d.cts +125 -0
  47. package/dist/{src/core/component/generator.d.ts → node/component.d.ts} +11 -8
  48. package/dist/node/component.js +9 -0
  49. package/dist/node/components/index.cjs +216 -0
  50. package/dist/node/components/index.d.cts +43 -0
  51. package/dist/{src → node}/components/index.d.ts +8 -8
  52. package/dist/node/components/index.js +7 -0
  53. package/dist/node/create-TRLSVCNQ.js +584 -0
  54. package/dist/node/dev-PMJZUYGE.js +65 -0
  55. package/dist/node/engine-1iqLe6_P.d.ts +214 -0
  56. package/dist/node/engine-CVJobhHm.d.cts +214 -0
  57. package/dist/node/index.cjs +3247 -0
  58. package/dist/node/index.d.cts +2579 -0
  59. package/dist/node/index.d.ts +2579 -0
  60. package/dist/node/index.js +2098 -0
  61. package/dist/node/integrations/svelte.cjs +330 -0
  62. package/dist/node/integrations/svelte.d.cts +309 -0
  63. package/dist/node/integrations/svelte.d.ts +309 -0
  64. package/dist/node/integrations/svelte.js +300 -0
  65. package/dist/node/orchestrate-737TCL5H.js +127 -0
  66. package/dist/{src/core/protocol.d.ts → node/protocol-Qek7ebBl.d.cts} +11 -10
  67. package/dist/node/protocol-Qek7ebBl.d.ts +122 -0
  68. package/dist/node/schema.cjs +200 -0
  69. package/dist/{src/core/schema/types.d.ts → node/schema.d.cts} +30 -29
  70. package/dist/node/schema.d.ts +371 -0
  71. package/dist/node/schema.js +9 -0
  72. package/dist/{src/runtime/terminal-adapter.d.ts → node/terminal-adapter-07HGftGQ.d.ts} +86 -11
  73. package/dist/node/terminal-adapter-XLtCjjb_.d.cts +231 -0
  74. package/dist/node/verify-QRYKRIDU.js +210960 -0
  75. package/docs/MONETIZATION.md +21 -16
  76. package/docs/REACTIVE_REDESIGN.md +132 -0
  77. package/docs/README.md +47 -36
  78. package/docs/SVELTE_INTEGRATION_STRATEGY.md +68 -0
  79. package/docs/TERMINAL_NODE.md +27 -24
  80. package/docs/core/building-extensions.md +58 -61
  81. package/docs/core/cli-usage.md +59 -59
  82. package/docs/core/code-canvas-sync.md +28 -16
  83. package/docs/core/logic-engine.md +77 -82
  84. package/docs/core/pluresdb-integration.md +29 -39
  85. package/docs/core/schema-model.md +66 -52
  86. package/docs/core/ui-generation.md +57 -49
  87. package/docs/core/what-is-praxis.md +32 -15
  88. package/docs/guides/canvas.md +21 -5
  89. package/docs/guides/getting-started.md +13 -7
  90. package/docs/guides/history-state-pattern.md +65 -51
  91. package/docs/guides/orchestration.md +46 -32
  92. package/docs/guides/parallel-state-pattern.md +56 -72
  93. package/docs/guides/svelte-integration.md +45 -53
  94. package/docs/tutorials/README.md +16 -0
  95. package/docs/tutorials/ecommerce-cart.md +177 -95
  96. package/docs/tutorials/first-app.md +26 -41
  97. package/docs/tutorials/form-builder.md +191 -138
  98. package/docs/tutorials/todo-pluresdb.md +71 -69
  99. package/package.json +58 -23
  100. package/src/__tests__/actors.test.ts +68 -68
  101. package/src/__tests__/billing.test.ts +32 -32
  102. package/src/__tests__/canvas-components.test.ts +94 -73
  103. package/src/__tests__/cli-create.test.ts +28 -28
  104. package/src/__tests__/cloud.test.ts +36 -36
  105. package/src/__tests__/code-canvas-integration.test.ts +132 -141
  106. package/src/__tests__/docs-generator.test.ts +3 -9
  107. package/src/__tests__/dsl.test.ts +58 -64
  108. package/src/__tests__/edge-cases.test.ts +106 -108
  109. package/src/__tests__/engine.test.ts +51 -25
  110. package/src/__tests__/generators.test.ts +42 -44
  111. package/src/__tests__/introspection.test.ts +104 -114
  112. package/src/__tests__/pluresdb.test.ts +189 -187
  113. package/src/__tests__/protocol.test.ts +15 -15
  114. package/src/__tests__/provisioning.test.ts +61 -61
  115. package/src/__tests__/schema.test.ts +7 -11
  116. package/src/__tests__/state-docs-integration.test.ts +162 -145
  117. package/src/__tests__/svelte-integration.test.ts +16 -19
  118. package/src/__tests__/tauri-integration.test.ts +149 -147
  119. package/src/__tests__/terminal-node.test.ts +12 -7
  120. package/src/__tests__/unum-integration.test.ts +68 -68
  121. package/src/adapters/cli.ts +21 -15
  122. package/src/cli/commands/auth.ts +82 -78
  123. package/src/cli/commands/build.ts +29 -27
  124. package/src/cli/commands/canvas.ts +338 -127
  125. package/src/cli/commands/cloud.ts +47 -47
  126. package/src/cli/commands/create.ts +59 -47
  127. package/src/cli/commands/dev.ts +12 -12
  128. package/src/cli/commands/generate.ts +29 -40
  129. package/src/cli/commands/orchestrate.ts +24 -24
  130. package/src/cli/commands/verify.ts +7 -8
  131. package/src/cli/index.ts +14 -10
  132. package/src/cloud/README.md +28 -15
  133. package/src/cloud/auth.ts +55 -70
  134. package/src/cloud/billing.ts +59 -58
  135. package/src/cloud/client.ts +29 -35
  136. package/src/cloud/index.ts +19 -40
  137. package/src/cloud/marketplace.ts +69 -78
  138. package/src/cloud/provisioning.ts +42 -51
  139. package/src/cloud/relay/endpoints.ts +30 -34
  140. package/src/cloud/relay/health/index.ts +1 -1
  141. package/src/cloud/relay/stats/index.ts +1 -1
  142. package/src/cloud/relay/sync/index.ts +1 -1
  143. package/src/cloud/relay/usage/index.ts +1 -1
  144. package/src/cloud/sponsors.ts +31 -34
  145. package/src/cloud/types.ts +4 -4
  146. package/src/components/README.md +1 -0
  147. package/src/components/index.ts +3 -4
  148. package/src/core/actors.ts +7 -7
  149. package/src/core/component/generator.ts +10 -28
  150. package/src/core/engine.ts +51 -24
  151. package/src/core/introspection.ts +37 -35
  152. package/src/core/logic/generator.ts +62 -62
  153. package/src/core/pluresdb/adapter.ts +8 -8
  154. package/src/core/pluresdb/generator.ts +39 -35
  155. package/src/core/pluresdb/index.ts +9 -12
  156. package/src/core/pluresdb/schema-registry.ts +22 -25
  157. package/src/core/pluresdb/store.ts +57 -57
  158. package/src/core/protocol.ts +14 -14
  159. package/src/core/reactive-engine.svelte.ts +65 -0
  160. package/src/core/reactive-engine.ts +67 -0
  161. package/src/core/rules.ts +4 -4
  162. package/src/core/schema/loader.common.ts +150 -0
  163. package/src/core/schema/loader.ts +19 -149
  164. package/src/core/schema/normalize.ts +34 -51
  165. package/src/core/schema/types.ts +47 -11
  166. package/src/dsl/index.ts +8 -8
  167. package/src/dsl.ts +11 -17
  168. package/src/examples/advanced-todo/README.md +58 -40
  169. package/src/examples/advanced-todo/index.ts +3 -3
  170. package/src/examples/auth-basic/index.ts +30 -30
  171. package/src/examples/cart/index.ts +50 -50
  172. package/src/examples/hero-ecommerce/index.ts +130 -157
  173. package/src/examples/svelte-counter/index.ts +22 -26
  174. package/src/flows.ts +6 -17
  175. package/src/index.browser.ts +204 -0
  176. package/src/index.ts +37 -42
  177. package/src/integrations/code-canvas.ts +237 -193
  178. package/src/integrations/pluresdb.ts +55 -35
  179. package/src/integrations/state-docs.ts +104 -104
  180. package/src/integrations/svelte.ts +35 -35
  181. package/src/integrations/tauri.ts +75 -73
  182. package/src/integrations/unum.ts +68 -61
  183. package/src/registry.ts +7 -14
  184. package/src/runtime/terminal-adapter.ts +31 -26
  185. package/src/step.ts +10 -16
  186. package/src/types.ts +1 -1
  187. package/templates/basic-app/README.md +6 -9
  188. package/templates/fullstack-app/README.md +10 -0
  189. package/dist/core/codegen/docs-generator.d.ts +0 -123
  190. package/dist/core/codegen/docs-generator.d.ts.map +0 -1
  191. package/dist/core/codegen/docs-generator.js +0 -674
  192. package/dist/core/codegen/docs-generator.js.map +0 -1
  193. package/dist/core/codegen/index.d.ts +0 -11
  194. package/dist/core/codegen/index.d.ts.map +0 -1
  195. package/dist/core/codegen/index.js +0 -13
  196. package/dist/core/codegen/index.js.map +0 -1
  197. package/dist/core/codegen/ts-generator.d.ts +0 -8
  198. package/dist/core/codegen/ts-generator.d.ts.map +0 -1
  199. package/dist/core/codegen/ts-generator.js +0 -8
  200. package/dist/core/codegen/ts-generator.js.map +0 -1
  201. package/dist/core/db-adapter/index.d.ts +0 -18
  202. package/dist/core/db-adapter/index.d.ts.map +0 -1
  203. package/dist/core/db-adapter/index.js +0 -23
  204. package/dist/core/db-adapter/index.js.map +0 -1
  205. package/dist/core/db-adapter/sync-engine.d.ts +0 -180
  206. package/dist/core/db-adapter/sync-engine.d.ts.map +0 -1
  207. package/dist/core/db-adapter/sync-engine.js +0 -342
  208. package/dist/core/db-adapter/sync-engine.js.map +0 -1
  209. package/dist/core/logic-engine/engine.d.ts +0 -8
  210. package/dist/core/logic-engine/engine.d.ts.map +0 -1
  211. package/dist/core/logic-engine/engine.js +0 -8
  212. package/dist/core/logic-engine/engine.js.map +0 -1
  213. package/dist/core/logic-engine/index.d.ts +0 -16
  214. package/dist/core/logic-engine/index.d.ts.map +0 -1
  215. package/dist/core/logic-engine/index.js +0 -16
  216. package/dist/core/logic-engine/index.js.map +0 -1
  217. package/dist/core/logic-engine/protocol.d.ts +0 -7
  218. package/dist/core/logic-engine/protocol.d.ts.map +0 -1
  219. package/dist/core/logic-engine/protocol.js +0 -7
  220. package/dist/core/logic-engine/protocol.js.map +0 -1
  221. package/dist/core/logic-engine/psf-adapter.d.ts +0 -88
  222. package/dist/core/logic-engine/psf-adapter.d.ts.map +0 -1
  223. package/dist/core/logic-engine/psf-adapter.js +0 -207
  224. package/dist/core/logic-engine/psf-adapter.js.map +0 -1
  225. package/dist/core/logic-engine/rules.d.ts +0 -7
  226. package/dist/core/logic-engine/rules.d.ts.map +0 -1
  227. package/dist/core/logic-engine/rules.js +0 -7
  228. package/dist/core/logic-engine/rules.js.map +0 -1
  229. package/dist/core/schema-engine/compiler.d.ts +0 -198
  230. package/dist/core/schema-engine/compiler.d.ts.map +0 -1
  231. package/dist/core/schema-engine/compiler.js +0 -262
  232. package/dist/core/schema-engine/compiler.js.map +0 -1
  233. package/dist/core/schema-engine/generator.d.ts +0 -115
  234. package/dist/core/schema-engine/generator.d.ts.map +0 -1
  235. package/dist/core/schema-engine/generator.js +0 -506
  236. package/dist/core/schema-engine/generator.js.map +0 -1
  237. package/dist/core/schema-engine/index.d.ts +0 -18
  238. package/dist/core/schema-engine/index.d.ts.map +0 -1
  239. package/dist/core/schema-engine/index.js +0 -18
  240. package/dist/core/schema-engine/index.js.map +0 -1
  241. package/dist/core/schema-engine/psf.d.ts +0 -612
  242. package/dist/core/schema-engine/psf.d.ts.map +0 -1
  243. package/dist/core/schema-engine/psf.js +0 -45
  244. package/dist/core/schema-engine/psf.js.map +0 -1
  245. package/dist/core/schema-engine/types.d.ts +0 -10
  246. package/dist/core/schema-engine/types.d.ts.map +0 -1
  247. package/dist/core/schema-engine/types.js +0 -7
  248. package/dist/core/schema-engine/types.js.map +0 -1
  249. package/dist/core/schema-engine/validator.d.ts +0 -140
  250. package/dist/core/schema-engine/validator.d.ts.map +0 -1
  251. package/dist/core/schema-engine/validator.js +0 -407
  252. package/dist/core/schema-engine/validator.js.map +0 -1
  253. package/dist/src/adapters/cli.d.ts +0 -43
  254. package/dist/src/adapters/cli.d.ts.map +0 -1
  255. package/dist/src/adapters/cli.js +0 -126
  256. package/dist/src/adapters/cli.js.map +0 -1
  257. package/dist/src/cli/commands/auth.d.ts +0 -26
  258. package/dist/src/cli/commands/auth.d.ts.map +0 -1
  259. package/dist/src/cli/commands/auth.js +0 -233
  260. package/dist/src/cli/commands/auth.js.map +0 -1
  261. package/dist/src/cli/commands/build.d.ts +0 -23
  262. package/dist/src/cli/commands/build.d.ts.map +0 -1
  263. package/dist/src/cli/commands/build.js +0 -162
  264. package/dist/src/cli/commands/build.js.map +0 -1
  265. package/dist/src/cli/commands/canvas.d.ts +0 -23
  266. package/dist/src/cli/commands/canvas.d.ts.map +0 -1
  267. package/dist/src/cli/commands/canvas.js +0 -215
  268. package/dist/src/cli/commands/canvas.js.map +0 -1
  269. package/dist/src/cli/commands/cloud.d.ts +0 -27
  270. package/dist/src/cli/commands/cloud.d.ts.map +0 -1
  271. package/dist/src/cli/commands/cloud.js +0 -232
  272. package/dist/src/cli/commands/cloud.js.map +0 -1
  273. package/dist/src/cli/commands/create.d.ts +0 -21
  274. package/dist/src/cli/commands/create.d.ts.map +0 -1
  275. package/dist/src/cli/commands/create.js +0 -621
  276. package/dist/src/cli/commands/create.js.map +0 -1
  277. package/dist/src/cli/commands/dev.d.ts +0 -21
  278. package/dist/src/cli/commands/dev.d.ts.map +0 -1
  279. package/dist/src/cli/commands/dev.js +0 -71
  280. package/dist/src/cli/commands/dev.js.map +0 -1
  281. package/dist/src/cli/commands/generate.d.ts +0 -25
  282. package/dist/src/cli/commands/generate.d.ts.map +0 -1
  283. package/dist/src/cli/commands/generate.js +0 -168
  284. package/dist/src/cli/commands/generate.js.map +0 -1
  285. package/dist/src/cli/commands/orchestrate.d.ts +0 -44
  286. package/dist/src/cli/commands/orchestrate.d.ts.map +0 -1
  287. package/dist/src/cli/commands/orchestrate.js +0 -150
  288. package/dist/src/cli/commands/orchestrate.js.map +0 -1
  289. package/dist/src/cli/commands/verify.d.ts +0 -10
  290. package/dist/src/cli/commands/verify.d.ts.map +0 -1
  291. package/dist/src/cli/commands/verify.js +0 -39
  292. package/dist/src/cli/commands/verify.js.map +0 -1
  293. package/dist/src/cli/index.d.ts +0 -8
  294. package/dist/src/cli/index.d.ts.map +0 -1
  295. package/dist/src/cli/index.js +0 -226
  296. package/dist/src/cli/index.js.map +0 -1
  297. package/dist/src/cloud/auth.d.ts +0 -51
  298. package/dist/src/cloud/auth.d.ts.map +0 -1
  299. package/dist/src/cloud/auth.js +0 -194
  300. package/dist/src/cloud/auth.js.map +0 -1
  301. package/dist/src/cloud/billing.d.ts +0 -184
  302. package/dist/src/cloud/billing.d.ts.map +0 -1
  303. package/dist/src/cloud/billing.js +0 -179
  304. package/dist/src/cloud/billing.js.map +0 -1
  305. package/dist/src/cloud/client.d.ts +0 -39
  306. package/dist/src/cloud/client.d.ts.map +0 -1
  307. package/dist/src/cloud/client.js +0 -176
  308. package/dist/src/cloud/client.js.map +0 -1
  309. package/dist/src/cloud/index.d.ts +0 -44
  310. package/dist/src/cloud/index.d.ts.map +0 -1
  311. package/dist/src/cloud/index.js +0 -44
  312. package/dist/src/cloud/index.js.map +0 -1
  313. package/dist/src/cloud/marketplace.d.ts +0 -166
  314. package/dist/src/cloud/marketplace.d.ts.map +0 -1
  315. package/dist/src/cloud/marketplace.js +0 -159
  316. package/dist/src/cloud/marketplace.js.map +0 -1
  317. package/dist/src/cloud/provisioning.d.ts +0 -110
  318. package/dist/src/cloud/provisioning.d.ts.map +0 -1
  319. package/dist/src/cloud/provisioning.js +0 -148
  320. package/dist/src/cloud/provisioning.js.map +0 -1
  321. package/dist/src/cloud/relay/endpoints.d.ts +0 -62
  322. package/dist/src/cloud/relay/endpoints.d.ts.map +0 -1
  323. package/dist/src/cloud/relay/endpoints.js +0 -217
  324. package/dist/src/cloud/relay/endpoints.js.map +0 -1
  325. package/dist/src/cloud/relay/health/index.d.ts +0 -5
  326. package/dist/src/cloud/relay/health/index.d.ts.map +0 -1
  327. package/dist/src/cloud/relay/health/index.js +0 -9
  328. package/dist/src/cloud/relay/health/index.js.map +0 -1
  329. package/dist/src/cloud/relay/stats/index.d.ts +0 -5
  330. package/dist/src/cloud/relay/stats/index.d.ts.map +0 -1
  331. package/dist/src/cloud/relay/stats/index.js +0 -9
  332. package/dist/src/cloud/relay/stats/index.js.map +0 -1
  333. package/dist/src/cloud/relay/sync/index.d.ts +0 -5
  334. package/dist/src/cloud/relay/sync/index.d.ts.map +0 -1
  335. package/dist/src/cloud/relay/sync/index.js +0 -9
  336. package/dist/src/cloud/relay/sync/index.js.map +0 -1
  337. package/dist/src/cloud/relay/usage/index.d.ts +0 -5
  338. package/dist/src/cloud/relay/usage/index.d.ts.map +0 -1
  339. package/dist/src/cloud/relay/usage/index.js +0 -9
  340. package/dist/src/cloud/relay/usage/index.js.map +0 -1
  341. package/dist/src/cloud/sponsors.d.ts +0 -81
  342. package/dist/src/cloud/sponsors.d.ts.map +0 -1
  343. package/dist/src/cloud/sponsors.js +0 -130
  344. package/dist/src/cloud/sponsors.js.map +0 -1
  345. package/dist/src/cloud/types.d.ts +0 -169
  346. package/dist/src/cloud/types.d.ts.map +0 -1
  347. package/dist/src/cloud/types.js +0 -7
  348. package/dist/src/cloud/types.js.map +0 -1
  349. package/dist/src/components/index.d.ts.map +0 -1
  350. package/dist/src/components/index.js +0 -17
  351. package/dist/src/components/index.js.map +0 -1
  352. package/dist/src/core/actors.d.ts +0 -95
  353. package/dist/src/core/actors.d.ts.map +0 -1
  354. package/dist/src/core/actors.js +0 -158
  355. package/dist/src/core/actors.js.map +0 -1
  356. package/dist/src/core/component/generator.d.ts.map +0 -1
  357. package/dist/src/core/component/generator.js +0 -349
  358. package/dist/src/core/component/generator.js.map +0 -1
  359. package/dist/src/core/engine.d.ts +0 -92
  360. package/dist/src/core/engine.d.ts.map +0 -1
  361. package/dist/src/core/engine.js +0 -199
  362. package/dist/src/core/engine.js.map +0 -1
  363. package/dist/src/core/introspection.d.ts +0 -141
  364. package/dist/src/core/introspection.d.ts.map +0 -1
  365. package/dist/src/core/introspection.js +0 -208
  366. package/dist/src/core/introspection.js.map +0 -1
  367. package/dist/src/core/logic/generator.d.ts +0 -76
  368. package/dist/src/core/logic/generator.d.ts.map +0 -1
  369. package/dist/src/core/logic/generator.js +0 -370
  370. package/dist/src/core/logic/generator.js.map +0 -1
  371. package/dist/src/core/pluresdb/adapter.d.ts +0 -72
  372. package/dist/src/core/pluresdb/adapter.d.ts.map +0 -1
  373. package/dist/src/core/pluresdb/adapter.js +0 -73
  374. package/dist/src/core/pluresdb/adapter.js.map +0 -1
  375. package/dist/src/core/pluresdb/generator.d.ts +0 -58
  376. package/dist/src/core/pluresdb/generator.d.ts.map +0 -1
  377. package/dist/src/core/pluresdb/generator.js +0 -191
  378. package/dist/src/core/pluresdb/generator.js.map +0 -1
  379. package/dist/src/core/pluresdb/index.d.ts +0 -15
  380. package/dist/src/core/pluresdb/index.d.ts.map +0 -1
  381. package/dist/src/core/pluresdb/index.js +0 -11
  382. package/dist/src/core/pluresdb/index.js.map +0 -1
  383. package/dist/src/core/pluresdb/schema-registry.d.ts +0 -104
  384. package/dist/src/core/pluresdb/schema-registry.d.ts.map +0 -1
  385. package/dist/src/core/pluresdb/schema-registry.js +0 -130
  386. package/dist/src/core/pluresdb/schema-registry.js.map +0 -1
  387. package/dist/src/core/pluresdb/store.d.ts +0 -199
  388. package/dist/src/core/pluresdb/store.d.ts.map +0 -1
  389. package/dist/src/core/pluresdb/store.js +0 -344
  390. package/dist/src/core/pluresdb/store.js.map +0 -1
  391. package/dist/src/core/protocol.d.ts.map +0 -1
  392. package/dist/src/core/protocol.js +0 -46
  393. package/dist/src/core/protocol.js.map +0 -1
  394. package/dist/src/core/rules.d.ts +0 -120
  395. package/dist/src/core/rules.d.ts.map +0 -1
  396. package/dist/src/core/rules.js +0 -81
  397. package/dist/src/core/rules.js.map +0 -1
  398. package/dist/src/core/schema/loader.d.ts +0 -47
  399. package/dist/src/core/schema/loader.d.ts.map +0 -1
  400. package/dist/src/core/schema/loader.js +0 -189
  401. package/dist/src/core/schema/loader.js.map +0 -1
  402. package/dist/src/core/schema/normalize.d.ts +0 -72
  403. package/dist/src/core/schema/normalize.d.ts.map +0 -1
  404. package/dist/src/core/schema/normalize.js +0 -190
  405. package/dist/src/core/schema/normalize.js.map +0 -1
  406. package/dist/src/core/schema/types.d.ts.map +0 -1
  407. package/dist/src/core/schema/types.js +0 -161
  408. package/dist/src/core/schema/types.js.map +0 -1
  409. package/dist/src/dsl/index.d.ts +0 -152
  410. package/dist/src/dsl/index.d.ts.map +0 -1
  411. package/dist/src/dsl/index.js +0 -132
  412. package/dist/src/dsl/index.js.map +0 -1
  413. package/dist/src/dsl.d.ts +0 -124
  414. package/dist/src/dsl.d.ts.map +0 -1
  415. package/dist/src/dsl.js +0 -130
  416. package/dist/src/dsl.js.map +0 -1
  417. package/dist/src/examples/advanced-todo/index.d.ts +0 -55
  418. package/dist/src/examples/advanced-todo/index.d.ts.map +0 -1
  419. package/dist/src/examples/advanced-todo/index.js +0 -222
  420. package/dist/src/examples/advanced-todo/index.js.map +0 -1
  421. package/dist/src/examples/auth-basic/index.d.ts +0 -17
  422. package/dist/src/examples/auth-basic/index.d.ts.map +0 -1
  423. package/dist/src/examples/auth-basic/index.js +0 -122
  424. package/dist/src/examples/auth-basic/index.js.map +0 -1
  425. package/dist/src/examples/cart/index.d.ts +0 -19
  426. package/dist/src/examples/cart/index.d.ts.map +0 -1
  427. package/dist/src/examples/cart/index.js +0 -202
  428. package/dist/src/examples/cart/index.js.map +0 -1
  429. package/dist/src/examples/hero-ecommerce/index.d.ts +0 -39
  430. package/dist/src/examples/hero-ecommerce/index.d.ts.map +0 -1
  431. package/dist/src/examples/hero-ecommerce/index.js +0 -506
  432. package/dist/src/examples/hero-ecommerce/index.js.map +0 -1
  433. package/dist/src/examples/svelte-counter/index.d.ts +0 -31
  434. package/dist/src/examples/svelte-counter/index.d.ts.map +0 -1
  435. package/dist/src/examples/svelte-counter/index.js +0 -123
  436. package/dist/src/examples/svelte-counter/index.js.map +0 -1
  437. package/dist/src/flows.d.ts +0 -125
  438. package/dist/src/flows.d.ts.map +0 -1
  439. package/dist/src/flows.js +0 -160
  440. package/dist/src/flows.js.map +0 -1
  441. package/dist/src/index.d.ts +0 -77
  442. package/dist/src/index.d.ts.map +0 -1
  443. package/dist/src/index.js +0 -64
  444. package/dist/src/index.js.map +0 -1
  445. package/dist/src/integrations/code-canvas.d.ts +0 -265
  446. package/dist/src/integrations/code-canvas.d.ts.map +0 -1
  447. package/dist/src/integrations/code-canvas.js +0 -451
  448. package/dist/src/integrations/code-canvas.js.map +0 -1
  449. package/dist/src/integrations/pluresdb.d.ts +0 -117
  450. package/dist/src/integrations/pluresdb.d.ts.map +0 -1
  451. package/dist/src/integrations/pluresdb.js +0 -117
  452. package/dist/src/integrations/pluresdb.js.map +0 -1
  453. package/dist/src/integrations/state-docs.d.ts +0 -191
  454. package/dist/src/integrations/state-docs.d.ts.map +0 -1
  455. package/dist/src/integrations/state-docs.js +0 -515
  456. package/dist/src/integrations/state-docs.js.map +0 -1
  457. package/dist/src/integrations/svelte.d.ts.map +0 -1
  458. package/dist/src/integrations/svelte.js +0 -447
  459. package/dist/src/integrations/svelte.js.map +0 -1
  460. package/dist/src/integrations/tauri.d.ts +0 -360
  461. package/dist/src/integrations/tauri.d.ts.map +0 -1
  462. package/dist/src/integrations/tauri.js +0 -278
  463. package/dist/src/integrations/tauri.js.map +0 -1
  464. package/dist/src/integrations/unum.d.ts +0 -159
  465. package/dist/src/integrations/unum.d.ts.map +0 -1
  466. package/dist/src/integrations/unum.js +0 -240
  467. package/dist/src/integrations/unum.js.map +0 -1
  468. package/dist/src/registry.d.ts +0 -94
  469. package/dist/src/registry.d.ts.map +0 -1
  470. package/dist/src/registry.js +0 -181
  471. package/dist/src/registry.js.map +0 -1
  472. package/dist/src/runtime/terminal-adapter.d.ts.map +0 -1
  473. package/dist/src/runtime/terminal-adapter.js +0 -239
  474. package/dist/src/runtime/terminal-adapter.js.map +0 -1
  475. package/dist/src/step.d.ts +0 -34
  476. package/dist/src/step.d.ts.map +0 -1
  477. package/dist/src/step.js +0 -111
  478. package/dist/src/step.js.map +0 -1
  479. package/dist/src/types.d.ts +0 -63
  480. package/dist/src/types.d.ts.map +0 -1
  481. package/dist/src/types.js +0 -6
  482. package/dist/src/types.js.map +0 -1
  483. package/dist/tools/ast-analyzer/src/ast-analyzer.d.ts +0 -8
  484. package/dist/tools/ast-analyzer/src/ast-analyzer.d.ts.map +0 -1
  485. package/dist/tools/ast-analyzer/src/ast-analyzer.js +0 -119
  486. package/dist/tools/ast-analyzer/src/ast-analyzer.js.map +0 -1
  487. package/dist/tools/cli/commands/index.d.ts +0 -7
  488. package/dist/tools/cli/commands/index.d.ts.map +0 -1
  489. package/dist/tools/cli/commands/index.js +0 -7
  490. package/dist/tools/cli/commands/index.js.map +0 -1
  491. package/dist/tools/cli/index.d.ts +0 -8
  492. package/dist/tools/cli/index.d.ts.map +0 -1
  493. package/dist/tools/cli/index.js +0 -9
  494. package/dist/tools/cli/index.js.map +0 -1
  495. package/dist/tools/watcher/index.d.ts +0 -105
  496. package/dist/tools/watcher/index.d.ts.map +0 -1
  497. package/dist/tools/watcher/index.js +0 -213
  498. package/dist/tools/watcher/index.js.map +0 -1
  499. package/dist/ui/canvas/canvas-projection.d.ts +0 -78
  500. package/dist/ui/canvas/canvas-projection.d.ts.map +0 -1
  501. package/dist/ui/canvas/canvas-projection.js +0 -416
  502. package/dist/ui/canvas/canvas-projection.js.map +0 -1
  503. package/dist/ui/canvas/canvas-state.d.ts +0 -200
  504. package/dist/ui/canvas/canvas-state.d.ts.map +0 -1
  505. package/dist/ui/canvas/canvas-state.js +0 -464
  506. package/dist/ui/canvas/canvas-state.js.map +0 -1
  507. package/dist/ui/canvas/components/index.d.ts +0 -95
  508. package/dist/ui/canvas/components/index.d.ts.map +0 -1
  509. package/dist/ui/canvas/components/index.js +0 -19
  510. package/dist/ui/canvas/components/index.js.map +0 -1
  511. package/dist/ui/canvas/index.d.ts +0 -32
  512. package/dist/ui/canvas/index.d.ts.map +0 -1
  513. package/dist/ui/canvas/index.js +0 -32
  514. package/dist/ui/canvas/index.js.map +0 -1
  515. package/dist/ui/canvas-inspector/src/server.d.ts +0 -2
  516. package/dist/ui/canvas-inspector/src/server.d.ts.map +0 -1
  517. package/dist/ui/canvas-inspector/src/server.js +0 -248
  518. package/dist/ui/canvas-inspector/src/server.js.map +0 -1
  519. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.d.ts +0 -5
  520. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.d.ts.map +0 -1
  521. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.js +0 -58
  522. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.js.map +0 -1
  523. package/dist/ui/svelte-generator/index.d.ts +0 -9
  524. package/dist/ui/svelte-generator/index.d.ts.map +0 -1
  525. package/dist/ui/svelte-generator/index.js +0 -11
  526. package/dist/ui/svelte-generator/index.js.map +0 -1
  527. package/dist/ui/svelte-generator/psf-generator.d.ts +0 -128
  528. package/dist/ui/svelte-generator/psf-generator.d.ts.map +0 -1
  529. package/dist/ui/svelte-generator/psf-generator.js +0 -506
  530. package/dist/ui/svelte-generator/psf-generator.js.map +0 -1
@@ -10,18 +10,18 @@ flowchart LR
10
10
  PSF[schema.psf.json]
11
11
  TS[TypeScript Files]
12
12
  end
13
-
13
+
14
14
  subgraph Sync["Sync Engine"]
15
15
  Parser[PSF Parser]
16
16
  Generator[Code Generator]
17
17
  Watcher[File Watcher]
18
18
  end
19
-
19
+
20
20
  subgraph Canvas["CodeCanvas (Visual)"]
21
21
  Visual[Visual Editor]
22
22
  Preview[Live Preview]
23
23
  end
24
-
24
+
25
25
  PSF <--> Parser
26
26
  Parser <--> Visual
27
27
  Visual --> Generator
@@ -48,6 +48,7 @@ flowchart LR
48
48
  ### Hybrid Workflow
49
49
 
50
50
  Work in both modes simultaneously:
51
+
51
52
  - Use Canvas for visual design and high-level structure
52
53
  - Use code editor for detailed logic and fine-tuning
53
54
  - Changes sync automatically in both directions
@@ -75,23 +76,23 @@ export const config: CanvasConfig = {
75
76
  sync: {
76
77
  // Enable bidirectional sync
77
78
  enabled: true,
78
-
79
+
79
80
  // Watch for file changes
80
81
  watchFiles: true,
81
-
82
+
82
83
  // Debounce time for file changes (ms)
83
84
  debounce: 500,
84
-
85
+
85
86
  // How to handle conflicts
86
- conflictResolution: 'ask', // 'ask' | 'canvas' | 'code' | 'merge'
87
-
87
+ conflictResolution: 'ask', // 'ask' | 'canvas' | 'code' | 'merge'
88
+
88
89
  // Auto-regenerate code on Canvas changes
89
90
  autoGenerate: true,
90
-
91
+
91
92
  // Files to generate
92
93
  generateTargets: ['types', 'components', 'docs'],
93
94
  },
94
-
95
+
95
96
  // Code generation settings
96
97
  generation: {
97
98
  output: './src/generated',
@@ -109,11 +110,13 @@ export const config: CanvasConfig = {
109
110
  With `watchFiles: true`, changes sync in real-time:
110
111
 
111
112
  **Code → Canvas:**
113
+
112
114
  - Edit `schema.psf.json` in VS Code
113
115
  - Save the file
114
116
  - Canvas updates within 500ms (configurable debounce)
115
117
 
116
118
  **Canvas → Code:**
119
+
117
120
  - Make changes in Canvas visual editor
118
121
  - Click "Save" or auto-save triggers
119
122
  - `schema.psf.json` updates immediately
@@ -140,18 +143,21 @@ Shows a dialog to choose which version to keep:
140
143
  #### `'canvas'`
141
144
 
142
145
  Canvas changes always win:
146
+
143
147
  - Canvas overwrites code changes
144
148
  - Safe when primarily designing visually
145
149
 
146
150
  #### `'code'`
147
151
 
148
152
  Code changes always win:
153
+
149
154
  - Code overwrites Canvas changes
150
155
  - Safe when primarily coding
151
156
 
152
157
  #### `'merge'`
153
158
 
154
159
  Attempts to merge changes:
160
+
155
161
  - Works for independent changes (different models, components)
156
162
  - Conflicts still require manual resolution
157
163
 
@@ -235,7 +241,7 @@ canvas.on('sync:complete', (result) => {
235
241
  canvas.on('sync:conflict', (conflict) => {
236
242
  console.log('Conflict:', conflict);
237
243
  // Handle conflict programmatically
238
- conflict.resolve('canvas'); // or 'code' or custom merge
244
+ conflict.resolve('canvas'); // or 'code' or custom merge
239
245
  });
240
246
  ```
241
247
 
@@ -319,11 +325,13 @@ When merging branches with schema changes:
319
325
  Choose whether to commit generated files:
320
326
 
321
327
  **Commit generated files:**
328
+
322
329
  - ✅ Works without build step
323
330
  - ✅ Code review shows generated changes
324
331
  - ❌ More merge conflicts
325
332
 
326
333
  **.gitignore generated files:**
334
+
327
335
  - ✅ Cleaner commits
328
336
  - ✅ Fewer conflicts
329
337
  - ❌ Requires build step
@@ -365,11 +373,13 @@ Add to your project README:
365
373
  ## Development
366
374
 
367
375
  ### Visual Development
376
+
368
377
  \`\`\`bash
369
378
  praxis canvas ./src/schema.psf.json
370
379
  \`\`\`
371
380
 
372
381
  ### Code Generation
382
+
373
383
  \`\`\`bash
374
384
  praxis generate --schema ./src/schema.psf.json
375
385
  \`\`\`
@@ -380,11 +390,13 @@ praxis generate --schema ./src/schema.psf.json
380
390
  ### Sync Not Working
381
391
 
382
392
  1. **Check Canvas is running:**
393
+
383
394
  ```bash
384
395
  praxis canvas status
385
396
  ```
386
397
 
387
398
  2. **Check file watcher:**
399
+
388
400
  ```bash
389
401
  praxis canvas --debug
390
402
  ```
@@ -427,15 +439,15 @@ const handler = createSyncHandler({
427
439
  // Called when code changes
428
440
  onCodeChange: async (schema) => {
429
441
  // Custom logic before Canvas update
430
- return schema; // Transformed schema
442
+ return schema; // Transformed schema
431
443
  },
432
-
444
+
433
445
  // Called when Canvas changes
434
446
  onCanvasChange: async (schema) => {
435
447
  // Custom logic before code update
436
- return schema; // Transformed schema
448
+ return schema; // Transformed schema
437
449
  },
438
-
450
+
439
451
  // Custom conflict resolution
440
452
  onConflict: async (local, remote) => {
441
453
  // Return merged schema
@@ -457,7 +469,7 @@ const watcher = createPSFWatcher('./schema.psf.json');
457
469
  watcher.on('change', async (schema) => {
458
470
  // Update external system (e.g., database, API)
459
471
  await updateExternalSystem(schema);
460
-
472
+
461
473
  // Notify other tools
462
474
  eventBus.emit('schema-updated', schema);
463
475
  });
@@ -12,7 +12,9 @@ Facts are typed propositions about your domain. They represent "what is true" or
12
12
  import { defineFact } from '@plures/praxis';
13
13
 
14
14
  // Define a fact type
15
- const UserLoggedIn = defineFact<'UserLoggedIn', { userId: string; timestamp: number }>('UserLoggedIn');
15
+ const UserLoggedIn = defineFact<'UserLoggedIn', { userId: string; timestamp: number }>(
16
+ 'UserLoggedIn'
17
+ );
16
18
 
17
19
  // Create a fact instance
18
20
  const fact = UserLoggedIn.create({ userId: 'user-123', timestamp: Date.now() });
@@ -25,12 +27,12 @@ if (UserLoggedIn.is(someFact)) {
25
27
 
26
28
  #### Fact Properties
27
29
 
28
- | Property | Type | Description |
29
- |----------|------|-------------|
30
- | `tag` | string | Unique identifier for the fact type |
31
- | `payload` | object | Data associated with the fact |
32
- | `timestamp` | number | When the fact was created |
33
- | `metadata` | object | Optional additional metadata |
30
+ | Property | Type | Description |
31
+ | ----------- | ------ | ----------------------------------- |
32
+ | `tag` | string | Unique identifier for the fact type |
33
+ | `payload` | object | Data associated with the fact |
34
+ | `timestamp` | number | When the fact was created |
35
+ | `metadata` | object | Optional additional metadata |
34
36
 
35
37
  ### Events
36
38
 
@@ -62,39 +64,41 @@ const loginRule = defineRule<AuthContext>({
62
64
  impl: (state, events) => {
63
65
  const loginEvent = events.find(Login.is);
64
66
  if (!loginEvent) return [];
65
-
67
+
66
68
  // Validate credentials (pure logic only)
67
- const user = state.context.users.find(u =>
68
- u.username === loginEvent.payload.username
69
- );
70
-
69
+ const user = state.context.users.find((u) => u.username === loginEvent.payload.username);
70
+
71
71
  if (user) {
72
72
  // Modify state (within the pure function)
73
73
  state.context.currentUser = user;
74
-
74
+
75
75
  // Return facts to emit
76
- return [UserLoggedIn.create({
77
- userId: user.id,
78
- timestamp: Date.now()
79
- })];
76
+ return [
77
+ UserLoggedIn.create({
78
+ userId: user.id,
79
+ timestamp: Date.now(),
80
+ }),
81
+ ];
80
82
  }
81
-
82
- return [LoginFailed.create({
83
- reason: 'Invalid credentials'
84
- })];
83
+
84
+ return [
85
+ LoginFailed.create({
86
+ reason: 'Invalid credentials',
87
+ }),
88
+ ];
85
89
  },
86
90
  });
87
91
  ```
88
92
 
89
93
  #### Rule Properties
90
94
 
91
- | Property | Type | Required | Description |
92
- |----------|------|----------|-------------|
93
- | `id` | string | Yes | Unique rule identifier |
94
- | `description` | string | Yes | What the rule does |
95
- | `impl` | function | Yes | Pure function implementation |
96
- | `priority` | number | No | Execution order (higher = first) |
97
- | `triggers` | string[] | No | Event types that activate this rule |
95
+ | Property | Type | Required | Description |
96
+ | ------------- | -------- | -------- | ----------------------------------- |
97
+ | `id` | string | Yes | Unique rule identifier |
98
+ | `description` | string | Yes | What the rule does |
99
+ | `impl` | function | Yes | Pure function implementation |
100
+ | `priority` | number | No | Execution order (higher = first) |
101
+ | `triggers` | string[] | No | Event types that activate this rule |
98
102
 
99
103
  ### Constraints
100
104
 
@@ -114,13 +118,13 @@ const positiveBalance = defineConstraint<BankContext>({
114
118
 
115
119
  #### Constraint Properties
116
120
 
117
- | Property | Type | Required | Description |
118
- |----------|------|----------|-------------|
119
- | `id` | string | Yes | Unique constraint identifier |
120
- | `description` | string | Yes | What the constraint ensures |
121
- | `check` | function | Yes | Returns true if valid |
122
- | `errorMessage` | string | Yes | Error when violated |
123
- | `severity` | string | Yes | `error` or `warning` |
121
+ | Property | Type | Required | Description |
122
+ | -------------- | -------- | -------- | ---------------------------- |
123
+ | `id` | string | Yes | Unique constraint identifier |
124
+ | `description` | string | Yes | What the constraint ensures |
125
+ | `check` | function | Yes | Returns true if valid |
126
+ | `errorMessage` | string | Yes | Error when violated |
127
+ | `severity` | string | Yes | `error` or `warning` |
124
128
 
125
129
  ## Creating an Engine
126
130
 
@@ -155,20 +159,20 @@ const engine = createPraxisEngine({
155
159
  const engine = createPraxisEngine({
156
160
  // Required: Initial application state
157
161
  initialContext: { count: 0 },
158
-
162
+
159
163
  // Required: Registry with rules and constraints
160
164
  registry,
161
-
165
+
162
166
  // Optional: Enable history for undo/redo
163
167
  enableHistory: true,
164
168
  maxHistorySize: 100,
165
-
169
+
166
170
  // Optional: Custom reducer for state transitions
167
171
  reducer: (state, event) => {
168
172
  // Custom state transition logic
169
173
  return state;
170
174
  },
171
-
175
+
172
176
  // Optional: Middleware
173
177
  middleware: [
174
178
  (state, events, next) => {
@@ -176,7 +180,7 @@ const engine = createPraxisEngine({
176
180
  const result = next(state, events);
177
181
  console.log('After:', result);
178
182
  return result;
179
- }
183
+ },
180
184
  ],
181
185
  });
182
186
  ```
@@ -207,20 +211,20 @@ For more control, use the step function directly:
207
211
  ```typescript
208
212
  const result = engine.step([Login.create({ username: 'alice', password: 'secret' })]);
209
213
 
210
- console.log(result.state.context); // Updated context
211
- console.log(result.state.facts); // Emitted facts
212
- console.log(result.effects); // Side effects to execute
213
- console.log(result.violations); // Constraint violations
214
+ console.log(result.state.context); // Updated context
215
+ console.log(result.state.facts); // Emitted facts
216
+ console.log(result.effects); // Side effects to execute
217
+ console.log(result.violations); // Constraint violations
214
218
  ```
215
219
 
216
220
  ### Step Result
217
221
 
218
- | Property | Type | Description |
219
- |----------|------|-------------|
222
+ | Property | Type | Description |
223
+ | --------------- | ------ | ------------------------- |
220
224
  | `state.context` | object | Updated application state |
221
- | `state.facts` | array | Facts emitted by rules |
222
- | `effects` | array | Side effects to execute |
223
- | `violations` | array | Constraint violations |
225
+ | `state.facts` | array | Facts emitted by rules |
226
+ | `effects` | array | Side effects to execute |
227
+ | `violations` | array | Constraint violations |
224
228
 
225
229
  ## State Management
226
230
 
@@ -233,9 +237,9 @@ const state1 = engine.getState();
233
237
  engine.dispatch([Increment.create({})]);
234
238
  const state2 = engine.getState();
235
239
 
236
- console.log(state1 === state2); // false
237
- console.log(state1.context.count); // 0
238
- console.log(state2.context.count); // 1
240
+ console.log(state1 === state2); // false
241
+ console.log(state1.context.count); // 0
242
+ console.log(state2.context.count); // 1
239
243
  ```
240
244
 
241
245
  ### Subscriptions
@@ -263,18 +267,18 @@ const engine = createPraxisEngine({
263
267
  enableHistory: true,
264
268
  });
265
269
 
266
- engine.dispatch([Increment.create({})]); // count: 1
267
- engine.dispatch([Increment.create({})]); // count: 2
270
+ engine.dispatch([Increment.create({})]); // count: 1
271
+ engine.dispatch([Increment.create({})]); // count: 2
268
272
 
269
- engine.undo(); // count: 1
270
- engine.redo(); // count: 2
273
+ engine.undo(); // count: 1
274
+ engine.redo(); // count: 2
271
275
 
272
276
  // Access history
273
277
  const snapshots = engine.getSnapshots();
274
- console.log(snapshots.length); // 3 (initial + 2 changes)
278
+ console.log(snapshots.length); // 3 (initial + 2 changes)
275
279
 
276
280
  // Go to specific snapshot
277
- engine.goToSnapshot(0); // count: 0
281
+ engine.goToSnapshot(0); // count: 0
278
282
  ```
279
283
 
280
284
  ## Rule Execution
@@ -318,7 +322,7 @@ Facts emitted by rules can trigger other rules:
318
322
  const loginRule = defineRule({
319
323
  id: 'auth.login',
320
324
  triggers: ['LOGIN'],
321
- impl: (state, events) => [UserLoggedIn.create({ userId: '123' })]
325
+ impl: (state, events) => [UserLoggedIn.create({ userId: '123' })],
322
326
  });
323
327
 
324
328
  // Rule 2: UserLoggedIn triggers welcome notification
@@ -326,12 +330,12 @@ const welcomeRule = defineRule({
326
330
  id: 'notify.welcome',
327
331
  impl: (state, events) => {
328
332
  // This runs after loginRule because facts are processed
329
- const loggedIn = state.facts.find(f => f.tag === 'UserLoggedIn');
333
+ const loggedIn = state.facts.find((f) => f.tag === 'UserLoggedIn');
330
334
  if (loggedIn) {
331
335
  return [ShowNotification.create({ message: 'Welcome!' })];
332
336
  }
333
337
  return [];
334
- }
338
+ },
335
339
  });
336
340
  ```
337
341
 
@@ -358,14 +362,14 @@ if (result.violations.length > 0) {
358
362
  ```typescript
359
363
  const softConstraint = defineConstraint({
360
364
  id: 'warn.lowBalance',
361
- severity: 'warning', // Allows state change, logs warning
365
+ severity: 'warning', // Allows state change, logs warning
362
366
  check: (state) => state.context.balance > 100,
363
367
  errorMessage: 'Balance is getting low',
364
368
  });
365
369
 
366
370
  const hardConstraint = defineConstraint({
367
371
  id: 'error.overdraft',
368
- severity: 'error', // Prevents state change
372
+ severity: 'error', // Prevents state change
369
373
  check: (state) => state.context.balance >= 0,
370
374
  errorMessage: 'Insufficient funds',
371
375
  });
@@ -410,7 +414,7 @@ for (const fact of result.state.facts) {
410
414
  ```typescript
411
415
  // Get all registered rules
412
416
  const rules = registry.getRules();
413
- console.log(rules.map(r => r.id));
417
+ console.log(rules.map((r) => r.id));
414
418
 
415
419
  // Get all constraints
416
420
  const constraints = registry.getConstraints();
@@ -447,12 +451,7 @@ For isolated stateful units:
447
451
  ```typescript
448
452
  import { createActor, createActorSystem } from '@plures/praxis';
449
453
 
450
- const counterActor = createActor(
451
- 'counter-1',
452
- { count: 0 },
453
- counterStepFunction,
454
- 'counter'
455
- );
454
+ const counterActor = createActor('counter-1', { count: 0 }, counterStepFunction, 'counter');
456
455
 
457
456
  const system = createActorSystem();
458
457
  system.register(counterActor);
@@ -495,16 +494,16 @@ Rules should have no side effects:
495
494
  // ❌ Bad: Side effect in rule
496
495
  const badRule = defineRule({
497
496
  impl: (state, events) => {
498
- fetch('/api/data'); // Side effect!
497
+ fetch('/api/data'); // Side effect!
499
498
  return [];
500
- }
499
+ },
501
500
  });
502
501
 
503
502
  // ✅ Good: Return effect descriptor
504
503
  const goodRule = defineRule({
505
504
  impl: (state, events) => {
506
505
  return [FetchDataRequested.create({ url: '/api/data' })];
507
- }
506
+ },
508
507
  });
509
508
  ```
510
509
 
@@ -534,7 +533,7 @@ const typedRule = defineRule<AppContext>({
534
533
  // TypeScript knows the shape of state.context
535
534
  const user = state.context.user;
536
535
  return [];
537
- }
536
+ },
538
537
  });
539
538
  ```
540
539
 
@@ -549,14 +548,10 @@ describe('Login Rule', () => {
549
548
  initialContext: { users: [{ username: 'alice', id: '1' }] },
550
549
  registry,
551
550
  });
552
-
553
- const result = engine.step([
554
- Login.create({ username: 'alice', password: 'valid' })
555
- ]);
556
-
557
- expect(result.state.facts).toContainEqual(
558
- expect.objectContaining({ tag: 'UserLoggedIn' })
559
- );
551
+
552
+ const result = engine.step([Login.create({ username: 'alice', password: 'valid' })]);
553
+
554
+ expect(result.state.facts).toContainEqual(expect.objectContaining({ tag: 'UserLoggedIn' }));
560
555
  });
561
556
  });
562
557
  ```
@@ -5,6 +5,7 @@ PluresDB is Praxis's local-first reactive datastore. This document explains how
5
5
  ## Overview
6
6
 
7
7
  PluresDB provides:
8
+
8
9
  - **Local-first storage**: Data lives on the device
9
10
  - **Reactive queries**: Automatic UI updates on data changes
10
11
  - **Sync**: Automatic synchronization when connected
@@ -17,18 +18,18 @@ flowchart TB
17
18
  Engine[Logic Engine]
18
19
  UI[UI Components]
19
20
  end
20
-
21
+
21
22
  subgraph PluresDB["PluresDB"]
22
23
  Local[(Local Store)]
23
24
  Sync[Sync Engine]
24
25
  CRDT[CRDT Resolver]
25
26
  end
26
-
27
+
27
28
  subgraph Cloud["Praxis Cloud"]
28
29
  Relay[Relay Server]
29
30
  Remote[(Remote Store)]
30
31
  end
31
-
32
+
32
33
  Engine <--> Local
33
34
  UI <--> Local
34
35
  Local <--> Sync
@@ -57,18 +58,18 @@ import { createPluresDB } from '@plures/praxis';
57
58
  const db = createPluresDB({
58
59
  // Database name (stored in IndexedDB)
59
60
  name: 'my-app-db',
60
-
61
+
61
62
  // Schema version (increment to migrate)
62
63
  version: 1,
63
-
64
+
64
65
  // Collections to create
65
66
  collections: ['users', 'posts', 'comments'],
66
-
67
+
67
68
  // Sync configuration (optional)
68
69
  sync: {
69
70
  enabled: true,
70
71
  endpoint: 'https://your-sync-server.com',
71
- interval: 5000, // ms
72
+ interval: 5000, // ms
72
73
  },
73
74
  });
74
75
  ```
@@ -167,10 +168,7 @@ await db.users.updateById('user-123', {
167
168
  });
168
169
 
169
170
  // Update matching documents
170
- await db.users.updateMany(
171
- { role: 'guest' },
172
- { $set: { active: false } }
173
- );
171
+ await db.users.updateMany({ role: 'guest' }, { $set: { active: false } });
174
172
 
175
173
  // Replace document
176
174
  await db.users.replaceById('user-123', {
@@ -199,7 +197,7 @@ PluresDB queries are reactive - they automatically update when data changes.
199
197
  ```typescript
200
198
  // Subscribe to all users
201
199
  const unsubscribe = db.users.subscribe(
202
- {}, // Query
200
+ {}, // Query
203
201
  (users) => {
204
202
  console.log('Users updated:', users);
205
203
  }
@@ -214,10 +212,10 @@ unsubscribe();
214
212
  ```svelte
215
213
  <script lang="ts">
216
214
  import { db } from '../db';
217
-
215
+
218
216
  // Reactive query as a store
219
217
  const users = db.users.query({});
220
-
218
+
221
219
  // Derived query
222
220
  const activeUsers = db.users.query({ active: true });
223
221
  </script>
@@ -351,10 +349,10 @@ const db = createPluresDB({
351
349
  name: 'documents',
352
350
  schema: {
353
351
  id: { type: 'uuid' },
354
- title: { type: 'string', crdt: 'lww' }, // Last-write-wins
355
- content: { type: 'string', crdt: 'rga' }, // Sequence CRDT
356
- tags: { type: 'array', crdt: 'or-set' }, // Add-wins set
357
- viewCount: { type: 'number', crdt: 'counter' }, // Counter
352
+ title: { type: 'string', crdt: 'lww' }, // Last-write-wins
353
+ content: { type: 'string', crdt: 'rga' }, // Sequence CRDT
354
+ tags: { type: 'array', crdt: 'or-set' }, // Add-wins set
355
+ viewCount: { type: 'number', crdt: 'counter' }, // Counter
358
356
  },
359
357
  },
360
358
  ],
@@ -436,10 +434,7 @@ const db = createPluresDB({
436
434
  const posts = await db.posts.find({ authorId: 'user-123' });
437
435
 
438
436
  // Uses compound index
439
- const recentPosts = await db.posts.find(
440
- { authorId: 'user-123' },
441
- { sort: { createdAt: -1 } }
442
- );
437
+ const recentPosts = await db.posts.find({ authorId: 'user-123' }, { sort: { createdAt: -1 } });
443
438
 
444
439
  // Uses multikey index for array
445
440
  const taggedPosts = await db.posts.find({ tags: 'javascript' });
@@ -456,9 +451,7 @@ From your PSF schema:
456
451
  "models": [
457
452
  {
458
453
  "name": "Post",
459
- "fields": [
460
- { "name": "authorId", "type": "string" }
461
- ],
454
+ "fields": [{ "name": "authorId", "type": "string" }],
462
455
  "relationships": [
463
456
  {
464
457
  "name": "author",
@@ -476,21 +469,15 @@ From your PSF schema:
476
469
 
477
470
  ```typescript
478
471
  // Include related documents
479
- const posts = await db.posts.find(
480
- {},
481
- { include: ['author'] }
482
- );
472
+ const posts = await db.posts.find({}, { include: ['author'] });
483
473
 
484
474
  // Each post has author populated
485
- posts.forEach(post => {
475
+ posts.forEach((post) => {
486
476
  console.log(`${post.title} by ${post.author.username}`);
487
477
  });
488
478
 
489
479
  // Nested includes
490
- const posts = await db.posts.find(
491
- {},
492
- { include: ['author', 'comments.author'] }
493
- );
480
+ const posts = await db.posts.find({}, { include: ['author', 'comments.author'] });
494
481
  ```
495
482
 
496
483
  ## Integration with Logic Engine
@@ -560,7 +547,7 @@ engine.subscribe((state) => {
560
547
  ```typescript
561
548
  const db = createPluresDB({
562
549
  name: 'my-app',
563
- version: 2, // Increment version
550
+ version: 2, // Increment version
564
551
  collections: ['users', 'posts'],
565
552
  migrations: [
566
553
  {
@@ -578,9 +565,12 @@ const db = createPluresDB({
578
565
  },
579
566
  down: async (db) => {
580
567
  // Rollback migration
581
- await db.users.updateMany({}, {
582
- $unset: { role: true },
583
- });
568
+ await db.users.updateMany(
569
+ {},
570
+ {
571
+ $unset: { role: true },
572
+ }
573
+ );
584
574
  },
585
575
  },
586
576
  ],
@@ -601,7 +591,7 @@ const db = createPluresDB({
601
591
  username: { type: 'string', required: true },
602
592
  email: { type: 'string', required: true, unique: true },
603
593
  },
604
- validate: true, // Enable validation
594
+ validate: true, // Enable validation
605
595
  },
606
596
  ],
607
597
  });