@plures/praxis 1.0.3 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (530) hide show
  1. package/FRAMEWORK.md +55 -5
  2. package/README.md +162 -375
  3. package/core/codegen/docs-generator.ts +5 -2
  4. package/core/codegen/index.ts +1 -1
  5. package/core/db-adapter/index.ts +2 -2
  6. package/core/db-adapter/sync-engine.ts +17 -6
  7. package/core/logic-engine/engine.ts +1 -1
  8. package/core/logic-engine/index.ts +2 -2
  9. package/core/logic-engine/protocol.ts +1 -1
  10. package/core/logic-engine/psf-adapter.ts +8 -4
  11. package/core/logic-engine/rules.ts +1 -1
  12. package/core/schema-engine/compiler.ts +53 -11
  13. package/core/schema-engine/generator.ts +17 -7
  14. package/core/schema-engine/index.ts +2 -2
  15. package/core/schema-engine/psf.ts +12 -3
  16. package/core/schema-engine/types.ts +3 -11
  17. package/core/schema-engine/validator.ts +112 -22
  18. package/dist/browser/engine-BjdqxeXG.d.ts +333 -0
  19. package/dist/browser/index.d.ts +3004 -0
  20. package/dist/browser/index.js +2892 -0
  21. package/dist/{src → browser}/integrations/svelte.d.ts +19 -17
  22. package/dist/browser/integrations/svelte.js +298 -0
  23. package/dist/node/auth-STARLY7I.js +207 -0
  24. package/dist/node/build-Y7OT5VBF.js +144 -0
  25. package/dist/node/canvas-UERZHJYW.js +362 -0
  26. package/dist/node/chunk-DSDC2JWZ.js +256 -0
  27. package/dist/node/chunk-FXQZXAWF.js +175 -0
  28. package/dist/node/chunk-N5Y37EUV.js +202 -0
  29. package/dist/node/chunk-QGM4M3NI.js +37 -0
  30. package/dist/node/chunk-RJMWCNHR.js +175 -0
  31. package/dist/node/chunk-SRM3OPPM.js +404 -0
  32. package/dist/node/chunk-UATVJBNV.js +175 -0
  33. package/dist/node/chunk-UY7YEBE2.js +159 -0
  34. package/dist/node/chunk-XCY2VIFX.js +143 -0
  35. package/dist/node/chunk-YXH4Y7ZZ.js +349 -0
  36. package/dist/node/cli/index.cjs +215139 -0
  37. package/dist/node/cli/index.d.cts +1 -0
  38. package/dist/node/cli/index.d.ts +1 -0
  39. package/dist/node/cli/index.js +690 -0
  40. package/dist/node/cloud/index.cjs +1043 -0
  41. package/dist/node/cloud/index.d.cts +864 -0
  42. package/dist/node/cloud/index.d.ts +864 -0
  43. package/dist/node/cloud/index.js +456 -0
  44. package/dist/node/cloud-AXOK4PSN.js +212 -0
  45. package/dist/node/component.cjs +374 -0
  46. package/dist/node/component.d.cts +125 -0
  47. package/dist/{src/core/component/generator.d.ts → node/component.d.ts} +11 -8
  48. package/dist/node/component.js +9 -0
  49. package/dist/node/components/index.cjs +216 -0
  50. package/dist/node/components/index.d.cts +43 -0
  51. package/dist/{src → node}/components/index.d.ts +8 -8
  52. package/dist/node/components/index.js +7 -0
  53. package/dist/node/create-TRLSVCNQ.js +584 -0
  54. package/dist/node/dev-PMJZUYGE.js +65 -0
  55. package/dist/node/engine-1iqLe6_P.d.ts +214 -0
  56. package/dist/node/engine-CVJobhHm.d.cts +214 -0
  57. package/dist/node/index.cjs +3247 -0
  58. package/dist/node/index.d.cts +2579 -0
  59. package/dist/node/index.d.ts +2579 -0
  60. package/dist/node/index.js +2098 -0
  61. package/dist/node/integrations/svelte.cjs +330 -0
  62. package/dist/node/integrations/svelte.d.cts +309 -0
  63. package/dist/node/integrations/svelte.d.ts +309 -0
  64. package/dist/node/integrations/svelte.js +300 -0
  65. package/dist/node/orchestrate-737TCL5H.js +127 -0
  66. package/dist/{src/core/protocol.d.ts → node/protocol-Qek7ebBl.d.cts} +11 -10
  67. package/dist/node/protocol-Qek7ebBl.d.ts +122 -0
  68. package/dist/node/schema.cjs +200 -0
  69. package/dist/{src/core/schema/types.d.ts → node/schema.d.cts} +30 -29
  70. package/dist/node/schema.d.ts +371 -0
  71. package/dist/node/schema.js +9 -0
  72. package/dist/{src/runtime/terminal-adapter.d.ts → node/terminal-adapter-07HGftGQ.d.ts} +86 -11
  73. package/dist/node/terminal-adapter-XLtCjjb_.d.cts +231 -0
  74. package/dist/node/verify-QRYKRIDU.js +210960 -0
  75. package/docs/MONETIZATION.md +21 -16
  76. package/docs/REACTIVE_REDESIGN.md +132 -0
  77. package/docs/README.md +47 -36
  78. package/docs/SVELTE_INTEGRATION_STRATEGY.md +68 -0
  79. package/docs/TERMINAL_NODE.md +27 -24
  80. package/docs/core/building-extensions.md +58 -61
  81. package/docs/core/cli-usage.md +59 -59
  82. package/docs/core/code-canvas-sync.md +28 -16
  83. package/docs/core/logic-engine.md +77 -82
  84. package/docs/core/pluresdb-integration.md +29 -39
  85. package/docs/core/schema-model.md +66 -52
  86. package/docs/core/ui-generation.md +57 -49
  87. package/docs/core/what-is-praxis.md +32 -15
  88. package/docs/guides/canvas.md +21 -5
  89. package/docs/guides/getting-started.md +13 -7
  90. package/docs/guides/history-state-pattern.md +65 -51
  91. package/docs/guides/orchestration.md +46 -32
  92. package/docs/guides/parallel-state-pattern.md +56 -72
  93. package/docs/guides/svelte-integration.md +45 -53
  94. package/docs/tutorials/README.md +16 -0
  95. package/docs/tutorials/ecommerce-cart.md +177 -95
  96. package/docs/tutorials/first-app.md +26 -41
  97. package/docs/tutorials/form-builder.md +191 -138
  98. package/docs/tutorials/todo-pluresdb.md +71 -69
  99. package/package.json +58 -23
  100. package/src/__tests__/actors.test.ts +68 -68
  101. package/src/__tests__/billing.test.ts +32 -32
  102. package/src/__tests__/canvas-components.test.ts +94 -73
  103. package/src/__tests__/cli-create.test.ts +28 -28
  104. package/src/__tests__/cloud.test.ts +36 -36
  105. package/src/__tests__/code-canvas-integration.test.ts +132 -141
  106. package/src/__tests__/docs-generator.test.ts +3 -9
  107. package/src/__tests__/dsl.test.ts +58 -64
  108. package/src/__tests__/edge-cases.test.ts +106 -108
  109. package/src/__tests__/engine.test.ts +51 -25
  110. package/src/__tests__/generators.test.ts +42 -44
  111. package/src/__tests__/introspection.test.ts +104 -114
  112. package/src/__tests__/pluresdb.test.ts +189 -187
  113. package/src/__tests__/protocol.test.ts +15 -15
  114. package/src/__tests__/provisioning.test.ts +61 -61
  115. package/src/__tests__/schema.test.ts +7 -11
  116. package/src/__tests__/state-docs-integration.test.ts +162 -145
  117. package/src/__tests__/svelte-integration.test.ts +16 -19
  118. package/src/__tests__/tauri-integration.test.ts +149 -147
  119. package/src/__tests__/terminal-node.test.ts +12 -7
  120. package/src/__tests__/unum-integration.test.ts +68 -68
  121. package/src/adapters/cli.ts +21 -15
  122. package/src/cli/commands/auth.ts +82 -78
  123. package/src/cli/commands/build.ts +29 -27
  124. package/src/cli/commands/canvas.ts +338 -127
  125. package/src/cli/commands/cloud.ts +47 -47
  126. package/src/cli/commands/create.ts +59 -47
  127. package/src/cli/commands/dev.ts +12 -12
  128. package/src/cli/commands/generate.ts +29 -40
  129. package/src/cli/commands/orchestrate.ts +24 -24
  130. package/src/cli/commands/verify.ts +7 -8
  131. package/src/cli/index.ts +14 -10
  132. package/src/cloud/README.md +28 -15
  133. package/src/cloud/auth.ts +55 -70
  134. package/src/cloud/billing.ts +59 -58
  135. package/src/cloud/client.ts +29 -35
  136. package/src/cloud/index.ts +19 -40
  137. package/src/cloud/marketplace.ts +69 -78
  138. package/src/cloud/provisioning.ts +42 -51
  139. package/src/cloud/relay/endpoints.ts +30 -34
  140. package/src/cloud/relay/health/index.ts +1 -1
  141. package/src/cloud/relay/stats/index.ts +1 -1
  142. package/src/cloud/relay/sync/index.ts +1 -1
  143. package/src/cloud/relay/usage/index.ts +1 -1
  144. package/src/cloud/sponsors.ts +31 -34
  145. package/src/cloud/types.ts +4 -4
  146. package/src/components/README.md +1 -0
  147. package/src/components/index.ts +3 -4
  148. package/src/core/actors.ts +7 -7
  149. package/src/core/component/generator.ts +10 -28
  150. package/src/core/engine.ts +51 -24
  151. package/src/core/introspection.ts +37 -35
  152. package/src/core/logic/generator.ts +62 -62
  153. package/src/core/pluresdb/adapter.ts +8 -8
  154. package/src/core/pluresdb/generator.ts +39 -35
  155. package/src/core/pluresdb/index.ts +9 -12
  156. package/src/core/pluresdb/schema-registry.ts +22 -25
  157. package/src/core/pluresdb/store.ts +57 -57
  158. package/src/core/protocol.ts +14 -14
  159. package/src/core/reactive-engine.svelte.ts +65 -0
  160. package/src/core/reactive-engine.ts +67 -0
  161. package/src/core/rules.ts +4 -4
  162. package/src/core/schema/loader.common.ts +150 -0
  163. package/src/core/schema/loader.ts +19 -149
  164. package/src/core/schema/normalize.ts +34 -51
  165. package/src/core/schema/types.ts +47 -11
  166. package/src/dsl/index.ts +8 -8
  167. package/src/dsl.ts +11 -17
  168. package/src/examples/advanced-todo/README.md +58 -40
  169. package/src/examples/advanced-todo/index.ts +3 -3
  170. package/src/examples/auth-basic/index.ts +30 -30
  171. package/src/examples/cart/index.ts +50 -50
  172. package/src/examples/hero-ecommerce/index.ts +130 -157
  173. package/src/examples/svelte-counter/index.ts +22 -26
  174. package/src/flows.ts +6 -17
  175. package/src/index.browser.ts +204 -0
  176. package/src/index.ts +37 -42
  177. package/src/integrations/code-canvas.ts +237 -193
  178. package/src/integrations/pluresdb.ts +55 -35
  179. package/src/integrations/state-docs.ts +104 -104
  180. package/src/integrations/svelte.ts +35 -35
  181. package/src/integrations/tauri.ts +75 -73
  182. package/src/integrations/unum.ts +68 -61
  183. package/src/registry.ts +7 -14
  184. package/src/runtime/terminal-adapter.ts +31 -26
  185. package/src/step.ts +10 -16
  186. package/src/types.ts +1 -1
  187. package/templates/basic-app/README.md +6 -9
  188. package/templates/fullstack-app/README.md +10 -0
  189. package/dist/core/codegen/docs-generator.d.ts +0 -123
  190. package/dist/core/codegen/docs-generator.d.ts.map +0 -1
  191. package/dist/core/codegen/docs-generator.js +0 -674
  192. package/dist/core/codegen/docs-generator.js.map +0 -1
  193. package/dist/core/codegen/index.d.ts +0 -11
  194. package/dist/core/codegen/index.d.ts.map +0 -1
  195. package/dist/core/codegen/index.js +0 -13
  196. package/dist/core/codegen/index.js.map +0 -1
  197. package/dist/core/codegen/ts-generator.d.ts +0 -8
  198. package/dist/core/codegen/ts-generator.d.ts.map +0 -1
  199. package/dist/core/codegen/ts-generator.js +0 -8
  200. package/dist/core/codegen/ts-generator.js.map +0 -1
  201. package/dist/core/db-adapter/index.d.ts +0 -18
  202. package/dist/core/db-adapter/index.d.ts.map +0 -1
  203. package/dist/core/db-adapter/index.js +0 -23
  204. package/dist/core/db-adapter/index.js.map +0 -1
  205. package/dist/core/db-adapter/sync-engine.d.ts +0 -180
  206. package/dist/core/db-adapter/sync-engine.d.ts.map +0 -1
  207. package/dist/core/db-adapter/sync-engine.js +0 -342
  208. package/dist/core/db-adapter/sync-engine.js.map +0 -1
  209. package/dist/core/logic-engine/engine.d.ts +0 -8
  210. package/dist/core/logic-engine/engine.d.ts.map +0 -1
  211. package/dist/core/logic-engine/engine.js +0 -8
  212. package/dist/core/logic-engine/engine.js.map +0 -1
  213. package/dist/core/logic-engine/index.d.ts +0 -16
  214. package/dist/core/logic-engine/index.d.ts.map +0 -1
  215. package/dist/core/logic-engine/index.js +0 -16
  216. package/dist/core/logic-engine/index.js.map +0 -1
  217. package/dist/core/logic-engine/protocol.d.ts +0 -7
  218. package/dist/core/logic-engine/protocol.d.ts.map +0 -1
  219. package/dist/core/logic-engine/protocol.js +0 -7
  220. package/dist/core/logic-engine/protocol.js.map +0 -1
  221. package/dist/core/logic-engine/psf-adapter.d.ts +0 -88
  222. package/dist/core/logic-engine/psf-adapter.d.ts.map +0 -1
  223. package/dist/core/logic-engine/psf-adapter.js +0 -207
  224. package/dist/core/logic-engine/psf-adapter.js.map +0 -1
  225. package/dist/core/logic-engine/rules.d.ts +0 -7
  226. package/dist/core/logic-engine/rules.d.ts.map +0 -1
  227. package/dist/core/logic-engine/rules.js +0 -7
  228. package/dist/core/logic-engine/rules.js.map +0 -1
  229. package/dist/core/schema-engine/compiler.d.ts +0 -198
  230. package/dist/core/schema-engine/compiler.d.ts.map +0 -1
  231. package/dist/core/schema-engine/compiler.js +0 -262
  232. package/dist/core/schema-engine/compiler.js.map +0 -1
  233. package/dist/core/schema-engine/generator.d.ts +0 -115
  234. package/dist/core/schema-engine/generator.d.ts.map +0 -1
  235. package/dist/core/schema-engine/generator.js +0 -506
  236. package/dist/core/schema-engine/generator.js.map +0 -1
  237. package/dist/core/schema-engine/index.d.ts +0 -18
  238. package/dist/core/schema-engine/index.d.ts.map +0 -1
  239. package/dist/core/schema-engine/index.js +0 -18
  240. package/dist/core/schema-engine/index.js.map +0 -1
  241. package/dist/core/schema-engine/psf.d.ts +0 -612
  242. package/dist/core/schema-engine/psf.d.ts.map +0 -1
  243. package/dist/core/schema-engine/psf.js +0 -45
  244. package/dist/core/schema-engine/psf.js.map +0 -1
  245. package/dist/core/schema-engine/types.d.ts +0 -10
  246. package/dist/core/schema-engine/types.d.ts.map +0 -1
  247. package/dist/core/schema-engine/types.js +0 -7
  248. package/dist/core/schema-engine/types.js.map +0 -1
  249. package/dist/core/schema-engine/validator.d.ts +0 -140
  250. package/dist/core/schema-engine/validator.d.ts.map +0 -1
  251. package/dist/core/schema-engine/validator.js +0 -407
  252. package/dist/core/schema-engine/validator.js.map +0 -1
  253. package/dist/src/adapters/cli.d.ts +0 -43
  254. package/dist/src/adapters/cli.d.ts.map +0 -1
  255. package/dist/src/adapters/cli.js +0 -126
  256. package/dist/src/adapters/cli.js.map +0 -1
  257. package/dist/src/cli/commands/auth.d.ts +0 -26
  258. package/dist/src/cli/commands/auth.d.ts.map +0 -1
  259. package/dist/src/cli/commands/auth.js +0 -233
  260. package/dist/src/cli/commands/auth.js.map +0 -1
  261. package/dist/src/cli/commands/build.d.ts +0 -23
  262. package/dist/src/cli/commands/build.d.ts.map +0 -1
  263. package/dist/src/cli/commands/build.js +0 -162
  264. package/dist/src/cli/commands/build.js.map +0 -1
  265. package/dist/src/cli/commands/canvas.d.ts +0 -23
  266. package/dist/src/cli/commands/canvas.d.ts.map +0 -1
  267. package/dist/src/cli/commands/canvas.js +0 -215
  268. package/dist/src/cli/commands/canvas.js.map +0 -1
  269. package/dist/src/cli/commands/cloud.d.ts +0 -27
  270. package/dist/src/cli/commands/cloud.d.ts.map +0 -1
  271. package/dist/src/cli/commands/cloud.js +0 -232
  272. package/dist/src/cli/commands/cloud.js.map +0 -1
  273. package/dist/src/cli/commands/create.d.ts +0 -21
  274. package/dist/src/cli/commands/create.d.ts.map +0 -1
  275. package/dist/src/cli/commands/create.js +0 -621
  276. package/dist/src/cli/commands/create.js.map +0 -1
  277. package/dist/src/cli/commands/dev.d.ts +0 -21
  278. package/dist/src/cli/commands/dev.d.ts.map +0 -1
  279. package/dist/src/cli/commands/dev.js +0 -71
  280. package/dist/src/cli/commands/dev.js.map +0 -1
  281. package/dist/src/cli/commands/generate.d.ts +0 -25
  282. package/dist/src/cli/commands/generate.d.ts.map +0 -1
  283. package/dist/src/cli/commands/generate.js +0 -168
  284. package/dist/src/cli/commands/generate.js.map +0 -1
  285. package/dist/src/cli/commands/orchestrate.d.ts +0 -44
  286. package/dist/src/cli/commands/orchestrate.d.ts.map +0 -1
  287. package/dist/src/cli/commands/orchestrate.js +0 -150
  288. package/dist/src/cli/commands/orchestrate.js.map +0 -1
  289. package/dist/src/cli/commands/verify.d.ts +0 -10
  290. package/dist/src/cli/commands/verify.d.ts.map +0 -1
  291. package/dist/src/cli/commands/verify.js +0 -39
  292. package/dist/src/cli/commands/verify.js.map +0 -1
  293. package/dist/src/cli/index.d.ts +0 -8
  294. package/dist/src/cli/index.d.ts.map +0 -1
  295. package/dist/src/cli/index.js +0 -226
  296. package/dist/src/cli/index.js.map +0 -1
  297. package/dist/src/cloud/auth.d.ts +0 -51
  298. package/dist/src/cloud/auth.d.ts.map +0 -1
  299. package/dist/src/cloud/auth.js +0 -194
  300. package/dist/src/cloud/auth.js.map +0 -1
  301. package/dist/src/cloud/billing.d.ts +0 -184
  302. package/dist/src/cloud/billing.d.ts.map +0 -1
  303. package/dist/src/cloud/billing.js +0 -179
  304. package/dist/src/cloud/billing.js.map +0 -1
  305. package/dist/src/cloud/client.d.ts +0 -39
  306. package/dist/src/cloud/client.d.ts.map +0 -1
  307. package/dist/src/cloud/client.js +0 -176
  308. package/dist/src/cloud/client.js.map +0 -1
  309. package/dist/src/cloud/index.d.ts +0 -44
  310. package/dist/src/cloud/index.d.ts.map +0 -1
  311. package/dist/src/cloud/index.js +0 -44
  312. package/dist/src/cloud/index.js.map +0 -1
  313. package/dist/src/cloud/marketplace.d.ts +0 -166
  314. package/dist/src/cloud/marketplace.d.ts.map +0 -1
  315. package/dist/src/cloud/marketplace.js +0 -159
  316. package/dist/src/cloud/marketplace.js.map +0 -1
  317. package/dist/src/cloud/provisioning.d.ts +0 -110
  318. package/dist/src/cloud/provisioning.d.ts.map +0 -1
  319. package/dist/src/cloud/provisioning.js +0 -148
  320. package/dist/src/cloud/provisioning.js.map +0 -1
  321. package/dist/src/cloud/relay/endpoints.d.ts +0 -62
  322. package/dist/src/cloud/relay/endpoints.d.ts.map +0 -1
  323. package/dist/src/cloud/relay/endpoints.js +0 -217
  324. package/dist/src/cloud/relay/endpoints.js.map +0 -1
  325. package/dist/src/cloud/relay/health/index.d.ts +0 -5
  326. package/dist/src/cloud/relay/health/index.d.ts.map +0 -1
  327. package/dist/src/cloud/relay/health/index.js +0 -9
  328. package/dist/src/cloud/relay/health/index.js.map +0 -1
  329. package/dist/src/cloud/relay/stats/index.d.ts +0 -5
  330. package/dist/src/cloud/relay/stats/index.d.ts.map +0 -1
  331. package/dist/src/cloud/relay/stats/index.js +0 -9
  332. package/dist/src/cloud/relay/stats/index.js.map +0 -1
  333. package/dist/src/cloud/relay/sync/index.d.ts +0 -5
  334. package/dist/src/cloud/relay/sync/index.d.ts.map +0 -1
  335. package/dist/src/cloud/relay/sync/index.js +0 -9
  336. package/dist/src/cloud/relay/sync/index.js.map +0 -1
  337. package/dist/src/cloud/relay/usage/index.d.ts +0 -5
  338. package/dist/src/cloud/relay/usage/index.d.ts.map +0 -1
  339. package/dist/src/cloud/relay/usage/index.js +0 -9
  340. package/dist/src/cloud/relay/usage/index.js.map +0 -1
  341. package/dist/src/cloud/sponsors.d.ts +0 -81
  342. package/dist/src/cloud/sponsors.d.ts.map +0 -1
  343. package/dist/src/cloud/sponsors.js +0 -130
  344. package/dist/src/cloud/sponsors.js.map +0 -1
  345. package/dist/src/cloud/types.d.ts +0 -169
  346. package/dist/src/cloud/types.d.ts.map +0 -1
  347. package/dist/src/cloud/types.js +0 -7
  348. package/dist/src/cloud/types.js.map +0 -1
  349. package/dist/src/components/index.d.ts.map +0 -1
  350. package/dist/src/components/index.js +0 -17
  351. package/dist/src/components/index.js.map +0 -1
  352. package/dist/src/core/actors.d.ts +0 -95
  353. package/dist/src/core/actors.d.ts.map +0 -1
  354. package/dist/src/core/actors.js +0 -158
  355. package/dist/src/core/actors.js.map +0 -1
  356. package/dist/src/core/component/generator.d.ts.map +0 -1
  357. package/dist/src/core/component/generator.js +0 -349
  358. package/dist/src/core/component/generator.js.map +0 -1
  359. package/dist/src/core/engine.d.ts +0 -92
  360. package/dist/src/core/engine.d.ts.map +0 -1
  361. package/dist/src/core/engine.js +0 -199
  362. package/dist/src/core/engine.js.map +0 -1
  363. package/dist/src/core/introspection.d.ts +0 -141
  364. package/dist/src/core/introspection.d.ts.map +0 -1
  365. package/dist/src/core/introspection.js +0 -208
  366. package/dist/src/core/introspection.js.map +0 -1
  367. package/dist/src/core/logic/generator.d.ts +0 -76
  368. package/dist/src/core/logic/generator.d.ts.map +0 -1
  369. package/dist/src/core/logic/generator.js +0 -370
  370. package/dist/src/core/logic/generator.js.map +0 -1
  371. package/dist/src/core/pluresdb/adapter.d.ts +0 -72
  372. package/dist/src/core/pluresdb/adapter.d.ts.map +0 -1
  373. package/dist/src/core/pluresdb/adapter.js +0 -73
  374. package/dist/src/core/pluresdb/adapter.js.map +0 -1
  375. package/dist/src/core/pluresdb/generator.d.ts +0 -58
  376. package/dist/src/core/pluresdb/generator.d.ts.map +0 -1
  377. package/dist/src/core/pluresdb/generator.js +0 -191
  378. package/dist/src/core/pluresdb/generator.js.map +0 -1
  379. package/dist/src/core/pluresdb/index.d.ts +0 -15
  380. package/dist/src/core/pluresdb/index.d.ts.map +0 -1
  381. package/dist/src/core/pluresdb/index.js +0 -11
  382. package/dist/src/core/pluresdb/index.js.map +0 -1
  383. package/dist/src/core/pluresdb/schema-registry.d.ts +0 -104
  384. package/dist/src/core/pluresdb/schema-registry.d.ts.map +0 -1
  385. package/dist/src/core/pluresdb/schema-registry.js +0 -130
  386. package/dist/src/core/pluresdb/schema-registry.js.map +0 -1
  387. package/dist/src/core/pluresdb/store.d.ts +0 -199
  388. package/dist/src/core/pluresdb/store.d.ts.map +0 -1
  389. package/dist/src/core/pluresdb/store.js +0 -344
  390. package/dist/src/core/pluresdb/store.js.map +0 -1
  391. package/dist/src/core/protocol.d.ts.map +0 -1
  392. package/dist/src/core/protocol.js +0 -46
  393. package/dist/src/core/protocol.js.map +0 -1
  394. package/dist/src/core/rules.d.ts +0 -120
  395. package/dist/src/core/rules.d.ts.map +0 -1
  396. package/dist/src/core/rules.js +0 -81
  397. package/dist/src/core/rules.js.map +0 -1
  398. package/dist/src/core/schema/loader.d.ts +0 -47
  399. package/dist/src/core/schema/loader.d.ts.map +0 -1
  400. package/dist/src/core/schema/loader.js +0 -189
  401. package/dist/src/core/schema/loader.js.map +0 -1
  402. package/dist/src/core/schema/normalize.d.ts +0 -72
  403. package/dist/src/core/schema/normalize.d.ts.map +0 -1
  404. package/dist/src/core/schema/normalize.js +0 -190
  405. package/dist/src/core/schema/normalize.js.map +0 -1
  406. package/dist/src/core/schema/types.d.ts.map +0 -1
  407. package/dist/src/core/schema/types.js +0 -161
  408. package/dist/src/core/schema/types.js.map +0 -1
  409. package/dist/src/dsl/index.d.ts +0 -152
  410. package/dist/src/dsl/index.d.ts.map +0 -1
  411. package/dist/src/dsl/index.js +0 -132
  412. package/dist/src/dsl/index.js.map +0 -1
  413. package/dist/src/dsl.d.ts +0 -124
  414. package/dist/src/dsl.d.ts.map +0 -1
  415. package/dist/src/dsl.js +0 -130
  416. package/dist/src/dsl.js.map +0 -1
  417. package/dist/src/examples/advanced-todo/index.d.ts +0 -55
  418. package/dist/src/examples/advanced-todo/index.d.ts.map +0 -1
  419. package/dist/src/examples/advanced-todo/index.js +0 -222
  420. package/dist/src/examples/advanced-todo/index.js.map +0 -1
  421. package/dist/src/examples/auth-basic/index.d.ts +0 -17
  422. package/dist/src/examples/auth-basic/index.d.ts.map +0 -1
  423. package/dist/src/examples/auth-basic/index.js +0 -122
  424. package/dist/src/examples/auth-basic/index.js.map +0 -1
  425. package/dist/src/examples/cart/index.d.ts +0 -19
  426. package/dist/src/examples/cart/index.d.ts.map +0 -1
  427. package/dist/src/examples/cart/index.js +0 -202
  428. package/dist/src/examples/cart/index.js.map +0 -1
  429. package/dist/src/examples/hero-ecommerce/index.d.ts +0 -39
  430. package/dist/src/examples/hero-ecommerce/index.d.ts.map +0 -1
  431. package/dist/src/examples/hero-ecommerce/index.js +0 -506
  432. package/dist/src/examples/hero-ecommerce/index.js.map +0 -1
  433. package/dist/src/examples/svelte-counter/index.d.ts +0 -31
  434. package/dist/src/examples/svelte-counter/index.d.ts.map +0 -1
  435. package/dist/src/examples/svelte-counter/index.js +0 -123
  436. package/dist/src/examples/svelte-counter/index.js.map +0 -1
  437. package/dist/src/flows.d.ts +0 -125
  438. package/dist/src/flows.d.ts.map +0 -1
  439. package/dist/src/flows.js +0 -160
  440. package/dist/src/flows.js.map +0 -1
  441. package/dist/src/index.d.ts +0 -77
  442. package/dist/src/index.d.ts.map +0 -1
  443. package/dist/src/index.js +0 -64
  444. package/dist/src/index.js.map +0 -1
  445. package/dist/src/integrations/code-canvas.d.ts +0 -265
  446. package/dist/src/integrations/code-canvas.d.ts.map +0 -1
  447. package/dist/src/integrations/code-canvas.js +0 -451
  448. package/dist/src/integrations/code-canvas.js.map +0 -1
  449. package/dist/src/integrations/pluresdb.d.ts +0 -117
  450. package/dist/src/integrations/pluresdb.d.ts.map +0 -1
  451. package/dist/src/integrations/pluresdb.js +0 -117
  452. package/dist/src/integrations/pluresdb.js.map +0 -1
  453. package/dist/src/integrations/state-docs.d.ts +0 -191
  454. package/dist/src/integrations/state-docs.d.ts.map +0 -1
  455. package/dist/src/integrations/state-docs.js +0 -515
  456. package/dist/src/integrations/state-docs.js.map +0 -1
  457. package/dist/src/integrations/svelte.d.ts.map +0 -1
  458. package/dist/src/integrations/svelte.js +0 -447
  459. package/dist/src/integrations/svelte.js.map +0 -1
  460. package/dist/src/integrations/tauri.d.ts +0 -360
  461. package/dist/src/integrations/tauri.d.ts.map +0 -1
  462. package/dist/src/integrations/tauri.js +0 -278
  463. package/dist/src/integrations/tauri.js.map +0 -1
  464. package/dist/src/integrations/unum.d.ts +0 -159
  465. package/dist/src/integrations/unum.d.ts.map +0 -1
  466. package/dist/src/integrations/unum.js +0 -240
  467. package/dist/src/integrations/unum.js.map +0 -1
  468. package/dist/src/registry.d.ts +0 -94
  469. package/dist/src/registry.d.ts.map +0 -1
  470. package/dist/src/registry.js +0 -181
  471. package/dist/src/registry.js.map +0 -1
  472. package/dist/src/runtime/terminal-adapter.d.ts.map +0 -1
  473. package/dist/src/runtime/terminal-adapter.js +0 -239
  474. package/dist/src/runtime/terminal-adapter.js.map +0 -1
  475. package/dist/src/step.d.ts +0 -34
  476. package/dist/src/step.d.ts.map +0 -1
  477. package/dist/src/step.js +0 -111
  478. package/dist/src/step.js.map +0 -1
  479. package/dist/src/types.d.ts +0 -63
  480. package/dist/src/types.d.ts.map +0 -1
  481. package/dist/src/types.js +0 -6
  482. package/dist/src/types.js.map +0 -1
  483. package/dist/tools/ast-analyzer/src/ast-analyzer.d.ts +0 -8
  484. package/dist/tools/ast-analyzer/src/ast-analyzer.d.ts.map +0 -1
  485. package/dist/tools/ast-analyzer/src/ast-analyzer.js +0 -119
  486. package/dist/tools/ast-analyzer/src/ast-analyzer.js.map +0 -1
  487. package/dist/tools/cli/commands/index.d.ts +0 -7
  488. package/dist/tools/cli/commands/index.d.ts.map +0 -1
  489. package/dist/tools/cli/commands/index.js +0 -7
  490. package/dist/tools/cli/commands/index.js.map +0 -1
  491. package/dist/tools/cli/index.d.ts +0 -8
  492. package/dist/tools/cli/index.d.ts.map +0 -1
  493. package/dist/tools/cli/index.js +0 -9
  494. package/dist/tools/cli/index.js.map +0 -1
  495. package/dist/tools/watcher/index.d.ts +0 -105
  496. package/dist/tools/watcher/index.d.ts.map +0 -1
  497. package/dist/tools/watcher/index.js +0 -213
  498. package/dist/tools/watcher/index.js.map +0 -1
  499. package/dist/ui/canvas/canvas-projection.d.ts +0 -78
  500. package/dist/ui/canvas/canvas-projection.d.ts.map +0 -1
  501. package/dist/ui/canvas/canvas-projection.js +0 -416
  502. package/dist/ui/canvas/canvas-projection.js.map +0 -1
  503. package/dist/ui/canvas/canvas-state.d.ts +0 -200
  504. package/dist/ui/canvas/canvas-state.d.ts.map +0 -1
  505. package/dist/ui/canvas/canvas-state.js +0 -464
  506. package/dist/ui/canvas/canvas-state.js.map +0 -1
  507. package/dist/ui/canvas/components/index.d.ts +0 -95
  508. package/dist/ui/canvas/components/index.d.ts.map +0 -1
  509. package/dist/ui/canvas/components/index.js +0 -19
  510. package/dist/ui/canvas/components/index.js.map +0 -1
  511. package/dist/ui/canvas/index.d.ts +0 -32
  512. package/dist/ui/canvas/index.d.ts.map +0 -1
  513. package/dist/ui/canvas/index.js +0 -32
  514. package/dist/ui/canvas/index.js.map +0 -1
  515. package/dist/ui/canvas-inspector/src/server.d.ts +0 -2
  516. package/dist/ui/canvas-inspector/src/server.d.ts.map +0 -1
  517. package/dist/ui/canvas-inspector/src/server.js +0 -248
  518. package/dist/ui/canvas-inspector/src/server.js.map +0 -1
  519. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.d.ts +0 -5
  520. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.d.ts.map +0 -1
  521. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.js +0 -58
  522. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.js.map +0 -1
  523. package/dist/ui/svelte-generator/index.d.ts +0 -9
  524. package/dist/ui/svelte-generator/index.d.ts.map +0 -1
  525. package/dist/ui/svelte-generator/index.js +0 -11
  526. package/dist/ui/svelte-generator/index.js.map +0 -1
  527. package/dist/ui/svelte-generator/psf-generator.d.ts +0 -128
  528. package/dist/ui/svelte-generator/psf-generator.d.ts.map +0 -1
  529. package/dist/ui/svelte-generator/psf-generator.js +0 -506
  530. package/dist/ui/svelte-generator/psf-generator.js.map +0 -1
