@plures/praxis 0.2.1 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (486) hide show
  1. package/README.md +191 -64
  2. package/core/codegen/docs-generator.ts +808 -0
  3. package/core/codegen/index.ts +27 -0
  4. package/core/codegen/ts-generator.ts +15 -0
  5. package/core/db-adapter/index.ts +52 -0
  6. package/core/db-adapter/sync-engine.ts +450 -0
  7. package/core/logic-engine/engine.ts +12 -0
  8. package/core/logic-engine/index.ts +16 -0
  9. package/core/logic-engine/protocol.ts +16 -0
  10. package/core/logic-engine/psf-adapter.ts +269 -0
  11. package/core/logic-engine/rules.ts +16 -0
  12. package/core/schema-engine/compiler.ts +431 -0
  13. package/core/schema-engine/generator.ts +635 -0
  14. package/core/schema-engine/index.ts +18 -0
  15. package/core/schema-engine/psf.ts +664 -0
  16. package/core/schema-engine/types.ts +63 -0
  17. package/core/schema-engine/validator.ts +541 -0
  18. package/dist/core/codegen/docs-generator.d.ts +123 -0
  19. package/dist/core/codegen/docs-generator.d.ts.map +1 -0
  20. package/dist/core/codegen/docs-generator.js +674 -0
  21. package/dist/core/codegen/docs-generator.js.map +1 -0
  22. package/dist/core/codegen/index.d.ts +11 -0
  23. package/dist/core/codegen/index.d.ts.map +1 -0
  24. package/dist/core/codegen/index.js +13 -0
  25. package/dist/core/codegen/index.js.map +1 -0
  26. package/dist/core/codegen/ts-generator.d.ts +8 -0
  27. package/dist/core/codegen/ts-generator.d.ts.map +1 -0
  28. package/dist/core/codegen/ts-generator.js +8 -0
  29. package/dist/core/codegen/ts-generator.js.map +1 -0
  30. package/dist/core/db-adapter/index.d.ts +18 -0
  31. package/dist/core/db-adapter/index.d.ts.map +1 -0
  32. package/dist/core/db-adapter/index.js +23 -0
  33. package/dist/core/db-adapter/index.js.map +1 -0
  34. package/dist/core/db-adapter/sync-engine.d.ts +180 -0
  35. package/dist/core/db-adapter/sync-engine.d.ts.map +1 -0
  36. package/dist/core/db-adapter/sync-engine.js +342 -0
  37. package/dist/core/db-adapter/sync-engine.js.map +1 -0
  38. package/dist/core/logic-engine/engine.d.ts +8 -0
  39. package/dist/core/logic-engine/engine.d.ts.map +1 -0
  40. package/dist/core/logic-engine/engine.js +8 -0
  41. package/dist/core/logic-engine/engine.js.map +1 -0
  42. package/dist/core/logic-engine/index.d.ts +16 -0
  43. package/dist/core/logic-engine/index.d.ts.map +1 -0
  44. package/dist/core/logic-engine/index.js +16 -0
  45. package/dist/core/logic-engine/index.js.map +1 -0
  46. package/dist/core/logic-engine/protocol.d.ts +7 -0
  47. package/dist/core/logic-engine/protocol.d.ts.map +1 -0
  48. package/dist/core/logic-engine/protocol.js +7 -0
  49. package/dist/core/logic-engine/protocol.js.map +1 -0
  50. package/dist/core/logic-engine/psf-adapter.d.ts +88 -0
  51. package/dist/core/logic-engine/psf-adapter.d.ts.map +1 -0
  52. package/dist/core/logic-engine/psf-adapter.js +207 -0
  53. package/dist/core/logic-engine/psf-adapter.js.map +1 -0
  54. package/dist/core/logic-engine/rules.d.ts +7 -0
  55. package/dist/core/logic-engine/rules.d.ts.map +1 -0
  56. package/dist/core/logic-engine/rules.js +7 -0
  57. package/dist/core/logic-engine/rules.js.map +1 -0
  58. package/dist/core/schema-engine/compiler.d.ts +198 -0
  59. package/dist/core/schema-engine/compiler.d.ts.map +1 -0
  60. package/dist/core/schema-engine/compiler.js +262 -0
  61. package/dist/core/schema-engine/compiler.js.map +1 -0
  62. package/dist/core/schema-engine/generator.d.ts +115 -0
  63. package/dist/core/schema-engine/generator.d.ts.map +1 -0
  64. package/dist/core/schema-engine/generator.js +506 -0
  65. package/dist/core/schema-engine/generator.js.map +1 -0
  66. package/dist/core/schema-engine/index.d.ts +18 -0
  67. package/dist/core/schema-engine/index.d.ts.map +1 -0
  68. package/dist/core/schema-engine/index.js +18 -0
  69. package/dist/core/schema-engine/index.js.map +1 -0
  70. package/dist/core/schema-engine/psf.d.ts +612 -0
  71. package/dist/core/schema-engine/psf.d.ts.map +1 -0
  72. package/dist/core/schema-engine/psf.js +45 -0
  73. package/dist/core/schema-engine/psf.js.map +1 -0
  74. package/dist/core/schema-engine/types.d.ts +10 -0
  75. package/dist/core/schema-engine/types.d.ts.map +1 -0
  76. package/dist/core/schema-engine/types.js +7 -0
  77. package/dist/core/schema-engine/types.js.map +1 -0
  78. package/dist/core/schema-engine/validator.d.ts +140 -0
  79. package/dist/core/schema-engine/validator.d.ts.map +1 -0
  80. package/dist/core/schema-engine/validator.js +407 -0
  81. package/dist/core/schema-engine/validator.js.map +1 -0
  82. package/dist/src/adapters/cli.d.ts.map +1 -0
  83. package/dist/src/adapters/cli.js.map +1 -0
  84. package/dist/src/cli/commands/auth.d.ts.map +1 -0
  85. package/dist/src/cli/commands/auth.js.map +1 -0
  86. package/dist/src/cli/commands/build.d.ts +23 -0
  87. package/dist/src/cli/commands/build.d.ts.map +1 -0
  88. package/dist/src/cli/commands/build.js +162 -0
  89. package/dist/src/cli/commands/build.js.map +1 -0
  90. package/dist/src/cli/commands/canvas.d.ts +23 -0
  91. package/dist/src/cli/commands/canvas.d.ts.map +1 -0
  92. package/dist/src/cli/commands/canvas.js +215 -0
  93. package/dist/src/cli/commands/canvas.js.map +1 -0
  94. package/dist/src/cli/commands/cloud.d.ts.map +1 -0
  95. package/dist/src/cli/commands/cloud.js.map +1 -0
  96. package/dist/src/cli/commands/create.d.ts +21 -0
  97. package/dist/src/cli/commands/create.d.ts.map +1 -0
  98. package/dist/src/cli/commands/create.js +621 -0
  99. package/dist/src/cli/commands/create.js.map +1 -0
  100. package/dist/src/cli/commands/dev.d.ts +21 -0
  101. package/dist/src/cli/commands/dev.d.ts.map +1 -0
  102. package/dist/src/cli/commands/dev.js +71 -0
  103. package/dist/src/cli/commands/dev.js.map +1 -0
  104. package/dist/src/cli/commands/generate.d.ts.map +1 -0
  105. package/dist/src/cli/commands/generate.js.map +1 -0
  106. package/dist/src/cli/commands/orchestrate.d.ts +44 -0
  107. package/dist/src/cli/commands/orchestrate.d.ts.map +1 -0
  108. package/dist/src/cli/commands/orchestrate.js +150 -0
  109. package/dist/src/cli/commands/orchestrate.js.map +1 -0
  110. package/dist/{cli → src/cli}/index.d.ts.map +1 -1
  111. package/dist/{cli → src/cli}/index.js +53 -21
  112. package/dist/src/cli/index.js.map +1 -0
  113. package/dist/src/cloud/auth.d.ts.map +1 -0
  114. package/dist/src/cloud/auth.js.map +1 -0
  115. package/dist/src/cloud/billing.d.ts.map +1 -0
  116. package/dist/src/cloud/billing.js.map +1 -0
  117. package/dist/src/cloud/client.d.ts.map +1 -0
  118. package/dist/src/cloud/client.js.map +1 -0
  119. package/dist/src/cloud/index.d.ts.map +1 -0
  120. package/dist/src/cloud/index.js.map +1 -0
  121. package/dist/src/cloud/marketplace.d.ts.map +1 -0
  122. package/dist/src/cloud/marketplace.js.map +1 -0
  123. package/dist/src/cloud/provisioning.d.ts.map +1 -0
  124. package/dist/src/cloud/provisioning.js.map +1 -0
  125. package/dist/src/cloud/relay/endpoints.d.ts.map +1 -0
  126. package/dist/src/cloud/relay/endpoints.js.map +1 -0
  127. package/dist/src/cloud/relay/health/index.d.ts.map +1 -0
  128. package/dist/src/cloud/relay/health/index.js.map +1 -0
  129. package/dist/src/cloud/relay/stats/index.d.ts.map +1 -0
  130. package/dist/src/cloud/relay/stats/index.js.map +1 -0
  131. package/dist/src/cloud/relay/sync/index.d.ts.map +1 -0
  132. package/dist/src/cloud/relay/sync/index.js.map +1 -0
  133. package/dist/src/cloud/relay/usage/index.d.ts.map +1 -0
  134. package/dist/src/cloud/relay/usage/index.js.map +1 -0
  135. package/dist/src/cloud/sponsors.d.ts.map +1 -0
  136. package/dist/src/cloud/sponsors.js.map +1 -0
  137. package/dist/src/cloud/types.d.ts.map +1 -0
  138. package/dist/src/cloud/types.js.map +1 -0
  139. package/dist/src/components/index.d.ts.map +1 -0
  140. package/dist/src/components/index.js.map +1 -0
  141. package/dist/src/core/actors.d.ts.map +1 -0
  142. package/dist/src/core/actors.js.map +1 -0
  143. package/dist/src/core/component/generator.d.ts.map +1 -0
  144. package/dist/{core → src/core}/component/generator.js +45 -3
  145. package/dist/src/core/component/generator.js.map +1 -0
  146. package/dist/src/core/engine.d.ts.map +1 -0
  147. package/dist/src/core/engine.js.map +1 -0
  148. package/dist/src/core/introspection.d.ts.map +1 -0
  149. package/dist/src/core/introspection.js.map +1 -0
  150. package/dist/src/core/logic/generator.d.ts.map +1 -0
  151. package/dist/{core → src/core}/logic/generator.js +35 -4
  152. package/dist/src/core/logic/generator.js.map +1 -0
  153. package/dist/src/core/pluresdb/adapter.d.ts +72 -0
  154. package/dist/src/core/pluresdb/adapter.d.ts.map +1 -0
  155. package/dist/src/core/pluresdb/adapter.js +73 -0
  156. package/dist/src/core/pluresdb/adapter.js.map +1 -0
  157. package/dist/src/core/pluresdb/generator.d.ts.map +1 -0
  158. package/dist/{core → src/core}/pluresdb/generator.js +33 -4
  159. package/dist/src/core/pluresdb/generator.js.map +1 -0
  160. package/dist/src/core/pluresdb/index.d.ts +15 -0
  161. package/dist/src/core/pluresdb/index.d.ts.map +1 -0
  162. package/dist/src/core/pluresdb/index.js +11 -0
  163. package/dist/src/core/pluresdb/index.js.map +1 -0
  164. package/dist/src/core/pluresdb/schema-registry.d.ts +104 -0
  165. package/dist/src/core/pluresdb/schema-registry.d.ts.map +1 -0
  166. package/dist/src/core/pluresdb/schema-registry.js +130 -0
  167. package/dist/src/core/pluresdb/schema-registry.js.map +1 -0
  168. package/dist/src/core/pluresdb/store.d.ts +199 -0
  169. package/dist/src/core/pluresdb/store.d.ts.map +1 -0
  170. package/dist/src/core/pluresdb/store.js +344 -0
  171. package/dist/src/core/pluresdb/store.js.map +1 -0
  172. package/dist/src/core/protocol.d.ts.map +1 -0
  173. package/dist/src/core/protocol.js.map +1 -0
  174. package/dist/src/core/rules.d.ts.map +1 -0
  175. package/dist/src/core/rules.js.map +1 -0
  176. package/dist/src/core/schema/loader.d.ts.map +1 -0
  177. package/dist/src/core/schema/loader.js.map +1 -0
  178. package/dist/src/core/schema/normalize.d.ts.map +1 -0
  179. package/dist/src/core/schema/normalize.js.map +1 -0
  180. package/dist/src/core/schema/types.d.ts.map +1 -0
  181. package/dist/src/core/schema/types.js.map +1 -0
  182. package/dist/src/dsl/index.d.ts.map +1 -0
  183. package/dist/src/dsl/index.js.map +1 -0
  184. package/dist/src/dsl.d.ts.map +1 -0
  185. package/dist/src/dsl.js.map +1 -0
  186. package/dist/src/examples/advanced-todo/index.d.ts.map +1 -0
  187. package/dist/src/examples/advanced-todo/index.js.map +1 -0
  188. package/dist/src/examples/auth-basic/index.d.ts.map +1 -0
  189. package/dist/src/examples/auth-basic/index.js.map +1 -0
  190. package/dist/src/examples/cart/index.d.ts.map +1 -0
  191. package/dist/src/examples/cart/index.js.map +1 -0
  192. package/dist/src/examples/hero-ecommerce/index.d.ts.map +1 -0
  193. package/dist/src/examples/hero-ecommerce/index.js.map +1 -0
  194. package/dist/src/examples/svelte-counter/index.d.ts.map +1 -0
  195. package/dist/src/examples/svelte-counter/index.js.map +1 -0
  196. package/dist/src/flows.d.ts.map +1 -0
  197. package/dist/src/flows.js.map +1 -0
  198. package/dist/{index.d.ts → src/index.d.ts} +12 -2
  199. package/dist/src/index.d.ts.map +1 -0
  200. package/dist/{index.js → src/index.js} +6 -1
  201. package/dist/src/index.js.map +1 -0
  202. package/dist/src/integrations/code-canvas.d.ts +265 -0
  203. package/dist/src/integrations/code-canvas.d.ts.map +1 -0
  204. package/dist/src/integrations/code-canvas.js +451 -0
  205. package/dist/src/integrations/code-canvas.js.map +1 -0
  206. package/dist/src/integrations/pluresdb.d.ts +117 -0
  207. package/dist/src/integrations/pluresdb.d.ts.map +1 -0
  208. package/dist/src/integrations/pluresdb.js +117 -0
  209. package/dist/src/integrations/pluresdb.js.map +1 -0
  210. package/dist/src/integrations/state-docs.d.ts +191 -0
  211. package/dist/src/integrations/state-docs.d.ts.map +1 -0
  212. package/dist/src/integrations/state-docs.js +515 -0
  213. package/dist/src/integrations/state-docs.js.map +1 -0
  214. package/dist/src/integrations/svelte.d.ts.map +1 -0
  215. package/dist/src/integrations/svelte.js.map +1 -0
  216. package/dist/src/integrations/tauri.d.ts +360 -0
  217. package/dist/src/integrations/tauri.d.ts.map +1 -0
  218. package/dist/src/integrations/tauri.js +278 -0
  219. package/dist/src/integrations/tauri.js.map +1 -0
  220. package/dist/src/integrations/unum.d.ts +159 -0
  221. package/dist/src/integrations/unum.d.ts.map +1 -0
  222. package/dist/src/integrations/unum.js +240 -0
  223. package/dist/src/integrations/unum.js.map +1 -0
  224. package/dist/src/registry.d.ts.map +1 -0
  225. package/dist/src/registry.js.map +1 -0
  226. package/dist/{runtime → src/runtime}/terminal-adapter.d.ts +58 -7
  227. package/dist/src/runtime/terminal-adapter.d.ts.map +1 -0
  228. package/dist/src/runtime/terminal-adapter.js +239 -0
  229. package/dist/src/runtime/terminal-adapter.js.map +1 -0
  230. package/dist/src/step.d.ts.map +1 -0
  231. package/dist/src/step.js.map +1 -0
  232. package/dist/src/types.d.ts.map +1 -0
  233. package/dist/{cloud → src}/types.js.map +1 -1
  234. package/dist/tools/cli/commands/index.d.ts +7 -0
  235. package/dist/tools/cli/commands/index.d.ts.map +1 -0
  236. package/dist/tools/cli/commands/index.js +7 -0
  237. package/dist/tools/cli/commands/index.js.map +1 -0
  238. package/dist/tools/cli/index.d.ts +8 -0
  239. package/dist/tools/cli/index.d.ts.map +1 -0
  240. package/dist/tools/cli/index.js +9 -0
  241. package/dist/tools/cli/index.js.map +1 -0
  242. package/dist/tools/watcher/index.d.ts +105 -0
  243. package/dist/tools/watcher/index.d.ts.map +1 -0
  244. package/dist/tools/watcher/index.js +213 -0
  245. package/dist/tools/watcher/index.js.map +1 -0
  246. package/dist/ui/canvas/canvas-projection.d.ts +78 -0
  247. package/dist/ui/canvas/canvas-projection.d.ts.map +1 -0
  248. package/dist/ui/canvas/canvas-projection.js +416 -0
  249. package/dist/ui/canvas/canvas-projection.js.map +1 -0
  250. package/dist/ui/canvas/canvas-state.d.ts +200 -0
  251. package/dist/ui/canvas/canvas-state.d.ts.map +1 -0
  252. package/dist/ui/canvas/canvas-state.js +464 -0
  253. package/dist/ui/canvas/canvas-state.js.map +1 -0
  254. package/dist/ui/canvas/components/index.d.ts +95 -0
  255. package/dist/ui/canvas/components/index.d.ts.map +1 -0
  256. package/dist/ui/canvas/components/index.js +19 -0
  257. package/dist/ui/canvas/components/index.js.map +1 -0
  258. package/dist/ui/canvas/index.d.ts +32 -0
  259. package/dist/ui/canvas/index.d.ts.map +1 -0
  260. package/dist/ui/canvas/index.js +32 -0
  261. package/dist/ui/canvas/index.js.map +1 -0
  262. package/dist/ui/svelte-generator/index.d.ts +9 -0
  263. package/dist/ui/svelte-generator/index.d.ts.map +1 -0
  264. package/dist/ui/svelte-generator/index.js +11 -0
  265. package/dist/ui/svelte-generator/index.js.map +1 -0
  266. package/dist/ui/svelte-generator/psf-generator.d.ts +128 -0
  267. package/dist/ui/svelte-generator/psf-generator.d.ts.map +1 -0
  268. package/dist/ui/svelte-generator/psf-generator.js +506 -0
  269. package/dist/ui/svelte-generator/psf-generator.js.map +1 -0
  270. package/docs/README.md +155 -0
  271. package/docs/core/building-extensions.md +553 -0
  272. package/docs/core/cli-usage.md +498 -0
  273. package/docs/core/code-canvas-sync.md +468 -0
  274. package/docs/core/logic-engine.md +566 -0
  275. package/docs/core/pluresdb-integration.md +646 -0
  276. package/docs/core/schema-model.md +414 -0
  277. package/docs/core/ui-generation.md +580 -0
  278. package/docs/core/what-is-praxis.md +240 -0
  279. package/docs/tutorials/README.md +84 -0
  280. package/docs/tutorials/ecommerce-cart.md +631 -0
  281. package/docs/tutorials/first-app.md +529 -0
  282. package/docs/tutorials/form-builder.md +620 -0
  283. package/docs/tutorials/todo-pluresdb.md +589 -0
  284. package/package.json +16 -16
  285. package/src/__tests__/canvas-components.test.ts +450 -0
  286. package/src/__tests__/cli-create.test.ts +178 -0
  287. package/src/__tests__/code-canvas-integration.test.ts +277 -0
  288. package/src/__tests__/docs-generator.test.ts +181 -0
  289. package/src/__tests__/generators.test.ts +3 -2
  290. package/src/__tests__/pluresdb.test.ts +457 -0
  291. package/src/__tests__/psf-schema-engine.test.ts +450 -0
  292. package/src/__tests__/state-docs-integration.test.ts +297 -0
  293. package/src/__tests__/tauri-integration.test.ts +298 -0
  294. package/src/__tests__/terminal-node.test.ts +1 -1
  295. package/src/__tests__/unum-integration.test.ts +142 -0
  296. package/src/cli/commands/build.ts +203 -0
  297. package/src/cli/commands/canvas.ts +246 -0
  298. package/src/cli/commands/create.ts +666 -0
  299. package/src/cli/commands/dev.ts +95 -0
  300. package/src/cli/commands/orchestrate.ts +212 -0
  301. package/src/cli/index.ts +48 -21
  302. package/src/core/component/generator.ts +45 -3
  303. package/src/core/logic/generator.ts +39 -4
  304. package/src/core/pluresdb/adapter.ts +117 -0
  305. package/src/core/pluresdb/generator.ts +33 -4
  306. package/src/core/pluresdb/index.ts +37 -0
  307. package/src/core/pluresdb/schema-registry.ts +162 -0
  308. package/src/core/pluresdb/store.ts +446 -0
  309. package/src/index.ts +109 -0
  310. package/src/integrations/code-canvas.ts +717 -0
  311. package/src/integrations/pluresdb.ts +140 -29
  312. package/src/integrations/state-docs.ts +710 -0
  313. package/src/integrations/tauri.ts +638 -0
  314. package/src/integrations/unum.ts +395 -0
  315. package/src/runtime/terminal-adapter.ts +184 -23
  316. package/dist/adapters/cli.d.ts.map +0 -1
  317. package/dist/adapters/cli.js.map +0 -1
  318. package/dist/cli/commands/auth.d.ts.map +0 -1
  319. package/dist/cli/commands/auth.js.map +0 -1
  320. package/dist/cli/commands/cloud.d.ts.map +0 -1
  321. package/dist/cli/commands/cloud.js.map +0 -1
  322. package/dist/cli/commands/generate.d.ts.map +0 -1
  323. package/dist/cli/commands/generate.js.map +0 -1
  324. package/dist/cli/index.js.map +0 -1
  325. package/dist/cloud/auth.d.ts.map +0 -1
  326. package/dist/cloud/auth.js.map +0 -1
  327. package/dist/cloud/billing.d.ts.map +0 -1
  328. package/dist/cloud/billing.js.map +0 -1
  329. package/dist/cloud/client.d.ts.map +0 -1
  330. package/dist/cloud/client.js.map +0 -1
  331. package/dist/cloud/index.d.ts.map +0 -1
  332. package/dist/cloud/index.js.map +0 -1
  333. package/dist/cloud/marketplace.d.ts.map +0 -1
  334. package/dist/cloud/marketplace.js.map +0 -1
  335. package/dist/cloud/provisioning.d.ts.map +0 -1
  336. package/dist/cloud/provisioning.js.map +0 -1
  337. package/dist/cloud/relay/endpoints.d.ts.map +0 -1
  338. package/dist/cloud/relay/endpoints.js.map +0 -1
  339. package/dist/cloud/relay/health/index.d.ts.map +0 -1
  340. package/dist/cloud/relay/health/index.js.map +0 -1
  341. package/dist/cloud/relay/stats/index.d.ts.map +0 -1
  342. package/dist/cloud/relay/stats/index.js.map +0 -1
  343. package/dist/cloud/relay/sync/index.d.ts.map +0 -1
  344. package/dist/cloud/relay/sync/index.js.map +0 -1
  345. package/dist/cloud/relay/usage/index.d.ts.map +0 -1
  346. package/dist/cloud/relay/usage/index.js.map +0 -1
  347. package/dist/cloud/sponsors.d.ts.map +0 -1
  348. package/dist/cloud/sponsors.js.map +0 -1
  349. package/dist/cloud/types.d.ts.map +0 -1
  350. package/dist/components/index.d.ts.map +0 -1
  351. package/dist/components/index.js.map +0 -1
  352. package/dist/core/actors.d.ts.map +0 -1
  353. package/dist/core/actors.js.map +0 -1
  354. package/dist/core/component/generator.d.ts.map +0 -1
  355. package/dist/core/component/generator.js.map +0 -1
  356. package/dist/core/engine.d.ts.map +0 -1
  357. package/dist/core/engine.js.map +0 -1
  358. package/dist/core/introspection.d.ts.map +0 -1
  359. package/dist/core/introspection.js.map +0 -1
  360. package/dist/core/logic/generator.d.ts.map +0 -1
  361. package/dist/core/logic/generator.js.map +0 -1
  362. package/dist/core/pluresdb/generator.d.ts.map +0 -1
  363. package/dist/core/pluresdb/generator.js.map +0 -1
  364. package/dist/core/protocol.d.ts.map +0 -1
  365. package/dist/core/protocol.js.map +0 -1
  366. package/dist/core/rules.d.ts.map +0 -1
  367. package/dist/core/rules.js.map +0 -1
  368. package/dist/core/schema/loader.d.ts.map +0 -1
  369. package/dist/core/schema/loader.js.map +0 -1
  370. package/dist/core/schema/normalize.d.ts.map +0 -1
  371. package/dist/core/schema/normalize.js.map +0 -1
  372. package/dist/core/schema/types.d.ts.map +0 -1
  373. package/dist/core/schema/types.js.map +0 -1
  374. package/dist/dsl/index.d.ts.map +0 -1
  375. package/dist/dsl/index.js.map +0 -1
  376. package/dist/dsl.d.ts.map +0 -1
  377. package/dist/dsl.js.map +0 -1
  378. package/dist/examples/advanced-todo/index.d.ts.map +0 -1
  379. package/dist/examples/advanced-todo/index.js.map +0 -1
  380. package/dist/examples/auth-basic/index.d.ts.map +0 -1
  381. package/dist/examples/auth-basic/index.js.map +0 -1
  382. package/dist/examples/cart/index.d.ts.map +0 -1
  383. package/dist/examples/cart/index.js.map +0 -1
  384. package/dist/examples/hero-ecommerce/index.d.ts.map +0 -1
  385. package/dist/examples/hero-ecommerce/index.js.map +0 -1
  386. package/dist/examples/svelte-counter/index.d.ts.map +0 -1
  387. package/dist/examples/svelte-counter/index.js.map +0 -1
  388. package/dist/flows.d.ts.map +0 -1
  389. package/dist/flows.js.map +0 -1
  390. package/dist/index.d.ts.map +0 -1
  391. package/dist/index.js.map +0 -1
  392. package/dist/integrations/pluresdb.d.ts +0 -56
  393. package/dist/integrations/pluresdb.d.ts.map +0 -1
  394. package/dist/integrations/pluresdb.js +0 -46
  395. package/dist/integrations/pluresdb.js.map +0 -1
  396. package/dist/integrations/svelte.d.ts.map +0 -1
  397. package/dist/integrations/svelte.js.map +0 -1
  398. package/dist/registry.d.ts.map +0 -1
  399. package/dist/registry.js.map +0 -1
  400. package/dist/runtime/terminal-adapter.d.ts.map +0 -1
  401. package/dist/runtime/terminal-adapter.js +0 -113
  402. package/dist/runtime/terminal-adapter.js.map +0 -1
  403. package/dist/step.d.ts.map +0 -1
  404. package/dist/step.js.map +0 -1
  405. package/dist/types.d.ts.map +0 -1
  406. package/dist/types.js.map +0 -1
  407. /package/dist/{adapters → src/adapters}/cli.d.ts +0 -0
  408. /package/dist/{adapters → src/adapters}/cli.js +0 -0
  409. /package/dist/{cli → src/cli}/commands/auth.d.ts +0 -0
  410. /package/dist/{cli → src/cli}/commands/auth.js +0 -0
  411. /package/dist/{cli → src/cli}/commands/cloud.d.ts +0 -0
  412. /package/dist/{cli → src/cli}/commands/cloud.js +0 -0
  413. /package/dist/{cli → src/cli}/commands/generate.d.ts +0 -0
  414. /package/dist/{cli → src/cli}/commands/generate.js +0 -0
  415. /package/dist/{cli → src/cli}/index.d.ts +0 -0
  416. /package/dist/{cloud → src/cloud}/auth.d.ts +0 -0
  417. /package/dist/{cloud → src/cloud}/auth.js +0 -0
  418. /package/dist/{cloud → src/cloud}/billing.d.ts +0 -0
  419. /package/dist/{cloud → src/cloud}/billing.js +0 -0
  420. /package/dist/{cloud → src/cloud}/client.d.ts +0 -0
  421. /package/dist/{cloud → src/cloud}/client.js +0 -0
  422. /package/dist/{cloud → src/cloud}/index.d.ts +0 -0
  423. /package/dist/{cloud → src/cloud}/index.js +0 -0
  424. /package/dist/{cloud → src/cloud}/marketplace.d.ts +0 -0
  425. /package/dist/{cloud → src/cloud}/marketplace.js +0 -0
  426. /package/dist/{cloud → src/cloud}/provisioning.d.ts +0 -0
  427. /package/dist/{cloud → src/cloud}/provisioning.js +0 -0
  428. /package/dist/{cloud → src/cloud}/relay/endpoints.d.ts +0 -0
  429. /package/dist/{cloud → src/cloud}/relay/endpoints.js +0 -0
  430. /package/dist/{cloud → src/cloud}/relay/health/index.d.ts +0 -0
  431. /package/dist/{cloud → src/cloud}/relay/health/index.js +0 -0
  432. /package/dist/{cloud → src/cloud}/relay/stats/index.d.ts +0 -0
  433. /package/dist/{cloud → src/cloud}/relay/stats/index.js +0 -0
  434. /package/dist/{cloud → src/cloud}/relay/sync/index.d.ts +0 -0
  435. /package/dist/{cloud → src/cloud}/relay/sync/index.js +0 -0
  436. /package/dist/{cloud → src/cloud}/relay/usage/index.d.ts +0 -0
  437. /package/dist/{cloud → src/cloud}/relay/usage/index.js +0 -0
  438. /package/dist/{cloud → src/cloud}/sponsors.d.ts +0 -0
  439. /package/dist/{cloud → src/cloud}/sponsors.js +0 -0
  440. /package/dist/{cloud → src/cloud}/types.d.ts +0 -0
  441. /package/dist/{cloud → src/cloud}/types.js +0 -0
  442. /package/dist/{components → src/components}/index.d.ts +0 -0
  443. /package/dist/{components → src/components}/index.js +0 -0
  444. /package/dist/{core → src/core}/actors.d.ts +0 -0
  445. /package/dist/{core → src/core}/actors.js +0 -0
  446. /package/dist/{core → src/core}/component/generator.d.ts +0 -0
  447. /package/dist/{core → src/core}/engine.d.ts +0 -0
  448. /package/dist/{core → src/core}/engine.js +0 -0
  449. /package/dist/{core → src/core}/introspection.d.ts +0 -0
  450. /package/dist/{core → src/core}/introspection.js +0 -0
  451. /package/dist/{core → src/core}/logic/generator.d.ts +0 -0
  452. /package/dist/{core → src/core}/pluresdb/generator.d.ts +0 -0
  453. /package/dist/{core → src/core}/protocol.d.ts +0 -0
  454. /package/dist/{core → src/core}/protocol.js +0 -0
  455. /package/dist/{core → src/core}/rules.d.ts +0 -0
  456. /package/dist/{core → src/core}/rules.js +0 -0
  457. /package/dist/{core → src/core}/schema/loader.d.ts +0 -0
  458. /package/dist/{core → src/core}/schema/loader.js +0 -0
  459. /package/dist/{core → src/core}/schema/normalize.d.ts +0 -0
  460. /package/dist/{core → src/core}/schema/normalize.js +0 -0
  461. /package/dist/{core → src/core}/schema/types.d.ts +0 -0
  462. /package/dist/{core → src/core}/schema/types.js +0 -0
  463. /package/dist/{dsl → src/dsl}/index.d.ts +0 -0
  464. /package/dist/{dsl → src/dsl}/index.js +0 -0
  465. /package/dist/{dsl.d.ts → src/dsl.d.ts} +0 -0
  466. /package/dist/{dsl.js → src/dsl.js} +0 -0
  467. /package/dist/{examples → src/examples}/advanced-todo/index.d.ts +0 -0
  468. /package/dist/{examples → src/examples}/advanced-todo/index.js +0 -0
  469. /package/dist/{examples → src/examples}/auth-basic/index.d.ts +0 -0
  470. /package/dist/{examples → src/examples}/auth-basic/index.js +0 -0
  471. /package/dist/{examples → src/examples}/cart/index.d.ts +0 -0
  472. /package/dist/{examples → src/examples}/cart/index.js +0 -0
  473. /package/dist/{examples → src/examples}/hero-ecommerce/index.d.ts +0 -0
  474. /package/dist/{examples → src/examples}/hero-ecommerce/index.js +0 -0
  475. /package/dist/{examples → src/examples}/svelte-counter/index.d.ts +0 -0
  476. /package/dist/{examples → src/examples}/svelte-counter/index.js +0 -0
  477. /package/dist/{flows.d.ts → src/flows.d.ts} +0 -0
  478. /package/dist/{flows.js → src/flows.js} +0 -0
  479. /package/dist/{integrations → src/integrations}/svelte.d.ts +0 -0
  480. /package/dist/{integrations → src/integrations}/svelte.js +0 -0
  481. /package/dist/{registry.d.ts → src/registry.d.ts} +0 -0
  482. /package/dist/{registry.js → src/registry.js} +0 -0
  483. /package/dist/{step.d.ts → src/step.d.ts} +0 -0
  484. /package/dist/{step.js → src/step.js} +0 -0
  485. /package/dist/{types.d.ts → src/types.d.ts} +0 -0
  486. /package/dist/{types.js → src/types.js} +0 -0
