@growthub/cli 0.7.9 → 0.8.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/creative-strategist-v1/SKILL.md +95 -0
- package/assets/worker-kits/creative-strategist-v1/bundles/creative-strategist-v1.json +12 -2
- package/assets/worker-kits/creative-strategist-v1/helpers/README.md +29 -0
- package/assets/worker-kits/creative-strategist-v1/helpers/extract-muse-frames.sh +81 -0
- package/assets/worker-kits/creative-strategist-v1/helpers/grep-hooks.sh +62 -0
- package/assets/worker-kits/creative-strategist-v1/kit.json +20 -2
- package/assets/worker-kits/creative-strategist-v1/skills/README.md +23 -0
- package/assets/worker-kits/creative-strategist-v1/skills/frame-analysis/SKILL.md +88 -0
- package/assets/worker-kits/creative-strategist-v1/templates/project.md +48 -0
- package/assets/worker-kits/creative-strategist-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/creative-strategist-v1/workers/creative-strategist/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/.env.example +53 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/QUICKSTART.md +98 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/SKILL.md +89 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/.env.example +25 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/README.md +36 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/api/settings/integrations/route.js +13 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/api/workspace/route.js +27 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/globals.css +237 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/layout.jsx +14 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/page.jsx +165 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/settings/integrations/page.jsx +134 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/auth/index.js +21 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/env.js +28 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/integrations/growthub-connection-normalizer.js +95 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/integrations/index.js +178 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/payments/index.js +13 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/persistence/index.js +13 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/persistence/postgres.js +16 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/persistence/provider-managed.js +16 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/persistence/qstash-kv.js +16 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/domain/integrations.js +185 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/domain/portal.js +16 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/next.config.js +10 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/package-lock.json +976 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/package.json +17 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/postcss.config.mjs +3 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/vercel.json +5 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/brands/NEW-CLIENT.md +10 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/brands/_template/brand-kit.md +27 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/brands/growthub/brand-kit.md +25 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/bundles/growthub-agency-portal-starter-v1.json +65 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/adapter-contracts.md +79 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/fork-sync-integration.md +32 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/governed-workspace-primitives.md +182 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/starter-kit-overview.md +30 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/vercel-serverless-deployment.md +46 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/vite-ui-shell-guide.md +24 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/examples/portal-brief-sample.md +44 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/examples/workspace-sample.md +10 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/growthub-meta/README.md +11 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/growthub-meta/kit-standard.md +16 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/helpers/README.md +49 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/kit.json +156 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/output/README.md +13 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/output-standards.md +25 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/runtime-assumptions.md +15 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/setup/check-deps.sh +20 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/setup/verify-env.mjs +92 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/skills/README.md +55 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/skills.md +133 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/index.html +12 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/package-lock.json +1677 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/package.json +20 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/serve.mjs +42 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/src/App.jsx +162 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/src/app.css +138 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/src/main.jsx +10 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/vite.config.js +8 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/agent-contract.md +9 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/client-onboarding-plan.md +56 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/deployment-handoff.md +61 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/deployment-plan.md +22 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/portal-brief.md +65 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/project.md +55 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/supabase-setup-plan.md +26 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/workspace-brief.md +11 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/validation-checklist.md +32 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/workers/agency-portal-operator/CLAUDE.md +75 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/SKILL.md +89 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/bundles/growthub-ai-website-cloner-v1.json +9 -2
- package/assets/worker-kits/growthub-ai-website-cloner-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-ai-website-cloner-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/workers/ai-website-cloner-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/SKILL.md +122 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/bundles/growthub-custom-workspace-starter-v1.json +14 -2
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/docs/governed-workspace-primitives.md +182 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/helpers/README.md +44 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/kit.json +16 -2
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/skills/README.md +55 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/templates/project.md +55 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/workers/custom-workspace-operator/CLAUDE.md +24 -2
- package/assets/worker-kits/growthub-email-marketing-v1/SKILL.md +90 -0
- package/assets/worker-kits/growthub-email-marketing-v1/bundles/growthub-email-marketing-v1.json +9 -2
- package/assets/worker-kits/growthub-email-marketing-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-email-marketing-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-email-marketing-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-email-marketing-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-email-marketing-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-email-marketing-v1/workers/email-marketing-strategist/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-geo-seo-v1/SKILL.md +90 -0
- package/assets/worker-kits/growthub-geo-seo-v1/bundles/growthub-geo-seo-v1.json +12 -3
- package/assets/worker-kits/growthub-geo-seo-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-geo-seo-v1/kit.json +23 -5
- package/assets/worker-kits/growthub-geo-seo-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-geo-seo-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-geo-seo-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-geo-seo-v1/workers/geo-seo-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-hyperframes-studio-v1/SKILL.md +89 -0
- package/assets/worker-kits/growthub-hyperframes-studio-v1/bundles/growthub-hyperframes-studio-v1.json +6 -1
- package/assets/worker-kits/growthub-hyperframes-studio-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-hyperframes-studio-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-hyperframes-studio-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-hyperframes-studio-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-hyperframes-studio-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-hyperframes-studio-v1/workers/hyperframes-studio-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-marketing-skills-v1/SKILL.md +90 -0
- package/assets/worker-kits/growthub-marketing-skills-v1/bundles/growthub-marketing-skills-v1.json +12 -3
- package/assets/worker-kits/growthub-marketing-skills-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-marketing-skills-v1/kit.json +23 -5
- package/assets/worker-kits/growthub-marketing-skills-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-marketing-skills-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-marketing-skills-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-marketing-skills-v1/workers/marketing-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/SKILL.md +89 -0
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/bundles/growthub-open-higgsfield-studio-v1.json +9 -2
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/workers/open-higgsfield-studio-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/SKILL.md +89 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/bundles/growthub-open-montage-studio-v1.json +9 -2
- package/assets/worker-kits/growthub-open-montage-studio-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-open-montage-studio-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/workers/open-montage-studio-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-postiz-social-v1/SKILL.md +90 -0
- package/assets/worker-kits/growthub-postiz-social-v1/bundles/growthub-postiz-social-v1.json +9 -2
- package/assets/worker-kits/growthub-postiz-social-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-postiz-social-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-postiz-social-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-postiz-social-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-postiz-social-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-postiz-social-v1/workers/postiz-social-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/SKILL.md +89 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/bundles/growthub-twenty-crm-v1.json +9 -2
- package/assets/worker-kits/growthub-twenty-crm-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-twenty-crm-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/workers/twenty-crm-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/SKILL.md +89 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/bundles/growthub-video-use-studio-v1.json +6 -1
- package/assets/worker-kits/growthub-video-use-studio-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-video-use-studio-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/workers/video-use-studio-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-zernio-social-v1/SKILL.md +90 -0
- package/assets/worker-kits/growthub-zernio-social-v1/bundles/growthub-zernio-social-v1.json +9 -2
- package/assets/worker-kits/growthub-zernio-social-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-zernio-social-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-zernio-social-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-zernio-social-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-zernio-social-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-zernio-social-v1/workers/zernio-social-operator/CLAUDE.md +22 -0
- package/dist/index.js +970 -241
- package/package.json +2 -2
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "growthub-agency-portal-app",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "next dev",
|
|
8
|
+
"build": "next build",
|
|
9
|
+
"start": "next start",
|
|
10
|
+
"lint": "next lint"
|
|
11
|
+
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"next": "16.2.4",
|
|
14
|
+
"react": "19.2.4",
|
|
15
|
+
"react-dom": "19.2.4"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# New Client — Onboarding
|
|
2
|
+
|
|
3
|
+
When the operator starts a new project:
|
|
4
|
+
|
|
5
|
+
1. Create `brands/<client-slug>/brand-kit.md` from the `_template` scaffold.
|
|
6
|
+
2. Fill in the Identity, Voice, Visual, Assets sections.
|
|
7
|
+
3. Append a `registered` event to `.growthub-fork/trace.jsonl` with `{clientSlug}` in the detail.
|
|
8
|
+
4. Run `growthub kit fork status <fork-id>` to confirm no drift was introduced.
|
|
9
|
+
|
|
10
|
+
The `_template/` brand is upstream-owned; all real client work lives under `brands/<client-slug>/`.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Brand Kit — Template
|
|
2
|
+
|
|
3
|
+
Copy this template to `brands/<slug>/brand-kit.md` and fill in the fields.
|
|
4
|
+
|
|
5
|
+
## Identity
|
|
6
|
+
|
|
7
|
+
- Display name:
|
|
8
|
+
- Slug:
|
|
9
|
+
- Tagline:
|
|
10
|
+
|
|
11
|
+
## Voice
|
|
12
|
+
|
|
13
|
+
- Tone:
|
|
14
|
+
- Vocabulary:
|
|
15
|
+
- Anti-patterns to avoid:
|
|
16
|
+
|
|
17
|
+
## Visual
|
|
18
|
+
|
|
19
|
+
- Primary colour:
|
|
20
|
+
- Secondary colour:
|
|
21
|
+
- Typography pairing:
|
|
22
|
+
|
|
23
|
+
## Assets
|
|
24
|
+
|
|
25
|
+
- Logo URL:
|
|
26
|
+
- Favicon URL:
|
|
27
|
+
- Open Graph image URL:
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Growthub — Reference Brand Kit
|
|
2
|
+
|
|
3
|
+
A worked example of a fully-populated brand kit. The `growthub/` brand is owned by upstream — if you want to customize, create your own brand under `brands/<your-slug>/brand-kit.md`.
|
|
4
|
+
|
|
5
|
+
## Identity
|
|
6
|
+
|
|
7
|
+
- Display name: Growthub
|
|
8
|
+
- Slug: growthub
|
|
9
|
+
- Tagline: Local DX and GTM runtime for AI-native teams.
|
|
10
|
+
|
|
11
|
+
## Voice
|
|
12
|
+
|
|
13
|
+
- Tone: Direct, technical, no filler.
|
|
14
|
+
- Vocabulary: "Worker kit", "custom workspace", "kernel packet", "fork-sync", "heal".
|
|
15
|
+
- Anti-patterns: marketing fluff, redundant adjectives, overpromising.
|
|
16
|
+
|
|
17
|
+
## Visual
|
|
18
|
+
|
|
19
|
+
- Primary colour: #0a0a0a
|
|
20
|
+
- Secondary colour: #4ade80
|
|
21
|
+
- Typography: Inter for UI, JetBrains Mono for code.
|
|
22
|
+
|
|
23
|
+
## Assets
|
|
24
|
+
|
|
25
|
+
- See `ui/public/` in the main repository.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 2,
|
|
3
|
+
"bundle": {
|
|
4
|
+
"id": "growthub-agency-portal-starter-v1",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"kitId": "growthub-agency-portal-starter-v1",
|
|
7
|
+
"workerId": "agency-portal-operator"
|
|
8
|
+
},
|
|
9
|
+
"briefType": "agency-portal-workspace",
|
|
10
|
+
"capabilityType": "worker",
|
|
11
|
+
"executionMode": "export",
|
|
12
|
+
"activationModes": [
|
|
13
|
+
"export"
|
|
14
|
+
],
|
|
15
|
+
"export": {
|
|
16
|
+
"folderName": "growthub-agent-worker-kit-agency-portal-starter-v1",
|
|
17
|
+
"zipFileName": "growthub-agent-worker-kit-agency-portal-starter-v1.zip"
|
|
18
|
+
},
|
|
19
|
+
"publicExampleBrandPaths": [
|
|
20
|
+
"brands/growthub/brand-kit.md"
|
|
21
|
+
],
|
|
22
|
+
"requiredFrozenAssets": [
|
|
23
|
+
"QUICKSTART.md",
|
|
24
|
+
".env.example",
|
|
25
|
+
"SKILL.md",
|
|
26
|
+
"skills.md",
|
|
27
|
+
"output-standards.md",
|
|
28
|
+
"runtime-assumptions.md",
|
|
29
|
+
"validation-checklist.md",
|
|
30
|
+
"workers/agency-portal-operator/CLAUDE.md",
|
|
31
|
+
"brands/_template/brand-kit.md",
|
|
32
|
+
"brands/growthub/brand-kit.md",
|
|
33
|
+
"brands/NEW-CLIENT.md",
|
|
34
|
+
"setup/verify-env.mjs",
|
|
35
|
+
"setup/check-deps.sh",
|
|
36
|
+
"output/README.md",
|
|
37
|
+
"templates/workspace-brief.md",
|
|
38
|
+
"templates/portal-brief.md",
|
|
39
|
+
"templates/client-onboarding-plan.md",
|
|
40
|
+
"templates/agent-contract.md",
|
|
41
|
+
"templates/deployment-plan.md",
|
|
42
|
+
"templates/deployment-handoff.md",
|
|
43
|
+
"templates/supabase-setup-plan.md",
|
|
44
|
+
"templates/project.md",
|
|
45
|
+
"templates/self-eval.md",
|
|
46
|
+
"helpers/README.md",
|
|
47
|
+
"skills/README.md",
|
|
48
|
+
"examples/portal-brief-sample.md",
|
|
49
|
+
"docs/governed-workspace-primitives.md",
|
|
50
|
+
"docs/adapter-contracts.md",
|
|
51
|
+
"docs/vercel-serverless-deployment.md",
|
|
52
|
+
"studio/package.json",
|
|
53
|
+
"studio/package-lock.json",
|
|
54
|
+
"apps/agency-portal/package.json",
|
|
55
|
+
"apps/agency-portal/package-lock.json",
|
|
56
|
+
"apps/agency-portal/next.config.js",
|
|
57
|
+
"apps/agency-portal/app/settings/integrations/page.jsx",
|
|
58
|
+
"apps/agency-portal/lib/adapters/env.js",
|
|
59
|
+
"apps/agency-portal/lib/adapters/integrations/index.js",
|
|
60
|
+
"apps/agency-portal/lib/adapters/integrations/growthub-connection-normalizer.js",
|
|
61
|
+
"apps/agency-portal/lib/domain/integrations.js",
|
|
62
|
+
"growthub-meta/README.md",
|
|
63
|
+
"growthub-meta/kit-standard.md"
|
|
64
|
+
]
|
|
65
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Adapter Contracts — Agency Portal Starter
|
|
2
|
+
|
|
3
|
+
The worker-kit contract is provider-agnostic. Concrete providers are configured through environment variables and adapter documentation, not through kit identity.
|
|
4
|
+
|
|
5
|
+
## Persistence
|
|
6
|
+
|
|
7
|
+
`AGENCY_PORTAL_DATA_ADAPTER` selects the persistence layer:
|
|
8
|
+
|
|
9
|
+
| Value | Required env | Runtime target |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| `postgres` | `DATABASE_URL` | Any Postgres-compatible database |
|
|
12
|
+
| `qstash-kv` | `QSTASH_KV_REST_URL`, `QSTASH_KV_REST_TOKEN` | Qstash/Vercel KV-style HTTP storage |
|
|
13
|
+
| `provider-managed` | Provider-specific env in `.env` | Hosted database surface managed outside the kit |
|
|
14
|
+
|
|
15
|
+
The app payload under `apps/agency-portal/` exposes these adapters as code-level interfaces. Treat any future provider-specific implementation as replaceable behind this contract.
|
|
16
|
+
|
|
17
|
+
## Auth
|
|
18
|
+
|
|
19
|
+
`AGENCY_PORTAL_AUTH_ADAPTER` selects the auth layer:
|
|
20
|
+
|
|
21
|
+
| Value | Required env |
|
|
22
|
+
|---|---|
|
|
23
|
+
| `oidc` | `AUTH_SECRET`, `AUTH_ISSUER`, `AUTH_CLIENT_ID`, `AUTH_CLIENT_SECRET` |
|
|
24
|
+
| `clerk` | provider-specific Clerk env |
|
|
25
|
+
| `authjs` | Auth.js-compatible env |
|
|
26
|
+
| `provider-managed` | provider-specific env |
|
|
27
|
+
|
|
28
|
+
## Payments
|
|
29
|
+
|
|
30
|
+
`AGENCY_PORTAL_PAYMENT_ADAPTER` selects payment support:
|
|
31
|
+
|
|
32
|
+
| Value | Required env |
|
|
33
|
+
|---|---|
|
|
34
|
+
| `none` | none |
|
|
35
|
+
| `stripe` | `PAYMENT_SECRET_KEY`, optional `PAYMENT_WEBHOOK_SECRET` |
|
|
36
|
+
| `polar` | `PAYMENT_SECRET_KEY`, optional `PAYMENT_WEBHOOK_SECRET` |
|
|
37
|
+
|
|
38
|
+
## Reporting
|
|
39
|
+
|
|
40
|
+
`AGENCY_PORTAL_REPORTING_ADAPTER` is optional. Use `windsor` for the first-party reporting path. Windsor AI is treated as a reporting/data-source adapter, not as the database. The starter keeps persistence selected by `AGENCY_PORTAL_DATA_ADAPTER`.
|
|
41
|
+
|
|
42
|
+
The intended Windsor pattern is:
|
|
43
|
+
|
|
44
|
+
1. Connect Windsor AI through the Growthub GH app/MCP bridge.
|
|
45
|
+
2. Use Windsor's blended data support to publish or sync blended marketing datasets into Google Sheets when spreadsheet-backed reporting is preferred.
|
|
46
|
+
3. Read normalized connection state through the integration adapter rather than storing Windsor, Google Analytics, Shopify, or Meta credentials in the starter app.
|
|
47
|
+
|
|
48
|
+
## Integrations
|
|
49
|
+
|
|
50
|
+
`AGENCY_PORTAL_INTEGRATION_ADAPTER` selects how Settings resolves data sources and workspace integrations:
|
|
51
|
+
|
|
52
|
+
| Value | Required env | Authority |
|
|
53
|
+
|---|---|---|
|
|
54
|
+
| `growthub-bridge` | `GROWTHUB_BRIDGE_BASE_URL`, `GROWTHUB_BRIDGE_ACCESS_TOKEN` | Growthub GH app MCP connection authority |
|
|
55
|
+
| `byo-api-key` | `AGENCY_PORTAL_BYO_CONNECTIONS_JSON` or `WINDSOR_API_KEY` for Windsor-only setup | Workspace-owned explicit provider setup |
|
|
56
|
+
| `static` | none | Local starter catalog for development and exported workspaces without hosted authority |
|
|
57
|
+
|
|
58
|
+
The bridge adapter is intentionally thin. It expects a JSON endpoint configured by `GROWTHUB_BRIDGE_INTEGRATIONS_PATH` (default `/api/mcp/accounts`) and normalizes the response into two lanes:
|
|
59
|
+
|
|
60
|
+
- **Data sources**: Windsor AI, Google Sheets blended data, Google Analytics, Shopify, Meta Facebook/Instagram.
|
|
61
|
+
- **Workspace integrations**: Asana, Slack, GoHighLevel, Google Drive, Notion.
|
|
62
|
+
|
|
63
|
+
The GH app authority pattern observed in `/Users/antonio/gh-app` is CMS catalog rows plus active `mcp_connections` rows. The starter does not query that database directly. It consumes the bridge API so the hosted app keeps ownership of user auth, tokens, verification, account IDs, scopes, and provider metadata.
|
|
64
|
+
|
|
65
|
+
The kit-local primitive for this is `apps/agency-portal/lib/adapters/integrations/growthub-connection-normalizer.js`. It accepts the SDK/profile-style integration shape:
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
{ "integrations": [{ "provider": "slack", "label": "Slack", "connectedAt": "...", "scopes": [], "handle": "...", "ready": true }] }
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
It also accepts the GH app MCP accounts shape returned by `/api/mcp/accounts`:
|
|
72
|
+
|
|
73
|
+
```json
|
|
74
|
+
{ "success": true, "accounts": [{ "id": "...", "provider": "slack", "connectionName": "Slack", "connectionType": "oauth_first_party", "isActive": true, "isVerified": true, "metadata": {}, "createdAt": "...", "updatedAt": "...", "appSlug": "slack" }] }
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Both shapes normalize into the same `AgencyPortalIntegration` object used by the BYO path. Unknown connected providers are preserved as discovered workspace integrations instead of being dropped.
|
|
78
|
+
|
|
79
|
+
The BYO path uses the same normalized object shape, but expects the workspace operator to provide the connection metadata and secret env names explicitly. Windsor is first-class: when `WINDSOR_API_KEY` is set with `AGENCY_PORTAL_INTEGRATION_ADAPTER=byo-api-key`, the app marks the Windsor AI data pipeline object as connected without requiring a larger JSON payload. The hosted Growthub bridge remains the lower-friction first-party path for user-owned MCP connections.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Starter Kit — Fork Sync Integration
|
|
2
|
+
|
|
3
|
+
The starter kit is the first bundled worker kit that is both a **template** and a **native consumer** of the Self-Healing Fork Sync Agent.
|
|
4
|
+
|
|
5
|
+
## What the starter registers for you
|
|
6
|
+
|
|
7
|
+
On `growthub starter init` the CLI:
|
|
8
|
+
|
|
9
|
+
1. Materializes the bundled tree to `<out>` via `copyBundledKitSource`.
|
|
10
|
+
2. Calls `registerKitFork({ forkPath, kitId, baseVersion })` — writes `<out>/.growthub-fork/fork.json` and appends an entry to the CLI-owned discovery index at `GROWTHUB_KIT_FORKS_HOME/index.json`.
|
|
11
|
+
3. Seeds `<out>/.growthub-fork/policy.json` with conservative defaults (`autoApprove=additive`, `remoteSyncMode=off`, `interactiveConflicts=true`).
|
|
12
|
+
4. Appends a `registered` event to `<out>/.growthub-fork/trace.jsonl`.
|
|
13
|
+
5. Optionally binds a GitHub remote via `growthub kit fork create --upstream <owner/repo>` or `growthub kit fork connect --remote <owner/repo>`.
|
|
14
|
+
|
|
15
|
+
## What you never have to do manually
|
|
16
|
+
|
|
17
|
+
- Generate a forkId.
|
|
18
|
+
- Write the initial policy.json.
|
|
19
|
+
- Ensure `.growthub-fork/` is present and well-formed.
|
|
20
|
+
- Add the fork to the discovery index.
|
|
21
|
+
|
|
22
|
+
## When upstream ships a new version
|
|
23
|
+
|
|
24
|
+
Exactly the same flow as every other kit-fork:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
growthub kit fork status <fork-id>
|
|
28
|
+
growthub kit fork heal <fork-id> --dry-run
|
|
29
|
+
growthub kit fork heal <fork-id>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
The heal plan honours your `policy.json`. User-modified files, `policy.untouchablePaths`, and `CUSTOM_SKILL_PATTERNS` are never overwritten.
|
package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/governed-workspace-primitives.md
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# Governed-Workspace Primitives — How Your Workspace Coordinates Agents at Enterprise Scale
|
|
2
|
+
|
|
3
|
+
Every workspace you create with Growthub Local — greenfield via `growthub starter init`, or imported via `growthub starter import-repo` / `import-skill`, or materialised from any worker kit via `growthub kit download` — inherits six architectural primitives that make the workspace **self-describing to agents**, **continuous across sessions**, and **auditable for enterprise operators**.
|
|
4
|
+
|
|
5
|
+
This doc explains **why** each primitive exists and **what it buys your team**. The protocol reference lives at [`docs/SKILLS_MCP_DISCOVERY.md`](../../../../docs/SKILLS_MCP_DISCOVERY.md) at the repo level; this file is written for the human and the agent who are about to operate inside the workspace you just exported.
|
|
6
|
+
|
|
7
|
+
> TL;DR — The primitives turn a folder of files into a **coordinated execution substrate** that Claude, Cursor, Codex, and custom harnesses all read the same way, that remembers what has happened across sessions, and that refuses to run away on a retry loop.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## The problem these primitives solve
|
|
12
|
+
|
|
13
|
+
Most agent stacks give you one of:
|
|
14
|
+
|
|
15
|
+
- a raw repo an agent can edit, with no governance;
|
|
16
|
+
- a prompt pack that works once and then decays;
|
|
17
|
+
- a hosted product that locks your customisation behind a vendor.
|
|
18
|
+
|
|
19
|
+
None of those scale to enterprise work where many agents, many sessions, and many operators act on the same substrate over time. You need a **workspace** that is:
|
|
20
|
+
|
|
21
|
+
- **discoverable** — agents know what's here without reading everything
|
|
22
|
+
- **continuous** — day 3 of a brief remembers day 1
|
|
23
|
+
- **bounded** — a broken generation doesn't loop forever
|
|
24
|
+
- **auditable** — every material change produces a receipt a human can review
|
|
25
|
+
- **composable** — heavy work spawns into its own lane without poisoning the parent context
|
|
26
|
+
- **safe** — side-effecting shell calls are reviewable files, not one-off prompts
|
|
27
|
+
|
|
28
|
+
The six primitives below each answer one of those needs, and the Growthub SDK (`@growthub/api-contract/skills`) is the capability-agnostic contract that lets every worker kit, every fork, and every agent harness read them the same way.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 1. `SKILL.md` — The Discovery Entry
|
|
33
|
+
|
|
34
|
+
**What it is.** A single file at the root of every kit with YAML frontmatter (`name`, `description`, `triggers`, `sessionMemory`, `selfEval`, `helpers`, `subSkills`, `mcpTools`) and a short markdown routing body.
|
|
35
|
+
|
|
36
|
+
**Why it exists.** Claude / Cursor / Codex agents scan the frontmatter at session start to catalog what's available — they do **not** load the full runbook (`skills.md`) until the user actually engages the skill. That cuts token cost on discovery and lets an agent know, within milliseconds, that your workspace has a Creative Strategist, a Hyperframes studio, and a Postiz social scheduler available — without reading a single line of the detailed operator runbook.
|
|
37
|
+
|
|
38
|
+
**What it buys you.**
|
|
39
|
+
- Agents route faster and more predictably across many kits.
|
|
40
|
+
- A new team member (or a fresh agent session) gets oriented without re-explaining the repo.
|
|
41
|
+
- Cross-agent compatibility is automatic — the same `SKILL.md` is read identically by Claude, Cursor, Codex, and custom harnesses.
|
|
42
|
+
|
|
43
|
+
**Enterprise use case.** A creative ops team with 30 worker kits across 6 brands can expose all 30 to every agent surface in the org without a custom integration per tool. The manifest *is* the integration.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 2. Symlinked Pointer — AGENTS.md as Single Source of Truth
|
|
48
|
+
|
|
49
|
+
**What it is.** The repo root has exactly one authoritative agent contract (`AGENTS.md`). `CLAUDE.md` and `.cursorrules` are plain-text pointers that say "see AGENTS.md". No duplicated rules, no drift.
|
|
50
|
+
|
|
51
|
+
**Why it exists.** Multi-agent environments drift the second a rule lives in two places. Someone updates the Cursor file and forgets the Claude file. The pointer pattern makes that impossible: there is only one file to edit.
|
|
52
|
+
|
|
53
|
+
**What it buys you.**
|
|
54
|
+
- Agent rules updated in one place, picked up by every surface on next session load.
|
|
55
|
+
- Audit is simpler — reviewers look at one file, not three.
|
|
56
|
+
- Cross-OS safety — pointer files work on Windows clones where symlinks don't.
|
|
57
|
+
|
|
58
|
+
**Enterprise use case.** Compliance or InfoSec can sign off on one agent-behaviour file; no more "but the Cursor rules differ from the Claude rules" gaps.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## 3. `.growthub-fork/project.md` — Session Memory
|
|
63
|
+
|
|
64
|
+
**What it is.** A human-readable, append-only journal seeded inside the fork's governed state directory (alongside `fork.json`, `policy.json`, `trace.jsonl`, optional `authority.json`). Written by the CLI at init/import time from the kit's `templates/project.md`.
|
|
65
|
+
|
|
66
|
+
**Why it exists.** The machine-readable `trace.jsonl` is perfect for systems to replay history, but it is lossy to humans. `project.md` is the narrative layer — "what we tried, what we approved, what we rejected, where we stopped" — so the next session (yours or another agent's) can resume without re-explaining.
|
|
67
|
+
|
|
68
|
+
**What it buys you.**
|
|
69
|
+
- Day 3 of a multi-day brief opens with yesterday's context already in scope.
|
|
70
|
+
- Approvals, rejections, and self-eval outcomes are preserved across handoffs.
|
|
71
|
+
- Operators who return to a workspace after a month see exactly where work paused.
|
|
72
|
+
|
|
73
|
+
**Enterprise use case.** Hand-offs between a contract creative team and an in-house team stop losing context. An agent in the in-house session reads the last 3 entries in `project.md` and picks up where the contractor left off.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 4. Self-Evaluation — Bounded Retry Loop
|
|
78
|
+
|
|
79
|
+
**What it is.** Every `SKILL.md` declares `selfEval.criteria[]` (what good looks like) and `selfEval.maxRetries` (default `3`). The agent runs `generate → apply → evaluate → record`, records each attempt to both `project.md` and `trace.jsonl`, and **must stop** when it hits the retry ceiling. The CLI primitive `recordSelfEval()` (`cli/src/skills/self-eval.ts`) is the single place that writes both surfaces.
|
|
80
|
+
|
|
81
|
+
**Why it exists.** Unbounded agent loops are the #1 source of cost overruns and silent failures. A governed self-eval contract guarantees every attempt is observable *and* gives the agent a principled stopping point.
|
|
82
|
+
|
|
83
|
+
**What it buys you.**
|
|
84
|
+
- Runaway jobs are impossible — the ceiling is enforced in the bookkeeping primitive.
|
|
85
|
+
- Every retry produces a receipt a human can read.
|
|
86
|
+
- The Fork Sync Agent's existing `preview → apply → trace` loop is reused, not reinvented — so operators who already trust Fork Sync get the same governance here.
|
|
87
|
+
|
|
88
|
+
**Enterprise use case.** A marketing ops team approves "at most 3 retries per creative unit" as policy. The SDK enforces it. Failed attempts surface in `project.md` immediately; nobody has to write a watchdog.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## 5. Sub-Skills — Parallel Agent Lanes
|
|
93
|
+
|
|
94
|
+
**What it is.** A kit can declare nested skills under `<kit>/skills/<slug>/SKILL.md`. The parent skill spawns a sub-agent for a sub-skill when the work is (a) heavy enough to pollute the parent's context, or (b) narrow enough to benefit from a specialist lane. Both parent and sub-skill share the same `project.md` journal — so the parent reads the sub-agent's outcome on return without losing continuity.
|
|
95
|
+
|
|
96
|
+
**Why it exists.** Heavy work (frame extraction, Manim render, PIL compositing, audit passes) shouldn't share the parent's context budget. And specialist work is easier to govern as its own unit.
|
|
97
|
+
|
|
98
|
+
**What it buys you.**
|
|
99
|
+
- Lower token cost on the parent — the parent stays focused on the user-facing artifact.
|
|
100
|
+
- Clean audit trail — each sub-skill run appends to `project.md::subSkillRuns` with its own start/result.
|
|
101
|
+
- Reusable lanes — a sub-skill like `frame-analysis` can be shared across multiple parent kits.
|
|
102
|
+
|
|
103
|
+
**Enterprise use case.** Video / creative pipelines get the EDL-per-cut pattern as a sub-skill spawned by the parent brief skill, while non-video kits (CRM, email, SEO) stay on a simple flat loop — one SDK, both patterns, same governance.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 6. `helpers/` — Safe Shell Tool Layer
|
|
108
|
+
|
|
109
|
+
**What it is.** Small, deterministic scripts (`helpers/<verb>.{sh,mjs,py}`) that agents invoke via one shell call instead of reconstructing a raw pipeline inline.
|
|
110
|
+
|
|
111
|
+
**Why it exists.** Raw shell in a prompt is fragile, unreviewable, and drifts every session. Moving the same snippets into reviewable files in the kit makes them (a) inspectable, (b) testable, (c) safer — and agents read *one line* ("run helpers/grep-hooks.sh") instead of reconstructing a 4-line pipeline.
|
|
112
|
+
|
|
113
|
+
**What it buys you.**
|
|
114
|
+
- Reliability — the same inputs always produce the same outputs.
|
|
115
|
+
- Reviewable by security — helpers live in the repo and diff cleanly.
|
|
116
|
+
- Lower cognitive load for agents — one invocation is easier than four.
|
|
117
|
+
|
|
118
|
+
**Enterprise use case.** A security review of your agent workflow doesn't require reading agent transcripts — it reads the `helpers/` folder once. That's the full list of side-effecting operations.
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## How the primitives compose: the export guarantee
|
|
123
|
+
|
|
124
|
+
Every kit export (`scripts/export-worker-kit.mjs --qa`) asserts all six primitives are present before shipping. The assertions are:
|
|
125
|
+
|
|
126
|
+
1. `SKILL.md` exists with well-formed frontmatter (`name`, `description`).
|
|
127
|
+
2. `templates/project.md` exists (session memory seed).
|
|
128
|
+
3. `templates/self-eval.md` exists (self-eval pattern).
|
|
129
|
+
4. `helpers/README.md` exists (safe-shell convention).
|
|
130
|
+
5. `skills/README.md` exists (sub-skill convention).
|
|
131
|
+
6. `kit.json.frozenAssetPaths` declares all five paths.
|
|
132
|
+
|
|
133
|
+
A kit that forgets any of these **cannot ship** — the export script refuses to produce a bundle. That guarantee is what makes the primitive layer trustworthy at scale: every workspace your team exports will have them, every time.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## How to operate inside this workspace
|
|
138
|
+
|
|
139
|
+
1. **At session start.** Read `.growthub-fork/project.md` (what happened last time) → `SKILL.md` (what's here) → `skills.md` (how to do the work).
|
|
140
|
+
2. **During work.** After every material change, write a dated bullet to `project.md`'s "Session log" AND call `appendKitForkTraceEvent` for the machine log. The CLI primitive `recordSelfEval` does both in one call — use it.
|
|
141
|
+
3. **On retry.** Every attempt goes to both surfaces. At `attempt === maxRetries`, park with a `needs_confirmation` note and stop.
|
|
142
|
+
4. **On heavy work.** Spawn a sub-skill from `skills/<slug>/` when context isolation helps. The sub-skill shares this fork's `project.md` — no separate journal.
|
|
143
|
+
5. **On side effects.** Use a helper from `helpers/`. If you're about to write raw shell for the third time, promote it to a helper first.
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## Command surface from inside the workspace
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
# Catalog every SKILL.md reachable from here (root + nested sub-skills)
|
|
151
|
+
growthub skills list [--json]
|
|
152
|
+
|
|
153
|
+
# Strict shape check — frontmatter + helper/sub-skill path existence
|
|
154
|
+
growthub skills validate
|
|
155
|
+
|
|
156
|
+
# Read the session memory for this fork
|
|
157
|
+
growthub skills session show [--body]
|
|
158
|
+
|
|
159
|
+
# (Re-)seed the session memory if it is missing
|
|
160
|
+
growthub skills session init [--kit <id>]
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## What this substrate is NOT
|
|
164
|
+
|
|
165
|
+
- **Not a sandbox.** It's a set of conventions. The filesystem is still yours to edit.
|
|
166
|
+
- **Not a lock-in.** Every primitive file is plain markdown or JSON — readable without Growthub tooling.
|
|
167
|
+
- **Not a replacement for policy.** `policy.json` and the Fork Sync Agent remain the safety envelope. The primitives ride on top.
|
|
168
|
+
- **Not capability-specific.** The SDK contract (`@growthub/api-contract/skills::SkillSelfEval`) is intentionally agnostic. Creative, code, content, CRM, social, audit — all specialise inside their own `skills.md` without changing the contract.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Further reading
|
|
173
|
+
|
|
174
|
+
- [`../SKILL.md`](../SKILL.md) — the discovery entry for this kit
|
|
175
|
+
- [`../skills.md`](../skills.md) — the operator runbook (the deep how-to)
|
|
176
|
+
- [`../workers/agency-portal-operator/CLAUDE.md`](../workers/agency-portal-operator/CLAUDE.md) — the worker agent contract
|
|
177
|
+
- [`../templates/project.md`](../templates/project.md) — session-memory template
|
|
178
|
+
- [`../templates/self-eval.md`](../templates/self-eval.md) — self-evaluation template
|
|
179
|
+
- [`../helpers/README.md`](../helpers/README.md) — safe-shell convention
|
|
180
|
+
- [`../skills/README.md`](../skills/README.md) — sub-skill convention
|
|
181
|
+
- Repo-level protocol reference: `docs/SKILLS_MCP_DISCOVERY.md`
|
|
182
|
+
- SDK source of truth: `@growthub/api-contract/skills`
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Agency Portal Starter Kit — Overview
|
|
2
|
+
|
|
3
|
+
The Growthub Agency Portal Starter Kit specializes the custom workspace starter primitive into a first-party agency portal workspace. It combines:
|
|
4
|
+
|
|
5
|
+
1. **Governed workspace substrate** — kit manifest, frozen assets, brand scaffolds, setup, templates, docs, growthub-meta, session memory, self-eval, helpers, and sub-skill conventions.
|
|
6
|
+
2. **Vite-bundled local shell** — a React + Vite studio at `studio/` that remains the Growthub Local operator surface.
|
|
7
|
+
3. **Vercel-ready app payload** — a Next.js app at `apps/agency-portal/` with adapter-first persistence, auth, and payment contracts.
|
|
8
|
+
4. **First-class Self-Healing Fork Sync Agent wiring** — exports register as kit-forks with policy, trace, and a dedicated `forkId`.
|
|
9
|
+
|
|
10
|
+
## Why a dedicated primitive
|
|
11
|
+
|
|
12
|
+
Users who want a production agency portal should not inherit a provider-locked app as their worker-kit contract. This kit gives them:
|
|
13
|
+
|
|
14
|
+
- A governed workspace that satisfies every custom-workspace kernel invariant.
|
|
15
|
+
- Local-first operation through the Vite shell.
|
|
16
|
+
- Clean Vercel deployment through `apps/agency-portal/`.
|
|
17
|
+
- Configurable persistence through Postgres, Qstash KV, or provider-managed adapters.
|
|
18
|
+
- An auto-registered fork with policy, trace, and (optionally) a GitHub remote.
|
|
19
|
+
- A guaranteed upgrade path back to upstream via the Self-Healing Fork Sync Agent.
|
|
20
|
+
|
|
21
|
+
## End-to-end flow
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
growthub kit download growthub-agency-portal-starter-v1 --out ./exports
|
|
25
|
+
└→ copyBundledKitSource('growthub-agency-portal-starter-v1', './my-workspace')
|
|
26
|
+
└→ registerKitFork({ forkPath: './my-workspace', kitId: '...', baseVersion: '1.0.0' })
|
|
27
|
+
└→ writeKitForkPolicy(forkPath, default)
|
|
28
|
+
└→ appendKitForkTraceEvent(forkPath, 'registered')
|
|
29
|
+
└→ (optional) growthub kit fork create --upstream owner/repo → GitHub remote
|
|
30
|
+
```
|
package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/vercel-serverless-deployment.md
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Vercel Serverless Deployment
|
|
2
|
+
|
|
3
|
+
The clean cloud deployment lane is the app payload:
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
apps/agency-portal/
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
The Growthub local-first workspace remains the kit root, and the Vite operator shell remains:
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
studio/
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Vercel project settings
|
|
16
|
+
|
|
17
|
+
- Root directory: `apps/agency-portal`
|
|
18
|
+
- Build command: `npm run build`
|
|
19
|
+
- Install command: `npm install`
|
|
20
|
+
- Framework preset: Next.js
|
|
21
|
+
|
|
22
|
+
## Required adapter env
|
|
23
|
+
|
|
24
|
+
At minimum, set:
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
AGENCY_PORTAL_DEPLOY_TARGET=vercel
|
|
28
|
+
AGENCY_PORTAL_DATA_ADAPTER=<postgres|qstash-kv|provider-managed>
|
|
29
|
+
AGENCY_PORTAL_AUTH_ADAPTER=<oidc|clerk|authjs|provider-managed>
|
|
30
|
+
AGENCY_PORTAL_PAYMENT_ADAPTER=<none|stripe|polar>
|
|
31
|
+
AGENCY_PORTAL_INTEGRATION_ADAPTER=<static|growthub-bridge|byo-api-key>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Then set the provider-specific env required by `docs/adapter-contracts.md`.
|
|
35
|
+
|
|
36
|
+
For hosted Growthub authority, set:
|
|
37
|
+
|
|
38
|
+
```text
|
|
39
|
+
GROWTHUB_BRIDGE_BASE_URL=<growthub-gh-app-url>
|
|
40
|
+
GROWTHUB_BRIDGE_INTEGRATIONS_PATH=/api/mcp/accounts
|
|
41
|
+
GROWTHUB_BRIDGE_ACCESS_TOKEN=<bridge-token-issued-by-growthub-authority>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The deployed app reads normalized integration state from the bridge. It does not require raw Shopify, Meta, Google Analytics, Asana, Slack, GoHighLevel, Google Drive, Notion, Windsor, or Google Sheets secrets.
|
|
45
|
+
|
|
46
|
+
If `AGENCY_PORTAL_INTEGRATION_ADAPTER=byo-api-key`, set `AGENCY_PORTAL_BYO_CONNECTIONS_JSON` with the same normalized integration object fields and secret env names. This is more detailed setup, but keeps the worker kit contract composable.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Starter Kit — Vite UI Shell Guide
|
|
2
|
+
|
|
3
|
+
The `studio/` directory ships a minimal Vite 5 + React 18 shell. It is intentionally tiny — a single `App.jsx` view that introspects the fork state.
|
|
4
|
+
|
|
5
|
+
## Extend it
|
|
6
|
+
|
|
7
|
+
Add views under `studio/src/views/<Name>.jsx`. Import them in `App.jsx`. Vite's hot-module-replacement handles the dev loop; the Self-Healing Fork Sync Agent treats any file you add under `studio/src/` as user-authored (it may still update upstream-owned files in `studio/src/` — protect yours via `policy.untouchablePaths`).
|
|
8
|
+
|
|
9
|
+
## Build + serve
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
cd studio
|
|
13
|
+
npm install
|
|
14
|
+
npm run dev # dev server
|
|
15
|
+
npm run build # production build -> studio/dist
|
|
16
|
+
node serve.mjs # serve studio/dist on localhost
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Why Vite, not Next.js
|
|
20
|
+
|
|
21
|
+
- Zero server coupling — a static `dist/` directory ships anywhere.
|
|
22
|
+
- Fast dev loop (HMR).
|
|
23
|
+
- No vendor lock-in at the framework level.
|
|
24
|
+
- Mirrors the pattern already in production for `growthub-zernio-social-v1`.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Portal Brief Sample
|
|
2
|
+
|
|
3
|
+
Client: Acme Growth Studio
|
|
4
|
+
Workspace: agency-portal-v1
|
|
5
|
+
Goal: operate client reporting, task follow-up, and campaign visibility from a governed Growthub worker-kit fork.
|
|
6
|
+
|
|
7
|
+
## Runtime Choice
|
|
8
|
+
|
|
9
|
+
- Local operator shell: `studio/`
|
|
10
|
+
- Deployable app: `apps/agency-portal/`
|
|
11
|
+
- Vercel root: `apps/agency-portal`
|
|
12
|
+
- GitHub/Vercel deployment: connected through the user's normal GitHub and Vercel project flow.
|
|
13
|
+
|
|
14
|
+
## Adapter Choice
|
|
15
|
+
|
|
16
|
+
- Persistence: `provider-managed`
|
|
17
|
+
- Auth: `provider-managed`
|
|
18
|
+
- Payments: `none`
|
|
19
|
+
- Integrations: `growthub-bridge`
|
|
20
|
+
- Reporting: `windsor`
|
|
21
|
+
|
|
22
|
+
## Data Pipeline Objects
|
|
23
|
+
|
|
24
|
+
- Windsor AI: connected through Growthub bridge.
|
|
25
|
+
- Google Sheets blended data: enabled as the Windsor blended data destination.
|
|
26
|
+
- Google Analytics: active through GH app MCP connection authority.
|
|
27
|
+
- Shopify: active through GH app MCP connection authority.
|
|
28
|
+
- Meta Facebook/Instagram: active through GH app MCP connection authority.
|
|
29
|
+
|
|
30
|
+
## MCP Connection Integrations
|
|
31
|
+
|
|
32
|
+
- Asana: active.
|
|
33
|
+
- Slack: active.
|
|
34
|
+
- GoHighLevel: pending.
|
|
35
|
+
- Google Drive: active.
|
|
36
|
+
- Notion: pending.
|
|
37
|
+
|
|
38
|
+
## Production Readiness
|
|
39
|
+
|
|
40
|
+
- `node setup/verify-env.mjs` passes.
|
|
41
|
+
- `studio/` builds.
|
|
42
|
+
- `apps/agency-portal/` builds.
|
|
43
|
+
- `/settings/integrations` shows active badges for bridge-returned connections.
|
|
44
|
+
- `growthub kit fork status <fork-id>` has been captured in `output/acme/agency-portal-v1/trace-summary.md`.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Workspace Sample — Reference Output
|
|
2
|
+
|
|
3
|
+
A worked example of the artifact shape a finished workspace produces. Use this as a comparison benchmark when validating a custom workspace run.
|
|
4
|
+
|
|
5
|
+
- Client: growthub
|
|
6
|
+
- Project slug: starter-reference
|
|
7
|
+
- Goals: (1) demonstrate the starter contract; (2) validate fork-sync wiring; (3) produce a minimal but complete workspace tree
|
|
8
|
+
- First heal checkpoint: `status_ran` at registration, overall severity = none.
|
|
9
|
+
|
|
10
|
+
See `output/growthub/starter-reference/` after running the starter init + first heal.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Growthub Meta — growthub-agency-portal-starter-v1
|
|
2
|
+
|
|
3
|
+
Upstream-owned metadata that travels with the agency portal starter kit. Do not edit these files in a fork unless the change is intentionally part of the upstream kit contract.
|
|
4
|
+
|
|
5
|
+
| Field | Value |
|
|
6
|
+
|---|---|
|
|
7
|
+
| Kit ID | `growthub-agency-portal-starter-v1` |
|
|
8
|
+
| Worker ID | `agency-portal-operator` |
|
|
9
|
+
| Local shell | `studio/` |
|
|
10
|
+
| Vercel app | `apps/agency-portal/` |
|
|
11
|
+
| Adapter contract | `docs/adapter-contracts.md` |
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Kit Standard — growthub-agency-portal-starter-v1
|
|
2
|
+
|
|
3
|
+
This starter is a custom-workspace-derived agency portal worker kit with:
|
|
4
|
+
|
|
5
|
+
- `schemaVersion: 2` in `kit.json`
|
|
6
|
+
- `family: "studio"`
|
|
7
|
+
- `executionMode: "export"`
|
|
8
|
+
- `activationModes: ["export"]`
|
|
9
|
+
|
|
10
|
+
Every bundled worker kit under `cli/assets/worker-kits/` conforms to the same shape. See `docs/kernel-packets/KERNEL_PACKET_CUSTOM_WORKSPACES.md` for the full invariant list.
|
|
11
|
+
|
|
12
|
+
Additional invariants:
|
|
13
|
+
|
|
14
|
+
- `studio/` remains the local-first Vite operator shell.
|
|
15
|
+
- `apps/agency-portal/` remains the Vercel app payload.
|
|
16
|
+
- Persistence/auth/payment selection stays behind adapter env and docs.
|