@@ -2,129 +2,129 @@
2
2
  * Unum Integration Tests
3
3
  */
4
4
 
5
- import { describe, it, expect, beforeEach } from "vitest";
6
- import { createUnumAdapter, attachUnumToEngine } from "../integrations/unum.js";
7
- import { createInMemoryDB } from "../integrations/pluresdb.js";
8
- import { createPraxisEngine, PraxisRegistry } from "../index.js";
9
-
10
- describe("Unum Integration", () => {
11
- describe("createUnumAdapter", () => {
12
- it("should create an adapter without identity", async () => {
5
+ import { describe, it, expect, beforeEach } from 'vitest';
6
+ import { createUnumAdapter, attachUnumToEngine } from '../integrations/unum.js';
7
+ import { createInMemoryDB } from '../integrations/pluresdb.js';
8
+ import { createPraxisEngine, PraxisRegistry } from '../index.js';
9
+
10
+ describe('Unum Integration', () => {
11
+ describe('createUnumAdapter', () => {
12
+ it('should create an adapter without identity', async () => {
13
13
  const db = createInMemoryDB();
14
14
  const adapter = await createUnumAdapter({ db });
15
-
15
+
16
16
  expect(adapter).toBeDefined();
17
17
  expect(adapter.identity).toBeNull();
18
18
  });
19
-
20
- it("should create an adapter with identity", async () => {
19
+
20
+ it('should create an adapter with identity', async () => {
21
21
  const db = createInMemoryDB();
22
22
  const adapter = await createUnumAdapter({
23
23
  db,
24
24
  identity: {
25
- id: "test-user",
26
- name: "Test User",
25
+ id: 'test-user',
26
+ name: 'Test User',
27
27
  createdAt: Date.now(),
28
28
  },
29
29
  });
30
-
30
+
31
31
  expect(adapter.identity).toBeDefined();
32
- expect(adapter.identity?.name).toBe("Test User");
32
+ expect(adapter.identity?.name).toBe('Test User');
33
33
  });
34
-
35
- it("should set identity", async () => {
34
+
35
+ it('should set identity', async () => {
36
36
  const db = createInMemoryDB();
37
37
  const adapter = await createUnumAdapter({ db });
38
-
39
- const identity = await adapter.setIdentity({ name: "New User" });
40
-
41
- expect(identity.name).toBe("New User");
38
+
39
+ const identity = await adapter.setIdentity({ name: 'New User' });
40
+
41
+ expect(identity.name).toBe('New User');
42
42
  expect(identity.id).toBeDefined();
43
43
  expect(identity.createdAt).toBeDefined();
44
44
  });
45
-
46
- it("should get identity by ID", async () => {
45
+
46
+ it('should get identity by ID', async () => {
47
47
  const db = createInMemoryDB();
48
48
  const adapter = await createUnumAdapter({ db });
49
-
50
- const created = await adapter.setIdentity({ name: "Test" });
49
+
50
+ const created = await adapter.setIdentity({ name: 'Test' });
51
51
  const fetched = await adapter.getIdentity(created.id);
52
-
52
+
53
53
  expect(fetched).toBeDefined();
54
- expect(fetched?.name).toBe("Test");
54
+ expect(fetched?.name).toBe('Test');
55
55
  });
56
-
57
- it("should create a channel", async () => {
56
+
57
+ it('should create a channel', async () => {
58
58
  const db = createInMemoryDB();
59
59
  const adapter = await createUnumAdapter({ db });
60
-
61
- const channel = await adapter.createChannel("test-channel");
62
-
60
+
61
+ const channel = await adapter.createChannel('test-channel');
62
+
63
63
  expect(channel).toBeDefined();
64
- expect(channel.name).toBe("test-channel");
64
+ expect(channel.name).toBe('test-channel');
65
65
  expect(channel.id).toBeDefined();
66
66
  });
67
-
68
- it("should join a channel", async () => {
67
+
68
+ it('should join a channel', async () => {
69
69
  const db = createInMemoryDB();
70
70
  const adapter = await createUnumAdapter({ db });
71
-
72
- const created = await adapter.createChannel("test-channel");
71
+
72
+ const created = await adapter.createChannel('test-channel');
73
73
  const joined = await adapter.joinChannel(created.id);
74
-
74
+
75
75
  expect(joined.id).toBe(created.id);
76
- expect(joined.name).toBe("test-channel");
76
+ expect(joined.name).toBe('test-channel');
77
77
  });
78
-
79
- it("should list channels", async () => {
78
+
79
+ it('should list channels', async () => {
80
80
  const db = createInMemoryDB();
81
81
  const adapter = await createUnumAdapter({ db });
82
-
83
- await adapter.createChannel("channel-1");
84
- await adapter.createChannel("channel-2");
85
-
82
+
83
+ await adapter.createChannel('channel-1');
84
+ await adapter.createChannel('channel-2');
85
+
86
86
  const channels = await adapter.listChannels();
87
-
87
+
88
88
  expect(channels.length).toBe(2);
89
89
  });
90
-
91
- it("should publish messages to channel", async () => {
90
+
91
+ it('should publish messages to channel', async () => {
92
92
  const db = createInMemoryDB();
93
93
  const adapter = await createUnumAdapter({
94
94
  db,
95
- identity: { id: "user-1", name: "User 1", createdAt: Date.now() },
95
+ identity: { id: 'user-1', name: 'User 1', createdAt: Date.now() },
96
96
  });
97
-
98
- const channel = await adapter.createChannel("test-channel");
99
-
97
+
98
+ const channel = await adapter.createChannel('test-channel');
99
+
100
100
  const messages: unknown[] = [];
101
101
  channel.subscribe((msg) => messages.push(msg));
102
-
102
+
103
103
  await channel.publish({
104
- id: "msg-1",
104
+ id: 'msg-1',
105
105
  sender: adapter.identity!,
106
- content: { text: "Hello!" },
107
- type: "text",
106
+ content: { text: 'Hello!' },
107
+ type: 'text',
108
108
  });
109
-
109
+
110
110
  expect(messages.length).toBe(1);
111
111
  });
112
-
113
- it("should disconnect and cleanup", async () => {
112
+
113
+ it('should disconnect and cleanup', async () => {
114
114
  const db = createInMemoryDB();
115
115
  const adapter = await createUnumAdapter({ db });
116
-
117
- await adapter.createChannel("test-channel");
116
+
117
+ await adapter.createChannel('test-channel');
118
118
  await adapter.disconnect();
119
-
119
+
120
120
  const channels = await adapter.listChannels();
121
121
  expect(channels.length).toBe(0);
122
122
  expect(adapter.identity).toBeNull();
123
123
  });
124
124
  });
125
-
126
- describe("attachUnumToEngine", () => {
127
- it("should attach adapter to engine", async () => {
125
+
126
+ describe('attachUnumToEngine', () => {
127
+ it('should attach adapter to engine', async () => {
128
128
  const db = createInMemoryDB();
129
129
  const adapter = await createUnumAdapter({ db });
130
130
  const registry = new PraxisRegistry();
@@ -132,9 +132,9 @@ describe("Unum Integration", () => {
132
132
  initialContext: {},
133
133
  registry,
134
134
  });
135
-
136
- const cleanup = attachUnumToEngine(engine, adapter, "test-channel");
137
-
135
+
136
+ const cleanup = attachUnumToEngine(engine, adapter, 'test-channel');
137
+
138
138
  expect(cleanup).toBeInstanceOf(Function);
139
139
  cleanup();
140
140
  });
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
3
  * Praxis CLI Adapter
4
- *
4
+ *
5
5
  * JSON-based CLI interface for cross-language Praxis engine invocation.
6
6
  * Reads JSON from stdin, processes through Praxis engine, outputs JSON to stdout.
7
- *
7
+ *
8
8
  * This enables PowerShell, Python, and other languages to use Praxis.
9
9
  */
10
10
 
11
- import * as fs from "fs";
11
+ import * as fs from 'fs';
12
12
  import {
13
13
  createPraxisEngine,
14
14
  PraxisRegistry,
@@ -17,7 +17,7 @@ import {
17
17
  type PraxisStepResult,
18
18
  type RuleDescriptor,
19
19
  type ConstraintDescriptor,
20
- } from "../index.js";
20
+ } from '../index.js';
21
21
 
22
22
  interface CLIInput {
23
23
  state: PraxisState;
@@ -44,7 +44,7 @@ interface RegistryConfig {
44
44
  */
45
45
  function loadRegistryConfig(configPath: string): RegistryConfig {
46
46
  try {
47
- const content = fs.readFileSync(configPath, "utf-8");
47
+ const content = fs.readFileSync(configPath, 'utf-8');
48
48
  return JSON.parse(content);
49
49
  } catch (error) {
50
50
  throw new Error(`Failed to load registry config from ${configPath}: ${error}`);
@@ -71,7 +71,7 @@ function createRegistryFromConfig<TContext = unknown>(
71
71
  // Eval the implementation (for demo purposes)
72
72
  // In production, load from modules or use a safer evaluation method
73
73
  const impl = eval(ruleConfig.impl);
74
-
74
+
75
75
  const rule: RuleDescriptor<TContext> = {
76
76
  id: ruleConfig.id,
77
77
  description: ruleConfig.description,
@@ -92,7 +92,7 @@ function createRegistryFromConfig<TContext = unknown>(
92
92
 
93
93
  try {
94
94
  const impl = eval(constraintConfig.impl);
95
-
95
+
96
96
  const constraint: ConstraintDescriptor<TContext> = {
97
97
  id: constraintConfig.id,
98
98
  description: constraintConfig.description,
@@ -134,14 +134,14 @@ function processStep(input: CLIInput): PraxisStepResult {
134
134
  async function main() {
135
135
  try {
136
136
  // Read input from stdin
137
- let inputData = "";
138
-
137
+ let inputData = '';
138
+
139
139
  for await (const chunk of process.stdin) {
140
140
  inputData += chunk;
141
141
  }
142
142
 
143
143
  if (!inputData.trim()) {
144
- throw new Error("No input provided");
144
+ throw new Error('No input provided');
145
145
  }
146
146
 
147
147
  // Parse input
@@ -149,7 +149,7 @@ async function main() {
149
149
 
150
150
  // Validate input
151
151
  if (!input.state || !input.events || !input.configPath) {
152
- throw new Error("Invalid input: must provide state, events, and configPath");
152
+ throw new Error('Invalid input: must provide state, events, and configPath');
153
153
  }
154
154
 
155
155
  // Process step
@@ -159,10 +159,16 @@ async function main() {
159
159
  console.log(JSON.stringify(result, null, 2));
160
160
  process.exit(0);
161
161
  } catch (error) {
162
- console.error(JSON.stringify({
163
- error: error instanceof Error ? error.message : String(error),
164
- stack: error instanceof Error ? error.stack : undefined,
165
- }, null, 2));
162
+ console.error(
163
+ JSON.stringify(
164
+ {
165
+ error: error instanceof Error ? error.message : String(error),
166
+ stack: error instanceof Error ? error.stack : undefined,
167
+ },
168
+ null,
169
+ 2
170
+ )
171
+ );
166
172
  process.exit(1);
167
173
  }
168
174
  }
@@ -1,19 +1,19 @@
1
1
  /**
2
2
  * Authentication CLI Commands
3
- *
3
+ *
4
4
  * Commands for authenticating with GitHub for Praxis Cloud access.
5
5
  */
6
6
 
7
- import * as fs from "fs";
8
- import * as path from "path";
9
- import * as os from "os";
10
- import { authenticateWithDeviceFlow } from "../../cloud/auth.js";
11
- import { createSponsorsClient } from "../../cloud/sponsors.js";
12
- import type { AuthResult } from "../../cloud/types.js";
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import * as os from 'os';
10
+ import { authenticateWithDeviceFlow } from '../../cloud/auth.js';
11
+ import { createSponsorsClient } from '../../cloud/sponsors.js';
12
+ import type { AuthResult } from '../../cloud/types.js';
13
13
 
14
- const AUTH_DIR = path.join(os.homedir(), ".praxis");
15
- const AUTH_FILE = path.join(AUTH_DIR, "auth.json");
16
- const GITHUB_CLIENT_ID = "Ov23liQxF7P0BqUxVXHk"; // Demo client ID (replace in production)
14
+ const AUTH_DIR = path.join(os.homedir(), '.praxis');
15
+ const AUTH_FILE = path.join(AUTH_DIR, 'auth.json');
16
+ const GITHUB_CLIENT_ID = 'Ov23liQxF7P0BqUxVXHk'; // Demo client ID (replace in production)
17
17
 
18
18
  interface StoredAuth {
19
19
  token: string;
@@ -30,11 +30,11 @@ interface StoredAuth {
30
30
  function loadAuth(): StoredAuth | null {
31
31
  try {
32
32
  if (fs.existsSync(AUTH_FILE)) {
33
- const data = fs.readFileSync(AUTH_FILE, "utf-8");
33
+ const data = fs.readFileSync(AUTH_FILE, 'utf-8');
34
34
  return JSON.parse(data);
35
35
  }
36
36
  } catch (error) {
37
- console.warn("Failed to load authentication:", error);
37
+ console.warn('Failed to load authentication:', error);
38
38
  }
39
39
  return null;
40
40
  }
@@ -48,12 +48,12 @@ function saveAuth(auth: StoredAuth): void {
48
48
  if (!fs.existsSync(AUTH_DIR)) {
49
49
  fs.mkdirSync(AUTH_DIR, { recursive: true });
50
50
  }
51
-
51
+
52
52
  // Save with restricted permissions
53
53
  fs.writeFileSync(AUTH_FILE, JSON.stringify(auth, null, 2), { mode: 0o600 });
54
54
  console.log(`\n✓ Authentication saved to ${AUTH_FILE}`);
55
55
  } catch (error) {
56
- console.error("Failed to save authentication:", error);
56
+ console.error('Failed to save authentication:', error);
57
57
  throw error;
58
58
  }
59
59
  }
@@ -67,7 +67,7 @@ function deleteAuth(): void {
67
67
  fs.unlinkSync(AUTH_FILE);
68
68
  }
69
69
  } catch (error) {
70
- console.warn("Failed to delete authentication:", error);
70
+ console.warn('Failed to delete authentication:', error);
71
71
  }
72
72
  }
73
73
 
@@ -75,40 +75,42 @@ function deleteAuth(): void {
75
75
  * Login command
76
76
  */
77
77
  export async function loginCommand(options: { token?: string }): Promise<void> {
78
- console.log("\n╔═══════════════════════════════════════════════════╗");
79
- console.log("║ Praxis Cloud Authentication ║");
80
- console.log("╚═══════════════════════════════════════════════════╝\n");
81
-
78
+ console.log('\n╔═══════════════════════════════════════════════════╗');
79
+ console.log('║ Praxis Cloud Authentication ║');
80
+ console.log('╚═══════════════════════════════════════════════════╝\n');
81
+
82
82
  // Check if already authenticated
83
83
  const existingAuth = loadAuth();
84
84
  if (existingAuth) {
85
- console.log("⚠ Already authenticated");
85
+ console.log('⚠ Already authenticated');
86
86
  console.log(` User: ${existingAuth.userLogin}`);
87
- console.log(` Authenticated at: ${new Date(existingAuth.authenticatedAt).toLocaleString()}\n`);
87
+ console.log(
88
+ ` Authenticated at: ${new Date(existingAuth.authenticatedAt).toLocaleString()}\n`
89
+ );
88
90
  console.log("Run 'praxis logout' to log out first.");
89
91
  return;
90
92
  }
91
-
93
+
92
94
  let authResult: AuthResult;
93
-
95
+
94
96
  if (options.token) {
95
97
  // Use provided token
96
- console.log("🔐 Using provided personal access token...");
97
-
98
+ console.log('🔐 Using provided personal access token...');
99
+
98
100
  try {
99
- const response = await fetch("https://api.github.com/user", {
101
+ const response = await fetch('https://api.github.com/user', {
100
102
  headers: {
101
103
  Authorization: `Bearer ${options.token}`,
102
- Accept: "application/vnd.github.v3+json",
104
+ Accept: 'application/vnd.github.v3+json',
103
105
  },
104
106
  });
105
-
107
+
106
108
  if (!response.ok) {
107
109
  throw new Error(`Invalid token: ${response.statusText}`);
108
110
  }
109
-
110
- const userData = await response.json() as any;
111
-
111
+
112
+ const userData = (await response.json()) as any;
113
+
112
114
  authResult = {
113
115
  success: true,
114
116
  token: options.token,
@@ -121,42 +123,42 @@ export async function loginCommand(options: { token?: string }): Promise<void> {
121
123
  },
122
124
  };
123
125
  } catch (error) {
124
- console.error("\n✗ Authentication failed");
126
+ console.error('\n✗ Authentication failed');
125
127
  console.error(` Error: ${error instanceof Error ? error.message : String(error)}`);
126
128
  process.exit(1);
127
129
  }
128
130
  } else {
129
131
  // Use device flow
130
- console.log("🔐 Authenticating with GitHub device flow...");
132
+ console.log('🔐 Authenticating with GitHub device flow...');
131
133
  authResult = await authenticateWithDeviceFlow(GITHUB_CLIENT_ID);
132
134
  }
133
-
135
+
134
136
  if (!authResult.success || !authResult.token || !authResult.user) {
135
- console.error("\n✗ Authentication failed");
137
+ console.error('\n✗ Authentication failed');
136
138
  process.exit(1);
137
139
  }
138
-
140
+
139
141
  console.log(`✓ Authenticated as ${authResult.user.login}`);
140
-
142
+
141
143
  // Check GitHub Sponsors status
142
- console.log("\n🔍 Checking GitHub Sponsors status...");
144
+ console.log('\n🔍 Checking GitHub Sponsors status...');
143
145
  try {
144
146
  const sponsorsClient = createSponsorsClient(authResult.token);
145
147
  const subscription = await sponsorsClient.getSubscription(authResult.user.login);
146
-
148
+
147
149
  console.log(`✓ Subscription tier: ${subscription.tier}`);
148
150
  console.log(` Status: ${subscription.status}`);
149
151
  console.log(` Provider: ${subscription.provider}`);
150
-
151
- if (subscription.tier === "free") {
152
- console.log("\n💡 Upgrade to a paid tier for more features!");
153
- console.log(" Visit: https://github.com/sponsors/plures");
152
+
153
+ if (subscription.tier === 'free') {
154
+ console.log('\n💡 Upgrade to a paid tier for more features!');
155
+ console.log(' Visit: https://github.com/sponsors/plures');
154
156
  }
155
157
  } catch (error) {
156
- console.warn("\n⚠ Could not check Sponsors status");
158
+ console.warn('\n⚠ Could not check Sponsors status');
157
159
  console.warn(` Error: ${error instanceof Error ? error.message : String(error)}`);
158
160
  }
159
-
161
+
160
162
  // Save authentication
161
163
  const storedAuth: StoredAuth = {
162
164
  token: authResult.token,
@@ -166,11 +168,11 @@ export async function loginCommand(options: { token?: string }): Promise<void> {
166
168
  userEmail: authResult.user.email,
167
169
  authenticatedAt: Date.now(),
168
170
  };
169
-
171
+
170
172
  saveAuth(storedAuth);
171
-
172
- console.log("\n✓ Successfully logged in!");
173
- console.log("\nNext steps:");
173
+
174
+ console.log('\n✓ Successfully logged in!');
175
+ console.log('\nNext steps:');
174
176
  console.log(" • Use 'praxis cloud init' to set up cloud connection");
175
177
  console.log(" • Use 'praxis whoami' to check your authentication");
176
178
  console.log(" • Use 'praxis cloud status' to check subscription\n");
@@ -181,18 +183,18 @@ export async function loginCommand(options: { token?: string }): Promise<void> {
181
183
  */
182
184
  export async function logoutCommand(): Promise<void> {
183
185
  const auth = loadAuth();
184
-
186
+
185
187
  if (!auth) {
186
- console.log("\n✗ Not currently logged in");
188
+ console.log('\n✗ Not currently logged in');
187
189
  console.log(" Run 'praxis login' to authenticate\n");
188
190
  return;
189
191
  }
190
-
192
+
191
193
  console.log(`\nLogging out user: ${auth.userLogin}...`);
192
-
194
+
193
195
  deleteAuth();
194
-
195
- console.log("✓ Successfully logged out\n");
196
+
197
+ console.log('✓ Successfully logged out\n');
196
198
  }
197
199
 
198
200
  /**
@@ -200,17 +202,17 @@ export async function logoutCommand(): Promise<void> {
200
202
  */
201
203
  export async function whoamiCommand(): Promise<void> {
202
204
  const auth = loadAuth();
203
-
205
+
204
206
  if (!auth) {
205
- console.log("\n✗ Not currently logged in");
207
+ console.log('\n✗ Not currently logged in');
206
208
  console.log(" Run 'praxis login' to authenticate\n");
207
209
  process.exit(1);
208
210
  }
209
-
210
- console.log("\n╔═══════════════════════════════════════════════════╗");
211
- console.log("║ Current Authentication ║");
212
- console.log("╚═══════════════════════════════════════════════════╝\n");
213
-
211
+
212
+ console.log('\n╔═══════════════════════════════════════════════════╗');
213
+ console.log('║ Current Authentication ║');
214
+ console.log('╚═══════════════════════════════════════════════════╝\n');
215
+
214
216
  console.log(`User: ${auth.userLogin}`);
215
217
  if (auth.userName) {
216
218
  console.log(`Name: ${auth.userName}`);
@@ -220,49 +222,51 @@ export async function whoamiCommand(): Promise<void> {
220
222
  }
221
223
  console.log(`User ID: ${auth.userId}`);
222
224
  console.log(`Authenticated: ${new Date(auth.authenticatedAt).toLocaleString()}`);
223
-
225
+
224
226
  // Check token validity
225
- console.log("\n🔍 Checking token validity...");
227
+ console.log('\n🔍 Checking token validity...');
226
228
  try {
227
- const response = await fetch("https://api.github.com/user", {
229
+ const response = await fetch('https://api.github.com/user', {
228
230
  headers: {
229
231
  Authorization: `Bearer ${auth.token}`,
230
- Accept: "application/vnd.github.v3+json",
232
+ Accept: 'application/vnd.github.v3+json',
231
233
  },
232
234
  });
233
-
235
+
234
236
  if (response.ok) {
235
- console.log("✓ Token is valid");
236
-
237
+ console.log('✓ Token is valid');
238
+
237
239
  // Check subscription
238
- console.log("\n🔍 Checking subscription...");
240
+ console.log('\n🔍 Checking subscription...');
239
241
  const sponsorsClient = createSponsorsClient(auth.token);
240
242
  const subscription = await sponsorsClient.getSubscription(auth.userLogin);
241
-
243
+
242
244
  console.log(`Tier: ${subscription.tier}`);
243
245
  console.log(`Status: ${subscription.status}`);
244
246
  console.log(`Provider: ${subscription.provider}`);
245
- console.log("\nLimits:");
247
+ console.log('\nLimits:');
246
248
  console.log(` Syncs/month: ${subscription.limits.maxSyncsPerMonth.toLocaleString()}`);
247
- console.log(` Storage: ${(subscription.limits.maxStorageBytes / 1024 / 1024).toFixed(0)} MB`);
249
+ console.log(
250
+ ` Storage: ${(subscription.limits.maxStorageBytes / 1024 / 1024).toFixed(0)} MB`
251
+ );
248
252
  console.log(` Apps: ${subscription.limits.maxApps}`);
249
- console.log(` Team members: ${subscription.limits.maxTeamMembers ?? "Unlimited"}`);
253
+ console.log(` Team members: ${subscription.limits.maxTeamMembers ?? 'Unlimited'}`);
250
254
  console.log(` Support: ${subscription.limits.supportLevel}`);
251
255
  } else {
252
- console.log("✗ Token is invalid or expired");
256
+ console.log('✗ Token is invalid or expired');
253
257
  console.log(" Run 'praxis login' to re-authenticate");
254
258
  }
255
259
  } catch (error) {
256
- console.error("\n✗ Failed to check token validity");
260
+ console.error('\n✗ Failed to check token validity');
257
261
  console.error(` Error: ${error instanceof Error ? error.message : String(error)}`);
258
262
  }
259
-
263
+
260
264
  console.log();
261
265
  }
262
266
 
263
267
  /**
264
268
  * Get stored authentication token
265
- *
269
+ *
266
270
  * Used by other commands that need authentication
267
271
  */
268
272
  export function getAuthToken(): string | null {