@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.
- package/assets/worker-kits/growthub-creative-video-pipeline-v1/SKILL.md +22 -1
- package/assets/worker-kits/growthub-creative-video-pipeline-v1/bundles/growthub-creative-video-pipeline-v1.json +4 -0
- package/assets/worker-kits/growthub-creative-video-pipeline-v1/helpers/README.md +1 -0
- package/assets/worker-kits/growthub-creative-video-pipeline-v1/helpers/check-pipeline-health.sh +154 -0
- package/assets/worker-kits/growthub-creative-video-pipeline-v1/kit.json +6 -0
- package/assets/worker-kits/growthub-creative-video-pipeline-v1/pipeline.manifest.json +83 -0
- package/assets/worker-kits/growthub-creative-video-pipeline-v1/validation/e2e-reference.md +166 -0
- package/assets/worker-kits/growthub-creative-video-pipeline-v1/validation-checklist.md +4 -0
- package/assets/worker-kits/growthub-creative-video-pipeline-v1/workspace.dependencies.json +26 -0
- package/dist/index.js +5991 -2607
- package/package.json +2 -2
|
@@ -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`. |
|
package/assets/worker-kits/growthub-creative-video-pipeline-v1/helpers/check-pipeline-health.sh
ADDED
|
@@ -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
|
+
}
|