@owlmeans/viable-common 0.0.44 → 0.0.45
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 +3 -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 +40 -28
- 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.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/{types.js.map → kit/types.js.map} +1 -1
- 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.d.ts → ops/types.d.ts} +13 -4
- 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/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/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/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/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/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 +11 -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/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/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/ops.d.ts.map +0 -1
- package/build/connect/ops.js +0 -2
- package/build/connect/ops.js.map +0 -1
- package/build/connect/types.d.ts +0 -650
- package/build/connect/types.d.ts.map +0 -1
- 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/build/intent/flow.d.ts +0 -17
- package/build/intent/flow.d.ts.map +0 -1
- package/build/intent/flow.js +0 -65
- package/build/intent/flow.js.map +0 -1
- package/build/skills/roles.d.ts +0 -43
- package/build/skills/roles.d.ts.map +0 -1
- package/build/skills/roles.js +0 -44
- package/build/skills/roles.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 → agent/presentation}/types.js +0 -0
- /package/build/connect/{types.local.js → references/types.local.js} +0 -0
package/src/integrity/verify.ts
CHANGED
|
@@ -1,219 +1,215 @@
|
|
|
1
1
|
import { IntegrityRule, TARGET_FORBIDDEN_SCRIPTS, TARGET_SLUG_PATTERN } from './consts.js'
|
|
2
|
-
import {
|
|
2
|
+
import { targetLayoutHelper } from './layout.js'
|
|
3
3
|
import type { IntegrityViolation, TargetFileMap, TargetIntegrityReport } from './types.js'
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
*/
|
|
23
|
-
export const verifyTargetShape = (files: TargetFileMap): TargetIntegrityReport => {
|
|
24
|
-
const violations: IntegrityViolation[] = []
|
|
25
|
-
const layout = detectTargetLayout(files)
|
|
26
|
-
const manifest = targetManifest(layout)
|
|
27
|
-
|
|
28
|
-
// Only this layout's files. The caller reads the union of every layout's list so that the
|
|
29
|
-
// probes are in hand before the layout is known — reporting the other layout's paths as
|
|
30
|
-
// missing would refuse both trees at once.
|
|
31
|
-
for (const path of manifest.files) {
|
|
32
|
-
if (files[path] == null) {
|
|
33
|
-
violations.push({
|
|
34
|
-
path, rule: IntegrityRule.Missing,
|
|
35
|
-
detail: `${path} is missing — a Viable project always has it.`
|
|
36
|
-
})
|
|
4
|
+
import type { TargetIntegrityHelper } from './verify/types.js'
|
|
5
|
+
|
|
6
|
+
export const createTargetIntegrityHelper = (): TargetIntegrityHelper => {
|
|
7
|
+
const verifyTargetShape = (files: TargetFileMap): TargetIntegrityReport => {
|
|
8
|
+
const violations: IntegrityViolation[] = []
|
|
9
|
+
const layout = targetLayoutHelper.detectTargetLayout(files)
|
|
10
|
+
const manifest = targetLayoutHelper.targetManifest(layout)
|
|
11
|
+
|
|
12
|
+
// Only this layout's files. The caller reads the union of every layout's list so that the
|
|
13
|
+
// probes are in hand before the layout is known — reporting the other layout's paths as
|
|
14
|
+
// missing would refuse both trees at once.
|
|
15
|
+
for (const path of manifest.files) {
|
|
16
|
+
if (files[path] == null) {
|
|
17
|
+
violations.push({
|
|
18
|
+
path, rule: IntegrityRule.Missing,
|
|
19
|
+
detail: `${path} is missing — a Viable project always has it.`
|
|
20
|
+
})
|
|
21
|
+
}
|
|
37
22
|
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// The slug is read once, from the root, and every package name is checked against it. A
|
|
41
|
-
// project the user renamed is still the project; a package that does not carry the root's
|
|
42
|
-
// name is a different tree wearing the workspace layout.
|
|
43
|
-
const slug = checkRoot()
|
|
44
|
-
checkInstallConfig()
|
|
45
|
-
for (const pkg of manifest.packages) {
|
|
46
|
-
checkPackage(pkg, slug)
|
|
47
|
-
}
|
|
48
|
-
checkMarkers()
|
|
49
23
|
|
|
50
|
-
|
|
24
|
+
// The slug is read once, from the root, and every package name is checked against it. A
|
|
25
|
+
// project the user renamed is still the project; a package that does not carry the root's
|
|
26
|
+
// name is a different tree wearing the workspace layout.
|
|
27
|
+
const slug = checkRoot()
|
|
28
|
+
checkInstallConfig()
|
|
29
|
+
for (const pkg of manifest.packages) {
|
|
30
|
+
checkPackage(pkg, slug)
|
|
31
|
+
}
|
|
32
|
+
checkMarkers()
|
|
51
33
|
|
|
52
|
-
|
|
53
|
-
const found = readJson('package.json')
|
|
54
|
-
if (found == null) return null
|
|
34
|
+
return { ok: violations.length === 0, violations, layout }
|
|
55
35
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
path: 'package.json', rule: IntegrityRule.PackageName,
|
|
60
|
-
detail: `The root package name "${String(found.name)}" is not a project slug`
|
|
61
|
-
+ ` — lowercase letters, digits and inner hyphens, up to 32 characters.`
|
|
62
|
-
})
|
|
63
|
-
}
|
|
64
|
-
if (found.type !== 'module') {
|
|
65
|
-
violations.push({
|
|
66
|
-
path: 'package.json', rule: IntegrityRule.ModuleType,
|
|
67
|
-
detail: 'The root package must declare "type": "module".'
|
|
68
|
-
})
|
|
69
|
-
}
|
|
36
|
+
function checkRoot(): string | null {
|
|
37
|
+
const found = readJson('package.json')
|
|
38
|
+
if (found == null) return null
|
|
70
39
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
40
|
+
const name = typeof found.name === 'string' ? found.name : ''
|
|
41
|
+
if (!TARGET_SLUG_PATTERN.test(name)) {
|
|
42
|
+
violations.push({
|
|
43
|
+
path: 'package.json', rule: IntegrityRule.PackageName,
|
|
44
|
+
detail: `The root package name "${String(found.name)}" is not a project slug`
|
|
45
|
+
+ ` — lowercase letters, digits and inner hyphens, up to 32 characters.`
|
|
46
|
+
})
|
|
47
|
+
}
|
|
48
|
+
if (found.type !== 'module') {
|
|
49
|
+
violations.push({
|
|
50
|
+
path: 'package.json', rule: IntegrityRule.ModuleType,
|
|
51
|
+
detail: 'The root package must declare "type": "module".'
|
|
52
|
+
})
|
|
53
|
+
}
|
|
84
54
|
|
|
85
|
-
|
|
55
|
+
// The workspace list is what makes the packages resolve to each other. Both spellings are
|
|
56
|
+
// the same tree: the glob `create-app` emits, or the entries written out.
|
|
57
|
+
const declared = Array.isArray(found.workspaces) ? found.workspaces as string[] : []
|
|
58
|
+
const isGlob = declared.length === 1 && declared[0] === manifest.workspaceGlob
|
|
59
|
+
const isExplicit = declared.length === manifest.workspaceEntries.length
|
|
60
|
+
&& manifest.workspaceEntries.every(entry => declared.includes(entry))
|
|
61
|
+
if (!isGlob && !isExplicit) {
|
|
62
|
+
violations.push({
|
|
63
|
+
path: 'package.json', rule: IntegrityRule.Workspaces,
|
|
64
|
+
detail: `The root package must declare the workspaces as ["${manifest.workspaceGlob}"]`
|
|
65
|
+
+ ` or as exactly ${manifest.workspaceEntries.join(', ')}.`
|
|
66
|
+
})
|
|
67
|
+
}
|
|
86
68
|
|
|
87
|
-
|
|
88
|
-
}
|
|
69
|
+
checkScripts('package.json', found)
|
|
89
70
|
|
|
90
|
-
|
|
91
|
-
* `bunfig.toml` decides where `bun install` fetches from and how it links.
|
|
92
|
-
*
|
|
93
|
-
* A registry line pointed elsewhere makes every dependency in the tree arbitrary code
|
|
94
|
-
* regardless of how well-formed the manifests are, so it is checked as a shape rather than
|
|
95
|
-
* a marker: nothing but the hoisted-linker install block belongs in it.
|
|
96
|
-
*/
|
|
97
|
-
function checkInstallConfig(): void {
|
|
98
|
-
const content = files['bunfig.toml']
|
|
99
|
-
if (content == null) return
|
|
100
|
-
|
|
101
|
-
const offending = content.split('\n')
|
|
102
|
-
.map(line => line.trim())
|
|
103
|
-
.filter(line => line.length > 0 && !line.startsWith('#'))
|
|
104
|
-
.filter(line => !/^\[install\]$/.test(line) && !/^linker\s*=/.test(line))
|
|
105
|
-
|
|
106
|
-
if (offending.length > 0) {
|
|
107
|
-
violations.push({
|
|
108
|
-
path: 'bunfig.toml', rule: IntegrityRule.InstallConfig,
|
|
109
|
-
detail: 'bunfig.toml may only declare the hoisted install linker.'
|
|
110
|
-
})
|
|
71
|
+
return TARGET_SLUG_PATTERN.test(name) ? name : null
|
|
111
72
|
}
|
|
112
|
-
}
|
|
113
73
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
const
|
|
123
|
-
if (
|
|
74
|
+
/**
|
|
75
|
+
* `bunfig.toml` decides where `bun install` fetches from and how it links.
|
|
76
|
+
*
|
|
77
|
+
* A registry line pointed elsewhere makes every dependency in the tree arbitrary code
|
|
78
|
+
* regardless of how well-formed the manifests are, so it is checked as a shape rather than
|
|
79
|
+
* a marker: nothing but the hoisted-linker install block belongs in it.
|
|
80
|
+
*/
|
|
81
|
+
function checkInstallConfig(): void {
|
|
82
|
+
const content = files['bunfig.toml']
|
|
83
|
+
if (content == null) return
|
|
84
|
+
|
|
85
|
+
const offending = content.split('\n')
|
|
86
|
+
.map(line => line.trim())
|
|
87
|
+
.filter(line => line.length > 0 && !line.startsWith('#'))
|
|
88
|
+
.filter(line => !/^\[install\]$/.test(line) && !/^linker\s*=/.test(line))
|
|
89
|
+
|
|
90
|
+
if (offending.length > 0) {
|
|
124
91
|
violations.push({
|
|
125
|
-
path, rule: IntegrityRule.
|
|
126
|
-
detail:
|
|
92
|
+
path: 'bunfig.toml', rule: IntegrityRule.InstallConfig,
|
|
93
|
+
detail: 'bunfig.toml may only declare the hoisted install linker.'
|
|
127
94
|
})
|
|
128
95
|
}
|
|
129
96
|
}
|
|
130
|
-
if (found.type !== 'module') {
|
|
131
|
-
violations.push({
|
|
132
|
-
path, rule: IntegrityRule.ModuleType,
|
|
133
|
-
detail: `Package "${pkg}" must declare "type": "module".`
|
|
134
|
-
})
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
const scripts = asRecord(found.scripts)
|
|
138
|
-
if (scripts.build !== manifest.buildScripts[pkg]) {
|
|
139
|
-
// The one the platform actually spawns.
|
|
140
|
-
violations.push({
|
|
141
|
-
path, rule: IntegrityRule.BuildScript,
|
|
142
|
-
detail: `The build script of "${pkg}" must be exactly \`${manifest.buildScripts[pkg]}\`.`
|
|
143
|
-
})
|
|
144
|
-
}
|
|
145
|
-
checkScripts(path, found)
|
|
146
97
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
98
|
+
function checkPackage(pkg: string, slug: string | null): void {
|
|
99
|
+
const path = `${manifest.dir}/${pkg}/package.json`
|
|
100
|
+
const found = readJson(path)
|
|
101
|
+
if (found == null) return
|
|
102
|
+
|
|
103
|
+
// With no readable slug the name and the workspace dependencies have nothing to be checked
|
|
104
|
+
// against; the root violation already says why, and repeating it per package is noise.
|
|
105
|
+
if (slug != null) {
|
|
106
|
+
const expected = targetLayoutHelper.targetPackageName(slug, pkg)
|
|
107
|
+
if (found.name !== expected) {
|
|
108
|
+
violations.push({
|
|
109
|
+
path, rule: IntegrityRule.PackageName,
|
|
110
|
+
detail: `Package must be named "${expected}", not "${String(found.name)}".`
|
|
111
|
+
})
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (found.type !== 'module') {
|
|
152
115
|
violations.push({
|
|
153
|
-
path, rule: IntegrityRule.
|
|
154
|
-
detail: `Package "${pkg}" must
|
|
116
|
+
path, rule: IntegrityRule.ModuleType,
|
|
117
|
+
detail: `Package "${pkg}" must declare "type": "module".`
|
|
155
118
|
})
|
|
156
119
|
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
120
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
for (const hook of TARGET_FORBIDDEN_SCRIPTS) {
|
|
164
|
-
if (scripts[hook] != null) {
|
|
121
|
+
const scripts = asRecord(found.scripts)
|
|
122
|
+
if (scripts.build !== manifest.buildScripts[pkg]) {
|
|
123
|
+
// The one the platform actually spawns.
|
|
165
124
|
violations.push({
|
|
166
|
-
path, rule: IntegrityRule.
|
|
167
|
-
detail: `
|
|
125
|
+
path, rule: IntegrityRule.BuildScript,
|
|
126
|
+
detail: `The build script of "${pkg}" must be exactly \`${manifest.buildScripts[pkg]}\`.`
|
|
168
127
|
})
|
|
169
128
|
}
|
|
129
|
+
checkScripts(path, found)
|
|
130
|
+
|
|
131
|
+
if (slug == null) return
|
|
132
|
+
|
|
133
|
+
const deps = { ...asRecord(found.dependencies), ...asRecord(found.devDependencies) }
|
|
134
|
+
for (const dep of targetLayoutHelper.targetRequiredDeps(slug, pkg, layout)) {
|
|
135
|
+
if (deps[dep] == null) {
|
|
136
|
+
violations.push({
|
|
137
|
+
path, rule: IntegrityRule.RequiredDependency,
|
|
138
|
+
detail: `Package "${pkg}" must depend on ${dep}.`
|
|
139
|
+
})
|
|
140
|
+
}
|
|
141
|
+
}
|
|
170
142
|
}
|
|
171
|
-
}
|
|
172
143
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
const
|
|
176
|
-
|
|
144
|
+
/** Lifecycle hooks run on `bun install`, before anything else has a chance to refuse. */
|
|
145
|
+
function checkScripts(path: string, found: Record<string, unknown>): void {
|
|
146
|
+
const scripts = asRecord(found.scripts)
|
|
147
|
+
for (const hook of TARGET_FORBIDDEN_SCRIPTS) {
|
|
148
|
+
if (scripts[hook] != null) {
|
|
149
|
+
violations.push({
|
|
150
|
+
path, rule: IntegrityRule.LifecycleScript,
|
|
151
|
+
detail: `Lifecycle script "${hook}" is not allowed in a target project.`
|
|
152
|
+
})
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
177
156
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
157
|
+
function checkMarkers(): void {
|
|
158
|
+
for (const [path, markers] of Object.entries(manifest.markers)) {
|
|
159
|
+
const content = files[path]
|
|
160
|
+
if (content == null) continue
|
|
161
|
+
|
|
162
|
+
const absent = markers.filter(marker => !content.includes(marker))
|
|
163
|
+
if (absent.length > 0) {
|
|
164
|
+
violations.push({
|
|
165
|
+
path, rule: IntegrityRule.EntryMarker,
|
|
166
|
+
detail: `${path} does not look like the generated app's entry: ${absent.join(', ')} not found.`
|
|
167
|
+
})
|
|
168
|
+
}
|
|
184
169
|
}
|
|
185
170
|
}
|
|
186
|
-
}
|
|
187
171
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
172
|
+
function readJson(path: string): Record<string, unknown> | null {
|
|
173
|
+
const content = files[path]
|
|
174
|
+
if (content == null) return null
|
|
175
|
+
try {
|
|
176
|
+
const parsed: unknown = JSON.parse(content)
|
|
177
|
+
|
|
178
|
+
return typeof parsed === 'object' && parsed !== null
|
|
179
|
+
? parsed as Record<string, unknown>
|
|
180
|
+
: reportUnreadable(path)
|
|
181
|
+
} catch {
|
|
182
|
+
return reportUnreadable(path)
|
|
183
|
+
}
|
|
199
184
|
}
|
|
200
|
-
}
|
|
201
185
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
186
|
+
function reportUnreadable(path: string): null {
|
|
187
|
+
violations.push({
|
|
188
|
+
path, rule: IntegrityRule.Unreadable, detail: `${path} is not a readable JSON object.`
|
|
189
|
+
})
|
|
190
|
+
|
|
191
|
+
return null
|
|
192
|
+
}
|
|
206
193
|
|
|
207
|
-
|
|
194
|
+
function asRecord(value: unknown): Record<string, string> {
|
|
195
|
+
return typeof value === 'object' && value !== null
|
|
196
|
+
? value as Record<string, string>
|
|
197
|
+
: {}
|
|
198
|
+
}
|
|
208
199
|
}
|
|
209
200
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
}
|
|
201
|
+
const formatIntegrityReport = (report: TargetIntegrityReport): string =>
|
|
202
|
+
report.violations.map(violation => `${violation.path}: ${violation.detail}`).join('\n')
|
|
203
|
+
|
|
204
|
+
return { verifyTargetShape, formatIntegrityReport }
|
|
215
205
|
}
|
|
216
206
|
|
|
217
|
-
|
|
207
|
+
export const targetIntegrityHelper = createTargetIntegrityHelper()
|
|
208
|
+
|
|
209
|
+
/** @deprecated compat:factory-refactor — use `targetIntegrityHelper.verifyTargetShape(…)` */
|
|
210
|
+
export const verifyTargetShape = (files: TargetFileMap): TargetIntegrityReport =>
|
|
211
|
+
targetIntegrityHelper.verifyTargetShape(files)
|
|
212
|
+
|
|
213
|
+
/** @deprecated compat:factory-refactor — use `targetIntegrityHelper.formatIntegrityReport(…)` */
|
|
218
214
|
export const formatIntegrityReport = (report: TargetIntegrityReport): string =>
|
|
219
|
-
|
|
215
|
+
targetIntegrityHelper.formatIntegrityReport(report)
|
package/src/intent/consts.ts
CHANGED
|
@@ -12,6 +12,10 @@
|
|
|
12
12
|
* read the same declarations, and none of them may reinvent a name the others parse.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
+
import { DISPATCHER } from '@owlmeans/auth'
|
|
16
|
+
import { HOME } from '@owlmeans/context'
|
|
17
|
+
import type { ShallowFlow } from '@owlmeans/flow'
|
|
18
|
+
|
|
15
19
|
/** Every address of the hand-off. API routes are guest routes; the landing is a screen. */
|
|
16
20
|
export const intent = Object.freeze({
|
|
17
21
|
base: 'viable:manager-api:intent:base',
|
|
@@ -64,3 +68,66 @@ export enum IntentFlowStep {
|
|
|
64
68
|
/** The platform's home screen, where the draft is offered back. */
|
|
65
69
|
Review = 'review',
|
|
66
70
|
}
|
|
71
|
+
|
|
72
|
+
const payloadMap = { [INTENT_PAYLOAD_REF]: 0 }
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* The hand-off flow both sides walk.
|
|
76
|
+
*
|
|
77
|
+
* `compose` runs on the public site: the prompt is stashed and `handoff` carries the reference to
|
|
78
|
+
* `land`, whose module is the platform's landing screen — so the site redirects to
|
|
79
|
+
* `land`'s address with the payload as query. The landing then enters at `land` FRESH (the
|
|
80
|
+
* reference arrives as `?ref=`, never as a serialized token, which the platform's own sign-in
|
|
81
|
+
* parses from `?flow=` on every page), and either goes on to `review` (signed in) or parks the flow
|
|
82
|
+
* with `suspendFlow` at `sign-in`, whose non-explicit way forward is `review` — the home screen —
|
|
83
|
+
* so whichever sign-in method finishes lands there.
|
|
84
|
+
*
|
|
85
|
+
* The steps address CONCRETE entrypoint aliases, never `$`-prefixed references: this flow is never
|
|
86
|
+
* the live `FlowService` model and nothing here needs `configureFlows`.
|
|
87
|
+
*/
|
|
88
|
+
export const intentFlow: ShallowFlow = {
|
|
89
|
+
flow: INTENT_FLOW,
|
|
90
|
+
initialStep: IntentFlowStep.Compose,
|
|
91
|
+
steps: {
|
|
92
|
+
[IntentFlowStep.Compose]: {
|
|
93
|
+
index: 0,
|
|
94
|
+
step: IntentFlowStep.Compose,
|
|
95
|
+
service: '',
|
|
96
|
+
initial: true,
|
|
97
|
+
payloadMap,
|
|
98
|
+
transitions: {
|
|
99
|
+
handoff: { transition: 'handoff', step: IntentFlowStep.Land },
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
[IntentFlowStep.Land]: {
|
|
103
|
+
index: 1,
|
|
104
|
+
step: IntentFlowStep.Land,
|
|
105
|
+
service: '',
|
|
106
|
+
module: intent.landing,
|
|
107
|
+
initial: true,
|
|
108
|
+
payloadMap,
|
|
109
|
+
transitions: {
|
|
110
|
+
review: { transition: 'review', step: IntentFlowStep.Review },
|
|
111
|
+
'sign-in': { transition: 'sign-in', step: IntentFlowStep.SignIn, explicit: true },
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
[IntentFlowStep.SignIn]: {
|
|
115
|
+
index: 2,
|
|
116
|
+
step: IntentFlowStep.SignIn,
|
|
117
|
+
service: '',
|
|
118
|
+
module: DISPATCHER,
|
|
119
|
+
payloadMap,
|
|
120
|
+
transitions: {
|
|
121
|
+
next: { transition: 'next', step: IntentFlowStep.Review },
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
[IntentFlowStep.Review]: {
|
|
125
|
+
index: 3,
|
|
126
|
+
step: IntentFlowStep.Review,
|
|
127
|
+
service: '',
|
|
128
|
+
module: HOME,
|
|
129
|
+
payloadMap,
|
|
130
|
+
transitions: {},
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
}
|
|
@@ -3,7 +3,7 @@ import { frontend, route, RouteMethod } from '@owlmeans/route'
|
|
|
3
3
|
import { INTENT_API_PATH, INTENT_LANDING_PATH, intent } from './consts.js'
|
|
4
4
|
import { IntentPickupBodySchema, IntentStashBodySchema } from './schemas.js'
|
|
5
5
|
import type {
|
|
6
|
-
IntentPickupBody, IntentPickupResult, IntentProtocolOptions, IntentStashBody, IntentStashResult,
|
|
6
|
+
IntentPickupBody, IntentPickupResult, IntentProtocolOptions, IntentProtocols, IntentStashBody, IntentStashResult,
|
|
7
7
|
} from './types.js'
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -20,7 +20,7 @@ import type {
|
|
|
20
20
|
* The landing screen is `sticky`, like the OAuth consent screens: it is an ordinary in-app screen
|
|
21
21
|
* that a visitor arrives at directly from another origin.
|
|
22
22
|
*/
|
|
23
|
-
export const makeIntentProtocols = (opts: IntentProtocolOptions = {}) => {
|
|
23
|
+
export const makeIntentProtocols = (opts: IntentProtocolOptions = {}): IntentProtocols => {
|
|
24
24
|
const base = openProtocol(route(intent.base, opts.path ?? INTENT_API_PATH))
|
|
25
25
|
|
|
26
26
|
return {
|
package/src/intent/index.ts
CHANGED
package/src/intent/types.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import type { EntrypointProtocol, OpenRequest, OpenValue } from '@owlmeans/entrypoint'
|
|
1
2
|
import type { ResourceRecord } from '@owlmeans/resource'
|
|
2
|
-
import { makeIntentProtocols } from './entrypoints.js'
|
|
3
3
|
|
|
4
4
|
/** What the public site sends: the prompt and the person's confirmation of its processing. */
|
|
5
5
|
export interface IntentStashBody {
|
|
@@ -45,4 +45,11 @@ export interface IntentProtocolOptions {
|
|
|
45
45
|
landing?: string
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
/** The intent-first hand-off tree {@link makeIntentProtocols} declares. */
|
|
49
|
+
export interface IntentProtocols {
|
|
50
|
+
base: EntrypointProtocol<OpenRequest, OpenValue>
|
|
51
|
+
stash: EntrypointProtocol<{ body: IntentStashBody }, IntentStashResult>
|
|
52
|
+
pickup: EntrypointProtocol<{ body: IntentPickupBody }, IntentPickupResult>
|
|
53
|
+
/** The landing screen — `sticky`, an in-app screen a visitor reaches from another origin. */
|
|
54
|
+
landing: EntrypointProtocol<OpenRequest, OpenValue>
|
|
55
|
+
}
|
package/src/moderation/index.ts
CHANGED
package/src/moderation/utils.ts
CHANGED
|
@@ -1,35 +1,12 @@
|
|
|
1
|
-
import { ModerationCategory } from './consts.js'
|
|
1
|
+
import type { ModerationCategory } from './consts.js'
|
|
2
2
|
import type { ModerationAction, ModerationPolicy, ModerationVerdict } from './types.js'
|
|
3
|
+
import { moderationVerdictHelper } from './verdict.js'
|
|
3
4
|
|
|
4
|
-
/**
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
* The wire field is a free string on purpose — see {@link ModerationVerdictSchema}. A model
|
|
8
|
-
* that is allowing has nothing to categorise and still fills the field, so anything
|
|
9
|
-
* unrecognized is treated as absent rather than as a failure.
|
|
10
|
-
*/
|
|
11
|
-
export const normalizeCategory = (category?: string): ModerationCategory | undefined => {
|
|
12
|
-
const values = Object.values(ModerationCategory) as string[]
|
|
5
|
+
/** @deprecated compat:factory-refactor — use `moderationVerdictHelper.normalizeCategory(…)` */
|
|
6
|
+
export const normalizeCategory = (category?: string): ModerationCategory | undefined =>
|
|
7
|
+
moderationVerdictHelper.normalizeCategory(category)
|
|
13
8
|
|
|
14
|
-
|
|
15
|
-
? category as ModerationCategory
|
|
16
|
-
: undefined
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* What to do about a verdict.
|
|
21
|
-
*
|
|
22
|
-
* Pure, because this is the part with the operational levers on it and the part most likely
|
|
23
|
-
* to be wrong in a hurry: `enforce` turns the whole gate into an observer without a deploy,
|
|
24
|
-
* and `bypassEntities` releases one entity when a real customer is wrongly refused.
|
|
25
|
-
*/
|
|
9
|
+
/** @deprecated compat:factory-refactor — use `moderationVerdictHelper.decideModeration(…)` */
|
|
26
10
|
export const decideModeration = (
|
|
27
11
|
verdict: ModerationVerdict, policy: ModerationPolicy & { entityId?: string } = {}
|
|
28
|
-
): ModerationAction =>
|
|
29
|
-
if (verdict.allowed) return 'allow'
|
|
30
|
-
if (policy.entityId != null && policy.bypassEntities?.includes(policy.entityId) === true) return 'allow'
|
|
31
|
-
|
|
32
|
-
// Defaults to ON: a gate that has to be switched on is a gate that is off in every
|
|
33
|
-
// environment nobody remembered to configure.
|
|
34
|
-
return policy.enforce !== false ? 'refuse' : 'shadow'
|
|
35
|
-
}
|
|
12
|
+
): ModerationAction => moderationVerdictHelper.decideModeration(verdict, policy)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ModerationCategory } from '../consts.js'
|
|
2
|
+
import type { ModerationAction, ModerationPolicy, ModerationVerdict } from '../types.js'
|
|
3
|
+
|
|
4
|
+
/** Reading a moderation verdict: its category, and what to do about it. */
|
|
5
|
+
export interface ModerationVerdictHelper {
|
|
6
|
+
/**
|
|
7
|
+
* Narrow whatever the model put in `category` to a real one, or to nothing.
|
|
8
|
+
*
|
|
9
|
+
* The wire field is a free string on purpose — see {@link ModerationVerdictSchema}. A model
|
|
10
|
+
* that is allowing has nothing to categorise and still fills the field, so anything
|
|
11
|
+
* unrecognized is treated as absent rather than as a failure.
|
|
12
|
+
*/
|
|
13
|
+
normalizeCategory: (category?: string) => ModerationCategory | undefined
|
|
14
|
+
/**
|
|
15
|
+
* What to do about a verdict.
|
|
16
|
+
*
|
|
17
|
+
* Pure, because this is the part with the operational levers on it and the part most likely
|
|
18
|
+
* to be wrong in a hurry: `enforce` turns the whole gate into an observer without a deploy,
|
|
19
|
+
* and `bypassEntities` releases one entity when a real customer is wrongly refused.
|
|
20
|
+
*/
|
|
21
|
+
decideModeration: (verdict: ModerationVerdict, policy?: ModerationPolicy & { entityId?: string }) => ModerationAction
|
|
22
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ModerationCategory } from './consts.js'
|
|
2
|
+
import type { ModerationAction, ModerationPolicy, ModerationVerdict } from './types.js'
|
|
3
|
+
import type { ModerationVerdictHelper } from './verdict/types.js'
|
|
4
|
+
|
|
5
|
+
export const createModerationVerdictHelper = (): ModerationVerdictHelper => {
|
|
6
|
+
const normalizeCategory = (category?: string): ModerationCategory | undefined => {
|
|
7
|
+
const values = Object.values(ModerationCategory) as string[]
|
|
8
|
+
|
|
9
|
+
return category != null && values.includes(category)
|
|
10
|
+
? category as ModerationCategory
|
|
11
|
+
: undefined
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const decideModeration = (
|
|
15
|
+
verdict: ModerationVerdict, policy: ModerationPolicy & { entityId?: string } = {}
|
|
16
|
+
): ModerationAction => {
|
|
17
|
+
if (verdict.allowed) return 'allow'
|
|
18
|
+
if (policy.entityId != null && policy.bypassEntities?.includes(policy.entityId) === true) return 'allow'
|
|
19
|
+
|
|
20
|
+
// Defaults to ON: a gate that has to be switched on is a gate that is off in every
|
|
21
|
+
// environment nobody remembered to configure.
|
|
22
|
+
return policy.enforce !== false ? 'refuse' : 'shadow'
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return { normalizeCategory, decideModeration }
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const moderationVerdictHelper = createModerationVerdictHelper()
|