@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
|
@@ -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()
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { Workcard } from '@owlmeans/planning'
|
|
2
|
+
import type { StoryDraft } from '../../areas/types.js'
|
|
3
|
+
import type { UserStory } from '../../ba/types.js'
|
|
4
|
+
import type { StoryDesign } from '../../design/types.js'
|
|
5
|
+
import type { StoryWriteInput } from '../../metadata/types.js'
|
|
6
|
+
import type {
|
|
7
|
+
StoryWriteContent, ViableProjectCard, ViableProjectFields, ViableStoryCard, ViableStoryFields,
|
|
8
|
+
} from '../types.js'
|
|
9
|
+
|
|
10
|
+
/** Reading Viable's planning cards — a project, a user story — and what a write carries. */
|
|
11
|
+
export interface ViableCardHelper {
|
|
12
|
+
/** A `viable:project` card — kind AND type, since a foreign provider may share either alone. */
|
|
13
|
+
isViableProject: (card?: Workcard | null) => card is ViableProjectCard
|
|
14
|
+
/** A `viable:user-story` card. */
|
|
15
|
+
isViableStory: (card?: Workcard | null) => card is ViableStoryCard
|
|
16
|
+
/** Whether a write came from a person (`web`, `connect`) rather than the platform's own runs. */
|
|
17
|
+
isUserChannel: (channel?: string | null) => boolean
|
|
18
|
+
projectFieldsOf: (card: Workcard) => ViableProjectFields
|
|
19
|
+
/**
|
|
20
|
+
* A story card's fields, with the two required ones always answered.
|
|
21
|
+
*
|
|
22
|
+
* An absent area reads as `guest` — the area that guards nothing — and an absent primary flag as
|
|
23
|
+
* `false`, so a reader never branches on a card written by a store that dropped them.
|
|
24
|
+
*/
|
|
25
|
+
storyFieldsOf: (card: Workcard) => ViableStoryFields
|
|
26
|
+
/** The draft shape the analysis prompts and moderation take, from a card. */
|
|
27
|
+
storyDraftOf: (card: Workcard) => StoryDraft
|
|
28
|
+
/**
|
|
29
|
+
* The aggregate the coders take, for a story CARD.
|
|
30
|
+
*
|
|
31
|
+
* The card wins on the narrative, the code, the area and the actor — a person may have changed any
|
|
32
|
+
* of them since the design was written. The design supplies what only it knows: the entities and
|
|
33
|
+
* the screens. Without a design the aggregate has no screens yet.
|
|
34
|
+
*/
|
|
35
|
+
userStoryOf: (card: Workcard, design?: StoryDesign | null) => UserStory
|
|
36
|
+
/**
|
|
37
|
+
* What the metadata store writes to `docs/stories/<code>.md`, from the card and a run's content.
|
|
38
|
+
*
|
|
39
|
+
* The CODE is the target's only story identifier — a card id never reaches a target file — so a
|
|
40
|
+
* story card without one is refused rather than filed under its id. The landing flag is carried
|
|
41
|
+
* only when it is set, so every other story's frontmatter keeps the shape it always had.
|
|
42
|
+
*/
|
|
43
|
+
storyWriteInputOf: (card: Workcard, content: StoryWriteContent) => StoryWriteInput
|
|
44
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { WorkcardKind } from '@owlmeans/planning'
|
|
2
|
+
import type { Workcard } from '@owlmeans/planning'
|
|
3
|
+
import { ProjectArea } from '../areas/consts.js'
|
|
4
|
+
import type { StoryDraft } from '../areas/types.js'
|
|
5
|
+
import type { UserStory } from '../ba/types.js'
|
|
6
|
+
import { storyDesignHelper } from '../design/story.js'
|
|
7
|
+
import type { StoryDesign } from '../design/types.js'
|
|
8
|
+
import type { StoryWriteInput } from '../metadata/types.js'
|
|
9
|
+
import { VIABLE_PROJECT_TYPE, VIABLE_STORY_TYPE, VIABLE_USER_CHANNELS } from './consts.js'
|
|
10
|
+
import { ProjectStoryMissconfigured } from './errors.js'
|
|
11
|
+
import type {
|
|
12
|
+
StoryWriteContent, ViableProjectCard, ViableProjectFields, ViableStoryCard, ViableStoryFields,
|
|
13
|
+
} from './types.js'
|
|
14
|
+
import type { ViableCardHelper } from './card/types.js'
|
|
15
|
+
|
|
16
|
+
export const createViableCardHelper = (): ViableCardHelper => {
|
|
17
|
+
const isViableProject = (card?: Workcard | null): card is ViableProjectCard =>
|
|
18
|
+
card != null && card.kind === WorkcardKind.Project && card.type === VIABLE_PROJECT_TYPE
|
|
19
|
+
|
|
20
|
+
const isViableStory = (card?: Workcard | null): card is ViableStoryCard =>
|
|
21
|
+
card != null && card.kind === WorkcardKind.Card && card.type === VIABLE_STORY_TYPE
|
|
22
|
+
|
|
23
|
+
const isUserChannel = (channel?: string | null): boolean =>
|
|
24
|
+
channel != null && VIABLE_USER_CHANNELS.includes(channel)
|
|
25
|
+
|
|
26
|
+
const projectFieldsOf = (card: Workcard): ViableProjectFields =>
|
|
27
|
+
(card.fields ?? {}) as ViableProjectFields
|
|
28
|
+
|
|
29
|
+
const storyFieldsOf = (card: Workcard): ViableStoryFields => {
|
|
30
|
+
const fields = (card.fields ?? {}) as Partial<ViableStoryFields>
|
|
31
|
+
|
|
32
|
+
return { ...fields, area: fields.area ?? ProjectArea.Guest, primary: fields.primary === true }
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const storyDraftOf = (card: Workcard): StoryDraft =>
|
|
36
|
+
({ story: card.title, area: storyFieldsOf(card).area })
|
|
37
|
+
|
|
38
|
+
const userStoryOf = (card: Workcard, design?: StoryDesign | null): UserStory => {
|
|
39
|
+
const fields = storyFieldsOf(card)
|
|
40
|
+
const base: UserStory = design != null
|
|
41
|
+
? storyDesignHelper.userStoryOfDesign(design)
|
|
42
|
+
: { story: card.title, area: fields.area, entity: null as unknown as string, entities: [], screens: [] }
|
|
43
|
+
const code = card.code ?? base.code
|
|
44
|
+
|
|
45
|
+
return {
|
|
46
|
+
...base,
|
|
47
|
+
story: card.title,
|
|
48
|
+
...(code != null ? { code } : {}),
|
|
49
|
+
area: fields.area,
|
|
50
|
+
...(fields.actor != null ? { actor: fields.actor } : {}),
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const storyWriteInputOf = (card: Workcard, content: StoryWriteContent): StoryWriteInput => {
|
|
55
|
+
if (card.code == null || card.code === '') {
|
|
56
|
+
throw new ProjectStoryMissconfigured('no-code')
|
|
57
|
+
}
|
|
58
|
+
const { status, ...rest } = content
|
|
59
|
+
const fields = storyFieldsOf(card)
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
...rest,
|
|
63
|
+
code: card.code,
|
|
64
|
+
narrative: card.title,
|
|
65
|
+
status: status ?? card.status,
|
|
66
|
+
primary: fields.primary,
|
|
67
|
+
...(fields.landing === true ? { landing: true } : {}),
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return {
|
|
72
|
+
isViableProject, isViableStory, isUserChannel, projectFieldsOf, storyFieldsOf, storyDraftOf, userStoryOf,
|
|
73
|
+
storyWriteInputOf,
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export const viableCardHelper = createViableCardHelper()
|
package/src/planning/helpers.ts
CHANGED
|
@@ -1,136 +1,48 @@
|
|
|
1
|
-
import { WorkcardKind } from '@owlmeans/planning'
|
|
2
1
|
import type { Specification, Workcard } from '@owlmeans/planning'
|
|
3
|
-
import { ProjectArea } from '../areas/consts.js'
|
|
4
2
|
import type { StoryDraft } from '../areas/types.js'
|
|
5
3
|
import type { AgentProject, UserStory } from '../ba/types.js'
|
|
6
|
-
import { userStoryOfDesign } from '../design/helpers.js'
|
|
7
4
|
import type { StoryDesign } from '../design/types.js'
|
|
8
5
|
import type { StoryWriteInput } from '../metadata/types.js'
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
} from './consts.js'
|
|
12
|
-
import { ProjectStoryMissconfigured } from './errors.js'
|
|
6
|
+
import { viableCardHelper } from './card.js'
|
|
7
|
+
import { viableSpecHelper } from './spec.js'
|
|
13
8
|
import type {
|
|
14
9
|
StoryWriteContent, ViableProjectCard, ViableProjectFields, ViableStoryCard, ViableStoryFields,
|
|
15
10
|
} from './types.js'
|
|
16
11
|
|
|
17
|
-
/**
|
|
18
|
-
export const isViableProject = (card?: Workcard | null): card is ViableProjectCard =>
|
|
19
|
-
card != null && card.kind === WorkcardKind.Project && card.type === VIABLE_PROJECT_TYPE
|
|
12
|
+
/** @deprecated compat:factory-refactor — use `viableCardHelper.isViableProject(…)` */
|
|
13
|
+
export const isViableProject = (card?: Workcard | null): card is ViableProjectCard => viableCardHelper.isViableProject(card)
|
|
20
14
|
|
|
21
|
-
/**
|
|
22
|
-
export const isViableStory = (card?: Workcard | null): card is ViableStoryCard =>
|
|
23
|
-
card != null && card.kind === WorkcardKind.Card && card.type === VIABLE_STORY_TYPE
|
|
15
|
+
/** @deprecated compat:factory-refactor — use `viableCardHelper.isViableStory(…)` */
|
|
16
|
+
export const isViableStory = (card?: Workcard | null): card is ViableStoryCard => viableCardHelper.isViableStory(card)
|
|
24
17
|
|
|
25
|
-
/**
|
|
26
|
-
export const isUserChannel = (channel?: string | null): boolean =>
|
|
27
|
-
channel != null && VIABLE_USER_CHANNELS.includes(channel)
|
|
18
|
+
/** @deprecated compat:factory-refactor — use `viableCardHelper.isUserChannel(…)` */
|
|
19
|
+
export const isUserChannel = (channel?: string | null): boolean => viableCardHelper.isUserChannel(channel)
|
|
28
20
|
|
|
29
|
-
|
|
30
|
-
|
|
21
|
+
/** @deprecated compat:factory-refactor — use `viableCardHelper.projectFieldsOf(…)` */
|
|
22
|
+
export const projectFieldsOf = (card: Workcard): ViableProjectFields => viableCardHelper.projectFieldsOf(card)
|
|
31
23
|
|
|
32
|
-
/**
|
|
33
|
-
|
|
34
|
-
*
|
|
35
|
-
* An absent area reads as `guest` — the area that guards nothing — and an absent primary flag as
|
|
36
|
-
* `false`, so a reader never branches on a card written by a store that dropped them.
|
|
37
|
-
*/
|
|
38
|
-
export const storyFieldsOf = (card: Workcard): ViableStoryFields => {
|
|
39
|
-
const fields = (card.fields ?? {}) as Partial<ViableStoryFields>
|
|
24
|
+
/** @deprecated compat:factory-refactor — use `viableCardHelper.storyFieldsOf(…)` */
|
|
25
|
+
export const storyFieldsOf = (card: Workcard): ViableStoryFields => viableCardHelper.storyFieldsOf(card)
|
|
40
26
|
|
|
41
|
-
|
|
42
|
-
|
|
27
|
+
/** @deprecated compat:factory-refactor — use `viableCardHelper.storyDraftOf(…)` */
|
|
28
|
+
export const storyDraftOf = (card: Workcard): StoryDraft => viableCardHelper.storyDraftOf(card)
|
|
43
29
|
|
|
44
|
-
/**
|
|
45
|
-
export const
|
|
46
|
-
(
|
|
30
|
+
/** @deprecated compat:factory-refactor — use `viableCardHelper.userStoryOf(…)` */
|
|
31
|
+
export const userStoryOf = (card: Workcard, design?: StoryDesign | null): UserStory =>
|
|
32
|
+
viableCardHelper.userStoryOf(card, design)
|
|
47
33
|
|
|
48
|
-
/**
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
* The card wins on the narrative, the code, the area and the actor — a person may have changed any
|
|
52
|
-
* of them since the design was written. The design supplies what only it knows: the entities and
|
|
53
|
-
* the screens. Without a design the aggregate has no screens yet.
|
|
54
|
-
*/
|
|
55
|
-
export const userStoryOf = (card: Workcard, design?: StoryDesign | null): UserStory => {
|
|
56
|
-
const fields = storyFieldsOf(card)
|
|
57
|
-
const base: UserStory = design != null
|
|
58
|
-
? userStoryOfDesign(design)
|
|
59
|
-
: { story: card.title, area: fields.area, entity: null as unknown as string, entities: [], screens: [] }
|
|
60
|
-
const code = card.code ?? base.code
|
|
34
|
+
/** @deprecated compat:factory-refactor — use `viableSpecHelper.currentSpecOf(…)` */
|
|
35
|
+
export const currentSpecOf = (specs: readonly Specification[], category: string): Specification | null =>
|
|
36
|
+
viableSpecHelper.currentSpecOf(specs, category)
|
|
61
37
|
|
|
62
|
-
|
|
63
|
-
...base,
|
|
64
|
-
story: card.title,
|
|
65
|
-
...(code != null ? { code } : {}),
|
|
66
|
-
area: fields.area,
|
|
67
|
-
...(fields.actor != null ? { actor: fields.actor } : {}),
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* The current document of one category among a card's specifications.
|
|
73
|
-
*
|
|
74
|
-
* The highest revision wins, then the most recently updated; a category nobody wrote answers
|
|
75
|
-
* `null`.
|
|
76
|
-
*/
|
|
77
|
-
export const currentSpecOf = (
|
|
78
|
-
specs: readonly Specification[], category: string,
|
|
79
|
-
): Specification | null =>
|
|
80
|
-
specs
|
|
81
|
-
.filter(spec => spec.category === category)
|
|
82
|
-
.reduce<Specification | null>((best, spec) => {
|
|
83
|
-
if (best == null) return spec
|
|
84
|
-
const byRevision = (spec.revision ?? 0) - (best.revision ?? 0)
|
|
85
|
-
if (byRevision !== 0) return byRevision > 0 ? spec : best
|
|
86
|
-
|
|
87
|
-
return (spec.updatedAt ?? spec.createdAt) > (best.updatedAt ?? best.createdAt) ? spec : best
|
|
88
|
-
}, null)
|
|
89
|
-
|
|
90
|
-
/** The body of a category's current document, `''` when there is none. */
|
|
38
|
+
/** @deprecated compat:factory-refactor — use `viableSpecHelper.currentSpecBody(…)` */
|
|
91
39
|
export const currentSpecBody = (specs: readonly Specification[], category: string): string =>
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* The brief a generator reads, assembled from the project card and its specifications.
|
|
96
|
-
*
|
|
97
|
-
* `name` is the card's title and `alias` its code; a brief part nobody wrote is `''`, which is
|
|
98
|
-
* what every prompt already treats as "not stated".
|
|
99
|
-
*/
|
|
100
|
-
export const projectBriefOf = (project: Workcard, specs: readonly Specification[]): AgentProject => {
|
|
101
|
-
const { language } = projectFieldsOf(project)
|
|
102
|
-
|
|
103
|
-
return {
|
|
104
|
-
name: project.title,
|
|
105
|
-
...(project.code != null ? { alias: project.code } : {}),
|
|
106
|
-
description: project.description ?? '',
|
|
107
|
-
specification: currentSpecBody(specs, ViableSpecCategory.Specification),
|
|
108
|
-
designSystem: currentSpecBody(specs, ViableSpecCategory.DesignSystem),
|
|
109
|
-
vision: currentSpecBody(specs, ViableSpecCategory.Vision),
|
|
110
|
-
...(language != null ? { language } : {}),
|
|
111
|
-
}
|
|
112
|
-
}
|
|
40
|
+
viableSpecHelper.currentSpecBody(specs, category)
|
|
113
41
|
|
|
114
|
-
/**
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
* The CODE is the target's only story identifier — a card id never reaches a target file — so a
|
|
118
|
-
* story card without one is refused rather than filed under its id. The landing flag is carried
|
|
119
|
-
* only when it is set, so every other story's frontmatter keeps the shape it always had.
|
|
120
|
-
*/
|
|
121
|
-
export const storyWriteInputOf = (card: Workcard, content: StoryWriteContent): StoryWriteInput => {
|
|
122
|
-
if (card.code == null || card.code === '') {
|
|
123
|
-
throw new ProjectStoryMissconfigured('no-code')
|
|
124
|
-
}
|
|
125
|
-
const { status, ...rest } = content
|
|
126
|
-
const fields = storyFieldsOf(card)
|
|
42
|
+
/** @deprecated compat:factory-refactor — use `viableSpecHelper.projectBriefOf(…)` */
|
|
43
|
+
export const projectBriefOf = (project: Workcard, specs: readonly Specification[]): AgentProject =>
|
|
44
|
+
viableSpecHelper.projectBriefOf(project, specs)
|
|
127
45
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
narrative: card.title,
|
|
132
|
-
status: status ?? card.status,
|
|
133
|
-
primary: fields.primary,
|
|
134
|
-
...(fields.landing === true ? { landing: true } : {}),
|
|
135
|
-
}
|
|
136
|
-
}
|
|
46
|
+
/** @deprecated compat:factory-refactor — use `viableCardHelper.storyWriteInputOf(…)` */
|
|
47
|
+
export const storyWriteInputOf = (card: Workcard, content: StoryWriteContent): StoryWriteInput =>
|
|
48
|
+
viableCardHelper.storyWriteInputOf(card, content)
|
package/src/planning/index.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
export * from './consts.js'
|
|
2
2
|
export * from './errors.js'
|
|
3
3
|
export * from './schemas.js'
|
|
4
|
+
export * from './card.js'
|
|
5
|
+
export * from './spec.js'
|
|
4
6
|
export * from './helpers.js'
|
|
5
7
|
export * from './landing.js'
|
|
6
8
|
export type * from './types.js'
|
|
9
|
+
export type * from './card/types.js'
|
|
10
|
+
export type * from './spec/types.js'
|
|
11
|
+
export type * from './landing/types.js'
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** The landing sentence a landing-gate story's narrative carries. */
|
|
2
|
+
export interface LandingSentenceHelper {
|
|
3
|
+
/** Whether a narrative already carries the landing sentence, whatever whitespace surrounds it. */
|
|
4
|
+
hasLandingSentence: (title: string) => boolean
|
|
5
|
+
/**
|
|
6
|
+
* The narrative with the landing sentence appended once.
|
|
7
|
+
*
|
|
8
|
+
* Idempotent — a narrative that already carries the sentence comes back unchanged, so a decision
|
|
9
|
+
* step that is resumed after it wrote the card never appends a second copy. It never produces a
|
|
10
|
+
* title longer than a card accepts (`TITLE_MAX`): a narrative with no room left is returned as it
|
|
11
|
+
* is rather than cut, because a person's words are worth more than the note, and the flag on the
|
|
12
|
+
* card still carries the fact.
|
|
13
|
+
*/
|
|
14
|
+
withLandingSentence: (title: string) => string
|
|
15
|
+
}
|
package/src/planning/landing.ts
CHANGED
|
@@ -1,30 +1,33 @@
|
|
|
1
1
|
import { TITLE_MAX } from '@owlmeans/planning'
|
|
2
2
|
import { LANDING_STORY_SENTENCE } from './consts.js'
|
|
3
|
+
import type { LandingSentenceHelper } from './landing/types.js'
|
|
3
4
|
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
return title
|
|
22
|
-
}
|
|
23
|
-
const base = title.trimEnd()
|
|
24
|
-
if (base === '') {
|
|
25
|
-
return LANDING_STORY_SENTENCE
|
|
5
|
+
export const createLandingSentenceHelper = (): LandingSentenceHelper => {
|
|
6
|
+
const normalized = (text: string): string => text.replace(/\s+/g, ' ')
|
|
7
|
+
|
|
8
|
+
const hasLandingSentence = (title: string): boolean =>
|
|
9
|
+
normalized(title).includes(LANDING_STORY_SENTENCE)
|
|
10
|
+
|
|
11
|
+
const withLandingSentence = (title: string): string => {
|
|
12
|
+
if (hasLandingSentence(title)) {
|
|
13
|
+
return title
|
|
14
|
+
}
|
|
15
|
+
const base = title.trimEnd()
|
|
16
|
+
if (base === '') {
|
|
17
|
+
return LANDING_STORY_SENTENCE
|
|
18
|
+
}
|
|
19
|
+
const joined = `${base} ${LANDING_STORY_SENTENCE}`
|
|
20
|
+
|
|
21
|
+
return joined.length > TITLE_MAX ? title : joined
|
|
26
22
|
}
|
|
27
|
-
const joined = `${base} ${LANDING_STORY_SENTENCE}`
|
|
28
23
|
|
|
29
|
-
return
|
|
24
|
+
return { hasLandingSentence, withLandingSentence }
|
|
30
25
|
}
|
|
26
|
+
|
|
27
|
+
export const landingSentenceHelper = createLandingSentenceHelper()
|
|
28
|
+
|
|
29
|
+
/** @deprecated compat:factory-refactor — use `landingSentenceHelper.hasLandingSentence(…)` */
|
|
30
|
+
export const hasLandingSentence = (title: string): boolean => landingSentenceHelper.hasLandingSentence(title)
|
|
31
|
+
|
|
32
|
+
/** @deprecated compat:factory-refactor — use `landingSentenceHelper.withLandingSentence(…)` */
|
|
33
|
+
export const withLandingSentence = (title: string): string => landingSentenceHelper.withLandingSentence(title)
|
package/src/planning/schemas.ts
CHANGED
|
@@ -198,7 +198,7 @@ export const VIABLE_SPEC_FLOW_SCHEMA: StatusFlowSchema = {
|
|
|
198
198
|
transitions: [],
|
|
199
199
|
}
|
|
200
200
|
|
|
201
|
-
|
|
201
|
+
const slot = (
|
|
202
202
|
category: ViableSpecCategory, format: SpecificationFormat, extra: Partial<SpecificationSlot> = {},
|
|
203
203
|
): SpecificationSlot => ({ category, format, type: VIABLE_SPEC_TYPE, ...extra })
|
|
204
204
|
|
|
@@ -222,7 +222,7 @@ export const VIABLE_STORY_SLOTS: SpecificationSlot[] = [
|
|
|
222
222
|
}),
|
|
223
223
|
]
|
|
224
224
|
|
|
225
|
-
|
|
225
|
+
const storyLink = (name: ViableRelationship): RelationshipType =>
|
|
226
226
|
({ name, from: [VIABLE_STORY_TYPE], to: [VIABLE_STORY_TYPE], single: true })
|
|
227
227
|
|
|
228
228
|
export const VIABLE_STORY_RELATIONSHIPS: RelationshipType[] = [
|
|
@@ -264,7 +264,7 @@ export const VIABLE_SPEC_TYPE_SCHEMA: WorkcardTypeSchema = {
|
|
|
264
264
|
specifications: [],
|
|
265
265
|
}
|
|
266
266
|
|
|
267
|
-
|
|
267
|
+
const reserved = (type: string, code: WorkcardTypeSchema['code']): WorkcardTypeSchema => ({
|
|
268
268
|
type,
|
|
269
269
|
kind: WorkcardKind.Card,
|
|
270
270
|
version: 1,
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Specification, Workcard } from '@owlmeans/planning'
|
|
2
|
+
import type { AgentProject } from '../../ba/types.js'
|
|
3
|
+
|
|
4
|
+
/** Reading a card's specifications: the current document per category, and the project brief. */
|
|
5
|
+
export interface ViableSpecHelper {
|
|
6
|
+
/**
|
|
7
|
+
* The current document of one category among a card's specifications.
|
|
8
|
+
*
|
|
9
|
+
* The highest revision wins, then the most recently updated; a category nobody wrote answers
|
|
10
|
+
* `null`.
|
|
11
|
+
*/
|
|
12
|
+
currentSpecOf: (specs: readonly Specification[], category: string) => Specification | null
|
|
13
|
+
/** The body of a category's current document, `''` when there is none. */
|
|
14
|
+
currentSpecBody: (specs: readonly Specification[], category: string) => string
|
|
15
|
+
/**
|
|
16
|
+
* The brief a generator reads, assembled from the project card and its specifications.
|
|
17
|
+
*
|
|
18
|
+
* `name` is the card's title and `alias` its code; a brief part nobody wrote is `''`, which is
|
|
19
|
+
* what every prompt already treats as "not stated".
|
|
20
|
+
*/
|
|
21
|
+
projectBriefOf: (project: Workcard, specs: readonly Specification[]) => AgentProject
|
|
22
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Specification, Workcard } from '@owlmeans/planning'
|
|
2
|
+
import type { AgentProject } from '../ba/types.js'
|
|
3
|
+
import { viableCardHelper } from './card.js'
|
|
4
|
+
import { ViableSpecCategory } from './consts.js'
|
|
5
|
+
import type { ViableSpecHelper } from './spec/types.js'
|
|
6
|
+
|
|
7
|
+
export const createViableSpecHelper = (): ViableSpecHelper => {
|
|
8
|
+
const currentSpecOf = (
|
|
9
|
+
specs: readonly Specification[], category: string,
|
|
10
|
+
): Specification | null =>
|
|
11
|
+
specs
|
|
12
|
+
.filter(spec => spec.category === category)
|
|
13
|
+
.reduce<Specification | null>((best, spec) => {
|
|
14
|
+
if (best == null) return spec
|
|
15
|
+
const byRevision = (spec.revision ?? 0) - (best.revision ?? 0)
|
|
16
|
+
if (byRevision !== 0) return byRevision > 0 ? spec : best
|
|
17
|
+
|
|
18
|
+
return (spec.updatedAt ?? spec.createdAt) > (best.updatedAt ?? best.createdAt) ? spec : best
|
|
19
|
+
}, null)
|
|
20
|
+
|
|
21
|
+
const currentSpecBody = (specs: readonly Specification[], category: string): string =>
|
|
22
|
+
currentSpecOf(specs, category)?.body ?? ''
|
|
23
|
+
|
|
24
|
+
const projectBriefOf = (project: Workcard, specs: readonly Specification[]): AgentProject => {
|
|
25
|
+
const { language } = viableCardHelper.projectFieldsOf(project)
|
|
26
|
+
|
|
27
|
+
return {
|
|
28
|
+
name: project.title,
|
|
29
|
+
...(project.code != null ? { alias: project.code } : {}),
|
|
30
|
+
description: project.description ?? '',
|
|
31
|
+
specification: currentSpecBody(specs, ViableSpecCategory.Specification),
|
|
32
|
+
designSystem: currentSpecBody(specs, ViableSpecCategory.DesignSystem),
|
|
33
|
+
vision: currentSpecBody(specs, ViableSpecCategory.Vision),
|
|
34
|
+
...(language != null ? { language } : {}),
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return { currentSpecOf, currentSpecBody, projectBriefOf }
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export const viableSpecHelper = createViableSpecHelper()
|
package/src/planning/types.ts
CHANGED
|
@@ -8,6 +8,7 @@ import type { ProjectOrigin } from '../convert/types.js'
|
|
|
8
8
|
import type { StoryActor } from '../design/consts.js'
|
|
9
9
|
import type { StoryWriteInput } from '../metadata/types.js'
|
|
10
10
|
|
|
11
|
+
// Kept as a type: card fields must satisfy `Record<string, unknown>`, which needs the implicit index signature of a type literal.
|
|
11
12
|
/**
|
|
12
13
|
* What a `viable:project` card keeps under `fields`.
|
|
13
14
|
*
|
|
@@ -65,6 +66,7 @@ export interface ViableLandingDecision {
|
|
|
65
66
|
at: string
|
|
66
67
|
}
|
|
67
68
|
|
|
69
|
+
// Kept as a type: card fields must satisfy `Record<string, unknown>`, which needs the implicit index signature of a type literal.
|
|
68
70
|
/**
|
|
69
71
|
* What a `viable:user-story` card keeps under `fields`.
|
|
70
72
|
*
|
|
@@ -102,7 +104,7 @@ export interface ViableStoryCard extends Card {
|
|
|
102
104
|
}
|
|
103
105
|
|
|
104
106
|
/** A document under a Viable card — the brief parts, the scaffold plan, a story design. */
|
|
105
|
-
export
|
|
107
|
+
export interface ViableSpecification extends Specification {}
|
|
106
108
|
|
|
107
109
|
/**
|
|
108
110
|
* What a develop run hands the metadata store beside the card.
|
|
@@ -110,6 +112,4 @@ export type ViableSpecification = Specification
|
|
|
110
112
|
* The code, the narrative, the primary flag and the landing flag are the CARD's and are never
|
|
111
113
|
* passed separately — a second copy is a second answer. `status` defaults to the card's own.
|
|
112
114
|
*/
|
|
113
|
-
export
|
|
114
|
-
& Omit<StoryWriteInput, 'code' | 'narrative' | 'primary' | 'landing' | 'status'>
|
|
115
|
-
& { status?: string }
|
|
115
|
+
export interface StoryWriteContent extends Omit<StoryWriteInput, 'code' | 'narrative' | 'primary' | 'landing' | 'status'> { status?: string }
|
package/src/scaffold/consts.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
BentoFragmentKind, LandingAnchor, LandingBand, LandingGateFieldKind, LandingSlot,
|
|
3
|
+
} from './types.js'
|
|
2
4
|
|
|
3
5
|
/**
|
|
4
6
|
* The shapes a drawn widget can take.
|
|
@@ -47,3 +49,65 @@ export const LANDING_GATE_MAX_FIELDS = 3
|
|
|
47
49
|
|
|
48
50
|
/** The options a `select` field carries: fewer is no choice, more is a list to browse. */
|
|
49
51
|
export const LANDING_GATE_OPTIONS = { min: 2, max: 6 } as const
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* The bands of a landing page in the HOUSE ORDER — the order every page draws them in, whichever
|
|
55
|
+
* of them it carries. `problem` is the problem-and-solution band.
|
|
56
|
+
*/
|
|
57
|
+
export const LANDING_BAND_ORDER: LandingBand[] = [
|
|
58
|
+
'hero', 'steps', 'features', 'use-cases', 'problem', 'differentiator', 'approach',
|
|
59
|
+
'testimonials', 'about', 'closing',
|
|
60
|
+
]
|
|
61
|
+
|
|
62
|
+
/** The bands the guest header menu can jump to, in page order. */
|
|
63
|
+
export const LANDING_ANCHORS: LandingAnchor[] = [
|
|
64
|
+
'how', 'features', 'use-cases', 'why', 'approach', 'community', 'about',
|
|
65
|
+
]
|
|
66
|
+
|
|
67
|
+
/** Which band each menu anchor jumps to. */
|
|
68
|
+
export const LANDING_ANCHOR_BAND: Record<LandingAnchor, LandingBand> = {
|
|
69
|
+
how: 'steps',
|
|
70
|
+
features: 'features',
|
|
71
|
+
'use-cases': 'use-cases',
|
|
72
|
+
why: 'differentiator',
|
|
73
|
+
approach: 'approach',
|
|
74
|
+
community: 'testimonials',
|
|
75
|
+
about: 'about',
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* The English menu labels an entry falls back to when neither the menu nor the page's own section
|
|
80
|
+
* label names it. A fallback, never the intended copy: the plan writes labels in the product's
|
|
81
|
+
* language.
|
|
82
|
+
*/
|
|
83
|
+
export const LANDING_ANCHOR_LABELS: Record<LandingAnchor, string> = {
|
|
84
|
+
how: 'How it works',
|
|
85
|
+
features: 'Features',
|
|
86
|
+
'use-cases': 'Use cases',
|
|
87
|
+
why: 'Why us',
|
|
88
|
+
approach: 'How we work',
|
|
89
|
+
community: 'Reviews',
|
|
90
|
+
about: 'About',
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** Entries of the guest header menu: fewer is not a menu, more crowds a phone's header. */
|
|
94
|
+
export const LANDING_MENU = { min: 2, max: 4 } as const
|
|
95
|
+
|
|
96
|
+
/** Cases of the use-cases band; fewer than `min` and the band is not drawn. */
|
|
97
|
+
export const LANDING_USE_CASES = { min: 2, max: 4 } as const
|
|
98
|
+
|
|
99
|
+
/** Rows of the differentiator's usual-vs-ours contrast; fewer than `min` and no table is drawn. */
|
|
100
|
+
export const LANDING_CONTRAST = { min: 2, max: 3 } as const
|
|
101
|
+
|
|
102
|
+
/** Principles of the approach band; fewer than `min` and the band is not drawn. */
|
|
103
|
+
export const LANDING_PRINCIPLES = { min: 3, max: 4 } as const
|
|
104
|
+
|
|
105
|
+
/** Every button or link of a landing page that can open a user story, in page order. */
|
|
106
|
+
export const LANDING_SLOTS: LandingSlot[] = [
|
|
107
|
+
'hero.cta', 'hero.secondary', 'hero.browse',
|
|
108
|
+
'useCase.1', 'useCase.2', 'useCase.3', 'useCase.4',
|
|
109
|
+
'closing.primary', 'closing.secondary', 'closing.link.1', 'closing.link.2',
|
|
110
|
+
]
|
|
111
|
+
|
|
112
|
+
/** The slots a landing gate replaces: with a usable gate the page draws none of them. */
|
|
113
|
+
export const LANDING_GATE_SLOTS: LandingSlot[] = ['hero.cta', 'hero.secondary', 'closing.primary']
|