@growthub/cli 0.8.2 → 0.9.1

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.
@@ -24,6 +24,8 @@ helpers:
24
24
  description: Auth pre-flight + growthub pipeline execute passthrough
25
25
  - path: helpers/check-generative-adapter.sh
26
26
  description: Print current adapter mode and which provider keys are set
27
+ - path: helpers/check-pipeline-health.sh
28
+ description: Composable end-to-end readiness check (env + adapter + sub-skills + Stage 3 deps); supports --json
27
29
  subSkills:
28
30
  - name: brief-generation
29
31
  path: skills/brief-generation/SKILL.md
@@ -60,6 +62,25 @@ Fork exists (.growthub-fork/fork.json)?
60
62
  8. .growthub-fork/trace.jsonl (tail 20) — recent machine history
61
63
  ```
62
64
 
65
+ ## Agent operating loop (deterministic, no Markdown inference)
66
+
67
+ For agents (Claude Code, Cursor, Codex), the canonical readiness +
68
+ inspection loop uses the CLI's typed JSON outputs — read these BEFORE
69
+ falling back to Markdown:
70
+
71
+ ```bash
72
+ growthub kit health <fork-id-or-path> --json # KitHealthReport
73
+ growthub kit pipeline inspect <fork-id-or-path> --json # PipelineKitManifest
74
+ growthub kit dependencies inspect <fork-id-or-path> --json # WorkspaceDependencyManifest
75
+ growthub kit inspect <fork-id-or-path> --json # WorkerKitManifest (kit.json)
76
+ ```
77
+
78
+ Each command accepts a kit id, filesystem path, OR a registered fork
79
+ id. Both `--json` (agent) and interactive sub-branch (human) surfaces
80
+ share the same primitives.
81
+
82
+ Markdown explains the contract; the SDK + CLI are the source of truth.
83
+
63
84
  ## Three-stage pipeline
64
85
 
65
86
  ```
@@ -89,7 +110,7 @@ Both normalize to the same `GenerativeArtifact[]` object. The UI shell renders w
89
110
  3. **`.growthub-fork/project.md`** — session memory, seeded at init from `templates/project.md`.
90
111
  4. **Self-evaluation** — generate → apply → evaluate → record; retry up to `maxRetries` (3); mirrors the Fork Sync Agent loop.
91
112
  5. **`skills/`** — sub-skill lanes: `brief-generation`, `generative-execution`, `video-edit`.
92
- 6. **`helpers/`** — `run-pipeline.sh`, `check-generative-adapter.sh`.
113
+ 6. **`helpers/`** — `run-pipeline.sh`, `check-generative-adapter.sh`, `check-pipeline-health.sh`.
93
114
 
94
115
  ## Related files
95
116
 
@@ -27,6 +27,8 @@
27
27
  "output-standards.md",
28
28
  "runtime-assumptions.md",
29
29
  "validation-checklist.md",
30
+ "pipeline.manifest.json",
31
+ "workspace.dependencies.json",
30
32
  "workers/creative-video-pipeline-operator/CLAUDE.md",
31
33
  "brands/_template/brand-kit.md",
32
34
  "brands/growthub/brand-kit.md",
@@ -52,6 +54,8 @@
52
54
  "helpers/README.md",
53
55
  "helpers/run-pipeline.sh",
54
56
  "helpers/check-generative-adapter.sh",
57
+ "helpers/check-pipeline-health.sh",
58
+ "validation/e2e-reference.md",
55
59
  "skills/README.md",
56
60
  "skills/brief-generation/SKILL.md",
57
61
  "skills/generative-execution/SKILL.md",
@@ -6,3 +6,4 @@ Safe shell helpers for the creative-video-pipeline operator. These wrap external
6
6
  |--------|---------|
7
7
  | `run-pipeline.sh` | Wraps `growthub pipeline execute` for Stage 2 |
8
8
  | `check-generative-adapter.sh` | Validates env for the selected generative adapter |
