@open-mercato/cli 0.6.7 → 0.6.8-canary.319.1.5b4be4bc52
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 +77 -4
- package/build.mjs +68 -11
- 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 +84 -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 +116757 -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 +482 -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 +305 -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 +149 -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 +168 -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 +687 -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 +372 -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 +469 -47
- package/dist/agentic/guides/modules/workflows.md +302 -43
- package/dist/agentic/guides/reference-module-facts.json +6370 -0
- package/dist/agentic/guides/reference-modules/example.md +451 -0
- package/dist/agentic/guides/spec-delivery.md +42 -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 +120 -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 +15050 -0
- package/dist/agentic/shared/ai/harness/cases.schema.json +188 -0
- package/dist/agentic/shared/ai/harness/fixtures/index.json +51 -0
- package/dist/agentic/shared/ai/harness/fixtures/seeds.json +166 -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/knowledge-change.schema.json +228 -0
- package/dist/agentic/shared/ai/harness/release-matrix.json +163 -0
- package/dist/agentic/shared/ai/harness/release-result.schema.json +219 -0
- package/dist/agentic/shared/ai/harness/result.schema.json +109 -0
- package/dist/agentic/shared/ai/harness/routing-response.schema.json +22 -0
- package/dist/agentic/shared/ai/harness/target-validation-result.schema.json +73 -0
- package/dist/agentic/shared/ai/harness/validators.json +82 -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/harness/writable-spec-oracles.mjs +412 -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 +21 -241
- package/dist/agentic/shared/ai/skills/om-backend-ui-design/references/crud-surfaces.md +31 -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 +15 -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 +17 -601
- package/dist/agentic/shared/ai/skills/om-data-model-design/references/integrity-and-concurrency.md +21 -0
- package/dist/agentic/shared/ai/skills/om-data-model-design/references/migration-workflow.md +15 -0
- package/dist/agentic/shared/ai/skills/om-data-model-design/references/schema-design.md +16 -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 +15 -310
- package/dist/agentic/shared/ai/skills/om-eject-and-customize/references/decision-and-procedure.md +19 -0
- package/dist/agentic/shared/ai/skills/om-evolve-harness/SKILL.md +31 -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/knowledge-change.md +115 -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 +25 -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 +25 -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 +32 -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 +14 -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 +40 -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 +20 -843
- package/dist/agentic/shared/ai/skills/om-system-extension/references/extension-branches.md +42 -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 +43 -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 +17 -467
- package/dist/agentic/shared/ai/skills/om-troubleshooter/references/diagnosis-map.md +29 -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 +224 -0
- package/dist/agentic/shared/scripts/check-lessons.mjs +178 -0
- package/dist/agentic/shared/scripts/evaluate-agent-harness.mjs +3585 -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/agentic/shared/scripts/validate-knowledge-change.mjs +911 -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 +1872 -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 +64 -7
- package/dist/lib/generators/module-facts-discovery.js.map +2 -2
- package/dist/lib/generators/module-facts.js +1629 -52
- 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 -2
- 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 +603 -0
- package/src/lib/generators/__tests__/module-facts.bc-guard.test.ts +139 -2
- package/src/lib/generators/__tests__/module-facts.computed-di-token.test.ts +88 -0
- 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.local-reference.test.ts +391 -0
- package/src/lib/generators/__tests__/module-facts.owned-contracts.test.ts +561 -0
- package/src/lib/generators/__tests__/module-facts.search-entity-id.test.ts +151 -0
- package/src/lib/generators/__tests__/module-facts.source-links.test.ts +160 -0
- package/src/lib/generators/__tests__/module-override-targets.roundtrip.test.ts +149 -0
- package/src/lib/generators/__tests__/module-override-targets.test.ts +328 -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 +2433 -0
- package/src/lib/generators/module-fact-sources.ts +108 -0
- package/src/lib/generators/module-facts-discovery.ts +104 -7
- package/src/lib/generators/module-facts.ts +2387 -138
- 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 -2
- 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,59 @@ 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)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/** App-local modules always live under this app-root-relative directory. */
|
|
112
|
+
export const LOCAL_MODULES_DIRECTORY = path.posix.join('src', 'modules')
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Locates an app-local module that is projected into the reference bundle rather than the
|
|
116
|
+
* normal package outputs. `appRoot` is the directory containing `src/modules` — the
|
|
117
|
+
* create-app template root at build time, the generated app root at scaffold and
|
|
118
|
+
* `agentic:init` time — so the same module yields the same portable `src/modules/<id>`
|
|
119
|
+
* provenance from every root. Returns `null` when the module is absent or is not readable
|
|
120
|
+
* TypeScript source, because a reference bundle built from an unreadable root would claim
|
|
121
|
+
* an empty surface rather than fail.
|
|
122
|
+
*/
|
|
123
|
+
export function discoverLocalReferenceModuleSource(options: {
|
|
124
|
+
appRoot: string
|
|
125
|
+
moduleId: string
|
|
126
|
+
}): ModuleFactSource | null {
|
|
127
|
+
const moduleRoot = path.join(options.appRoot, 'src', 'modules', options.moduleId)
|
|
128
|
+
if (!hasReadableModuleSource(moduleRoot)) return null
|
|
129
|
+
return {
|
|
130
|
+
moduleId: options.moduleId,
|
|
131
|
+
moduleRoot,
|
|
132
|
+
portableSourceRoot: path.posix.join(LOCAL_MODULES_DIRECTORY, options.moduleId),
|
|
133
|
+
sourceKind: 'local-reference',
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Appends the local reference source to the package batch, rejecting a duplicate module
|
|
139
|
+
* id *before* assignment. A package that already provides the same id would otherwise be
|
|
140
|
+
* silently replaced by (or silently replace) the app-local projection, and the emitted
|
|
141
|
+
* bundle would attribute one module's surfaces to the other's source tree.
|
|
142
|
+
*/
|
|
143
|
+
export function appendLocalReferenceModuleSource(
|
|
144
|
+
packageSources: readonly ModuleFactSource[],
|
|
145
|
+
reference: ModuleFactSource,
|
|
146
|
+
): ModuleFactSource[] {
|
|
147
|
+
const conflict = packageSources.find((source) => source.moduleId === reference.moduleId)
|
|
148
|
+
if (conflict) {
|
|
149
|
+
throw new Error(
|
|
150
|
+
`[module-facts] local reference module "${reference.moduleId}" collides with the module provided by `
|
|
151
|
+
+ `${conflict.from ?? '<unknown package>'}. Rename the app-local module or remove the package providing it.`,
|
|
152
|
+
)
|
|
153
|
+
}
|
|
154
|
+
return [...packageSources, reference]
|
|
58
155
|
}
|