@open-mercato/cli 0.6.7-develop.6758.1.697eade236 → 0.6.7-develop.6768.1.9d2c4efc43

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 (79) hide show
  1. package/.turbo/turbo-build.log +3 -3
  2. package/build.mjs +2 -1
  3. package/dist/agentic/guides/extensions.md +20 -3
  4. package/dist/agentic/guides/framework-extension-points.md +36 -0
  5. package/dist/agentic/guides/module-facts.json +39708 -230
  6. package/dist/agentic/guides/modules/ai_assistant.md +49 -9
  7. package/dist/agentic/guides/modules/api_docs.md +11 -1
  8. package/dist/agentic/guides/modules/api_keys.md +24 -1
  9. package/dist/agentic/guides/modules/attachments.md +22 -6
  10. package/dist/agentic/guides/modules/audit_logs.md +35 -1
  11. package/dist/agentic/guides/modules/auth.md +79 -15
  12. package/dist/agentic/guides/modules/business_rules.md +36 -3
  13. package/dist/agentic/guides/modules/catalog.md +160 -22
  14. package/dist/agentic/guides/modules/channel_gmail.md +14 -1
  15. package/dist/agentic/guides/modules/channel_imap.md +14 -1
  16. package/dist/agentic/guides/modules/checkout.md +134 -19
  17. package/dist/agentic/guides/modules/communication_channels.md +110 -20
  18. package/dist/agentic/guides/modules/configs.md +15 -1
  19. package/dist/agentic/guides/modules/content.md +11 -1
  20. package/dist/agentic/guides/modules/currencies.md +50 -9
  21. package/dist/agentic/guides/modules/customer_accounts.md +151 -28
  22. package/dist/agentic/guides/modules/customers.md +299 -52
  23. package/dist/agentic/guides/modules/dashboards.md +30 -1
  24. package/dist/agentic/guides/modules/data_sync.md +40 -7
  25. package/dist/agentic/guides/modules/dictionaries.md +24 -6
  26. package/dist/agentic/guides/modules/directory.md +52 -9
  27. package/dist/agentic/guides/modules/entities.md +41 -1
  28. package/dist/agentic/guides/modules/events.md +11 -1
  29. package/dist/agentic/guides/modules/feature_toggles.md +15 -1
  30. package/dist/agentic/guides/modules/gateway_stripe.md +14 -1
  31. package/dist/agentic/guides/modules/generators.md +11 -1
  32. package/dist/agentic/guides/modules/inbox_ops.md +58 -16
  33. package/dist/agentic/guides/modules/integrations.md +30 -7
  34. package/dist/agentic/guides/modules/messages.md +68 -13
  35. package/dist/agentic/guides/modules/notifications.md +13 -1
  36. package/dist/agentic/guides/modules/onboarding.md +13 -1
  37. package/dist/agentic/guides/modules/payment_gateways.md +51 -12
  38. package/dist/agentic/guides/modules/perspectives.md +16 -1
  39. package/dist/agentic/guides/modules/planner.md +33 -9
  40. package/dist/agentic/guides/modules/portal.md +24 -1
  41. package/dist/agentic/guides/modules/progress.md +34 -9
  42. package/dist/agentic/guides/modules/query_index.md +56 -3
  43. package/dist/agentic/guides/modules/record_locks.md +60 -13
  44. package/dist/agentic/guides/modules/resources.md +79 -18
  45. package/dist/agentic/guides/modules/sales.md +238 -48
  46. package/dist/agentic/guides/modules/scheduler.md +23 -7
  47. package/dist/agentic/guides/modules/search.md +28 -3
  48. package/dist/agentic/guides/modules/security.md +106 -23
  49. package/dist/agentic/guides/modules/shipping_carriers.md +38 -10
  50. package/dist/agentic/guides/modules/sso.md +47 -15
  51. package/dist/agentic/guides/modules/staff.md +117 -38
  52. package/dist/agentic/guides/modules/storage_s3.md +13 -1
  53. package/dist/agentic/guides/modules/sync_akeneo.md +13 -1
  54. package/dist/agentic/guides/modules/sync_excel.md +15 -1
  55. package/dist/agentic/guides/modules/system_status_overlays.md +14 -1
  56. package/dist/agentic/guides/modules/translations.md +25 -5
  57. package/dist/agentic/guides/modules/webhooks.md +85 -15
  58. package/dist/agentic/guides/modules/wms.md +234 -31
  59. package/dist/agentic/guides/modules/workflows.md +114 -30
  60. package/dist/agentic/guides/upstream/BACKWARD_COMPATIBILITY.md +7 -0
  61. package/dist/agentic/guides/upstream/manifest.json +2 -2
  62. package/dist/agentic/shared/AGENTS.md.template +2 -2
  63. package/dist/agentic/shared/ai/harness/README.md +2 -0
  64. package/dist/agentic/shared/ai/harness/cases.json +80 -39
  65. package/dist/agentic/shared/ai/skills/om-system-extension/references/mechanism-selector.md +3 -1
  66. package/dist/agentic/shared/ai/skills/om-system-extension/references/unified-overrides.md +2 -1
  67. package/dist/agentic/shared/scripts/framework-context.mjs +3 -9
  68. package/dist/lib/generators/module-extension-facts.js +1185 -0
  69. package/dist/lib/generators/module-extension-facts.js.map +7 -0
  70. package/dist/lib/generators/module-facts.js +134 -7
  71. package/dist/lib/generators/module-facts.js.map +2 -2
  72. package/dist/lib/generators/module-registry.js +1 -0
  73. package/dist/lib/generators/module-registry.js.map +2 -2
  74. package/package.json +5 -5
  75. package/src/lib/generators/__tests__/module-extension-facts.test.ts +402 -0
  76. package/src/lib/generators/__tests__/module-facts.bc-guard.test.ts +39 -2
  77. package/src/lib/generators/module-extension-facts.ts +1428 -0
  78. package/src/lib/generators/module-facts.ts +143 -6
  79. package/src/lib/generators/module-registry.ts +1 -1
