@plures/praxis 1.0.3 → 1.1.0

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 (534) hide show
  1. package/FRAMEWORK.md +55 -5
  2. package/LICENSE +21 -21
  3. package/README.md +162 -375
  4. package/core/codegen/docs-generator.ts +5 -2
  5. package/core/codegen/index.ts +1 -1
  6. package/core/codegen/ts-generator.ts +15 -15
  7. package/core/db-adapter/index.ts +2 -2
  8. package/core/db-adapter/sync-engine.ts +17 -6
  9. package/core/logic-engine/engine.ts +1 -1
  10. package/core/logic-engine/index.ts +2 -2
  11. package/core/logic-engine/protocol.ts +1 -1
  12. package/core/logic-engine/psf-adapter.ts +8 -4
  13. package/core/logic-engine/rules.ts +1 -1
  14. package/core/schema-engine/compiler.ts +53 -11
  15. package/core/schema-engine/generator.ts +17 -7
  16. package/core/schema-engine/index.ts +2 -2
  17. package/core/schema-engine/psf.ts +12 -3
  18. package/core/schema-engine/types.ts +3 -11
  19. package/core/schema-engine/validator.ts +112 -22
  20. package/dist/browser/engine-BjdqxeXG.d.ts +333 -0
  21. package/dist/browser/index.d.ts +3004 -0
  22. package/dist/browser/index.js +2892 -0
  23. package/dist/{src → browser}/integrations/svelte.d.ts +19 -17
  24. package/dist/browser/integrations/svelte.js +298 -0
  25. package/dist/node/auth-STARLY7I.js +207 -0
  26. package/dist/node/build-Y7OT5VBF.js +144 -0
  27. package/dist/node/canvas-UERZHJYW.js +362 -0
  28. package/dist/node/chunk-DSDC2JWZ.js +256 -0
  29. package/dist/node/chunk-FXQZXAWF.js +175 -0
  30. package/dist/node/chunk-N5Y37EUV.js +202 -0
  31. package/dist/node/chunk-QGM4M3NI.js +37 -0
  32. package/dist/node/chunk-RJMWCNHR.js +175 -0
  33. package/dist/node/chunk-SRM3OPPM.js +404 -0
  34. package/dist/node/chunk-UATVJBNV.js +175 -0
  35. package/dist/node/chunk-UY7YEBE2.js +159 -0
  36. package/dist/node/chunk-XCY2VIFX.js +143 -0
  37. package/dist/node/chunk-YXH4Y7ZZ.js +349 -0
  38. package/dist/node/cli/index.cjs +217418 -0
  39. package/dist/node/cli/index.d.cts +1 -0
  40. package/dist/node/cli/index.d.ts +1 -0
  41. package/dist/node/cli/index.js +690 -0
  42. package/dist/node/cloud/index.cjs +1043 -0
  43. package/dist/node/cloud/index.d.cts +864 -0
  44. package/dist/node/cloud/index.d.ts +864 -0
  45. package/dist/node/cloud/index.js +456 -0
  46. package/dist/node/cloud-AXOK4PSN.js +212 -0
  47. package/dist/node/component.cjs +374 -0
  48. package/dist/node/component.d.cts +125 -0
  49. package/dist/{src/core/component/generator.d.ts → node/component.d.ts} +11 -8
  50. package/dist/node/component.js +9 -0
  51. package/dist/node/components/index.cjs +216 -0
  52. package/dist/node/components/index.d.cts +43 -0
  53. package/dist/{src → node}/components/index.d.ts +8 -8
  54. package/dist/node/components/index.js +7 -0
  55. package/dist/node/create-TRLSVCNQ.js +584 -0
  56. package/dist/node/dev-PMJZUYGE.js +65 -0
  57. package/dist/node/engine-1iqLe6_P.d.ts +214 -0
  58. package/dist/node/engine-CVJobhHm.d.cts +214 -0
  59. package/dist/node/index.cjs +3247 -0
  60. package/dist/node/index.d.cts +2579 -0
  61. package/dist/node/index.d.ts +2579 -0
  62. package/dist/node/index.js +2098 -0
  63. package/dist/node/integrations/svelte.cjs +330 -0
  64. package/dist/node/integrations/svelte.d.cts +309 -0
  65. package/dist/node/integrations/svelte.d.ts +309 -0
  66. package/dist/node/integrations/svelte.js +300 -0
  67. package/dist/node/orchestrate-737TCL5H.js +127 -0
  68. package/dist/{src/core/protocol.d.ts → node/protocol-Qek7ebBl.d.cts} +11 -10
  69. package/dist/node/protocol-Qek7ebBl.d.ts +122 -0
  70. package/dist/node/schema.cjs +200 -0
  71. package/dist/{src/core/schema/types.d.ts → node/schema.d.cts} +30 -29
  72. package/dist/node/schema.d.ts +371 -0
  73. package/dist/node/schema.js +9 -0
  74. package/dist/{src/runtime/terminal-adapter.d.ts → node/terminal-adapter-07HGftGQ.d.ts} +86 -11
  75. package/dist/node/terminal-adapter-XLtCjjb_.d.cts +231 -0
  76. package/dist/node/verify-YBZ7W24H.js +213239 -0
  77. package/docs/MONETIZATION.md +21 -16
  78. package/docs/REACTIVE_REDESIGN.md +132 -0
  79. package/docs/README.md +47 -36
  80. package/docs/SVELTE_INTEGRATION_STRATEGY.md +68 -0
  81. package/docs/TERMINAL_NODE.md +27 -24
  82. package/docs/core/building-extensions.md +58 -61
  83. package/docs/core/cli-usage.md +59 -59
  84. package/docs/core/code-canvas-sync.md +28 -16
  85. package/docs/core/logic-engine.md +77 -82
  86. package/docs/core/pluresdb-integration.md +29 -39
  87. package/docs/core/schema-model.md +66 -52
  88. package/docs/core/ui-generation.md +57 -49
  89. package/docs/core/what-is-praxis.md +32 -15
  90. package/docs/guides/canvas.md +21 -5
  91. package/docs/guides/getting-started.md +13 -7
  92. package/docs/guides/history-state-pattern.md +65 -51
  93. package/docs/guides/orchestration.md +46 -32
  94. package/docs/guides/parallel-state-pattern.md +56 -72
  95. package/docs/guides/svelte-integration.md +45 -53
  96. package/docs/tutorials/README.md +16 -0
  97. package/docs/tutorials/ecommerce-cart.md +177 -95
  98. package/docs/tutorials/first-app.md +26 -41
  99. package/docs/tutorials/form-builder.md +191 -138
  100. package/docs/tutorials/todo-pluresdb.md +71 -69
  101. package/package.json +132 -97
  102. package/src/__tests__/actors.test.ts +68 -68
  103. package/src/__tests__/billing.test.ts +32 -32
  104. package/src/__tests__/canvas-components.test.ts +94 -73
  105. package/src/__tests__/cli-create.test.ts +28 -28
  106. package/src/__tests__/cloud.test.ts +36 -36
  107. package/src/__tests__/code-canvas-integration.test.ts +132 -141
  108. package/src/__tests__/docs-generator.test.ts +3 -9
  109. package/src/__tests__/dsl.test.ts +58 -64
  110. package/src/__tests__/edge-cases.test.ts +106 -108
  111. package/src/__tests__/engine.test.ts +51 -25
  112. package/src/__tests__/generators.test.ts +42 -44
  113. package/src/__tests__/introspection.test.ts +104 -114
  114. package/src/__tests__/pluresdb.test.ts +189 -187
  115. package/src/__tests__/protocol.test.ts +15 -15
  116. package/src/__tests__/provisioning.test.ts +61 -61
  117. package/src/__tests__/schema.test.ts +7 -11
  118. package/src/__tests__/state-docs-integration.test.ts +162 -145
  119. package/src/__tests__/svelte-integration.test.ts +16 -19
  120. package/src/__tests__/tauri-integration.test.ts +149 -147
  121. package/src/__tests__/terminal-node.test.ts +12 -7
  122. package/src/__tests__/unum-integration.test.ts +68 -68
  123. package/src/adapters/cli.ts +21 -15
  124. package/src/cli/commands/auth.ts +82 -78
  125. package/src/cli/commands/build.ts +29 -27
  126. package/src/cli/commands/canvas.ts +338 -127
  127. package/src/cli/commands/cloud.ts +47 -47
  128. package/src/cli/commands/create.ts +59 -47
  129. package/src/cli/commands/dev.ts +12 -12
  130. package/src/cli/commands/generate.ts +29 -40
  131. package/src/cli/commands/orchestrate.ts +24 -24
  132. package/src/cli/commands/verify.ts +7 -8
  133. package/src/cli/index.ts +14 -10
  134. package/src/cloud/README.md +28 -15
  135. package/src/cloud/auth.ts +55 -70
  136. package/src/cloud/billing.ts +59 -58
  137. package/src/cloud/client.ts +29 -35
  138. package/src/cloud/index.ts +19 -40
  139. package/src/cloud/marketplace.ts +69 -78
  140. package/src/cloud/provisioning.ts +42 -51
  141. package/src/cloud/relay/endpoints.ts +30 -34
  142. package/src/cloud/relay/health/index.ts +1 -1
  143. package/src/cloud/relay/stats/index.ts +1 -1
  144. package/src/cloud/relay/sync/index.ts +1 -1
  145. package/src/cloud/relay/usage/index.ts +1 -1
  146. package/src/cloud/sponsors.ts +31 -34
  147. package/src/cloud/types.ts +4 -4
  148. package/src/components/README.md +1 -0
  149. package/src/components/TerminalNode.svelte +457 -457
  150. package/src/components/index.ts +3 -4
  151. package/src/core/actors.ts +7 -7
  152. package/src/core/component/generator.ts +10 -28
  153. package/src/core/engine.ts +51 -24
  154. package/src/core/introspection.ts +37 -35
  155. package/src/core/logic/generator.ts +62 -62
  156. package/src/core/pluresdb/adapter.ts +8 -8
  157. package/src/core/pluresdb/generator.ts +39 -35
  158. package/src/core/pluresdb/index.ts +9 -12
  159. package/src/core/pluresdb/schema-registry.ts +22 -25
  160. package/src/core/pluresdb/store.ts +57 -57
  161. package/src/core/protocol.ts +14 -14
  162. package/src/core/reactive-engine.svelte.ts +65 -0
  163. package/src/core/reactive-engine.ts +67 -0
  164. package/src/core/rules.ts +4 -4
  165. package/src/core/schema/loader.common.ts +150 -0
  166. package/src/core/schema/loader.ts +19 -149
  167. package/src/core/schema/normalize.ts +34 -51
  168. package/src/core/schema/types.ts +47 -11
  169. package/src/dsl/index.ts +8 -8
  170. package/src/dsl.ts +11 -17
  171. package/src/examples/advanced-todo/App.svelte +506 -506
  172. package/src/examples/advanced-todo/README.md +58 -40
  173. package/src/examples/advanced-todo/index.ts +3 -3
  174. package/src/examples/auth-basic/index.ts +30 -30
  175. package/src/examples/cart/index.ts +50 -50
  176. package/src/examples/hero-ecommerce/index.ts +130 -157
  177. package/src/examples/svelte-counter/index.ts +22 -26
  178. package/src/flows.ts +6 -17
  179. package/src/index.browser.ts +204 -0
  180. package/src/index.ts +37 -42
  181. package/src/integrations/code-canvas.ts +237 -193
  182. package/src/integrations/pluresdb.ts +55 -35
  183. package/src/integrations/state-docs.ts +104 -104
  184. package/src/integrations/svelte.ts +35 -35
  185. package/src/integrations/tauri.ts +75 -73
  186. package/src/integrations/unum.ts +68 -61
  187. package/src/registry.ts +7 -14
  188. package/src/runtime/terminal-adapter.ts +31 -26
  189. package/src/step.ts +10 -16
  190. package/src/types.ts +1 -1
  191. package/templates/basic-app/README.md +6 -9
  192. package/templates/fullstack-app/README.md +10 -0
  193. package/dist/core/codegen/docs-generator.d.ts +0 -123
  194. package/dist/core/codegen/docs-generator.d.ts.map +0 -1
  195. package/dist/core/codegen/docs-generator.js +0 -674
  196. package/dist/core/codegen/docs-generator.js.map +0 -1
  197. package/dist/core/codegen/index.d.ts +0 -11
  198. package/dist/core/codegen/index.d.ts.map +0 -1
  199. package/dist/core/codegen/index.js +0 -13
  200. package/dist/core/codegen/index.js.map +0 -1
  201. package/dist/core/codegen/ts-generator.d.ts +0 -8
  202. package/dist/core/codegen/ts-generator.d.ts.map +0 -1
  203. package/dist/core/codegen/ts-generator.js +0 -8
  204. package/dist/core/codegen/ts-generator.js.map +0 -1
  205. package/dist/core/db-adapter/index.d.ts +0 -18
  206. package/dist/core/db-adapter/index.d.ts.map +0 -1
  207. package/dist/core/db-adapter/index.js +0 -23
  208. package/dist/core/db-adapter/index.js.map +0 -1
  209. package/dist/core/db-adapter/sync-engine.d.ts +0 -180
  210. package/dist/core/db-adapter/sync-engine.d.ts.map +0 -1
  211. package/dist/core/db-adapter/sync-engine.js +0 -342
  212. package/dist/core/db-adapter/sync-engine.js.map +0 -1
  213. package/dist/core/logic-engine/engine.d.ts +0 -8
  214. package/dist/core/logic-engine/engine.d.ts.map +0 -1
  215. package/dist/core/logic-engine/engine.js +0 -8
  216. package/dist/core/logic-engine/engine.js.map +0 -1
  217. package/dist/core/logic-engine/index.d.ts +0 -16
  218. package/dist/core/logic-engine/index.d.ts.map +0 -1
  219. package/dist/core/logic-engine/index.js +0 -16
  220. package/dist/core/logic-engine/index.js.map +0 -1
  221. package/dist/core/logic-engine/protocol.d.ts +0 -7
  222. package/dist/core/logic-engine/protocol.d.ts.map +0 -1
  223. package/dist/core/logic-engine/protocol.js +0 -7
  224. package/dist/core/logic-engine/protocol.js.map +0 -1
  225. package/dist/core/logic-engine/psf-adapter.d.ts +0 -88
  226. package/dist/core/logic-engine/psf-adapter.d.ts.map +0 -1
  227. package/dist/core/logic-engine/psf-adapter.js +0 -207
  228. package/dist/core/logic-engine/psf-adapter.js.map +0 -1
  229. package/dist/core/logic-engine/rules.d.ts +0 -7
  230. package/dist/core/logic-engine/rules.d.ts.map +0 -1
  231. package/dist/core/logic-engine/rules.js +0 -7
  232. package/dist/core/logic-engine/rules.js.map +0 -1
  233. package/dist/core/schema-engine/compiler.d.ts +0 -198
  234. package/dist/core/schema-engine/compiler.d.ts.map +0 -1
  235. package/dist/core/schema-engine/compiler.js +0 -262
  236. package/dist/core/schema-engine/compiler.js.map +0 -1
  237. package/dist/core/schema-engine/generator.d.ts +0 -115
  238. package/dist/core/schema-engine/generator.d.ts.map +0 -1
  239. package/dist/core/schema-engine/generator.js +0 -506
  240. package/dist/core/schema-engine/generator.js.map +0 -1
  241. package/dist/core/schema-engine/index.d.ts +0 -18
  242. package/dist/core/schema-engine/index.d.ts.map +0 -1
  243. package/dist/core/schema-engine/index.js +0 -18
  244. package/dist/core/schema-engine/index.js.map +0 -1
  245. package/dist/core/schema-engine/psf.d.ts +0 -612
  246. package/dist/core/schema-engine/psf.d.ts.map +0 -1
  247. package/dist/core/schema-engine/psf.js +0 -45
  248. package/dist/core/schema-engine/psf.js.map +0 -1
  249. package/dist/core/schema-engine/types.d.ts +0 -10
  250. package/dist/core/schema-engine/types.d.ts.map +0 -1
  251. package/dist/core/schema-engine/types.js +0 -7
  252. package/dist/core/schema-engine/types.js.map +0 -1
  253. package/dist/core/schema-engine/validator.d.ts +0 -140
  254. package/dist/core/schema-engine/validator.d.ts.map +0 -1
  255. package/dist/core/schema-engine/validator.js +0 -407
  256. package/dist/core/schema-engine/validator.js.map +0 -1
  257. package/dist/src/adapters/cli.d.ts +0 -43
  258. package/dist/src/adapters/cli.d.ts.map +0 -1
  259. package/dist/src/adapters/cli.js +0 -126
  260. package/dist/src/adapters/cli.js.map +0 -1
  261. package/dist/src/cli/commands/auth.d.ts +0 -26
  262. package/dist/src/cli/commands/auth.d.ts.map +0 -1
  263. package/dist/src/cli/commands/auth.js +0 -233
  264. package/dist/src/cli/commands/auth.js.map +0 -1
  265. package/dist/src/cli/commands/build.d.ts +0 -23
  266. package/dist/src/cli/commands/build.d.ts.map +0 -1
  267. package/dist/src/cli/commands/build.js +0 -162
  268. package/dist/src/cli/commands/build.js.map +0 -1
  269. package/dist/src/cli/commands/canvas.d.ts +0 -23
  270. package/dist/src/cli/commands/canvas.d.ts.map +0 -1
  271. package/dist/src/cli/commands/canvas.js +0 -215
  272. package/dist/src/cli/commands/canvas.js.map +0 -1
  273. package/dist/src/cli/commands/cloud.d.ts +0 -27
  274. package/dist/src/cli/commands/cloud.d.ts.map +0 -1
  275. package/dist/src/cli/commands/cloud.js +0 -232
  276. package/dist/src/cli/commands/cloud.js.map +0 -1
  277. package/dist/src/cli/commands/create.d.ts +0 -21
  278. package/dist/src/cli/commands/create.d.ts.map +0 -1
  279. package/dist/src/cli/commands/create.js +0 -621
  280. package/dist/src/cli/commands/create.js.map +0 -1
  281. package/dist/src/cli/commands/dev.d.ts +0 -21
  282. package/dist/src/cli/commands/dev.d.ts.map +0 -1
  283. package/dist/src/cli/commands/dev.js +0 -71
  284. package/dist/src/cli/commands/dev.js.map +0 -1
  285. package/dist/src/cli/commands/generate.d.ts +0 -25
  286. package/dist/src/cli/commands/generate.d.ts.map +0 -1
  287. package/dist/src/cli/commands/generate.js +0 -168
  288. package/dist/src/cli/commands/generate.js.map +0 -1
  289. package/dist/src/cli/commands/orchestrate.d.ts +0 -44
  290. package/dist/src/cli/commands/orchestrate.d.ts.map +0 -1
  291. package/dist/src/cli/commands/orchestrate.js +0 -150
  292. package/dist/src/cli/commands/orchestrate.js.map +0 -1
  293. package/dist/src/cli/commands/verify.d.ts +0 -10
  294. package/dist/src/cli/commands/verify.d.ts.map +0 -1
  295. package/dist/src/cli/commands/verify.js +0 -39
  296. package/dist/src/cli/commands/verify.js.map +0 -1
  297. package/dist/src/cli/index.d.ts +0 -8
  298. package/dist/src/cli/index.d.ts.map +0 -1
  299. package/dist/src/cli/index.js +0 -226
  300. package/dist/src/cli/index.js.map +0 -1
  301. package/dist/src/cloud/auth.d.ts +0 -51
  302. package/dist/src/cloud/auth.d.ts.map +0 -1
  303. package/dist/src/cloud/auth.js +0 -194
  304. package/dist/src/cloud/auth.js.map +0 -1
  305. package/dist/src/cloud/billing.d.ts +0 -184
  306. package/dist/src/cloud/billing.d.ts.map +0 -1
  307. package/dist/src/cloud/billing.js +0 -179
  308. package/dist/src/cloud/billing.js.map +0 -1
  309. package/dist/src/cloud/client.d.ts +0 -39
  310. package/dist/src/cloud/client.d.ts.map +0 -1
  311. package/dist/src/cloud/client.js +0 -176
  312. package/dist/src/cloud/client.js.map +0 -1
  313. package/dist/src/cloud/index.d.ts +0 -44
  314. package/dist/src/cloud/index.d.ts.map +0 -1
  315. package/dist/src/cloud/index.js +0 -44
  316. package/dist/src/cloud/index.js.map +0 -1
  317. package/dist/src/cloud/marketplace.d.ts +0 -166
  318. package/dist/src/cloud/marketplace.d.ts.map +0 -1
  319. package/dist/src/cloud/marketplace.js +0 -159
  320. package/dist/src/cloud/marketplace.js.map +0 -1
  321. package/dist/src/cloud/provisioning.d.ts +0 -110
  322. package/dist/src/cloud/provisioning.d.ts.map +0 -1
  323. package/dist/src/cloud/provisioning.js +0 -148
  324. package/dist/src/cloud/provisioning.js.map +0 -1
  325. package/dist/src/cloud/relay/endpoints.d.ts +0 -62
  326. package/dist/src/cloud/relay/endpoints.d.ts.map +0 -1
  327. package/dist/src/cloud/relay/endpoints.js +0 -217
  328. package/dist/src/cloud/relay/endpoints.js.map +0 -1
  329. package/dist/src/cloud/relay/health/index.d.ts +0 -5
  330. package/dist/src/cloud/relay/health/index.d.ts.map +0 -1
  331. package/dist/src/cloud/relay/health/index.js +0 -9
  332. package/dist/src/cloud/relay/health/index.js.map +0 -1
  333. package/dist/src/cloud/relay/stats/index.d.ts +0 -5
  334. package/dist/src/cloud/relay/stats/index.d.ts.map +0 -1
  335. package/dist/src/cloud/relay/stats/index.js +0 -9
  336. package/dist/src/cloud/relay/stats/index.js.map +0 -1
  337. package/dist/src/cloud/relay/sync/index.d.ts +0 -5
  338. package/dist/src/cloud/relay/sync/index.d.ts.map +0 -1
  339. package/dist/src/cloud/relay/sync/index.js +0 -9
  340. package/dist/src/cloud/relay/sync/index.js.map +0 -1
  341. package/dist/src/cloud/relay/usage/index.d.ts +0 -5
  342. package/dist/src/cloud/relay/usage/index.d.ts.map +0 -1
  343. package/dist/src/cloud/relay/usage/index.js +0 -9
  344. package/dist/src/cloud/relay/usage/index.js.map +0 -1
  345. package/dist/src/cloud/sponsors.d.ts +0 -81
  346. package/dist/src/cloud/sponsors.d.ts.map +0 -1
  347. package/dist/src/cloud/sponsors.js +0 -130
  348. package/dist/src/cloud/sponsors.js.map +0 -1
  349. package/dist/src/cloud/types.d.ts +0 -169
  350. package/dist/src/cloud/types.d.ts.map +0 -1
  351. package/dist/src/cloud/types.js +0 -7
  352. package/dist/src/cloud/types.js.map +0 -1
  353. package/dist/src/components/index.d.ts.map +0 -1
  354. package/dist/src/components/index.js +0 -17
  355. package/dist/src/components/index.js.map +0 -1
  356. package/dist/src/core/actors.d.ts +0 -95
  357. package/dist/src/core/actors.d.ts.map +0 -1
  358. package/dist/src/core/actors.js +0 -158
  359. package/dist/src/core/actors.js.map +0 -1
  360. package/dist/src/core/component/generator.d.ts.map +0 -1
  361. package/dist/src/core/component/generator.js +0 -349
  362. package/dist/src/core/component/generator.js.map +0 -1
  363. package/dist/src/core/engine.d.ts +0 -92
  364. package/dist/src/core/engine.d.ts.map +0 -1
  365. package/dist/src/core/engine.js +0 -199
  366. package/dist/src/core/engine.js.map +0 -1
  367. package/dist/src/core/introspection.d.ts +0 -141
  368. package/dist/src/core/introspection.d.ts.map +0 -1
  369. package/dist/src/core/introspection.js +0 -208
  370. package/dist/src/core/introspection.js.map +0 -1
  371. package/dist/src/core/logic/generator.d.ts +0 -76
  372. package/dist/src/core/logic/generator.d.ts.map +0 -1
  373. package/dist/src/core/logic/generator.js +0 -370
  374. package/dist/src/core/logic/generator.js.map +0 -1
  375. package/dist/src/core/pluresdb/adapter.d.ts +0 -72
  376. package/dist/src/core/pluresdb/adapter.d.ts.map +0 -1
  377. package/dist/src/core/pluresdb/adapter.js +0 -73
  378. package/dist/src/core/pluresdb/adapter.js.map +0 -1
  379. package/dist/src/core/pluresdb/generator.d.ts +0 -58
  380. package/dist/src/core/pluresdb/generator.d.ts.map +0 -1
  381. package/dist/src/core/pluresdb/generator.js +0 -191
  382. package/dist/src/core/pluresdb/generator.js.map +0 -1
  383. package/dist/src/core/pluresdb/index.d.ts +0 -15
  384. package/dist/src/core/pluresdb/index.d.ts.map +0 -1
  385. package/dist/src/core/pluresdb/index.js +0 -11
  386. package/dist/src/core/pluresdb/index.js.map +0 -1
  387. package/dist/src/core/pluresdb/schema-registry.d.ts +0 -104
  388. package/dist/src/core/pluresdb/schema-registry.d.ts.map +0 -1
  389. package/dist/src/core/pluresdb/schema-registry.js +0 -130
  390. package/dist/src/core/pluresdb/schema-registry.js.map +0 -1
  391. package/dist/src/core/pluresdb/store.d.ts +0 -199
  392. package/dist/src/core/pluresdb/store.d.ts.map +0 -1
  393. package/dist/src/core/pluresdb/store.js +0 -344
  394. package/dist/src/core/pluresdb/store.js.map +0 -1
  395. package/dist/src/core/protocol.d.ts.map +0 -1
  396. package/dist/src/core/protocol.js +0 -46
  397. package/dist/src/core/protocol.js.map +0 -1
  398. package/dist/src/core/rules.d.ts +0 -120
  399. package/dist/src/core/rules.d.ts.map +0 -1
  400. package/dist/src/core/rules.js +0 -81
  401. package/dist/src/core/rules.js.map +0 -1
  402. package/dist/src/core/schema/loader.d.ts +0 -47
  403. package/dist/src/core/schema/loader.d.ts.map +0 -1
  404. package/dist/src/core/schema/loader.js +0 -189
  405. package/dist/src/core/schema/loader.js.map +0 -1
  406. package/dist/src/core/schema/normalize.d.ts +0 -72
  407. package/dist/src/core/schema/normalize.d.ts.map +0 -1
  408. package/dist/src/core/schema/normalize.js +0 -190
  409. package/dist/src/core/schema/normalize.js.map +0 -1
  410. package/dist/src/core/schema/types.d.ts.map +0 -1
  411. package/dist/src/core/schema/types.js +0 -161
  412. package/dist/src/core/schema/types.js.map +0 -1
  413. package/dist/src/dsl/index.d.ts +0 -152
  414. package/dist/src/dsl/index.d.ts.map +0 -1
  415. package/dist/src/dsl/index.js +0 -132
  416. package/dist/src/dsl/index.js.map +0 -1
  417. package/dist/src/dsl.d.ts +0 -124
  418. package/dist/src/dsl.d.ts.map +0 -1
  419. package/dist/src/dsl.js +0 -130
  420. package/dist/src/dsl.js.map +0 -1
  421. package/dist/src/examples/advanced-todo/index.d.ts +0 -55
  422. package/dist/src/examples/advanced-todo/index.d.ts.map +0 -1
  423. package/dist/src/examples/advanced-todo/index.js +0 -222
  424. package/dist/src/examples/advanced-todo/index.js.map +0 -1
  425. package/dist/src/examples/auth-basic/index.d.ts +0 -17
  426. package/dist/src/examples/auth-basic/index.d.ts.map +0 -1
  427. package/dist/src/examples/auth-basic/index.js +0 -122
  428. package/dist/src/examples/auth-basic/index.js.map +0 -1
  429. package/dist/src/examples/cart/index.d.ts +0 -19
  430. package/dist/src/examples/cart/index.d.ts.map +0 -1
  431. package/dist/src/examples/cart/index.js +0 -202
  432. package/dist/src/examples/cart/index.js.map +0 -1
  433. package/dist/src/examples/hero-ecommerce/index.d.ts +0 -39
  434. package/dist/src/examples/hero-ecommerce/index.d.ts.map +0 -1
  435. package/dist/src/examples/hero-ecommerce/index.js +0 -506
  436. package/dist/src/examples/hero-ecommerce/index.js.map +0 -1
  437. package/dist/src/examples/svelte-counter/index.d.ts +0 -31
  438. package/dist/src/examples/svelte-counter/index.d.ts.map +0 -1
  439. package/dist/src/examples/svelte-counter/index.js +0 -123
  440. package/dist/src/examples/svelte-counter/index.js.map +0 -1
  441. package/dist/src/flows.d.ts +0 -125
  442. package/dist/src/flows.d.ts.map +0 -1
  443. package/dist/src/flows.js +0 -160
  444. package/dist/src/flows.js.map +0 -1
  445. package/dist/src/index.d.ts +0 -77
  446. package/dist/src/index.d.ts.map +0 -1
  447. package/dist/src/index.js +0 -64
  448. package/dist/src/index.js.map +0 -1
  449. package/dist/src/integrations/code-canvas.d.ts +0 -265
  450. package/dist/src/integrations/code-canvas.d.ts.map +0 -1
  451. package/dist/src/integrations/code-canvas.js +0 -451
  452. package/dist/src/integrations/code-canvas.js.map +0 -1
  453. package/dist/src/integrations/pluresdb.d.ts +0 -117
  454. package/dist/src/integrations/pluresdb.d.ts.map +0 -1
  455. package/dist/src/integrations/pluresdb.js +0 -117
  456. package/dist/src/integrations/pluresdb.js.map +0 -1
  457. package/dist/src/integrations/state-docs.d.ts +0 -191
  458. package/dist/src/integrations/state-docs.d.ts.map +0 -1
  459. package/dist/src/integrations/state-docs.js +0 -515
  460. package/dist/src/integrations/state-docs.js.map +0 -1
  461. package/dist/src/integrations/svelte.d.ts.map +0 -1
  462. package/dist/src/integrations/svelte.js +0 -447
  463. package/dist/src/integrations/svelte.js.map +0 -1
  464. package/dist/src/integrations/tauri.d.ts +0 -360
  465. package/dist/src/integrations/tauri.d.ts.map +0 -1
  466. package/dist/src/integrations/tauri.js +0 -278
  467. package/dist/src/integrations/tauri.js.map +0 -1
  468. package/dist/src/integrations/unum.d.ts +0 -159
  469. package/dist/src/integrations/unum.d.ts.map +0 -1
  470. package/dist/src/integrations/unum.js +0 -240
  471. package/dist/src/integrations/unum.js.map +0 -1
  472. package/dist/src/registry.d.ts +0 -94
  473. package/dist/src/registry.d.ts.map +0 -1
  474. package/dist/src/registry.js +0 -181
  475. package/dist/src/registry.js.map +0 -1
  476. package/dist/src/runtime/terminal-adapter.d.ts.map +0 -1
  477. package/dist/src/runtime/terminal-adapter.js +0 -239
  478. package/dist/src/runtime/terminal-adapter.js.map +0 -1
  479. package/dist/src/step.d.ts +0 -34
  480. package/dist/src/step.d.ts.map +0 -1
  481. package/dist/src/step.js +0 -111
  482. package/dist/src/step.js.map +0 -1
  483. package/dist/src/types.d.ts +0 -63
  484. package/dist/src/types.d.ts.map +0 -1
  485. package/dist/src/types.js +0 -6
  486. package/dist/src/types.js.map +0 -1
  487. package/dist/tools/ast-analyzer/src/ast-analyzer.d.ts +0 -8
  488. package/dist/tools/ast-analyzer/src/ast-analyzer.d.ts.map +0 -1
  489. package/dist/tools/ast-analyzer/src/ast-analyzer.js +0 -119
  490. package/dist/tools/ast-analyzer/src/ast-analyzer.js.map +0 -1
  491. package/dist/tools/cli/commands/index.d.ts +0 -7
  492. package/dist/tools/cli/commands/index.d.ts.map +0 -1
  493. package/dist/tools/cli/commands/index.js +0 -7
  494. package/dist/tools/cli/commands/index.js.map +0 -1
  495. package/dist/tools/cli/index.d.ts +0 -8
  496. package/dist/tools/cli/index.d.ts.map +0 -1
  497. package/dist/tools/cli/index.js +0 -9
  498. package/dist/tools/cli/index.js.map +0 -1
  499. package/dist/tools/watcher/index.d.ts +0 -105
  500. package/dist/tools/watcher/index.d.ts.map +0 -1
  501. package/dist/tools/watcher/index.js +0 -213
  502. package/dist/tools/watcher/index.js.map +0 -1
  503. package/dist/ui/canvas/canvas-projection.d.ts +0 -78
  504. package/dist/ui/canvas/canvas-projection.d.ts.map +0 -1
  505. package/dist/ui/canvas/canvas-projection.js +0 -416
  506. package/dist/ui/canvas/canvas-projection.js.map +0 -1
  507. package/dist/ui/canvas/canvas-state.d.ts +0 -200
  508. package/dist/ui/canvas/canvas-state.d.ts.map +0 -1
  509. package/dist/ui/canvas/canvas-state.js +0 -464
  510. package/dist/ui/canvas/canvas-state.js.map +0 -1
  511. package/dist/ui/canvas/components/index.d.ts +0 -95
  512. package/dist/ui/canvas/components/index.d.ts.map +0 -1
  513. package/dist/ui/canvas/components/index.js +0 -19
  514. package/dist/ui/canvas/components/index.js.map +0 -1
  515. package/dist/ui/canvas/index.d.ts +0 -32
  516. package/dist/ui/canvas/index.d.ts.map +0 -1
  517. package/dist/ui/canvas/index.js +0 -32
  518. package/dist/ui/canvas/index.js.map +0 -1
  519. package/dist/ui/canvas-inspector/src/server.d.ts +0 -2
  520. package/dist/ui/canvas-inspector/src/server.d.ts.map +0 -1
  521. package/dist/ui/canvas-inspector/src/server.js +0 -248
  522. package/dist/ui/canvas-inspector/src/server.js.map +0 -1
  523. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.d.ts +0 -5
  524. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.d.ts.map +0 -1
  525. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.js +0 -58
  526. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.js.map +0 -1
  527. package/dist/ui/svelte-generator/index.d.ts +0 -9
  528. package/dist/ui/svelte-generator/index.d.ts.map +0 -1
  529. package/dist/ui/svelte-generator/index.js +0 -11
  530. package/dist/ui/svelte-generator/index.js.map +0 -1
  531. package/dist/ui/svelte-generator/psf-generator.d.ts +0 -128
  532. package/dist/ui/svelte-generator/psf-generator.d.ts.map +0 -1
  533. package/dist/ui/svelte-generator/psf-generator.js +0 -506
  534. package/dist/ui/svelte-generator/psf-generator.js.map +0 -1