@@ -0,0 +1,395 @@
1
+ /**
2
+ * Unum Integration
3
+ *
4
+ * Integration with plures/unum - A modern Svelte binding library for PluresDB
5
+ * with full Svelte 5 compatibility. Provides identity and channels support.
6
+ *
7
+ * Features:
8
+ * - Svelte 4 & 5 Compatible: Works with both store-based and runes-based reactivity
9
+ * - Type-Safe: Full TypeScript support with proper types
10
+ * - Action-Based: Modern Svelte actions for DOM binding
11
+ * - Store-Based: Writable store implementation for reactive data
12
+ * - Collection Support: Easy handling of PluresDB collections
13
+ *
14
+ * @see https://github.com/plures/unum
15
+ */
16
+
17
+ import type { LogicEngine } from "../core/engine.js";
18
+ import type { PraxisEvent, PraxisFact } from "../core/protocol.js";
19
+ import type { PraxisDB } from "../core/pluresdb/adapter.js";
20
+
21
+ /**
22
+ * Unum store interface for reactive PluresDB data
23
+ */
24
+ export interface UnumStore<T> {
25
+ subscribe(run: (value: T) => void): () => void;
26
+ set(value: T): void;
27
+ update(updater: (value: T) => T): void;
28
+ }
29
+
30
+ /**
31
+ * Unum channel for real-time communication
32
+ */
33
+ export interface UnumChannel {
34
+ /** Channel identifier */
35
+ id: string;
36
+ /** Channel name */
37
+ name: string;
38
+ /** Subscribe to channel messages */
39
+ subscribe(handler: (message: UnumMessage) => void): () => void;
40
+ /** Publish a message to the channel */
41
+ publish(message: Omit<UnumMessage, 'timestamp' | 'channelId'>): Promise<void>;
42
+ /** Get channel members */
43
+ getMembers(): Promise<UnumIdentity[]>;
44
+ /** Leave the channel */
45
+ leave(): Promise<void>;
46
+ }
47
+
48
+ /**
49
+ * Message sent through a Unum channel
50
+ */
51
+ export interface UnumMessage {
52
+ /** Message ID */
53
+ id: string;
54
+ /** Channel ID */
55
+ channelId: string;
56
+ /** Sender identity */
57
+ sender: UnumIdentity;
58
+ /** Message content */
59
+ content: unknown;
60
+ /** Message type */
61
+ type: 'text' | 'event' | 'fact' | 'system';
62
+ /** Timestamp */
63
+ timestamp: number;
64
+ }
65
+
66
+ /**
67
+ * Unum identity representing a user or system
68
+ */
69
+ export interface UnumIdentity {
70
+ /** Unique identifier */
71
+ id: string;
72
+ /** Display name */
73
+ name?: string;
74
+ /** Public key for encryption */
75
+ publicKey?: string;
76
+ /** Identity metadata */
77
+ metadata?: Record<string, unknown>;
78
+ /** Creation timestamp */
79
+ createdAt: number;
80
+ /** Last seen timestamp */
81
+ lastSeen?: number;
82
+ }
83
+
84
+ /**
85
+ * Unum adapter configuration
86
+ */
87
+ export interface UnumAdapterConfig {
88
+ /** PluresDB instance to use */
89
+ db: PraxisDB;
90
+ /** Current user identity */
91
+ identity?: UnumIdentity;
92
+ /** Whether to enable real-time sync */
93
+ realtime?: boolean;
94
+ /** Sync interval in milliseconds */
95
+ syncInterval?: number;
96
+ }
97
+
98
+ /**
99
+ * Unum adapter for Praxis engine integration
100
+ *
101
+ * Provides identity management and channel-based communication
102
+ * for distributed Praxis applications.
103
+ */
104
+ export interface UnumAdapter {
105
+ /** Current identity */
106
+ identity: UnumIdentity | null;
107
+
108
+ /** Create or update identity */
109
+ setIdentity(identity: Omit<UnumIdentity, 'id' | 'createdAt'>): Promise<UnumIdentity>;
110
+
111
+ /** Get identity by ID */
112
+ getIdentity(id: string): Promise<UnumIdentity | null>;
113
+
114
+ /** Create a new channel */
115
+ createChannel(name: string, members?: string[]): Promise<UnumChannel>;
116
+
117
+ /** Join an existing channel */
118
+ joinChannel(channelId: string): Promise<UnumChannel>;
119
+
120
+ /** List available channels */
121
+ listChannels(): Promise<UnumChannel[]>;
122
+
123
+ /** Broadcast a Praxis event to a channel */
124
+ broadcastEvent(channelId: string, event: PraxisEvent): Promise<void>;
125
+
126
+ /** Broadcast a Praxis fact to a channel */
127
+ broadcastFact(channelId: string, fact: PraxisFact): Promise<void>;
128
+
129
+ /** Subscribe to events from a channel */
130
+ subscribeToEvents(channelId: string, handler: (event: PraxisEvent) => void): () => void;
131
+
132
+ /** Subscribe to facts from a channel */
133
+ subscribeToFacts(channelId: string, handler: (fact: PraxisFact) => void): () => void;
134
+
135
+ /** Disconnect and cleanup */
136
+ disconnect(): Promise<void>;
137
+ }
138
+
139
+ /**
140
+ * Create a Unum adapter for Praxis engine integration
141
+ *
142
+ * @example
143
+ * ```typescript
144
+ * import { createUnumAdapter } from '@plures/praxis/integrations/unum';
145
+ * import { createInMemoryDB } from '@plures/praxis/integrations/pluresdb';
146
+ *
147
+ * const db = createInMemoryDB();
148
+ * const unum = await createUnumAdapter({
149
+ * db,
150
+ * identity: {
151
+ * name: 'Alice',
152
+ * },
153
+ * realtime: true,
154
+ * });
155
+ *
156
+ * // Create a channel
157
+ * const channel = await unum.createChannel('my-channel');
158
+ *
159
+ * // Broadcast events to the channel
160
+ * await unum.broadcastEvent(channel.id, myEvent);
161
+ * ```
162
+ */
163
+ export async function createUnumAdapter(config: UnumAdapterConfig): Promise<UnumAdapter> {
164
+ const { db, realtime = true } = config;
165
+ // syncInterval could be used for periodic sync in a more complete implementation
166
+
167
+ let currentIdentity: UnumIdentity | null = null;
168
+ const channels = new Map<string, UnumChannel>();
169
+ const subscriptions = new Set<() => void>();
170
+
171
+ // Set initial identity if provided
172
+ if (config.identity) {
173
+ currentIdentity = {
174
+ ...config.identity,
175
+ id: config.identity.id || generateId(),
176
+ createdAt: Date.now(),
177
+ };
178
+ await db.set(`unum/identities/${currentIdentity.id}`, currentIdentity);
179
+ }
180
+
181
+ async function setIdentity(identity: Omit<UnumIdentity, 'id' | 'createdAt'>): Promise<UnumIdentity> {
182
+ currentIdentity = {
183
+ ...identity,
184
+ id: generateId(),
185
+ createdAt: Date.now(),
186
+ };
187
+ await db.set(`unum/identities/${currentIdentity.id}`, currentIdentity);
188
+ return currentIdentity;
189
+ }
190
+
191
+ async function getIdentity(id: string): Promise<UnumIdentity | null> {
192
+ return await db.get(`unum/identities/${id}`) as UnumIdentity | null;
193
+ }
194
+
195
+ async function createChannel(name: string, members?: string[]): Promise<UnumChannel> {
196
+ const channelId = generateId();
197
+ const channelData = {
198
+ id: channelId,
199
+ name,
200
+ members: members || [],
201
+ createdAt: Date.now(),
202
+ createdBy: currentIdentity?.id,
203
+ };
204
+
205
+ await db.set(`unum/channels/${channelId}`, channelData);
206
+
207
+ const channel = createChannelInstance(channelId, name);
208
+ channels.set(channelId, channel);
209
+ return channel;
210
+ }
211
+
212
+ async function joinChannel(channelId: string): Promise<UnumChannel> {
213
+ const existing = channels.get(channelId);
214
+ if (existing) return existing;
215
+
216
+ const channelData = await db.get(`unum/channels/${channelId}`) as { id: string; name: string } | null;
217
+ if (!channelData) {
218
+ throw new Error(`Channel ${channelId} not found`);
219
+ }
220
+
221
+ const channel = createChannelInstance(channelData.id, channelData.name);
222
+ channels.set(channelId, channel);
223
+ return channel;
224
+ }
225
+
226
+ async function listChannels(): Promise<UnumChannel[]> {
227
+ return Array.from(channels.values());
228
+ }
229
+
230
+ function createChannelInstance(id: string, name: string): UnumChannel {
231
+ const handlers = new Set<(message: UnumMessage) => void>();
232
+
233
+ return {
234
+ id,
235
+ name,
236
+ subscribe(handler: (message: UnumMessage) => void): () => void {
237
+ handlers.add(handler);
238
+
239
+ // Set up database subscription if realtime is enabled
240
+ if (realtime) {
241
+ const unsub = db.watch(`unum/channels/${id}/messages`, (data) => {
242
+ if (data) {
243
+ handler(data as UnumMessage);
244
+ }
245
+ });
246
+ subscriptions.add(unsub);
247
+ }
248
+
249
+ return () => {
250
+ handlers.delete(handler);
251
+ };
252
+ },
253
+ async publish(message: Omit<UnumMessage, 'timestamp' | 'channelId'>): Promise<void> {
254
+ const fullMessage: UnumMessage = {
255
+ ...message,
256
+ id: message.id || generateId(),
257
+ channelId: id,
258
+ timestamp: Date.now(),
259
+ };
260
+
261
+ await db.set(`unum/channels/${id}/messages/${fullMessage.id}`, fullMessage);
262
+
263
+ // Notify local handlers
264
+ handlers.forEach(h => h(fullMessage));
265
+ },
266
+ async getMembers(): Promise<UnumIdentity[]> {
267
+ const channelData = await db.get(`unum/channels/${id}`) as { members?: string[] } | null;
268
+ if (!channelData?.members) return [];
269
+
270
+ const members: UnumIdentity[] = [];
271
+ for (const memberId of channelData.members) {
272
+ const identity = await getIdentity(memberId);
273
+ if (identity) members.push(identity);
274
+ }
275
+ return members;
276
+ },
277
+ async leave(): Promise<void> {
278
+ channels.delete(id);
279
+ },
280
+ };
281
+ }
282
+
283
+ async function broadcastEvent(channelId: string, event: PraxisEvent): Promise<void> {
284
+ const channel = channels.get(channelId);
285
+ if (!channel) {
286
+ throw new Error(`Not joined to channel ${channelId}`);
287
+ }
288
+
289
+ await channel.publish({
290
+ id: generateId(),
291
+ sender: currentIdentity || { id: 'anonymous', createdAt: Date.now() },
292
+ content: event,
293
+ type: 'event',
294
+ });
295
+ }
296
+
297
+ async function broadcastFact(channelId: string, fact: PraxisFact): Promise<void> {
298
+ const channel = channels.get(channelId);
299
+ if (!channel) {
300
+ throw new Error(`Not joined to channel ${channelId}`);
301
+ }
302
+
303
+ await channel.publish({
304
+ id: generateId(),
305
+ sender: currentIdentity || { id: 'anonymous', createdAt: Date.now() },
306
+ content: fact,
307
+ type: 'fact',
308
+ });
309
+ }
310
+
311
+ function subscribeToEvents(channelId: string, handler: (event: PraxisEvent) => void): () => void {
312
+ const channel = channels.get(channelId);
313
+ if (!channel) {
314
+ throw new Error(`Not joined to channel ${channelId}`);
315
+ }
316
+
317
+ return channel.subscribe((message) => {
318
+ if (message.type === 'event') {
319
+ handler(message.content as PraxisEvent);
320
+ }
321
+ });
322
+ }
323
+
324
+ function subscribeToFacts(channelId: string, handler: (fact: PraxisFact) => void): () => void {
325
+ const channel = channels.get(channelId);
326
+ if (!channel) {
327
+ throw new Error(`Not joined to channel ${channelId}`);
328
+ }
329
+
330
+ return channel.subscribe((message) => {
331
+ if (message.type === 'fact') {
332
+ handler(message.content as PraxisFact);
333
+ }
334
+ });
335
+ }
336
+
337
+ async function disconnect(): Promise<void> {
338
+ // Cleanup all subscriptions
339
+ subscriptions.forEach(unsub => unsub());
340
+ subscriptions.clear();
341
+
342
+ // Leave all channels
343
+ for (const channel of channels.values()) {
344
+ await channel.leave();
345
+ }
346
+ channels.clear();
347
+
348
+ currentIdentity = null;
349
+ }
350
+
351
+ return {
352
+ get identity() { return currentIdentity; },
353
+ setIdentity,
354
+ getIdentity,
355
+ createChannel,
356
+ joinChannel,
357
+ listChannels,
358
+ broadcastEvent,
359
+ broadcastFact,
360
+ subscribeToEvents,
361
+ subscribeToFacts,
362
+ disconnect,
363
+ };
364
+ }
365
+
366
+ /**
367
+ * Generate a unique ID
368
+ */
369
+ function generateId(): string {
370
+ return `${Date.now().toString(36)}-${Math.random().toString(36).substr(2, 9)}`;
371
+ }
372
+
373
+ /**
374
+ * Attach Unum adapter to a Praxis engine
375
+ *
376
+ * Enables automatic event/fact broadcasting to connected channels.
377
+ * This is a placeholder for future integration where the engine
378
+ * would emit events that get broadcast to channels.
379
+ *
380
+ * @param _engine - The Praxis logic engine
381
+ * @param _adapter - The Unum adapter
382
+ * @param _channelId - The channel to broadcast to
383
+ * @returns Cleanup function
384
+ */
385
+ export function attachUnumToEngine<TContext>(
386
+ _engine: LogicEngine<TContext>,
387
+ _adapter: UnumAdapter,
388
+ _channelId: string
389
+ ): () => void {
390
+ // In a future implementation, this would:
391
+ // 1. Hook into engine state changes
392
+ // 2. Broadcast new events/facts to the channel
393
+ // For now, return a no-op cleanup function
394
+ return () => {};
395
+ }
@@ -5,7 +5,11 @@
5
5
  * Integrates with pluresDB for state synchronization.