@@ -1,6 +1,8 @@
1
- [build:cli] found 96 entry points
1
+ [build:cli] found 97 entry points
2
2
  Copied create-app/agentic/ → dist/agentic/
3
3
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for ai_assistant
4
+ Generated 54 module fact-sheets → dist/agentic/guides/modules/
5
+ [build:cli] built successfully
4
6
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for channel_gmail
5
7
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for channel_imap
6
8
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for checkout
@@ -25,9 +27,7 @@ Copied create-app/agentic/ → dist/agentic/
25
27
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for feature_toggles
26
28
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for inbox_ops
27
29
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for integrations
28
- Generated 54 module fact-sheets → dist/agentic/guides/modules/
29
30
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for messages
30
- [build:cli] built successfully
31
31
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for notifications
32
32
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for payment_gateways
33
33
  [module-facts] module registry unavailable (registryPath not provided); API route auth omitted for perspectives
package/build.mjs CHANGED
@@ -111,7 +111,7 @@ await buildPackage(packageDir, {
111
111
  coreVersion = null
112
112
  }
113
113
 
114
- const { factsByModule, markdownByModule, warnings } = extractAllModuleFacts({
114
+ const { factsByModule, markdownByModule, frameworkMarkdown, warnings } = extractAllModuleFacts({
115
115
  sources,
116
116
  registryPath: existsSync(registryPath) ? registryPath : null,
117
117
  coreVersion,
@@ -123,6 +123,7 @@ await buildPackage(packageDir, {
123
123
  writeFileSync(join(modulesGuidesDir, `${moduleId}.md`), markdown)
124
124
  }
125
125
  writeFileSync(join(guidesDestDir, 'module-facts.json'), renderModuleFactsJson(factsByModule))
126
+ writeFileSync(join(guidesDestDir, 'framework-extension-points.md'), frameworkMarkdown)
126
127
 
127
128
  for (const warning of warnings) console.warn(warning)
128
129
  console.log(`Generated ${Object.keys(markdownByModule).length} module fact-sheets → dist/agentic/guides/modules/`)
@@ -1,6 +1,18 @@
1
1
  # Unified Module Extensions and Overrides
2
2
 
3
- Use the smallest extension mechanism that preserves installed-module ownership. Resolve host IDs from generated facts or exact installed source; never invent spot, route, or entity IDs.
3
+ Use the smallest extension mechanism that preserves installed-module ownership. Resolve mechanisms, targets, and round trips from generated facts before exact installed source; never invent spot, route, entity, event, registry, or override IDs.
4
+
5
+ ## Fact-First Target Resolution
6
+
7
+ Resolve an installed extension in this order:
8
+
9
+ 1. Choose the mechanism by intent below; the mechanism decides which contribution kind and host capability are required.
10
+ 2. Open only the named target module sheet at `.ai/guides/modules/<module>.md`. Its `UMES hosts` rows prove mountable exact/pattern targets; its `UMES contributions` rows preserve activation, phases/operations, feature and scope contracts, specialist routes, correlation resolution, and read/write/UI `roundTripId` links.
11
+ 3. For global shell, menu, dashboard, notification, or integration surfaces, use `.ai/guides/framework-extension-points.md`. Do not assign a framework-owned host to a business module or invent a `$framework` module.
12
+ 4. Follow a contribution's `fact-ref` or `specialistRoute` to the existing event/entity/API/command/search/AI/provider facts and owning specialist route. A specialized registry is not evidence for a generic widget target.
13
+ 5. Use `om-framework-context` for one named unresolved installed-version gap only. An `optional-external` target is explicit provenance and must degrade when its owner package is absent; an `unresolved` first-party target is a blocker, not permission to guess.
14
+
15
+ The legacy `Host extension points` token summary remains useful for compatibility, but it is not proof that a helper-built token is bound. Prefer the correlated host/contribution rows. A DataTable base token is a prefix, not a rendered mount; helper-only CrudForm/DataTable IDs marked `bound: false` are diagnostics and must never be selected.
4
16
 
5
17
  ## Route Selection
6
18
 
@@ -17,7 +29,7 @@ Add every other match too: `backend-ui` + `om-backend-ui-design` when authoring,
17
29
  | Add pre/post command behavior without replacing the command | Command interceptor | `commands/interceptors.ts` |
18
30
  | Block/rewrite a mutation with post-success work | Mutation guard contract | `data/guards.ts`; add widget injection only for a UI surface |
19
31
  | Enrich query-engine reads | Query enricher | `data/enrichers.ts` with `queryEngine.enabled` |
20
- | Add form fields/table columns/actions/filters/toolbar | Headless widget injection | `widgets/injection/**`, `widgets/injection-table.ts` |
32
+ | Add form fields/table columns/actions/filters/toolbar | Headless widget injection | `widgets/injection/**`, `widgets/injection-table.ts`; select an exact bound family row from target facts |
21
33
  | Add/reorder menu items | Headless menu widget | same widget files, `menu:*` host |
22
34
  | Render a card/tab/section in another page | UI widget injection | same widget files |
23
35
  | Add app data linked to installed entity | Entity extension | `data/extensions.ts` |
@@ -66,7 +78,9 @@ Add every other match too: `backend-ui` + `om-backend-ui-design` when authoring,
66
78
  - Gate display and execution separately. UI hiding never substitutes for backend authorization.
67
79
  - Scope client handlers with `eventHandlers.filter.operations`; use `clientBroadcast`, `useAppEvent`, and `useOperationProgress` for typed real-time behavior instead of polling by default.
68
80
 
69
- Common host families include `crud-form:<entityId>:fields`, `data-table:<tableId>:columns`, `:row-actions`, `:bulk-actions`, `:filters`, `:toolbar`, `:search-trailing`, and `menu:sidebar:*`/`menu:topbar:*`. Resolve the concrete IDs; do not derive them by guess.
81
+ Bound CrudForm hosts are the base render/lifecycle host, `:header`, headless `:fields`, its component handle, and the declared transform/save/delete/field/navigation lifecycle handlers with create/update/delete operation filters. Bound DataTable hosts are rendered `:header`, `:footer`, `:toolbar`, conditional `:search-trailing`, headless `:columns`, `:row-actions`, `:bulk-actions`, `:filters`, and the `data-table:<tableId>` component handle. The DataTable base prefix, `emptyState`, and helper-only CrudForm before/after/footer/sidebar/group/field builders are not mountable unless a future bound-family fact explicitly says otherwise.
82
+
83
+ Menu hosts are framework-owned unless the named module facts prove otherwise. Use the framework catalog's exact menu surface/item IDs, label keys, feature gates, and relative placement; never derive `menu:sidebar:*` or `menu:topbar:*` from memory.
70
84
 
71
85
  ## Extensions and Optional Coupling
72
86
 
@@ -102,3 +116,6 @@ Common host families include `crud-form:<entityId>:fields`, `data-table:<tableId
102
116
  2. Test authorized, unauthorized, and wildcard-feature callers.
103
117
  3. Test list and detail, create/update/delete/action, cache hit/miss, and failure fallback where applicable.
104
118
  4. Run `yarn generate`, inspect host registration, and verify no installed file changed.
119
+ 5. Re-read the generated contribution row: its target must resolve as `exact`, `pattern`, `framework`, `fact-ref`, or intentional `optional-external`, and every shared `roundTripId` leg must remain present. Treat `unresolved` first-party provenance as a failed generation/coverage gate.
120
+
121
+ The repository umbrella specification may be available at `.ai/specs/implemented/SPEC-041-2026-02-24-universal-module-extension-system.md` in a source checkout. It is optional background only; the generated facts and this selector are sufficient offline in a standalone scaffold.
@@ -0,0 +1,36 @@
1
+ # Framework extension points (generated, do not edit)
2
+
3
+ | ID / pattern | Family | Supports | Stability |
4
+ |---|---|---|---|
5
+ | crud-form:* | crud-form | field-widget, lifecycle-handler | FROZEN |
6
+ | dashboard:* | dashboard | registry-contribution | FROZEN |
7
+ | backend-mutation:global | generic | headless-widget | FROZEN |
8
+ | integrations.detail:{integrationId} | integration | render-widget | FROZEN |
9
+ | integrations.detail:tabs | integration | render-widget | FROZEN |
10
+ | menu:backend.sidebar | menu | menu-item | FROZEN |
11
+ | menu:portal.sidebar | menu | menu-item | FROZEN |
12
+ | menu:profile.sidebar | menu | menu-item | FROZEN |
13
+ | menu:settings.sidebar | menu | menu-item | FROZEN |
14
+ | module-override:acl.features | module-override | module-override, disable-replace | STABLE |
15
+ | module-override:ai.agents | module-override | module-override, disable-replace | STABLE |
16
+ | module-override:ai.extensions | module-override | module-override, additive | STABLE |
17
+ | module-override:ai.tools | module-override | module-override, disable-replace | STABLE |
18
+ | module-override:cli | module-override | module-override, disable-replace | STABLE |
19
+ | module-override:commandInterceptors | module-override | module-override, disable-replace | STABLE |
20
+ | module-override:di | module-override | module-override, disable-replace | STABLE |
21
+ | module-override:encryption.maps | module-override | module-override, disable-replace | STABLE |
22
+ | module-override:enrichers | module-override | module-override, disable-replace | STABLE |
23
+ | module-override:events.subscribers | module-override | module-override, disable-replace | STABLE |
24
+ | module-override:guards | module-override | module-override, disable-replace | STABLE |
25
+ | module-override:interceptors | module-override | module-override, disable-replace | STABLE |
26
+ | module-override:nav.groupOrder | module-override | module-override, additive | STABLE |
27
+ | module-override:notifications.handlers | module-override | module-override, disable-replace | STABLE |
28
+ | module-override:notifications.types | module-override | module-override, disable-replace | STABLE |
29
+ | module-override:routes.api | module-override | module-override, disable-replace | STABLE |
30
+ | module-override:routes.pages | module-override | module-override, disable-replace | STABLE |
31
+ | module-override:setup | module-override | module-override, replace | STABLE |
32
+ | module-override:widgets.components | module-override | module-override, disable-replace | STABLE |
33
+ | module-override:widgets.dashboard | module-override | module-override, disable-replace | STABLE |
34
+ | module-override:widgets.injection | module-override | module-override, disable-replace | STABLE |
35
+ | module-override:workers | module-override | module-override, disable-replace | STABLE |
36
+ | notification:* | notification | registry-contribution | FROZEN |