9
+ | `check-pipeline-health.sh` | End-to-end readiness check across all three stages (composes the two above + Stage-3 deps + sub-skill / helper presence). Supports `--json`. |
@@ -0,0 +1,154 @@
1
+ #!/usr/bin/env bash
2
+ # check-pipeline-health.sh
3
+ #
4
+ # Composable end-to-end readiness check for the creative-video-pipeline kit.
5
+ # Wraps existing setup/verify-env.mjs + helpers/check-generative-adapter.sh
6
+ # and adds checks that span all three stages (sub-skills present, helpers
7
+ # executable, output dir writable, Stage-3 deps).
8
+ #
9
+ # Usage:
10
+ # bash helpers/check-pipeline-health.sh # human output, exit non-zero on failure
11
+ # bash helpers/check-pipeline-health.sh --json # JSON report on stdout
12
+ #
13
+ # Convention: docs/PIPELINE_KIT_CONTRACT_V1.md (kit-local health helper)
14
+ set -uo pipefail
15
+
16
+ JSON_MODE=0
17
+ if [ "${1:-}" = "--json" ]; then
18
+ JSON_MODE=1
19
+ fi
20
+
21
+ KIT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
22
+
23
+ PASS=()
24
+ FAIL=()
25
+ WARN=()
26
+
27
+ record_pass() { PASS+=("$1"); }
28
+ record_fail() { FAIL+=("$1"); }
29
+ record_warn() { WARN+=("$1"); }
30
+
31
+ # --- Load .env / .env.local if present (for inherited shell, mjs reads its own) ---
32
+ for env_file in "$KIT_ROOT/.env" "$KIT_ROOT/.env.local"; do
33
+ if [ -f "$env_file" ]; then
34
+ set -a
35
+ # shellcheck disable=SC1090
36
+ . "$env_file"
37
+ set +a
38
+ fi
39
+ done
40
+
41
+ # --- 1. .env presence ---
42
+ if [ -f "$KIT_ROOT/.env" ] || [ -f "$KIT_ROOT/.env.local" ]; then
43
+ record_pass "env-file-present"
44
+ elif [ -f "$KIT_ROOT/.env.example" ]; then
45
+ record_warn "env-file-missing-but-example-available"
46
+ else
47
+ record_fail "env-file-missing-and-no-example"
48
+ fi
49
+
50
+ # --- 2. setup/verify-env.mjs passes ---
51
+ if [ -f "$KIT_ROOT/setup/verify-env.mjs" ]; then
52
+ if node "$KIT_ROOT/setup/verify-env.mjs" >/dev/null 2>&1; then
53
+ record_pass "verify-env"
54
+ else
55
+ record_fail "verify-env"
56
+ fi
57
+ else
58
+ record_fail "verify-env-script-missing"
59
+ fi
60
+
61
+ # --- 3. helpers/check-generative-adapter.sh passes ---
62
+ if [ -x "$KIT_ROOT/helpers/check-generative-adapter.sh" ]; then
63
+ if bash "$KIT_ROOT/helpers/check-generative-adapter.sh" >/dev/null 2>&1; then
64
+ record_pass "generative-adapter-env"
65
+ else
66
+ record_fail "generative-adapter-env"
67
+ fi
68
+ else
69
+ record_fail "check-generative-adapter-not-executable"
70
+ fi
71
+
72
+ # --- 4. VIDEO_USE_HOME resolves to a directory ---
73
+ if [ -n "${VIDEO_USE_HOME:-}" ] && [ -d "${VIDEO_USE_HOME}" ]; then
74
+ record_pass "video-use-home"
75
+ else
76
+ record_fail "video-use-home-missing-or-not-a-directory"
77
+ fi
78
+
79
+ # --- 5. ELEVENLABS_API_KEY (Stage 3 transcription) ---
80
+ if [ -n "${ELEVENLABS_API_KEY:-}" ]; then
81
+ record_pass "elevenlabs-api-key"
82
+ else
83
+ record_fail "elevenlabs-api-key-missing"
84
+ fi
85
+
86
+ # --- 6. output/ writable ---
87
+ mkdir -p "$KIT_ROOT/output" 2>/dev/null || true
88
+ if [ -w "$KIT_ROOT/output" ]; then
89
+ record_pass "output-dir-writable"
90
+ else
91
+ record_fail "output-dir-not-writable"
92
+ fi
93
+
94
+ # --- 7. Stage sub-skills present ---
95
+ for stage in brief-generation generative-execution video-edit; do
96
+ if [ -f "$KIT_ROOT/skills/$stage/SKILL.md" ]; then
97
+ record_pass "sub-skill-$stage"
98
+ else
99
+ record_fail "sub-skill-$stage-missing"
100
+ fi
101
+ done
102
+
103
+ # --- 8. Helpers executable ---
104
+ for helper in run-pipeline.sh check-generative-adapter.sh check-pipeline-health.sh; do
105
+ helper_path="$KIT_ROOT/helpers/$helper"
106
+ if [ -f "$helper_path" ] && [ -r "$helper_path" ]; then
107
+ record_pass "helper-$helper"
108
+ else
109
+ record_fail "helper-$helper-missing"
110
+ fi
111
+ done
112
+
113
+ # --- 9. pipeline.manifest.json + workspace.dependencies.json present (kit contract v1) ---
114
+ for manifest in pipeline.manifest.json workspace.dependencies.json; do
115
+ if [ -f "$KIT_ROOT/$manifest" ]; then
116
+ record_pass "manifest-$manifest"
117
+ else
118
+ record_warn "manifest-$manifest-missing"
119
+ fi
120
+ done
121
+
122
+ # --- Render result ---
123
+ if [ "$JSON_MODE" = "1" ]; then
124
+ printf '{'
125
+ printf '"kitId":"growthub-creative-video-pipeline-v1",'
126
+ printf '"convention":"docs/PIPELINE_KIT_CONTRACT_V1.md",'
127
+ printf '"pass":['
128
+ for i in "${!PASS[@]}"; do
129
+ [ "$i" -gt 0 ] && printf ','
130
+ printf '"%s"' "${PASS[$i]}"
131
+ done
132
+ printf '],"warn":['
133
+ for i in "${!WARN[@]}"; do
134
+ [ "$i" -gt 0 ] && printf ','
135
+ printf '"%s"' "${WARN[$i]}"
136
+ done
137
+ printf '],"fail":['
138
+ for i in "${!FAIL[@]}"; do
139
+ [ "$i" -gt 0 ] && printf ','
140
+ printf '"%s"' "${FAIL[$i]}"
141
+ done
142
+ printf ']}\n'
143
+ else
144
+ echo "[check-pipeline-health] Kit: growthub-creative-video-pipeline-v1"
145
+ for item in "${PASS[@]}"; do echo " PASS $item"; done
146
+ for item in "${WARN[@]}"; do echo " WARN $item"; done
147
+ for item in "${FAIL[@]}"; do echo " FAIL $item" >&2; done
148
+ echo "[check-pipeline-health] pass=${#PASS[@]} warn=${#WARN[@]} fail=${#FAIL[@]}"
149
+ fi
150
+
151
+ if [ "${#FAIL[@]}" -gt 0 ]; then
152
+ exit 1
153
+ fi
154
+ exit 0
@@ -30,6 +30,8 @@
30
30
  "output-standards.md",
