@plures/praxis 0.2.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (486) hide show
  1. package/README.md +188 -61
  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 +237 -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 +1 -1
  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 +443 -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 +178 -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
+ }
@@ -6,6 +6,7 @@
6
6
  */
7
7
 
8
8
  import type { TerminalNodeProps } from '../core/schema/types.js';
9
+ import type { PraxisDB } from '../core/pluresdb/adapter.js';
9
10
 
10
11
  /**
11
12
  * Terminal command execution result
@@ -47,19 +48,71 @@ export interface TerminalAdapterOptions {
47
48
  inputPath?: string;
48
49
  /** PluresDB path for output binding */
49
50
  outputPath?: string;
51
+ /** Current working directory */
52
+ cwd?: string;
53
+ /** Environment variables */
54
+ env?: Record<string, string>;
55
+ /** PluresDB instance for state persistence */
56
+ db?: PraxisDB;
57
+ /** Command executor function (for custom execution environments) */
58
+ executor?: CommandExecutor;
59
+ }
60
+
61
+ /**
62
+ * Command executor function type
63
+ */
64
+ export type CommandExecutor = (
65
+ command: string,
66
+ options: { cwd?: string; env?: Record<string, string> }
67
+ ) => Promise<{ output: string; exitCode: number; error?: string }>;
68
+
69
+ /**
70
+ * Default command executor using child_process
71
+ * Note: This only works in Node.js environments
72
+ */
73
+ async function defaultExecutor(
74
+ command: string,
75
+ options: { cwd?: string; env?: Record<string, string> }
76
+ ): Promise<{ output: string; exitCode: number; error?: string }> {
77
+ try {
78
+ // Dynamic import to support environments without child_process
79
+ const { exec } = await import('child_process');
80
+ const { promisify } = await import('util');
81
+ const execAsync = promisify(exec);
82
+
83
+ const result = await execAsync(command, {
84
+ cwd: options.cwd,
85
+ env: { ...process.env, ...options.env },
86
+ maxBuffer: 10 * 1024 * 1024, // 10MB buffer
87
+ timeout: 60000, // 60 second timeout
88
+ });
89
+
90
+ return {
91
+ output: result.stdout + (result.stderr ? `\n${result.stderr}` : ''),
92
+ exitCode: 0,
93
+ };
94
+ } catch (error: unknown) {
95
+ const execError = error as { stdout?: string; stderr?: string; code?: number; message?: string };
96
+ return {
97
+ output: (execError.stdout || '') + (execError.stderr || ''),
98
+ exitCode: execError.code || 1,
99
+ error: execError.message || 'Command execution failed',
100
+ };
101
+ }
50
102
  }
51
103
 
52
104
  /**
53
105
  * Terminal Runtime Adapter
54
106
  *
55
107
  * Manages terminal node execution and state.
56
- *
57
- * Note: PluresDB input/output path bindings will be implemented
58
- * when pluresDB integration is complete.
108
+ * Supports command execution with history tracking and PluresDB integration.
59
109
  */
