@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
@@ -0,0 +1,17 @@
1
+ /** Símbolos que `m` necesita del motor; un candidato sin todos ellos se descarta. */
2
+ export declare const MSIP_SYMBOLS: readonly ["BASE_MODEL_VERSION", "parseStructureSql", "buildBaseline", "buildInventory", "renderGeneratedModule", "BASE_MODEL_MIGRATIONS", "migrationMarker", "planSetup", "renderMigrationFile", "checkMigrationPolicy", "BASELINE_INVENTORY", "BASELINE_SQL", "seedTables", "seedIsLoaded", "countStatement", "truncateStatement"];
3
+ export interface ResolvedMsip {
4
+ /** Módulo del motor ya importado (los tipos exactos se aplican en quien lo usa). */
5
+ module: Record<string, unknown>;
6
+ /** Directorio del motor (de ahí salen `db/seed.sql.gz` y el esquema). */
7
+ dir: string;
8
+ /** De dónde se tomó: `installed` o `vendored`. */
9
+ kind: 'installed' | 'vendored';
10
+ }
11
+ /** Resuelve y cachea el motor `msip` (vendorizado o instalado). */
12
+ export declare function resolveMsip(cwd?: string): Promise<ResolvedMsip>;
13
+ /** Sólo el módulo del motor (para quien no necesita su directorio). */
14
+ export declare function loadMsipModule(cwd?: string): Promise<Record<string, unknown>>;
15
+ /** ¿Hay motor (vendorizado o instalado) y es compatible? (sin lanzar). */
16
+ export declare function msipAvailable(cwd?: string): boolean;
17
+ //# sourceMappingURL=msip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"msip.d.ts","sourceRoot":"","sources":["../../src/util/msip.ts"],"names":[],"mappings":"AAuBA,qFAAqF;AACrF,eAAO,MAAM,YAAY,qUAKf,CAAA;AAEV,MAAM,WAAW,YAAY;IAC3B,oFAAoF;IACpF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,yEAAyE;IACzE,GAAG,EAAE,MAAM,CAAA;IACX,kDAAkD;IAClD,IAAI,EAAE,WAAW,GAAG,UAAU,CAAA;CAC/B;AASD,mEAAmE;AACnE,wBAAsB,WAAW,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CAqCpF;AAED,uEAAuE;AACvE,wBAAsB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAElG;AAED,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAOlE"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Resolución del motor `msip` sin depender de él: `m` no lo declara en
3
+ * `dependencies` (sólo en `devDependencies`, para el monorepo), así que en tiempo de
4
+ * ejecución busca el motor **donde el consumidor lo tenga** y falla con
5
+ * instrucciones si no está. Así `m` se publica sin obligar a publicar el motor
6
+ * ([REQ/40](https://gitlab.com/pasosdeJesus/m/-/work_items/40) D1) y los consumidores pueden
7
+ * vendorizarlo (`eng:sync --vendor`).
8
+ *
9
+ * Orden: (1) la copia vendorizada del consumidor
10
+ * (`<cwd>/packages/generated/msip/dist`, compilada con `tsc -b`), (2) el paquete
11
+ * instalado. Un candidato sólo se acepta si expone **todos** los símbolos que `m`
12
+ * usa (`MSIP_SYMBOLS`), de modo que una versión incompatible se detecta al ejecutar.
13
+ *
14
+ * Los tipos **no** referencian el paquete del motor: eso dejaría un
15
+ * `typeof import('@pasosdejesus/msip')` en los `.d.ts` publicados, que un consumidor
16
+ * sin el motor (p. ej. con `skipLibCheck: false`) no podría resolver. Quien necesita
17
+ * los tipos exactos los aplica en su módulo (`src/tasks/msip.ts`).
18
+ */
19
+ import { existsSync } from 'node:fs';
20
+ import { createRequire } from 'node:module';
21
+ import { dirname, join } from 'node:path';
22
+ import { pathToFileURL } from 'node:url';
23
+ /** Símbolos que `m` necesita del motor; un candidato sin todos ellos se descarta. */
24
+ export const MSIP_SYMBOLS = [
25
+ 'BASE_MODEL_VERSION', 'parseStructureSql', 'buildBaseline', 'buildInventory',
26
+ 'renderGeneratedModule', 'BASE_MODEL_MIGRATIONS', 'migrationMarker', 'planSetup', 'renderMigrationFile',
27
+ 'checkMigrationPolicy', 'BASELINE_INVENTORY', 'BASELINE_SQL',
28
+ 'seedTables', 'seedIsLoaded', 'countStatement', 'truncateStatement',
29
+ ];
30
+ const cache = new Map();
31
+ /** `true` cuando el módulo expone todos los símbolos que `m` usa. */
32
+ function isCompatible(module) {
33
+ return MSIP_SYMBOLS.every((symbol) => symbol in module);
34
+ }
35
+ /** Resuelve y cachea el motor `msip` (vendorizado o instalado). */
36
+ export async function resolveMsip(cwd = process.cwd()) {
37
+ const cached = cache.get(cwd);
38
+ if (cached)
39
+ return cached;
40
+ const vendored = join(cwd, 'packages', 'generated', 'msip');
41
+ const candidates = [
42
+ // 1º la copia del consumidor (elección explícita, versión fijada y medida por `eng:check`),
43
+ // 2º el paquete instalado (resolución normal de Node desde `m`).
44
+ { module: pathToFileURL(join(vendored, 'dist', 'index.js')).href, dir: vendored, kind: 'vendored' },
45
+ { module: '@pasosdejesus/msip', dir: null, kind: 'installed' },
46
+ ];
47
+ let incompatible = null;
48
+ for (const candidate of candidates) {
49
+ try {
50
+ const module = (await import(candidate.module));
51
+ if (!isCompatible(module)) {
52
+ incompatible = candidate.module;
53
+ continue;
54
+ }
55
+ const dir = candidate.dir ?? dirname(createRequire(import.meta.url).resolve('@pasosdejesus/msip/package.json'));
56
+ const resolved = { module, dir, kind: candidate.kind };
57
+ cache.set(cwd, resolved);
58
+ return resolved;
59
+ }
60
+ catch {
61
+ // el candidato no existe (o no se puede importar): siguiente
62
+ }
63
+ }
64
+ if (incompatible) {
65
+ throw new Error(`motor \`msip\` incompatible (${incompatible}): falta alguno de ${MSIP_SYMBOLS.join(', ')}; ` +
66
+ 'actualiza el motor o vuelve a vendorizarlo (`eng:sync --vendor` + `tsc -b`)');
67
+ }
68
+ throw new Error('motor `msip` no encontrado: vendorízalo con ' +
69
+ '`bin/m eng:sync <ruta-al-checkout>/packages/msip --vendor` (y compílalo: `tsc -b` en ' +
70
+ '`packages/generated/msip`) o instala `@pasosdejesus/msip`');
71
+ }
72
+ /** Sólo el módulo del motor (para quien no necesita su directorio). */
73
+ export async function loadMsipModule(cwd = process.cwd()) {
74
+ return (await resolveMsip(cwd)).module;
75
+ }
76
+ /** ¿Hay motor (vendorizado o instalado) y es compatible? (sin lanzar). */
77
+ export function msipAvailable(cwd = process.cwd()) {
78
+ try {
79
+ createRequire(import.meta.url).resolve('@pasosdejesus/msip/package.json');
80
+ return true;
81
+ }
82
+ catch {
83
+ return existsSync(join(cwd, 'packages', 'generated', 'msip', 'dist', 'index.js'));
84
+ }
85
+ }
86
+ //# sourceMappingURL=msip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"msip.js","sourceRoot":"","sources":["../../src/util/msip.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- // @pasosdejesus/m/wallet — núcleo compartido de billetera (`m/REQ/14`).
1
+ // @pasosdejesus/m/wallet — núcleo compartido de billetera (https://gitlab.com/pasosdeJesus/m/-/work_items/14).
2
2
  //
3
3
  // Sin React y sin Kysely: mnemónica (BIP39), derivación, firma, cifrado en reposo
4
4
  // (PBKDF2 + AES-GCM), almacenamiento intercambiable, estado de la billetera in-app,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wallet/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,EAAE;AACF,kFAAkF;AAClF,oFAAoF;AACpF,8EAA8E;AAC9E,4EAA4E;AAC5E,8CAA8C;AAC9C,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,aAAa,EACb,eAAe,GAChB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,sBAAsB,EACtB,MAAM,GAEP,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,aAAa,EACb,aAAa,EACb,MAAM,EACN,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACb,mBAAmB,EACnB,iBAAiB,GAElB,MAAM,aAAa,CAAA;AAEpB,yDAAyD;AACzD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,0BAA0B,EAC1B,gBAAgB,EAChB,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACvB,oBAAoB,GAGrB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAEL,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,gBAAgB,CAAA;AAEvB,iEAAiE;AACjE,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,GAEpB,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,mBAAmB,CAAA;AAE1B,uEAAuE;AACvE,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,2BAA2B,EAC3B,6BAA6B,GAI9B,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAE5E,OAAO,EACL,SAAS,EACT,aAAa,GASd,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wallet/index.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAC/G,EAAE;AACF,kFAAkF;AAClF,oFAAoF;AACpF,8EAA8E;AAC9E,4EAA4E;AAC5E,8CAA8C;AAC9C,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,aAAa,EACb,eAAe,GAChB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,sBAAsB,EACtB,MAAM,GAEP,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,aAAa,EACb,aAAa,EACb,MAAM,EACN,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACb,mBAAmB,EACnB,iBAAiB,GAElB,MAAM,aAAa,CAAA;AAEpB,yDAAyD;AACzD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,0BAA0B,EAC1B,gBAAgB,EAChB,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACvB,oBAAoB,GAGrB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAEL,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,gBAAgB,CAAA;AAEvB,iEAAiE;AACjE,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,GAEpB,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,mBAAmB,CAAA;AAE1B,uEAAuE;AACvE,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,2BAA2B,EAC3B,6BAA6B,GAI9B,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAE5E,OAAO,EACL,SAAS,EACT,aAAa,GASd,MAAM,YAAY,CAAA"}
@@ -56,7 +56,7 @@ export declare function defaultMessages(lang: Lang): WalletReactMessages;
56
56
  /**
57
57
  * Texts for a language with the host's overrides on top. The components accept this
58
58
  * as a `messages` prop so a consumer can inject its own wording without forking the
59
- * package (`m/REQ/37`).
59
+ * package (https://gitlab.com/pasosdeJesus/m/-/work_items/37).
60
60
  */
61
61
  export declare function resolveMessages(lang: Lang, override?: Partial<WalletReactMessages>): WalletReactMessages;
62
62
  export {};
@@ -56,7 +56,7 @@ export function defaultMessages(lang) {
56
56
  /**
57
57
  * Texts for a language with the host's overrides on top. The components accept this
58
58
  * as a `messages` prop so a consumer can inject its own wording without forking the
59
- * package (`m/REQ/37`).
59
+ * package (https://gitlab.com/pasosdeJesus/m/-/work_items/37).
60
60
  */
61
61
  export function resolveMessages(lang, override) {
62
62
  return { ...defaultMessages(lang), ...override };
@@ -1,4 +1,4 @@
1
- // @pasosdejesus/m/wallet/next — React layer of the in-app wallet (`m/REQ/37`).
1
+ // @pasosdejesus/m/wallet/next — React layer of the in-app wallet (https://gitlab.com/pasosdeJesus/m/-/work_items/37).
2
2
  //
3
3
  // Graduated from `learn.tg/packages/pdj-wallet-next`. Texts and storage namespaces are
4
4
  // injected by the host; React is an optional peer, so importing the core barrel does
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/wallet/next/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,uFAAuF;AACvF,qFAAqF;AACrF,oBAAoB;AACpB,OAAO,EACL,cAAc,EACd,6BAA6B,EAC7B,kBAAkB,GAInB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,gBAAgB,EAA8B,MAAM,kCAAkC,CAAA;AAC/F,OAAO,EAAE,iBAAiB,EAA+B,MAAM,mCAAmC,CAAA;AAClG,OAAO,EACL,CAAC,EACD,eAAe,EACf,eAAe,GAIhB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,oBAAoB,EAA8B,MAAM,iBAAiB,CAAA;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/wallet/next/index.ts"],"names":[],"mappings":"AAAA,sHAAsH;AACtH,EAAE;AACF,uFAAuF;AACvF,qFAAqF;AACrF,oBAAoB;AACpB,OAAO,EACL,cAAc,EACd,6BAA6B,EAC7B,kBAAkB,GAInB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,gBAAgB,EAA8B,MAAM,kCAAkC,CAAA;AAC/F,OAAO,EAAE,iBAAiB,EAA+B,MAAM,mCAAmC,CAAA;AAClG,OAAO,EACL,CAAC,EACD,eAAe,EACf,eAAe,GAIhB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,oBAAoB,EAA8B,MAAM,iBAAiB,CAAA;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA"}
@@ -7,7 +7,7 @@ export interface InAppWalletNamespaces {
7
7
  rpName?: string;
8
8
  }
9
9
  /**
10
- * Applies the host's storage namespaces to the shared wallet core (`m/REQ/37`).
10
+ * Applies the host's storage namespaces to the shared wallet core (https://gitlab.com/pasosdeJesus/m/-/work_items/37).
11
11
  *
12
12
  * A host that already has wallets **must** call this with its own values before the
13
13
  * wallet is used, or existing records become unreadable (IndexedDB name, destination
@@ -1,6 +1,6 @@
1
1
  import { setDestinationsPrefix, setRpName, setWalletDbName } from '../index.js';
2
2
  /**
3
- * Applies the host's storage namespaces to the shared wallet core (`m/REQ/37`).
3
+ * Applies the host's storage namespaces to the shared wallet core (https://gitlab.com/pasosdeJesus/m/-/work_items/37).
4
4
  *
5
5
  * A host that already has wallets **must** call this with its own values before the
6
6
  * wallet is used, or existing records become unreadable (IndexedDB name, destination
@@ -7,7 +7,7 @@
7
7
  * version, so the version lives here and nowhere else.
8
8
  *
9
9
  * The database name is **configurable**: a shared package must not write into one
10
- * consumer's namespace (`m/REQ/14`, "parametrizar las claves de almacenamiento").
10
+ * consumer's namespace (https://gitlab.com/pasosdeJesus/m/-/work_items/14, "parametrizar las claves de almacenamiento").
11
11
  * A consumer that already has data under its own name calls `setWalletDbName()`
12
12
  * once at startup to keep reading it.
13
13
  */
@@ -7,7 +7,7 @@
7
7
  * version, so the version lives here and nowhere else.
8
8
  *
9
9
  * The database name is **configurable**: a shared package must not write into one
10
- * consumer's namespace (`m/REQ/14`, "parametrizar las claves de almacenamiento").
10
+ * consumer's namespace (https://gitlab.com/pasosdeJesus/m/-/work_items/14, "parametrizar las claves de almacenamiento").
11
11
  * A consumer that already has data under its own name calls `setWalletDbName()`
12
12
  * once at startup to keep reading it.
13
13
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pasosdejesus/m",
3
- "version": "0.27.2",
3
+ "version": "0.28.0",
4
4
  "description": "Motor para crear y gestionar proyectos al estilo Pasos de Jesus.",
5
5
  "author": "",
6
6
  "license": "ISC",
@@ -48,10 +48,6 @@
48
48
  "import": "./dist/wba/index.js",
49
49
  "types": "./dist/wba/index.d.ts"
50
50
  },
51
- "./base-model": {
52
- "import": "./dist/base-model/index.js",
53
- "types": "./dist/base-model/index.d.ts"
54
- },
55
51
  "./wba/routes": {
56
52
  "import": "./dist/wba/routes/index.js",
57
53
  "types": "./dist/wba/routes/index.d.ts"
@@ -126,6 +122,7 @@
126
122
  },
127
123
  "files": [
128
124
  "dist",
125
+ "!dist/**/*.test.*",
129
126
  "src/tasks/README.md",
130
127
  "src/util/README.md",
131
128
  "src/wba/README.md",
@@ -197,7 +194,8 @@
197
194
  "typescript": "^5.9.3",
198
195
  "viem": "^2.55.0",
199
196
  "vitest": "3.2.6",
200
- "wagmi": "^2.19.5"
197
+ "wagmi": "^2.19.5",
198
+ "@pasosdejesus/msip": "1.0.0"
201
199
  },
202
200
  "optionalPeerDependencies": {
203
201
  "@radix-ui/react-accordion": "^1.2.12",
package/src/e2e/README.md CHANGED
@@ -100,7 +100,7 @@ const page = await newPage(browser, address, timeout, true)
100
100
  // GoodDollarClaimButton, wallet interactions now work
101
101
  ```
102
102
 
103
- ### Real-signature wallet (`m/REQ/14`)
103
+ ### Real-signature wallet ([REQ/14](https://gitlab.com/pasosdeJesus/m/-/work_items/14))
104
104
 
105
105
  ```ts
106
106
  installRealSigner(page, { privateKey, name?, typedDataName? }): Promise<RealSigner>
@@ -123,7 +123,7 @@ await setupFullWalletMock(page, { privateKey: process.env.PRIVATE_KEY })
123
123
  await setupFullWalletMock(page, { privateKey: process.env.PRIVATE_KEY, rpcUrl: process.env.RPC_URL })
124
124
  ```
125
125
 
126
- **Mock parity (`m/REQ/49` 14).** Without `rpcUrl`, `eth_getTransactionReceipt` used to return
126
+ **Mock parity ([REQ/49](https://gitlab.com/pasosdeJesus/m/-/work_items/49) 14).** Without `rpcUrl`, `eth_getTransactionReceipt` used to return
127
127
  `null`, so a spec that sends and awaits confirmation hung. Now `setupFullWalletMock` (and
128
128
  `fullWalletMockCode`) accept `fakeReceipt` (`{status, blockNumber, transactionHash, logs}`),
129
129
  `fakeCelo`, `fakeCallResult` and `fakeTxHash`:
@@ -135,7 +135,7 @@ await setupFullWalletMock(page, {
135
135
  })
136
136
  ```
137
137
 
138
- ### In-app wallet driver (`m/REQ/49` 15)
138
+ ### In-app wallet driver ([REQ/49](https://gitlab.com/pasosdeJesus/m/-/work_items/49) 15)
139
139
 
140
140
  Drives the `m/wallet/next` components by their testids, so consumers do not rewrite selectors:
141
141
 
@@ -147,7 +147,7 @@ unlockInAppWallet(page, { password, timeoutMs? }): Promise<void>
147
147
  With `mnemonic`/`privateKey` it switches to import mode; otherwise it creates a new wallet. It
148
148
  selects by testid/`type` (not by localized text), so it works with any `lang`.
149
149
 
150
- ### Local EVM node (`m/REQ/14`)
150
+ ### Local EVM node ([REQ/14](https://gitlab.com/pasosdeJesus/m/-/work_items/14))
151
151
 
152
152
  ```ts
153
153
  startLocalRpc({ chainId?, accounts? }): Promise<LocalRpc> // { url, chainId, accounts, close() }
@@ -175,7 +175,7 @@ Lessons that cost time here (see also learn.tg's `doc/e2e-testing.md`):
175
175
  - **Receipt hashes**: the local node re-signs, so `setupFullWalletMock` re-keys the receipt
176
176
  under `keccak256(rawTransaction)` (the hash viem waits for).
177
177
 
178
- ### Runner: retry and summary (`m/REQ/49` P3/P4)
178
+ ### Runner: retry and summary ([REQ/49](https://gitlab.com/pasosdeJesus/m/-/work_items/49) P3/P4)
179
179
 
180
180
  ```sh
181
181
  ./bin/m test:e2e --retry 2 --retry-delay 15000 # re-run failed specs (fresh WALLET_INDEX each)
@@ -191,7 +191,7 @@ Lessons that cost time here (see also learn.tg's `doc/e2e-testing.md`):
191
191
  row per spec, one column per log, marking `<-- difiere` when a spec's state changes between
192
192
  runs (environmental vs product failure).
193
193
 
194
- ### Site warmup (`m/REQ/49` P5)
194
+ ### Site warmup ([REQ/49](https://gitlab.com/pasosdeJesus/m/-/work_items/49) P5)
195
195
 
196
196
  ```ts
197
197
  warmup(baseUrl, { paths, mode?, filter?, sequentialTimeoutMs?, parallelTimeoutMs?,
@@ -13,7 +13,7 @@ Each file in this directory exports a `runXxx()` function registered in `../m.ts
13
13
  | File | Commands | Purpose |
14
14
  |------|----------|---------|
15
15
  | `context.ts` | `ai:context` | Orchestrates the project context document (schema 1): detection, profiles, filters, budget and output |
16
- | `base-model.ts` | `base-model:dump`, `base-model:verify` | Generates the base-model baseline from a reference and guards its derivation |
16
+ | `msip.ts` | `eng:msip:dump`, `eng:msip:baseline`, `eng:msip:setup`, `eng:msip:verify`, `eng:msip:seed` | Regenerates the model baseline from its schema, guards its derivation, and loads the initial data |
17
17
  | `context-workspaces.ts` | *(internal)* | Detects project types and workspace roots (`rails`, `nextjs`, `hardhat`, `monorepo`, `node`) |
18
18
  | `context-profiles.ts` | *(internal)* | Built-in task profiles plus JSON config loading, merging and validation |
19
19
  | `context-ignore.ts` | *(internal)* | Default exclusions, absolute secrets deny list and filter precedence |
@@ -21,10 +21,10 @@ Each file in this directory exports a `runXxx()` function registered in `../m.ts
21
21
  | `context-reqs.ts` | *(internal)* | Parses `REQ/*.md` and keeps only open requirements |
22
22
  | `context-render.ts` | *(internal)* | Structure and document rendering with a hard size budget |
23
23
  | `create.ts` | `m:create` | Scaffolds new projects from `templates/` via direct recursive copy (replaced Plop.js) |
24
- | `db.ts` | `db:create`, `db:drop`, `db:super:createuser`, `db:structure:dump`, `db:structure:load`, `db:migrate`, `db:rollback`, `db:mig:make`, `db:seed`, `db:check`, `db:console`, `db:test`, `db:dump`, `db:restore` | PostgreSQL database lifecycle, migration management, schema verification, and backup/restore |
24
+ | `db.ts` | `db:create`, `db:drop`, `db:super:createuser`, `db:structure:dump`, `db:structure:load`, `db:migrate`, `db:rollback`, `db:mig:make`, `db:seed`, `db:console`, `db:test`, `db:dump`, `db:restore` | PostgreSQL database lifecycle, migration management, schema verification, and backup/restore |
25
25
  | `e2e.ts` | `test:e2e` | E2E tests (Puppeteer specs, axios smoke) |
26
26
  | `edit.ts` | `ai:edit` | Parses and applies DeepSeek diff format from clipboard |
27
- | `engine.ts` | `eng:wba:setup`, `eng:credentials:setup`, `eng:list`, `eng:check` | Engine management: migration generation, schema verification |
27
+ | `engine.ts` | `eng:list`, `eng:sync`, `eng:verify`, `eng:check`, `eng:remove`, `eng:msip:setup`, `eng:wba:setup`, `eng:credentials:setup` | Engine discovery, generated facts, drift, self-containment and migration generation |
28
28
  | `env-diff.ts` | `env:diff` | Compares two `.env` files (default: `../.env.example` vs `../.env`), reports differences |
29
29
  | `fuzzy.ts` | *(internal)* | Fuzzy string matching helpers for `ai:edit` |
30
30
  | `glob.ts` | `ai:glob` | File search by glob pattern |
@@ -284,7 +284,7 @@ beforeEach(() => {
284
284
  - Mock for `pg.Pool` of PostgreSQL
285
285
  - **Lesson learned:** The `sql.val()` method is crucial for queries using template tags
286
286
 
287
- **Builder coverage (`m/REQ/49` U1):** `MockKysely`/`apiDbMocks` ahora cubren lo que usan las
287
+ **Builder coverage ([REQ/49](https://gitlab.com/pasosdeJesus/m/-/work_items/49) U1):** `MockKysely`/`apiDbMocks` ahora cubren lo que usan las
288
288
  rutas reales, así que puedes **borrar tu `GlobalMockKysely` escrito a mano**:
289
289
  - `eb.or`/`eb.and`/`eb.not`/`eb.exists` y el callback `eb('col', 'in', cb => …)`, que recibe un
290
290
  builder con `selectFrom`/`selectNoFrom`/`insertInto`/`updateTable`/`deleteFrom` para armar
@@ -392,7 +392,7 @@ viemMocks.createPublicClient.mockReturnValue({ ... })
392
392
  ### 6. `console.ts` – Silenciar ruido esperado de consola
393
393
 
394
394
  **Purpose:** Ocultar ruido esperado en las pruebas (reintentos, navegaciones canceladas,
395
- warnings de una dependencia simulada). Graduado de `NOISY_PATTERNS` de learn.tg (`m/REQ/49` U2).
395
+ warnings de una dependencia simulada). Graduado de `NOISY_PATTERNS` de learn.tg ([REQ/49](https://gitlab.com/pasosdeJesus/m/-/work_items/49) U2).
396
396
 
397
397
  ```typescript
398
398
  import { silenceConsole } from '@pasosdejesus/m/test-utils/console'
@@ -1,6 +1,6 @@
1
1
  # @pasosdejesus/m/wallet
2
2
 
3
- Núcleo compartido de billetera (`m/REQ/14`): mnemónica BIP39, derivación, firma,
3
+ Núcleo compartido de billetera ([REQ/14](https://gitlab.com/pasosdeJesus/m/-/work_items/14)): mnemónica BIP39, derivación, firma,
4
4
  cifrado en reposo, almacenamiento intercambiable, provider EIP-1193 y verificación
5
5
  del usuario (WebAuthn). Sin React y sin Kysely: lo usan el CLI de `m` y los
6
6
  consumidores (learn.tg, sivel3, stable-sl).
@@ -70,7 +70,7 @@ setRpName('learn.tg') // nombre de la credencial We
70
70
 
71
71
  ## React (`./wallet/next`)
72
72
 
73
- Capa React de la billetera in-app (`m/REQ/37`, graduada de `learn.tg/packages/pdj-wallet-next`):
73
+ Capa React de la billetera in-app ([REQ/37](https://gitlab.com/pasosdeJesus/m/-/work_items/37), graduada de `learn.tg/packages/pdj-wallet-next`):
74
74
 
75
75
  ```tsx
76
76
  import {
@@ -113,7 +113,7 @@ O a mano: `import { setupWalletTests } from '@pasosdejesus/m/test-utils'; setupW
113
113
 
114
114
  ## Notas
115
115
 
116
- - Fase 1/2 de `m/REQ/14`: primitivas, estado, storage, provider, WebAuthn (L1/L2),
116
+ - Fase 1/2 de [REQ/14](https://gitlab.com/pasosdeJesus/m/-/work_items/14): primitivas, estado, storage, provider, WebAuthn (L1/L2),
117
117
  destinos y resolutor EIP-6963. La capa React (hook + `InAppWalletSetup`/`InAppWalletUnlock`)
118
- vive en el subpath `./wallet/next` (`m/REQ/37`).
118
+ vive en el subpath `./wallet/next` ([REQ/37](https://gitlab.com/pasosdeJesus/m/-/work_items/37)).
119
119
  - E2E con firma real: `@pasosdejesus/m/e2e` (`injectEIP6963`, `setupFullWalletMock`).
@@ -1,48 +0,0 @@
1
- import type { BaselineInventory } from './types.js';
2
- export declare const BASELINE_GENERATED_MANIFEST: {
3
- readonly version: "1.0.0";
4
- readonly reference: {
5
- readonly source: "/var/www/adJ-ia/msip-2.2/test/dummy/db/structure.sql";
6
- readonly sha256: "020e05eed2c281787ffd6f75b282b87c0768a976b0ceac447354ad50d56734cf";
7
- };
8
- readonly additions: "built-in msip additions (references/msip.ts)";
9
- readonly tables: {
10
- readonly usuario: {
11
- readonly columns: 25;
12
- readonly constraints: 3;
13
- readonly extensions: 0;
14
- };
15
- readonly msip_pais: {
16
- readonly columns: 27;
17
- readonly constraints: 2;
18
- readonly extensions: 0;
19
- };
20
- readonly msip_departamento: {
21
- readonly columns: 23;
22
- readonly constraints: 7;
23
- readonly extensions: 0;
24
- };
25
- readonly msip_municipio: {
26
- readonly columns: 22;
27
- readonly constraints: 6;
28
- readonly extensions: 0;
29
- };
30
- readonly msip_centropoblado: {
31
- readonly columns: 21;
32
- readonly constraints: 6;
33
- readonly extensions: 0;
34
- };
35
- };
36
- readonly externalConstraints: readonly [{
37
- readonly table: "msip_centropoblado";
38
- readonly name: "msip_centropoblado_id_tcentropoblado_fkey";
39
- readonly references: "msip_tcentropoblado(id)";
40
- }, {
41
- readonly table: "usuario";
42
- readonly name: "fk_rails_cc636858ad";
43
- readonly references: "msip_tema(id)";
44
- }];
45
- };
46
- export declare const BASELINE_INVENTORY: BaselineInventory;
47
- export declare const BASELINE_SQL = "-- Base model baseline (generated, do not edit by hand).\n-- Source of truth: the reference database; regenerate with\n-- bin/m base-model:dump --from-structure <structure.sql> [--additions <file>]\n-- Consumers apply this to a fresh database and then their own migrations.\n-- Base model version: 1.0.0\n-- Reference: /var/www/adJ-ia/msip-2.2/test/dummy/db/structure.sql (sha256 020e05eed2c281787ffd6f75b282b87c0768a976b0ceac447354ad50d56734cf)\n\nCREATE SEQUENCE public.usuario_id_seq\n START WITH 1\n INCREMENT BY 1\n NO MINVALUE\n NO MAXVALUE\n CACHE 1;\n\nCREATE SEQUENCE public.msip_pais_histvigencia_id_seq\n START WITH 1\n INCREMENT BY 1\n NO MINVALUE\n NO MAXVALUE\n CACHE 1;\nCREATE SEQUENCE public.msip_pais_id_seq\n START WITH 1\n INCREMENT BY 1\n NO MINVALUE\n NO MAXVALUE\n CACHE 1;\n\nCREATE SEQUENCE public.msip_departamento_histvigencia_id_seq\n START WITH 1\n INCREMENT BY 1\n NO MINVALUE\n NO MAXVALUE\n CACHE 1;\nCREATE SEQUENCE public.msip_departamento_id_seq\n START WITH 1\n INCREMENT BY 1\n NO MINVALUE\n NO MAXVALUE\n CACHE 1;\n\nCREATE SEQUENCE public.msip_municipio_histvigencia_id_seq\n START WITH 1\n INCREMENT BY 1\n NO MINVALUE\n NO MAXVALUE\n CACHE 1;\nCREATE SEQUENCE public.msip_municipio_id_seq\n START WITH 1\n INCREMENT BY 1\n NO MINVALUE\n NO MAXVALUE\n CACHE 1;\n\nCREATE SEQUENCE public.msip_centropoblado_histvigencia_id_seq\n START WITH 1\n INCREMENT BY 1\n NO MINVALUE\n NO MAXVALUE\n CACHE 1;\nCREATE SEQUENCE public.msip_centropoblado_id_seq\n START WITH 1\n INCREMENT BY 1\n NO MINVALUE\n NO MAXVALUE\n CACHE 1;\n\nCREATE TABLE public.usuario (\n nusuario character varying(15) NOT NULL,\n password character varying(64) DEFAULT ''::character varying NOT NULL,\n descripcion character varying(50),\n rol integer DEFAULT 4,\n idioma character varying(6) DEFAULT 'es_CO'::character varying NOT NULL,\n id integer DEFAULT nextval('public.usuario_id_seq'::regclass) NOT NULL,\n fechacreacion date DEFAULT ('now'::text)::date NOT NULL,\n fechadeshabilitacion date,\n email character varying(255) DEFAULT ''::character varying NOT NULL,\n encrypted_password character varying(255) DEFAULT ''::character varying NOT NULL,\n sign_in_count integer DEFAULT 0 NOT NULL,\n failed_attempts integer,\n unlock_token character varying(64),\n locked_at timestamp without time zone,\n reset_password_token character varying(255),\n reset_password_sent_at timestamp without time zone,\n remember_created_at timestamp without time zone,\n current_sign_in_at timestamp without time zone,\n last_sign_in_at timestamp without time zone,\n current_sign_in_ip character varying(255),\n last_sign_in_ip character varying(255),\n created_at timestamp without time zone,\n updated_at timestamp without time zone,\n nombre character varying(50),\n tema_id integer,\n CONSTRAINT usuario_check CHECK (((fechadeshabilitacion IS NULL) OR (fechadeshabilitacion >= fechacreacion))),\n CONSTRAINT usuario_rol_check CHECK ((rol >= 1))\n);\n\nCREATE TABLE public.msip_pais (\n id integer DEFAULT nextval('public.msip_pais_id_seq'::regclass) NOT NULL,\n nombre character varying(200),\n nombreiso_espanol character varying(200),\n latitud double precision,\n longitud double precision,\n alfa2 character varying(2),\n alfa3 character varying(3),\n codiso integer,\n div1 character varying(100),\n div2 character varying(100),\n div3 character varying(100),\n fechacreacion date,\n fechadeshabilitacion date,\n created_at timestamp without time zone,\n updated_at timestamp without time zone,\n observaciones character varying(5000),\n nombreiso_ingles character varying(512),\n nombreiso_frances character varying(512),\n ultvigenciaini date,\n ultvigenciafin date,\n svgruta character varying,\n svgcdx integer,\n svgcdy integer,\n svgcdancho integer,\n svgcdalto integer,\n svgrotx double precision,\n svgroty double precision\n);\n\nCREATE TABLE public.msip_departamento (\n id integer DEFAULT nextval('public.msip_departamento_id_seq'::regclass) NOT NULL,\n nombre character varying(500) NOT NULL,\n pais_id integer NOT NULL,\n deplocal_cod integer,\n latitud double precision,\n longitud double precision,\n fechacreacion date DEFAULT ('now'::text)::date NOT NULL,\n fechadeshabilitacion date,\n created_at timestamp without time zone,\n updated_at timestamp without time zone,\n observaciones character varying(5000),\n codiso character varying(6),\n catiso character varying(64),\n codreg integer,\n ultvigenciaini date,\n ultvigenciafin date,\n svgruta character varying,\n svgcdx integer,\n svgcdy integer,\n svgcdancho integer,\n svgcdalto integer,\n svgrotx double precision,\n svgroty double precision,\n CONSTRAINT departamento_check CHECK (((fechadeshabilitacion IS NULL) OR (fechadeshabilitacion >= fechacreacion)))\n);\n\nCREATE TABLE public.msip_municipio (\n id integer DEFAULT nextval('public.msip_municipio_id_seq'::regclass) NOT NULL,\n nombre character varying(500) NOT NULL,\n departamento_id integer NOT NULL,\n munlocal_cod integer,\n latitud double precision,\n longitud double precision,\n fechacreacion date DEFAULT ('now'::text)::date NOT NULL,\n fechadeshabilitacion date,\n created_at timestamp without time zone,\n updated_at timestamp without time zone,\n observaciones character varying(5000),\n codreg integer,\n ultvigenciaini date,\n ultvigenciafin date,\n tipomun character varying(32),\n svgruta character varying,\n svgcdx integer,\n svgcdy integer,\n svgcdancho integer,\n svgcdalto integer,\n svgrotx double precision,\n svgroty double precision,\n CONSTRAINT municipio_check CHECK (((fechadeshabilitacion IS NULL) OR (fechadeshabilitacion >= fechacreacion)))\n);\n\nCREATE TABLE public.msip_centropoblado (\n id integer DEFAULT nextval('public.msip_centropoblado_id_seq'::regclass) NOT NULL,\n nombre character varying(500) NOT NULL,\n municipio_id integer NOT NULL,\n cplocal_cod integer,\n tcentropoblado_id character varying(10) DEFAULT 'CP'::character varying NOT NULL,\n latitud double precision,\n longitud double precision,\n fechacreacion date NOT NULL,\n fechadeshabilitacion date,\n created_at timestamp without time zone,\n updated_at timestamp without time zone,\n observaciones character varying(5000),\n ultvigenciaini date,\n ultvigenciafin date,\n svgruta character varying,\n svgcdx integer,\n svgcdy integer,\n svgcdancho integer,\n svgcdalto integer,\n svgrotx double precision,\n svgroty double precision,\n CONSTRAINT msip_centropoblado_check CHECK (((fechadeshabilitacion IS NULL) OR (fechadeshabilitacion >= fechacreacion)))\n);\n\nALTER TABLE ONLY public.usuario\n ADD CONSTRAINT usuario_pkey PRIMARY KEY (id);\n\nALTER TABLE ONLY public.msip_pais\n ADD CONSTRAINT msip_pais_codiso_unico UNIQUE (codiso);\n\nALTER TABLE ONLY public.msip_pais\n ADD CONSTRAINT pais_pkey PRIMARY KEY (id);\n\nALTER TABLE ONLY public.msip_departamento\n ADD CONSTRAINT msip_departamento_id_key UNIQUE (id);\n\nALTER TABLE ONLY public.msip_departamento\n ADD CONSTRAINT msip_departamento_id_pais_id_deplocal_unico UNIQUE (pais_id, deplocal_cod);\n\nALTER TABLE ONLY public.msip_departamento\n ADD CONSTRAINT msip_departamento_pais_id_id_unico UNIQUE (pais_id, id);\n\nALTER TABLE ONLY public.msip_departamento\n ADD CONSTRAINT msip_departamento_pkey PRIMARY KEY (id);\n\nALTER TABLE ONLY public.msip_municipio\n ADD CONSTRAINT msip_municipio_departamento_id_id_unico UNIQUE (departamento_id, id);\n\nALTER TABLE ONLY public.msip_municipio\n ADD CONSTRAINT msip_municipio_id_departamento_id_munlocal_unico UNIQUE (departamento_id, munlocal_cod);\n\nALTER TABLE ONLY public.msip_municipio\n ADD CONSTRAINT municipio_pkey PRIMARY KEY (id);\n\nALTER TABLE ONLY public.msip_centropoblado\n ADD CONSTRAINT msip_centropoblado_id_municipio_id_cplocal_key UNIQUE (municipio_id, cplocal_cod);\n\nALTER TABLE ONLY public.msip_centropoblado\n ADD CONSTRAINT msip_centropoblado_municipio_id_id_unico UNIQUE (municipio_id, id);\n\nALTER TABLE ONLY public.msip_centropoblado\n ADD CONSTRAINT msip_centropoblado_pkey PRIMARY KEY (id);\n\nALTER TABLE ONLY public.msip_departamento\n ADD CONSTRAINT departamento_id_pais_fkey FOREIGN KEY (pais_id) REFERENCES public.msip_pais(id);\n\nALTER TABLE ONLY public.msip_departamento\n ADD CONSTRAINT fk_rails_92093de1a1 FOREIGN KEY (pais_id) REFERENCES public.msip_pais(id);\n\nALTER TABLE ONLY public.msip_municipio\n ADD CONSTRAINT fk_rails_089870a38d FOREIGN KEY (departamento_id) REFERENCES public.msip_departamento(id);\n\nALTER TABLE ONLY public.msip_municipio\n ADD CONSTRAINT msip_municipio_id_departamento_fkey FOREIGN KEY (departamento_id) REFERENCES public.msip_departamento(id);\n\nALTER TABLE ONLY public.msip_centropoblado\n ADD CONSTRAINT fk_rails_fb09f016e4 FOREIGN KEY (municipio_id) REFERENCES public.msip_municipio(id);\n\nALTER TABLE ONLY public.msip_centropoblado\n ADD CONSTRAINT msip_centropoblado_id_municipio_fkey FOREIGN KEY (municipio_id) REFERENCES public.msip_municipio(id);\n";
48
- //# sourceMappingURL=baseline.generated.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"baseline.generated.d.ts","sourceRoot":"","sources":["../../src/base-model/baseline.generated.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8C9B,CAAC;AAEX,eAAO,MAAM,kBAAkB,EAAE,iBAg3BhC,CAAC;AAEF,eAAO,MAAM,YAAY,0uSAA0uS,CAAC"}