@pasosdejesus/m 0.27.2 → 0.28.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 (315) hide show
  1. package/README.md +2 -2
  2. package/dist/CHANGELOG.md +126 -0
  3. package/dist/compose/derive.d.ts +53 -0
  4. package/dist/compose/derive.d.ts.map +1 -0
  5. package/dist/compose/derive.js +128 -0
  6. package/dist/compose/derive.js.map +1 -0
  7. package/dist/compose/discover.d.ts +32 -0
  8. package/dist/compose/discover.d.ts.map +1 -0
  9. package/dist/compose/discover.js +96 -0
  10. package/dist/compose/discover.js.map +1 -0
  11. package/dist/compose/index.d.ts +17 -0
  12. package/dist/compose/index.d.ts.map +1 -0
  13. package/dist/compose/index.js +16 -0
  14. package/dist/compose/index.js.map +1 -0
  15. package/dist/compose/manifest.d.ts +89 -0
  16. package/dist/compose/manifest.d.ts.map +1 -0
  17. package/dist/compose/manifest.js +16 -0
  18. package/dist/compose/manifest.js.map +1 -0
  19. package/dist/compose/sync.d.ts +12 -0
  20. package/dist/compose/sync.d.ts.map +1 -0
  21. package/dist/compose/sync.js +27 -0
  22. package/dist/compose/sync.js.map +1 -0
  23. package/dist/compose/usage.d.ts +54 -0
  24. package/dist/compose/usage.d.ts.map +1 -0
  25. package/dist/compose/usage.js +167 -0
  26. package/dist/compose/usage.js.map +1 -0
  27. package/dist/compose/vendor.d.ts +45 -0
  28. package/dist/compose/vendor.d.ts.map +1 -0
  29. package/dist/compose/vendor.js +147 -0
  30. package/dist/compose/vendor.js.map +1 -0
  31. package/dist/compose/verify.d.ts +11 -0
  32. package/dist/compose/verify.d.ts.map +1 -0
  33. package/dist/compose/verify.js +74 -0
  34. package/dist/compose/verify.js.map +1 -0
  35. package/dist/e2e/env.d.ts +1 -1
  36. package/dist/e2e/env.js +3 -3
  37. package/dist/e2e/env.js.map +1 -1
  38. package/dist/e2e/local-node.js +1 -1
  39. package/dist/e2e/local-node.js.map +1 -1
  40. package/dist/e2e/wallet-mock.js +1 -1
  41. package/dist/e2e/wallet-mock.js.map +1 -1
  42. package/dist/e2e/warmup.js +1 -1
  43. package/dist/e2e/warmup.js.map +1 -1
  44. package/dist/engine.d.ts +3 -16
  45. package/dist/engine.d.ts.map +1 -1
  46. package/dist/i18n/locales/cli.d.ts.map +1 -1
  47. package/dist/i18n/locales/cli.js +16 -10
  48. package/dist/i18n/locales/cli.js.map +1 -1
  49. package/dist/m.js +13 -10
  50. package/dist/m.js.map +1 -1
  51. package/dist/shadcn_components/ui/button.d.ts +1 -1
  52. package/dist/tasks/create.d.ts +1 -1
  53. package/dist/tasks/create.d.ts.map +1 -1
  54. package/dist/tasks/create.js +5 -13
  55. package/dist/tasks/create.js.map +1 -1
  56. package/dist/tasks/db.d.ts +2 -1
  57. package/dist/tasks/db.d.ts.map +1 -1
  58. package/dist/tasks/db.js +14 -11
  59. package/dist/tasks/db.js.map +1 -1
  60. package/dist/tasks/e2e-summary.js +1 -1
  61. package/dist/tasks/e2e-summary.js.map +1 -1
  62. package/dist/tasks/e2e.js +1 -1
  63. package/dist/tasks/e2e.js.map +1 -1
  64. package/dist/tasks/engine.d.ts.map +1 -1
  65. package/dist/tasks/engine.js +246 -17
  66. package/dist/tasks/engine.js.map +1 -1
  67. package/dist/tasks/msip.d.ts +11 -0
  68. package/dist/tasks/msip.d.ts.map +1 -0
  69. package/dist/tasks/{base-model.js → msip.js} +161 -25
  70. package/dist/tasks/msip.js.map +1 -0
  71. package/dist/tasks/warmup.js +1 -1
  72. package/dist/tasks/warmup.js.map +1 -1
  73. package/dist/templates/apps/hardhat/README.md +0 -8
  74. package/dist/templates/apps/nextjs/bin/m +3 -0
  75. package/dist/templates/apps/nextjs/tests/global-setup.ts +28 -0
  76. package/dist/templates/apps/nextjs/vitest.config.ts +3 -0
  77. package/dist/test-utils/console.d.ts +1 -1
  78. package/dist/test-utils/console.js +1 -1
  79. package/dist/test-utils/kysely-mocks.d.ts +1 -1
  80. package/dist/test-utils/kysely-mocks.js +1 -1
  81. package/dist/test-utils/wallet-mocks.js +1 -1
  82. package/dist/test-utils/wallet-setup.js +1 -1
  83. package/dist/util/engines.d.ts +4 -6
  84. package/dist/util/engines.d.ts.map +1 -1
  85. package/dist/util/engines.js +5 -38
  86. package/dist/util/engines.js.map +1 -1
  87. package/dist/util/msip.d.ts +17 -0
  88. package/dist/util/msip.d.ts.map +1 -0
  89. package/dist/util/msip.js +86 -0
  90. package/dist/util/msip.js.map +1 -0
  91. package/dist/wallet/index.js +1 -1
  92. package/dist/wallet/index.js.map +1 -1
  93. package/dist/wallet/next/i18n.d.ts +1 -1
  94. package/dist/wallet/next/i18n.js +1 -1
  95. package/dist/wallet/next/index.js +1 -1
  96. package/dist/wallet/next/index.js.map +1 -1
  97. package/dist/wallet/next/namespaces.d.ts +1 -1
  98. package/dist/wallet/next/namespaces.js +1 -1
  99. package/dist/wallet/storage/idb.d.ts +1 -1
  100. package/dist/wallet/storage/idb.js +1 -1
  101. package/package.json +4 -6
  102. package/src/e2e/README.md +6 -6
  103. package/src/tasks/README.md +3 -3
  104. package/src/test-utils/README.md +2 -2
  105. package/src/wallet/README.md +4 -4
  106. package/dist/base-model/baseline.generated.d.ts +0 -48
  107. package/dist/base-model/baseline.generated.d.ts.map +0 -1
  108. package/dist/base-model/baseline.generated.js +0 -930
  109. package/dist/base-model/baseline.generated.js.map +0 -1
  110. package/dist/base-model/check.d.ts +0 -6
  111. package/dist/base-model/check.d.ts.map +0 -1
  112. package/dist/base-model/check.js +0 -195
  113. package/dist/base-model/check.js.map +0 -1
  114. package/dist/base-model/forward/baseline_1_0_0.d.ts +0 -3
  115. package/dist/base-model/forward/baseline_1_0_0.d.ts.map +0 -1
  116. package/dist/base-model/forward/baseline_1_0_0.js +0 -23
  117. package/dist/base-model/forward/baseline_1_0_0.js.map +0 -1
  118. package/dist/base-model/forward/index.d.ts +0 -28
  119. package/dist/base-model/forward/index.d.ts.map +0 -1
  120. package/dist/base-model/forward/index.js +0 -126
  121. package/dist/base-model/forward/index.js.map +0 -1
  122. package/dist/base-model/forward/index.test.d.ts +0 -2
  123. package/dist/base-model/forward/index.test.d.ts.map +0 -1
  124. package/dist/base-model/forward/index.test.js +0 -65
  125. package/dist/base-model/forward/index.test.js.map +0 -1
  126. package/dist/base-model/forward/policy.d.ts +0 -16
  127. package/dist/base-model/forward/policy.d.ts.map +0 -1
  128. package/dist/base-model/forward/policy.js +0 -37
  129. package/dist/base-model/forward/policy.js.map +0 -1
  130. package/dist/base-model/forward/policy.test.d.ts +0 -2
  131. package/dist/base-model/forward/policy.test.d.ts.map +0 -1
  132. package/dist/base-model/forward/policy.test.js +0 -40
  133. package/dist/base-model/forward/policy.test.js.map +0 -1
  134. package/dist/base-model/forward/types.d.ts +0 -21
  135. package/dist/base-model/forward/types.d.ts.map +0 -1
  136. package/dist/base-model/forward/types.js +0 -2
  137. package/dist/base-model/forward/types.js.map +0 -1
  138. package/dist/base-model/generate.d.ts +0 -42
  139. package/dist/base-model/generate.d.ts.map +0 -1
  140. package/dist/base-model/generate.js +0 -241
  141. package/dist/base-model/generate.js.map +0 -1
  142. package/dist/base-model/guidelines.d.ts +0 -13
  143. package/dist/base-model/guidelines.d.ts.map +0 -1
  144. package/dist/base-model/guidelines.js +0 -61
  145. package/dist/base-model/guidelines.js.map +0 -1
  146. package/dist/base-model/index.d.ts +0 -24
  147. package/dist/base-model/index.d.ts.map +0 -1
  148. package/dist/base-model/index.js +0 -29
  149. package/dist/base-model/index.js.map +0 -1
  150. package/dist/base-model/parse-structure.d.ts +0 -4
  151. package/dist/base-model/parse-structure.d.ts.map +0 -1
  152. package/dist/base-model/parse-structure.js +0 -170
  153. package/dist/base-model/parse-structure.js.map +0 -1
  154. package/dist/base-model/queries.d.ts +0 -34
  155. package/dist/base-model/queries.d.ts.map +0 -1
  156. package/dist/base-model/queries.js +0 -118
  157. package/dist/base-model/queries.js.map +0 -1
  158. package/dist/base-model/references/learn-tg.d.ts +0 -21
  159. package/dist/base-model/references/learn-tg.d.ts.map +0 -1
  160. package/dist/base-model/references/learn-tg.js +0 -65
  161. package/dist/base-model/references/learn-tg.js.map +0 -1
  162. package/dist/base-model/references/msip.d.ts +0 -29
  163. package/dist/base-model/references/msip.d.ts.map +0 -1
  164. package/dist/base-model/references/msip.js +0 -33
  165. package/dist/base-model/references/msip.js.map +0 -1
  166. package/dist/base-model/types.d.ts +0 -207
  167. package/dist/base-model/types.d.ts.map +0 -1
  168. package/dist/base-model/types.js +0 -10
  169. package/dist/base-model/types.js.map +0 -1
  170. package/dist/base-model/version.d.ts +0 -19
  171. package/dist/base-model/version.d.ts.map +0 -1
  172. package/dist/base-model/version.js +0 -26
  173. package/dist/base-model/version.js.map +0 -1
  174. package/dist/base-model/wallet-link.d.ts +0 -69
  175. package/dist/base-model/wallet-link.d.ts.map +0 -1
  176. package/dist/base-model/wallet-link.js +0 -220
  177. package/dist/base-model/wallet-link.js.map +0 -1
  178. package/dist/base-model/wallet-link.test.d.ts +0 -2
  179. package/dist/base-model/wallet-link.test.d.ts.map +0 -1
  180. package/dist/base-model/wallet-link.test.js +0 -147
  181. package/dist/base-model/wallet-link.test.js.map +0 -1
  182. package/dist/e2e/env.test.d.ts +0 -2
  183. package/dist/e2e/env.test.d.ts.map +0 -1
  184. package/dist/e2e/env.test.js +0 -72
  185. package/dist/e2e/env.test.js.map +0 -1
  186. package/dist/e2e/full-wallet.test.d.ts +0 -2
  187. package/dist/e2e/full-wallet.test.d.ts.map +0 -1
  188. package/dist/e2e/full-wallet.test.js +0 -63
  189. package/dist/e2e/full-wallet.test.js.map +0 -1
  190. package/dist/e2e/in-app-wallet.test.d.ts +0 -2
  191. package/dist/e2e/in-app-wallet.test.d.ts.map +0 -1
  192. package/dist/e2e/in-app-wallet.test.js +0 -52
  193. package/dist/e2e/in-app-wallet.test.js.map +0 -1
  194. package/dist/e2e/local-node.test.d.ts +0 -2
  195. package/dist/e2e/local-node.test.d.ts.map +0 -1
  196. package/dist/e2e/local-node.test.js +0 -43
  197. package/dist/e2e/local-node.test.js.map +0 -1
  198. package/dist/e2e/retry.test.d.ts +0 -2
  199. package/dist/e2e/retry.test.d.ts.map +0 -1
  200. package/dist/e2e/retry.test.js +0 -43
  201. package/dist/e2e/retry.test.js.map +0 -1
  202. package/dist/e2e/signer.test.d.ts +0 -2
  203. package/dist/e2e/signer.test.d.ts.map +0 -1
  204. package/dist/e2e/signer.test.js +0 -57
  205. package/dist/e2e/signer.test.js.map +0 -1
  206. package/dist/e2e/siwe-optional.test.d.ts +0 -2
  207. package/dist/e2e/siwe-optional.test.d.ts.map +0 -1
  208. package/dist/e2e/siwe-optional.test.js +0 -13
  209. package/dist/e2e/siwe-optional.test.js.map +0 -1
  210. package/dist/e2e/wallet-mock.test.d.ts +0 -2
  211. package/dist/e2e/wallet-mock.test.d.ts.map +0 -1
  212. package/dist/e2e/wallet-mock.test.js +0 -28
  213. package/dist/e2e/wallet-mock.test.js.map +0 -1
  214. package/dist/e2e/warmup.test.d.ts +0 -2
  215. package/dist/e2e/warmup.test.d.ts.map +0 -1
  216. package/dist/e2e/warmup.test.js +0 -67
  217. package/dist/e2e/warmup.test.js.map +0 -1
  218. package/dist/engine.test.d.ts +0 -2
  219. package/dist/engine.test.d.ts.map +0 -1
  220. package/dist/engine.test.js +0 -35
  221. package/dist/engine.test.js.map +0 -1
  222. package/dist/index.test.d.ts +0 -2
  223. package/dist/index.test.d.ts.map +0 -1
  224. package/dist/index.test.js +0 -11
  225. package/dist/index.test.js.map +0 -1
  226. package/dist/tasks/base-model.d.ts +0 -5
  227. package/dist/tasks/base-model.d.ts.map +0 -1
  228. package/dist/tasks/base-model.js.map +0 -1
  229. package/dist/tasks/create.test.d.ts +0 -2
  230. package/dist/tasks/create.test.d.ts.map +0 -1
  231. package/dist/tasks/create.test.js +0 -41
  232. package/dist/tasks/create.test.js.map +0 -1
  233. package/dist/tasks/e2e.test.d.ts +0 -2
  234. package/dist/tasks/e2e.test.d.ts.map +0 -1
  235. package/dist/tasks/e2e.test.js +0 -108
  236. package/dist/tasks/e2e.test.js.map +0 -1
  237. package/dist/tasks/update.test.d.ts +0 -2
  238. package/dist/tasks/update.test.d.ts.map +0 -1
  239. package/dist/tasks/update.test.js +0 -79
  240. package/dist/tasks/update.test.js.map +0 -1
  241. package/dist/tasks/warmup.test.d.ts +0 -2
  242. package/dist/tasks/warmup.test.d.ts.map +0 -1
  243. package/dist/tasks/warmup.test.js +0 -40
  244. package/dist/tasks/warmup.test.js.map +0 -1
  245. package/dist/templates/apps/nextjs/tests/index.test.ts +0 -7
  246. package/dist/templates/apps/nextjs/tests/test-utils.example.test.ts +0 -169
  247. package/dist/templates/apps/nextjs/tsconfig.test.json +0 -38
  248. package/dist/test-utils/console.test.d.ts +0 -2
  249. package/dist/test-utils/console.test.d.ts.map +0 -1
  250. package/dist/test-utils/console.test.js +0 -70
  251. package/dist/test-utils/console.test.js.map +0 -1
  252. package/dist/test-utils/kysely-mocks.test.d.ts +0 -2
  253. package/dist/test-utils/kysely-mocks.test.d.ts.map +0 -1
  254. package/dist/test-utils/kysely-mocks.test.js +0 -126
  255. package/dist/test-utils/kysely-mocks.test.js.map +0 -1
  256. package/dist/test-utils/wallet-mocks.test.d.ts +0 -2
  257. package/dist/test-utils/wallet-mocks.test.d.ts.map +0 -1
  258. package/dist/test-utils/wallet-mocks.test.js +0 -55
  259. package/dist/test-utils/wallet-mocks.test.js.map +0 -1
  260. package/dist/test-utils/wallet-setup.test.d.ts +0 -2
  261. package/dist/test-utils/wallet-setup.test.d.ts.map +0 -1
  262. package/dist/test-utils/wallet-setup.test.js +0 -18
  263. package/dist/test-utils/wallet-setup.test.js.map +0 -1
  264. package/dist/util/engines.test.d.ts +0 -2
  265. package/dist/util/engines.test.d.ts.map +0 -1
  266. package/dist/util/engines.test.js +0 -79
  267. package/dist/util/engines.test.js.map +0 -1
  268. package/dist/wallet/biometric.test.d.ts +0 -2
  269. package/dist/wallet/biometric.test.d.ts.map +0 -1
  270. package/dist/wallet/biometric.test.js +0 -44
  271. package/dist/wallet/biometric.test.js.map +0 -1
  272. package/dist/wallet/crypto.test.d.ts +0 -2
  273. package/dist/wallet/crypto.test.d.ts.map +0 -1
  274. package/dist/wallet/crypto.test.js +0 -34
  275. package/dist/wallet/crypto.test.js.map +0 -1
  276. package/dist/wallet/destinations.test.d.ts +0 -2
  277. package/dist/wallet/destinations.test.d.ts.map +0 -1
  278. package/dist/wallet/destinations.test.js +0 -34
  279. package/dist/wallet/destinations.test.js.map +0 -1
  280. package/dist/wallet/external-provider.test.d.ts +0 -2
  281. package/dist/wallet/external-provider.test.d.ts.map +0 -1
  282. package/dist/wallet/external-provider.test.js +0 -44
  283. package/dist/wallet/external-provider.test.js.map +0 -1
  284. package/dist/wallet/indexeddb.test.d.ts +0 -2
  285. package/dist/wallet/indexeddb.test.d.ts.map +0 -1
  286. package/dist/wallet/indexeddb.test.js +0 -28
  287. package/dist/wallet/indexeddb.test.js.map +0 -1
  288. package/dist/wallet/kdf.test.d.ts +0 -2
  289. package/dist/wallet/kdf.test.d.ts.map +0 -1
  290. package/dist/wallet/kdf.test.js +0 -54
  291. package/dist/wallet/kdf.test.js.map +0 -1
  292. package/dist/wallet/next/components.test.d.ts +0 -2
  293. package/dist/wallet/next/components.test.d.ts.map +0 -1
  294. package/dist/wallet/next/components.test.js +0 -122
  295. package/dist/wallet/next/components.test.js.map +0 -1
  296. package/dist/wallet/next/useInAppWallet.test.d.ts +0 -2
  297. package/dist/wallet/next/useInAppWallet.test.d.ts.map +0 -1
  298. package/dist/wallet/next/useInAppWallet.test.js +0 -261
  299. package/dist/wallet/next/useInAppWallet.test.js.map +0 -1
  300. package/dist/wallet/provider.test.d.ts +0 -2
  301. package/dist/wallet/provider.test.d.ts.map +0 -1
  302. package/dist/wallet/provider.test.js +0 -170
  303. package/dist/wallet/provider.test.js.map +0 -1
  304. package/dist/wallet/signer.test.d.ts +0 -2
  305. package/dist/wallet/signer.test.d.ts.map +0 -1
  306. package/dist/wallet/signer.test.js +0 -62
  307. package/dist/wallet/signer.test.js.map +0 -1
  308. package/dist/wallet/storage.test.d.ts +0 -2
  309. package/dist/wallet/storage.test.d.ts.map +0 -1
  310. package/dist/wallet/storage.test.js +0 -103
  311. package/dist/wallet/storage.test.js.map +0 -1
  312. package/dist/wallet/wallet.test.d.ts +0 -2
  313. package/dist/wallet/wallet.test.d.ts.map +0 -1
  314. package/dist/wallet/wallet.test.js +0 -150
  315. package/dist/wallet/wallet.test.js.map +0 -1