@@ -1,20 +1,29 @@
1
1
  /**
2
2
  * CodeCanvas Integration
3
- *
3
+ *
4
4
  * Integration with plures/code-canvas - A visual schema editor and FSM enforcement tool.
5
5
  * Provides visual editing capabilities for Praxis schemas and logic flows.
6
- *
6
+ *
7
7
  * Features:
8
8
  * - Visual Schema Editor: Drag-and-drop interface for schema design
9
9
  * - FSM Visualization: Mermaid and DOT graph generation
10
10
  * - State Lifecycle Management: Activity tracking and validation
11
11
  * - Canvas Export/Import: YAML and JSON Canvas formats
12
12
  * - Guardian Integration: Pre-commit validation and rules enforcement
13
- *
13
+ *
14
14
  * @see https://github.com/plures/code-canvas
15
15
  */
16
16
 
17
- import type { PraxisSchema, ModelDefinition, ComponentDefinition, LogicDefinition } from "../core/schema/types.js";
17
+ import type {
18
+ PSFSchema,
19
+ PSFModel,
20
+ PSFComponent,
21
+ PSFFact,
22
+ PSFEvent,
23
+ PSFRule,
24
+ PSFConstraint,
25
+ PSFFlow,
26
+ } from '../../core/schema-engine/psf.js';
18
27
 
