@owlmeans/viable-common 0.0.44 → 0.0.46
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/README.md +4 -3
- package/agent-meta/manifest.json +2 -2
- package/agent-meta/skills/agent-presentation/SKILL.md +4 -4
- package/agent-meta/skills/viable-common/SKILL.md +59 -30
- package/build/agent/index.d.ts +1 -0
- package/build/agent/index.d.ts.map +1 -1
- package/build/agent/index.js.map +1 -1
- package/build/agent/presentation/types.d.ts +21 -0
- package/build/agent/presentation/types.d.ts.map +1 -0
- package/build/agent/presentation/types.js +2 -0
- package/build/agent/presentation/types.js.map +1 -0
- package/build/agent/presentation.d.ts +10 -8
- package/build/agent/presentation.d.ts.map +1 -1
- package/build/agent/presentation.js +216 -195
- package/build/agent/presentation.js.map +1 -1
- package/build/agent/types.local.d.ts +3 -1
- package/build/agent/types.local.d.ts.map +1 -1
- package/build/areas/index.d.ts +1 -0
- package/build/areas/index.d.ts.map +1 -1
- package/build/areas/index.js.map +1 -1
- package/build/areas/tenancy/types.d.ts +23 -0
- package/build/areas/tenancy/types.d.ts.map +1 -0
- package/build/areas/tenancy/types.js +2 -0
- package/build/areas/tenancy/types.js.map +1 -0
- package/build/areas/tenancy.d.ts +5 -14
- package/build/areas/tenancy.d.ts.map +1 -1
- package/build/areas/tenancy.js +20 -26
- package/build/areas/tenancy.js.map +1 -1
- package/build/ba/connecting/types.d.ts +45 -0
- package/build/ba/connecting/types.d.ts.map +1 -0
- package/build/ba/connecting/types.js +2 -0
- package/build/ba/connecting/types.js.map +1 -0
- package/build/ba/connecting.d.ts +4 -0
- package/build/ba/connecting.d.ts.map +1 -0
- package/build/ba/connecting.js +47 -0
- package/build/ba/connecting.js.map +1 -0
- package/build/ba/helpers.d.ts +4 -39
- package/build/ba/helpers.d.ts.map +1 -1
- package/build/ba/helpers.js +5 -79
- package/build/ba/helpers.js.map +1 -1
- package/build/ba/index.d.ts +2 -0
- package/build/ba/index.d.ts.map +1 -1
- package/build/ba/index.js +1 -0
- package/build/ba/index.js.map +1 -1
- package/build/blueprint/types.d.ts +1 -2
- package/build/blueprint/types.d.ts.map +1 -1
- package/build/connect/branding/types.d.ts +28 -0
- package/build/connect/branding/types.d.ts.map +1 -0
- package/build/connect/branding/types.js +2 -0
- package/build/connect/branding/types.js.map +1 -0
- package/build/connect/consts.d.ts +2 -0
- package/build/connect/consts.d.ts.map +1 -1
- package/build/connect/consts.js +2 -0
- package/build/connect/consts.js.map +1 -1
- package/build/connect/conversion/types.d.ts +93 -0
- package/build/connect/conversion/types.d.ts.map +1 -0
- package/build/connect/conversion/types.js +2 -0
- package/build/connect/conversion/types.js.map +1 -0
- package/build/connect/entrypoints/types.d.ts +30 -0
- package/build/connect/entrypoints/types.d.ts.map +1 -0
- package/build/connect/entrypoints/types.js +2 -0
- package/build/connect/entrypoints/types.js.map +1 -0
- package/build/connect/entrypoints.d.ts +17 -11
- package/build/connect/entrypoints.d.ts.map +1 -1
- package/build/connect/entrypoints.js.map +1 -1
- package/build/connect/errors/types.d.ts +20 -0
- package/build/connect/errors/types.d.ts.map +1 -0
- package/build/connect/errors/types.js +2 -0
- package/build/connect/errors/types.js.map +1 -0
- package/build/connect/errors.d.ts +1 -1
- package/build/connect/errors.d.ts.map +1 -1
- package/build/connect/index.d.ts +13 -3
- package/build/connect/index.d.ts.map +1 -1
- package/build/connect/index.js +1 -1
- package/build/connect/index.js.map +1 -1
- package/build/connect/kit/types.d.ts +52 -0
- package/build/connect/kit/types.d.ts.map +1 -0
- package/build/connect/kit/types.js +2 -0
- package/build/connect/kit/types.js.map +1 -0
- package/build/connect/model-tier/types.d.ts +16 -0
- package/build/connect/model-tier/types.d.ts.map +1 -0
- package/build/connect/model-tier/types.js +2 -0
- package/build/connect/model-tier/types.js.map +1 -0
- package/build/connect/model-tier.d.ts +4 -0
- package/build/connect/model-tier.d.ts.map +1 -0
- package/build/connect/model-tier.js +21 -0
- package/build/connect/model-tier.js.map +1 -0
- package/build/connect/ops/types.d.ts +198 -0
- package/build/connect/ops/types.d.ts.map +1 -0
- package/build/connect/ops/types.js +2 -0
- package/build/connect/ops/types.js.map +1 -0
- package/build/connect/pipeline/types.d.ts +39 -0
- package/build/connect/pipeline/types.d.ts.map +1 -0
- package/build/connect/pipeline/types.js +2 -0
- package/build/connect/pipeline/types.js.map +1 -0
- package/build/connect/project/types.d.ts +127 -0
- package/build/connect/project/types.d.ts.map +1 -0
- package/build/connect/project/types.js +2 -0
- package/build/connect/project/types.js.map +1 -0
- package/build/connect/references/types.d.ts +157 -0
- package/build/connect/references/types.d.ts.map +1 -0
- package/build/connect/references/types.js +2 -0
- package/build/connect/references/types.js.map +1 -0
- package/build/connect/references/types.local.d.ts +5 -0
- package/build/connect/references/types.local.d.ts.map +1 -0
- package/build/connect/references/types.local.js.map +1 -0
- package/build/connect/references.d.ts +1 -1
- package/build/connect/references.d.ts.map +1 -1
- package/build/connect/references.js.map +1 -1
- package/build/connect/schemas.d.ts +8 -5
- package/build/connect/schemas.d.ts.map +1 -1
- package/build/connect/schemas.js +1 -3
- package/build/connect/schemas.js.map +1 -1
- package/build/connect/session/types.d.ts +73 -0
- package/build/connect/session/types.d.ts.map +1 -0
- package/build/connect/session/types.js +2 -0
- package/build/connect/session/types.js.map +1 -0
- package/build/connect/settings/types.d.ts +48 -0
- package/build/connect/settings/types.d.ts.map +1 -0
- package/build/connect/settings/types.js +2 -0
- package/build/connect/settings/types.js.map +1 -0
- package/build/connect/types.d.ts +1 -198
- package/build/connect/types.d.ts.map +1 -1
- package/build/convert/analysis/types.d.ts +93 -0
- package/build/convert/analysis/types.d.ts.map +1 -0
- package/build/convert/analysis/types.js +2 -0
- package/build/convert/analysis/types.js.map +1 -0
- package/build/convert/{consts.local.d.ts → census/consts.local.d.ts} +1 -1
- package/build/convert/census/consts.local.d.ts.map +1 -0
- package/build/convert/{consts.local.js → census/consts.local.js} +1 -1
- package/build/convert/census/consts.local.js.map +1 -0
- package/build/convert/census/types.d.ts +176 -0
- package/build/convert/census/types.d.ts.map +1 -0
- package/build/convert/census/types.js +2 -0
- package/build/convert/census/types.js.map +1 -0
- package/build/convert/census.d.ts +4 -0
- package/build/convert/census.d.ts.map +1 -0
- package/build/convert/census.js +83 -0
- package/build/convert/census.js.map +1 -0
- package/build/convert/consts.d.ts +4 -0
- package/build/convert/consts.d.ts.map +1 -1
- package/build/convert/consts.js +4 -0
- package/build/convert/consts.js.map +1 -1
- package/build/convert/detection/types.d.ts +67 -0
- package/build/convert/detection/types.d.ts.map +1 -0
- package/build/convert/detection/types.js +2 -0
- package/build/convert/detection/types.js.map +1 -0
- package/build/convert/docs/types.d.ts +129 -0
- package/build/convert/docs/types.d.ts.map +1 -0
- package/build/convert/docs/types.js +2 -0
- package/build/convert/docs/types.js.map +1 -0
- package/build/convert/docs.d.ts +4 -0
- package/build/convert/docs.d.ts.map +1 -0
- package/build/convert/docs.js +9 -0
- package/build/convert/docs.js.map +1 -0
- package/build/convert/estimate/types.d.ts +77 -0
- package/build/convert/estimate/types.d.ts.map +1 -0
- package/build/convert/estimate/types.js +2 -0
- package/build/convert/estimate/types.js.map +1 -0
- package/build/convert/estimate.d.ts +11 -0
- package/build/convert/estimate.d.ts.map +1 -0
- package/build/convert/estimate.js +18 -0
- package/build/convert/estimate.js.map +1 -0
- package/build/convert/helpers.d.ts +14 -78
- package/build/convert/helpers.d.ts.map +1 -1
- package/build/convert/helpers.js +27 -199
- package/build/convert/helpers.js.map +1 -1
- package/build/convert/index.d.ts +14 -0
- package/build/convert/index.d.ts.map +1 -1
- package/build/convert/index.js +5 -0
- package/build/convert/index.js.map +1 -1
- package/build/convert/origin/types.d.ts +41 -0
- package/build/convert/origin/types.d.ts.map +1 -0
- package/build/convert/origin/types.js +2 -0
- package/build/convert/origin/types.js.map +1 -0
- package/build/convert/origin.d.ts +4 -0
- package/build/convert/origin.d.ts.map +1 -0
- package/build/convert/origin.js +25 -0
- package/build/convert/origin.js.map +1 -0
- package/build/convert/record/types.d.ts +98 -0
- package/build/convert/record/types.d.ts.map +1 -0
- package/build/convert/record/types.js +2 -0
- package/build/convert/record/types.js.map +1 -0
- package/build/convert/schemas.d.ts +7 -6
- package/build/convert/schemas.d.ts.map +1 -1
- package/build/convert/schemas.js +1 -5
- package/build/convert/schemas.js.map +1 -1
- package/build/convert/stage/types.d.ts +27 -0
- package/build/convert/stage/types.d.ts.map +1 -0
- package/build/convert/stage/types.js +2 -0
- package/build/convert/stage/types.js.map +1 -0
- package/build/convert/stage.d.ts +4 -0
- package/build/convert/stage.d.ts.map +1 -0
- package/build/convert/stage.js +25 -0
- package/build/convert/stage.js.map +1 -0
- package/build/convert/taxonomy/types.d.ts +71 -0
- package/build/convert/taxonomy/types.d.ts.map +1 -0
- package/build/convert/taxonomy/types.js +2 -0
- package/build/convert/taxonomy/types.js.map +1 -0
- package/build/convert/types.d.ts +1 -657
- package/build/convert/types.d.ts.map +1 -1
- package/build/convert/utils.d.ts +2 -1
- package/build/convert/utils.d.ts.map +1 -1
- package/build/convert/utils.js +5 -4
- package/build/convert/utils.js.map +1 -1
- package/build/design/helpers.d.ts +9 -49
- package/build/design/helpers.d.ts.map +1 -1
- package/build/design/helpers.js +17 -224
- package/build/design/helpers.js.map +1 -1
- package/build/design/index.d.ts +3 -0
- package/build/design/index.d.ts.map +1 -1
- package/build/design/index.js +1 -0
- package/build/design/index.js.map +1 -1
- package/build/design/runtime/types.d.ts +16 -0
- package/build/design/runtime/types.d.ts.map +1 -0
- package/build/design/runtime/types.js +2 -0
- package/build/design/runtime/types.js.map +1 -0
- package/build/design/runtime.d.ts +6 -2
- package/build/design/runtime.d.ts.map +1 -1
- package/build/design/runtime.js +13 -5
- package/build/design/runtime.js.map +1 -1
- package/build/design/story/types.d.ts +67 -0
- package/build/design/story/types.d.ts.map +1 -0
- package/build/design/story/types.js +2 -0
- package/build/design/story/types.js.map +1 -0
- package/build/design/story.d.ts +4 -0
- package/build/design/story.d.ts.map +1 -0
- package/build/design/story.js +184 -0
- package/build/design/story.js.map +1 -0
- package/build/dev/types.local.d.ts +2 -1
- package/build/dev/types.local.d.ts.map +1 -1
- package/build/index.d.ts +1 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +1 -0
- package/build/index.js.map +1 -1
- package/build/integrity/index.d.ts +4 -0
- package/build/integrity/index.d.ts.map +1 -1
- package/build/integrity/index.js +2 -0
- package/build/integrity/index.js.map +1 -1
- package/build/integrity/layout/consts.d.ts +59 -0
- package/build/integrity/layout/consts.d.ts.map +1 -0
- package/build/integrity/layout/consts.js +66 -0
- package/build/integrity/layout/consts.js.map +1 -0
- package/build/integrity/layout/consts.local.d.ts +18 -0
- package/build/integrity/layout/consts.local.d.ts.map +1 -0
- package/build/integrity/layout/consts.local.js +176 -0
- package/build/integrity/layout/consts.local.js.map +1 -0
- package/build/integrity/layout/types.d.ts +35 -0
- package/build/integrity/layout/types.d.ts.map +1 -0
- package/build/integrity/layout/types.js +2 -0
- package/build/integrity/layout/types.js.map +1 -0
- package/build/integrity/layout.d.ts +4 -0
- package/build/integrity/layout.d.ts.map +1 -0
- package/build/integrity/layout.js +25 -0
- package/build/integrity/layout.js.map +1 -0
- package/build/integrity/types.d.ts +3 -1
- package/build/integrity/types.d.ts.map +1 -1
- package/build/integrity/utils.d.ts +6 -81
- package/build/integrity/utils.d.ts.map +1 -1
- package/build/integrity/utils.js +11 -279
- package/build/integrity/utils.js.map +1 -1
- package/build/integrity/verify/types.d.ts +26 -0
- package/build/integrity/verify/types.d.ts.map +1 -0
- package/build/integrity/verify/types.js +2 -0
- package/build/integrity/verify/types.js.map +1 -0
- package/build/integrity/verify.d.ts +5 -19
- package/build/integrity/verify.d.ts.map +1 -1
- package/build/integrity/verify.js +164 -175
- package/build/integrity/verify.js.map +1 -1
- package/build/intent/consts.d.ts +16 -0
- package/build/intent/consts.d.ts.map +1 -1
- package/build/intent/consts.js +63 -0
- package/build/intent/consts.js.map +1 -1
- package/build/intent/entrypoints.d.ts +2 -11
- package/build/intent/entrypoints.d.ts.map +1 -1
- package/build/intent/entrypoints.js.map +1 -1
- package/build/intent/flow.d.ts.map +1 -1
- package/build/intent/flow.js +2 -2
- package/build/intent/flow.js.map +1 -1
- package/build/intent/index.d.ts +0 -1
- package/build/intent/index.d.ts.map +1 -1
- package/build/intent/index.js +0 -1
- package/build/intent/index.js.map +1 -1
- package/build/intent/types.d.ts +13 -2
- package/build/intent/types.d.ts.map +1 -1
- package/build/legal/consts.d.ts +36 -0
- package/build/legal/consts.d.ts.map +1 -0
- package/build/legal/consts.js +16 -0
- package/build/legal/consts.js.map +1 -0
- package/build/legal/index.d.ts +3 -0
- package/build/legal/index.d.ts.map +1 -0
- package/build/legal/index.js +2 -0
- package/build/legal/index.js.map +1 -0
- package/build/legal/types.d.ts +10 -0
- package/build/legal/types.d.ts.map +1 -0
- package/build/legal/types.js +2 -0
- package/build/legal/types.js.map +1 -0
- package/build/moderation/index.d.ts +2 -0
- package/build/moderation/index.d.ts.map +1 -1
- package/build/moderation/index.js +1 -0
- package/build/moderation/index.js.map +1 -1
- package/build/moderation/utils.d.ts +3 -15
- package/build/moderation/utils.d.ts.map +1 -1
- package/build/moderation/utils.js +5 -30
- package/build/moderation/utils.js.map +1 -1
- package/build/moderation/verdict/types.d.ts +24 -0
- package/build/moderation/verdict/types.d.ts.map +1 -0
- package/build/moderation/verdict/types.js +2 -0
- package/build/moderation/verdict/types.js.map +1 -0
- package/build/moderation/verdict.d.ts +4 -0
- package/build/moderation/verdict.d.ts.map +1 -0
- package/build/moderation/verdict.js +21 -0
- package/build/moderation/verdict.js.map +1 -0
- package/build/planning/card/types.d.ts +42 -0
- package/build/planning/card/types.d.ts.map +1 -0
- package/build/planning/card/types.js +2 -0
- package/build/planning/card/types.js.map +1 -0
- package/build/planning/card.d.ts +4 -0
- package/build/planning/card.d.ts.map +1 -0
- package/build/planning/card.js +51 -0
- package/build/planning/card.js.map +1 -0
- package/build/planning/flows.d.ts +34 -0
- package/build/planning/flows.d.ts.map +1 -0
- package/build/planning/flows.js +174 -0
- package/build/planning/flows.js.map +1 -0
- package/build/planning/helpers.d.ts +11 -37
- package/build/planning/helpers.d.ts.map +1 -1
- package/build/planning/helpers.js +24 -103
- package/build/planning/helpers.js.map +1 -1
- package/build/planning/index.d.ts +5 -0
- package/build/planning/index.d.ts.map +1 -1
- package/build/planning/index.js +2 -0
- package/build/planning/index.js.map +1 -1
- package/build/planning/landing/types.d.ts +16 -0
- package/build/planning/landing/types.d.ts.map +1 -0
- package/build/planning/landing/types.js +2 -0
- package/build/planning/landing/types.js.map +1 -0
- package/build/planning/landing.d.ts +5 -10
- package/build/planning/landing.d.ts.map +1 -1
- package/build/planning/landing.js +20 -22
- package/build/planning/landing.js.map +1 -1
- package/build/planning/schemas.d.ts +1 -5
- package/build/planning/schemas.d.ts.map +1 -1
- package/build/planning/schemas.js +3 -3
- package/build/planning/schemas.js.map +1 -1
- package/build/planning/spec/types.d.ts +22 -0
- package/build/planning/spec/types.d.ts.map +1 -0
- package/build/planning/spec/types.js +2 -0
- package/build/planning/spec/types.js.map +1 -0
- package/build/planning/spec.d.ts +4 -0
- package/build/planning/spec.d.ts.map +1 -0
- package/build/planning/spec.js +30 -0
- package/build/planning/spec.js.map +1 -0
- package/build/planning/types.d.ts +4 -3
- package/build/planning/types.d.ts.map +1 -1
- package/build/scaffold/consts.d.ts +40 -1
- package/build/scaffold/consts.d.ts.map +1 -1
- package/build/scaffold/consts.js +52 -0
- package/build/scaffold/consts.js.map +1 -1
- package/build/scaffold/helpers.d.ts +4 -16
- package/build/scaffold/helpers.d.ts.map +1 -1
- package/build/scaffold/helpers.js +9 -64
- package/build/scaffold/helpers.js.map +1 -1
- package/build/scaffold/index.d.ts +4 -0
- package/build/scaffold/index.d.ts.map +1 -1
- package/build/scaffold/index.js +2 -0
- package/build/scaffold/index.js.map +1 -1
- package/build/scaffold/landing/types.d.ts +48 -0
- package/build/scaffold/landing/types.d.ts.map +1 -0
- package/build/scaffold/landing/types.js +2 -0
- package/build/scaffold/landing/types.js.map +1 -0
- package/build/scaffold/landing.d.ts +4 -0
- package/build/scaffold/landing.d.ts.map +1 -0
- package/build/scaffold/landing.js +95 -0
- package/build/scaffold/landing.js.map +1 -0
- package/build/scaffold/schemas.d.ts +3 -2
- package/build/scaffold/schemas.d.ts.map +1 -1
- package/build/scaffold/schemas.js +177 -7
- package/build/scaffold/schemas.js.map +1 -1
- package/build/scaffold/share/types.d.ts +35 -0
- package/build/scaffold/share/types.d.ts.map +1 -0
- package/build/scaffold/share/types.js +2 -0
- package/build/scaffold/share/types.js.map +1 -0
- package/build/scaffold/share.d.ts +4 -0
- package/build/scaffold/share.d.ts.map +1 -0
- package/build/scaffold/share.js +42 -0
- package/build/scaffold/share.js.map +1 -0
- package/build/scaffold/types.d.ts +112 -2
- package/build/scaffold/types.d.ts.map +1 -1
- package/build/skills/consts.d.ts +42 -0
- package/build/skills/consts.d.ts.map +1 -1
- package/build/skills/consts.js +43 -0
- package/build/skills/consts.js.map +1 -1
- package/build/skills/index.d.ts +0 -1
- package/build/skills/index.d.ts.map +1 -1
- package/build/skills/index.js +0 -1
- package/build/skills/index.js.map +1 -1
- package/build/slot/command/types.d.ts +21 -0
- package/build/slot/command/types.d.ts.map +1 -0
- package/build/slot/command/types.js +2 -0
- package/build/slot/command/types.js.map +1 -0
- package/build/slot/command.d.ts +4 -0
- package/build/slot/command.d.ts.map +1 -0
- package/build/slot/command.js +31 -0
- package/build/slot/command.js.map +1 -0
- package/build/slot/helpers.d.ts +2 -16
- package/build/slot/helpers.d.ts.map +1 -1
- package/build/slot/helpers.js +5 -26
- package/build/slot/helpers.js.map +1 -1
- package/build/slot/index.d.ts +5 -0
- package/build/slot/index.d.ts.map +1 -1
- package/build/slot/index.js +2 -0
- package/build/slot/index.js.map +1 -1
- package/build/slot/layout/types.d.ts +17 -0
- package/build/slot/layout/types.d.ts.map +1 -0
- package/build/slot/layout/types.js +2 -0
- package/build/slot/layout/types.js.map +1 -0
- package/build/slot/layout.d.ts +4 -9
- package/build/slot/layout.d.ts.map +1 -1
- package/build/slot/layout.js +13 -15
- package/build/slot/layout.js.map +1 -1
- package/build/slot/origin/types.d.ts +23 -0
- package/build/slot/origin/types.d.ts.map +1 -0
- package/build/slot/origin/types.js +2 -0
- package/build/slot/origin/types.js.map +1 -0
- package/build/slot/origin.d.ts +4 -0
- package/build/slot/origin.d.ts.map +1 -0
- package/build/slot/origin.js +15 -0
- package/build/slot/origin.js.map +1 -0
- package/build/slot/types.d.ts.map +1 -1
- package/build/slot/utils.d.ts +3 -15
- package/build/slot/utils.d.ts.map +1 -1
- package/build/slot/utils.js +5 -40
- package/build/slot/utils.js.map +1 -1
- package/build/topology/card/types.d.ts +21 -0
- package/build/topology/card/types.d.ts.map +1 -0
- package/build/topology/card/types.js +2 -0
- package/build/topology/card/types.js.map +1 -0
- package/build/topology/card.d.ts +6 -13
- package/build/topology/card.d.ts.map +1 -1
- package/build/topology/card.js +83 -86
- package/build/topology/card.js.map +1 -1
- package/build/topology/helpers.d.ts +7 -33
- package/build/topology/helpers.d.ts.map +1 -1
- package/build/topology/helpers.js +15 -111
- package/build/topology/helpers.js.map +1 -1
- package/build/topology/index.d.ts +3 -0
- package/build/topology/index.d.ts.map +1 -1
- package/build/topology/index.js +1 -0
- package/build/topology/index.js.map +1 -1
- package/build/topology/resolve/types.d.ts +47 -0
- package/build/topology/resolve/types.d.ts.map +1 -0
- package/build/topology/resolve/types.js +2 -0
- package/build/topology/resolve/types.js.map +1 -0
- package/build/topology/resolve.d.ts +4 -0
- package/build/topology/resolve.d.ts.map +1 -0
- package/build/topology/resolve.js +89 -0
- package/build/topology/resolve.js.map +1 -0
- package/package.json +18 -11
- package/src/agent/index.ts +1 -0
- package/src/agent/presentation/types.ts +21 -0
- package/src/agent/presentation.ts +199 -165
- package/src/agent/types.local.ts +3 -1
- package/src/areas/index.ts +1 -0
- package/src/areas/tenancy/types.ts +23 -0
- package/src/areas/tenancy.ts +26 -25
- package/src/ba/connecting/types.ts +45 -0
- package/src/ba/connecting.ts +64 -0
- package/src/ba/helpers.ts +8 -92
- package/src/ba/index.ts +2 -0
- package/src/blueprint/types.ts +2 -2
- package/src/connect/branding/types.ts +29 -0
- package/src/connect/consts.ts +3 -0
- package/src/connect/conversion/types.ts +96 -0
- package/src/connect/entrypoints/types.ts +25 -0
- package/src/connect/entrypoints.ts +13 -2
- package/src/connect/errors/types.ts +22 -0
- package/src/connect/errors.ts +1 -1
- package/src/connect/index.ts +13 -3
- package/src/connect/kit/types.ts +56 -0
- package/src/connect/model-tier/types.ts +16 -0
- package/src/connect/model-tier.ts +22 -0
- package/src/connect/{ops.ts → ops/types.ts} +13 -3
- package/src/connect/pipeline/types.ts +41 -0
- package/src/connect/project/types.ts +127 -0
- package/src/connect/references/types.local.ts +5 -0
- package/src/connect/references/types.ts +73 -0
- package/src/connect/references.ts +13 -2
- package/src/connect/schemas.ts +9 -13
- package/src/connect/session/types.ts +81 -0
- package/src/connect/settings/types.ts +52 -0
- package/src/convert/analysis/types.ts +89 -0
- package/src/convert/{consts.local.ts → census/consts.local.ts} +1 -1
- package/src/convert/census/types.ts +181 -0
- package/src/convert/census.ts +95 -0
- package/src/convert/consts.ts +5 -0
- package/src/convert/detection/types.ts +74 -0
- package/src/convert/docs/types.ts +151 -0
- package/src/convert/docs.ts +15 -0
- package/src/convert/estimate/types.ts +75 -0
- package/src/convert/estimate.ts +19 -0
- package/src/convert/helpers.ts +29 -210
- package/src/convert/index.ts +14 -0
- package/src/convert/origin/types.ts +43 -0
- package/src/convert/origin.ts +33 -0
- package/src/convert/record/types.ts +105 -0
- package/src/convert/schemas.ts +13 -12
- package/src/convert/stage/types.ts +27 -0
- package/src/convert/stage.ts +31 -0
- package/src/convert/taxonomy/types.ts +74 -0
- package/src/convert/types.ts +5 -709
- package/src/convert/utils.ts +5 -6
- package/src/design/helpers.ts +20 -245
- package/src/design/index.ts +3 -0
- package/src/design/runtime/types.ts +14 -0
- package/src/design/runtime.ts +22 -7
- package/src/design/story/types.ts +67 -0
- package/src/design/story.ts +221 -0
- package/src/dev/types.local.ts +1 -1
- package/src/index.ts +1 -0
- package/src/integrity/index.ts +4 -0
- package/src/integrity/layout/consts.local.ts +188 -0
- package/src/integrity/layout/consts.ts +79 -0
- package/src/integrity/layout/types.ts +35 -0
- package/src/integrity/layout.ts +39 -0
- package/src/integrity/types.ts +3 -1
- package/src/integrity/utils.ts +14 -313
- package/src/integrity/verify/types.ts +26 -0
- package/src/integrity/verify.ts +177 -181
- package/src/intent/consts.ts +67 -0
- package/src/intent/entrypoints.ts +2 -2
- package/src/intent/index.ts +0 -1
- package/src/intent/types.ts +9 -2
- package/src/legal/consts.ts +17 -0
- package/src/legal/index.ts +2 -0
- package/src/legal/types.ts +11 -0
- package/src/moderation/index.ts +2 -0
- package/src/moderation/utils.ts +7 -30
- package/src/moderation/verdict/types.ts +22 -0
- package/src/moderation/verdict.ts +28 -0
- package/src/planning/card/types.ts +44 -0
- package/src/planning/card.ts +77 -0
- package/src/planning/helpers.ts +28 -116
- package/src/planning/index.ts +5 -0
- package/src/planning/landing/types.ts +15 -0
- package/src/planning/landing.ts +27 -24
- package/src/planning/schemas.ts +3 -3
- package/src/planning/spec/types.ts +22 -0
- package/src/planning/spec.ts +41 -0
- package/src/planning/types.ts +4 -4
- package/src/scaffold/consts.ts +65 -1
- package/src/scaffold/helpers.ts +14 -77
- package/src/scaffold/index.ts +4 -0
- package/src/scaffold/landing/types.ts +48 -0
- package/src/scaffold/landing.ts +120 -0
- package/src/scaffold/schemas.ts +183 -7
- package/src/scaffold/share/types.ts +35 -0
- package/src/scaffold/share.ts +60 -0
- package/src/scaffold/types.ts +120 -1
- package/src/skills/consts.ts +46 -0
- package/src/skills/index.ts +0 -1
- package/src/slot/command/types.ts +21 -0
- package/src/slot/command.ts +38 -0
- package/src/slot/helpers.ts +5 -25
- package/src/slot/index.ts +5 -0
- package/src/slot/layout/types.ts +17 -0
- package/src/slot/layout.ts +19 -16
- package/src/slot/origin/types.ts +23 -0
- package/src/slot/origin.ts +20 -0
- package/src/slot/types.ts +1 -0
- package/src/slot/utils.ts +8 -43
- package/src/topology/card/types.ts +21 -0
- package/src/topology/card.ts +84 -82
- package/src/topology/helpers.ts +20 -125
- package/src/topology/index.ts +3 -0
- package/src/topology/resolve/types.ts +47 -0
- package/src/topology/resolve.ts +118 -0
- package/tests/blueprint.spec.ts +1 -2
- package/tests/connect-errors.spec.ts +1 -1
- package/tests/convert.spec.ts +50 -50
- package/tests/design.spec.ts +13 -16
- package/tests/planning.spec.ts +57 -59
- package/tests/presentation.spec.ts +20 -20
- package/tests/scaffold.spec.ts +286 -6
- package/tests/tenancy.spec.ts +21 -21
- package/build/connect/types.local.d.ts +0 -4
- package/build/connect/types.local.d.ts.map +0 -1
- package/build/connect/types.local.js.map +0 -1
- package/build/connect/utils.d.ts +0 -12
- package/build/connect/utils.d.ts.map +0 -1
- package/build/connect/utils.js +0 -25
- package/build/connect/utils.js.map +0 -1
- package/build/convert/consts.local.d.ts.map +0 -1
- package/build/convert/consts.local.js.map +0 -1
- package/build/intent/consts.local.d.ts +0 -4
- package/build/intent/consts.local.d.ts.map +0 -1
- package/build/intent/consts.local.js +0 -3
- package/build/intent/consts.local.js.map +0 -1
- package/src/connect/types.local.ts +0 -5
- package/src/connect/types.ts +0 -589
- package/src/connect/utils.ts +0 -23
- package/src/intent/consts.local.ts +0 -3
- package/src/intent/flow.ts +0 -66
- package/src/skills/roles.ts +0 -46
- /package/build/connect/{types.local.js → references/types.local.js} +0 -0
package/src/convert/utils.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { conversionDocHelper } from './docs.js'
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
/** @deprecated compat:factory-refactor — use `conversionDocHelper.conversionStoryDoc(…)` */
|
|
4
|
+
export const conversionStoryDoc = (code: string): string => conversionDocHelper.conversionStoryDoc(code)
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export const conversionSeedData = (name: string, ext: string): string =>
|
|
8
|
-
`${CONVERSION_SEED_DATA_DIR}/${name}.${ext}`
|
|
6
|
+
/** @deprecated compat:factory-refactor — use `conversionDocHelper.conversionSeedDoc(…)` */
|
|
7
|
+
export const conversionSeedDoc = (name: string): string => conversionDocHelper.conversionSeedDoc(name)
|
package/src/design/helpers.ts
CHANGED
|
@@ -1,259 +1,34 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type {
|
|
3
|
-
import {
|
|
1
|
+
import type { UserStory } from '../ba/types.js'
|
|
2
|
+
import type { DesignStaleness } from './consts.js'
|
|
3
|
+
import { storyDesignHelper } from './story.js'
|
|
4
4
|
import type { StoryDesign } from './types.js'
|
|
5
5
|
|
|
6
|
-
/**
|
|
7
|
-
|
|
8
|
-
*
|
|
9
|
-
* Derived rather than stored, and derived HERE rather than at the platform: the aggregate is what
|
|
10
|
-
* every generation helper reads, and a second place that assembles it is a second place that can
|
|
11
|
-
* assemble it differently. The `code` in particular is load-bearing - the scaffold stamps every
|
|
12
|
-
* placeholder it draws with it, so a run keyed by anything else cannot recognise its own
|
|
13
|
-
* reservation.
|
|
14
|
-
*
|
|
15
|
-
* For a context with no card behind it. Where a story card exists, `userStoryOf(card, design)` is
|
|
16
|
-
* the reader: the card wins on the narrative, code, area and actor, which a person may have
|
|
17
|
-
* changed since the design was written.
|
|
18
|
-
*/
|
|
19
|
-
export const userStoryOfDesign = (design: StoryDesign): UserStory => {
|
|
20
|
-
const componentOf = (name: string): StoryComponent | null => {
|
|
21
|
-
const component = design.components.find(entry => entry.name === name)
|
|
22
|
-
if (component == null) {
|
|
23
|
-
return null
|
|
24
|
-
}
|
|
6
|
+
/** @deprecated compat:factory-refactor — use `storyDesignHelper.userStoryOfDesign(…)` */
|
|
7
|
+
export const userStoryOfDesign = (design: StoryDesign): UserStory => storyDesignHelper.userStoryOfDesign(design)
|
|
25
8
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
description: '',
|
|
29
|
-
specs: {
|
|
30
|
-
[SpecCategory.UX]: component.specs.ux,
|
|
31
|
-
[SpecCategory.UI]: component.specs.ui,
|
|
32
|
-
} as Record<SpecCategory, string>,
|
|
33
|
-
entities: component.entities.map(entity => ({
|
|
34
|
-
name: entity, description: '', attributes: [],
|
|
35
|
-
} satisfies Entity)),
|
|
36
|
-
}
|
|
37
|
-
}
|
|
9
|
+
/** @deprecated compat:factory-refactor — use `storyDesignHelper.screenMapOf(…)` */
|
|
10
|
+
export const screenMapOf = (design: StoryDesign): Record<string, string[]> => storyDesignHelper.screenMapOf(design)
|
|
38
11
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
description: '',
|
|
42
|
-
...(screen.section != null ? { section: screen.section } : {}),
|
|
43
|
-
specs: {
|
|
44
|
-
[SpecCategory.UX]: screen.specs.ux,
|
|
45
|
-
[SpecCategory.UI]: screen.specs.ui,
|
|
46
|
-
} as Record<SpecCategory, string>,
|
|
47
|
-
components: screen.components
|
|
48
|
-
.map(componentOf)
|
|
49
|
-
.filter((component): component is StoryComponent => component != null),
|
|
50
|
-
}))
|
|
12
|
+
/** @deprecated compat:factory-refactor — use `storyDesignHelper.designPaths(…)` */
|
|
13
|
+
export const designPaths = (design: StoryDesign): string[] => storyDesignHelper.designPaths(design)
|
|
51
14
|
|
|
52
|
-
|
|
53
|
-
story: design.narrative,
|
|
54
|
-
code: design.code,
|
|
55
|
-
area: design.area,
|
|
56
|
-
entity: null as unknown as string,
|
|
57
|
-
entities: design.entities.map(entity => ({
|
|
58
|
-
name: entity.name, description: entity.description, attributes: [],
|
|
59
|
-
} satisfies Entity)),
|
|
60
|
-
screens,
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/** Screen name to component names - the shape every UX and UI prompt takes. */
|
|
65
|
-
export const screenMapOf = (design: StoryDesign): Record<string, string[]> =>
|
|
66
|
-
design.screens.reduce<Record<string, string[]>>((map, screen) => {
|
|
67
|
-
map[screen.name] = [...screen.components]
|
|
68
|
-
|
|
69
|
-
return map
|
|
70
|
-
}, {})
|
|
71
|
-
|
|
72
|
-
/** Every path the design names, in the order the implementation stage visits them. */
|
|
73
|
-
export const designPaths = (design: StoryDesign): string[] => [
|
|
74
|
-
...design.types.map(entry => entry.path),
|
|
75
|
-
...design.resources.map(entry => entry.path),
|
|
76
|
-
...design.models.map(entry => entry.path),
|
|
77
|
-
...design.api.map(entry => entry.path),
|
|
78
|
-
...design.stores.map(entry => entry.path),
|
|
79
|
-
...design.components.flatMap(entry => [entry.viewModelPath, entry.path]),
|
|
80
|
-
...design.screens.map(entry => entry.path),
|
|
81
|
-
]
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* How far the world has moved since the design was written.
|
|
85
|
-
*
|
|
86
|
-
* Ordered by severity, and each answer has one correct reaction: a version mismatch REFUSES, a
|
|
87
|
-
* changed narrative re-designs, a changed project warns and continues, a moved tree re-runs only
|
|
88
|
-
* the stages that read the tree. Collapsing them into a boolean would make every one of those the
|
|
89
|
-
* most expensive of the four.
|
|
90
|
-
*/
|
|
15
|
+
/** @deprecated compat:factory-refactor — use `storyDesignHelper.designStaleness(…)` */
|
|
91
16
|
export const designStaleness = (
|
|
92
17
|
design: StoryDesign,
|
|
93
18
|
now: { narrativeHash: string, projectHash: string, registryHash: string },
|
|
94
|
-
): DesignStaleness =>
|
|
95
|
-
if (design.version !== STORY_DESIGN_VERSION) {
|
|
96
|
-
return DesignStaleness.Version
|
|
97
|
-
}
|
|
98
|
-
if (design.provenance.narrativeHash !== now.narrativeHash) {
|
|
99
|
-
return DesignStaleness.Narrative
|
|
100
|
-
}
|
|
101
|
-
if (design.provenance.projectHash !== now.projectHash) {
|
|
102
|
-
return DesignStaleness.Project
|
|
103
|
-
}
|
|
104
|
-
if (design.provenance.registryHash !== now.registryHash) {
|
|
105
|
-
return DesignStaleness.Tree
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
return DesignStaleness.Fresh
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* A stable, dependency-free hash of arbitrary text.
|
|
113
|
-
*
|
|
114
|
-
* FNV-1a, because what is being detected is "did this change", not "is this authentic" - and a
|
|
115
|
-
* design record must be readable by a browser bundle, a worker and a test with no crypto import
|
|
116
|
-
* between them.
|
|
117
|
-
*/
|
|
118
|
-
export const designHash = (...parts: Array<string | undefined>): string => {
|
|
119
|
-
const text = parts.filter(part => part != null).join(' ')
|
|
120
|
-
let hash = 0x811c9dc5
|
|
121
|
-
for (let at = 0; at < text.length; at += 1) {
|
|
122
|
-
hash ^= text.charCodeAt(at)
|
|
123
|
-
hash = Math.imul(hash, 0x01000193) >>> 0
|
|
124
|
-
}
|
|
19
|
+
): DesignStaleness => storyDesignHelper.designStaleness(design, now)
|
|
125
20
|
|
|
126
|
-
|
|
127
|
-
|
|
21
|
+
/** @deprecated compat:factory-refactor — use `storyDesignHelper.designHash(…)` */
|
|
22
|
+
export const designHash = (...parts: Array<string | undefined>): string => storyDesignHelper.designHash(...parts)
|
|
128
23
|
|
|
129
|
-
/**
|
|
24
|
+
/** @deprecated compat:factory-refactor — use `storyDesignHelper.emptyStoryDesign(…)` */
|
|
130
25
|
export const emptyStoryDesign = (
|
|
131
26
|
input: Pick<StoryDesign, 'code' | 'narrative' | 'area'> & Partial<StoryDesign>,
|
|
132
|
-
): StoryDesign => (
|
|
133
|
-
version: STORY_DESIGN_VERSION,
|
|
134
|
-
reserved: {},
|
|
135
|
-
entities: [],
|
|
136
|
-
screens: [],
|
|
137
|
-
components: [],
|
|
138
|
-
types: [],
|
|
139
|
-
resources: [],
|
|
140
|
-
models: [],
|
|
141
|
-
api: [],
|
|
142
|
-
stores: [],
|
|
143
|
-
transitions: [],
|
|
144
|
-
access: { list: {}, resolvedAt: {} },
|
|
145
|
-
provenance: {
|
|
146
|
-
designedAt: new Date().toISOString(),
|
|
147
|
-
narrativeHash: '',
|
|
148
|
-
projectHash: '',
|
|
149
|
-
registryHash: '',
|
|
150
|
-
paths: [],
|
|
151
|
-
},
|
|
152
|
-
...input,
|
|
153
|
-
})
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* The design, small enough to hand a model, complete enough to act on.
|
|
157
|
-
*
|
|
158
|
-
* What a free-flight agent needs is names and counts: which screens exist, what is on them, which
|
|
159
|
-
* types and endpoints the story implies. The UX and UI prose is the bulk of a design and none of
|
|
160
|
-
* it helps an agent decide what to do next, so it is deliberately left out.
|
|
161
|
-
*/
|
|
162
|
-
export const designDigest = (design: StoryDesign): string => {
|
|
163
|
-
const lines: string[] = [
|
|
164
|
-
`Story ${design.code} (${design.area}): ${design.narrative}`,
|
|
165
|
-
]
|
|
166
|
-
if (design.reserved.section != null || design.reserved.screen != null) {
|
|
167
|
-
lines.push(`Reserved: section=${design.reserved.section ?? '-'} screen=${design.reserved.screen ?? '-'}`)
|
|
168
|
-
}
|
|
169
|
-
lines.push('', 'Screens:')
|
|
170
|
-
for (const screen of design.screens) {
|
|
171
|
-
lines.push(
|
|
172
|
-
`- ${screen.name} -> ${screen.path} (alias ${screen.alias}`
|
|
173
|
-
+ `${screen.section != null ? `, section ${screen.section}` : ''}`
|
|
174
|
-
+ `${screen.adopted ? ', existing' : ''}) renders ${screen.components.join(', ') || '-'}`,
|
|
175
|
-
)
|
|
176
|
-
}
|
|
177
|
-
lines.push('', 'Components:')
|
|
178
|
-
for (const component of design.components) {
|
|
179
|
-
lines.push(
|
|
180
|
-
`- ${component.name} -> ${component.path} (+ ${component.viewModelPath})`
|
|
181
|
-
+ `${component.entities.length > 0 ? ` about ${component.entities.join(', ')}` : ''}`,
|
|
182
|
-
)
|
|
183
|
-
}
|
|
184
|
-
lines.push('', 'Data layer:')
|
|
185
|
-
for (const type of design.types) {
|
|
186
|
-
lines.push(`- type ${type.path} (${type.entity})`)
|
|
187
|
-
}
|
|
188
|
-
for (const resource of design.resources) {
|
|
189
|
-
lines.push(`- resource ${resource.path} (${resource.entity})`)
|
|
190
|
-
}
|
|
191
|
-
for (const model of design.models) {
|
|
192
|
-
lines.push(`- model ${model.path} (${model.entities.join(', ')})`)
|
|
193
|
-
}
|
|
194
|
-
for (const api of design.api) {
|
|
195
|
-
lines.push(
|
|
196
|
-
`- api ${api.path} (${api.entity})`
|
|
197
|
-
+ `${api.endpoints.length > 0 ? `: ${api.endpoints.map(e => e.alias).join(', ')}` : ''}`,
|
|
198
|
-
)
|
|
199
|
-
}
|
|
200
|
-
for (const store of design.stores) {
|
|
201
|
-
lines.push(`- store ${store.path} (${store.entity})`)
|
|
202
|
-
}
|
|
203
|
-
if (design.transitions.length > 0) {
|
|
204
|
-
lines.push('', 'Transitions:')
|
|
205
|
-
for (const transition of design.transitions) {
|
|
206
|
-
lines.push(`- ${transition.from} -> ${transition.to} (${transition.action})`)
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
const guarded = Object.keys(design.access.list)
|
|
210
|
-
if (guarded.length > 0) {
|
|
211
|
-
lines.push('', `Access declared on: ${guarded.join(', ')}`)
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
return lines.join('\n')
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
/**
|
|
218
|
-
* Apply a patch to a design, refusing anything that would rename an allocated artifact.
|
|
219
|
-
*
|
|
220
|
-
* A path or an alias is registry-owned. Changing one behind the registry's back leaves two
|
|
221
|
-
* spellings of the same thing in a project, and no number of fix attempts repairs that — the
|
|
222
|
-
* compiler sees a missing module and the fixer, reasonably, renames the reference to match
|
|
223
|
-
* whichever spelling it found first.
|
|
224
|
-
*
|
|
225
|
-
* Returns the reason as a STRING when it refuses, so a model can read it and take the other route.
|
|
226
|
-
*/
|
|
227
|
-
export const amendStoryDesign = (
|
|
228
|
-
design: StoryDesign, patch: Record<string, unknown>,
|
|
229
|
-
): StoryDesign | string => {
|
|
230
|
-
const forbidden: string[] = []
|
|
231
|
-
|
|
232
|
-
const checkList = <T extends { path?: string, alias?: string, name?: string }>(
|
|
233
|
-
key: string, current: T[], next: unknown,
|
|
234
|
-
): void => {
|
|
235
|
-
if (!Array.isArray(next)) return
|
|
236
|
-
for (const entry of next as T[]) {
|
|
237
|
-
const known = current.find(item => item.name === entry.name)
|
|
238
|
-
if (known == null) continue
|
|
239
|
-
if (entry.path != null && known.path != null && entry.path !== known.path) {
|
|
240
|
-
forbidden.push(`${key}.${String(entry.name)}.path`)
|
|
241
|
-
}
|
|
242
|
-
if (entry.alias != null && known.alias != null && entry.alias !== known.alias) {
|
|
243
|
-
forbidden.push(`${key}.${String(entry.name)}.alias`)
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
checkList('screens', design.screens, patch.screens)
|
|
249
|
-
checkList('components', design.components, patch.components)
|
|
27
|
+
): StoryDesign => storyDesignHelper.emptyStoryDesign(input)
|
|
250
28
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
+ 'A design may change what a screen or a component DOES - its UX, its UI, its section, its '
|
|
254
|
-
+ 'endpoints - but never where it lives or what it is called. Rename through the registry, '
|
|
255
|
-
+ 'or leave the name alone and change the behaviour.'
|
|
256
|
-
}
|
|
29
|
+
/** @deprecated compat:factory-refactor — use `storyDesignHelper.designDigest(…)` */
|
|
30
|
+
export const designDigest = (design: StoryDesign): string => storyDesignHelper.designDigest(design)
|
|
257
31
|
|
|
258
|
-
|
|
259
|
-
|
|
32
|
+
/** @deprecated compat:factory-refactor — use `storyDesignHelper.amendStoryDesign(…)` */
|
|
33
|
+
export const amendStoryDesign = (design: StoryDesign, patch: Record<string, unknown>): StoryDesign | string =>
|
|
34
|
+
storyDesignHelper.amendStoryDesign(design, patch)
|
package/src/design/index.ts
CHANGED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { StoryActor } from '../consts.js'
|
|
2
|
+
import type { StoryDesignRuntime } from '../types.js'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* What a story needs BEYOND a screen, an endpoint and a table — and the standing answer is
|
|
6
|
+
* "nothing". See `design/runtime.ts`.
|
|
7
|
+
*/
|
|
8
|
+
export interface StoryRuntimeHelper {
|
|
9
|
+
isEphemeralActor: (actor?: StoryActor) => boolean
|
|
10
|
+
/** Read the gate off a design, total over a design that predates it. */
|
|
11
|
+
runtimeOf: (design?: { runtime?: StoryDesignRuntime }) => StoryDesignRuntime
|
|
12
|
+
/** Whether anything at all was asked for — the one check every new step is gated on. */
|
|
13
|
+
needsRuntime: (runtime: StoryDesignRuntime) => boolean
|
|
14
|
+
}
|
package/src/design/runtime.ts
CHANGED
|
@@ -16,14 +16,29 @@
|
|
|
16
16
|
|
|
17
17
|
import { EPHEMERAL_ACTORS, NO_RUNTIME, StoryActor } from './consts.js'
|
|
18
18
|
import type { StoryDesignRuntime } from './types.js'
|
|
19
|
+
import type { StoryRuntimeHelper } from './runtime/types.js'
|
|
19
20
|
|
|
20
|
-
export const
|
|
21
|
-
|
|
21
|
+
export const createStoryRuntimeHelper = (): StoryRuntimeHelper => {
|
|
22
|
+
const isEphemeralActor = (actor?: StoryActor): boolean =>
|
|
23
|
+
actor != null && EPHEMERAL_ACTORS.includes(actor)
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
const runtimeOf = (design?: { runtime?: StoryDesignRuntime }): StoryDesignRuntime =>
|
|
26
|
+
design?.runtime ?? NO_RUNTIME
|
|
27
|
+
|
|
28
|
+
const needsRuntime = (runtime: StoryDesignRuntime): boolean =>
|
|
29
|
+
runtime.worker || runtime.jobs.length > 0 || runtime.agents.length > 0
|
|
30
|
+
|
|
31
|
+
return { isEphemeralActor, runtimeOf, needsRuntime }
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export const storyRuntimeHelper = createStoryRuntimeHelper()
|
|
35
|
+
|
|
36
|
+
/** @deprecated compat:factory-refactor — use `storyRuntimeHelper.isEphemeralActor(…)` */
|
|
37
|
+
export const isEphemeralActor = (actor?: StoryActor): boolean => storyRuntimeHelper.isEphemeralActor(actor)
|
|
38
|
+
|
|
39
|
+
/** @deprecated compat:factory-refactor — use `storyRuntimeHelper.runtimeOf(…)` */
|
|
24
40
|
export const runtimeOf = (design?: { runtime?: StoryDesignRuntime }): StoryDesignRuntime =>
|
|
25
|
-
design
|
|
41
|
+
storyRuntimeHelper.runtimeOf(design)
|
|
26
42
|
|
|
27
|
-
/**
|
|
28
|
-
export const needsRuntime = (runtime: StoryDesignRuntime): boolean =>
|
|
29
|
-
runtime.worker || runtime.jobs.length > 0 || runtime.agents.length > 0
|
|
43
|
+
/** @deprecated compat:factory-refactor — use `storyRuntimeHelper.needsRuntime(…)` */
|
|
44
|
+
export const needsRuntime = (runtime: StoryDesignRuntime): boolean => storyRuntimeHelper.needsRuntime(runtime)
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { UserStory } from '../../ba/types.js'
|
|
2
|
+
import type { DesignStaleness } from '../consts.js'
|
|
3
|
+
import type { StoryDesign } from '../types.js'
|
|
4
|
+
|
|
5
|
+
/** Reading, digesting, hashing and amending a story's design record. */
|
|
6
|
+
export interface StoryDesignHelper {
|
|
7
|
+
/**
|
|
8
|
+
* The in-memory aggregate the coders take, derived from the design ALONE.
|
|
9
|
+
*
|
|
10
|
+
* Derived rather than stored, and derived HERE rather than at the platform: the aggregate is what
|
|
11
|
+
* every generation helper reads, and a second place that assembles it is a second place that can
|
|
12
|
+
* assemble it differently. The `code` in particular is load-bearing - the scaffold stamps every
|
|
13
|
+
* placeholder it draws with it, so a run keyed by anything else cannot recognise its own
|
|
14
|
+
* reservation.
|
|
15
|
+
*
|
|
16
|
+
* For a context with no card behind it. Where a story card exists, `userStoryOf(card, design)` is
|
|
17
|
+
* the reader: the card wins on the narrative, code, area and actor, which a person may have
|
|
18
|
+
* changed since the design was written.
|
|
19
|
+
*/
|
|
20
|
+
userStoryOfDesign: (design: StoryDesign) => UserStory
|
|
21
|
+
/** Screen name to component names - the shape every UX and UI prompt takes. */
|
|
22
|
+
screenMapOf: (design: StoryDesign) => Record<string, string[]>
|
|
23
|
+
/** Every path the design names, in the order the implementation stage visits them. */
|
|
24
|
+
designPaths: (design: StoryDesign) => string[]
|
|
25
|
+
/**
|
|
26
|
+
* How far the world has moved since the design was written.
|
|
27
|
+
*
|
|
28
|
+
* Ordered by severity, and each answer has one correct reaction: a version mismatch REFUSES, a
|
|
29
|
+
* changed narrative re-designs, a changed project warns and continues, a moved tree re-runs only
|
|
30
|
+
* the stages that read the tree. Collapsing them into a boolean would make every one of those the
|
|
31
|
+
* most expensive of the four.
|
|
32
|
+
*/
|
|
33
|
+
designStaleness: (
|
|
34
|
+
design: StoryDesign, now: { narrativeHash: string, projectHash: string, registryHash: string },
|
|
35
|
+
) => DesignStaleness
|
|
36
|
+
/**
|
|
37
|
+
* A stable, dependency-free hash of arbitrary text.
|
|
38
|
+
*
|
|
39
|
+
* FNV-1a, because what is being detected is "did this change", not "is this authentic" - and a
|
|
40
|
+
* design record must be readable by a browser bundle, a worker and a test with no crypto import
|
|
41
|
+
* between them.
|
|
42
|
+
*/
|
|
43
|
+
designHash: (...parts: Array<string | undefined>) => string
|
|
44
|
+
/** An empty design, so every stage can fill its own slice without inventing the shape. */
|
|
45
|
+
emptyStoryDesign: (
|
|
46
|
+
input: Pick<StoryDesign, 'code' | 'narrative' | 'area'> & Partial<StoryDesign>,
|
|
47
|
+
) => StoryDesign
|
|
48
|
+
/**
|
|
49
|
+
* The design, small enough to hand a model, complete enough to act on.
|
|
50
|
+
*
|
|
51
|
+
* What a free-flight agent needs is names and counts: which screens exist, what is on them, which
|
|
52
|
+
* types and endpoints the story implies. The UX and UI prose is the bulk of a design and none of
|
|
53
|
+
* it helps an agent decide what to do next, so it is deliberately left out.
|
|
54
|
+
*/
|
|
55
|
+
designDigest: (design: StoryDesign) => string
|
|
56
|
+
/**
|
|
57
|
+
* Apply a patch to a design, refusing anything that would rename an allocated artifact.
|
|
58
|
+
*
|
|
59
|
+
* A path or an alias is registry-owned. Changing one behind the registry's back leaves two
|
|
60
|
+
* spellings of the same thing in a project, and no number of fix attempts repairs that — the
|
|
61
|
+
* compiler sees a missing module and the fixer, reasonably, renames the reference to match
|
|
62
|
+
* whichever spelling it found first.
|
|
63
|
+
*
|
|
64
|
+
* Returns the reason as a STRING when it refuses, so a model can read it and take the other route.
|
|
65
|
+
*/
|
|
66
|
+
amendStoryDesign: (design: StoryDesign, patch: Record<string, unknown>) => StoryDesign | string
|
|
67
|
+
}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { SpecCategory } from '../ba/consts.js'
|
|
2
|
+
import type { Entity, StoryComponent, StoryScreen, UserStory } from '../ba/types.js'
|
|
3
|
+
import { DesignStaleness, STORY_DESIGN_VERSION } from './consts.js'
|
|
4
|
+
import type { StoryDesign } from './types.js'
|
|
5
|
+
import type { StoryDesignHelper } from './story/types.js'
|
|
6
|
+
|
|
7
|
+
export const createStoryDesignHelper = (): StoryDesignHelper => {
|
|
8
|
+
const userStoryOfDesign = (design: StoryDesign): UserStory => {
|
|
9
|
+
const componentOf = (name: string): StoryComponent | null => {
|
|
10
|
+
const component = design.components.find(entry => entry.name === name)
|
|
11
|
+
if (component == null) {
|
|
12
|
+
return null
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return {
|
|
16
|
+
name: component.name,
|
|
17
|
+
description: '',
|
|
18
|
+
specs: {
|
|
19
|
+
[SpecCategory.UX]: component.specs.ux,
|
|
20
|
+
[SpecCategory.UI]: component.specs.ui,
|
|
21
|
+
} as Record<SpecCategory, string>,
|
|
22
|
+
entities: component.entities.map(entity => ({
|
|
23
|
+
name: entity, description: '', attributes: [],
|
|
24
|
+
} satisfies Entity)),
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const screens: StoryScreen[] = design.screens.map(screen => ({
|
|
29
|
+
name: screen.name,
|
|
30
|
+
description: '',
|
|
31
|
+
...(screen.section != null ? { section: screen.section } : {}),
|
|
32
|
+
specs: {
|
|
33
|
+
[SpecCategory.UX]: screen.specs.ux,
|
|
34
|
+
[SpecCategory.UI]: screen.specs.ui,
|
|
35
|
+
} as Record<SpecCategory, string>,
|
|
36
|
+
components: screen.components
|
|
37
|
+
.map(componentOf)
|
|
38
|
+
.filter((component): component is StoryComponent => component != null),
|
|
39
|
+
}))
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
story: design.narrative,
|
|
43
|
+
code: design.code,
|
|
44
|
+
area: design.area,
|
|
45
|
+
entity: null as unknown as string,
|
|
46
|
+
entities: design.entities.map(entity => ({
|
|
47
|
+
name: entity.name, description: entity.description, attributes: [],
|
|
48
|
+
} satisfies Entity)),
|
|
49
|
+
screens,
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const screenMapOf = (design: StoryDesign): Record<string, string[]> =>
|
|
54
|
+
design.screens.reduce<Record<string, string[]>>((map, screen) => {
|
|
55
|
+
map[screen.name] = [...screen.components]
|
|
56
|
+
|
|
57
|
+
return map
|
|
58
|
+
}, {})
|
|
59
|
+
|
|
60
|
+
const designPaths = (design: StoryDesign): string[] => [
|
|
61
|
+
...design.types.map(entry => entry.path),
|
|
62
|
+
...design.resources.map(entry => entry.path),
|
|
63
|
+
...design.models.map(entry => entry.path),
|
|
64
|
+
...design.api.map(entry => entry.path),
|
|
65
|
+
...design.stores.map(entry => entry.path),
|
|
66
|
+
...design.components.flatMap(entry => [entry.viewModelPath, entry.path]),
|
|
67
|
+
...design.screens.map(entry => entry.path),
|
|
68
|
+
]
|
|
69
|
+
|
|
70
|
+
const designStaleness = (
|
|
71
|
+
design: StoryDesign,
|
|
72
|
+
now: { narrativeHash: string, projectHash: string, registryHash: string },
|
|
73
|
+
): DesignStaleness => {
|
|
74
|
+
if (design.version !== STORY_DESIGN_VERSION) {
|
|
75
|
+
return DesignStaleness.Version
|
|
76
|
+
}
|
|
77
|
+
if (design.provenance.narrativeHash !== now.narrativeHash) {
|
|
78
|
+
return DesignStaleness.Narrative
|
|
79
|
+
}
|
|
80
|
+
if (design.provenance.projectHash !== now.projectHash) {
|
|
81
|
+
return DesignStaleness.Project
|
|
82
|
+
}
|
|
83
|
+
if (design.provenance.registryHash !== now.registryHash) {
|
|
84
|
+
return DesignStaleness.Tree
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return DesignStaleness.Fresh
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const designHash = (...parts: Array<string | undefined>): string => {
|
|
91
|
+
const text = parts.filter(part => part != null).join(' ')
|
|
92
|
+
let hash = 0x811c9dc5
|
|
93
|
+
for (let at = 0; at < text.length; at += 1) {
|
|
94
|
+
hash ^= text.charCodeAt(at)
|
|
95
|
+
hash = Math.imul(hash, 0x01000193) >>> 0
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return hash.toString(16).padStart(8, '0')
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const emptyStoryDesign = (
|
|
102
|
+
input: Pick<StoryDesign, 'code' | 'narrative' | 'area'> & Partial<StoryDesign>,
|
|
103
|
+
): StoryDesign => ({
|
|
104
|
+
version: STORY_DESIGN_VERSION,
|
|
105
|
+
reserved: {},
|
|
106
|
+
entities: [],
|
|
107
|
+
screens: [],
|
|
108
|
+
components: [],
|
|
109
|
+
types: [],
|
|
110
|
+
resources: [],
|
|
111
|
+
models: [],
|
|
112
|
+
api: [],
|
|
113
|
+
stores: [],
|
|
114
|
+
transitions: [],
|
|
115
|
+
access: { list: {}, resolvedAt: {} },
|
|
116
|
+
provenance: {
|
|
117
|
+
designedAt: new Date().toISOString(),
|
|
118
|
+
narrativeHash: '',
|
|
119
|
+
projectHash: '',
|
|
120
|
+
registryHash: '',
|
|
121
|
+
paths: [],
|
|
122
|
+
},
|
|
123
|
+
...input,
|
|
124
|
+
})
|
|
125
|
+
|
|
126
|
+
const designDigest = (design: StoryDesign): string => {
|
|
127
|
+
const lines: string[] = [
|
|
128
|
+
`Story ${design.code} (${design.area}): ${design.narrative}`,
|
|
129
|
+
]
|
|
130
|
+
if (design.reserved.section != null || design.reserved.screen != null) {
|
|
131
|
+
lines.push(`Reserved: section=${design.reserved.section ?? '-'} screen=${design.reserved.screen ?? '-'}`)
|
|
132
|
+
}
|
|
133
|
+
lines.push('', 'Screens:')
|
|
134
|
+
for (const screen of design.screens) {
|
|
135
|
+
lines.push(
|
|
136
|
+
`- ${screen.name} -> ${screen.path} (alias ${screen.alias}`
|
|
137
|
+
+ `${screen.section != null ? `, section ${screen.section}` : ''}`
|
|
138
|
+
+ `${screen.adopted ? ', existing' : ''}) renders ${screen.components.join(', ') || '-'}`,
|
|
139
|
+
)
|
|
140
|
+
}
|
|
141
|
+
lines.push('', 'Components:')
|
|
142
|
+
for (const component of design.components) {
|
|
143
|
+
lines.push(
|
|
144
|
+
`- ${component.name} -> ${component.path} (+ ${component.viewModelPath})`
|
|
145
|
+
+ `${component.entities.length > 0 ? ` about ${component.entities.join(', ')}` : ''}`,
|
|
146
|
+
)
|
|
147
|
+
}
|
|
148
|
+
lines.push('', 'Data layer:')
|
|
149
|
+
for (const type of design.types) {
|
|
150
|
+
lines.push(`- type ${type.path} (${type.entity})`)
|
|
151
|
+
}
|
|
152
|
+
for (const resource of design.resources) {
|
|
153
|
+
lines.push(`- resource ${resource.path} (${resource.entity})`)
|
|
154
|
+
}
|
|
155
|
+
for (const model of design.models) {
|
|
156
|
+
lines.push(`- model ${model.path} (${model.entities.join(', ')})`)
|
|
157
|
+
}
|
|
158
|
+
for (const api of design.api) {
|
|
159
|
+
lines.push(
|
|
160
|
+
`- api ${api.path} (${api.entity})`
|
|
161
|
+
+ `${api.endpoints.length > 0 ? `: ${api.endpoints.map(e => e.alias).join(', ')}` : ''}`,
|
|
162
|
+
)
|
|
163
|
+
}
|
|
164
|
+
for (const store of design.stores) {
|
|
165
|
+
lines.push(`- store ${store.path} (${store.entity})`)
|
|
166
|
+
}
|
|
167
|
+
if (design.transitions.length > 0) {
|
|
168
|
+
lines.push('', 'Transitions:')
|
|
169
|
+
for (const transition of design.transitions) {
|
|
170
|
+
lines.push(`- ${transition.from} -> ${transition.to} (${transition.action})`)
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
const guarded = Object.keys(design.access.list)
|
|
174
|
+
if (guarded.length > 0) {
|
|
175
|
+
lines.push('', `Access declared on: ${guarded.join(', ')}`)
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return lines.join('\n')
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const amendStoryDesign = (
|
|
182
|
+
design: StoryDesign, patch: Record<string, unknown>,
|
|
183
|
+
): StoryDesign | string => {
|
|
184
|
+
const forbidden: string[] = []
|
|
185
|
+
|
|
186
|
+
const checkList = <T extends { path?: string, alias?: string, name?: string }>(
|
|
187
|
+
key: string, current: T[], next: unknown,
|
|
188
|
+
): void => {
|
|
189
|
+
if (!Array.isArray(next)) return
|
|
190
|
+
for (const entry of next as T[]) {
|
|
191
|
+
const known = current.find(item => item.name === entry.name)
|
|
192
|
+
if (known == null) continue
|
|
193
|
+
if (entry.path != null && known.path != null && entry.path !== known.path) {
|
|
194
|
+
forbidden.push(`${key}.${String(entry.name)}.path`)
|
|
195
|
+
}
|
|
196
|
+
if (entry.alias != null && known.alias != null && entry.alias !== known.alias) {
|
|
197
|
+
forbidden.push(`${key}.${String(entry.name)}.alias`)
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
checkList('screens', design.screens, patch.screens)
|
|
203
|
+
checkList('components', design.components, patch.components)
|
|
204
|
+
|
|
205
|
+
if (forbidden.length > 0) {
|
|
206
|
+
return `Refused: ${forbidden.join(', ')} name artifacts the project's registry allocated. `
|
|
207
|
+
+ 'A design may change what a screen or a component DOES - its UX, its UI, its section, its '
|
|
208
|
+
+ 'endpoints - but never where it lives or what it is called. Rename through the registry, '
|
|
209
|
+
+ 'or leave the name alone and change the behaviour.'
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
return { ...design, ...patch } as StoryDesign
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
return {
|
|
216
|
+
userStoryOfDesign, screenMapOf, designPaths, designStaleness, designHash, emptyStoryDesign, designDigest,
|
|
217
|
+
amendStoryDesign,
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
export const storyDesignHelper = createStoryDesignHelper()
|
package/src/dev/types.local.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { AccessBlock } from './types.js'
|
|
2
2
|
|
|
3
3
|
/** The part of an {@link AccessBlock} a model is asked for. */
|
|
4
|
-
export
|
|
4
|
+
export interface ModelAccessBlock extends Omit<AccessBlock, 'defaults' | 'entityScoped'> {}
|
package/src/index.ts
CHANGED
package/src/integrity/index.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
export * from './consts.js'
|
|
2
|
+
export * from './layout/consts.js'
|
|
3
|
+
export * from './layout.js'
|
|
2
4
|
export * from './utils.js'
|
|
3
5
|
export * from './verify.js'
|
|
4
6
|
export type * from './types.js'
|
|
7
|
+
export type * from './layout/types.js'
|
|
8
|
+
export type * from './verify/types.js'
|