package/README.md CHANGED
@@ -31,12 +31,12 @@ credentials). The `usdt` payment engine lives in `@pasosdejesus/usdt`.
31
31
  | Area | Commands |
32
32
  |------|----------|
33
33
  | Scaffolding | `m:create`, `m:update` |
34
- | Database (PostgreSQL + Kysely) | `db:create`, `db:migrate`, `db:rollback`, `db:dump`, `db:restore`, `db:structure:dump/load`, `db:check`, `db:console`, `db:test` |
34
+ | Database (PostgreSQL + Kysely) | `db:create`, `db:migrate`, `db:rollback`, `db:dump`, `db:restore`, `db:structure:dump/load`, `db:console`, `db:test`, `db:seed` |
35
35
  | Wallet (replaces `cast` on OpenBSD) | `wallet:generate`, `wallet:import`, `wallet:list`, `wallet:balance`, `wallet:send`, `wallet:approve`, `wallet:call`, `wallet:sign`, `wallet:broadcast`, `wallet:keccak`, `wallet:derive` — keys in `~/.m/wallets/` with `chmod 600` |
36
36
  | Contracts | `contract:test` (EVM via `@pasosdejesus/edr`, no native binaries) |
37
37
  | AI tooling | `ai:context`, `ai:readfile`, `ai:writefile`, `ai:edit`, `ai:grep`, `ai:glob` |
