@open-mercato/cli 0.6.4-develop.4382.1.6b4f656b77 → 0.6.4

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 (109) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/agentic/guides/core.customers.md +1 -1
  3. package/dist/agentic/shared/AGENTS.md.template +56 -33
  4. package/dist/agentic/shared/ai/skills/{auto-continue-pr → om-auto-continue-pr}/SKILL.md +19 -19
  5. package/dist/agentic/shared/ai/skills/{auto-create-pr → om-auto-continue-pr}/STANDALONE.md +1 -1
  6. package/dist/agentic/shared/ai/skills/{auto-continue-pr-loop → om-auto-continue-pr-loop}/SKILL.md +32 -32
  7. package/dist/agentic/shared/ai/skills/{auto-create-pr → om-auto-create-pr}/SKILL.md +24 -24
  8. package/dist/agentic/shared/ai/skills/{auto-fix-github → om-auto-create-pr}/STANDALONE.md +1 -1
  9. package/dist/agentic/shared/ai/skills/{auto-create-pr-loop → om-auto-create-pr-loop}/SKILL.md +40 -40
  10. package/dist/agentic/shared/ai/skills/{auto-fix-github → om-auto-fix-github}/SKILL.md +3 -3
  11. package/dist/agentic/shared/ai/skills/{auto-continue-pr → om-auto-fix-github}/STANDALONE.md +1 -1
  12. package/dist/agentic/shared/ai/skills/{auto-review-pr → om-auto-review-pr}/SKILL.md +5 -5
  13. package/dist/agentic/shared/ai/skills/{auto-review-pr → om-auto-review-pr}/STANDALONE.md +1 -1
  14. package/dist/agentic/shared/ai/skills/{auto-upgrade-0.4.10-to-0.5.0 → om-auto-upgrade-0.4.10-to-0.5.0}/SKILL.md +1 -1
  15. package/dist/agentic/shared/ai/skills/{backend-ui-design → om-backend-ui-design}/SKILL.md +2 -2
  16. package/dist/agentic/shared/ai/skills/{code-review → om-code-review}/SKILL.md +1 -1
  17. package/dist/agentic/shared/ai/skills/{code-review → om-code-review}/references/review-checklist.md +3 -0
  18. package/dist/agentic/shared/ai/skills/{data-model-design → om-data-model-design}/SKILL.md +4 -2
  19. package/dist/agentic/shared/ai/skills/{eject-and-customize → om-eject-and-customize}/SKILL.md +2 -2
  20. package/dist/agentic/shared/ai/skills/{implement-spec → om-implement-spec}/SKILL.md +6 -6
  21. package/dist/agentic/shared/ai/skills/{integration-builder → om-integration-builder}/SKILL.md +1 -1
  22. package/dist/agentic/shared/ai/skills/{integration-tests → om-integration-tests}/SKILL.md +1 -1
  23. package/dist/agentic/shared/ai/skills/{module-scaffold → om-module-scaffold}/SKILL.md +5 -3
  24. package/dist/agentic/shared/ai/skills/{module-scaffold → om-module-scaffold}/references/naming-conventions.md +7 -8
  25. package/dist/agentic/shared/ai/skills/om-prepare-issue/SKILL.md +202 -0
  26. package/dist/agentic/shared/ai/skills/{spec-writing → om-spec-writing}/SKILL.md +6 -6
  27. package/dist/agentic/shared/ai/skills/{spec-writing → om-spec-writing}/references/spec-checklist.md +3 -3
  28. package/dist/agentic/shared/ai/skills/{system-extension → om-system-extension}/SKILL.md +1 -1
  29. package/dist/agentic/shared/ai/skills/{trim-unused-modules → om-trim-unused-modules}/SKILL.md +1 -1
  30. package/dist/agentic/shared/ai/skills/{troubleshooter → om-troubleshooter}/SKILL.md +1 -1
  31. package/dist/bin.js +1 -0
  32. package/dist/bin.js.map +2 -2
  33. package/dist/lib/__integration__/TC-INT-008.spec.js +1 -1
  34. package/dist/lib/__integration__/TC-INT-008.spec.js.map +2 -2
  35. package/dist/lib/agentic-setup.js +52 -51
  36. package/dist/lib/agentic-setup.js.map +2 -2
  37. package/dist/lib/deploy/railway/__integration__/TC-CLI-RAILWAY-001.meta.js +7 -0
  38. package/dist/lib/deploy/railway/__integration__/TC-CLI-RAILWAY-001.meta.js.map +7 -0
  39. package/dist/lib/deploy/railway/__integration__/TC-CLI-RAILWAY-001.spec.js +63 -0
  40. package/dist/lib/deploy/railway/__integration__/TC-CLI-RAILWAY-001.spec.js.map +7 -0
  41. package/dist/lib/deploy/railway/env.js +98 -0
  42. package/dist/lib/deploy/railway/env.js.map +7 -0
  43. package/dist/lib/deploy/railway/graphql-client.js +99 -0
  44. package/dist/lib/deploy/railway/graphql-client.js.map +7 -0
  45. package/dist/lib/deploy/railway/index.js +1115 -0
  46. package/dist/lib/deploy/railway/index.js.map +7 -0
  47. package/dist/lib/deploy/railway/operations.js +249 -0
  48. package/dist/lib/deploy/railway/operations.js.map +7 -0
  49. package/dist/lib/deploy/railway/options.js +155 -0
  50. package/dist/lib/deploy/railway/options.js.map +7 -0
  51. package/dist/lib/deploy/railway/railway-cli.js +61 -0
  52. package/dist/lib/deploy/railway/railway-cli.js.map +7 -0
  53. package/dist/lib/deploy/railway/redaction.js +88 -0
  54. package/dist/lib/deploy/railway/redaction.js.map +7 -0
  55. package/dist/lib/deploy/railway/source.js +128 -0
  56. package/dist/lib/deploy/railway/source.js.map +7 -0
  57. package/dist/lib/deploy/railway/state.js +41 -0
  58. package/dist/lib/deploy/railway/state.js.map +7 -0
  59. package/dist/lib/deploy/railway/token.js +46 -0
  60. package/dist/lib/deploy/railway/token.js.map +7 -0
  61. package/dist/lib/deploy/railway/types.js +1 -0
  62. package/dist/lib/deploy/railway/types.js.map +7 -0
  63. package/dist/lib/generators/openapi.js +4 -0
  64. package/dist/lib/generators/openapi.js.map +2 -2
  65. package/dist/lib/testing/integration.js +57 -26
  66. package/dist/lib/testing/integration.js.map +2 -2
  67. package/dist/lib/testing/runtime-utils.js +16 -8
  68. package/dist/lib/testing/runtime-utils.js.map +2 -2
  69. package/dist/mercato.js +23 -8
  70. package/dist/mercato.js.map +2 -2
  71. package/package.json +11 -12
  72. package/src/bin.ts +1 -0
  73. package/src/lib/__integration__/TC-INT-008.spec.ts +1 -1
  74. package/src/lib/agentic-setup.ts +52 -51
  75. package/src/lib/deploy/railway/__integration__/TC-CLI-RAILWAY-001.meta.ts +3 -0
  76. package/src/lib/deploy/railway/__integration__/TC-CLI-RAILWAY-001.spec.ts +71 -0
  77. package/src/lib/deploy/railway/__tests__/dry-run.test.ts +61 -0
  78. package/src/lib/deploy/railway/__tests__/env.test.ts +55 -0
  79. package/src/lib/deploy/railway/__tests__/graphql-client.test.ts +80 -0
  80. package/src/lib/deploy/railway/__tests__/operations.test.ts +21 -0
  81. package/src/lib/deploy/railway/__tests__/options.test.ts +78 -0
  82. package/src/lib/deploy/railway/__tests__/redaction.test.ts +62 -0
  83. package/src/lib/deploy/railway/__tests__/source.test.ts +130 -0
  84. package/src/lib/deploy/railway/__tests__/state.test.ts +24 -0
  85. package/src/lib/deploy/railway/__tests__/token.test.ts +39 -0
  86. package/src/lib/deploy/railway/env.ts +112 -0
  87. package/src/lib/deploy/railway/graphql-client.ts +128 -0
  88. package/src/lib/deploy/railway/index.ts +1454 -0
  89. package/src/lib/deploy/railway/operations.ts +248 -0
  90. package/src/lib/deploy/railway/options.ts +167 -0
  91. package/src/lib/deploy/railway/railway-cli.ts +65 -0
  92. package/src/lib/deploy/railway/redaction.ts +91 -0
  93. package/src/lib/deploy/railway/source.ts +143 -0
  94. package/src/lib/deploy/railway/state.ts +45 -0
  95. package/src/lib/deploy/railway/token.ts +49 -0
  96. package/src/lib/deploy/railway/types.ts +87 -0
  97. package/src/lib/generators/openapi.ts +3 -0
  98. package/src/lib/testing/__tests__/integration.test.ts +79 -0
  99. package/src/lib/testing/__tests__/runtime-utils.test.ts +45 -1
  100. package/src/lib/testing/integration.ts +74 -28
  101. package/src/lib/testing/runtime-utils.ts +17 -8
  102. package/src/mercato.ts +33 -8
  103. /package/dist/agentic/shared/ai/skills/{backend-ui-design → om-backend-ui-design}/references/ui-components.md +0 -0
  104. /package/dist/agentic/shared/ai/skills/{data-model-design → om-data-model-design}/references/mikro-orm-cheatsheet.md +0 -0
  105. /package/dist/agentic/shared/ai/skills/{integration-builder → om-integration-builder}/references/adapter-contracts.md +0 -0
  106. /package/dist/agentic/shared/ai/skills/{module-scaffold → om-module-scaffold}/references/navigation-patterns.md +0 -0
  107. /package/dist/agentic/shared/ai/skills/{spec-writing → om-spec-writing}/references/spec-template.md +0 -0
  108. /package/dist/agentic/shared/ai/skills/{system-extension → om-system-extension}/references/extension-contracts.md +0 -0
  109. /package/dist/agentic/shared/ai/skills/{troubleshooter → om-troubleshooter}/references/diagnostic-commands.md +0 -0
