@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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@open-mercato/cli",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.8-canary.319.1.5b4be4bc52",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -56,12 +56,13 @@
|
|
|
56
56
|
"node": "24.x"
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
|
-
"@mikro-orm/core": "^7.1.
|
|
60
|
-
"@mikro-orm/decorators": "^7.1.
|
|
61
|
-
"@mikro-orm/migrations": "^7.1.
|
|
62
|
-
"@mikro-orm/postgresql": "^7.1.
|
|
63
|
-
"@open-mercato/queue": "0.6.
|
|
64
|
-
"@open-mercato/shared": "0.6.
|
|
59
|
+
"@mikro-orm/core": "^7.1.8",
|
|
60
|
+
"@mikro-orm/decorators": "^7.1.8",
|
|
61
|
+
"@mikro-orm/migrations": "^7.1.8",
|
|
62
|
+
"@mikro-orm/postgresql": "^7.1.8",
|
|
63
|
+
"@open-mercato/queue": "0.6.8-canary.319.1.5b4be4bc52",
|
|
64
|
+
"@open-mercato/shared": "0.6.8-canary.319.1.5b4be4bc52",
|
|
65
|
+
"@open-mercato/telemetry": "0.6.8-canary.319.1.5b4be4bc52",
|
|
65
66
|
"cross-spawn": "^7.0.6",
|
|
66
67
|
"pg": "8.22.0",
|
|
67
68
|
"semver": "^7.8.5",
|
|
@@ -72,13 +73,13 @@
|
|
|
72
73
|
"typescript-js": "npm:typescript@6.0.3"
|
|
73
74
|
},
|
|
74
75
|
"peerDependencies": {
|
|
75
|
-
"@open-mercato/shared": "0.6.
|
|
76
|
+
"@open-mercato/shared": "0.6.8-canary.319.1.5b4be4bc52"
|
|
76
77
|
},
|
|
77
78
|
"devDependencies": {
|
|
78
|
-
"@open-mercato/shared": "0.6.
|
|
79
|
+
"@open-mercato/shared": "0.6.8-canary.319.1.5b4be4bc52",
|
|
79
80
|
"@types/jest": "^30.0.0",
|
|
80
81
|
"jest": "^30.4.2",
|
|
81
|
-
"ts-jest": "^29.4.
|
|
82
|
+
"ts-jest": "^29.4.12"
|
|
82
83
|
},
|
|
83
84
|
"publishConfig": {
|
|
84
85
|
"access": "public"
|
|
@@ -87,5 +88,6 @@
|
|
|
87
88
|
"type": "git",
|
|
88
89
|
"url": "https://github.com/open-mercato/open-mercato",
|
|
89
90
|
"directory": "packages/cli"
|
|
90
|
-
}
|
|
91
|
+
},
|
|
92
|
+
"stableVersion": "0.6.7"
|
|
91
93
|
}
|
package/src/bin.ts
CHANGED
|
@@ -4,7 +4,12 @@
|
|
|
4
4
|
* Called from within a Next.js app directory as: yarn mercato <command>
|
|
5
5
|
* Uses dynamic app resolution to find generated files at .mercato/generated/
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
getTelemetryRuntime,
|
|
9
|
+
isTelemetryBackendEnabled,
|
|
10
|
+
} from '@open-mercato/shared/lib/telemetry/runtime'
|
|
11
|
+
// `run` is imported dynamically inside `main()` so telemetry can initialize
|
|
12
|
+
// before the mercato entry (and its Postgres driver) loads — see main().
|
|
8
13
|
|
|
9
14
|
// Commands that can run without bootstrap (without generated files)
|
|
10
15
|
// - generate: creates the generated files
|
|
@@ -18,6 +23,7 @@ const BOOTSTRAP_FREE_COMMANDS = [
|
|
|
18
23
|
'db',
|
|
19
24
|
'init',
|
|
20
25
|
'agentic:init',
|
|
26
|
+
'telemetry',
|
|
21
27
|
'eject',
|
|
22
28
|
'test',
|
|
23
29
|
'test:integration',
|
|
@@ -85,6 +91,26 @@ async function main(): Promise<void> {
|
|
|
85
91
|
const requiresBootstrap = needsBootstrap(process.argv)
|
|
86
92
|
|
|
87
93
|
if (requiresBootstrap) {
|
|
94
|
+
// Load the app's `.env` BEFORE initTelemetry(): `run()` only dotenv-loads it
|
|
95
|
+
// later (ensureEnvLoaded), which is too late — TELEMETRY_BACKEND set only in
|
|
96
|
+
// `.env` would silently resolve to `noop` for worker/scheduler processes.
|
|
97
|
+
// The loader touches only the resolver + dotenv (no `pg`), preserving the
|
|
98
|
+
// instrumentation load-order guarantee below.
|
|
99
|
+
const { loadAppEnv } = await import('./lib/load-env.js')
|
|
100
|
+
await loadAppEnv()
|
|
101
|
+
|
|
102
|
+
// Initialize telemetry BEFORE bootstrapping the app graph. Bootstrap and the
|
|
103
|
+
// per-command handlers load MikroORM's Postgres driver → `pg`, and the
|
|
104
|
+
// OpenTelemetry pg/undici auto-instrumentation only records spans for a
|
|
105
|
+
// driver required AFTER the SDK has started. Registering here — ahead of any
|
|
106
|
+
// app module — is what lets long-running worker/scheduler processes emit DB
|
|
107
|
+
// spans (not just the bullmq-otel add/process envelope). The package itself
|
|
108
|
+
// is not imported unless an explicit supported backend is selected.
|
|
109
|
+
if (isTelemetryBackendEnabled()) {
|
|
110
|
+
const { initTelemetry } = await import('@open-mercato/telemetry')
|
|
111
|
+
await initTelemetry()
|
|
112
|
+
}
|
|
113
|
+
|
|
88
114
|
const bootstrapSucceeded = await tryBootstrap()
|
|
89
115
|
if (!bootstrapSucceeded) {
|
|
90
116
|
console.error('╔═══════════════════════════════════════════════════════════════════╗')
|
|
@@ -100,7 +126,13 @@ async function main(): Promise<void> {
|
|
|
100
126
|
}
|
|
101
127
|
}
|
|
102
128
|
|
|
129
|
+
// Dynamic import (not a top-level static import) so the mercato entry — and the
|
|
130
|
+
// Postgres driver it pulls in — loads only after initTelemetry() above.
|
|
131
|
+
const { run } = await import('./mercato.js')
|
|
103
132
|
const code = await run(process.argv)
|
|
133
|
+
// Flush spans/logs for commands that return (workers block forever and flush via
|
|
134
|
+
// their own shutdown handler instead).
|
|
135
|
+
await getTelemetryRuntime()?.shutdown()
|
|
104
136
|
process.exit(code ?? 0)
|
|
105
137
|
}
|
|
106
138
|
|
|
@@ -14,6 +14,8 @@ const cliIntegrationRunnerPath = path.join(cliDir, 'src', 'lib', 'testing', 'int
|
|
|
14
14
|
const standaloneTemplatePackageJsonPath = path.join(repoRoot, 'packages', 'create-app', 'template', 'package.json.template')
|
|
15
15
|
const agenticRoot = path.join(repoRoot, 'packages', 'create-app', 'agentic')
|
|
16
16
|
const packagesRoot = path.join(repoRoot, 'packages')
|
|
17
|
+
const coreVersion = JSON.parse(fs.readFileSync(path.join(packagesRoot, 'core', 'package.json'), 'utf8')).version as string
|
|
18
|
+
const UNROUTED_PACKAGE_GUIDES = new Set(['cache', 'core', 'events', 'queue', 'search', 'shared', 'ui'])
|
|
17
19
|
|
|
18
20
|
// Modules the standalone fixture enables in src/modules.ts. Both are on the
|
|
19
21
|
// fact-sheet allowlist, so agentic:init must ship exactly their fact-sheets
|
|
@@ -24,7 +26,7 @@ function normalizePath(value: string): string {
|
|
|
24
26
|
return value.split(path.sep).join('/')
|
|
25
27
|
}
|
|
26
28
|
|
|
27
|
-
function runCommand(command: string, args: string[], cwd: string): string {
|
|
29
|
+
function runCommand(command: string, args: string[], cwd: string, env: NodeJS.ProcessEnv = {}): string {
|
|
28
30
|
return execFileSync(command, args, {
|
|
29
31
|
cwd,
|
|
30
32
|
encoding: 'utf8',
|
|
@@ -36,6 +38,7 @@ function runCommand(command: string, args: string[], cwd: string): string {
|
|
|
36
38
|
// whose external step (`npx skills add`) needs the network. Local tier
|
|
37
39
|
// symlinks are still installed.
|
|
38
40
|
OM_SKIP_EXTERNAL_SKILLS: '1',
|
|
41
|
+
...env,
|
|
39
42
|
},
|
|
40
43
|
})
|
|
41
44
|
}
|
|
@@ -61,16 +64,48 @@ function createStandaloneFixture(rootDir: string): string {
|
|
|
61
64
|
{
|
|
62
65
|
name: 'sample-store',
|
|
63
66
|
private: true,
|
|
67
|
+
dependencies: { '@open-mercato/core': coreVersion },
|
|
64
68
|
},
|
|
65
69
|
null,
|
|
66
70
|
2,
|
|
67
71
|
),
|
|
68
72
|
)
|
|
69
|
-
const moduleEntries = FIXTURE_ENABLED_MODULES
|
|
73
|
+
const moduleEntries = FIXTURE_ENABLED_MODULES
|
|
74
|
+
.map((moduleId) => ` { id: '${moduleId}', from: '@open-mercato/core' },`)
|
|
75
|
+
.join('\n')
|
|
70
76
|
writeFile(path.join(appDir, 'src', 'modules.ts'), `export const enabledModules = [\n${moduleEntries}\n]\n`)
|
|
71
77
|
return appDir
|
|
72
78
|
}
|
|
73
79
|
|
|
80
|
+
function installFakeFrameworkPackage(appDir: string): string {
|
|
81
|
+
const packageRoot = path.join(appDir, 'node_modules', '@open-mercato', 'core')
|
|
82
|
+
writeFile(path.join(packageRoot, 'package.json'), JSON.stringify({
|
|
83
|
+
name: '@open-mercato/core',
|
|
84
|
+
version: coreVersion,
|
|
85
|
+
type: 'module',
|
|
86
|
+
exports: { '.': './dist/index.js' },
|
|
87
|
+
}))
|
|
88
|
+
writeFile(path.join(packageRoot, 'dist', 'index.js'), 'export {}\n')
|
|
89
|
+
writeFile(path.join(packageRoot, 'AGENTS.md'), '# Installed core instructions\n')
|
|
90
|
+
for (const moduleId of FIXTURE_ENABLED_MODULES) {
|
|
91
|
+
writeFile(path.join(packageRoot, 'src', 'modules', moduleId, 'AGENTS.md'), `# Installed ${moduleId} instructions\n`)
|
|
92
|
+
writeFile(
|
|
93
|
+
path.join(packageRoot, 'src', 'modules', moduleId, 'data', 'entities.ts'),
|
|
94
|
+
`export class ${moduleId === 'customers' ? 'Person' : 'Sale'} {}\n`,
|
|
95
|
+
)
|
|
96
|
+
}
|
|
97
|
+
return packageRoot
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function snapshotTextFiles(rootDir: string): Record<string, string> {
|
|
101
|
+
return Object.fromEntries(
|
|
102
|
+
listRelativeFiles(rootDir).map((relativePath) => [
|
|
103
|
+
relativePath,
|
|
104
|
+
fs.readFileSync(path.join(rootDir, relativePath), 'utf8'),
|
|
105
|
+
]),
|
|
106
|
+
)
|
|
107
|
+
}
|
|
108
|
+
|
|
74
109
|
function listRelativeFiles(rootDir: string): string[] {
|
|
75
110
|
if (!fs.existsSync(rootDir)) {
|
|
76
111
|
return []
|
|
@@ -194,7 +229,7 @@ function expectedGuideOutputNames(): string[] {
|
|
|
194
229
|
|
|
195
230
|
for (const packageName of fs.readdirSync(packagesRoot)) {
|
|
196
231
|
const packageGuide = path.join(packagesRoot, packageName, 'agentic', 'standalone-guide.md')
|
|
197
|
-
if (fs.existsSync(packageGuide)) {
|
|
232
|
+
if (fs.existsSync(packageGuide) && !UNROUTED_PACKAGE_GUIDES.has(packageName)) {
|
|
198
233
|
collected.add(`${packageName}.md`)
|
|
199
234
|
}
|
|
200
235
|
|
|
@@ -214,8 +249,14 @@ function expectedGuideOutputNames(): string[] {
|
|
|
214
249
|
// Generated fact-sheet artifacts (spec 2026-06-27-ts-morph-module-fact-sheets):
|
|
215
250
|
// the module-facts.json sidecar is copied as-is and fact-sheets are filtered to the
|
|
216
251
|
// fixture's enabled modules. The legacy core.<module>.md redirect stubs are no longer
|
|
217
|
-
// emitted (#3754).
|
|
252
|
+
// emitted (#3754). framework-extension-points.md is likewise generated into
|
|
253
|
+
// dist/agentic/guides by both build.mjs pipelines (#4810) rather than checked in
|
|
254
|
+
// alongside the static conceptual guides, so it needs an explicit entry here.
|
|
218
255
|
collected.add('module-facts.json')
|
|
256
|
+
collected.add('framework-extension-points.md')
|
|
257
|
+
collected.add('upstream/AGENTS.md')
|
|
258
|
+
collected.add('upstream/BACKWARD_COMPATIBILITY.md')
|
|
259
|
+
collected.add('upstream/manifest.json')
|
|
219
260
|
for (const moduleId of FIXTURE_ENABLED_MODULES) {
|
|
220
261
|
collected.add(normalizePath(path.join('modules', `${moduleId}.md`)))
|
|
221
262
|
}
|
|
@@ -262,14 +303,17 @@ test.describe('TC-INT-008: CLI agentic init mirrors standalone scaffolding asset
|
|
|
262
303
|
|
|
263
304
|
const agentsSource = fs.readFileSync(path.join(appDir, 'AGENTS.md'), 'utf8')
|
|
264
305
|
expect(agentsSource).toContain('<!-- CODEX_ENFORCEMENT_RULES_START -->')
|
|
265
|
-
expect(agentsSource).toContain('.ai/guides/
|
|
306
|
+
expect(agentsSource).toContain('.ai/guides/upstream/BACKWARD_COMPATIBILITY.md')
|
|
266
307
|
|
|
267
|
-
// The Module-Specific Guides marker block
|
|
268
|
-
//
|
|
308
|
+
// The Module-Specific Guides marker block is a compact enabled-module ID
|
|
309
|
+
// index (enabled ∩ bundled) plus one progressively loaded path pattern.
|
|
269
310
|
for (const moduleId of FIXTURE_ENABLED_MODULES) {
|
|
270
|
-
expect(agentsSource).toContain(
|
|
311
|
+
expect(agentsSource).toContain(`\`${moduleId}\``)
|
|
271
312
|
}
|
|
272
|
-
expect(agentsSource).
|
|
313
|
+
expect(agentsSource).toContain('`.ai/guides/modules/<id>.md`')
|
|
314
|
+
expect(agentsSource.match(/\.ai\/guides\/modules\//g)).toHaveLength(1)
|
|
315
|
+
expect(agentsSource).not.toContain('`auth`')
|
|
316
|
+
expect(agentsSource).not.toContain('Core CRM capabilities')
|
|
273
317
|
|
|
274
318
|
const specsReadmeSource = fs.readFileSync(path.join(appDir, '.ai', 'specs', 'README.md'), 'utf8')
|
|
275
319
|
expect(specsReadmeSource).toContain('sample-store')
|
|
@@ -308,4 +352,58 @@ test.describe('TC-INT-008: CLI agentic init mirrors standalone scaffolding asset
|
|
|
308
352
|
fs.rmSync(tempRoot, { recursive: true, force: true })
|
|
309
353
|
}
|
|
310
354
|
})
|
|
355
|
+
|
|
356
|
+
test('emits a runnable exact-version framework context escape hatch for an installed package', () => {
|
|
357
|
+
const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'mercato-cli-framework-context-'))
|
|
358
|
+
|
|
359
|
+
try {
|
|
360
|
+
const appDir = createStandaloneFixture(tempRoot)
|
|
361
|
+
const packageRoot = installFakeFrameworkPackage(appDir)
|
|
362
|
+
const resolvedPackageRoot = fs.realpathSync(packageRoot)
|
|
363
|
+
const packageBefore = snapshotTextFiles(packageRoot)
|
|
364
|
+
|
|
365
|
+
runMercato(['agentic:init', '--tool=codex'], appDir)
|
|
366
|
+
const generatedScript = path.join(appDir, 'scripts', 'framework-context.mjs')
|
|
367
|
+
expect(fs.existsSync(generatedScript)).toBe(true)
|
|
368
|
+
|
|
369
|
+
const output = runCommand(
|
|
370
|
+
process.execPath,
|
|
371
|
+
[generatedScript, '--module', 'customers', '--query', 'Person', '--json'],
|
|
372
|
+
appDir,
|
|
373
|
+
// The generated standalone helper must not depend on a globally
|
|
374
|
+
// installed ripgrep binary; process.execPath is already absolute.
|
|
375
|
+
{ PATH: '', Path: '' },
|
|
376
|
+
)
|
|
377
|
+
const context = JSON.parse(output) as {
|
|
378
|
+
module: string
|
|
379
|
+
package: { name: string; version: string; root: string }
|
|
380
|
+
sourceKind: string
|
|
381
|
+
sourceRoot: string
|
|
382
|
+
materializedSource: string
|
|
383
|
+
instructions: Array<{ kind: string; path: string | null; materializedPath?: string }>
|
|
384
|
+
boundedSearch: { status: string; matches: number; maxMatches: number; result: string }
|
|
385
|
+
warnings: string[]
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
expect(context.module).toBe('customers')
|
|
389
|
+
expect(context.package).toEqual({ name: '@open-mercato/core', version: coreVersion, root: resolvedPackageRoot })
|
|
390
|
+
expect(context.sourceKind).toBe('source')
|
|
391
|
+
expect(normalizePath(context.sourceRoot)).toBe(normalizePath(path.join(resolvedPackageRoot, 'src', 'modules', 'customers')))
|
|
392
|
+
expect(context.instructions.filter((entry) => entry.path).map((entry) => entry.kind)).toEqual([
|
|
393
|
+
'standalone-root',
|
|
394
|
+
'upstream-bc',
|
|
395
|
+
'package',
|
|
396
|
+
'module-1',
|
|
397
|
+
'upstream-root',
|
|
398
|
+
])
|
|
399
|
+
expect(context.instructions.filter((entry) => entry.path).every((entry) => entry.materializedPath)).toBe(true)
|
|
400
|
+
expect(context.boundedSearch).toMatchObject({ status: 'matched', matches: 1, maxMatches: 200 })
|
|
401
|
+
expect(fs.existsSync(path.join(appDir, context.materializedSource))).toBe(true)
|
|
402
|
+
expect(fs.existsSync(path.join(appDir, context.boundedSearch.result))).toBe(true)
|
|
403
|
+
expect(context.warnings.some((warning) => warning.includes('Generated facts for customers are stale'))).toBe(false)
|
|
404
|
+
expect(snapshotTextFiles(packageRoot)).toEqual(packageBefore)
|
|
405
|
+
} finally {
|
|
406
|
+
fs.rmSync(tempRoot, { recursive: true, force: true })
|
|
407
|
+
}
|
|
408
|
+
})
|
|
311
409
|
})
|
|
@@ -17,7 +17,11 @@ const loadRunAgenticInit = async ({
|
|
|
17
17
|
}: {
|
|
18
18
|
existingPaths: Set<string>
|
|
19
19
|
questionAnswer?: string
|
|
20
|
-
runAgenticSetupImplementation?: (
|
|
20
|
+
runAgenticSetupImplementation?: (
|
|
21
|
+
targetDir: string,
|
|
22
|
+
ask: (question: string) => Promise<string>,
|
|
23
|
+
options?: { tool?: string; force?: boolean; updateHarness?: boolean },
|
|
24
|
+
) => Promise<void>
|
|
21
25
|
}): Promise<AgenticInitTestContext> => {
|
|
22
26
|
jest.resetModules()
|
|
23
27
|
|
|
@@ -136,6 +140,22 @@ describe('runAgenticInit', () => {
|
|
|
136
140
|
expect(testContext.runAgenticSetup).not.toHaveBeenCalled()
|
|
137
141
|
})
|
|
138
142
|
|
|
143
|
+
it('rejects force and ownership-aware update together before setup', async () => {
|
|
144
|
+
const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation()
|
|
145
|
+
const testContext = await loadRunAgenticInit({
|
|
146
|
+
existingPaths: new Set<string>([appModulesPath]),
|
|
147
|
+
})
|
|
148
|
+
|
|
149
|
+
const exitCode = await testContext.runAgenticInit(['--force', '--update-harness'])
|
|
150
|
+
|
|
151
|
+
expect(exitCode).toBe(1)
|
|
152
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith(
|
|
153
|
+
'❌ --force and --update-harness are mutually exclusive',
|
|
154
|
+
)
|
|
155
|
+
expect(testContext.createInterface).not.toHaveBeenCalled()
|
|
156
|
+
expect(testContext.runAgenticSetup).not.toHaveBeenCalled()
|
|
157
|
+
})
|
|
158
|
+
|
|
139
159
|
it('warns and exits early when relevant agentic files already exist without force', async () => {
|
|
140
160
|
const consoleLogSpy = jest.spyOn(console, 'log').mockImplementation()
|
|
141
161
|
const testContext = await loadRunAgenticInit({
|
|
@@ -150,7 +170,7 @@ describe('runAgenticInit', () => {
|
|
|
150
170
|
expect(consoleLogSpy.mock.calls.flat()).toEqual(expect.arrayContaining([
|
|
151
171
|
'⚠️ Agentic files already exist:',
|
|
152
172
|
' • .codex/mcp.json.example',
|
|
153
|
-
'Run with --force to
|
|
173
|
+
'Run with --update-harness to preserve local edits, or --force to replace generated files.',
|
|
154
174
|
]))
|
|
155
175
|
})
|
|
156
176
|
|
|
@@ -160,7 +180,7 @@ describe('runAgenticInit', () => {
|
|
|
160
180
|
questionAnswer: ' cursor ',
|
|
161
181
|
runAgenticSetupImplementation: async (currentTargetDir, ask, options) => {
|
|
162
182
|
expect(currentTargetDir).toBe(targetDir)
|
|
163
|
-
expect(options).toEqual({ tool: undefined, force: undefined })
|
|
183
|
+
expect(options).toEqual({ tool: undefined, force: undefined, updateHarness: undefined })
|
|
164
184
|
await expect(ask('Select a tool')).resolves.toBe('cursor')
|
|
165
185
|
},
|
|
166
186
|
})
|
|
@@ -188,7 +208,7 @@ describe('runAgenticInit', () => {
|
|
|
188
208
|
expect(testContext.runAgenticSetup).toHaveBeenCalledWith(
|
|
189
209
|
targetDir,
|
|
190
210
|
expect.any(Function),
|
|
191
|
-
{ tool: 'codex', force: undefined },
|
|
211
|
+
{ tool: 'codex', force: undefined, updateHarness: undefined },
|
|
192
212
|
)
|
|
193
213
|
expect(consoleLogSpy.mock.calls.flat()).not.toContain('⚠️ Agentic files already exist:')
|
|
194
214
|
expect(testContext.closeInterface).toHaveBeenCalledTimes(1)
|
|
@@ -205,7 +225,23 @@ describe('runAgenticInit', () => {
|
|
|
205
225
|
expect(testContext.runAgenticSetup).toHaveBeenCalledWith(
|
|
206
226
|
targetDir,
|
|
207
227
|
expect.any(Function),
|
|
208
|
-
{ tool: 'codex', force: true },
|
|
228
|
+
{ tool: 'codex', force: true, updateHarness: undefined },
|
|
229
|
+
)
|
|
230
|
+
expect(testContext.closeInterface).toHaveBeenCalledTimes(1)
|
|
231
|
+
})
|
|
232
|
+
|
|
233
|
+
it('bypasses overwrite warnings and requests an ownership-aware update', async () => {
|
|
234
|
+
const testContext = await loadRunAgenticInit({
|
|
235
|
+
existingPaths: new Set<string>([appModulesPath, codexConfigPath]),
|
|
236
|
+
})
|
|
237
|
+
|
|
238
|
+
const exitCode = await testContext.runAgenticInit(['--tool=codex', '--update-harness'])
|
|
239
|
+
|
|
240
|
+
expect(exitCode).toBe(0)
|
|
241
|
+
expect(testContext.runAgenticSetup).toHaveBeenCalledWith(
|
|
242
|
+
targetDir,
|
|
243
|
+
expect.any(Function),
|
|
244
|
+
{ tool: 'codex', force: undefined, updateHarness: true },
|
|
209
245
|
)
|
|
210
246
|
expect(testContext.closeInterface).toHaveBeenCalledTimes(1)
|
|
211
247
|
})
|