6
6
  */
7
7
 
8
+ // Declare process for TypeScript in non-Node environments (e.g., Deno)
9
+ declare const process: { env: { [key: string]: string | undefined } } | undefined;
10
+
8
11
  import type { TerminalNodeProps } from '../core/schema/types.js';
12
+ import type { PraxisDB } from '../core/pluresdb/adapter.js';
9
13
 
10
14
  /**
11
15
  * Terminal command execution result
@@ -47,19 +51,74 @@ export interface TerminalAdapterOptions {
47
51
  inputPath?: string;
48
52
  /** PluresDB path for output binding */
49
53
  outputPath?: string;
54
+ /** Current working directory */
55
+ cwd?: string;
56
+ /** Environment variables */
57
+ env?: Record<string, string>;
58
+ /** PluresDB instance for state persistence */
59
+ db?: PraxisDB;
60
+ /** Command executor function (for custom execution environments) */
61
+ executor?: CommandExecutor;
62
+ }
63
+
64
+ /**
65
+ * Command executor function type
66
+ */
67
+ export type CommandExecutor = (
68
+ command: string,
69
+ options: { cwd?: string; env?: Record<string, string> }
70
+ ) => Promise<{ output: string; exitCode: number; error?: string }>;
71
+
72
+ /**
73
+ * Default command executor using child_process
74
+ * Note: This only works in Node.js environments
75
+ */
76
+ async function defaultExecutor(
77
+ command: string,
78
+ options: { cwd?: string; env?: Record<string, string> }
79
+ ): Promise<{ output: string; exitCode: number; error?: string }> {
80
+ try {
81
+ // Dynamic import to support environments without child_process
82
+ const { exec } = await import('child_process');
83
+ const { promisify } = await import('util');
84
+ const execAsync = promisify(exec);
85
+
86
+ // Get process.env safely (only available in Node.js environments)
87
+ const processEnv = typeof process !== "undefined" ? process.env : {};
88
+
89
+ const result = await execAsync(command, {
90
+ cwd: options.cwd,
91
+ env: { ...processEnv, ...options.env },
92
+ maxBuffer: 10 * 1024 * 1024, // 10MB buffer
93
+ timeout: 60000, // 60 second timeout
94
+ });
95
+
96
+ return {
97
+ output: result.stdout + (result.stderr ? `\n${result.stderr}` : ''),
98
+ exitCode: 0,
99
+ };
100
+ } catch (error: unknown) {
101
+ const execError = error as { stdout?: string; stderr?: string; code?: number; message?: string };
102
+ return {
103
+ output: (execError.stdout || '') + (execError.stderr || ''),
104
+ exitCode: execError.code || 1,
105
+ error: execError.message || 'Command execution failed',
106
+ };
107
+ }
50
108
  }