31
31
  "runtime-assumptions.md",
32
32
  "validation-checklist.md",
33
+ "pipeline.manifest.json",
34
+ "workspace.dependencies.json",
33
35
  "workers/creative-video-pipeline-operator/CLAUDE.md",
34
36
  "brands/_template/brand-kit.md",
35
37
  "brands/growthub/brand-kit.md",
@@ -55,6 +57,8 @@
55
57
  "helpers/README.md",
56
58
  "helpers/run-pipeline.sh",
57
59
  "helpers/check-generative-adapter.sh",
60
+ "helpers/check-pipeline-health.sh",
61
+ "validation/e2e-reference.md",
58
62
  "skills/README.md",
59
63
  "skills/brief-generation/SKILL.md",
60
64
  "skills/generative-execution/SKILL.md",
@@ -99,6 +103,8 @@
99
103
  "bundles/growthub-creative-video-pipeline-v1.json",
100
104
  "SKILL.md",
101
105
  "skills.md",
106
+ "pipeline.manifest.json",
107
+ "workspace.dependencies.json",
102
108
  "workers/creative-video-pipeline-operator/CLAUDE.md",
103
109
  "brands/_template/brand-kit.md",
104
110
  "brands/growthub/brand-kit.md",
@@ -0,0 +1,83 @@
1
+ {
2
+ "version": 1,
3
+ "kitId": "growthub-creative-video-pipeline-v1",
4
+ "pipelineId": "creative-video-pipeline",
5
+ "outputTopology": {
6
+ "root": "output/<client>/<project>",
7
+ "buckets": ["brief", "generative", "final"]
8
+ },
9
+ "tracePolicy": {
10
+ "convention": "docs/PIPELINE_TRACE_CONVENTION_V1.md",
11
+ "traceFile": ".growthub-fork/trace.jsonl",
12
+ "projectMemoryFile": ".growthub-fork/project.md"
13
+ },
14
+ "sessionMemoryPolicy": {
15
+ "seedTemplate": "templates/project.md",
16
+ "appendOn": ["stage-completed", "stage-failed", "self-eval"]
17
+ },
18
+ "stages": [
19
+ {
20
+ "id": "brief-generation",
21
+ "label": "Brief",
22
+ "subSkillPath": "skills/brief-generation/SKILL.md",
23
+ "inputArtifacts": [
24
+ "brands/<client>/brand-kit.md"
25
+ ],
26
+ "outputArtifacts": [
27
+ "output/<client>/<project>/brief/pipeline-brief.md"
28
+ ],
29
+ "helperPaths": [],
30
+ "adapterModes": [],
31
+ "externalDependencies": [],
32
+ "traceRequired": true,
33
+ "projectMemoryRequired": true
34
+ },
35
+ {
36
+ "id": "generative-execution",
37
+ "label": "Generate",
38
+ "subSkillPath": "skills/generative-execution/SKILL.md",
39
+ "inputArtifacts": [
40
+ "output/<client>/<project>/brief/pipeline-brief.md"
41
+ ],
42
+ "outputArtifacts": [
43
+ "output/<client>/<project>/generative/manifest.json"
44
+ ],
45
+ "helperPaths": [
46
+ "helpers/run-pipeline.sh",
47
+ "helpers/check-generative-adapter.sh"
48
+ ],
49
+ "adapterModes": [
50
+ "growthub-pipeline",
51
+ "byo-api-key"
52
+ ],
53
+ "externalDependencies": [],
54
+ "traceRequired": true,
55
+ "projectMemoryRequired": true
56
+ },
57
+ {
58
+ "id": "video-edit",
59
+ "label": "Edit",
60
+ "subSkillPath": "skills/video-edit/SKILL.md",
61
+ "inputArtifacts": [
62
+ "output/<client>/<project>/generative/manifest.json",
63
+ "output/<client>/<project>/brief/pipeline-brief.md"
64
+ ],
65
+ "outputArtifacts": [
66
+ "output/<client>/<project>/final/final.mp4"
67
+ ],
68
+ "helperPaths": [],
69
+ "adapterModes": [],
70
+ "externalDependencies": ["video-use"],
71
+ "traceRequired": true,
72
+ "projectMemoryRequired": true
73
+ }
74
+ ],
75
+ "convention": {
76
+ "spec": "docs/PIPELINE_KIT_CONTRACT_V1.md",
77
+ "sdkType": "@growthub/api-contract/pipeline-kits#PipelineKitManifest",
78
+ "sdkVersion": 1,
79
+ "version": 1,
80
+ "interpretedBy": ["growthub kit pipeline inspect", "agents", "operators"],
81
+ "runtimeEnforcement": "none"
82
+ }
83
+ }
@@ -0,0 +1,166 @@
1
+ # E2E Reference Validation — Creative Video Pipeline
2
+
3
+ This is the **reproducible target** for the end-to-end QA preserved in
4
+ commit `7eb832d` ("ship creative video pipeline worker kit").
5
+
6
+ A new operator (human or agent) should be able to follow this document and
7
+ re-produce a passing run. If you cannot, the kit is not v1-ready.
8
+
9
+ **Reference convention:** [`docs/PIPELINE_KIT_CONTRACT_V1.md`](../../../../../docs/PIPELINE_KIT_CONTRACT_V1.md).
10
+
11
+ ---
12
+
13
+ ## Test inputs
14
+
15
+ | Input | Value |
16
+ |---|---|
17
+ | Test brand | `brands/growthub/brand-kit.md` (shipped in this kit) |
18
+ | Client slug | `growthub` |
19
+ | Project slug | `e2e-reference` |
20
+ | Adapter mode | `growthub-pipeline` (primary) — see "BYOK variant" below |
21
+ | Stage 2 model | `veo-3.1-generate-001` (CMS node `video-generation`) |
22
+
23
+ ---
24
+
25
+ ## Required environment
26
+
27
+ | Var | Required for | Real key required? |
28
+ |---|---|---|
29
+ | `CREATIVE_VIDEO_PIPELINE_GENERATIVE_ADAPTER=growthub-pipeline` | Stage 2 selection | no — string literal |
30
+ | `GROWTHUB_BRIDGE_ACCESS_TOKEN` | Stage 2 hosted execution | yes |
31
+ | `GROWTHUB_BRIDGE_BASE_URL` | Stage 2 hosted execution | yes |
32
+ | `growthub auth whoami --json` returns OK | Stage 2 pre-flight | yes (run `growthub auth login` first) |
33
+ | `VIDEO_USE_HOME` | Stage 3 delegation | yes — must point at a real `video-use` clone |
34
+ | `ELEVENLABS_API_KEY` | Stage 3 transcription | yes |
35
+
36
+ Run `bash helpers/check-pipeline-health.sh` to validate before starting.
37
+
38
+ ---
39
+
40
+ ## Stage 1 — Brief
41
+
42
+ **Input:** `brands/growthub/brand-kit.md`
43
+
44
+ **Sub-skill:** `skills/brief-generation/SKILL.md`
45
+
46
+ **Run:** through the operator (Claude Code, Cursor, etc.) — no shell command.
47
+
48
+ **Expected output:** `output/growthub/e2e-reference/brief/pipeline-brief.md`
49
+
50
+ **Acceptance:**
51
+
52
+ - Brief contains brand-constraints box, scene table, hook variations A–E,
53
+ editing guidelines.
54
+ - AI generation prompts appear in the Appendix only — never inline in scene
55
+ blocks.
56
+ - `.growthub-fork/project.md` has a "Stage 1 Complete — brief-generation"
57
+ entry.
58
+ - `.growthub-fork/trace.jsonl` has a `stage-complete` line for Stage 1
59
+ (and, when v1 trace adoption lands,
60
+ `pipeline_stage_completed`).
61
+
62
+ ---
63
+
64
+ ## Stage 2 — Generate
65
+
66
+ **Input:** Stage 1 brief.
67
+
68
+ **Sub-skill:** `skills/generative-execution/SKILL.md`
69
+
70
+ **Run:**
71
+
72
+ ```bash
73
+ bash helpers/check-generative-adapter.sh
74
+ bash helpers/run-pipeline.sh '<DynamicRegistryPipeline JSON assembled from brief>'
75
+ ```
76
+
77
+ The CLI streams NDJSON `ExecutionEvent` lines (typed by
78
+ `@growthub/api-contract`).
79
+
80
+ **Expected output:** `output/growthub/e2e-reference/generative/manifest.json`
81
+
82
+ ```json
83
+ {
84
+ "kitId": "growthub-creative-video-pipeline-v1",
85
+ "adapter": "growthub-pipeline",
86
+ "executionId": "<uuid from complete event>",
87
+ "createdAt": "<iso>",
88
+ "artifacts": [
89
+ { "id": "...", "type": "video", "provider": "veo", "url": "https://...", "prompt": "..." }
90
+ ]
91
+ }
92
+ ```
93
+
94
+ **Acceptance:**
95
+
96
+ - `manifest.json` is valid JSON.
97
+ - Each entry has `id`, `type`, `provider`, `url`, `prompt`.
98
+ - Artifact count matches scene count in Stage 1 brief.
99
+ - No API keys appear in any artifact file.
100
+ - `.growthub-fork/project.md` has a "Stage 2 Complete — generative-execution"
101
+ entry recording the adapter mode used.
102
+
103
+ ---
104
+
105
+ ## Stage 3 — Edit
106
+
107
+ **Input:** Stage 2 `manifest.json` + Stage 1 `pipeline-brief.md`.
108
+
109
+ **Sub-skill:** `skills/video-edit/SKILL.md`
110
+
111
+ **Run:** via the `VIDEO_USE_HOME` fork. The kit MUST NOT inline video-use
112
+ logic. The handoff is `output/growthub/e2e-reference/final/edit-plan.md`.
113
+
114
+ **Expected output:** `output/growthub/e2e-reference/final/final.mp4`
115
+
116
+ **Acceptance:**
117
+
118
+ - `final.mp4` exists and is playable.
119
+ - Duration within ±10% of the target declared in the edit plan.
120
+ - Audio fades at segment boundaries (~30 ms).
121
+ - Subtitles are applied last.
122
+ - No secrets appear in any output artifact.
123
+
124
+ ---
125
+
126
+ ## BYOK variant
127
+
128
+ To re-run with `byo-api-key`:
129
+
130
+ 1. Set `CREATIVE_VIDEO_PIPELINE_GENERATIVE_ADAPTER=byo-api-key`.
131
+ 2. Set `VIDEO_MODEL_PROVIDER` to `veo` | `fal` | `runway`.
132
+ 3. Set the matching provider key (`GOOGLE_AI_API_KEY` / `FAL_API_KEY` /
133
+ `RUNWAY_API_KEY`).
134
+
135
+ The Stage 2 `manifest.json` shape is **identical** to the
136
+ `growthub-pipeline` adapter — that is the entire point of the adapter
137
+ contract.
138
+
139
+ ---
140
+
141
+ ## What can be mocked
142
+
143
+ | Element | Mockable? | How |
144
+ |---|---|---|
145
+ | Brand kit | yes | use any `brands/<slug>/brand-kit.md` |
146
+ | Stage 1 LLM | yes | the brief stage is operator-driven; any agent can produce it |
147
+ | Stage 2 hosted execution | **no** — uses real provider credits |
148
+ | Stage 2 BYOK | **no** — uses real provider credits |
149
+ | Stage 3 ElevenLabs transcription | **no** — uses real ElevenLabs credits |
150
+ | Stage 3 FFmpeg | yes — `video-use` runs locally |
151
+
152
+ For pure shape validation (no spend), the legacy
153
+ `validation-checklist.md` covers the structural checks without
154
+ provider calls.
155
+
156
+ ---
157
+
158
+ ## Cross-references
159
+
160
+ - [`validation-checklist.md`](../validation-checklist.md) — structural QA
161
+ - [`docs/pipeline-architecture.md`](../docs/pipeline-architecture.md) —
162
+ kit-local architecture
163
+ - [`pipeline.manifest.json`](../pipeline.manifest.json) — machine-readable
164
+ stage map
165
+ - [`workspace.dependencies.json`](../workspace.dependencies.json) —
166
+ external `video-use` dependency declaration
@@ -2,11 +2,15 @@
2
2
 
