@open-mercato/cli 0.6.7 → 0.6.8-develop.6875.1.871a4afc94
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.
- package/.turbo/turbo-build.log +4 -4
- package/build.mjs +24 -7
- package/dist/agentic/claude-code/hooks/entity-migration-check.ts +32 -88
- package/dist/agentic/codex/enforcement-rules.md +2 -16
- package/dist/agentic/cursor/hooks/entity-migration-check.mjs +19 -50
- package/dist/agentic/cursor/rules/entity-guard.mdc +9 -21
- package/dist/agentic/cursor/rules/generated-guard.mdc +3 -5
- package/dist/agentic/cursor/rules/open-mercato.mdc +3 -29
- package/dist/agentic/guides/ai-workflows.md +76 -0
- package/dist/agentic/guides/architecture.md +107 -0
- package/dist/agentic/guides/backend-ui.md +80 -0
- package/dist/agentic/guides/contracts.md +92 -0
- package/dist/agentic/guides/extensions.md +121 -0
- package/dist/agentic/guides/framework-extension-points.md +36 -0
- package/dist/agentic/guides/integrations.md +81 -0
- package/dist/agentic/guides/module-facts.json +115537 -3951
- package/dist/agentic/guides/module-system.md +12 -127
- package/dist/agentic/guides/modules/ai_assistant.md +227 -28
- package/dist/agentic/guides/modules/api_docs.md +58 -2
- package/dist/agentic/guides/modules/api_keys.md +92 -7
- package/dist/agentic/guides/modules/attachments.md +119 -14
- package/dist/agentic/guides/modules/audit_logs.md +131 -10
- package/dist/agentic/guides/modules/auth.md +276 -33
- package/dist/agentic/guides/modules/business_rules.md +149 -14
- package/dist/agentic/guides/modules/catalog.md +475 -43
- package/dist/agentic/guides/modules/channel_gmail.md +82 -3
- package/dist/agentic/guides/modules/channel_imap.md +82 -3
- package/dist/agentic/guides/modules/checkout.md +299 -27
- package/dist/agentic/guides/modules/communication_channels.md +315 -33
- package/dist/agentic/guides/modules/configs.md +104 -8
- package/dist/agentic/guides/modules/content.md +57 -2
- package/dist/agentic/guides/modules/currencies.md +152 -17
- package/dist/agentic/guides/modules/customer_accounts.md +387 -45
- package/dist/agentic/guides/modules/customers.md +746 -85
- package/dist/agentic/guides/modules/dashboards.md +155 -10
- package/dist/agentic/guides/modules/data_sync.md +149 -16
- package/dist/agentic/guides/modules/design_system.md +102 -0
- package/dist/agentic/guides/modules/dictionaries.md +107 -12
- package/dist/agentic/guides/modules/directory.md +148 -15
- package/dist/agentic/guides/modules/entities.md +145 -13
- package/dist/agentic/guides/modules/events.md +59 -2
- package/dist/agentic/guides/modules/feature_toggles.md +119 -9
- package/dist/agentic/guides/modules/gateway_stripe.md +92 -4
- package/dist/agentic/guides/modules/generators.md +45 -2
- package/dist/agentic/guides/modules/inbox_ops.md +207 -27
- package/dist/agentic/guides/modules/integrations.md +146 -16
- package/dist/agentic/guides/modules/messages.md +223 -24
- package/dist/agentic/guides/modules/notifications.md +96 -8
- package/dist/agentic/guides/modules/onboarding.md +77 -6
- package/dist/agentic/guides/modules/payment_gateways.md +164 -21
- package/dist/agentic/guides/modules/perspectives.md +77 -7
- package/dist/agentic/guides/modules/planner.md +136 -18
- package/dist/agentic/guides/modules/portal.md +93 -2
- package/dist/agentic/guides/modules/progress.md +104 -14
- package/dist/agentic/guides/modules/query_index.md +154 -15
- package/dist/agentic/guides/modules/record_locks.md +206 -21
- package/dist/agentic/guides/modules/resources.md +197 -30
- package/dist/agentic/guides/modules/sales.md +678 -84
- package/dist/agentic/guides/modules/scheduler.md +133 -14
- package/dist/agentic/guides/modules/search.md +170 -6
- package/dist/agentic/guides/modules/security.md +294 -35
- package/dist/agentic/guides/modules/shipping_carriers.md +134 -18
- package/dist/agentic/guides/modules/sso.md +151 -26
- package/dist/agentic/guides/modules/staff.md +369 -57
- package/dist/agentic/guides/modules/storage_s3.md +95 -5
- package/dist/agentic/guides/modules/sync_akeneo.md +85 -3
- package/dist/agentic/guides/modules/sync_excel.md +75 -6
- package/dist/agentic/guides/modules/system_status_overlays.md +60 -2
- package/dist/agentic/guides/modules/translations.md +104 -10
- package/dist/agentic/guides/modules/webhooks.md +203 -24
- package/dist/agentic/guides/modules/wms.md +441 -46
- package/dist/agentic/guides/modules/workflows.md +302 -43
- package/dist/agentic/guides/spec-delivery.md +22 -0
- package/dist/agentic/guides/testing-debugging.md +80 -0
- package/dist/agentic/guides/upstream/AGENTS.md +299 -0
- package/dist/agentic/guides/upstream/BACKWARD_COMPATIBILITY.md +316 -0
- package/dist/agentic/guides/upstream/manifest.json +8 -0
- package/dist/agentic/shared/AGENTS.md.template +124 -311
- package/dist/agentic/shared/ai/agentic.config.json +2 -0
- package/dist/agentic/shared/ai/harness/README.md +50 -0
- package/dist/agentic/shared/ai/harness/RELEASE.md +57 -0
- package/dist/agentic/shared/ai/harness/cases.json +13680 -0
- package/dist/agentic/shared/ai/harness/cases.schema.json +133 -0
- package/dist/agentic/shared/ai/harness/fixtures/index.json +49 -0
- package/dist/agentic/shared/ai/harness/fixtures/seeds.json +162 -0
- package/dist/agentic/shared/ai/harness/generated-code-review-policy.md +21 -0
- package/dist/agentic/shared/ai/harness/generated-code-review-response.schema.json +96 -0
- package/dist/agentic/shared/ai/harness/generated-code-review-result.schema.json +172 -0
- package/dist/agentic/shared/ai/harness/release-matrix.json +158 -0
- package/dist/agentic/shared/ai/harness/release-result.schema.json +219 -0
- package/dist/agentic/shared/ai/harness/result.schema.json +76 -0
- package/dist/agentic/shared/ai/harness/routing-response.schema.json +12 -0
- package/dist/agentic/shared/ai/harness/target-validation-result.schema.json +73 -0
- package/dist/agentic/shared/ai/harness/validators.json +78 -0
- package/dist/agentic/shared/ai/harness/writable-ast-oracles.mjs +2121 -0
- package/dist/agentic/shared/ai/harness/writable-behavior-oracles.mjs +1096 -0
- package/dist/agentic/shared/ai/lessons/_template.md +16 -0
- package/dist/agentic/shared/ai/lessons.md +26 -3
- package/dist/agentic/shared/ai/review-checklist.md +36 -0
- package/dist/agentic/shared/ai/skills/om-auto-implement-spec/SKILL.md +21 -0
- package/dist/agentic/shared/ai/skills/om-auto-review-pr/SKILL.md +4 -0
- package/dist/agentic/shared/ai/skills/om-auto-upgrade-0.6.6-to-0.6.7/SKILL.md +98 -0
- package/dist/agentic/shared/ai/skills/om-backend-ui-design/SKILL.md +20 -241
- package/dist/agentic/shared/ai/skills/om-backend-ui-design/references/crud-surfaces.md +16 -0
- package/dist/agentic/shared/ai/skills/om-backend-ui-design/references/frontend-and-design-system.md +53 -0
- package/dist/agentic/shared/ai/skills/om-backend-ui-design/references/page-and-navigation.md +13 -0
- package/dist/agentic/shared/ai/skills/om-backend-ui-design/references/quality-states.md +11 -0
- package/dist/agentic/shared/ai/skills/om-build-workflow/SKILL.md +30 -0
- package/dist/agentic/shared/ai/skills/om-build-workflow/references/activity-contracts.md +12 -0
- package/dist/agentic/shared/ai/skills/om-build-workflow/references/durability-and-progress.md +13 -0
- package/dist/agentic/shared/ai/skills/om-build-workflow/references/workflow-design.md +14 -0
- package/dist/agentic/shared/ai/skills/om-create-ai-agent/SKILL.md +28 -0
- package/dist/agentic/shared/ai/skills/om-create-ai-agent/references/attachments-and-overrides.md +12 -0
- package/dist/agentic/shared/ai/skills/om-create-ai-agent/references/module-agents-and-tools.md +22 -0
- package/dist/agentic/shared/ai/skills/om-create-ai-agent/references/orchestrator-agents.md +12 -0
- package/dist/agentic/shared/ai/skills/om-create-ai-agent/references/surface-selector.md +19 -0
- package/dist/agentic/shared/ai/skills/om-data-model-design/SKILL.md +16 -601
- package/dist/agentic/shared/ai/skills/om-data-model-design/references/integrity-and-concurrency.md +19 -0
- package/dist/agentic/shared/ai/skills/om-data-model-design/references/migration-workflow.md +13 -0
- package/dist/agentic/shared/ai/skills/om-data-model-design/references/schema-design.md +14 -0
- package/dist/agentic/shared/ai/skills/om-data-model-design/references/sensitive-data.md +10 -0
- package/dist/agentic/shared/ai/skills/om-eject-and-customize/SKILL.md +14 -310
- package/dist/agentic/shared/ai/skills/om-eject-and-customize/references/decision-and-procedure.md +17 -0
- package/dist/agentic/shared/ai/skills/om-evolve-harness/SKILL.md +29 -0
- package/dist/agentic/shared/ai/skills/om-evolve-harness/references/case-template.md +100 -0
- package/dist/agentic/shared/ai/skills/om-evolve-harness/references/case-workflow.md +16 -0
- package/dist/agentic/shared/ai/skills/om-evolve-harness/references/owner-selection.md +17 -0
- package/dist/agentic/shared/ai/skills/om-framework-context/SKILL.md +25 -0
- package/dist/agentic/shared/ai/skills/om-framework-context/references/resolver-procedure.md +11 -0
- package/dist/agentic/shared/ai/skills/om-framework-context/references/skew-and-escalation.md +13 -0
- package/dist/agentic/shared/ai/skills/om-help/SKILL.md +15 -97
- package/dist/agentic/shared/ai/skills/om-help/references/delivery-workflows.md +18 -0
- package/dist/agentic/shared/ai/skills/om-help/references/task-families.md +20 -0
- package/dist/agentic/shared/ai/skills/om-implement-spec/SKILL.md +33 -152
- package/dist/agentic/shared/ai/skills/om-implement-spec/references/phases-and-gates.md +33 -0
- package/dist/agentic/shared/ai/skills/om-implement-spec/references/planning-and-progress.md +40 -0
- package/dist/agentic/shared/ai/skills/om-implement-spec/references/report-templates.md +27 -0
- package/dist/agentic/shared/ai/skills/om-implement-spec/references/spec-resolution.md +24 -0
- package/dist/agentic/shared/ai/skills/om-integration-builder/SKILL.md +24 -708
- package/dist/agentic/shared/ai/skills/om-integration-builder/references/package-and-activation.md +16 -0
- package/dist/agentic/shared/ai/skills/om-integration-builder/references/provider-families.md +14 -0
- package/dist/agentic/shared/ai/skills/om-integration-builder/references/security-and-reliability.md +15 -0
- package/dist/agentic/shared/ai/skills/om-integration-builder/references/sync-and-files.md +12 -0
- package/dist/agentic/shared/ai/skills/om-judge-agent-session/SKILL.md +34 -0
- package/dist/agentic/shared/ai/skills/om-judge-agent-session/agents/openai.yaml +4 -0
- package/dist/agentic/shared/ai/skills/om-judge-agent-session/references/agentic-setup.md +11 -0
- package/dist/agentic/shared/ai/skills/om-judge-agent-session/references/input-normalization.md +31 -0
- package/dist/agentic/shared/ai/skills/om-judge-agent-session/references/judge-workflow.md +39 -0
- package/dist/agentic/shared/ai/skills/om-judge-agent-session/references/report-template.md +43 -0
- package/dist/agentic/shared/ai/skills/om-judge-agent-session/references/rules.md +11 -0
- package/dist/agentic/shared/ai/skills/om-module-scaffold/SKILL.md +20 -820
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/api-and-domain.md +19 -0
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/business-one-shot-blueprints.md +172 -0
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/data-and-migrations.md +12 -0
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/discovery-surface-catalog.md +83 -0
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/module-surfaces.md +21 -0
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/planning.md +11 -0
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/runtime-cache-and-queues.md +22 -0
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/verification.md +13 -0
- package/dist/agentic/shared/ai/skills/om-share-this-session/SKILL.md +41 -0
- package/dist/agentic/shared/ai/skills/om-share-this-session/references/agentic-setup.md +19 -0
- package/dist/agentic/shared/ai/skills/om-share-this-session/references/bundle-preparation.md +44 -0
- package/dist/agentic/shared/ai/skills/om-share-this-session/references/consent-and-review.md +39 -0
- package/dist/agentic/shared/ai/skills/om-share-this-session/references/publication.md +20 -0
- package/dist/agentic/shared/ai/skills/om-share-this-session/references/report-templates.md +57 -0
- package/dist/agentic/shared/ai/skills/om-share-this-session/references/rules.md +11 -0
- package/dist/agentic/shared/ai/skills/om-share-this-session/scripts/prepare-share-bundle.mjs +486 -0
- package/dist/agentic/shared/ai/skills/om-system-extension/SKILL.md +19 -843
- package/dist/agentic/shared/ai/skills/om-system-extension/references/extension-branches.md +18 -0
- package/dist/agentic/shared/ai/skills/om-system-extension/references/mechanism-selector.md +27 -0
- package/dist/agentic/shared/ai/skills/om-system-extension/references/read-write-roundtrip.md +13 -0
- package/dist/agentic/shared/ai/skills/om-system-extension/references/unified-overrides.md +41 -0
- package/dist/agentic/shared/ai/skills/om-system-extension/references/verification.md +11 -0
- package/dist/agentic/shared/ai/skills/om-trim-unused-modules/SKILL.md +15 -63
- package/dist/agentic/shared/ai/skills/om-trim-unused-modules/references/dependency-and-redirect.md +15 -0
- package/dist/agentic/shared/ai/skills/om-troubleshooter/SKILL.md +16 -467
- package/dist/agentic/shared/ai/skills/om-troubleshooter/references/diagnosis-map.md +16 -0
- package/dist/agentic/shared/ai/skills/om-troubleshooter/references/regression-oracles.md +14 -0
- package/dist/agentic/shared/ai/skills/tiers.json +143 -21
- package/dist/agentic/shared/ai/skills/tiers.schema.json +52 -40
- package/dist/agentic/shared/ai/specs/README.md +4 -3
- package/dist/agentic/shared/ai/specs/SPEC-000-template.md +226 -10
- package/dist/agentic/shared/ai/trackers/github.md +108 -4
- package/dist/agentic/shared/scripts/agent-harness-tool-server.mjs +187 -0
- package/dist/agentic/shared/scripts/check-lessons.mjs +178 -0
- package/dist/agentic/shared/scripts/evaluate-agent-harness.mjs +2958 -0
- package/dist/agentic/shared/scripts/execution-sandbox.mjs +329 -0
- package/dist/agentic/shared/scripts/framework-context.mjs +888 -0
- package/dist/agentic/shared/scripts/install-skills.mjs +1029 -0
- package/dist/agentic/shared/scripts/install-skills.sh +4 -694
- package/dist/agentic/shared/scripts/prepare-agent-harness-fixture.mjs +222 -0
- package/dist/agentic/shared/scripts/run-agent-harness-release.mjs +1774 -0
- package/dist/bin.js +13 -1
- package/dist/bin.js.map +2 -2
- package/dist/lib/__integration__/TC-INT-008.spec.js +88 -8
- package/dist/lib/__integration__/TC-INT-008.spec.js.map +2 -2
- package/dist/lib/agentic-init.js +13 -3
- package/dist/lib/agentic-init.js.map +2 -2
- package/dist/lib/agentic-setup.js +434 -186
- package/dist/lib/agentic-setup.js.map +2 -2
- package/dist/lib/generators/extensions/injection-widgets.js +20 -0
- package/dist/lib/generators/extensions/injection-widgets.js.map +2 -2
- package/dist/lib/generators/module-extension-facts.js +1840 -0
- package/dist/lib/generators/module-extension-facts.js.map +7 -0
- package/dist/lib/generators/module-fact-sources.js +70 -0
- package/dist/lib/generators/module-fact-sources.js.map +7 -0
- package/dist/lib/generators/module-facts-discovery.js +41 -7
- package/dist/lib/generators/module-facts-discovery.js.map +2 -2
- package/dist/lib/generators/module-facts.js +1387 -45
- package/dist/lib/generators/module-facts.js.map +3 -3
- package/dist/lib/generators/module-override-targets.js +688 -0
- package/dist/lib/generators/module-override-targets.js.map +7 -0
- package/dist/lib/generators/module-registry.js +11 -5
- package/dist/lib/generators/module-registry.js.map +2 -2
- package/dist/lib/load-env.js +24 -0
- package/dist/lib/load-env.js.map +7 -0
- package/dist/lib/resolver.js +2 -0
- package/dist/lib/resolver.js.map +2 -2
- package/dist/lib/telemetry-init.js +358 -0
- package/dist/lib/telemetry-init.js.map +7 -0
- package/dist/lib/testing/integration.js +5 -0
- package/dist/lib/testing/integration.js.map +2 -2
- package/dist/mercato.js +23 -1
- package/dist/mercato.js.map +2 -2
- package/package.json +13 -11
- package/src/bin.ts +33 -1
- package/src/lib/__integration__/TC-INT-008.spec.ts +107 -9
- package/src/lib/__tests__/agentic-init.test.ts +41 -5
- package/src/lib/__tests__/agentic-setup.ownership.test.ts +386 -0
- package/src/lib/__tests__/injection-widget-id-validation.test.ts +184 -0
- package/src/lib/__tests__/load-env.test.ts +65 -0
- package/src/lib/__tests__/telemetry-init.test.ts +298 -0
- package/src/lib/agentic-init.ts +15 -3
- package/src/lib/agentic-setup.ts +573 -222
- package/src/lib/generators/__tests__/activation-adapter-coverage.test.ts +92 -0
- package/src/lib/generators/__tests__/module-extension-activations.test.ts +762 -0
- package/src/lib/generators/__tests__/module-extension-facts.test.ts +404 -0
- package/src/lib/generators/__tests__/module-facts.bc-guard.test.ts +88 -2
- package/src/lib/generators/__tests__/module-facts.customers.fixture.test.ts +1 -0
- package/src/lib/generators/__tests__/module-facts.discovery.test.ts +54 -10
- package/src/lib/generators/__tests__/module-facts.extension-hosts.test.ts +108 -0
- package/src/lib/generators/__tests__/module-facts.owned-contracts.test.ts +561 -0
- package/src/lib/generators/__tests__/module-facts.source-links.test.ts +119 -0
- package/src/lib/generators/__tests__/module-override-targets.roundtrip.test.ts +149 -0
- package/src/lib/generators/__tests__/module-override-targets.test.ts +304 -0
- package/src/lib/generators/__tests__/module-subset.test.ts +18 -0
- package/src/lib/generators/extensions/injection-widgets.ts +51 -0
- package/src/lib/generators/module-extension-facts.ts +2365 -0
- package/src/lib/generators/module-fact-sources.ts +108 -0
- package/src/lib/generators/module-facts-discovery.ts +58 -7
- package/src/lib/generators/module-facts.ts +1851 -46
- package/src/lib/generators/module-override-targets.ts +863 -0
- package/src/lib/generators/module-registry.ts +16 -6
- package/src/lib/load-env.ts +30 -0
- package/src/lib/resolver.ts +3 -0
- package/src/lib/telemetry-init.ts +461 -0
- package/src/lib/testing/__tests__/integration.test.ts +4 -0
- package/src/lib/testing/integration.ts +5 -0
- package/src/mercato.ts +26 -1
- package/dist/agentic/guides/cache.md +0 -45
- package/dist/agentic/guides/core.md +0 -453
- package/dist/agentic/guides/events.md +0 -117
- package/dist/agentic/guides/queue.md +0 -53
- package/dist/agentic/guides/search.md +0 -115
- package/dist/agentic/guides/shared.md +0 -108
- package/dist/agentic/guides/ui.md +0 -347
- package/dist/agentic/shared/ai/skills/om-auto-continue-pr-loop/SKILL.md +0 -27
- package/dist/agentic/shared/ai/skills/om-auto-create-pr-loop/SKILL.md +0 -27
- package/dist/agentic/shared/ai/skills/om-backend-ui-design/references/ui-components.md +0 -260
- package/dist/agentic/shared/ai/skills/om-data-model-design/references/mikro-orm-cheatsheet.md +0 -146
- package/dist/agentic/shared/ai/skills/om-help/references/skills-catalog.md +0 -84
- package/dist/agentic/shared/ai/skills/om-help/references/workflow-sequences.md +0 -193
- package/dist/agentic/shared/ai/skills/om-integration-builder/STANDALONE.md +0 -34
- package/dist/agentic/shared/ai/skills/om-integration-builder/references/adapter-contracts.md +0 -762
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/naming-conventions.md +0 -50
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/navigation-patterns.md +0 -97
- package/dist/agentic/shared/ai/skills/om-system-extension/references/extension-contracts.md +0 -271
- package/dist/agentic/shared/ai/skills/om-troubleshooter/references/diagnostic-commands.md +0 -101
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ModuleFactSourceKind,
|
|
3
|
+
ModuleFactSourceRef,
|
|
4
|
+
ModuleFactsJsonEntry,
|
|
5
|
+
} from './module-facts'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The subset of a module's facts needed to resolve the provenance index. Both
|
|
9
|
+
* the in-memory `ModuleFacts` and the emitted `ModuleFactsJsonEntry` satisfy it.
|
|
10
|
+
*/
|
|
11
|
+
export type FactSourceLookupInput = Pick<
|
|
12
|
+
ModuleFactsJsonEntry,
|
|
13
|
+
| 'apiRoutes'
|
|
14
|
+
| 'cliCommands'
|
|
15
|
+
| 'backendPages'
|
|
16
|
+
| 'frontendPages'
|
|
17
|
+
| 'aiTools'
|
|
18
|
+
| 'aiAgents'
|
|
19
|
+
| 'ownedContracts'
|
|
20
|
+
| 'extensionSurfaces'
|
|
21
|
+
| 'factSources'
|
|
22
|
+
>
|
|
23
|
+
|
|
24
|
+
export type FactSourceLookup = (kind: ModuleFactSourceKind, id: string) => ModuleFactSourceRef | null
|
|
25
|
+
|
|
26
|
+
function identityKey(left: string, right: string): string {
|
|
27
|
+
return JSON.stringify([left, right])
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Fact sections that do not serialize a source inline: their provenance lives in
|
|
32
|
+
* `factSources` under the mapped kind, so a `factRef` into them resolves with one
|
|
33
|
+
* extra hop. Used by `fact-ref` extension hosts, which reference the fact they
|
|
34
|
+
* expose rather than a declaration of their own.
|
|
35
|
+
*/
|
|
36
|
+
const SECTION_FACT_KINDS: Record<string, ModuleFactSourceKind> = {
|
|
37
|
+
entities: 'entity',
|
|
38
|
+
events: 'event',
|
|
39
|
+
aclFeatures: 'acl-feature',
|
|
40
|
+
notifications: 'notification',
|
|
41
|
+
searchEntities: 'search',
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Builds the single provenance lookup every consumer uses. `factSources` entries
|
|
46
|
+
* carrying an inline `source` resolve directly; `factRef` entries are followed
|
|
47
|
+
* into the fact section that already serializes the declaration site, so every
|
|
48
|
+
* proven `(kind, id)` resolves deterministically without duplicated payloads.
|
|
49
|
+
*/
|
|
50
|
+
export function buildFactSourceLookup(facts: FactSourceLookupInput): FactSourceLookup {
|
|
51
|
+
const bySection = new Map<string, ModuleFactSourceRef>()
|
|
52
|
+
const register = (factSection: string, factKey: string, source: ModuleFactSourceRef): void => {
|
|
53
|
+
bySection.set(identityKey(factSection, factKey), source)
|
|
54
|
+
}
|
|
55
|
+
for (const route of facts.apiRoutes ?? []) {
|
|
56
|
+
if (route.sourcePath) register('apiRoutes', route.path, { sourcePath: route.sourcePath })
|
|
57
|
+
}
|
|
58
|
+
for (const command of facts.cliCommands ?? []) {
|
|
59
|
+
register('cliCommands', command.command, { sourcePath: command.sourcePath })
|
|
60
|
+
}
|
|
61
|
+
for (const page of facts.backendPages ?? []) register('backendPages', page.path, { sourcePath: page.sourcePath })
|
|
62
|
+
for (const page of facts.frontendPages ?? []) register('frontendPages', page.path, { sourcePath: page.sourcePath })
|
|
63
|
+
for (const tool of facts.aiTools ?? []) register('aiTools', tool.name, { sourcePath: tool.sourcePath })
|
|
64
|
+
for (const agent of facts.aiAgents ?? []) register('aiAgents', agent.id, { sourcePath: agent.sourcePath })
|
|
65
|
+
for (const [kind, ownedFacts] of Object.entries(facts.ownedContracts ?? {})) {
|
|
66
|
+
for (const fact of ownedFacts ?? []) register(`ownedContracts.${kind}`, fact.id, fact.source)
|
|
67
|
+
}
|
|
68
|
+
for (const contribution of facts.extensionSurfaces?.contributions ?? []) {
|
|
69
|
+
register('extensionSurfaces.contributions', contribution.id, { sourcePath: contribution.source.path })
|
|
70
|
+
}
|
|
71
|
+
const factRefHostTargets = new Map<string, { factSection: string; factKey: string }>()
|
|
72
|
+
for (const host of facts.extensionSurfaces?.hosts ?? []) {
|
|
73
|
+
if (host.source.kind === 'fact-ref') {
|
|
74
|
+
factRefHostTargets.set(host.key, { factSection: host.source.factSection, factKey: host.source.factKey })
|
|
75
|
+
continue
|
|
76
|
+
}
|
|
77
|
+
register('extensionSurfaces.hosts', host.key, { sourcePath: host.source.path })
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const entries = new Map<string, { source?: ModuleFactSourceRef; factSection?: string; factKey?: string }>()
|
|
81
|
+
for (const entry of facts.factSources ?? []) {
|
|
82
|
+
entries.set(identityKey(entry.kind, entry.id), {
|
|
83
|
+
...(entry.source ? { source: entry.source } : {}),
|
|
84
|
+
...(entry.factRef ? { factSection: entry.factRef.factSection, factKey: entry.factRef.factKey } : {}),
|
|
85
|
+
})
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const resolve = (kind: ModuleFactSourceKind, id: string, depth: number): ModuleFactSourceRef | null => {
|
|
89
|
+
if (depth > 2) return null
|
|
90
|
+
const entry = entries.get(identityKey(kind, id))
|
|
91
|
+
if (!entry) return null
|
|
92
|
+
if (entry.source) return entry.source
|
|
93
|
+
if (entry.factSection === undefined) return null
|
|
94
|
+
const factKey = entry.factKey ?? id
|
|
95
|
+
const direct = bySection.get(identityKey(entry.factSection, factKey))
|
|
96
|
+
if (direct) return direct
|
|
97
|
+
if (entry.factSection === 'extensionSurfaces.hosts') {
|
|
98
|
+
const hostTarget = factRefHostTargets.get(factKey)
|
|
99
|
+
const hostKind = hostTarget ? SECTION_FACT_KINDS[hostTarget.factSection] : undefined
|
|
100
|
+
if (hostTarget && hostKind) return resolve(hostKind, hostTarget.factKey, depth + 1)
|
|
101
|
+
if (hostTarget) return bySection.get(identityKey(hostTarget.factSection, hostTarget.factKey)) ?? null
|
|
102
|
+
}
|
|
103
|
+
const sectionKind = SECTION_FACT_KINDS[entry.factSection]
|
|
104
|
+
return sectionKind ? resolve(sectionKind, factKey, depth + 1) : null
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return (kind, id) => resolve(kind, id, 0)
|
|
108
|
+
}
|
|
@@ -29,13 +29,59 @@ export function hasReadableModuleSource(moduleRoot: string): boolean {
|
|
|
29
29
|
return false
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
function
|
|
33
|
-
|
|
32
|
+
function resolveDuplicateModuleIds(
|
|
33
|
+
sources: ModuleFactSource[],
|
|
34
|
+
resolver: PackageResolver,
|
|
35
|
+
): ModuleFactSource[] {
|
|
36
|
+
const sourcesByModule = new Map<string, ModuleFactSource[]>()
|
|
37
|
+
for (const source of sources) {
|
|
38
|
+
const matches = sourcesByModule.get(source.moduleId) ?? []
|
|
39
|
+
matches.push(source)
|
|
40
|
+
sourcesByModule.set(source.moduleId, matches)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const duplicates = [...sourcesByModule.entries()].filter(([, matches]) => matches.length > 1)
|
|
44
|
+
if (duplicates.length === 0) return sources
|
|
45
|
+
|
|
46
|
+
const selectedProviders = new Map<string, Set<string>>()
|
|
47
|
+
const implicitCoreSelections = new Set<string>()
|
|
48
|
+
for (const entry of resolver.loadEnabledModules()) {
|
|
49
|
+
const providers = selectedProviders.get(entry.id) ?? new Set<string>()
|
|
50
|
+
providers.add(entry.from ?? '@open-mercato/core')
|
|
51
|
+
selectedProviders.set(entry.id, providers)
|
|
52
|
+
if (entry.from === undefined) implicitCoreSelections.add(entry.id)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const selectedSources = new Map<string, ModuleFactSource>()
|
|
56
|
+
for (const [moduleId, matches] of duplicates) {
|
|
57
|
+
const providers = [...new Set(matches.map((source) => source.from ?? '<unknown>'))]
|
|
58
|
+
.sort((left, right) => left.localeCompare(right))
|
|
59
|
+
const configuredProviders = [...(selectedProviders.get(moduleId) ?? [])]
|
|
60
|
+
.sort((left, right) => left.localeCompare(right))
|
|
61
|
+
const selected = configuredProviders.length === 1
|
|
62
|
+
? matches.filter((source) => source.from === configuredProviders[0])
|
|
63
|
+
: []
|
|
64
|
+
|
|
65
|
+
if (selected.length !== 1) {
|
|
66
|
+
const configured = configuredProviders.length > 0
|
|
67
|
+
? implicitCoreSelections.has(moduleId)
|
|
68
|
+
? '; src/modules.ts omits "from", which defaults to @open-mercato/core'
|
|
69
|
+
: `; src/modules.ts selects ${configuredProviders.join(', ')}`
|
|
70
|
+
: '; src/modules.ts does not select a provider'
|
|
71
|
+
throw new Error(
|
|
72
|
+
`[module-facts] duplicate module id "${moduleId}" is provided by ${providers.join(', ')}${configured}. `
|
|
73
|
+
+ 'Select exactly one matching provider in src/modules.ts.',
|
|
74
|
+
)
|
|
75
|
+
}
|
|
76
|
+
selectedSources.set(moduleId, selected[0])
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const emitted = new Set<string>()
|
|
34
80
|
const result: ModuleFactSource[] = []
|
|
35
81
|
for (const source of sources) {
|
|
36
|
-
if (
|
|
37
|
-
|
|
38
|
-
result.push(source)
|
|
82
|
+
if (emitted.has(source.moduleId)) continue
|
|
83
|
+
emitted.add(source.moduleId)
|
|
84
|
+
result.push(selectedSources.get(source.moduleId) ?? source)
|
|
39
85
|
}
|
|
40
86
|
return result
|
|
41
87
|
}
|
|
@@ -51,8 +97,13 @@ export function discoverPackageModuleSources(resolver: PackageResolver): ModuleF
|
|
|
51
97
|
for (const discovered of discoverModulesInPackage(pkg.path)) {
|
|
52
98
|
const moduleRoot = path.join(pkg.modulesPath, discovered.moduleId)
|
|
53
99
|
if (!hasReadableModuleSource(moduleRoot)) continue
|
|
54
|
-
sources.push({
|
|
100
|
+
sources.push({
|
|
101
|
+
moduleId: discovered.moduleId,
|
|
102
|
+
moduleRoot,
|
|
103
|
+
from: pkg.name,
|
|
104
|
+
packageVersion: pkg.version ?? null,
|
|
105
|
+
})
|
|
55
106
|
}
|
|
56
107
|
}
|
|
57
|
-
return
|
|
108
|
+
return resolveDuplicateModuleIds(sources, resolver)
|
|
58
109
|
}
|