@@ -22,10 +22,17 @@ export function assertNode24Runtime(options: Node24RuntimeGuardOptions): void {
22
22
  }
23
23
 
24
24
  export async function getFreePort(): Promise<number> {
25
- return new Promise((resolve, reject) => {
25
+ const tryListen = (host: string): Promise<number | null> => new Promise((resolve, reject) => {
26
26
  const server = createServer()
27
- server.on('error', reject)
28
- server.listen(0, '127.0.0.1', () => {
27
+ server.on('error', (error) => {
28
+ const errorCode = (error as NodeJS.ErrnoException).code
29
+ if (errorCode === 'EAFNOSUPPORT') {
30
+ resolve(null)
31
+ return
32
+ }
33
+ reject(error)
34
+ })
35
+ server.listen(0, host, () => {
29
36
  const address = server.address()
30
37
  if (!address || typeof address === 'string') {
31
38
  server.close()
@@ -42,6 +49,8 @@ export async function getFreePort(): Promise<number> {
42
49
  })
43
50
  })
44
51
  })
52
+
53
+ return (await tryListen('::')) ?? await tryListen('127.0.0.1') ?? Promise.reject(new Error('Unable to allocate free port'))
45
54
  }
46
55
 
47
56
  export async function isPortAvailable(port: number): Promise<boolean> {
@@ -62,17 +71,17 @@ export async function isPortAvailable(port: number): Promise<boolean> {
62
71
  })
63
72
  })
64
73
 
65
- const ipv4Availability = await canBind('127.0.0.1')
66
- if (ipv4Availability === false) {
74
+ const wildcardIpv6Availability = await canBind('::')
75
+ if (wildcardIpv6Availability === false) {
67
76
  return false
68
77
  }
69
78
 
70
- const ipv6Availability = await canBind('::1')
71
- if (ipv6Availability === false) {
79
+ const ipv4Availability = await canBind('127.0.0.1')
80
+ if (ipv4Availability === false) {
72
81
  return false
73
82
  }
74
83
 
75
- return ipv4Availability === true || ipv6Availability === true
84
+ return wildcardIpv6Availability === true || ipv4Availability === true
76
85
  }
77
86
 
78
87
  export async function getPreferredPort(preferredPort: number, logPrefix: string): Promise<number> {
package/src/mercato.ts CHANGED
@@ -83,7 +83,7 @@ const TURBOPACK_CORRUPTION_PATTERNS = [
83
83
  'TurbopackInternalError',
84
84
  ]
85
85
 
86
- const BUILTIN_CLI_MODULE_IDS = new Set(['queue', 'generate', 'db', 'server', 'test'])
86
+ const BUILTIN_CLI_MODULE_IDS = new Set(['queue', 'generate', 'deploy', 'db', 'server', 'test'])
87
87
 
88
88
  function collectNestedErrors(error: unknown, seen = new Set<unknown>()): ErrorWithCause[] {
89
89
  if (!error || seen.has(error)) {
@@ -254,10 +254,13 @@ function removeTurbopackDevCache(appDir: string): void {
254
254
  fs.rmSync(path.join(appDir, '.mercato', 'next', 'dev'), { recursive: true, force: true })
255
255
  }
256
256
 
257
- async function ensureEnvLoaded() {
257
+ async function ensureEnvLoaded(options: { createIfMissing?: boolean; quiet?: boolean } = {}) {
258
258
  if (envLoaded) return
259
259
  envLoaded = true
260
- const quietDotenv = process.env.DOTENV_CONFIG_QUIET === '1' || process.env.DOTENV_CONFIG_QUIET === 'true'
260
+ const quietDotenv =
261
+ options.quiet === true ||
262
+ process.env.DOTENV_CONFIG_QUIET === '1' ||
263
+ process.env.DOTENV_CONFIG_QUIET === 'true'
261
264
 
262
265
  // Try to find and load .env from the app directory
263
266
  // First, try to find the app directory via resolver
@@ -268,7 +271,11 @@ async function ensureEnvLoaded() {
268
271
 
269
272
  // Load .env from app directory if it exists
270
273
  const envPath = path.join(appDir, '.env')
271
- if (!fs.existsSync(envPath) && process.env.NODE_ENV !== 'production') {
274
+ if (
275
+ options.createIfMissing !== false &&
276
+ !fs.existsSync(envPath) &&
277
+ process.env.NODE_ENV !== 'production'
278
+ ) {
272
279
  const examplePath = path.join(appDir, '.env.example')
273
280
  if (fs.existsSync(examplePath)) {
274
281
  fs.copyFileSync(examplePath, envPath)
@@ -751,9 +758,9 @@ async function buildAllModules(): Promise<Module[]> {
751
758
  }
752
759
 
753
760
  export async function run(argv = process.argv) {
754
- await ensureEnvLoaded()
755
761
  const [, , ...parts] = argv
756
762
  const [first, second, ...remaining] = parts
763
+ await ensureEnvLoaded({ createIfMissing: first !== 'deploy', quiet: first === 'deploy' })
757
764
 
758
765
  // Handle init command directly
759
766
  if (first === 'init') {
@@ -1461,6 +1468,19 @@ export async function run(argv = process.argv) {
1461
1468
  } catch { /* @/cli may not exist in standalone apps — safe to ignore */ }
1462
1469
  }
1463
1470
  const all = modules.slice()
1471
+
1472
+ all.push({
1473
+ id: 'deploy',
1474
+ cli: [
1475
+ {
1476
+ command: 'railway',
1477
+ run: async (args: string[]) => {
1478
+ const { runRailwayDeploy } = await import('./lib/deploy/railway/index')
1479
+ await runRailwayDeploy(args)
1480
+ },
1481
+ },
1482
+ ],
1483
+ } as Module)
1464
1484
 
1465
1485
  // Built-in CLI module: queue
1466
1486
  all.push({
@@ -2365,11 +2385,16 @@ export async function run(argv = process.argv) {
2365
2385
 
2366
2386
  console.log('')
2367
2387
  const started = Date.now()
2368
- console.log(`🚀 Running ${modName}:${cmdName} ${rest.join(' ')}`)
2388
+ const loggedArgs = modName === 'deploy' && cmdName === 'railway'
2389
+ ? (await import('./lib/deploy/railway/options')).redactRailwayCliArgs(rest)
2390
+ : rest
2391
+ console.log(`🚀 Running ${modName}:${cmdName} ${loggedArgs.join(' ')}`)
2369
2392
  try {
2370
2393
  await cmd.run(rest)
2371
- const ms = Date.now() - started
2372
- console.log(`⏱️ Done in ${ms}ms`)
2394
+ if (modName !== 'deploy' || cmdName !== 'railway') {
2395
+ const ms = Date.now() - started
2396
+ console.log(`⏱️ Done in ${ms}ms`)
2397
+ }
2373
2398
  return 0
2374
2399
  } catch (e: any) {
2375
2400
  console.error(`💥 Failed: ${formatCliFailureMessage(modName, cmdName, e)}`)