@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
@@ -0,0 +1,144 @@
1
+ import "./chunk-QGM4M3NI.js";
2
+
3
+ // src/cli/commands/build.ts
4
+ import { spawn } from "child_process";
5
+ import * as fs from "fs";
6
+ import * as path from "path";
7
+ async function build(options) {
8
+ const output = options.output || "./dist";
9
+ const target = options.target || "web";
10
+ console.log("\n\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557");
11
+ console.log("\u2551 Praxis Production Build \u2551");
12
+ console.log("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D\n");
13
+ const packageJsonPath = path.join(process.cwd(), "package.json");
14
+ if (!fs.existsSync(packageJsonPath)) {
15
+ console.error("Error: No package.json found in current directory.");
16
+ console.log("Make sure you are in a Praxis project directory.\n");
17
+ process.exit(1);
18
+ }
19
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
20
+ if (!packageJson.scripts?.build) {
21
+ console.error('Error: No "build" script found in package.json.');
22
+ console.log("\nTo build your Praxis project, add a build script to your package.json:");
23
+ console.log(' "scripts": {');
24
+ console.log(' "build": "vite build"');
25
+ console.log(" }\n");
26
+ process.exit(1);
27
+ }
28
+ console.log(`Building for: ${target}`);
29
+ console.log(`Output: ${output}`);
30
+ console.log("");
31
+ if (target === "desktop") {
32
+ await buildDesktop(options);
33
+ return;
34
+ }
35
+ if (target === "mobile") {
36
+ await buildMobile(options);
37
+ return;
38
+ }
39
+ await buildWeb(options);
40
+ }
41
+ async function buildWeb(options) {
42
+ const output = options.output || "./dist";
43
+ console.log("\u{1F310} Building web application...\n");
44
+ const env = {
45
+ ...process.env,
46
+ FORCE_COLOR: "1"
47
+ };
48
+ const args = ["run", "build"];
49
+ if (output !== "./dist") {
50
+ args.push("--", "--outDir", output);
51
+ }
52
+ return new Promise((resolve, reject) => {
53
+ const child = spawn("npm", args, {
54
+ stdio: "inherit",
55
+ shell: true,
56
+ cwd: process.cwd(),
57
+ env
58
+ });
59
+ child.on("error", (error) => {
60
+ console.error("Build failed:", error.message);
61
+ reject(error);
62
+ });
63
+ child.on("exit", (code) => {
64
+ if (code === 0) {
65
+ console.log("\n\u2705 Build completed successfully!");
66
+ console.log(`
67
+ Output: ${output}/`);
68
+ console.log("\nTo preview the build:");
69
+ console.log(" npm run preview\n");
70
+ resolve();
71
+ } else {
72
+ console.error(`
73
+ \u274C Build failed with code ${code}`);
74
+ process.exit(code || 1);
75
+ }
76
+ });
77
+ });
78
+ }
79
+ async function buildDesktop(_options) {
80
+ console.log("\u{1F5A5}\uFE0F Building desktop application with Tauri...\n");
81
+ const tauriConfigPath = path.join(process.cwd(), "src-tauri", "tauri.conf.json");
82
+ if (!fs.existsSync(tauriConfigPath)) {
83
+ console.log("Tauri is not configured for this project.");
84
+ console.log("\nTo add Tauri support:");
85
+ console.log(" 1. npm install -D @tauri-apps/cli");
86
+ console.log(" 2. npm run tauri init");
87
+ console.log(" 3. praxis build --target desktop\n");
88
+ console.log("For more information, see the Tauri integration docs.");
89
+ process.exit(1);
90
+ }
91
+ const packageJson = JSON.parse(
92
+ fs.readFileSync(path.join(process.cwd(), "package.json"), "utf-8")
93
+ );
94
+ const buildScript = packageJson.scripts?.["tauri:build"] || packageJson.scripts?.["tauri"];
95
+ return new Promise((resolve, reject) => {
96
+ const child = spawn("npm", ["run", buildScript ? "tauri:build" : "tauri", "build"], {
97
+ stdio: "inherit",
98
+ shell: true,
99
+ cwd: process.cwd(),
100
+ env: {
101
+ ...process.env,
102
+ FORCE_COLOR: "1"
103
+ }
104
+ });
105
+ child.on("error", (error) => {
106
+ console.error("Desktop build failed:", error.message);
107
+ reject(error);
108
+ });
109
+ child.on("exit", (code) => {
110
+ if (code === 0) {
111
+ console.log("\n\u2705 Desktop build completed!");
112
+ console.log("\nBundles are in: src-tauri/target/release/bundle/");
113
+ resolve();
114
+ } else {
115
+ console.error(`
116
+ \u274C Desktop build failed with code ${code}`);
117
+ process.exit(code || 1);
118
+ }
119
+ });
120
+ });
121
+ }
122
+ async function buildMobile(_options) {
123
+ console.log("\u{1F4F1} Building mobile application...\n");
124
+ const tauriConfigPath = path.join(process.cwd(), "src-tauri", "tauri.conf.json");
125
+ if (!fs.existsSync(tauriConfigPath)) {
126
+ console.log("Tauri is not configured for this project.");
127
+ console.log("\nTo add mobile support:");
128
+ console.log(" 1. npm install -D @tauri-apps/cli");
129
+ console.log(" 2. npm run tauri init");
130
+ console.log(" 3. npm run tauri android init");
131
+ console.log(" 4. npm run tauri ios init");
132
+ console.log(" 5. praxis build --target mobile\n");
133
+ console.log("For more information, see the Tauri mobile docs.");
134
+ process.exit(1);
135
+ }
136
+ console.log("Mobile build requires platform-specific setup:");
137
+ console.log("\n\u{1F4F1} Android:");
138
+ console.log(" npm run tauri android build");
139
+ console.log("\n\u{1F34E} iOS:");
140
+ console.log(" npm run tauri ios build\n");
141
+ }
142
+ export {
143
+ build
144
+ };
@@ -0,0 +1,362 @@
1
+ import {
2
+ canvasToMermaid,
3
+ canvasToYaml,
4
+ createCanvasEditor,
5
+ schemaToCanvas
6
+ } from "./chunk-SRM3OPPM.js";
7
+ import {
8
+ loadSchemaFromFile
9
+ } from "./chunk-UY7YEBE2.js";
10
+ import "./chunk-UATVJBNV.js";
11
+ import "./chunk-QGM4M3NI.js";
12
+
13
+ // src/cli/commands/canvas.ts
14
+ import * as fs from "fs";
15
+ import * as path from "path";
16
+ import * as http from "http";
17
+ import { spawn } from "child_process";
18
+ async function canvas(schemaPath, options) {
19
+ const port = parseInt(options.port || "3000", 10);
20
+ console.log("\n\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557");
21
+ console.log("\u2551 CodeCanvas Visual Editor \u2551");
22
+ console.log("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D\n");
23
+ if (options.export) {
24
+ await exportCanvas(schemaPath, options);
25
+ return;
26
+ }
27
+ let schema;
28
+ if (schemaPath && fs.existsSync(schemaPath)) {
29
+ try {
30
+ const result = await loadSchemaFromFile(schemaPath);
31
+ if (result.errors.length > 0) {
32
+ console.error(`Error loading schema: ${result.errors.join(", ")}`);
33
+ process.exit(1);
34
+ }
35
+ const loadedSchema = result.schema;
36
+ console.log("Loaded schema keys:", Object.keys(loadedSchema));
37
+ console.log("Has logic:", !!loadedSchema.logic);
38
+ console.log("Has events:", !!loadedSchema.events);
39
+ if (loadedSchema.logic && !loadedSchema.events) {
40
+ console.log("Converting legacy schema to PSF format...");
41
+ console.log(`Found ${loadedSchema.logic.length} logic groups.`);
42
+ const rules = [];
43
+ const flows = [];
44
+ loadedSchema.logic.forEach((l) => {
45
+ const flowId = l.id || "default-flow";
46
+ console.log(`Processing flow: ${flowId}`);
47
+ flows.push({
48
+ id: flowId,
49
+ name: l.description || flowId,
50
+ type: "sequence",
51
+ steps: [],
52
+ // Populated implicitly by rules for now
53
+ description: l.description
54
+ });
55
+ (l.rules || []).forEach((r) => {
56
+ rules.push({
57
+ ...r,
58
+ id: r.id || r.name,
59
+ triggers: r.on,
60
+ meta: { ...r.meta, flowId }
61
+ });
62
+ });
63
+ });
64
+ const facts = loadedSchema.logic.flatMap((l) => l.facts || []).map((f) => ({
65
+ ...f,
66
+ id: f.id || f.name
67
+ }));
68
+ const inferredModels = /* @__PURE__ */ new Map();
69
+ inferredModels.set("Connection", {
70
+ id: "Connection",
71
+ name: "Connection",
72
+ description: "Azure DevOps Connection",
73
+ properties: [
74
+ { name: "id", type: "string" },
75
+ { name: "name", type: "string" },
76
+ { name: "orgUrl", type: "string" },
77
+ { name: "project", type: "string" },
78
+ { name: "token", type: "string" }
79
+ ]
80
+ });
81
+ inferredModels.set("WorkItem", {
82
+ id: "WorkItem",
83
+ name: "WorkItem",
84
+ description: "Azure DevOps Work Item",
85
+ properties: [
86
+ { name: "id", type: "number" },
87
+ { name: "title", type: "string" },
88
+ { name: "state", type: "string" },
89
+ { name: "type", type: "string" },
90
+ { name: "assignedTo", type: "string" }
91
+ ]
92
+ });
93
+ const eventSet = /* @__PURE__ */ new Set();
94
+ loadedSchema.logic.forEach((l) => {
95
+ (l.events || []).forEach((e) => eventSet.add(typeof e === "string" ? e : e.name));
96
+ });
97
+ rules.forEach((r) => {
98
+ (r.on || []).forEach((e) => eventSet.add(e));
99
+ if (r.logic && r.logic.events) {
100
+ r.logic.events.forEach((e) => eventSet.add(e));
101
+ }
102
+ });
103
+ const connections = [];
104
+ const factMap = new Map(facts.map((f) => [f.name, f.id]));
105
+ rules.forEach((r) => {
106
+ (r.on || []).forEach((e) => {
107
+ connections.push({
108
+ id: `conn_evt_${e}_${r.id}`,
109
+ source: e,
110
+ target: r.id,
111
+ type: "event",
112
+ label: "triggers"
113
+ });
114
+ });
115
+ if (r.do) {
116
+ const doStrs = Array.isArray(r.do) ? r.do : [r.do];
117
+ doStrs.forEach((action) => {
118
+ factMap.forEach((factId, factName) => {
119
+ if (typeof action === "string" && action.includes(factName)) {
120
+ connections.push({
121
+ id: `conn_act_${r.id}_${factId}`,
122
+ source: r.id,
123
+ target: factId,
124
+ type: "control",
125
+ label: "updates"
126
+ });
127
+ }
128
+ });
129
+ });
130
+ }
131
+ });
132
+ schema = {
133
+ $version: loadedSchema.version || "1.0.0",
134
+ id: loadedSchema.name || "schema",
135
+ name: loadedSchema.name,
136
+ description: loadedSchema.description,
137
+ models: [...loadedSchema.models || [], ...inferredModels.values()],
138
+ components: loadedSchema.components || [],
139
+ events: Array.from(eventSet).map((name) => ({
140
+ id: name,
141
+ tag: name,
142
+ name,
143
+ payload: { type: "object", properties: {} }
144
+ })),
145
+ facts,
146
+ rules,
147
+ constraints: loadedSchema.logic.flatMap((l) => l.constraints || []),
148
+ flows,
149
+ canvas: {
150
+ connections
151
+ },
152
+ metadata: loadedSchema.metadata
153
+ };
154
+ } else {
155
+ schema = loadedSchema;
156
+ }
157
+ console.log(`\u2713 Loaded schema: ${schemaPath}`);
158
+ } catch (error) {
159
+ console.error(`Error loading schema: ${error}`);
160
+ process.exit(1);
161
+ }
162
+ }
163
+ const editor = createCanvasEditor({ schema, layout: "hierarchical" });
164
+ console.log(`
165
+ Starting Canvas API server on http://localhost:${port}`);
166
+ const server = http.createServer((req, res) => {
167
+ res.setHeader("Access-Control-Allow-Origin", "*");
168
+ res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
169
+ res.setHeader("Access-Control-Allow-Headers", "Content-Type");
170
+ if (req.method === "OPTIONS") {
171
+ res.writeHead(200);
172
+ res.end();
173
+ return;
174
+ }
175
+ if (req.url === "/api/canvas") {
176
+ res.writeHead(200, { "Content-Type": "application/json" });
177
+ res.end(JSON.stringify(editor.document));
178
+ } else if (req.url === "/api/mermaid") {
179
+ res.writeHead(200, { "Content-Type": "text/plain" });
180
+ res.end(editor.toMermaid());
181
+ } else if (req.url === "/api/yaml") {
182
+ res.writeHead(200, { "Content-Type": "text/yaml" });
183
+ res.end(editor.toYaml());
184
+ } else if (req.url === "/api/schema") {
185
+ res.writeHead(200, { "Content-Type": "application/json" });
186
+ res.end(JSON.stringify(editor.toSchema()));
187
+ } else {
188
+ res.writeHead(404);
189
+ res.end("Not found");
190
+ }
191
+ });
192
+ server.listen(port, () => {
193
+ console.log("Canvas API server running!");
194
+ console.log("Starting UI...");
195
+ const vitePort = 5173;
196
+ const isWin = process.platform === "win32";
197
+ const cmd = isWin ? "cmd.exe" : "npm";
198
+ const args = isWin ? [
199
+ "/d",
200
+ "/s",
201
+ "/c",
202
+ "npm",
203
+ "exec",
204
+ "--prefix",
205
+ "praxis",
206
+ "vite",
207
+ "praxis/ui/canvas",
208
+ "--",
209
+ "--port",
210
+ vitePort.toString()
211
+ ] : [
212
+ "exec",
213
+ "--prefix",
214
+ "praxis",
215
+ "vite",
216
+ "praxis/ui/canvas",
217
+ "--",
218
+ "--port",
219
+ vitePort.toString()
220
+ ];
221
+ const vite = spawn(cmd, args, {
222
+ stdio: "inherit",
223
+ shell: false,
224
+ env: { ...process.env, API_URL: `http://localhost:${port}` }
225
+ });
226
+ console.log(`
227
+ UI: http://localhost:${vitePort}`);
228
+ console.log(` API: http://localhost:${port}/api/canvas`);
229
+ console.log("Press Ctrl+C to stop.\n");
230
+ vite.on("close", (code) => {
231
+ console.log(`UI process exited with code ${code}`);
232
+ server.close();
233
+ process.exit(code || 0);
234
+ });
235
+ });
236
+ process.on("SIGINT", () => {
237
+ console.log("\nShutting down Canvas server...");
238
+ server.close();
239
+ process.exit(0);
240
+ });
241
+ }
242
+ async function exportCanvas(schemaPath, options) {
243
+ if (!schemaPath || !fs.existsSync(schemaPath)) {
244
+ console.error("Error: Schema file required for export");
245
+ console.log("Usage: praxis canvas <schema-file> --export yaml --output schema.canvas.yaml");
246
+ process.exit(1);
247
+ }
248
+ const result = await loadSchemaFromFile(schemaPath);
249
+ if (result.errors.length > 0 || !result.schema) {
250
+ console.error(`Error loading schema: ${result.errors.join(", ")}`);
251
+ process.exit(1);
252
+ }
253
+ const loadedSchema = result.schema;
254
+ let schema;
255
+ if (loadedSchema.logic && !loadedSchema.events) {
256
+ console.log("Converting legacy schema to PSF format...");
257
+ const rules = [];
258
+ const flows = [];
259
+ loadedSchema.logic.forEach((l) => {
260
+ const flowId = l.id || "default-flow";
261
+ flows.push({
262
+ id: flowId,
263
+ name: l.description || flowId,
264
+ type: "sequence",
265
+ steps: [],
266
+ // Populated implicitly by rules for now
267
+ description: l.description
268
+ });
269
+ (l.rules || []).forEach((r) => {
270
+ rules.push({
271
+ ...r,
272
+ id: r.id || r.name,
273
+ triggers: r.on,
274
+ meta: { ...r.meta, flowId }
275
+ });
276
+ });
277
+ });
278
+ const facts = loadedSchema.logic.flatMap((l) => l.facts || []).map((f) => ({
279
+ ...f,
280
+ id: f.id || f.name
281
+ }));
282
+ const inferredModels = /* @__PURE__ */ new Map();
283
+ inferredModels.set("Connection", {
284
+ id: "Connection",
285
+ name: "Connection",
286
+ description: "Azure DevOps Connection",
287
+ properties: [
288
+ { name: "id", type: "string" },
289
+ { name: "name", type: "string" },
290
+ { name: "orgUrl", type: "string" },
291
+ { name: "project", type: "string" },
292
+ { name: "token", type: "string" }
293
+ ]
294
+ });
295
+ inferredModels.set("WorkItem", {
296
+ id: "WorkItem",
297
+ name: "WorkItem",
298
+ description: "Azure DevOps Work Item",
299
+ properties: [
300
+ { name: "id", type: "number" },
301
+ { name: "title", type: "string" },
302
+ { name: "state", type: "string" },
303
+ { name: "type", type: "string" },
304
+ { name: "assignedTo", type: "string" }
305
+ ]
306
+ });
307
+ const eventSet = /* @__PURE__ */ new Set();
308
+ loadedSchema.logic.forEach((l) => {
309
+ (l.events || []).forEach((e) => eventSet.add(typeof e === "string" ? e : e.name));
310
+ });
311
+ rules.forEach((r) => {
312
+ (r.on || []).forEach((e) => eventSet.add(e));
313
+ if (r.logic && r.logic.events) {
314
+ r.logic.events.forEach((e) => eventSet.add(e));
315
+ }
316
+ });
317
+ schema = {
318
+ $version: loadedSchema.version || "1.0.0",
319
+ id: loadedSchema.name || "schema",
320
+ name: loadedSchema.name,
321
+ description: loadedSchema.description,
322
+ models: [...loadedSchema.models || [], ...inferredModels.values()],
323
+ components: loadedSchema.components || [],
324
+ events: Array.from(eventSet).map((name) => ({
325
+ id: name,
326
+ tag: name,
327
+ name,
328
+ payload: { type: "object", properties: {} }
329
+ })),
330
+ facts,
331
+ rules,
332
+ constraints: loadedSchema.logic.flatMap((l) => l.constraints || []),
333
+ flows,
334
+ metadata: loadedSchema.metadata
335
+ };
336
+ } else {
337
+ schema = loadedSchema;
338
+ }
339
+ const canvas2 = schemaToCanvas(schema);
340
+ let output;
341
+ let ext;
342
+ switch (options.export) {
343
+ case "yaml":
344
+ output = canvasToYaml(canvas2);
345
+ ext = "yaml";
346
+ break;
347
+ case "mermaid":
348
+ output = canvasToMermaid(canvas2);
349
+ ext = "mmd";
350
+ break;
351
+ case "json":
352
+ default:
353
+ output = JSON.stringify(canvas2, null, 2);
354
+ ext = "json";
355
+ }
356
+ const outputPath = options.output || `${path.basename(schemaPath, path.extname(schemaPath))}.canvas.${ext}`;
357
+ fs.writeFileSync(outputPath, output);
358
+ console.log(`\u2713 Exported canvas to: ${outputPath}`);
359
+ }
360
+ export {
361
+ canvas
362
+ };