38
38
  | Requirements | `req:list`, `req:show`, `req:cross`, `req:compare`, `req:sync-from-repo`, `req:sync-to-repo`, `req:list-repo`, `req:create`, `req:close` |
39
- | Engines | `m:create engine`, `eng:list`, `eng:check`, `eng:wba:setup`, `eng:credentials:setup` |
39
+ | Engines | `m:create engine`, `eng:list`, `eng:sync`, `eng:verify`, `eng:check`, `eng:setup`, `eng:wba:setup`, `eng:credentials:setup`, `eng:msip:setup`, `eng:msip:seed` |
40
40
  | Environment | `env:diff` |
41
41
 
42
42
  Subpath exports for programmatic use: `@pasosdejesus/m/i18n`,
package/dist/CHANGELOG.md CHANGED
@@ -2,6 +2,132 @@
2
2
 
3
3
  All notable changes to `@pasosdejesus/m` are documented in this file.
4
4
 
5
+ ## [0.28.0] - 2026-10-12
6
+
7
+ ### Changed (breaking) — Fase 1 de `m/REQ/39`
8
+
9
+ - **`base-model` → `msip`, y el modelo sale de `m`:** ya no hay subpath `@pasosdejesus/m/base-model`
10
+ **ni `@pasosdejesus/m/msip`**: el modelo base es el motor **`@pasosdejesus/msip`** (paquete aparte,
11
+ versión propia) y `m` **lo resuelve al ejecutar** donde el consumidor lo tenga (vendorizado en
12
+ `packages/generated/msip`, o instalado). Actualizar imports (`@pasosdejesus/m/base-model` →
13
+ `@pasosdejesus/msip`, o a la copia vendorizada).
14
+ - **Comandos:** la familia `base-model:*` se retira; ahora **`eng:msip:setup` / `eng:msip:baseline` /
15
+ `eng:msip:dump` / `eng:msip:verify`**, y **`db:check` se fusiona en `eng:check`**.
16
+ - **`engine.json` → `m-engine.json`**: el manifiesto de un motor se descubre **si y sólo si** el
17
+ paquete tiene `m-engine.json` (sin `"mEngine": true` ni convención de nombre). `name`/`version`
18
+ salen del `package.json`; el montaje va en `mount`.
19
+ - **Sin material específico de consumidores** en `m`: se eliminan
20
+ `packages/m/src/msip/references/` (`msip.ts`, `learn-tg.ts`) y el export `LEARN_TG_EXTENSIONS`; lo
21
+ específico se aporta en tiempo de ejecución (`--additions`/`--extensions`).
22
+ - **Docs:** `doc/base-model-*` → `doc/engines-*`.
23
+
24
+ ### Added — Fase 2 de `m/REQ/39` (composición de motores)
25
+
26
+ - **Dos archivos por motor:** `m-engine.json` (intención, a mano) y `m-engine.generated.ts` (hechos
27
+ derivados, generado por `eng:sync`). Regla de oro: lo que se deriva no se escribe a mano.
28
+ - **`eng:sync [<motor>] [--check]`:** regenera `m-engine.generated.ts` desde las fuentes (idempotente;
29
+ `--check` no escribe y sale ≠ 0 si está desactualizado). Sin `<motor>`, opera sobre toda la composición.
30
+ - **`eng:verify [<motor>]`:** guarda el generado contra las fuentes y la intención (`GENERATED_MISSING` /
31
+ `GENERATED_STALE`) y comprueba la propiedad de `engines.<motor>.tables` (`MISSING_ENGINE` /
32
+ `UNKNOWN_TABLE` / `BROKEN_REFERENCE`). El guard del baseline `msip` pasa a **`eng:msip:verify`**.
33
+ - **Descubrimiento:** un paquete es motor **si y sólo si** tiene `m-engine.json`; `eng:list` lo halla
34
+ entre las dependencias y sigue el closure de `engines`.
35
+
36
+ ### Changed (breaking) — Fase 3 de `m/REQ/39` (el modelo `msip` sale a un motor propio)
37
+
38
+ - **Nuevo paquete `@pasosdejesus/msip`** (`packages/msip`): el modelo de msip sale de `m` (`db/structure.sql`
39
+ con su **esquema real de 40 tablas**: `usuario` + `msip_*`), más el baseline, los pasos `forward/*`,
40
+ `wallet-link` y la capa de datos. Expone la forma genérica `model` (`{ version, tables, migrations }`)
41
+ en `@pasosdejesus/msip/model`; `model.tables` se **deriva** de `src/m-engine.generated.ts` (no de una
42
+ lista a mano). Un motor exporta **todo** su esquema; el recorte es del consumidor (`engines.<motor>.tables`).
43
+ - **`eng:sync`** escribe el generado en **`src/m-engine.generated.ts`** (compilable/importable) y crea
44
+ el directorio si falta.
45
+ - **Baseline derivado del esquema:** `eng:msip:dump` regenera `baseline.generated.ts` para **todas** las
46
+ tablas del esquema (40), y `BASE_MODEL_TABLES`/`BASE_MODEL_VERSION` se **derivan** de él.
47
+ `eng:msip:setup` + `db:migrate` ahora crean las **40** (antes 5). Corregido de paso: una secuencia se
48
+ emitía una vez por cada tabla que la prefijaba (`msip_pais` ⊂ `msip_pais_histvigencia`).
49
+ - **Datos iniciales (`eng:msip:seed`)**: carga el seed del motor —subconjunto empaquetado
50
+ `db/seed.sql.gz` (catálogos + `msip_pais`/`msip_departamento`/`msip_municipio`)—; `--file <sql|gz>`
51
+ para el dataset completo (~104 MB, con centros poblados/veredas), `--force` recarga y `--check`
52
+ reporta. Atómico (`psql -1`) e idempotente.
53
+ - **`m` ya no depende del motor `msip`:** sólo figura en sus `devDependencies` (para el monorepo), así que
54
+ el manifiesto **publicado** de `m` no lo menciona; sus comandos lo resuelven al ejecutar con `import()`:
55
+ **primero** la copia vendorizada del consumidor (`packages/generated/msip/dist`, hay que compilarla con
56
+ `tsc -b`) y si no el paquete instalado; si no hay ninguno, error con instrucciones. Con eso publicar `m`
57
+ **no obliga a publicar el motor**: `msip` queda **`private`** (su `version` sirve para **trazar
58
+ procedencia** —`PROVENANCE.json`, drift—, no para el registro de npm) y los consumidores lo vendorizan
59
+ con `eng:sync --vendor`.
60
+
61
+ ### Added — Fases 4–6 de `m/REQ/39`
62
+
63
+ - **Vendorización `eng:sync <motor> --vendor [--out <dir>]`:** copia trazable de un motor a
64
+ `packages/generated/<motor>` con `PROVENANCE.json` (motor, versión, origen, `sha256`); `eng:check`
65
+ mide el **drift** de las copias vendorizadas (`ok`/`drift`/`absent`). El descubrimiento incluye
66
+ `packages/generated/*`.
67
+ - **`eng:remove <motor> [--drop]`:** quita una copia vendorizada (simétrico de `--vendor`); `--drop`
68
+ borra además las tablas del modelo. Test de ciclo completo (`agregar → poblar → consultar → quitar`)
69
+ en `tests/test-project/apps/nextjs/tests/msip-motor-lifecycle.test.ts`.
70
+ - **Autocontención en `eng:check`:** deriva "lo usado" del código (`src/**`, `app/**`; parser de `tsc`
71
+ con fallback) y lo compara con lo declarado (`engines.<motor>.tables`), reportando `missing`/`extra`.
72
+ - **Limpieza/documentación (Fase 6):** test que impide listas específicas de consumidores en `m`
73
+ (`src/consumers.test.ts`); docs del modelo renombrados de `base-model-*`/`engines-*` a **`doc/msip-*`**
74
+ (`msip-tutorial.md`, `msip-tutorial-contabilidad.md`, `msip-demo.mjs`); `doc/engines.md`, `API.md`,
75
+ `README.md` y `ARCHITECTURE.md` al día.
76
+
77
+ ### Changed — citas de requisitos y guía de agentes
78
+
79
+ - **Citas `REQ/<n>` → URL del work item** en código, docs y comentarios (política en `AGENTS.md` §10):
80
+ los requisitos de `m` apuntan a `https://gitlab.com/pasosdeJesus/m/-/work_items/<n>`, los de learn.tg
81
+ a `https://github.com/pasosdeJesus/learn.tg/issues/<n>` y los de sivel3 a
82
+ `https://github.com/pasosdeJesus/sivel3/issues/<n>`; los enlaces de GitLab `/-/issues/<n>` pasan a
83
+ `/-/work_items/<n>`. El `CHANGELOG` histórico y los bloques de código con diagramas o ejemplos quedan
84
+ como estaban.
85
+ - **`AGENTS.md`**: se añaden los comandos `ai:*` de asimilación (§1, con `ai:adJ` para OpenBSD/adJ), las
86
+ trampas estructurales (§4b), la restricción financiera (§8), el trabajo en segundo plano (§9), las
87
+ citas por URL de work item (§10) y las herramientas de búsqueda del proyecto (§11).
88
+ - **Restos de `base-model` retirados del motor `msip`**: la cabecera de las migraciones generadas cita
89
+ `m eng:msip:setup`, la ruta pasa a `msip/forward/` y las guías hablan de la versión de `msip`.
90
+
91
+ ### Added — vendorización (etapa 0) verificada
92
+
93
+ - **`eng:sync <motor> --vendor` emite un paquete compilable aparte**: `package.json` (con `exports` y
94
+ `build`/`typecheck`) y `tsconfig.json` **autónomos** en `packages/generated/<motor>`, más las
95
+ `dependencies`/`peerDependencies` declaradas por el motor. Así el consumidor compila el motor por
96
+ separado (`tsc -b`) y su app no carga ese build.
97
+ - **`eng:check --from <dir>`**: mide el drift de las copias vendorizadas contra un **checkout** del motor
98
+ (carpeta del motor o `packages/<motor>`); sin original alcanzable sólo avisa. Por defecto sigue usando
99
+ el `source` de `PROVENANCE.json`.
100
+ - Guía y lineamientos en `doc/engines.md` §12.1 (copia derivada, paquete aparte, drift, dependencias) y
101
+ nota de **fuentes futuras** (npm o subárboles git, de terceros incluidos) en `doc/diseno/engines.md`.
102
+ Verificado por `tests/test-project/apps/nextjs/tests/msip-motor-lifecycle.test.ts` (vendorizar →
103
+ compilar la copia → `eng:check --from` → quitar).
104
+ - **Guardia "el motor declara lo que usa"** en `eng:verify`: falla con `UNDECLARED_IMPORT` si el `src/`
105
+ de un motor importa un paquete que no está en sus `dependencies`/`peerDependencies`/
106
+ `optionalDependencies` (en pruebas vale `devDependencies`). Analiza el AST (`import`/`export … from`/
107
+ `require`), así que **no** cuenta el texto que el motor emite dentro de plantillas (el caso de `msip`,
108
+ cuya migración generada importa `kysely` para el consumidor).
109
+
110
+ ### Fixed
111
+
112
+ - **La suite de `tests/test-project` ya no ensucia el árbol**: los tests de BD (`db:migrate`,
113
+ `db:rollback`, `db:structure:dump`) regeneran derivados del esquema y dejaban `db/db.d.ts` (que está
114
+ versionado y usa `.config/kysely.config.ts`) convertido en un stub de 4 líneas, y `db/structure.sql`
115
+ como archivo suelto. Un `globalSetup` de vitest (`tests/test-project/apps/nextjs/tests/global-setup.ts`)
116
+ los fotografía al inicio de la corrida y los restaura al final (se propagó a la plantilla).
117
+ - **Los paquetes publicados ya no incluyen pruebas**: `files` con negaciones (`!dist/**/*.test.*`,
118
+ `!src/**/*.test.*`, `!contracts/**/*.test.*`) en `m`, `msip` y `usdt`; antes el tarball de `m` llevaba
119
+ 36 `*.test.js` (y `msip`/`usdt` sus fuentes de prueba). Verificado con `npm pack --dry-run`
120
+ ([REQ/40](https://gitlab.com/pasosdeJesus/m/-/work_items/40)).
121
+ - **Los tipos publicados ya no mencionan el motor `msip`**: `dist/util/msip.d.ts` decía
122
+ `typeof import('@pasosdejesus/msip')` y un consumidor sin el motor (con `skipLibCheck: false`) no podía
123
+ resolverlo; ahora el tipo es local a `tasks/msip.ts` (no se emite) y `util/msip.ts` valida en ejecución
124
+ los símbolos que necesita (`MSIP_SYMBOLS`), descartando versiones incompatibles.
125
+
126
+ - **Plantilla `bin/m` y `tests/test-project`**: el `bin/m` ahora importa `@pasosdejesus/mpdj` (como
127
+ documenta `ARCHITECTURE.md` §5.2). Desde la Fase 1 el plugin ya no se descubre por nombre (`@pasosdejesus/m*`)
128
+ y `mpdj` no trae `m-engine.json`, así que un proyecto generado perdía `ai:*`, `req:*` y
129
+ `eng:credentials:*`; la suite de integración lo detectó (10 fallos que ahora pasan).
130
+
5
131
  ## [0.27.2] - 2026-10-10
6
132
 
7
133
  ### Fixed
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Motor derivation (https://gitlab.com/pasosdeJesus/m/-/work_items/39, §3.4): the facts `eng:sync` reads from a package's
3
+ * sources and writes into `m-engine.generated.ts`.
4
+ *
5
+ * Derivable → generated: `name`/`version` (package.json), `model.migrations`
6
+ * (convention), `model.tables` (the motor's reference
7
+ * structure), `contracts` (`contracts/contracts/*.sol`),
8
+ * `views` (`src/components`, `assets`).
9
+ * Intention → `m-engine.json`: `mount`, `engines`, `provides`/`requires`.
10
+ *
11
+ * "Porque ¿quién de vosotros, queriendo edificar una torre, no se sienta primero y calcula los gastos…?" (Lucas 14:28)
12
+ */
13
+ import type { Derived } from './manifest.js';
14
+ /** Header of a generated file; `eng:sync` writes it verbatim. */
15
+ export declare const GENERATED_HEADER = "// m-engine.generated.ts \u2014 generado por `eng:sync`; no editar a mano.";
16
+ /** Name of the generated file. */
17
+ export declare const GENERATED_FILENAME = "m-engine.generated.ts";
18
+ /**
19
+ * Generated facts live under `src/` (like `baseline.generated.ts`) so they
20
+ * compile and can be imported by the motor's `model` subpath. `eng:sync` writes
21
+ * them there and `eng:verify` reads them from there.
22
+ */
23
+ export declare const GENERATED_RELATIVE = "src/m-engine.generated.ts";
24
+ /**
25
+ * Tablas de una estructura de referencia (`pg_dump`): `CREATE TABLE [ONLY] public.<tabla> (`.
26
+ * Mismo patrón que `msip/src/parse-structure.ts`; aquí sólo se derivan los **nombres** para
27
+ * `m-engine.generated.ts` (el inventario completo de columnas/restricciones vive en el motor).
28
+ */
29
+ export declare function structureTables(sql: string): string[];
30
+ /**
31
+ * Tables of a motor's own model, derived from its **reference structure**
32
+ * (`db/structure.sql`), never from scanning all migrations (which have
33
+ * `DROP`/`RENAME`). A motor with no structure has no model tables (`[]`).
34
+ */
35
+ export declare function deriveTables(dir: string): string[];
36
+ /** Migrations directory, by convention `db/migrations` when it exists. */
37
+ export declare function deriveMigrations(dir: string): string | undefined;
38
+ /** Solidity contract names, from `contracts/contracts/*.sol` (skipping `_`-prefixed mocks). */
39
+ export declare function deriveContracts(dir: string): string[];
40
+ /** Views: React components under `src/components` and an `assets` directory. */
41
+ export declare function deriveViews(dir: string): Derived['views'];
42
+ /** Commands the motor declares on `package.json` (`m.commands`); empty if none. */
43
+ export declare function deriveCommands(pkg: unknown): string[];
44
+ /**
45
+ * Build the derived facts of a motor. Key order is fixed so the generated file
46
+ * is byte-identical across runs (idempotent, diffable).
47
+ */
48
+ export declare function deriveFrom(dir: string, name: string, version: string, pkg?: unknown): Derived;
49
+ /** Render `m-engine.generated.ts` from the derived facts (pure JSON body + `as const`). */
50
+ export declare function renderGenerated(derived: Derived): string;
51
+ /** Read and parse the generated facts, or `null` when absent/unreadable. */
52
+ export declare function readGenerated(dir: string): Derived | null;
53
+ //# sourceMappingURL=derive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive.d.ts","sourceRoot":"","sources":["../../src/compose/derive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAE5C,iEAAiE;AACjE,eAAO,MAAM,gBAAgB,+EAA0E,CAAA;AAEvG,kCAAkC;AAClC,eAAO,MAAM,kBAAkB,0BAA0B,CAAA;AAEzD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,8BAA8B,CAAA;AAK7D;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAIrD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAOlD;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEhE;AAED,+FAA+F;AAC/F,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAOrD;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAYzD;AAED,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAGrD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO,CAc7F;AAED,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAExD;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAWzD"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Motor derivation (https://gitlab.com/pasosdeJesus/m/-/work_items/39, §3.4): the facts `eng:sync` reads from a package's
3
+ * sources and writes into `m-engine.generated.ts`.
4
+ *
5
+ * Derivable → generated: `name`/`version` (package.json), `model.migrations`
6
+ * (convention), `model.tables` (the motor's reference
7
+ * structure), `contracts` (`contracts/contracts/*.sol`),
8
+ * `views` (`src/components`, `assets`).
9
+ * Intention → `m-engine.json`: `mount`, `engines`, `provides`/`requires`.
10
+ *
11
+ * "Porque ¿quién de vosotros, queriendo edificar una torre, no se sienta primero y calcula los gastos…?" (Lucas 14:28)
12
+ */
13
+ import { existsSync, readFileSync, readdirSync } from 'node:fs';
14
+ import { join } from 'node:path';
15
+ /** Header of a generated file; `eng:sync` writes it verbatim. */
16
+ export const GENERATED_HEADER = '// m-engine.generated.ts — generado por `eng:sync`; no editar a mano.';
17
+ /** Name of the generated file. */
18
+ export const GENERATED_FILENAME = 'm-engine.generated.ts';
19
+ /**
20
+ * Generated facts live under `src/` (like `baseline.generated.ts`) so they
21
+ * compile and can be imported by the motor's `model` subpath. `eng:sync` writes
22
+ * them there and `eng:verify` reads them from there.
23
+ */
24
+ export const GENERATED_RELATIVE = `src/${GENERATED_FILENAME}`;
25
+ /** Reference structures a motor may ship (the "current inventory", like the baseline). */
26
+ const STRUCTURE_CANDIDATES = ['db/structure.sql', 'db/schema.sql'];
27
+ /**
28
+ * Tablas de una estructura de referencia (`pg_dump`): `CREATE TABLE [ONLY] public.<tabla> (`.
29
+ * Mismo patrón que `msip/src/parse-structure.ts`; aquí sólo se derivan los **nombres** para
30
+ * `m-engine.generated.ts` (el inventario completo de columnas/restricciones vive en el motor).
31
+ */
32
+ export function structureTables(sql) {
33
+ const found = new Set();
34
+ for (const match of sql.matchAll(/^CREATE TABLE (?:ONLY )?public\.(\w+) \(\r?\n/gm))
35
+ found.add(match[1]);
36
+ return [...found].sort();
37
+ }
38
+ /**
39
+ * Tables of a motor's own model, derived from its **reference structure**
40
+ * (`db/structure.sql`), never from scanning all migrations (which have
41
+ * `DROP`/`RENAME`). A motor with no structure has no model tables (`[]`).
42
+ */
43
+ export function deriveTables(dir) {
44
+ for (const candidate of STRUCTURE_CANDIDATES) {
45
+ const file = join(dir, candidate);
46
+ if (!existsSync(file))
47
+ continue;
48
+ return structureTables(readFileSync(file, 'utf-8'));
49
+ }
50
+ return [];
51
+ }
52
+ /** Migrations directory, by convention `db/migrations` when it exists. */
53
+ export function deriveMigrations(dir) {
54
+ return existsSync(join(dir, 'db', 'migrations')) ? 'db/migrations' : undefined;
55
+ }
56
+ /** Solidity contract names, from `contracts/contracts/*.sol` (skipping `_`-prefixed mocks). */
57
+ export function deriveContracts(dir) {
58
+ const contractsDir = join(dir, 'contracts', 'contracts');
59
+ if (!existsSync(contractsDir))
60
+ return [];
61
+ return readdirSync(contractsDir)
62
+ .filter((file) => file.endsWith('.sol') && !file.startsWith('_'))
63
+ .map((file) => file.replace(/\.sol$/, ''))
64
+ .sort();
65
+ }
66
+ /** Views: React components under `src/components` and an `assets` directory. */
67
+ export function deriveViews(dir) {
68
+ const componentsDir = join(dir, 'src', 'components');
69
+ const components = existsSync(componentsDir)
70
+ ? readdirSync(componentsDir)
71
+ .filter((file) => /\.tsx?$/.test(file) && !/\.test\./.test(file))
72
+ .map((file) => file.replace(/\.tsx?$/, ''))
73
+ .filter((name) => name !== 'index')
74
+ .sort()
75
+ : [];
76
+ const assets = existsSync(join(dir, 'assets')) ? 'assets' : undefined;
77
+ if (components.length === 0 && !assets)
78
+ return undefined;
79
+ return { components, ...(assets ? { assets } : {}) };
80
+ }
81
+ /** Commands the motor declares on `package.json` (`m.commands`); empty if none. */
82
+ export function deriveCommands(pkg) {
83
+ const declared = pkg?.m?.commands;
84
+ return Array.isArray(declared) ? declared.filter((c) => typeof c === 'string') : [];
85
+ }
86
+ /**
87
+ * Build the derived facts of a motor. Key order is fixed so the generated file
88
+ * is byte-identical across runs (idempotent, diffable).
89
+ */
90
+ export function deriveFrom(dir, name, version, pkg) {
91
+ const migrations = deriveMigrations(dir);
92
+ const derived = {
93
+ name,
94
+ version,
95
+ model: { tables: deriveTables(dir), ...(migrations ? { migrations } : {}) },
96
+ };
97
+ const contracts = deriveContracts(dir);
98
+ if (contracts.length > 0)
99
+ derived.contracts = contracts;
100
+ const commands = deriveCommands(pkg);
101
+ if (commands.length > 0)
102
+ derived.commands = commands;
103
+ const views = deriveViews(dir);
104
+ if (views)
105
+ derived.views = views;
106
+ return derived;
107
+ }
108
+ /** Render `m-engine.generated.ts` from the derived facts (pure JSON body + `as const`). */
109
+ export function renderGenerated(derived) {
110
+ return `${GENERATED_HEADER}\nexport const engine = ${JSON.stringify(derived, null, 2)} as const;\n`;
111
+ }
112
+ /** Read and parse the generated facts, or `null` when absent/unreadable. */
113
+ export function readGenerated(dir) {
114
+ const file = join(dir, GENERATED_RELATIVE);
115
+ if (!existsSync(file))
116
+ return null;
117
+ const text = readFileSync(file, 'utf-8');
118
+ const match = text.match(/export const engine = (\{[\s\S]*\}) as const/);
119
+ if (!match)
120
+ return null;
121
+ try {
122
+ return JSON.parse(match[1]);
123
+ }
124
+ catch {
125
+ return null;
126
+ }
127
+ }
128
+ //# sourceMappingURL=derive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive.js","sourceRoot":"","sources":["../../src/compose/derive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Engine discovery (https://gitlab.com/pasosdeJesus/m/-/work_items/39, D5): a package is a motor **iff** it ships an
3
+ * `m-engine.json` (the file is the marker; no `mEngine` flag nor naming). `m`
4
+ * finds the motors among the dependencies (`packages/*`) and follows the
5
+ * **closure** of what each motor declares in `engines`.
6
+ *
7
+ * "Y todo lo que hagáis, hacedlo de corazón, como para el Señor y no para los hombres" (Colosenses 3:23)
8
+ */
9
+ import type { EngineManifest, Intention } from './manifest.js';
10
+ export interface PackageJson {
11
+ name?: string;
12
+ version?: string;
13
+ dependencies?: Record<string, string>;
14
+ peerDependencies?: Record<string, string>;
15
+ optionalDependencies?: Record<string, string>;
16
+ devDependencies?: Record<string, string>;
17
+ }
18
+ /** Read `m-engine.json` (the intention), or `null` when the package is not a motor. */
19
+ export declare function readIntention(dir: string): Intention | null;
20
+ /** Read `package.json` (name/version), or `null` when absent/unreadable. */
21
+ export declare function readPackageJson(dir: string): PackageJson | null;
22
+ /** Resolve a single motor directory into a manifest (intention + derived facts). */
23
+ export declare function readEngineManifest(dir: string, fallbackName?: string): EngineManifest | null;
24
+ /** Discover the motors of a monorepo by reading the marker under `packages/`. */
25
+ export declare function discoverEngines(rootDir: string): Promise<EngineManifest[]>;
26
+ /**
27
+ * Closure of a set of motors: the requested motors **plus** everything they
28
+ * declare in `engines`, transitively. Deterministic order (roots first, then
29
+ * declared dependencies, depth-first).
30
+ */
31
+ export declare function engineClosure(roots: readonly string[], byName: ReadonlyMap<string, EngineManifest>): EngineManifest[];
32
+ //# sourceMappingURL=discover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/compose/discover.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9D,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACzC;AAED,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAQ3D;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAQ/D;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAQ5F;AAED,iFAAiF;AACjF,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAoBhF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,GAC1C,cAAc,EAAE,CAalB"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Engine discovery (https://gitlab.com/pasosdeJesus/m/-/work_items/39, D5): a package is a motor **iff** it ships an
3
+ * `m-engine.json` (the file is the marker; no `mEngine` flag nor naming). `m`
4
+ * finds the motors among the dependencies (`packages/*`) and follows the
5
+ * **closure** of what each motor declares in `engines`.
6
+ *
7
+ * "Y todo lo que hagáis, hacedlo de corazón, como para el Señor y no para los hombres" (Colosenses 3:23)
8
+ */
9
+ import { existsSync, readFileSync } from 'node:fs';
10
+ import { readdir } from 'node:fs/promises';
11
+ import { basename, join } from 'node:path';
12
+ import { deriveFrom, readGenerated } from './derive.js';
13
+ /** Read `m-engine.json` (the intention), or `null` when the package is not a motor. */
14
+ export function readIntention(dir) {
15
+ const file = join(dir, 'm-engine.json');
16
+ if (!existsSync(file))
17
+ return null;
18
+ try {
19
+ return JSON.parse(readFileSync(file, 'utf-8'));
20
+ }
21
+ catch {
22
+ return null;
23
+ }
24
+ }
25
+ /** Read `package.json` (name/version), or `null` when absent/unreadable. */
26
+ export function readPackageJson(dir) {
27
+ const file = join(dir, 'package.json');
28
+ if (!existsSync(file))
29
+ return null;
30
+ try {
31
+ return JSON.parse(readFileSync(file, 'utf-8'));
32
+ }
33
+ catch {
34
+ return null;
35
+ }
36
+ }
37
+ /** Resolve a single motor directory into a manifest (intention + derived facts). */
38
+ export function readEngineManifest(dir, fallbackName) {
39
+ const intention = readIntention(dir);
40
+ if (!intention)
41
+ return null;
42
+ const pkg = readPackageJson(dir);
43
+ const name = pkg?.name ?? fallbackName ?? basename(dir);
44
+ const version = pkg?.version ?? '0.0.0';
45
+ const derived = readGenerated(dir) ?? deriveFrom(dir, name, version, pkg);
46
+ return { ...derived, ...intention, name, version, dir };
47
+ }
48
+ /** Discover the motors of a monorepo by reading the marker under `packages/`. */
49
+ export async function discoverEngines(rootDir) {
50
+ const packagesDir = join(rootDir, 'packages');
51
+ const manifests = [];
52
+ const scan = async (dir) => {
53
+ let entries;
54
+ try {
55
+ entries = await readdir(dir, { withFileTypes: true });
56
+ }
57
+ catch {
58
+ return;
59
+ }
60
+ for (const entry of entries) {
61
+ if (!entry.isDirectory())
62
+ continue;
63
+ const manifest = readEngineManifest(join(dir, entry.name), entry.name);
64
+ if (manifest)
65
+ manifests.push(manifest);
66
+ }
67
+ };
68
+ await scan(packagesDir);
69
+ // Copias vendorizadas (https://gitlab.com/pasosdeJesus/m/-/work_items/39 D17): `packages/generated/<motor>`.
70
+ await scan(join(packagesDir, 'generated'));
71
+ return manifests;
72
+ }
73
+ /**
74
+ * Closure of a set of motors: the requested motors **plus** everything they
75
+ * declare in `engines`, transitively. Deterministic order (roots first, then
76
+ * declared dependencies, depth-first).
77
+ */
78
+ export function engineClosure(roots, byName) {
79
+ const seen = new Set();
80
+ const out = [];
81
+ const visit = (name) => {
82
+ if (seen.has(name))
83
+ return;
84
+ seen.add(name);
85
+ const manifest = byName.get(name);
86
+ if (!manifest)
87
+ return;
88
+ out.push(manifest);
89
+ for (const dep of Object.keys(manifest.engines ?? {}))
90
+ visit(dep);
91
+ };
92
+ for (const name of roots)
93
+ visit(name);
94
+ return out;
95
+ }
96
+ //# sourceMappingURL=discover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/compose/discover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Composición de motores (https://gitlab.com/pasosdeJesus/m/-/work_items/39) — módulo puro.
3
+ *
4
+ * `m` es un orquestador de motores: los **descubre** (por `m-engine.json`),
5
+ * compone, verifica y aplica. Este módulo reúne las funciones puras; el CLI
6
+ * (`src/tasks/engine.ts`) es sólo *glue*.
7
+ *
8
+ * "Y todo lo que hagáis, hacedlo de corazón, como para el Señor y no para los hombres" (Colosenses 3:23)
9
+ */
10
+ export type { Intention, Derived, DerivedModel, DerivedViews, EngineManifest, EngineMount, EngineRef, Finding, FindingCode, SyncResult, VerifyResult, } from './manifest.js';
11
+ export { deriveFrom, deriveTables, deriveMigrations, deriveContracts, deriveViews, deriveCommands, structureTables, renderGenerated, readGenerated, GENERATED_FILENAME, GENERATED_RELATIVE, GENERATED_HEADER, } from './derive.js';
12
+ export { discoverEngines, readEngineManifest, readIntention, readPackageJson, engineClosure, } from './discover.js';
13
+ export { sync } from './sync.js';
14
+ export { verify } from './verify.js';
15
+ export { vendor, unvendor, drift, readProvenance, structureSha, type Provenance, type DriftFinding, type DriftCode, } from './vendor.js';
16
+ export { tablesUsed, declaredUsage, usageReport, projectSources, type DeclaredUsage, type UsageReport, } from './usage.js';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/compose/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,YAAY,EACV,SAAS,EACT,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,WAAW,EACX,SAAS,EACT,OAAO,EACP,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,cAAc,EACd,eAAe,EACf,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,aAAa,GACd,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EACL,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EACrD,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,GACnD,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EACtD,KAAK,aAAa,EAAE,KAAK,WAAW,GACrC,MAAM,YAAY,CAAA"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Composición de motores (https://gitlab.com/pasosdeJesus/m/-/work_items/39) — módulo puro.
3
+ *
4
+ * `m` es un orquestador de motores: los **descubre** (por `m-engine.json`),
5
+ * compone, verifica y aplica. Este módulo reúne las funciones puras; el CLI
6
+ * (`src/tasks/engine.ts`) es sólo *glue*.
7
+ *
8
+ * "Y todo lo que hagáis, hacedlo de corazón, como para el Señor y no para los hombres" (Colosenses 3:23)
9
+ */
10
+ export { deriveFrom, deriveTables, deriveMigrations, deriveContracts, deriveViews, deriveCommands, structureTables, renderGenerated, readGenerated, GENERATED_FILENAME, GENERATED_RELATIVE, GENERATED_HEADER, } from './derive.js';
11
+ export { discoverEngines, readEngineManifest, readIntention, readPackageJson, engineClosure, } from './discover.js';
12
+ export { sync } from './sync.js';
13
+ export { verify } from './verify.js';
14
+ export { vendor, unvendor, drift, readProvenance, structureSha, } from './vendor.js';
15
+ export { tablesUsed, declaredUsage, usageReport, projectSources, } from './usage.js';
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/compose/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAgBH,OAAO,EACL,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,cAAc,EACd,eAAe,EACf,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,aAAa,GACd,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EACL,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,GAEtD,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,GAEvD,MAAM,YAAY,CAAA"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Composición de motores (https://gitlab.com/pasosdeJesus/m/-/work_items/39) — tipos puros.
3
+ *
4
+ * Un motor se describe con **dos archivos**:
5
+ * - `m-engine.json` → **intención** (a mano): montaje, motores/tablas
6
+ * que usa, capacidades, futuros renombres.
7
+ * - `m-engine.generated.ts` → **hechos derivados** (generado por `eng:sync`):
8
+ * nombre/versión, modelo, contratos, vistas, comandos.
9
+ *
10
+ * Regla de oro: lo que se **deriva** no se escribe a mano; lo que es **intención**
11
+ * (y no se puede derivar) va en `m-engine.json`.
12
+ *
13
+ * "Y todo lo que hagáis, hacedlo de corazón, como para el Señor y no para los hombres" (Colosenses 3:23)
14
+ */
15
+ /** Puntos de montaje del motor: prefijos de API y de rutas. Intención pura. */
16
+ export interface EngineMount {
17
+ api?: string;
18
+ route?: string;
19
+ }
20
+ /** Referencia de un motor a otro: qué tablas (y columnas) usa de él. Intención pura. */
21
+ export interface EngineRef {
22
+ /** Paquete que provee el motor (si difiere del alias). */
23
+ package?: string;
24
+ /** Subpath del modelo dentro del paquete (por defecto `model`). */
25
+ subpath?: string;
26
+ /** Subconjunto de tablas propias del motor que se usan (si se omite, todas). */
27
+ tables?: string[];
28
+ /** Subconjunto de columnas por tabla (si falta, todas). */
29
+ columns?: Record<string, string[]>;
30
+ }
31
+ /**
32
+ * `m-engine.json` — intención del motor (a mano, mínima). No repite lo derivable
33
+ * (`name`/`version` salen del `package.json`).
34
+ */
35
+ export interface Intention {
36
+ mount?: EngineMount;
37
+ /** Capacidades que ofrece el motor (reemplazabilidad, D12 de https://gitlab.com/pasosdeJesus/m/-/work_items/39). */
38
+ provides?: string[];
39
+ /** Capacidades que necesita de otros motores. */
40
+ requires?: string[];
41
+ /** Motores de los que depende y qué tablas/columnas usa de cada uno. */
42
+ engines?: Record<string, EngineRef>;
43
+ }
44
+ /** Modelo del motor: sus tablas propias, migraciones y (a futuro) prefijo. */
45
+ export interface DerivedModel {
46
+ tablePrefix?: string;
47
+ tables: string[];
48
+ migrations?: string;
49
+ }
50
+ /** Vistas del motor: componentes y directorio de assets. */
51
+ export interface DerivedViews {
52
+ components?: string[];
53
+ assets?: string;
54
+ }
55
+ /**
56
+ * `m-engine.generated.ts` — hechos **derivados** de las fuentes del paquete
57
+ * (generado por `eng:sync`; verificado por `eng:verify`). Nunca se edita a mano.
58
+ */
59
+ export interface Derived {
60
+ name: string;
61
+ version: string;
62
+ model: DerivedModel;
63
+ contracts?: string[];
64
+ commands?: string[];
65
+ views?: DerivedViews;
66
+ }
67
+ /** Manifiesto resuelto de un motor: intención + hechos + su directorio. */
68
+ export interface EngineManifest extends Intention, Derived {
69
+ dir: string;
70
+ }
71
+ /** Grado de un hallazgo de verificación (análogo a los grados D6 de conformidad). */
72
+ export type FindingCode = 'GENERATED_MISSING' | 'GENERATED_STALE' | 'MISSING_ENGINE' | 'UNKNOWN_TABLE' | 'BROKEN_REFERENCE';
73
+ export interface Finding {
74
+ code: FindingCode;
75
+ message: string;
76
+ motor?: string;
77
+ table?: string;
78
+ }
79
+ /** Resultado de `eng:sync`. */
80
+ export interface SyncResult {
81
+ path: string;
82
+ changed: boolean;
83
+ }
84
+ /** Resultado de `eng:verify`. */
85
+ export interface VerifyResult {
86
+ ok: boolean;
87
+ findings: Finding[];
88
+ }
89
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/compose/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,+EAA+E;AAC/E,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,wFAAwF;AACxF,MAAM,WAAW,SAAS;IACxB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,oHAAoH;IACpH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;CACpC;AAED,8EAA8E;AAC9E,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,4DAA4D;AAC5D,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,YAAY,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,KAAK,CAAC,EAAE,YAAY,CAAA;CACrB;AAED,2EAA2E;AAC3E,MAAM,WAAW,cAAe,SAAQ,SAAS,EAAE,OAAO;IACxD,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,qFAAqF;AACrF,MAAM,MAAM,WAAW,GACnB,mBAAmB,GACnB,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,kBAAkB,CAAA;AAEtB,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,WAAW,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,+BAA+B;AAC/B,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,iCAAiC;AACjC,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAA;IACX,QAAQ,EAAE,OAAO,EAAE,CAAA;CACpB"}