@open-mercato/cli 0.6.8-develop.7000.1.0ae682bad1 → 0.6.8-develop.7003.1.24fef49d48

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 (73) hide show
  1. package/.turbo/turbo-build.log +4 -3
  2. package/build.mjs +45 -30
  3. package/dist/agentic/guides/module-facts.json +124 -124
  4. package/dist/agentic/guides/module-facts.v2.json +124 -124
  5. package/dist/agentic/guides/modules/ai_assistant/index.md +1 -1
  6. package/dist/agentic/guides/modules/api_docs/index.md +1 -1
  7. package/dist/agentic/guides/modules/api_keys/index.md +1 -1
  8. package/dist/agentic/guides/modules/attachments/index.md +1 -1
  9. package/dist/agentic/guides/modules/audit_logs/index.md +1 -1
  10. package/dist/agentic/guides/modules/auth/index.md +1 -1
  11. package/dist/agentic/guides/modules/business_rules/index.md +1 -1
  12. package/dist/agentic/guides/modules/catalog/index.md +1 -1
  13. package/dist/agentic/guides/modules/channel_apns/index.md +1 -1
  14. package/dist/agentic/guides/modules/channel_expo/index.md +1 -1
  15. package/dist/agentic/guides/modules/channel_fcm/index.md +1 -1
  16. package/dist/agentic/guides/modules/channel_gmail/index.md +1 -1
  17. package/dist/agentic/guides/modules/channel_imap/index.md +1 -1
  18. package/dist/agentic/guides/modules/checkout/index.md +1 -1
  19. package/dist/agentic/guides/modules/communication_channels/index.md +1 -1
  20. package/dist/agentic/guides/modules/configs/index.md +1 -1
  21. package/dist/agentic/guides/modules/content/index.md +1 -1
  22. package/dist/agentic/guides/modules/currencies/index.md +1 -1
  23. package/dist/agentic/guides/modules/customer_accounts/index.md +1 -1
  24. package/dist/agentic/guides/modules/customers/index.md +1 -1
  25. package/dist/agentic/guides/modules/dashboards/index.md +1 -1
  26. package/dist/agentic/guides/modules/data_sync/index.md +1 -1
  27. package/dist/agentic/guides/modules/design_system/index.md +1 -1
  28. package/dist/agentic/guides/modules/devices/index.md +1 -1
  29. package/dist/agentic/guides/modules/dictionaries/index.md +1 -1
  30. package/dist/agentic/guides/modules/directory/index.md +1 -1
  31. package/dist/agentic/guides/modules/entities/index.md +1 -1
  32. package/dist/agentic/guides/modules/eudr/index.md +1 -1
  33. package/dist/agentic/guides/modules/events/index.md +1 -1
  34. package/dist/agentic/guides/modules/feature_toggles/index.md +1 -1
  35. package/dist/agentic/guides/modules/gateway_stripe/index.md +1 -1
  36. package/dist/agentic/guides/modules/generators/index.md +1 -1
  37. package/dist/agentic/guides/modules/inbox_ops/index.md +1 -1
  38. package/dist/agentic/guides/modules/integrations/index.md +1 -1
  39. package/dist/agentic/guides/modules/messages/index.md +1 -1
  40. package/dist/agentic/guides/modules/notifications/index.md +1 -1
  41. package/dist/agentic/guides/modules/onboarding/index.md +1 -1
  42. package/dist/agentic/guides/modules/payment_gateways/index.md +1 -1
  43. package/dist/agentic/guides/modules/perspectives/index.md +1 -1
  44. package/dist/agentic/guides/modules/planner/index.md +1 -1
  45. package/dist/agentic/guides/modules/portal/index.md +1 -1
  46. package/dist/agentic/guides/modules/progress/index.md +1 -1
  47. package/dist/agentic/guides/modules/push_notifications/index.md +1 -1
  48. package/dist/agentic/guides/modules/query_index/index.md +1 -1
  49. package/dist/agentic/guides/modules/record_locks/index.md +1 -1
  50. package/dist/agentic/guides/modules/resources/index.md +1 -1
  51. package/dist/agentic/guides/modules/sales/index.md +1 -1
  52. package/dist/agentic/guides/modules/scheduler/index.md +1 -1
  53. package/dist/agentic/guides/modules/search/index.md +1 -1
  54. package/dist/agentic/guides/modules/security/index.md +1 -1
  55. package/dist/agentic/guides/modules/shipping_carriers/index.md +1 -1
  56. package/dist/agentic/guides/modules/sso/index.md +1 -1
  57. package/dist/agentic/guides/modules/staff/index.md +1 -1
  58. package/dist/agentic/guides/modules/storage_s3/index.md +1 -1
  59. package/dist/agentic/guides/modules/sync_akeneo/index.md +1 -1
  60. package/dist/agentic/guides/modules/sync_excel/index.md +1 -1
  61. package/dist/agentic/guides/modules/system_status_overlays/index.md +1 -1
  62. package/dist/agentic/guides/modules/translations/index.md +1 -1
  63. package/dist/agentic/guides/modules/warranty_claims/index.md +1 -1
  64. package/dist/agentic/guides/modules/webhooks/index.md +1 -1
  65. package/dist/agentic/guides/modules/wms/index.md +1 -1
  66. package/dist/agentic/guides/modules/workflows/index.md +1 -1
  67. package/dist/agentic/guides/reference-module-facts.json +1 -1
  68. package/dist/agentic/guides/upstream/manifest.json +1 -1
  69. package/dist/lib/__integration__/TC-INT-008.spec.js +5 -0
  70. package/dist/lib/__integration__/TC-INT-008.spec.js.map +2 -2
  71. package/package.json +6 -6
  72. package/src/lib/__integration__/TC-INT-008.spec.ts +9 -0
  73. package/src/lib/__tests__/agentic-build-artifacts.test.ts +28 -0