19
28
  /**
20
29
  * Canvas node representing a visual element
@@ -55,7 +64,7 @@ export interface CanvasEdge {
55
64
  /** Edge label */
56
65
  label?: string;
57
66
  /** Edge type */
58
- type?: 'dependency' | 'transition' | 'trigger' | 'reference';
67
+ type?: 'dependency' | 'transition' | 'trigger' | 'reference' | 'event';
59
68
  /** Edge style */
60
69
  style?: CanvasEdgeStyle;
61
70
  }
@@ -106,6 +115,8 @@ export interface CanvasDocument {
106
115
  nodes: CanvasNode[];
107
116
  /** All edges in the canvas */
108
117
  edges: CanvasEdge[];
118
+ /** Logic flows */
119
+ flows?: PSFFlow[];
109
120
  /** Document metadata */
110
121
  metadata?: {
111
122
  created: number;
@@ -166,7 +177,7 @@ export interface CanvasEditorConfig {
166
177
  /** Canvas document to edit */
167
178
  document?: CanvasDocument;
168
179
  /** Schema to visualize */
169
- schema?: PraxisSchema;
180
+ schema?: PSFSchema;
170
181
  /** Enable FSM validation */
171
182
  enableFSM?: boolean;
172
183
  /** Custom node styles by type */
@@ -225,21 +236,21 @@ export interface GuardianWarning {
225
236
 
226
237
  /**
227
238
  * Create a canvas document from a Praxis schema
228
- *
239
+ *
229
240
  * @example
230
241
  * ```typescript
231
242
  * import { schemaToCanvas } from '@plures/praxis/integrations/code-canvas';
232
- *
243
+ *
233
244
  * const canvas = schemaToCanvas(mySchema, {
234
245
  * layout: 'hierarchical',
235
246
  * });
236
- *
247
+ *
237
248
  * // Export to YAML
238
249
  * const yaml = canvasToYaml(canvas);
239
250
  * ```
240
251
  */
241
252
  export function schemaToCanvas(
242
- schema: PraxisSchema,
253
+ schema: PSFSchema,
243
254
  _options: { layout?: 'hierarchical' | 'force' | 'grid' | 'circular' } = {}
244
255
  ): CanvasDocument {
245
256
  // Note: layout option reserved for future auto-layout implementation
@@ -249,16 +260,21 @@ export function schemaToCanvas(
249
260
  let yOffset = 0;
250
261
  const xSpacing = 200;
251
262
  const ySpacing = 100;
252
-
263
+
253
264
  // Add model nodes
254
265
  if (schema.models) {
255
- schema.models.forEach((model, index) => {
266
+ schema.models.forEach((model: PSFModel, index: number) => {
267
+ const pos =
268
+ model.position && (model.position.x !== 0 || model.position.y !== 0)
269
+ ? model.position
270
+ : { x: 50, y: yOffset + index * ySpacing };
271
+
256
272
  const node: CanvasNode = {
257
- id: `model-${nodeId++}`,
273
+ id: model.id || `model-${nodeId++}`,
258
274
  type: 'model',
259
275
  label: model.name,
260
- x: 50,
261
- y: yOffset + (index * ySpacing),
276
+ x: pos.x,
277
+ y: pos.y,
262
278
  width: 150,
263
279
  height: 60,
264
280
  data: model,
@@ -269,18 +285,23 @@ export function schemaToCanvas(
269
285
  };
270
286
  nodes.push(node);
271
287
  });
272
- yOffset += (schema.models.length * ySpacing) + 50;
288
+ yOffset += schema.models.length * ySpacing + 50;
273
289
  }
274
-
290
+
275
291
  // Add component nodes
276
292
  if (schema.components) {
277
- schema.components.forEach((component, index) => {
293
+ schema.components.forEach((component: PSFComponent, index: number) => {
294
+ const pos =
295
+ component.position && (component.position.x !== 0 || component.position.y !== 0)
296
+ ? component.position
297
+ : { x: 50 + xSpacing, y: yOffset + index * ySpacing };
298
+
278
299
  const node: CanvasNode = {
279
- id: `component-${nodeId++}`,
300
+ id: component.id || `component-${nodeId++}`,
280
301
  type: 'component',
281
302
  label: component.name,
282
- x: 50 + xSpacing,
283
- y: yOffset + (index * ySpacing),
303
+ x: pos.x,
304
+ y: pos.y,
284
305
  width: 150,
285
306
  height: 60,
286
307
  data: component,
@@ -290,10 +311,10 @@ export function schemaToCanvas(
290
311
  },
291
312
  };
292
313
  nodes.push(node);
293
-
314
+
294
315
  // Add edges for component-model relationships
295
316
  if (component.model) {
296
- const modelNode = nodes.find(n => n.type === 'model' && n.label === component.model);
317
+ const modelNode = nodes.find((n) => n.type === 'model' && n.label === component.model);
297
318
  if (modelNode) {
298
319
  edges.push({
299
320
  id: `edge-${edges.length}`,
@@ -305,83 +326,139 @@ export function schemaToCanvas(
305
326
  }
306
327
  }
307
328
  });
308
- yOffset += (schema.components.length * ySpacing) + 50;
329
+ yOffset += schema.components.length * ySpacing + 50;
309
330
  }
310
-
311
- // Add logic nodes
312
- if (schema.logic) {
313
- schema.logic.forEach((logic) => {
314
- // Add events
315
- logic.events?.forEach((event, eventIndex) => {
316
- const node: CanvasNode = {
317
- id: `event-${nodeId++}`,
318
- type: 'event',
319
- label: event.tag,
320
- x: 50 + (xSpacing * 2),
321
- y: yOffset + (eventIndex * ySpacing),
322
- width: 150,
323
- height: 50,
324
- data: event,
325
- style: {
326
- backgroundColor: '#fff3e0',
327
- borderColor: '#f57c00',
328
- },
329
- };
330
- nodes.push(node);
331
- });
332
-
333
- yOffset += ((logic.events?.length || 0) * ySpacing) + 30;
334
-
335
- // Add facts
336
- logic.facts?.forEach((fact, factIndex) => {
337
- const node: CanvasNode = {
338
- id: `fact-${nodeId++}`,
339
- type: 'fact',
340
- label: fact.tag,
341
- x: 50 + (xSpacing * 3),
342
- y: yOffset + (factIndex * ySpacing),
343
- width: 150,
344
- height: 50,
345
- data: fact,
346
- style: {
347
- backgroundColor: '#fce4ec',
348
- borderColor: '#c2185b',
349
- },
350
- };
351
- nodes.push(node);
352
- });
353
-
354
- yOffset += ((logic.facts?.length || 0) * ySpacing) + 30;
355
-
356
- // Add rules
357
- logic.rules?.forEach((rule, ruleIndex) => {
358
- const node: CanvasNode = {
359
- id: `rule-${nodeId++}`,
360
- type: 'rule',
361
- label: rule.id,
362
- x: 50 + (xSpacing * 4),
363
- y: yOffset + (ruleIndex * ySpacing),
364
- width: 150,
365
- height: 50,
366
- data: rule,
367
- style: {
368
- backgroundColor: '#e1f5fe',
369
- borderColor: '#0288d1',
370
- },
371
- };
372
- nodes.push(node);
373
- });
374
-
375
- yOffset += ((logic.rules?.length || 0) * ySpacing) + 30;
331
+
332
+ // Add events
333
+ if (schema.events) {
334
+ schema.events.forEach((event: PSFEvent, index: number) => {
335
+ const pos =
336
+ event.position && (event.position.x !== 0 || event.position.y !== 0)
337
+ ? event.position
338
+ : { x: 50 + xSpacing * 2, y: yOffset + index * ySpacing };
339
+
340
+ const node: CanvasNode = {
341
+ id: event.id || `event-${nodeId++}`,
342
+ type: 'event',
343
+ label: event.tag,
344
+ x: pos.x,
345
+ y: pos.y,
346
+ width: 150,
347
+ height: 50,
348
+ data: event,
349
+ style: {
350
+ backgroundColor: '#fff3e0',
351
+ borderColor: '#f57c00',
352
+ },
353
+ };
354
+ nodes.push(node);
355
+ });
356
+ yOffset += schema.events.length * ySpacing + 30;
357
+ }
358
+
359
+ // Add facts
360
+ if (schema.facts) {
361
+ schema.facts.forEach((fact: PSFFact, index: number) => {
362
+ const pos =
363
+ fact.position && (fact.position.x !== 0 || fact.position.y !== 0)
364
+ ? fact.position
365
+ : { x: 50 + xSpacing * 3, y: yOffset + index * ySpacing };
366
+
367
+ const node: CanvasNode = {
368
+ id: fact.id || `fact-${nodeId++}`,
369
+ type: 'fact',
370
+ label: fact.tag,
371
+ x: pos.x,
372
+ y: pos.y,
373
+ width: 150,
374
+ height: 50,
375
+ data: fact,
376
+ style: {
377
+ backgroundColor: '#fce4ec',
378
+ borderColor: '#c2185b',
379
+ },
380
+ };
381
+ nodes.push(node);
376
382
  });
383
+ yOffset += schema.facts.length * ySpacing + 30;
377
384
  }
378
-
385
+
386
+ // Add rules
387
+ if (schema.rules) {
388
+ schema.rules.forEach((rule: PSFRule, index: number) => {
389
+ const pos =
390
+ rule.position && (rule.position.x !== 0 || rule.position.y !== 0)
391
+ ? rule.position
392
+ : { x: 50 + xSpacing * 4, y: yOffset + index * ySpacing };
393
+
394
+ const node: CanvasNode = {
395
+ id: rule.id || `rule-${nodeId++}`,
396
+ type: 'rule',
397
+ label: rule.id,
398
+ x: pos.x,
399
+ y: pos.y,
400
+ width: 150,
401
+ height: 50,
402
+ data: rule,
403
+ style: {
404
+ backgroundColor: '#e1f5fe',
405
+ borderColor: '#0288d1',
406
+ },
407
+ };
408
+ nodes.push(node);
409
+
410
+ // Add edges for rule triggers
411
+ if (rule.triggers) {
412
+ rule.triggers.forEach((trigger: string) => {
413
+ const eventNode = nodes.find((n) => n.type === 'event' && n.label === trigger);
414
+ if (eventNode) {
415
+ edges.push({
416
+ id: `edge-${edges.length}`,
417
+ source: eventNode.id,
418
+ target: node.id,
419
+ type: 'event',
420
+ label: 'triggers',
421
+ });
422
+ }
423
+ });
424
+ }
425
+ });
426
+ yOffset += schema.rules.length * ySpacing + 30;
427
+ }
428
+
429
+ // Add constraints
430
+ if (schema.constraints) {
431
+ schema.constraints.forEach((constraint: PSFConstraint, index: number) => {
432
+ const pos =
433
+ constraint.position && (constraint.position.x !== 0 || constraint.position.y !== 0)
434
+ ? constraint.position
435
+ : { x: 50 + xSpacing * 5, y: yOffset + index * ySpacing };
436
+
437
+ const node: CanvasNode = {
438
+ id: constraint.id || `constraint-${nodeId++}`,
439
+ type: 'constraint',
440
+ label: constraint.id,
441
+ x: pos.x,
442
+ y: pos.y,
443
+ width: 150,
444
+ height: 50,
445
+ data: constraint,
446
+ style: {
447
+ backgroundColor: '#ffebee',
448
+ borderColor: '#c62828',
449
+ },
450
+ };
451
+ nodes.push(node);
452
+ });
453
+ }
454
+
379
455
  return {
380
456
  id: `canvas-${Date.now()}`,
381
457
  name: schema.name || 'Praxis Schema',
382
- version: schema.version || '1.0.0',
458
+ version: schema.$version || '1.0.0',
383
459
  nodes,
384
460
  edges,
461
+ flows: schema.flows || [],
385
462
  metadata: {
386
463
  created: Date.now(),
387
464
  modified: Date.now(),
@@ -394,95 +471,64 @@ export function schemaToCanvas(
394
471
  /**
395
472
  * Convert a canvas document back to a Praxis schema
396
473
  */
397
- export function canvasToSchema(canvas: CanvasDocument): PraxisSchema {
398
- const models: ModelDefinition[] = [];
399
- const components: ComponentDefinition[] = [];
400
- const logic: LogicDefinition[] = [];
401
-
402
- // Group logic elements - using proper schema types
403
- const events: Array<{ tag: string; payload: Record<string, string>; description?: string }> = [];
404
- const facts: Array<{ tag: string; payload: Record<string, string>; description?: string }> = [];
405
- const rules: Array<{ id: string; description: string; on?: string[]; when?: string; then: string; priority?: number }> = [];
406
- const constraints: Array<{ id: string; description: string; check: string; message: string }> = [];
407
-
474
+ export function canvasToSchema(canvas: CanvasDocument): PSFSchema {
475
+ const models: PSFModel[] = [];
476
+ const components: PSFComponent[] = [];
477
+ const events: PSFEvent[] = [];
478
+ const facts: PSFFact[] = [];
479
+ const rules: PSFRule[] = [];
480
+ const constraints: PSFConstraint[] = [];
481
+
408
482
  for (const node of canvas.nodes) {
483
+ const position = { x: node.x, y: node.y };
484
+
409
485
  switch (node.type) {
410
486
  case 'model':
411
487
  if (node.data) {
412
- models.push(node.data as ModelDefinition);
488
+ models.push({ ...(node.data as PSFModel), position });
413
489
  }
414
490
  break;
415
491
  case 'component':
416
492
  if (node.data) {
417
- components.push(node.data as ComponentDefinition);
493
+ components.push({ ...(node.data as PSFComponent), position });
418
494
  }
419
495
  break;
420
496
  case 'event':
421
497
  if (node.data) {
422
- const eventData = node.data as { tag: string; payload?: Record<string, string>; description?: string };
423
- events.push({
424
- tag: eventData.tag,
425
- payload: eventData.payload || {},
426
- description: eventData.description,
427
- });
498
+ events.push({ ...(node.data as PSFEvent), position });
428
499
  }
429
500
  break;
430
501
  case 'fact':
431
502
  if (node.data) {
432
- const factData = node.data as { tag: string; payload?: Record<string, string>; description?: string };
433
- facts.push({
434
- tag: factData.tag,
435
- payload: factData.payload || {},
436
- description: factData.description,
437
- });
503
+ facts.push({ ...(node.data as PSFFact), position });
438
504
  }
439
505
  break;
440
506
  case 'rule':
441
507
  if (node.data) {
442
- const ruleData = node.data as { id: string; description?: string; on?: string[]; when?: string; then?: string; priority?: number };
443
- rules.push({
444
- id: ruleData.id,
445
- description: ruleData.description || '',
446
- on: ruleData.on,
447
- when: ruleData.when,
448
- then: ruleData.then || '',
449
- priority: ruleData.priority,
450
- });
508
+ rules.push({ ...(node.data as PSFRule), position });
451
509
  }
452
510
  break;
453
511
  case 'constraint':
454
512
  if (node.data) {
455
- const constraintData = node.data as { id: string; description?: string; check?: string; message?: string };
456
- constraints.push({
457
- id: constraintData.id,
458
- description: constraintData.description || '',
459
- check: constraintData.check || 'true',
460
- message: constraintData.message || '',
461
- });
513
+ constraints.push({ ...(node.data as PSFConstraint), position });
462
514
  }
463
515
  break;
464
516
  }
465
517
  }
466
-
467
- // Create logic definition if we have any logic elements
468
- if (events.length > 0 || facts.length > 0 || rules.length > 0 || constraints.length > 0) {
469
- logic.push({
470
- id: 'canvas-logic',
471
- description: 'Logic extracted from canvas',
472
- events: events.length > 0 ? events : undefined,
473
- facts: facts.length > 0 ? facts : undefined,
474
- rules: rules.length > 0 ? rules : undefined,
475
- constraints: constraints.length > 0 ? constraints : undefined,
476
- });
477
- }
478
-
518
+
479
519
  return {
480
- version: canvas.version,
520
+ $version: '1.0.0',
521
+ id: canvas.id,
481
522
  name: canvas.name,
482
523
  description: canvas.metadata?.description,
483
524
  models,
484
525
  components,
485
- logic,
526
+ events,
527
+ facts,
528
+ rules,
529
+ constraints,
530
+ flows: canvas.flows || [],
531
+ metadata: canvas.metadata,
486
532
  };
487
533
  }
488
534
 
@@ -497,7 +543,7 @@ export function canvasToYaml(canvas: CanvasDocument): string {
497
543
  '',
498
544
  'nodes:',
499
545
  ];
500
-
546
+
501
547
  for (const node of canvas.nodes) {
502
548
  lines.push(` - id: "${node.id}"`);
503
549
  lines.push(` type: "${node.type}"`);
@@ -511,7 +557,7 @@ export function canvasToYaml(canvas: CanvasDocument): string {
511
557
  }
512
558
  lines.push('');
513
559
  }
514
-
560
+
515
561
  lines.push('edges:');
516
562
  for (const edge of canvas.edges) {
517
563
  lines.push(` - id: "${edge.id}"`);
@@ -525,7 +571,7 @@ export function canvasToYaml(canvas: CanvasDocument): string {
525
571
  }
526
572
  lines.push('');
527
573
  }
528
-
574
+
529
575
  return lines.join('\n');
530
576
  }
531
577
 
@@ -533,10 +579,8 @@ export function canvasToYaml(canvas: CanvasDocument): string {
533
579
  * Export canvas to Mermaid diagram format
534
580
  */
535
581
  export function canvasToMermaid(canvas: CanvasDocument): string {
536
- const lines: string[] = [
537
- 'graph TD',
538
- ];
539
-
582
+ const lines: string[] = ['graph TD'];
583
+
540
584
  // Add node definitions with styling
541
585
  for (const node of canvas.nodes) {
542
586
  let shape: string;
@@ -564,21 +608,21 @@ export function canvasToMermaid(canvas: CanvasDocument): string {
564
608
  }
565
609
  lines.push(` ${node.id}${shape}`);
566
610
  }
567
-
611
+
568
612
  lines.push('');
569
-
613
+
570
614
  // Add edges
571
615
  for (const edge of canvas.edges) {
572
616
  const label = edge.label ? `|${edge.label}|` : '';
573
617
  lines.push(` ${edge.source} -->${label} ${edge.target}`);
574
618
  }
575
-
619
+
576
620
  return lines.join('\n');
577
621
  }
578
622
 
579
623
  /**
580
624
  * Validate files against FSM lifecycle rules
581
- *
625
+ *
582
626
  * This provides integration with the CodeCanvas Guardian for pre-commit validation.
583
627
  */
584
628
  export function validateWithGuardian(
@@ -588,9 +632,9 @@ export function validateWithGuardian(
588
632
  ): GuardianResult {
589
633
  const errors: GuardianError[] = [];
590
634
  const warnings: GuardianWarning[] = [];
591
-
635
+
592
636
  // Check if activity is in a valid state
593
- const currentState = lifecycle.find(s => s.id === activity.activity);
637
+ const currentState = lifecycle.find((s) => s.id === activity.activity);
594
638
  if (!currentState) {
595
639
  errors.push({
596
640
  code: 'INVALID_ACTIVITY',
@@ -598,16 +642,16 @@ export function validateWithGuardian(
598
642
  rule: 'lifecycle-state',
599
643
  });
600
644
  }
601
-
645
+
602
646
  // Validate file access based on allowed paths
603
647
  if (activity.allowedPaths) {
604
648
  for (const file of files) {
605
- const allowed = activity.allowedPaths.some(pattern => {
649
+ const allowed = activity.allowedPaths.some((pattern) => {
606
650
  // Simple glob matching
607
651
  const regex = new RegExp('^' + pattern.replace(/\*/g, '.*') + '$');
608
652
  return regex.test(file);
609
653
  });
610
-
654
+
611
655
  if (!allowed) {
612
656
  errors.push({
613
657
  code: 'PATH_NOT_ALLOWED',
@@ -618,7 +662,7 @@ export function validateWithGuardian(
618
662
  }
619
663
  }
620
664
  }
621
-
665
+
622
666
  return {
623
667
  valid: errors.length === 0,
624
668
  errors,
@@ -630,7 +674,7 @@ export function validateWithGuardian(
630
674
 
631
675
  /**
632
676
  * Create a CodeCanvas editor instance
633
- *
677
+ *
634
678
  * Note: This is a placeholder for the visual editor integration.
635
679
  * The actual visual editor requires a browser environment.
636
680
  */
@@ -640,28 +684,30 @@ export function createCanvasEditor(config: CanvasEditorConfig): {
640
684
  removeNode: (id: string) => void;
641
685
  addEdge: (edge: Omit<CanvasEdge, 'id'>) => CanvasEdge;
642
686
  removeEdge: (id: string) => void;
643
- toSchema: () => PraxisSchema;
687
+ toSchema: () => PSFSchema;
644
688
  toYaml: () => string;
645
689
  toMermaid: () => string;
646
690
  } {
647
- const document = config.document || (config.schema
648
- ? schemaToCanvas(config.schema, { layout: config.layout })
649
- : {
650
- id: `canvas-${Date.now()}`,
651
- name: 'New Canvas',
652
- version: '1.0.0',
653
- nodes: [],
654
- edges: [],
655
- metadata: { created: Date.now(), modified: Date.now() },
656
- viewport: { x: 0, y: 0, zoom: 1 },
657
- });
658
-
691
+ const document =
692
+ config.document ||
693
+ (config.schema
694
+ ? schemaToCanvas(config.schema, { layout: config.layout })
695
+ : {
696
+ id: `canvas-${Date.now()}`,
697
+ name: 'New Canvas',
698
+ version: '1.0.0',
699
+ nodes: [],
700
+ edges: [],
701
+ metadata: { created: Date.now(), modified: Date.now() },
702
+ viewport: { x: 0, y: 0, zoom: 1 },
703
+ });
704
+
659
705
  let nodeIdCounter = document.nodes.length;
660
706
  let edgeIdCounter = document.edges.length;
661
-
707
+
662
708
  return {
663
709
  document,
664
-
710
+
665
711
  addNode(node: Omit<CanvasNode, 'id'>): CanvasNode {
666
712
  const fullNode: CanvasNode = {
667
713
  ...node,
@@ -671,19 +717,17 @@ export function createCanvasEditor(config: CanvasEditorConfig): {
671
717
  document.metadata!.modified = Date.now();
672
718
  return fullNode;
673
719
  },
674
-
720
+
675
721
  removeNode(id: string): void {
676
- const index = document.nodes.findIndex(n => n.id === id);
722
+ const index = document.nodes.findIndex((n) => n.id === id);
677
723
  if (index !== -1) {
678
724
  document.nodes.splice(index, 1);
679
725
  // Also remove connected edges
680
- document.edges = document.edges.filter(
681
- e => e.source !== id && e.target !== id
682
- );
726
+ document.edges = document.edges.filter((e) => e.source !== id && e.target !== id);
683
727
  document.metadata!.modified = Date.now();
684
728
  }
685
729
  },
686
-
730
+
687
731
  addEdge(edge: Omit<CanvasEdge, 'id'>): CanvasEdge {
688
732
  const fullEdge: CanvasEdge = {
689
733
  ...edge,
@@ -693,23 +737,23 @@ export function createCanvasEditor(config: CanvasEditorConfig): {
693
737
  document.metadata!.modified = Date.now();
694
738
  return fullEdge;
695
739
  },
696
-
740
+
697
741
  removeEdge(id: string): void {
698
- const index = document.edges.findIndex(e => e.id === id);
742
+ const index = document.edges.findIndex((e) => e.id === id);
699
743
  if (index !== -1) {
700
744
  document.edges.splice(index, 1);
701
745
  document.metadata!.modified = Date.now();
702
746
  }
703
747
  },
704
-
705
- toSchema(): PraxisSchema {
748
+
749
+ toSchema(): PSFSchema {
706
750
  return canvasToSchema(document);
707
751
  },
708
-
752
+
709
753
  toYaml(): string {
710
754
  return canvasToYaml(document);
711
755
  },
712
-
756
+
713
757
  toMermaid(): string {
714
758
  return canvasToMermaid(document);
715
759
  },