51
109
 
52
110
  /**
53
111
  * Terminal Runtime Adapter
54
112
  *
55
113
  * Manages terminal node execution and state.
56
- *
57
- * Note: PluresDB input/output path bindings will be implemented
58
- * when pluresDB integration is complete.
114
+ * Supports command execution with history tracking and PluresDB integration.
59
115
  */
60
116
  export class TerminalAdapter {
61
117
  private state: TerminalNodeState;
118
+ private inputPath?: string;
62
119
  private outputPath?: string;
120
+ private db?: PraxisDB;
121
+ private executor: CommandExecutor;
63
122
 
64
123
  constructor(options: TerminalAdapterOptions) {
65
124
  this.state = {
@@ -67,10 +126,13 @@ export class TerminalAdapter {
67
126
  inputMode: options.props?.inputMode || 'text',
68
127
  history: options.props?.history || [],
69
128
  lastOutput: options.props?.lastOutput || null,
129
+ cwd: options.cwd,
130
+ env: options.env,
70
131
  };
71
- // TODO: Store inputPath when pluresDB integration is complete
72
- // const inputPath = options.inputPath;
132
+ this.inputPath = options.inputPath;
73
133
  this.outputPath = options.outputPath;
134
+ this.db = options.db;
135
+ this.executor = options.executor || defaultExecutor;
74
136
  }
75
137
 
76
138
  /**
@@ -82,21 +144,28 @@ export class TerminalAdapter {
82
144
  async executeCommand(command: string): Promise<TerminalExecutionResult> {
83
145
  // Add to history
84
146
  this.state.history.push(command);
85
-
86
- // TODO: Integrate with RuneBook execution model
87
- // For now, return a stubbed response
147
+
148
+ const timestamp = Date.now();
149
+
150
+ // Execute the command
151
+ const { output, exitCode, error } = await this.executor(command, {
152
+ cwd: this.state.cwd,
153
+ env: this.state.env,
154
+ });
155
+
88
156
  const result: TerminalExecutionResult = {
89
157
  command,
90
- output: `[Stub] Command received: ${command}\nIntegration with RuneBook pending.`,
91
- exitCode: 0,
92
- timestamp: Date.now(),
158
+ output,
159
+ exitCode,
160
+ timestamp,
161
+ error,
93
162
  };
94
163
 
95
164
  // Update last output
96
- this.state.lastOutput = result.output;
165
+ this.state.lastOutput = output;
97
166
 
98
- // TODO: Sync to pluresDB output path when integration is available
99
- if (this.outputPath) {
167
+ // Sync to PluresDB if configured
168
+ if (this.db && this.outputPath) {
100
169
  await this.syncToPluresDB(this.outputPath, result);
101
170
  }
102
171
 
@@ -120,6 +189,20 @@ export class TerminalAdapter {
120
189
  };
121
190
  }
122
191
 
192
+ /**
193
+ * Set working directory
194
+ */
195
+ setCwd(cwd: string): void {
196
+ this.state.cwd = cwd;
197
+ }
198
+
199
+ /**
200
+ * Set environment variables
201
+ */
202
+ setEnv(env: Record<string, string>): void {
203
+ this.state.env = { ...this.state.env, ...env };
204
+ }
205
+
123
206
  /**
124
207
  * Clear command history
125
208
  */
@@ -135,15 +218,70 @@ export class TerminalAdapter {
135
218
  }
136
219
 
137
220
  /**
138
- * Sync state to pluresDB (placeholder)
221
+ * Sync state to PluresDB
139
222
  *
140
- * @param _path - PluresDB path (unused until integration is complete)
141
- * @param _data - Data to sync (unused until integration is complete)
223
+ * @param path - PluresDB path for storing results
224
+ * @param data - Data to sync
142
225
  */
143
- private async syncToPluresDB(_path: string, _data: unknown): Promise<void> {
144
- // TODO: Implement pluresDB sync when integration is available
145
- // When implemented, this will sync terminal output to the specified pluresDB path
146
- // for reactive state management across the application
226
+ private async syncToPluresDB(path: string, data: TerminalExecutionResult): Promise<void> {
227
+ if (!this.db) return;
228
+
229
+ try {
230
+ // Store the execution result
231
+ await this.db.set(path, {
232
+ ...data,
233
+ nodeId: this.state.nodeId,
234
+ syncedAt: Date.now(),
235
+ });
236
+
237
+ // Also append to history path
238
+ const historyPath = `${path}/history`;
239
+ const historyKey = `${historyPath}/${data.timestamp}`;
240
+ await this.db.set(historyKey, data);
241
+ } catch (error) {
242
+ console.warn('Failed to sync to PluresDB:', error);
243
+ }
244
+ }
245
+
246
+ /**
247
+ * Load state from PluresDB
248
+ */
249
+ async loadFromPluresDB(): Promise<void> {
250
+ if (!this.db || !this.inputPath) return;
251
+
252
+ try {
253
+ const data = await this.db.get(this.inputPath);
254
+ if (data && typeof data === 'object') {
255
+ const savedState = data as Partial<TerminalNodeState>;
256
+ if (savedState.history) {
257
+ this.state.history = savedState.history;
258
+ }
259
+ if (savedState.lastOutput !== undefined) {
260
+ this.state.lastOutput = savedState.lastOutput;
261
+ }
262
+ if (savedState.cwd) {
263
+ this.state.cwd = savedState.cwd;
264
+ }
265
+ if (savedState.env) {
266
+ this.state.env = savedState.env;
267
+ }
268
+ }
269
+ } catch (error) {
270
+ console.warn('Failed to load from PluresDB:', error);
271
+ }
272
+ }
273
+
274
+ /**
275
+ * Subscribe to input changes from PluresDB
276
+ */
277
+ watchInput(callback: (command: string) => void): (() => void) | null {
278
+ if (!this.db || !this.inputPath) return null;
279
+
280
+ return this.db.watch(this.inputPath, (data) => {
281
+ if (data && typeof data === 'object' && 'command' in data) {
282
+ callback((data as { command: string }).command);
283
+ }
284
+ });
147
285
  }
148
286
  }
149
287
 
@@ -164,12 +302,35 @@ export function createTerminalAdapter(
164
302
  *
165
303
  * @param nodeId - Terminal node identifier
166
304
  * @param command - Command to execute
305
+ * @param options - Additional options
167
306
  * @returns Execution result
168
307
  */
169
308
  export async function runTerminalCommand(
170
309
  nodeId: string,
171
- command: string
310
+ command: string,
311
+ options?: { cwd?: string; env?: Record<string, string>; db?: PraxisDB }
172
312
  ): Promise<TerminalExecutionResult> {
173
- const adapter = createTerminalAdapter({ nodeId });
313
+ const adapter = createTerminalAdapter({
314
+ nodeId,
315
+ cwd: options?.cwd,
316
+ env: options?.env,
317
+ db: options?.db,
318
+ });
174
319
  return adapter.executeCommand(command);
175
320
  }
321
+
322
+ /**
323
+ * Create a mock executor for testing
324
+ * Returns a function that returns predefined outputs
325
+ */
326
+ export function createMockExecutor(
327
+ responses: Record<string, { output: string; exitCode: number; error?: string }>
328
+ ): CommandExecutor {
329
+ return async (command: string) => {
330
+ const response = responses[command] || responses['*'] || {
331
+ output: `Mock output for: ${command}`,
332
+ exitCode: 0,
333
+ };
334
+ return response;
335
+ };
336
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/adapters/cli.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAGH,OAAO,EAEL,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EAGtB,MAAM,aAAa,CAAC;AAErB,UAAU,QAAQ;IAChB,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,cAAc;IACtB,KAAK,EAAE,KAAK,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,WAAW,EAAE,MAAM,CAAC;QAEpB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,WAAW,EAAE,KAAK,CAAC;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,iBAAS,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAO9D;AAED;;;;GAIG;AACH,iBAAS,wBAAwB,CAAC,QAAQ,GAAG,OAAO,EAClD,MAAM,EAAE,cAAc,GACrB,cAAc,CAAC,QAAQ,CAAC,CAgD1B;AAED;;GAEG;AACH,iBAAS,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,gBAAgB,CAetD;AA8CD,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/adapters/cli.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAqEH;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoG7E;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAcnD;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA4DnD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAG5C"}