@@ -1,5 +1,5 @@
1
1
  [build:cli] found 104 entry points
2
- Copied create-app/agentic/ → dist/agentic/
2
+ Copied create-app/agentic/ → dist/agentic.staging/
3
3
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for ai_assistant
4
4
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for channel_apns
5
5
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for channel_expo
@@ -65,7 +65,7 @@ Copied create-app/agentic/ → dist/agentic/
65
65
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for storage_s3
66
66
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for sync_akeneo
67
67
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for webhooks
68
- Generated 62 module fact-sheets → dist/agentic/guides/modules/
68
+ Generated 62 module fact-sheets → dist/agentic.staging/guides/modules/
69
69
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for ai_assistant
70
70
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for channel_apns
71
71
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for channel_expo
@@ -132,5 +132,6 @@ Generated 62 module fact-sheets → dist/agentic/guides/modules/
132
132
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for sync_akeneo
133
133
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for webhooks
134
134
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for example
135
- Generated 1 local reference projection(s) → dist/agentic/guides/reference-modules/
135
+ Generated 1 local reference projection(s) → dist/agentic.staging/guides/reference-modules/
136
+ Published dist/agentic.staging/ → dist/agentic/
136
137
  [build:cli] built successfully
package/build.mjs CHANGED
@@ -1,4 +1,14 @@
1
- import { chmodSync, cpSync, existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs'
1
+ import {
2
+ chmodSync,
3
+ cpSync,
4
+ existsSync,
5
+ mkdirSync,
6
+ readdirSync,
7
+ readFileSync,
8
+ renameSync,
9
+ rmSync,
10
+ writeFileSync,
11
+ } from 'node:fs'
2
12
  import { createHash } from 'node:crypto'
3
13
  import { dirname, join } from 'node:path'
4
14
  import { fileURLToPath, pathToFileURL } from 'node:url'
@@ -25,15 +35,28 @@ await buildPackage(packageDir, {
25
35
  chmodSync(binPath, 0o755)
26
36
 
27
37
  // Copy agentic source files from create-app so generators can read them at runtime.
38
+ // The tree is assembled in a staging directory and swapped in at the end of the build: refreshing
39
+ // dist/agentic in place deletes the whole harness plus ~55 fact-sheets and copies them back, which
40
+ // leaves the published tree incomplete for seconds and makes any concurrent reader fail with ENOENT
41
+ // on files that exist (#5059, #5104). Staging also makes stale per-module artifacts structurally
42
+ // impossible, so no purge of previous output is needed — the swapped-in tree only contains what this
43
+ // build wrote. Mirrors packages/create-app/build.mjs, including its single-builder assumption: the
44
+ // staging and previous directory names are fixed, so two concurrent runs would clear each other's
45
+ // staging tree below and the loser would fail loudly on the rename at the end, which beats the silent
46
+ // partial tree the in-place refresh produced.
47
+ const agenticDist = join(outdir, 'agentic')
48
+ const agenticStaging = join(outdir, 'agentic.staging')
49
+ const agenticPrevious = join(outdir, 'agentic.previous')
50
+ for (const leftover of [agenticStaging, agenticPrevious]) rmSync(leftover, { recursive: true, force: true })
51
+ mkdirSync(agenticStaging, { recursive: true })
28
52
  const agenticSrc = join(packageDir, '..', 'create-app', 'agentic')
29
53
  if (existsSync(agenticSrc)) {
30
- rmSync(join(outdir, 'agentic'), { recursive: true, force: true })
31
- cpSync(agenticSrc, join(outdir, 'agentic'), { recursive: true })
32
- console.log('Copied create-app/agentic/ → dist/agentic/')
54
+ cpSync(agenticSrc, agenticStaging, { recursive: true })
55
+ console.log('Copied create-app/agentic/ → dist/agentic.staging/')
33
56
  }
34
57
 
35
58
  const repositoryRoot = join(packageDir, '..', '..')
36
- const upstreamDir = join(outdir, 'agentic', 'guides', 'upstream')
59
+ const upstreamDir = join(agenticStaging, 'guides', 'upstream')
37
60
  mkdirSync(upstreamDir, { recursive: true })
38
61
  const cliVersion = JSON.parse(readFileSync(join(packageDir, 'package.json'), 'utf8')).version ?? null
39
62
  const upstreamManifest = { version: 1, generator: `@open-mercato/cli@${cliVersion ?? 'unknown'}`, files: {} }
@@ -48,33 +71,15 @@ await buildPackage(packageDir, {
48
71
  // Discover module-specific standalone guides across sibling packages. Package-level
49
72
  // guides are intentionally not shipped because they duplicate routed conceptual guides.
50
73
  const packagesDir = join(packageDir, '..')
51
- const guidesDestDir = join(outdir, 'agentic', 'guides')
74
+ const guidesDestDir = join(agenticStaging, 'guides')
52
75
  mkdirSync(guidesDestDir, { recursive: true })
53
76
 
54
- // Clean stale per-module artifacts before regenerating so an incremental dist never
55
- // retains a removed module's full guide or fact-sheet. The legacy `core.<module>.md`
56
- // redirect stubs are no longer emitted (#3754); this purge also deletes any that linger
57
- // in an incremental `dist/` from an older build. Mirrors packages/create-app/build.mjs;
58
- // conceptual guides remain while stale single-dot package guides are removed below.
59
- rmSync(join(guidesDestDir, 'modules'), { recursive: true, force: true })
60
- rmSync(join(guidesDestDir, 'reference-modules'), { recursive: true, force: true })
61
- rmSync(join(guidesDestDir, 'reference-module-facts.json'), { force: true })
62
- rmSync(join(guidesDestDir, 'module-facts.v2.json'), { force: true })
63
- for (const entry of readdirSync(guidesDestDir)) {
64
- if (/^core\..+\.md$/.test(entry)) {
65
- rmSync(join(guidesDestDir, entry))
66
- }
67
- }
77
+ // Nothing stale can survive here: the staged tree is built from create-app/agentic alone, so the
78
+ // legacy `core.<module>.md` redirect stubs (#3754) and the unreachable package-level `<pkg>.md`
79
+ // guides are absent unless this build writes them — which it does not. The conceptual guides remain.
68
80
 
69
81
  let guidesFound = 0
70
82
  for (const pkg of readdirSync(packagesDir)) {
71
- // Package-level source guides remain for monorepo context, but standalone apps route
72
- // through conceptual and module-level guides, so remove their stale emitted copies.
73
- const guideSource = join(packagesDir, pkg, 'agentic', 'standalone-guide.md')
74
- if (existsSync(guideSource)) {
75
- rmSync(join(guidesDestDir, `${pkg}.md`), { force: true })
76
- }
77
-
78
83
  const modulesDir = join(packagesDir, pkg, 'src', 'modules')
79
84
  if (!existsSync(modulesDir)) continue
80
85
 
@@ -88,7 +93,7 @@ await buildPackage(packageDir, {
88
93
  }
89
94
 
90
95
  if (guidesFound > 0) {
91
- console.log(`Discovered ${guidesFound} standalone guides → dist/agentic/guides/`)
96
+ console.log(`Discovered ${guidesFound} standalone guides → dist/agentic.staging/guides/`)
92
97
  }
93
98
 
94
99
  // Generate per-module fact-sheets plus legacy-v1 and corrected-v2 JSON sidecars
@@ -154,7 +159,9 @@ await buildPackage(packageDir, {
154
159
  writeFileSync(join(guidesDestDir, 'framework-extension-points.md'), frameworkMarkdown)
155
160
 
156
161
  for (const warning of warnings) console.warn(warning)
157
- console.log(`Generated ${Object.keys(directoryByModule).length} module fact-sheets → dist/agentic/guides/modules/`)
162
+ console.log(
163
+ `Generated ${Object.keys(directoryByModule).length} module fact-sheets → dist/agentic.staging/guides/modules/`,
164
+ )
158
165
 
159
166
  const referenceBundle = {}
160
167
  const referenceGuidesDir = join(guidesDestDir, 'reference-modules')
@@ -184,10 +191,18 @@ await buildPackage(packageDir, {
184
191
  }
185
192
  writeFileSync(join(guidesDestDir, 'reference-module-facts.json'), renderReferenceModuleFactsJson(referenceBundle))
186
193
  console.log(
187
- `Generated ${REFERENCE_MODULE_IDS.length} local reference projection(s) → dist/agentic/guides/reference-modules/`,
194
+ `Generated ${REFERENCE_MODULE_IDS.length} local reference projection(s) → dist/agentic.staging/guides/reference-modules/`,
188
195
  )
189
196
  } else {
190
197
  console.warn('[module-facts] no package modules discovered; skipping fact-sheet generation')
191
198
  }
199
+
200
+ // Publish the staged tree. A reader either sees the complete previous build or the complete new
201
+ // one; the only gap is between the two renames, instead of the multi-second incomplete window an
202
+ // in-place refresh leaves behind (#5059, #5104).
203
+ if (existsSync(agenticDist)) renameSync(agenticDist, agenticPrevious)
204
+ renameSync(agenticStaging, agenticDist)
205
+ rmSync(agenticPrevious, { recursive: true, force: true })
206
+ console.log('Published dist/agentic.staging/ → dist/agentic/')
192
207
  },
193
208
  })