@open-mercato/cli 0.6.7-develop.6863.1.61001cf9a8 → 0.6.7
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 +7 -24
- package/dist/agentic/claude-code/hooks/entity-migration-check.ts +88 -32
- package/dist/agentic/codex/enforcement-rules.md +16 -2
- package/dist/agentic/cursor/hooks/entity-migration-check.mjs +50 -19
- package/dist/agentic/cursor/rules/entity-guard.mdc +21 -9
- package/dist/agentic/cursor/rules/generated-guard.mdc +5 -3
- package/dist/agentic/cursor/rules/open-mercato.mdc +29 -3
- package/dist/agentic/guides/cache.md +45 -0
- package/dist/agentic/guides/core.md +453 -0
- package/dist/agentic/guides/events.md +117 -0
- package/dist/agentic/guides/module-facts.json +3833 -115419
- package/dist/agentic/guides/module-system.md +127 -12
- package/dist/agentic/guides/modules/ai_assistant.md +28 -227
- package/dist/agentic/guides/modules/api_docs.md +2 -58
- package/dist/agentic/guides/modules/api_keys.md +7 -92
- package/dist/agentic/guides/modules/attachments.md +14 -119
- package/dist/agentic/guides/modules/audit_logs.md +10 -131
- package/dist/agentic/guides/modules/auth.md +33 -276
- package/dist/agentic/guides/modules/business_rules.md +14 -149
- package/dist/agentic/guides/modules/catalog.md +43 -475
- package/dist/agentic/guides/modules/channel_gmail.md +3 -82
- package/dist/agentic/guides/modules/channel_imap.md +3 -82
- package/dist/agentic/guides/modules/checkout.md +27 -299
- package/dist/agentic/guides/modules/communication_channels.md +33 -315
- package/dist/agentic/guides/modules/configs.md +8 -104
- package/dist/agentic/guides/modules/content.md +2 -57
- package/dist/agentic/guides/modules/currencies.md +17 -152
- package/dist/agentic/guides/modules/customer_accounts.md +45 -387
- package/dist/agentic/guides/modules/customers.md +85 -746
- package/dist/agentic/guides/modules/dashboards.md +10 -155
- package/dist/agentic/guides/modules/data_sync.md +16 -149
- package/dist/agentic/guides/modules/dictionaries.md +12 -107
- package/dist/agentic/guides/modules/directory.md +15 -148
- package/dist/agentic/guides/modules/entities.md +13 -145
- package/dist/agentic/guides/modules/events.md +2 -59
- package/dist/agentic/guides/modules/feature_toggles.md +9 -119
- package/dist/agentic/guides/modules/gateway_stripe.md +4 -92
- package/dist/agentic/guides/modules/generators.md +2 -45
- package/dist/agentic/guides/modules/inbox_ops.md +27 -207
- package/dist/agentic/guides/modules/integrations.md +16 -146
- package/dist/agentic/guides/modules/messages.md +24 -223
- package/dist/agentic/guides/modules/notifications.md +8 -96
- package/dist/agentic/guides/modules/onboarding.md +6 -77
- package/dist/agentic/guides/modules/payment_gateways.md +21 -164
- package/dist/agentic/guides/modules/perspectives.md +7 -77
- package/dist/agentic/guides/modules/planner.md +18 -136
- package/dist/agentic/guides/modules/portal.md +2 -93
- package/dist/agentic/guides/modules/progress.md +14 -104
- package/dist/agentic/guides/modules/query_index.md +15 -154
- package/dist/agentic/guides/modules/record_locks.md +21 -206
- package/dist/agentic/guides/modules/resources.md +30 -197
- package/dist/agentic/guides/modules/sales.md +84 -678
- package/dist/agentic/guides/modules/scheduler.md +14 -133
- package/dist/agentic/guides/modules/search.md +6 -170
- package/dist/agentic/guides/modules/security.md +35 -294
- package/dist/agentic/guides/modules/shipping_carriers.md +18 -134
- package/dist/agentic/guides/modules/sso.md +26 -151
- package/dist/agentic/guides/modules/staff.md +57 -369
- package/dist/agentic/guides/modules/storage_s3.md +5 -95
- package/dist/agentic/guides/modules/sync_akeneo.md +3 -85
- package/dist/agentic/guides/modules/sync_excel.md +6 -75
- package/dist/agentic/guides/modules/system_status_overlays.md +2 -60
- package/dist/agentic/guides/modules/translations.md +10 -104
- package/dist/agentic/guides/modules/webhooks.md +24 -203
- package/dist/agentic/guides/modules/wms.md +46 -441
- package/dist/agentic/guides/modules/workflows.md +43 -302
- package/dist/agentic/guides/queue.md +53 -0
- package/dist/agentic/guides/search.md +115 -0
- package/dist/agentic/guides/shared.md +108 -0
- package/dist/agentic/guides/ui.md +347 -0
- package/dist/agentic/shared/AGENTS.md.template +311 -124
- package/dist/agentic/shared/ai/agentic.config.json +0 -2
- package/dist/agentic/shared/ai/lessons.md +3 -26
- package/dist/agentic/shared/ai/skills/om-auto-continue-pr-loop/SKILL.md +27 -0
- package/dist/agentic/shared/ai/skills/om-auto-create-pr-loop/SKILL.md +27 -0
- package/dist/agentic/shared/ai/skills/om-auto-review-pr/SKILL.md +0 -4
- package/dist/agentic/shared/ai/skills/om-backend-ui-design/SKILL.md +241 -20
- package/dist/agentic/shared/ai/skills/om-backend-ui-design/references/ui-components.md +260 -0
- package/dist/agentic/shared/ai/skills/om-data-model-design/SKILL.md +601 -16
- package/dist/agentic/shared/ai/skills/om-data-model-design/references/mikro-orm-cheatsheet.md +146 -0
- package/dist/agentic/shared/ai/skills/om-eject-and-customize/SKILL.md +310 -14
- package/dist/agentic/shared/ai/skills/om-help/SKILL.md +97 -15
- package/dist/agentic/shared/ai/skills/om-help/references/skills-catalog.md +84 -0
- package/dist/agentic/shared/ai/skills/om-help/references/workflow-sequences.md +193 -0
- package/dist/agentic/shared/ai/skills/om-implement-spec/SKILL.md +152 -33
- package/dist/agentic/shared/ai/skills/om-integration-builder/SKILL.md +708 -24
- package/dist/agentic/shared/ai/skills/om-integration-builder/STANDALONE.md +34 -0
- package/dist/agentic/shared/ai/skills/om-integration-builder/references/adapter-contracts.md +762 -0
- package/dist/agentic/shared/ai/skills/om-module-scaffold/SKILL.md +820 -20
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/naming-conventions.md +50 -0
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/navigation-patterns.md +97 -0
- package/dist/agentic/shared/ai/skills/om-system-extension/SKILL.md +843 -19
- package/dist/agentic/shared/ai/skills/om-system-extension/references/extension-contracts.md +271 -0
- package/dist/agentic/shared/ai/skills/om-trim-unused-modules/SKILL.md +63 -15
- package/dist/agentic/shared/ai/skills/om-troubleshooter/SKILL.md +467 -16
- package/dist/agentic/shared/ai/skills/om-troubleshooter/references/diagnostic-commands.md +101 -0
- package/dist/agentic/shared/ai/skills/tiers.json +21 -143
- package/dist/agentic/shared/ai/skills/tiers.schema.json +40 -52
- package/dist/agentic/shared/ai/specs/README.md +3 -4
- package/dist/agentic/shared/ai/specs/SPEC-000-template.md +10 -226
- package/dist/agentic/shared/ai/trackers/github.md +4 -108
- package/dist/agentic/shared/scripts/install-skills.sh +694 -4
- package/dist/bin.js +1 -13
- package/dist/bin.js.map +2 -2
- package/dist/lib/__integration__/TC-INT-008.spec.js +8 -88
- package/dist/lib/__integration__/TC-INT-008.spec.js.map +2 -2
- package/dist/lib/agentic-init.js +3 -13
- package/dist/lib/agentic-init.js.map +2 -2
- package/dist/lib/agentic-setup.js +186 -418
- package/dist/lib/agentic-setup.js.map +2 -2
- package/dist/lib/generators/extensions/injection-widgets.js +0 -20
- package/dist/lib/generators/extensions/injection-widgets.js.map +2 -2
- package/dist/lib/generators/module-facts-discovery.js +7 -41
- package/dist/lib/generators/module-facts-discovery.js.map +2 -2
- package/dist/lib/generators/module-facts.js +45 -1387
- package/dist/lib/generators/module-facts.js.map +3 -3
- package/dist/lib/generators/module-registry.js +5 -11
- package/dist/lib/generators/module-registry.js.map +2 -2
- package/dist/lib/resolver.js +0 -2
- package/dist/lib/resolver.js.map +2 -2
- package/dist/lib/testing/integration.js +0 -5
- package/dist/lib/testing/integration.js.map +2 -2
- package/dist/mercato.js +1 -23
- package/dist/mercato.js.map +2 -2
- package/package.json +11 -13
- package/src/bin.ts +1 -33
- package/src/lib/__integration__/TC-INT-008.spec.ts +9 -107
- package/src/lib/__tests__/agentic-init.test.ts +5 -41
- package/src/lib/agentic-init.ts +3 -15
- package/src/lib/agentic-setup.ts +224 -530
- package/src/lib/generators/__tests__/module-facts.bc-guard.test.ts +2 -88
- package/src/lib/generators/__tests__/module-facts.customers.fixture.test.ts +0 -1
- package/src/lib/generators/__tests__/module-facts.discovery.test.ts +10 -54
- package/src/lib/generators/__tests__/module-subset.test.ts +0 -18
- package/src/lib/generators/extensions/injection-widgets.ts +0 -51
- package/src/lib/generators/module-facts-discovery.ts +7 -58
- package/src/lib/generators/module-facts.ts +46 -1851
- package/src/lib/generators/module-registry.ts +6 -16
- package/src/lib/resolver.ts +0 -3
- package/src/lib/testing/__tests__/integration.test.ts +0 -4
- package/src/lib/testing/integration.ts +0 -5
- package/src/mercato.ts +1 -26
- package/dist/agentic/guides/ai-workflows.md +0 -76
- package/dist/agentic/guides/architecture.md +0 -107
- package/dist/agentic/guides/backend-ui.md +0 -80
- package/dist/agentic/guides/contracts.md +0 -92
- package/dist/agentic/guides/extensions.md +0 -121
- package/dist/agentic/guides/framework-extension-points.md +0 -36
- package/dist/agentic/guides/integrations.md +0 -81
- package/dist/agentic/guides/modules/design_system.md +0 -102
- package/dist/agentic/guides/spec-delivery.md +0 -22
- package/dist/agentic/guides/testing-debugging.md +0 -80
- package/dist/agentic/guides/upstream/AGENTS.md +0 -298
- package/dist/agentic/guides/upstream/BACKWARD_COMPATIBILITY.md +0 -316
- package/dist/agentic/guides/upstream/manifest.json +0 -8
- package/dist/agentic/shared/ai/harness/README.md +0 -50
- package/dist/agentic/shared/ai/harness/RELEASE.md +0 -57
- package/dist/agentic/shared/ai/harness/cases.json +0 -13680
- package/dist/agentic/shared/ai/harness/cases.schema.json +0 -133
- package/dist/agentic/shared/ai/harness/fixtures/index.json +0 -49
- package/dist/agentic/shared/ai/harness/fixtures/seeds.json +0 -162
- package/dist/agentic/shared/ai/harness/generated-code-review-policy.md +0 -21
- package/dist/agentic/shared/ai/harness/generated-code-review-response.schema.json +0 -96
- package/dist/agentic/shared/ai/harness/generated-code-review-result.schema.json +0 -172
- package/dist/agentic/shared/ai/harness/release-matrix.json +0 -158
- package/dist/agentic/shared/ai/harness/release-result.schema.json +0 -219
- package/dist/agentic/shared/ai/harness/result.schema.json +0 -76
- package/dist/agentic/shared/ai/harness/routing-response.schema.json +0 -12
- package/dist/agentic/shared/ai/harness/target-validation-result.schema.json +0 -73
- package/dist/agentic/shared/ai/harness/validators.json +0 -78
- package/dist/agentic/shared/ai/harness/writable-ast-oracles.mjs +0 -2121
- package/dist/agentic/shared/ai/harness/writable-behavior-oracles.mjs +0 -1096
- package/dist/agentic/shared/ai/lessons/_template.md +0 -16
- package/dist/agentic/shared/ai/review-checklist.md +0 -36
- package/dist/agentic/shared/ai/skills/om-auto-implement-spec/SKILL.md +0 -21
- package/dist/agentic/shared/ai/skills/om-auto-upgrade-0.6.6-to-0.6.7/SKILL.md +0 -98
- package/dist/agentic/shared/ai/skills/om-backend-ui-design/references/crud-surfaces.md +0 -16
- package/dist/agentic/shared/ai/skills/om-backend-ui-design/references/frontend-and-design-system.md +0 -53
- package/dist/agentic/shared/ai/skills/om-backend-ui-design/references/page-and-navigation.md +0 -13
- package/dist/agentic/shared/ai/skills/om-backend-ui-design/references/quality-states.md +0 -11
- package/dist/agentic/shared/ai/skills/om-build-workflow/SKILL.md +0 -30
- package/dist/agentic/shared/ai/skills/om-build-workflow/references/activity-contracts.md +0 -12
- package/dist/agentic/shared/ai/skills/om-build-workflow/references/durability-and-progress.md +0 -13
- package/dist/agentic/shared/ai/skills/om-build-workflow/references/workflow-design.md +0 -14
- package/dist/agentic/shared/ai/skills/om-create-ai-agent/SKILL.md +0 -28
- package/dist/agentic/shared/ai/skills/om-create-ai-agent/references/attachments-and-overrides.md +0 -12
- package/dist/agentic/shared/ai/skills/om-create-ai-agent/references/module-agents-and-tools.md +0 -22
- package/dist/agentic/shared/ai/skills/om-create-ai-agent/references/orchestrator-agents.md +0 -12
- package/dist/agentic/shared/ai/skills/om-create-ai-agent/references/surface-selector.md +0 -19
- package/dist/agentic/shared/ai/skills/om-data-model-design/references/integrity-and-concurrency.md +0 -19
- package/dist/agentic/shared/ai/skills/om-data-model-design/references/migration-workflow.md +0 -13
- package/dist/agentic/shared/ai/skills/om-data-model-design/references/schema-design.md +0 -14
- package/dist/agentic/shared/ai/skills/om-data-model-design/references/sensitive-data.md +0 -10
- package/dist/agentic/shared/ai/skills/om-eject-and-customize/references/decision-and-procedure.md +0 -17
- package/dist/agentic/shared/ai/skills/om-evolve-harness/SKILL.md +0 -29
- package/dist/agentic/shared/ai/skills/om-evolve-harness/references/case-template.md +0 -100
- package/dist/agentic/shared/ai/skills/om-evolve-harness/references/case-workflow.md +0 -16
- package/dist/agentic/shared/ai/skills/om-evolve-harness/references/owner-selection.md +0 -17
- package/dist/agentic/shared/ai/skills/om-framework-context/SKILL.md +0 -25
- package/dist/agentic/shared/ai/skills/om-framework-context/references/resolver-procedure.md +0 -11
- package/dist/agentic/shared/ai/skills/om-framework-context/references/skew-and-escalation.md +0 -13
- package/dist/agentic/shared/ai/skills/om-help/references/delivery-workflows.md +0 -18
- package/dist/agentic/shared/ai/skills/om-help/references/task-families.md +0 -20
- package/dist/agentic/shared/ai/skills/om-implement-spec/references/phases-and-gates.md +0 -33
- package/dist/agentic/shared/ai/skills/om-implement-spec/references/planning-and-progress.md +0 -40
- package/dist/agentic/shared/ai/skills/om-implement-spec/references/report-templates.md +0 -27
- package/dist/agentic/shared/ai/skills/om-implement-spec/references/spec-resolution.md +0 -24
- package/dist/agentic/shared/ai/skills/om-integration-builder/references/package-and-activation.md +0 -16
- package/dist/agentic/shared/ai/skills/om-integration-builder/references/provider-families.md +0 -14
- package/dist/agentic/shared/ai/skills/om-integration-builder/references/security-and-reliability.md +0 -15
- package/dist/agentic/shared/ai/skills/om-integration-builder/references/sync-and-files.md +0 -12
- package/dist/agentic/shared/ai/skills/om-judge-agent-session/SKILL.md +0 -34
- package/dist/agentic/shared/ai/skills/om-judge-agent-session/agents/openai.yaml +0 -4
- package/dist/agentic/shared/ai/skills/om-judge-agent-session/references/agentic-setup.md +0 -11
- package/dist/agentic/shared/ai/skills/om-judge-agent-session/references/input-normalization.md +0 -31
- package/dist/agentic/shared/ai/skills/om-judge-agent-session/references/judge-workflow.md +0 -39
- package/dist/agentic/shared/ai/skills/om-judge-agent-session/references/report-template.md +0 -43
- package/dist/agentic/shared/ai/skills/om-judge-agent-session/references/rules.md +0 -11
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/api-and-domain.md +0 -19
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/business-one-shot-blueprints.md +0 -172
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/data-and-migrations.md +0 -12
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/discovery-surface-catalog.md +0 -83
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/module-surfaces.md +0 -21
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/planning.md +0 -11
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/runtime-cache-and-queues.md +0 -22
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/verification.md +0 -13
- package/dist/agentic/shared/ai/skills/om-share-this-session/SKILL.md +0 -41
- package/dist/agentic/shared/ai/skills/om-share-this-session/references/agentic-setup.md +0 -19
- package/dist/agentic/shared/ai/skills/om-share-this-session/references/bundle-preparation.md +0 -44
- package/dist/agentic/shared/ai/skills/om-share-this-session/references/consent-and-review.md +0 -39
- package/dist/agentic/shared/ai/skills/om-share-this-session/references/publication.md +0 -20
- package/dist/agentic/shared/ai/skills/om-share-this-session/references/report-templates.md +0 -57
- package/dist/agentic/shared/ai/skills/om-share-this-session/references/rules.md +0 -11
- package/dist/agentic/shared/ai/skills/om-share-this-session/scripts/prepare-share-bundle.mjs +0 -486
- package/dist/agentic/shared/ai/skills/om-system-extension/references/extension-branches.md +0 -18
- package/dist/agentic/shared/ai/skills/om-system-extension/references/mechanism-selector.md +0 -27
- package/dist/agentic/shared/ai/skills/om-system-extension/references/read-write-roundtrip.md +0 -13
- package/dist/agentic/shared/ai/skills/om-system-extension/references/unified-overrides.md +0 -41
- package/dist/agentic/shared/ai/skills/om-system-extension/references/verification.md +0 -11
- package/dist/agentic/shared/ai/skills/om-trim-unused-modules/references/dependency-and-redirect.md +0 -15
- package/dist/agentic/shared/ai/skills/om-troubleshooter/references/diagnosis-map.md +0 -16
- package/dist/agentic/shared/ai/skills/om-troubleshooter/references/regression-oracles.md +0 -14
- package/dist/agentic/shared/scripts/agent-harness-tool-server.mjs +0 -187
- package/dist/agentic/shared/scripts/check-lessons.mjs +0 -178
- package/dist/agentic/shared/scripts/evaluate-agent-harness.mjs +0 -2958
- package/dist/agentic/shared/scripts/execution-sandbox.mjs +0 -329
- package/dist/agentic/shared/scripts/framework-context.mjs +0 -888
- package/dist/agentic/shared/scripts/install-skills.mjs +0 -1029
- package/dist/agentic/shared/scripts/prepare-agent-harness-fixture.mjs +0 -222
- package/dist/agentic/shared/scripts/run-agent-harness-release.mjs +0 -1774
- package/dist/lib/generators/module-extension-facts.js +0 -1840
- package/dist/lib/generators/module-extension-facts.js.map +0 -7
- package/dist/lib/generators/module-fact-sources.js +0 -70
- package/dist/lib/generators/module-fact-sources.js.map +0 -7
- package/dist/lib/generators/module-override-targets.js +0 -688
- package/dist/lib/generators/module-override-targets.js.map +0 -7
- package/dist/lib/load-env.js +0 -24
- package/dist/lib/load-env.js.map +0 -7
- package/dist/lib/telemetry-init.js +0 -358
- package/dist/lib/telemetry-init.js.map +0 -7
- package/src/lib/__tests__/agentic-setup.ownership.test.ts +0 -386
- package/src/lib/__tests__/injection-widget-id-validation.test.ts +0 -184
- package/src/lib/__tests__/load-env.test.ts +0 -65
- package/src/lib/__tests__/telemetry-init.test.ts +0 -298
- package/src/lib/generators/__tests__/activation-adapter-coverage.test.ts +0 -92
- package/src/lib/generators/__tests__/module-extension-activations.test.ts +0 -762
- package/src/lib/generators/__tests__/module-extension-facts.test.ts +0 -404
- package/src/lib/generators/__tests__/module-facts.extension-hosts.test.ts +0 -108
- package/src/lib/generators/__tests__/module-facts.owned-contracts.test.ts +0 -561
- package/src/lib/generators/__tests__/module-facts.source-links.test.ts +0 -119
- package/src/lib/generators/__tests__/module-override-targets.roundtrip.test.ts +0 -149
- package/src/lib/generators/__tests__/module-override-targets.test.ts +0 -304
- package/src/lib/generators/module-extension-facts.ts +0 -2365
- package/src/lib/generators/module-fact-sources.ts +0 -108
- package/src/lib/generators/module-override-targets.ts +0 -863
- package/src/lib/load-env.ts +0 -30
- package/src/lib/telemetry-init.ts +0 -461
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# MikroORM Entity Cheatsheet
|
|
2
|
+
|
|
3
|
+
## Property Decorators
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
// String
|
|
7
|
+
@Property({ type: 'varchar', length: 255 })
|
|
8
|
+
name!: string
|
|
9
|
+
|
|
10
|
+
// Text (unlimited)
|
|
11
|
+
@Property({ type: 'text' })
|
|
12
|
+
description!: string
|
|
13
|
+
|
|
14
|
+
// Integer
|
|
15
|
+
@Property({ type: 'int' })
|
|
16
|
+
count!: number
|
|
17
|
+
|
|
18
|
+
// Decimal (money)
|
|
19
|
+
@Property({ type: 'decimal', precision: 10, scale: 2 })
|
|
20
|
+
amount!: string // Note: decimals are strings in MikroORM
|
|
21
|
+
|
|
22
|
+
// Boolean
|
|
23
|
+
@Property({ type: 'boolean', default: false })
|
|
24
|
+
is_published: boolean = false
|
|
25
|
+
|
|
26
|
+
// UUID
|
|
27
|
+
@Property({ type: 'uuid' })
|
|
28
|
+
reference_id!: string
|
|
29
|
+
|
|
30
|
+
// Date only
|
|
31
|
+
@Property({ type: 'date' })
|
|
32
|
+
birth_date!: Date
|
|
33
|
+
|
|
34
|
+
// Date + time with timezone
|
|
35
|
+
@Property({ type: 'timestamptz' })
|
|
36
|
+
created_at: Date = new Date()
|
|
37
|
+
|
|
38
|
+
// Auto-update timestamp
|
|
39
|
+
@Property({ type: 'timestamptz', onUpdate: () => new Date() })
|
|
40
|
+
updated_at: Date = new Date()
|
|
41
|
+
|
|
42
|
+
// Nullable
|
|
43
|
+
@Property({ type: 'varchar', length: 255, nullable: true })
|
|
44
|
+
optional_field: string | null = null
|
|
45
|
+
|
|
46
|
+
// JSONB
|
|
47
|
+
@Property({ type: 'jsonb', nullable: true })
|
|
48
|
+
metadata: Record<string, unknown> | null = null
|
|
49
|
+
|
|
50
|
+
// JSONB with default
|
|
51
|
+
@Property({ type: 'jsonb', default: '[]' })
|
|
52
|
+
tags: string[] = []
|
|
53
|
+
|
|
54
|
+
// Enum
|
|
55
|
+
@Enum({ items: () => StatusEnum })
|
|
56
|
+
status: StatusEnum = StatusEnum.DRAFT
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Index Decorators
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
// Simple index
|
|
63
|
+
@Index()
|
|
64
|
+
@Property({ type: 'uuid' })
|
|
65
|
+
organization_id!: string
|
|
66
|
+
|
|
67
|
+
// Unique index
|
|
68
|
+
@Index({ unique: true })
|
|
69
|
+
@Property({ type: 'varchar', length: 255 })
|
|
70
|
+
email!: string
|
|
71
|
+
|
|
72
|
+
// Composite unique (on entity level)
|
|
73
|
+
@Entity({ tableName: 'product_tags' })
|
|
74
|
+
@Unique({ properties: ['product_id', 'tag_id'] })
|
|
75
|
+
export class ProductTag { ... }
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Common Queries
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
// Find all (with tenant filter)
|
|
82
|
+
const items = await em.find(Entity, {
|
|
83
|
+
organization_id: orgId,
|
|
84
|
+
deleted_at: null,
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
// Find one by ID
|
|
88
|
+
const item = await em.findOne(Entity, {
|
|
89
|
+
id: itemId,
|
|
90
|
+
organization_id: orgId,
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
// Find with conditions
|
|
94
|
+
const items = await em.find(Entity, {
|
|
95
|
+
organization_id: orgId,
|
|
96
|
+
status: StatusEnum.ACTIVE,
|
|
97
|
+
created_at: { $gte: startDate },
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
// Find with IN clause (batch lookup)
|
|
101
|
+
const items = await em.find(Entity, {
|
|
102
|
+
id: { $in: idArray },
|
|
103
|
+
organization_id: orgId,
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
// Count
|
|
107
|
+
const count = await em.count(Entity, {
|
|
108
|
+
organization_id: orgId,
|
|
109
|
+
deleted_at: null,
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
// Pagination
|
|
113
|
+
const items = await em.find(Entity, {
|
|
114
|
+
organization_id: orgId,
|
|
115
|
+
}, {
|
|
116
|
+
limit: pageSize,
|
|
117
|
+
offset: (page - 1) * pageSize,
|
|
118
|
+
orderBy: { created_at: 'DESC' },
|
|
119
|
+
})
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Zod Validator Patterns
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
import { z } from 'zod'
|
|
126
|
+
|
|
127
|
+
// Create schema
|
|
128
|
+
export const createEntitySchema = z.object({
|
|
129
|
+
name: z.string().min(1).max(255),
|
|
130
|
+
description: z.string().optional(),
|
|
131
|
+
amount: z.number().positive(),
|
|
132
|
+
status: z.enum(['draft', 'active', 'archived']),
|
|
133
|
+
tags: z.array(z.string()).default([]),
|
|
134
|
+
metadata: z.record(z.unknown()).optional(),
|
|
135
|
+
referenceId: z.string().uuid().optional(),
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
// Update schema (partial + required id)
|
|
139
|
+
export const updateEntitySchema = createEntitySchema.partial().extend({
|
|
140
|
+
id: z.string().uuid(),
|
|
141
|
+
})
|
|
142
|
+
|
|
143
|
+
// Derive types
|
|
144
|
+
export type CreateEntityInput = z.infer<typeof createEntitySchema>
|
|
145
|
+
export type UpdateEntityInput = z.infer<typeof updateEntitySchema>
|
|
146
|
+
```
|
|
@@ -1,24 +1,320 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: om-eject-and-customize
|
|
3
|
-
description:
|
|
3
|
+
description: Guide for safely ejecting and customizing core modules. Use when a developer needs to modify a core module's behavior beyond what UMES extensions support, wants to eject a module, or is considering whether to eject vs extend. Triggers on "eject", "customize module", "modify core module", "override module", "fork module", "change built-in", "should I eject".
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Eject
|
|
6
|
+
# Eject & Customize
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Guide for safely ejecting core modules and making targeted customizations. Ejecting is a one-way door — always consider UMES extensions first.
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## Table of Contents
|
|
11
11
|
|
|
12
|
-
1.
|
|
13
|
-
2.
|
|
14
|
-
3.
|
|
15
|
-
4.
|
|
16
|
-
5.
|
|
17
|
-
6.
|
|
12
|
+
1. [Should You Eject?](#1-should-you-eject)
|
|
13
|
+
2. [Pre-Ejection Analysis](#2-pre-ejection-analysis)
|
|
14
|
+
3. [Performing the Ejection](#3-performing-the-ejection)
|
|
15
|
+
4. [What Gets Ejected](#4-what-gets-ejected)
|
|
16
|
+
5. [Safe Modification Zones](#5-safe-modification-zones)
|
|
17
|
+
6. [Dangerous Modification Zones](#6-dangerous-modification-zones)
|
|
18
|
+
7. [Tracking Customizations](#7-tracking-customizations)
|
|
19
|
+
8. [Upgrade Strategy](#8-upgrade-strategy)
|
|
20
|
+
9. [Common Ejection Scenarios](#9-common-ejection-scenarios)
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 1. Should You Eject?
|
|
25
|
+
|
|
26
|
+
**Ejection is the last resort.** Before recommending ejection, verify that UMES extensions cannot solve the problem.
|
|
27
|
+
|
|
28
|
+
### Decision Matrix
|
|
29
|
+
|
|
30
|
+
| What You Want to Do | Use UMES Extension | Eject Required |
|
|
31
|
+
|---------------------|-------------------|----------------|
|
|
32
|
+
| Add fields to a form | Field Injection (system-extension skill) | No |
|
|
33
|
+
| Add columns to a table | Column Injection (system-extension skill) | No |
|
|
34
|
+
| Add data to API responses | Response Enricher | No |
|
|
35
|
+
| Validate/block mutations | Mutation Guard or API Interceptor | No |
|
|
36
|
+
| Change how a component looks | Component Replacement (wrapper) | No |
|
|
37
|
+
| Add menu items | Menu Injection | No |
|
|
38
|
+
| React to domain events | Event Subscribers | No |
|
|
39
|
+
| **Change entity schema** (add/remove columns) | Not possible via UMES | **Yes** |
|
|
40
|
+
| **Change core business logic** (pricing, auth flow) | Not possible via UMES | **Yes** |
|
|
41
|
+
| **Remove built-in fields from forms** | Not possible via UMES | **Yes** |
|
|
42
|
+
| **Change API route validation rules** | Partially (interceptors), but deep changes need eject | **Maybe** |
|
|
43
|
+
| **Change database relationships** | Not possible via UMES | **Yes** |
|
|
44
|
+
|
|
45
|
+
### Before Ejecting — Try These First
|
|
46
|
+
|
|
47
|
+
1. **Response Enricher** — Add computed data to any API response
|
|
48
|
+
2. **API Interceptor** — Validate, transform, or enrich requests/responses
|
|
49
|
+
3. **Mutation Guard** — Block or modify mutations before persistence
|
|
50
|
+
4. **Component Replacement** — Swap, wrap, or transform any registered component
|
|
51
|
+
5. **Widget Injection** — Add UI elements to any registered spot
|
|
52
|
+
6. **Event Subscriber** — React to domain events with side effects
|
|
53
|
+
|
|
54
|
+
If UMES truly cannot solve the problem, proceed with ejection.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## 2. Pre-Ejection Analysis
|
|
59
|
+
|
|
60
|
+
Before ejecting, understand what you're taking ownership of.
|
|
61
|
+
|
|
62
|
+
### Step 1: Identify the Module
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# List available core modules
|
|
66
|
+
ls node_modules/@open-mercato/core/dist/modules/
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Step 2: Check Module Size
|
|
70
|
+
|
|
71
|
+
Look at the module's file count and complexity. Larger modules mean more upgrade burden.
|
|
72
|
+
|
|
73
|
+
### Step 3: Identify the Specific Change
|
|
74
|
+
|
|
75
|
+
Be precise about what you need to change. Often only 1-2 files need modification, but ejection copies the entire module.
|
|
76
|
+
|
|
77
|
+
### Step 4: Check Dependencies
|
|
78
|
+
|
|
79
|
+
Does the module depend on other core modules? Does anything depend on it? Cross-module dependencies increase risk.
|
|
80
|
+
|
|
81
|
+
### Step 5: Document the Reason
|
|
82
|
+
|
|
83
|
+
Before ejecting, record why:
|
|
84
|
+
|
|
85
|
+
```markdown
|
|
86
|
+
## Ejection: <module_id>
|
|
87
|
+
- **Date**: YYYY-MM-DD
|
|
88
|
+
- **Reason**: <why UMES extensions were insufficient>
|
|
89
|
+
- **Files to modify**: <specific files that need changes>
|
|
90
|
+
- **UMES alternatives considered**: <what was tried first>
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Save this in `.ai/specs/` or a project README for future reference.
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## 3. Performing the Ejection
|
|
98
|
+
|
|
99
|
+
### Run the Eject Command
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
yarn mercato module eject <module-id>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
This copies the module from `node_modules/@open-mercato/core/dist/modules/<module-id>/` to `src/modules/<module-id>/`.
|
|
106
|
+
|
|
107
|
+
The legacy alias `yarn mercato eject <module-id>` remains supported.
|
|
108
|
+
|
|
109
|
+
### Post-Ejection Steps
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
# 1. The module is automatically re-registered as '@app' source
|
|
113
|
+
# Verify in src/modules.ts:
|
|
114
|
+
grep '<module-id>' src/modules.ts
|
|
115
|
+
# Should show: { id: '<module-id>', from: '@app' }
|
|
116
|
+
|
|
117
|
+
# 2. Regenerate discovery files
|
|
118
|
+
yarn generate
|
|
119
|
+
|
|
120
|
+
# 3. Verify the app starts
|
|
121
|
+
yarn dev
|
|
122
|
+
|
|
123
|
+
# 4. Verify module functionality
|
|
124
|
+
# Test CRUD operations in the admin panel
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## 4. What Gets Ejected
|
|
130
|
+
|
|
131
|
+
The eject command copies **all module files** to your `src/modules/` directory:
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
src/modules/<module-id>/
|
|
135
|
+
├── index.ts # Module metadata
|
|
136
|
+
├── acl.ts # ACL features
|
|
137
|
+
├── setup.ts # Tenant init, role defaults
|
|
138
|
+
├── di.ts # DI registrations
|
|
139
|
+
├── events.ts # Event declarations
|
|
140
|
+
├── entities/ # MikroORM entities
|
|
141
|
+
├── data/
|
|
142
|
+
│ ├── validators.ts # Zod schemas
|
|
143
|
+
│ ├── enrichers.ts # Response enrichers (if any)
|
|
144
|
+
│ └── extensions.ts # Entity extensions (if any)
|
|
145
|
+
├── api/ # API route handlers
|
|
146
|
+
├── backend/ # Admin UI pages
|
|
147
|
+
├── frontend/ # Public pages (if any)
|
|
148
|
+
├── subscribers/ # Event handlers
|
|
149
|
+
├── workers/ # Background jobs
|
|
150
|
+
├── widgets/ # UI widgets
|
|
151
|
+
├── commands/ # Command pattern implementations
|
|
152
|
+
└── migrations/ # Database migrations
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
**Important**: After ejection, the npm package version of this module is no longer used. Your local copy takes precedence.
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## 5. Safe Modification Zones
|
|
160
|
+
|
|
161
|
+
These files can be modified with low risk:
|
|
162
|
+
|
|
163
|
+
| File/Area | Safe Changes | Risk Level |
|
|
164
|
+
|-----------|-------------|------------|
|
|
165
|
+
| `backend/*.tsx` | UI layout, field order, page structure | Low |
|
|
166
|
+
| `data/validators.ts` | Validation rules, field constraints | Low |
|
|
167
|
+
| `api/*/` handlers | Business logic within existing routes | Medium |
|
|
168
|
+
| `commands/` | Command execute/undo logic | Medium |
|
|
169
|
+
| `entities/` | Adding new columns (with migration) | Medium |
|
|
170
|
+
| `subscribers/` | Event handler logic | Low |
|
|
171
|
+
| `workers/` | Job processing logic | Low |
|
|
172
|
+
| `widgets/` | Widget components | Low |
|
|
173
|
+
|
|
174
|
+
### Safe Modification Example: Add a Column
|
|
175
|
+
|
|
176
|
+
```typescript
|
|
177
|
+
// 1. Add field to entity
|
|
178
|
+
@Property({ type: 'varchar', length: 100, nullable: true })
|
|
179
|
+
custom_field: string | null = null
|
|
180
|
+
|
|
181
|
+
// 2. Update validator
|
|
182
|
+
export const createSchema = z.object({
|
|
183
|
+
// ... existing fields
|
|
184
|
+
customField: z.string().max(100).optional(),
|
|
185
|
+
})
|
|
186
|
+
|
|
187
|
+
// 3. Generate migration
|
|
188
|
+
// yarn db:generate
|
|
189
|
+
|
|
190
|
+
// 4. Update form fields in backend pages
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## 6. Dangerous Modification Zones
|
|
196
|
+
|
|
197
|
+
These changes have high upgrade risk or can break other modules:
|
|
198
|
+
|
|
199
|
+
| File/Area | Danger | Why |
|
|
200
|
+
|-----------|--------|-----|
|
|
201
|
+
| `index.ts` metadata | Changing `name`/`id` | Other modules reference this ID |
|
|
202
|
+
| `acl.ts` feature IDs | Renaming features | Feature IDs are stored in DB, referenced by roles |
|
|
203
|
+
| `events.ts` event IDs | Renaming events | Other modules subscribe to these event IDs |
|
|
204
|
+
| Entity table/column rename | Database references break | FKs in other modules, stored data |
|
|
205
|
+
| `di.ts` service names | Renaming DI keys | Other modules resolve by name |
|
|
206
|
+
| Removing API routes | External consumers break | Other modules/integrations call these |
|
|
207
|
+
| `setup.ts` structure | Changing tenant init | Affects new tenant provisioning |
|
|
208
|
+
|
|
209
|
+
### Rules for Dangerous Zones
|
|
210
|
+
|
|
211
|
+
- **NEVER** rename entity table names or column names — other modules may reference them
|
|
212
|
+
- **NEVER** rename event IDs — subscribers in other modules depend on exact IDs
|
|
213
|
+
- **NEVER** rename ACL feature IDs — stored in database with role assignments
|
|
214
|
+
- **NEVER** remove API routes — other modules or external systems may call them
|
|
215
|
+
- **NEVER** rename DI service registration keys — other modules resolve by key name
|
|
216
|
+
- Adding is safe; renaming/removing is dangerous
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## 7. Tracking Customizations
|
|
221
|
+
|
|
222
|
+
Keep a record of every change made to ejected modules. This is critical for upgrades.
|
|
223
|
+
|
|
224
|
+
### Create a Customization Log
|
|
225
|
+
|
|
226
|
+
Create `.ai/specs/EJECTED-MODULES.md`:
|
|
227
|
+
|
|
228
|
+
```markdown
|
|
229
|
+
# Ejected Module Customizations
|
|
230
|
+
|
|
231
|
+
## <module_id>
|
|
232
|
+
|
|
233
|
+
- **Ejected from version**: 0.4.2 (check package.json at time of ejection)
|
|
234
|
+
- **Ejected on**: YYYY-MM-DD
|
|
235
|
+
- **Reason**: <why UMES was insufficient>
|
|
236
|
+
|
|
237
|
+
### Changes Made
|
|
238
|
+
|
|
239
|
+
| Date | File | Change | Reason |
|
|
240
|
+
|------|------|--------|--------|
|
|
241
|
+
| YYYY-MM-DD | entities/Entity.ts | Added `custom_field` column | Business requirement X |
|
|
242
|
+
| YYYY-MM-DD | backend/page.tsx | Modified list columns | UX improvement |
|
|
243
|
+
| YYYY-MM-DD | data/validators.ts | Added custom validation rule | Data quality requirement |
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### After Every Change
|
|
247
|
+
|
|
248
|
+
Add a row to the changes table. This makes future upgrades manageable by showing exactly what was customized.
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## 8. Upgrade Strategy
|
|
253
|
+
|
|
254
|
+
When upgrading Open Mercato packages (`@open-mercato/*`), ejected modules don't update automatically. You must manually merge upstream changes.
|
|
255
|
+
|
|
256
|
+
### Upgrade Workflow
|
|
257
|
+
|
|
258
|
+
1. **Check the changelog** for the new version — look for changes to the ejected module
|
|
259
|
+
2. **Compare your version** with the new version:
|
|
260
|
+
```bash
|
|
261
|
+
# After updating packages
|
|
262
|
+
diff -r src/modules/<module-id>/ node_modules/@open-mercato/core/dist/modules/<module-id>/
|
|
263
|
+
```
|
|
264
|
+
3. **Review each difference** — your customizations should be the only differences
|
|
265
|
+
4. **Merge upstream changes** — apply bug fixes and new features from upstream to your local copy
|
|
266
|
+
5. **Test thoroughly** — run `yarn typecheck`, `yarn test`, `yarn dev`
|
|
267
|
+
|
|
268
|
+
### Minimizing Upgrade Burden
|
|
269
|
+
|
|
270
|
+
- **Minimize changes** — only modify what's strictly necessary
|
|
271
|
+
- **Keep changes isolated** — prefer adding new files over modifying existing ones
|
|
272
|
+
- **Document everything** — update the customization log
|
|
273
|
+
- **Consider UMES first** — for new customizations, check if UMES can handle it even though the module is ejected
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## 9. Common Ejection Scenarios
|
|
278
|
+
|
|
279
|
+
### Scenario: Custom Pricing Logic
|
|
280
|
+
|
|
281
|
+
**Problem**: Need to change how product prices are calculated
|
|
282
|
+
**Module**: `catalog`
|
|
283
|
+
**Files to modify**: `commands/UpdateProductPrice.ts`, `lib/pricing.ts`
|
|
284
|
+
**UMES alternative tried**: API Interceptor can't modify internal pricing calculation
|
|
285
|
+
|
|
286
|
+
### Scenario: Custom Auth Flow
|
|
287
|
+
|
|
288
|
+
**Problem**: Need SSO integration not supported by built-in auth
|
|
289
|
+
**Module**: `auth`
|
|
290
|
+
**Files to modify**: `api/post/login.ts`, `lib/auth-providers.ts`
|
|
291
|
+
**UMES alternative tried**: None available for core auth flow
|
|
292
|
+
|
|
293
|
+
### Scenario: Custom Order Workflow
|
|
294
|
+
|
|
295
|
+
**Problem**: Need non-standard order status transitions
|
|
296
|
+
**Module**: `sales`
|
|
297
|
+
**Files to modify**: `commands/UpdateOrderStatus.ts`, entity status enum
|
|
298
|
+
**UMES alternative tried**: Mutation Guard can block transitions but can't add new states
|
|
299
|
+
|
|
300
|
+
### Scenario: Add Column to Core Entity
|
|
301
|
+
|
|
302
|
+
**Problem**: Need a column on Customer that doesn't exist
|
|
303
|
+
**Module**: `customers`
|
|
304
|
+
**Files to modify**: `entities/Person.ts`, `data/validators.ts`, `backend/` pages
|
|
305
|
+
**UMES alternative tried**: Enricher adds read-only data; need writable field in core schema
|
|
306
|
+
|
|
307
|
+
---
|
|
18
308
|
|
|
19
309
|
## Rules
|
|
20
310
|
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
311
|
+
- **MUST** try UMES extensions before ejecting — recommend the `om-system-extension` skill first
|
|
312
|
+
- **MUST** document the reason for ejection before proceeding
|
|
313
|
+
- **MUST** track all changes in a customization log
|
|
314
|
+
- **MUST** run `yarn generate` after ejection
|
|
315
|
+
- **MUST** verify the app starts and module works after ejection
|
|
316
|
+
- **MUST NOT** rename entity tables, columns, event IDs, feature IDs, or DI keys
|
|
317
|
+
- **MUST NOT** remove API routes or event definitions
|
|
318
|
+
- **MUST NOT** modify files outside the ejected module's directory
|
|
319
|
+
- Treat ejected modules as owned code — you are responsible for updates and bug fixes
|
|
320
|
+
- When in doubt, extend rather than eject
|
|
@@ -1,25 +1,107 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: om-help
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Open Mercato app navigator. Use when a developer asks: "what should I do now?",
|
|
5
|
+
"which skill should I use?", "where do I start?", "next steps?", "I'm lost",
|
|
6
|
+
"what comes after X?", "how do I create/add/build Y?", "how do I extend module Z?",
|
|
7
|
+
"how do I fix this error?", "where does X go?", "what's the sequence for a new module / feature / integration?".
|
|
8
|
+
Covers both orientation (navigation mode) and technical how-to (knowledge mode).
|
|
4
9
|
---
|
|
5
10
|
|
|
6
|
-
#
|
|
11
|
+
# om-help — App Navigator
|
|
7
12
|
|
|
8
|
-
|
|
13
|
+
Two modes: pick the one that matches the question.
|
|
9
14
|
|
|
10
|
-
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Mode 1: Navigation — "What do I do now?"
|
|
18
|
+
|
|
19
|
+
**Triggers:** "what now?", "next steps?", "where do I start?", "which skill?", "I'm lost"
|
|
20
|
+
|
|
21
|
+
### Step 1 — Read current context
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
git branch --show-current
|
|
25
|
+
git status --short
|
|
26
|
+
ls src/modules/ 2>/dev/null | head -20
|
|
27
|
+
gh pr list --author "@me" --state open --json number,title,labels 2>/dev/null || true
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Step 2 — Map to a workflow sequence
|
|
31
|
+
|
|
32
|
+
Read `references/workflow-sequences.md`. Match the context:
|
|
33
|
+
|
|
34
|
+
| Signal | Likely sequence |
|
|
35
|
+
|--------|-----------------|
|
|
36
|
+
| No module yet, task described | New Module |
|
|
37
|
+
| Module exists, adding new behavior | New Feature in Existing Module |
|
|
38
|
+
| Modifying a core OM module | Extend an Existing Module (UMES first) |
|
|
39
|
+
| Adding payment / shipping / sync | New Integration Provider |
|
|
40
|
+
| Error, broken build, missing widget | Fix a Bug / Something Is Broken |
|
|
41
|
+
| Code done, no PR | code-review → auto-create-pr |
|
|
42
|
+
| PR open, no review | auto-review-pr |
|
|
43
|
+
| Fresh scaffold with unused modules | Slim Down the App |
|
|
44
|
+
| Version bump needed | Upgrade Open Mercato |
|
|
45
|
+
|
|
46
|
+
### Step 3 — Recommend
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
**Where you are:** <one sentence: branch, open PR or active work if any>
|
|
50
|
+
|
|
51
|
+
**Recommended next step:** `/om-<skill-name>`
|
|
52
|
+
|
|
53
|
+
**Why:** <one sentence explaining the match>
|
|
54
|
+
|
|
55
|
+
**After that:** `/om-<next-skill>` → `/om-<skill-after>`
|
|
56
|
+
```
|
|
11
57
|
|
|
12
|
-
|
|
58
|
+
If multiple paths are valid, present at most two options.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Mode 2: Knowledge — "How do I do X?"
|
|
63
|
+
|
|
64
|
+
**Triggers:** "how do I add X?", "how do I build Y?", "where does Z go?", "what import for W?", "how do I extend module Z?"
|
|
65
|
+
|
|
66
|
+
### Step 1 — Map question to the right skill
|
|
67
|
+
|
|
68
|
+
| Question topic | Load this skill's SKILL.md or references |
|
|
69
|
+
|---------------|------------------------------------------|
|
|
70
|
+
| Create a new module | `om-module-scaffold/SKILL.md` |
|
|
71
|
+
| Design entities, fields, migrations | `om-data-model-design/SKILL.md` |
|
|
72
|
+
| Extend existing module (columns, fields, API) | `om-system-extension/SKILL.md` + `references/extension-contracts.md` |
|
|
73
|
+
| Build admin pages, forms, data tables | `om-backend-ui-design/SKILL.md` + `references/ui-components.md` |
|
|
74
|
+
| Build an integration provider | `om-integration-builder/SKILL.md` |
|
|
75
|
+
| Write a spec | `om-spec-writing/SKILL.md` |
|
|
76
|
+
| Write integration tests | `om-integration-tests/SKILL.md` |
|
|
77
|
+
| Eject and customize core module | `om-eject-and-customize/SKILL.md` |
|
|
78
|
+
| Something is broken | `om-troubleshooter/SKILL.md` |
|
|
79
|
+
| Remove unused modules | `om-trim-unused-modules/SKILL.md` |
|
|
80
|
+
| Code review | `om-code-review/SKILL.md` + `references/review-checklist.md` |
|
|
81
|
+
|
|
82
|
+
### Step 2 — Load and read the target skill
|
|
83
|
+
|
|
84
|
+
Read the identified `SKILL.md` and any relevant `references/` files. Look for:
|
|
85
|
+
- Step-by-step instructions specific to the task
|
|
86
|
+
- File paths, commands, and code patterns
|
|
87
|
+
- MUST rules and anti-patterns to avoid
|
|
88
|
+
|
|
89
|
+
### Step 3 — Answer grounded in the skill
|
|
90
|
+
|
|
91
|
+
Provide a specific answer citing:
|
|
92
|
+
- The exact steps or patterns from the skill
|
|
93
|
+
- Relevant commands to run (e.g. `yarn generate`, `yarn db:generate`)
|
|
94
|
+
- Any MUST rules that apply
|
|
95
|
+
|
|
96
|
+
Do not answer from model training data alone — ground every claim in the loaded skill content.
|
|
97
|
+
|
|
98
|
+
---
|
|
13
99
|
|
|
14
|
-
|
|
15
|
-
2. Classify the task by architecture, module/data, UI, UMES, integration, AI/workflow, debugging, or delivery. Load `references/task-families.md` only when the family is unclear.
|
|
16
|
-
3. Choose one delivery shape using `references/delivery-workflows.md`: direct small change, one-shot PR, spec-first implementation, issue fix, review, or harness evolution.
|
|
17
|
-
4. Prefer generated module facts for identifiers. Add `om-framework-context` only when the request needs exact installed implementation details.
|
|
18
|
-
5. Return the ordered guide/skill list, why each is needed, and the smallest validation gate.
|
|
100
|
+
## References
|
|
19
101
|
|
|
20
|
-
|
|
102
|
+
- **Skill catalog** (all skills, categories, triggers, sequencing): `references/skills-catalog.md`
|
|
103
|
+
- **Workflow sequences** (named workflows with ordered skill lists): `references/workflow-sequences.md`
|
|
21
104
|
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
|
|
25
|
-
- Prefer domain local skills for architecture and shared external skills for spec/PR/review automation.
|
|
105
|
+
Load `references/skills-catalog.md` when the user asks which skill to use.
|
|
106
|
+
Load `references/workflow-sequences.md` when the user asks about sequencing or "where to start".
|
|
107
|
+
Load both when the user is fully disoriented.
|