60
110
  export class TerminalAdapter {
61
111
  private state: TerminalNodeState;
112
+ private inputPath?: string;
62
113
  private outputPath?: string;
114
+ private db?: PraxisDB;
115
+ private executor: CommandExecutor;
63
116
 
64
117
  constructor(options: TerminalAdapterOptions) {
65
118
  this.state = {
@@ -67,10 +120,13 @@ export class TerminalAdapter {
67
120
  inputMode: options.props?.inputMode || 'text',
68
121
  history: options.props?.history || [],
69
122
  lastOutput: options.props?.lastOutput || null,
123
+ cwd: options.cwd,
124
+ env: options.env,
70
125
  };
71
- // TODO: Store inputPath when pluresDB integration is complete
72
- // const inputPath = options.inputPath;
126
+ this.inputPath = options.inputPath;
73
127
  this.outputPath = options.outputPath;
128
+ this.db = options.db;
129
+ this.executor = options.executor || defaultExecutor;
74
130
  }
75
131
 
76
132
  /**
@@ -82,21 +138,28 @@ export class TerminalAdapter {
82
138
  async executeCommand(command: string): Promise<TerminalExecutionResult> {
83
139
  // Add to history
84
140
  this.state.history.push(command);
85
-
86
- // TODO: Integrate with RuneBook execution model
87
- // For now, return a stubbed response
141
+
142
+ const timestamp = Date.now();
143
+
144
+ // Execute the command
145
+ const { output, exitCode, error } = await this.executor(command, {
146
+ cwd: this.state.cwd,
147
+ env: this.state.env,
148
+ });
149
+
88
150
  const result: TerminalExecutionResult = {
89
151
  command,
90
- output: `[Stub] Command received: ${command}\nIntegration with RuneBook pending.`,
91
- exitCode: 0,
92
- timestamp: Date.now(),
152
+ output,
153
+ exitCode,
154
+ timestamp,
155
+ error,
93
156
  };
94
157
 
95
158
  // Update last output
96
- this.state.lastOutput = result.output;
159
+ this.state.lastOutput = output;
97
160
 
98
- // TODO: Sync to pluresDB output path when integration is available
99
- if (this.outputPath) {
161
+ // Sync to PluresDB if configured
162
+ if (this.db && this.outputPath) {
100
163
  await this.syncToPluresDB(this.outputPath, result);
101
164
  }
102
165
 
@@ -120,6 +183,20 @@ export class TerminalAdapter {
120
183
  };
121
184
  }
122
185
 
186
+ /**
187
+ * Set working directory
188
+ */
189
+ setCwd(cwd: string): void {
190
+ this.state.cwd = cwd;
191
+ }
192
+
193
+ /**
194
+ * Set environment variables
195
+ */
196
+ setEnv(env: Record<string, string>): void {
197
+ this.state.env = { ...this.state.env, ...env };
198
+ }
199
+
123
200
  /**
124
201
  * Clear command history
125
202
  */
@@ -135,15 +212,70 @@ export class TerminalAdapter {
135
212
  }
136
213
 
137
214
  /**
138
- * Sync state to pluresDB (placeholder)
215
+ * Sync state to PluresDB
139
216
  *
140
- * @param _path - PluresDB path (unused until integration is complete)
141
- * @param _data - Data to sync (unused until integration is complete)
217
+ * @param path - PluresDB path for storing results
218
+ * @param data - Data to sync
142
219
  */
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
220
+ private async syncToPluresDB(path: string, data: TerminalExecutionResult): Promise<void> {
221
+ if (!this.db) return;
222
+
223
+ try {
224
+ // Store the execution result
225
+ await this.db.set(path, {
226
+ ...data,
227
+ nodeId: this.state.nodeId,
228
+ syncedAt: Date.now(),
229
+ });
230
+
231
+ // Also append to history path
232
+ const historyPath = `${path}/history`;
233
+ const historyKey = `${historyPath}/${data.timestamp}`;
234
+ await this.db.set(historyKey, data);
235
+ } catch (error) {
236
+ console.warn('Failed to sync to PluresDB:', error);
237
+ }
238
+ }
239
+
240
+ /**
241
+ * Load state from PluresDB
242
+ */
243
+ async loadFromPluresDB(): Promise<void> {
244
+ if (!this.db || !this.inputPath) return;
245
+
246
+ try {
247
+ const data = await this.db.get(this.inputPath);
248
+ if (data && typeof data === 'object') {
249
+ const savedState = data as Partial<TerminalNodeState>;
250
+ if (savedState.history) {
251
+ this.state.history = savedState.history;
252
+ }
253
+ if (savedState.lastOutput !== undefined) {
254
+ this.state.lastOutput = savedState.lastOutput;
255
+ }
256
+ if (savedState.cwd) {
257
+ this.state.cwd = savedState.cwd;
258
+ }
259
+ if (savedState.env) {
260
+ this.state.env = savedState.env;
261
+ }
262
+ }
263
+ } catch (error) {
264
+ console.warn('Failed to load from PluresDB:', error);
265
+ }
266
+ }
267
+
268
+ /**
269
+ * Subscribe to input changes from PluresDB
270
+ */
271
+ watchInput(callback: (command: string) => void): (() => void) | null {
272
+ if (!this.db || !this.inputPath) return null;
273
+
274
+ return this.db.watch(this.inputPath, (data) => {
275
+ if (data && typeof data === 'object' && 'command' in data) {
276
+ callback((data as { command: string }).command);
277
+ }
278
+ });
147
279
  }
148
280
  }
149
281
 
@@ -164,12 +296,35 @@ export function createTerminalAdapter(
164
296
  *
165
297
  * @param nodeId - Terminal node identifier
166
298
  * @param command - Command to execute
299
+ * @param options - Additional options
167
300
  * @returns Execution result
168
301
  */
169
302
  export async function runTerminalCommand(
170
303
  nodeId: string,
171
- command: string
304
+ command: string,
305
+ options?: { cwd?: string; env?: Record<string, string>; db?: PraxisDB }
172
306
  ): Promise<TerminalExecutionResult> {
173
- const adapter = createTerminalAdapter({ nodeId });
307
+ const adapter = createTerminalAdapter({
308
+ nodeId,
309
+ cwd: options?.cwd,
310
+ env: options?.env,
311
+ db: options?.db,
312
+ });
174
313
  return adapter.executeCommand(command);
175
314
  }
315
+
316
+ /**
317
+ * Create a mock executor for testing
318
+ * Returns a function that returns predefined outputs
319
+ */
320
+ export function createMockExecutor(
321
+ responses: Record<string, { output: string; exitCode: number; error?: string }>
322
+ ): CommandExecutor {
323
+ return async (command: string) => {
324
+ const response = responses[command] || responses['*'] || {
325
+ output: `Mock output for: ${command}`,
326
+ exitCode: 0,
327
+ };
328
+ return response;
329
+ };
330
+ }
@@ -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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}