@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
|
@@ -3,190 +3,224 @@ import { agentLoopActions, codeActions, documentActions, structuredActions } fro
|
|
|
3
3
|
import { AgentCodeLanguage, AgentMarkdownKind, AgentMessageCategory, AgentMessageRole, AgentStructuredKind } from './consts.js'
|
|
4
4
|
import type { RecordValue } from './types.local.js'
|
|
5
5
|
import type { AgentMessageClassificationInput, AgentMessagePresentation } from './types.js'
|
|
6
|
+
import type { AgentPresentationHelper } from './presentation/types.js'
|
|
7
|
+
|
|
8
|
+
export const createAgentPresentationHelper = (): AgentPresentationHelper => {
|
|
9
|
+
const asRecord = (value: unknown): RecordValue | undefined =>
|
|
10
|
+
value != null && typeof value === 'object' && !Array.isArray(value)
|
|
11
|
+
? value as RecordValue
|
|
12
|
+
: undefined
|
|
13
|
+
|
|
14
|
+
const actionOf = (input: AgentMessageClassificationInput): string => input.action?.toLowerCase() ?? ''
|
|
15
|
+
|
|
16
|
+
const sourceOf = (input: AgentMessageClassificationInput): string =>
|
|
17
|
+
`${input.agent ?? ''} ${input.helper ?? ''}`.toLowerCase()
|
|
18
|
+
|
|
19
|
+
const contentOf = (input: AgentMessageClassificationInput): string => input.text?.trim() ?? ''
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Source extraction is an internal context-reduction pass. Its terminal tool call contains only
|
|
23
|
+
* line ranges, which are useful to the coder but add no useful information to a person's journal.
|
|
24
|
+
*/
|
|
25
|
+
const isAgentMessageHidden = (input: AgentMessageClassificationInput): boolean =>
|
|
26
|
+
actionOf(input) === 'source-extract'
|
|
27
|
+
|
|
28
|
+
/** Maps the attribution that reached the event boundary to the visual specialist family. */
|
|
29
|
+
const agentMessageRoleOf = (input: AgentMessageClassificationInput): AgentMessageRole => {
|
|
30
|
+
const source = sourceOf(input)
|
|
31
|
+
const action = actionOf(input)
|
|
32
|
+
|
|
33
|
+
if (action === 'arbitrary-modification' || source.includes('orchestrator')) return AgentMessageRole.Orchestrator
|
|
34
|
+
if (source.includes('fix')) return AgentMessageRole.Repair
|
|
35
|
+
if (source.includes('coder') || source.includes('developer') || codeActions.has(action)) return AgentMessageRole.Developer
|
|
36
|
+
if (source.includes('visual') || source.includes('ui-helper')) return AgentMessageRole.VisualDesign
|
|
37
|
+
if (source.includes('ux-')) return AgentMessageRole.Ux
|
|
38
|
+
if (source.includes('business') || source.includes('ba-') || source.includes('analysis') || source.includes('analyst')) return AgentMessageRole.Analytical
|
|
39
|
+
if (source.includes('product') || source.includes('naming')) return AgentMessageRole.Product
|
|
40
|
+
if (source.includes('architect') || source.includes('arch') || source.includes('layout-helper') ||
|
|
41
|
+
source.includes('api-helper') || source.includes('access-helper') || source.includes('datalayer-helper') ||
|
|
42
|
+
source.includes('domain') || source.includes('nav-helper') || source.includes('ui-com-helper') ||
|
|
43
|
+
source.includes('ui-state-helper')) return AgentMessageRole.Architect
|
|
44
|
+
return AgentMessageRole.Technical
|
|
45
|
+
}
|
|
6
46
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
47
|
+
/** Pulls a schema argument out of LangChain's serialised tool-call shape. */
|
|
48
|
+
const agentToolCallArguments = (value: unknown): unknown => {
|
|
49
|
+
if (!Array.isArray(value) || value.length !== 1) return value
|
|
50
|
+
const call = asRecord(value[0])
|
|
51
|
+
return call?.args ?? value
|
|
52
|
+
}
|
|
11
53
|
|
|
12
|
-
const
|
|
54
|
+
const structuredKindOf = (value: unknown): AgentStructuredKind | undefined => {
|
|
55
|
+
if (value == null) return undefined
|
|
13
56
|
|
|
14
|
-
const
|
|
15
|
-
|
|
57
|
+
const toolArgs = agentToolCallArguments(value)
|
|
58
|
+
const object = asRecord(toolArgs)
|
|
59
|
+
if (object == null) {
|
|
60
|
+
if (Array.isArray(toolArgs)) return AgentStructuredKind.GenericList
|
|
61
|
+
return undefined
|
|
62
|
+
}
|
|
16
63
|
|
|
17
|
-
|
|
64
|
+
// Checked ahead of the single-array shapes below: a scaffold plan carries its own `stories`
|
|
65
|
+
// array (so the StoryPlan check would otherwise swallow it), and a runtime decision straight
|
|
66
|
+
// from the MODEL never carries `actor`/`worker` — those are added only once the decision is
|
|
67
|
+
// persisted onto a StoryDesign — so requiring them here missed every live model call.
|
|
68
|
+
if ('identity' in object && 'guestHome' in object && 'areas' in object && 'stories' in object) {
|
|
69
|
+
return AgentStructuredKind.ScaffoldPlan
|
|
70
|
+
}
|
|
71
|
+
if (Array.isArray(object.jobs) && Array.isArray(object.agents) && 'kv' in object) {
|
|
72
|
+
return AgentStructuredKind.RuntimeDecision
|
|
73
|
+
}
|
|
18
74
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
if (source.includes('coder') || source.includes('developer') || codeActions.has(action)) return AgentMessageRole.Developer
|
|
34
|
-
if (source.includes('visual') || source.includes('ui-helper')) return AgentMessageRole.VisualDesign
|
|
35
|
-
if (source.includes('ux-')) return AgentMessageRole.Ux
|
|
36
|
-
if (source.includes('business') || source.includes('ba-') || source.includes('analysis') || source.includes('analyst')) return AgentMessageRole.Analytical
|
|
37
|
-
if (source.includes('product') || source.includes('naming')) return AgentMessageRole.Product
|
|
38
|
-
if (source.includes('architect') || source.includes('arch') || source.includes('layout-helper') ||
|
|
39
|
-
source.includes('api-helper') || source.includes('access-helper') || source.includes('datalayer-helper') ||
|
|
40
|
-
source.includes('domain') || source.includes('nav-helper') || source.includes('ui-com-helper') ||
|
|
41
|
-
source.includes('ui-state-helper')) return AgentMessageRole.Architect
|
|
42
|
-
return AgentMessageRole.Technical
|
|
43
|
-
}
|
|
75
|
+
if (Array.isArray(object.files)) return AgentStructuredKind.ArtifactSelection
|
|
76
|
+
if (Array.isArray(object.entities)) return AgentStructuredKind.EntitySelection
|
|
77
|
+
if (Array.isArray(object.stories)) return AgentStructuredKind.StoryPlan
|
|
78
|
+
if (Array.isArray(object.screens)) return AgentStructuredKind.ScreenPlan
|
|
79
|
+
if (Array.isArray(object.components)) return AgentStructuredKind.ComponentPlan
|
|
80
|
+
if (Array.isArray(object.transitions)) return AgentStructuredKind.TransitionPlan
|
|
81
|
+
if (Array.isArray(object.entries)) return AgentStructuredKind.EntrypointSelection
|
|
82
|
+
if (Array.isArray(object.candidates)) return AgentStructuredKind.CandidateRanking
|
|
83
|
+
if (Object.values(object).some(value => {
|
|
84
|
+
const entry = asRecord(value)
|
|
85
|
+
return entry != null && Array.isArray(entry.permissions) && 'level' in entry
|
|
86
|
+
})) return AgentStructuredKind.AccessPolicy
|
|
87
|
+
return AgentStructuredKind.GenericRecord
|
|
88
|
+
}
|
|
44
89
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
if (!Array.isArray(value) || value.length !== 1) return value
|
|
48
|
-
const call = asRecord(value[0])
|
|
49
|
-
return call?.args ?? value
|
|
50
|
-
}
|
|
90
|
+
const decisionAction = (action: string): boolean =>
|
|
91
|
+
action.startsWith('should-') || action.startsWith('is-') || action.includes('blueprint-case') || action.includes('choose-case')
|
|
51
92
|
|
|
52
|
-
const
|
|
53
|
-
|
|
93
|
+
const fileExtensionLanguage = (path: string): AgentCodeLanguage => {
|
|
94
|
+
const name = path.toLowerCase().split('?')[0]
|
|
95
|
+
if (/\.(tsx|jsx)$/.test(name)) return AgentCodeLanguage.ReactTsx
|
|
96
|
+
if (/\.css$/.test(name)) return AgentCodeLanguage.Css
|
|
97
|
+
if (/\.(ts|mts|cts|js|mjs|cjs)$/.test(name)) return AgentCodeLanguage.TypeScript
|
|
98
|
+
if (/\.json$/.test(name)) return AgentCodeLanguage.Json
|
|
99
|
+
return AgentCodeLanguage.Other
|
|
100
|
+
}
|
|
54
101
|
|
|
55
|
-
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
return undefined
|
|
102
|
+
/** Finds the language of a unified diff from its destination (or source) file path. */
|
|
103
|
+
const agentDiffLanguageOf = (text: string): AgentCodeLanguage => {
|
|
104
|
+
const match = text.match(/^\+\+\+\s+(?:b\/)?(.+)$/m) ?? text.match(/^---\s+(?:a\/)?(.+)$/m)
|
|
105
|
+
return match == null ? AgentCodeLanguage.Other : fileExtensionLanguage(match[1])
|
|
60
106
|
}
|
|
61
107
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
return
|
|
108
|
+
const fencedLanguageOf = (text: string): AgentCodeLanguage | undefined => {
|
|
109
|
+
const match = text.match(/^```([\w+-]+)/m)
|
|
110
|
+
const language = match?.[1]?.toLowerCase()
|
|
111
|
+
if (language == null) return undefined
|
|
112
|
+
if (['tsx', 'jsx', 'react'].includes(language)) return AgentCodeLanguage.ReactTsx
|
|
113
|
+
if (language === 'css') return AgentCodeLanguage.Css
|
|
114
|
+
if (['ts', 'typescript', 'js', 'javascript'].includes(language)) return AgentCodeLanguage.TypeScript
|
|
115
|
+
if (language === 'json') return AgentCodeLanguage.Json
|
|
116
|
+
return AgentCodeLanguage.Other
|
|
68
117
|
}
|
|
69
|
-
|
|
70
|
-
|
|
118
|
+
|
|
119
|
+
/** Conservative code detection; prose with one identifier remains plain text. */
|
|
120
|
+
const agentCodeLanguageOf = (text: string): AgentCodeLanguage => {
|
|
121
|
+
const content = text.trim().replace(/^```[\w+-]*\n?|\n?```$/g, '')
|
|
122
|
+
const fenced = fencedLanguageOf(text)
|
|
123
|
+
if (fenced != null) return fenced
|
|
124
|
+
if (content === '') return AgentCodeLanguage.Other
|
|
125
|
+
try {
|
|
126
|
+
JSON.parse(content)
|
|
127
|
+
if (/^[{[]/.test(content)) return AgentCodeLanguage.Json
|
|
128
|
+
} catch {
|
|
129
|
+
// The remaining heuristics deliberately require source-like syntax.
|
|
130
|
+
}
|
|
131
|
+
if (/<[A-Za-z][\w.:-]*(?:\s[^>]*)?\/>|<[A-Za-z][\w.:-]*(?:\s[^>]*)?>/.test(content) &&
|
|
132
|
+
/\b(import|export|const|function|return)\b/.test(content)) return AgentCodeLanguage.ReactTsx
|
|
133
|
+
if (/(^|\n)\s*(?:[.#][\w-]+|[a-z][\w-]*(?:\[[^\]]+\])?)\s*\{[^}]*:[^}]*\}/.test(content)) {
|
|
134
|
+
return AgentCodeLanguage.Css
|
|
135
|
+
}
|
|
136
|
+
if (/\b(import|export|interface|type|const|let|function|class)\b/.test(content) &&
|
|
137
|
+
/[;{}]|=>/.test(content)) return AgentCodeLanguage.TypeScript
|
|
138
|
+
return AgentCodeLanguage.Other
|
|
71
139
|
}
|
|
72
140
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
if (Array.isArray(object.stories)) return AgentStructuredKind.StoryPlan
|
|
76
|
-
if (Array.isArray(object.screens)) return AgentStructuredKind.ScreenPlan
|
|
77
|
-
if (Array.isArray(object.components)) return AgentStructuredKind.ComponentPlan
|
|
78
|
-
if (Array.isArray(object.transitions)) return AgentStructuredKind.TransitionPlan
|
|
79
|
-
if (Array.isArray(object.entries)) return AgentStructuredKind.EntrypointSelection
|
|
80
|
-
if (Array.isArray(object.candidates)) return AgentStructuredKind.CandidateRanking
|
|
81
|
-
if (Object.values(object).some(value => {
|
|
82
|
-
const entry = asRecord(value)
|
|
83
|
-
return entry != null && Array.isArray(entry.permissions) && 'level' in entry
|
|
84
|
-
})) return AgentStructuredKind.AccessPolicy
|
|
85
|
-
return AgentStructuredKind.GenericRecord
|
|
86
|
-
}
|
|
141
|
+
const isUnifiedDiff = (text: string): boolean =>
|
|
142
|
+
/^---\s+.+\n\+\+\+\s+.+/m.test(text) || (/^@@\s+[-+]/m.test(text) && /^(?:\+|-)[^+-]/m.test(text))
|
|
87
143
|
|
|
88
|
-
const
|
|
89
|
-
|
|
144
|
+
const markdownKindOf = (text: string): AgentMarkdownKind | undefined => {
|
|
145
|
+
if (/^#{1,6}\s+/m.test(text) || /^>\s+/m.test(text) || /^\|.+\|\s*$/m.test(text)) {
|
|
146
|
+
return AgentMarkdownKind.Documentation
|
|
147
|
+
}
|
|
148
|
+
const listItems = text.match(/^\s*(?:[-*+]\s+|\d+[.)]\s+)/gm)?.length ?? 0
|
|
149
|
+
return listItems >= 2 ? AgentMarkdownKind.Documentation : undefined
|
|
150
|
+
}
|
|
90
151
|
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
152
|
+
const isGenericStructure = (kind: AgentStructuredKind | undefined): boolean =>
|
|
153
|
+
kind == null || kind === AgentStructuredKind.GenericRecord || kind === AgentStructuredKind.GenericList ||
|
|
154
|
+
kind === AgentStructuredKind.GenericValue
|
|
155
|
+
|
|
156
|
+
const classifyAgentMessage = (input: AgentMessageClassificationInput): AgentMessagePresentation => {
|
|
157
|
+
const role = agentMessageRoleOf(input)
|
|
158
|
+
const action = actionOf(input)
|
|
159
|
+
const text = contentOf(input)
|
|
160
|
+
const structure = structuredKindOf(input.value)
|
|
161
|
+
|
|
162
|
+
if (input.outputType === 'tool_calls') {
|
|
163
|
+
// A single pinned-schema call resolves to its own card; everything else — several calls in
|
|
164
|
+
// one turn, an unconstrained agent-loop action, or a shape too generic to be informative —
|
|
165
|
+
// is a tool call, not a schema result.
|
|
166
|
+
const isMultiCall = Array.isArray(input.value) && input.value.length > 1
|
|
167
|
+
const isToolCalls = isMultiCall || agentLoopActions.has(action) || isGenericStructure(structure)
|
|
168
|
+
return {
|
|
169
|
+
category: AgentMessageCategory.Structured,
|
|
170
|
+
structure: isToolCalls ? AgentStructuredKind.ToolCalls : structure!,
|
|
171
|
+
role,
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (structure != null) return { category: AgentMessageCategory.Structured, structure, role }
|
|
175
|
+
const actionStructure = structuredActions[action]
|
|
176
|
+
if (actionStructure != null) return { category: AgentMessageCategory.Structured, structure: actionStructure, role }
|
|
177
|
+
if (decisionAction(action)) return { category: AgentMessageCategory.Structured, structure: AgentStructuredKind.Decision, role }
|
|
178
|
+
if (isUnifiedDiff(text) || action === 'update-code') {
|
|
179
|
+
return { category: AgentMessageCategory.Diff, language: agentDiffLanguageOf(text), role }
|
|
180
|
+
}
|
|
181
|
+
if (codeActions.has(action) || fencedLanguageOf(text) != null || agentCodeLanguageOf(text) !== AgentCodeLanguage.Other) {
|
|
182
|
+
return { category: AgentMessageCategory.Code, language: agentCodeLanguageOf(text), role }
|
|
183
|
+
}
|
|
184
|
+
const document = documentActions[action] ?? markdownKindOf(text)
|
|
185
|
+
if (document != null) return { category: AgentMessageCategory.Markdown, document, role }
|
|
186
|
+
if (input.value != null) {
|
|
187
|
+
return {
|
|
188
|
+
category: AgentMessageCategory.Structured,
|
|
189
|
+
structure: Array.isArray(input.value) ? AgentStructuredKind.GenericList : AgentStructuredKind.GenericValue,
|
|
190
|
+
role,
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return { category: AgentMessageCategory.Plain, role }
|
|
194
|
+
}
|
|
99
195
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
196
|
+
return {
|
|
197
|
+
isAgentMessageHidden, agentMessageRoleOf, agentToolCallArguments, agentDiffLanguageOf, agentCodeLanguageOf,
|
|
198
|
+
isUnifiedDiff, classifyAgentMessage,
|
|
199
|
+
}
|
|
104
200
|
}
|
|
105
201
|
|
|
106
|
-
const
|
|
107
|
-
const match = text.match(/^```([\w+-]+)/m)
|
|
108
|
-
const language = match?.[1]?.toLowerCase()
|
|
109
|
-
if (language == null) return undefined
|
|
110
|
-
if (['tsx', 'jsx', 'react'].includes(language)) return AgentCodeLanguage.ReactTsx
|
|
111
|
-
if (language === 'css') return AgentCodeLanguage.Css
|
|
112
|
-
if (['ts', 'typescript', 'js', 'javascript'].includes(language)) return AgentCodeLanguage.TypeScript
|
|
113
|
-
if (language === 'json') return AgentCodeLanguage.Json
|
|
114
|
-
return AgentCodeLanguage.Other
|
|
115
|
-
}
|
|
202
|
+
export const agentPresentationHelper = createAgentPresentationHelper()
|
|
116
203
|
|
|
117
|
-
/**
|
|
118
|
-
export const
|
|
119
|
-
|
|
120
|
-
const fenced = fencedLanguageOf(text)
|
|
121
|
-
if (fenced != null) return fenced
|
|
122
|
-
if (content === '') return AgentCodeLanguage.Other
|
|
123
|
-
try {
|
|
124
|
-
JSON.parse(content)
|
|
125
|
-
if (/^[{[]/.test(content)) return AgentCodeLanguage.Json
|
|
126
|
-
} catch {
|
|
127
|
-
// The remaining heuristics deliberately require source-like syntax.
|
|
128
|
-
}
|
|
129
|
-
if (/<[A-Za-z][\w.:-]*(?:\s[^>]*)?\/>|<[A-Za-z][\w.:-]*(?:\s[^>]*)?>/.test(content) &&
|
|
130
|
-
/\b(import|export|const|function|return)\b/.test(content)) return AgentCodeLanguage.ReactTsx
|
|
131
|
-
if (/(^|\n)\s*(?:[.#][\w-]+|[a-z][\w-]*(?:\[[^\]]+\])?)\s*\{[^}]*:[^}]*\}/.test(content)) {
|
|
132
|
-
return AgentCodeLanguage.Css
|
|
133
|
-
}
|
|
134
|
-
if (/\b(import|export|interface|type|const|let|function|class)\b/.test(content) &&
|
|
135
|
-
/[;{}]|=>/.test(content)) return AgentCodeLanguage.TypeScript
|
|
136
|
-
return AgentCodeLanguage.Other
|
|
137
|
-
}
|
|
204
|
+
/** @deprecated compat:factory-refactor — use `agentPresentationHelper.isAgentMessageHidden(…)` */
|
|
205
|
+
export const isAgentMessageHidden = (input: AgentMessageClassificationInput): boolean =>
|
|
206
|
+
agentPresentationHelper.isAgentMessageHidden(input)
|
|
138
207
|
|
|
139
|
-
|
|
140
|
-
|
|
208
|
+
/** @deprecated compat:factory-refactor — use `agentPresentationHelper.agentMessageRoleOf(…)` */
|
|
209
|
+
export const agentMessageRoleOf = (input: AgentMessageClassificationInput): AgentMessageRole =>
|
|
210
|
+
agentPresentationHelper.agentMessageRoleOf(input)
|
|
141
211
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
return AgentMarkdownKind.Documentation
|
|
145
|
-
}
|
|
146
|
-
const listItems = text.match(/^\s*(?:[-*+]\s+|\d+[.)]\s+)/gm)?.length ?? 0
|
|
147
|
-
return listItems >= 2 ? AgentMarkdownKind.Documentation : undefined
|
|
148
|
-
}
|
|
212
|
+
/** @deprecated compat:factory-refactor — use `agentPresentationHelper.agentToolCallArguments(…)` */
|
|
213
|
+
export const agentToolCallArguments = (value: unknown): unknown => agentPresentationHelper.agentToolCallArguments(value)
|
|
149
214
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
export const
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
// one turn, an unconstrained agent-loop action, or a shape too generic to be informative —
|
|
163
|
-
// is a tool call, not a schema result.
|
|
164
|
-
const isMultiCall = Array.isArray(input.value) && input.value.length > 1
|
|
165
|
-
const isToolCalls = isMultiCall || agentLoopActions.has(action) || isGenericStructure(structure)
|
|
166
|
-
return {
|
|
167
|
-
category: AgentMessageCategory.Structured,
|
|
168
|
-
structure: isToolCalls ? AgentStructuredKind.ToolCalls : structure!,
|
|
169
|
-
role,
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
if (structure != null) return { category: AgentMessageCategory.Structured, structure, role }
|
|
173
|
-
const actionStructure = structuredActions[action]
|
|
174
|
-
if (actionStructure != null) return { category: AgentMessageCategory.Structured, structure: actionStructure, role }
|
|
175
|
-
if (decisionAction(action)) return { category: AgentMessageCategory.Structured, structure: AgentStructuredKind.Decision, role }
|
|
176
|
-
if (isUnifiedDiff(text) || action === 'update-code') {
|
|
177
|
-
return { category: AgentMessageCategory.Diff, language: agentDiffLanguageOf(text), role }
|
|
178
|
-
}
|
|
179
|
-
if (codeActions.has(action) || fencedLanguageOf(text) != null || agentCodeLanguageOf(text) !== AgentCodeLanguage.Other) {
|
|
180
|
-
return { category: AgentMessageCategory.Code, language: agentCodeLanguageOf(text), role }
|
|
181
|
-
}
|
|
182
|
-
const document = documentActions[action] ?? markdownKindOf(text)
|
|
183
|
-
if (document != null) return { category: AgentMessageCategory.Markdown, document, role }
|
|
184
|
-
if (input.value != null) {
|
|
185
|
-
return {
|
|
186
|
-
category: AgentMessageCategory.Structured,
|
|
187
|
-
structure: Array.isArray(input.value) ? AgentStructuredKind.GenericList : AgentStructuredKind.GenericValue,
|
|
188
|
-
role,
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
return { category: AgentMessageCategory.Plain, role }
|
|
192
|
-
}
|
|
215
|
+
/** @deprecated compat:factory-refactor — use `agentPresentationHelper.agentDiffLanguageOf(…)` */
|
|
216
|
+
export const agentDiffLanguageOf = (text: string): AgentCodeLanguage => agentPresentationHelper.agentDiffLanguageOf(text)
|
|
217
|
+
|
|
218
|
+
/** @deprecated compat:factory-refactor — use `agentPresentationHelper.agentCodeLanguageOf(…)` */
|
|
219
|
+
export const agentCodeLanguageOf = (text: string): AgentCodeLanguage => agentPresentationHelper.agentCodeLanguageOf(text)
|
|
220
|
+
|
|
221
|
+
/** @deprecated compat:factory-refactor — use `agentPresentationHelper.isUnifiedDiff(…)` */
|
|
222
|
+
export const isUnifiedDiff = (text: string): boolean => agentPresentationHelper.isUnifiedDiff(text)
|
|
223
|
+
|
|
224
|
+
/** @deprecated compat:factory-refactor — use `agentPresentationHelper.classifyAgentMessage(…)` */
|
|
225
|
+
export const classifyAgentMessage = (input: AgentMessageClassificationInput): AgentMessagePresentation =>
|
|
226
|
+
agentPresentationHelper.classifyAgentMessage(input)
|
package/src/agent/types.local.ts
CHANGED
package/src/areas/index.ts
CHANGED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Blueprint } from '../../blueprint/types.js'
|
|
2
|
+
import type { ProjectArea } from '../consts.js'
|
|
3
|
+
import type { ProjectTenancy } from '../types.js'
|
|
4
|
+
|
|
5
|
+
/** Which of a product's audiences act inside a tenant organization. */
|
|
6
|
+
export interface TenancyHelper {
|
|
7
|
+
/**
|
|
8
|
+
* The tenancy of a resolved blueprint.
|
|
9
|
+
*
|
|
10
|
+
* Total, like `landingGatePreferenceOf`: an absent layer, an absent key and a value this deploy
|
|
11
|
+
* cannot read all answer {@link NO_TENANCY}. Only a literal `true` turns a flag on, because a flag
|
|
12
|
+
* read as on by mistake splits a product's people into organizations nobody asked for, while one
|
|
13
|
+
* read as off leaves the application exactly as it was before tenancy existed.
|
|
14
|
+
*/
|
|
15
|
+
tenancyOf: (blueprint?: Pick<Blueprint, 'experience'> | null) => ProjectTenancy
|
|
16
|
+
/**
|
|
17
|
+
* Whether an AREA's people act inside a tenant organization.
|
|
18
|
+
*
|
|
19
|
+
* Guest has no organization to act in, and admin is the project owner, who stands above every
|
|
20
|
+
* tenant rather than inside one — so both are never tenanted, whatever the flags say.
|
|
21
|
+
*/
|
|
22
|
+
tenantedArea: (area: ProjectArea, tenancy: ProjectTenancy) => boolean
|
|
23
|
+
}
|
package/src/areas/tenancy.ts
CHANGED
|
@@ -1,33 +1,34 @@
|
|
|
1
1
|
import type { Blueprint } from '../blueprint/types.js'
|
|
2
2
|
import { ProjectArea, NO_TENANCY } from './consts.js'
|
|
3
3
|
import type { ProjectTenancy } from './types.js'
|
|
4
|
+
import type { TenancyHelper } from './tenancy/types.js'
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
* read as on by mistake splits a product's people into organizations nobody asked for, while one
|
|
11
|
-
* read as off leaves the application exactly as it was before tenancy existed.
|
|
12
|
-
*/
|
|
13
|
-
export const tenancyOf = (blueprint?: Pick<Blueprint, 'experience'> | null): ProjectTenancy => {
|
|
14
|
-
const tenancy = blueprint?.experience?.tenancy
|
|
15
|
-
const operators = tenancy?.operators === true
|
|
16
|
-
const users = tenancy?.users === true
|
|
6
|
+
export const createTenancyHelper = (): TenancyHelper => {
|
|
7
|
+
const tenancyOf = (blueprint?: Pick<Blueprint, 'experience'> | null): ProjectTenancy => {
|
|
8
|
+
const tenancy = blueprint?.experience?.tenancy
|
|
9
|
+
const operators = tenancy?.operators === true
|
|
10
|
+
const users = tenancy?.users === true
|
|
17
11
|
|
|
18
|
-
|
|
19
|
-
}
|
|
12
|
+
return operators || users ? Object.freeze({ operators, users }) : NO_TENANCY
|
|
13
|
+
}
|
|
20
14
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
export const tenantedArea = (area: ProjectArea, tenancy: ProjectTenancy): boolean => {
|
|
28
|
-
switch (area) {
|
|
29
|
-
case ProjectArea.User: return tenancy.users === true
|
|
30
|
-
case ProjectArea.Operator: return tenancy.operators === true
|
|
31
|
-
default: return false
|
|
15
|
+
const tenantedArea = (area: ProjectArea, tenancy: ProjectTenancy): boolean => {
|
|
16
|
+
switch (area) {
|
|
17
|
+
case ProjectArea.User: return tenancy.users === true
|
|
18
|
+
case ProjectArea.Operator: return tenancy.operators === true
|
|
19
|
+
default: return false
|
|
20
|
+
}
|
|
32
21
|
}
|
|
22
|
+
|
|
23
|
+
return { tenancyOf, tenantedArea }
|
|
33
24
|
}
|
|
25
|
+
|
|
26
|
+
export const tenancyHelper = createTenancyHelper()
|
|
27
|
+
|
|
28
|
+
/** @deprecated compat:factory-refactor — use `tenancyHelper.tenancyOf(…)` */
|
|
29
|
+
export const tenancyOf = (blueprint?: Pick<Blueprint, 'experience'> | null): ProjectTenancy =>
|
|
30
|
+
tenancyHelper.tenancyOf(blueprint)
|
|
31
|
+
|
|
32
|
+
/** @deprecated compat:factory-refactor — use `tenancyHelper.tenantedArea(…)` */
|
|
33
|
+
export const tenantedArea = (area: ProjectArea, tenancy: ProjectTenancy): boolean =>
|
|
34
|
+
tenancyHelper.tenantedArea(area, tenancy)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { StoryDraft } from '../../areas/types.js'
|
|
2
|
+
import type { ConnectingStoryDraft, MergedStoryDraft } from '../types.js'
|
|
3
|
+
|
|
4
|
+
/** The connecting stories of a flow: how many it may carry, and where each one lands. */
|
|
5
|
+
export interface ConnectingStoryHelper {
|
|
6
|
+
/**
|
|
7
|
+
* How many connecting stories one flow may carry.
|
|
8
|
+
*
|
|
9
|
+
* An N-step chain has N-1 joints, and a connecting story exists to bridge one of them — so the
|
|
10
|
+
* flow sizes its own supporting cast, and a three-step product can never end up with eight list
|
|
11
|
+
* screens. It is a CEILING, not a target: the prompt is told to write as few as its rules actually
|
|
12
|
+
* derived, and most flows land well below this.
|
|
13
|
+
*
|
|
14
|
+
* The real reason for a hard number: every story here becomes a full develop run the project's
|
|
15
|
+
* owner pays for.
|
|
16
|
+
*/
|
|
17
|
+
connectingStoryCap: (flowCount: number) => number
|
|
18
|
+
/**
|
|
19
|
+
* Interleave the connecting stories into the flow they were derived from.
|
|
20
|
+
*
|
|
21
|
+
* `after` is an ANCHOR, not a position: it names the flow story whose result the connecting story
|
|
22
|
+
* displays, so the connecting story lands immediately behind it — which is also immediately in
|
|
23
|
+
* front of the step it leads into. The result is ONE ordered list, and it is the order records are
|
|
24
|
+
* created in.
|
|
25
|
+
*
|
|
26
|
+
* This is the only place the anchor is interpreted. Both halves of the feature — the prompt that
|
|
27
|
+
* produces it and the pipeline that persists the result — read it through here, or the two drift
|
|
28
|
+
* and nothing fails loudly enough to notice. The CLAMPED anchor is carried out on each connective
|
|
29
|
+
* entry as `after`, which is what the story card's `follows` relationship is written from.
|
|
30
|
+
*
|
|
31
|
+
* Four properties are deliberate:
|
|
32
|
+
*
|
|
33
|
+
* - **The flow subsequence is never disturbed.** Strip the connecting stories back out and you have
|
|
34
|
+
* `flow`, in `flow` order: story N still implements numbered step N. Everything that finds the
|
|
35
|
+
* primary story depends on that.
|
|
36
|
+
* - **Nothing precedes the first flow story.** An anchor below 1 is clamped up rather than opening a
|
|
37
|
+
* position in front of the flow — nothing can be listed before the step that produced it, and
|
|
38
|
+
* story 1 stays the enabling action.
|
|
39
|
+
* - **A placement is advice; the story is work already paid for.** An anchor past the end means
|
|
40
|
+
* "at the end", and one that is not a number at all means the front of the flow. Neither is a
|
|
41
|
+
* reason to lose a story.
|
|
42
|
+
* - **Ties keep the model's order**, which is the only ranking anything has.
|
|
43
|
+
*/
|
|
44
|
+
mergeConnectingStories: (flow: StoryDraft[], connecting: ConnectingStoryDraft[]) => MergedStoryDraft[]
|
|
45
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { StoryDraft } from "../areas/types.js"
|
|
2
|
+
import type { ConnectingStoryDraft, MergedStoryDraft } from "./types.js"
|
|
3
|
+
import { StoryKind } from "./consts.js"
|
|
4
|
+
import type { ConnectingStoryHelper } from './connecting/types.js'
|
|
5
|
+
|
|
6
|
+
export const createConnectingStoryHelper = (): ConnectingStoryHelper => {
|
|
7
|
+
const connectingStoryCap = (flowCount: number): number => Math.max(flowCount - 1, 0)
|
|
8
|
+
|
|
9
|
+
/** Collapse case and whitespace, so "the same story twice" is recognised as such. */
|
|
10
|
+
const canonical = (story: string): string => story.trim().replace(/\s+/g, ' ').toLowerCase()
|
|
11
|
+
|
|
12
|
+
const mergeConnectingStories = (
|
|
13
|
+
flow: StoryDraft[], connecting: ConnectingStoryDraft[]
|
|
14
|
+
): MergedStoryDraft[] => {
|
|
15
|
+
if (flow.length < 1) {
|
|
16
|
+
return []
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const seen = new Set(flow.map(({ story }) => canonical(story)))
|
|
20
|
+
const placed: Array<{ draft: ConnectingStoryDraft, at: number }> = []
|
|
21
|
+
|
|
22
|
+
for (const draft of connecting) {
|
|
23
|
+
const text = canonical(draft.story)
|
|
24
|
+
// A connecting story that repeats a flow story is not a second story: it is one develop run
|
|
25
|
+
// spent twice AND — since the home-screen detector matches its answer back by exact text — a
|
|
26
|
+
// second record that answer could resolve to.
|
|
27
|
+
if (text === '' || seen.has(text)) {
|
|
28
|
+
continue
|
|
29
|
+
}
|
|
30
|
+
seen.add(text)
|
|
31
|
+
|
|
32
|
+
const after = Number(draft.after)
|
|
33
|
+
placed.push({
|
|
34
|
+
draft,
|
|
35
|
+
at: Number.isFinite(after) ? Math.min(Math.max(Math.trunc(after), 1), flow.length) : 1,
|
|
36
|
+
})
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Over the cap, the LATEST-anchored go: a story late in the flow gates the fewest steps behind
|
|
40
|
+
// it, while the queue that hands step 1 to step 2 is what makes everything after it reachable.
|
|
41
|
+
// The sort is stable, so two stories on the same step keep the order they were derived in.
|
|
42
|
+
const surviving = placed
|
|
43
|
+
.map((entry, order) => ({ ...entry, order }))
|
|
44
|
+
.sort((a, b) => a.at - b.at || a.order - b.order)
|
|
45
|
+
.slice(0, connectingStoryCap(flow.length))
|
|
46
|
+
|
|
47
|
+
// Bucket N holds what comes immediately after flow story N (1-based, as the prompt numbers them).
|
|
48
|
+
const buckets: ConnectingStoryDraft[][] = flow.map(() => [])
|
|
49
|
+
for (const { draft, at } of surviving) {
|
|
50
|
+
buckets[at - 1]!.push(draft)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return flow.flatMap(({ story, area }, index) => [
|
|
54
|
+
{ story, area, kind: StoryKind.Flow },
|
|
55
|
+
...buckets[index]!.map(draft => (
|
|
56
|
+
{ story: draft.story.trim(), area: draft.area, kind: StoryKind.Connective, after: index + 1 }
|
|
57
|
+
)),
|
|
58
|
+
])
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return { connectingStoryCap, mergeConnectingStories }
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export const connectingStoryHelper = createConnectingStoryHelper()
|