3
3
  Run before calling the kit v1-ready or before a Vercel deployment.
4
4
 
5
+ For the **reproducible end-to-end run** (Stages 1–3 against real provider
6
+ keys), follow [`validation/e2e-reference.md`](./validation/e2e-reference.md).
7
+
5
8
  ## Environment
6
9
 
7
10
  - [ ] `bash setup/check-deps.sh` passes (FFmpeg, Python 3, pip, git, node)
8
11
  - [ ] `node setup/verify-env.mjs` passes
9
12
  - [ ] `bash helpers/check-generative-adapter.sh` shows expected adapter and keys
13
+ - [ ] `bash helpers/check-pipeline-health.sh` exits 0 (composes all of the above)
10
14
  - [ ] `VIDEO_USE_HOME` resolves to an existing `video-use` clone
11
15
 
12
16
  ## Growthub CLI (growthub-pipeline adapter)
@@ -0,0 +1,26 @@
1
+ {
2
+ "version": 1,
3
+ "kitId": "growthub-creative-video-pipeline-v1",
4
+ "dependencies": [
5
+ {
6
+ "id": "video-use",
7
+ "kind": "git-fork",
8
+ "env": "VIDEO_USE_HOME",
9
+ "setup": "setup/clone-fork.sh",
10
+ "install": "setup/install-skill.sh",
11
+ "health": "setup/verify-env.mjs",
12
+ "usedByStages": ["video-edit"],
13
+ "interfaceArtifact": "output/<client>/<project>/generative/manifest.json",
14
+ "handoffArtifact": "output/<client>/<project>/final/final.mp4",
15
+ "description": "External video editing fork. Stage 3 delegates entirely to this repo via edit-plan.md. The kit MUST NOT inline video-use logic."
16
+ }
17
+ ],
18
+ "convention": {
19
+ "spec": "docs/WORKER_KIT_CONTRACT_V1.md",
20
+ "sdkType": "@growthub/api-contract/workspaces#WorkspaceDependencyManifest",
21
+ "sdkVersion": 1,
22
+ "version": 1,
23
+ "interpretedBy": ["growthub kit dependencies inspect", "agents", "operators"],
24
+ "runtimeEnforcement": "none"
25
+ }
26
+ }