@growthub/cli 0.3.56 → 0.3.58

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.
Files changed (37) hide show
  1. package/assets/worker-kits/growthub-zernio-social-v1/QUICKSTART.md +209 -0
  2. package/assets/worker-kits/growthub-zernio-social-v1/brands/NEW-CLIENT.md +74 -0
  3. package/assets/worker-kits/growthub-zernio-social-v1/brands/_template/brand-kit.md +131 -0
  4. package/assets/worker-kits/growthub-zernio-social-v1/brands/growthub/brand-kit.md +141 -0
  5. package/assets/worker-kits/growthub-zernio-social-v1/bundles/growthub-zernio-social-v1.json +55 -0
  6. package/assets/worker-kits/growthub-zernio-social-v1/docs/ai-caption-layer.md +132 -0
  7. package/assets/worker-kits/growthub-zernio-social-v1/docs/local-adapters.md +123 -0
  8. package/assets/worker-kits/growthub-zernio-social-v1/docs/platform-coverage.md +112 -0
  9. package/assets/worker-kits/growthub-zernio-social-v1/docs/postiz-ui-shell-integration.md +166 -0
  10. package/assets/worker-kits/growthub-zernio-social-v1/docs/posts-and-queues-layer.md +208 -0
  11. package/assets/worker-kits/growthub-zernio-social-v1/docs/zernio-api-integration.md +265 -0
  12. package/assets/worker-kits/growthub-zernio-social-v1/examples/analytics-brief-sample.md +97 -0
  13. package/assets/worker-kits/growthub-zernio-social-v1/examples/client-proposal-sample.md +106 -0
  14. package/assets/worker-kits/growthub-zernio-social-v1/examples/content-calendar-sample.md +74 -0
  15. package/assets/worker-kits/growthub-zernio-social-v1/examples/social-campaign-sample.md +105 -0
  16. package/assets/worker-kits/growthub-zernio-social-v1/growthub-meta/README.md +146 -0
  17. package/assets/worker-kits/growthub-zernio-social-v1/growthub-meta/kit-standard.md +120 -0
  18. package/assets/worker-kits/growthub-zernio-social-v1/kit.json +104 -0
  19. package/assets/worker-kits/growthub-zernio-social-v1/output/README.md +63 -0
  20. package/assets/worker-kits/growthub-zernio-social-v1/output-standards.md +132 -0
  21. package/assets/worker-kits/growthub-zernio-social-v1/runtime-assumptions.md +170 -0
  22. package/assets/worker-kits/growthub-zernio-social-v1/setup/check-deps.mjs +117 -0
  23. package/assets/worker-kits/growthub-zernio-social-v1/setup/check-deps.sh +86 -0
  24. package/assets/worker-kits/growthub-zernio-social-v1/setup/install-mcp.mjs +177 -0
  25. package/assets/worker-kits/growthub-zernio-social-v1/setup/setup.mjs +247 -0
  26. package/assets/worker-kits/growthub-zernio-social-v1/setup/verify-env.mjs +138 -0
  27. package/assets/worker-kits/growthub-zernio-social-v1/skills.md +332 -0
  28. package/assets/worker-kits/growthub-zernio-social-v1/templates/analytics-brief.md +101 -0
  29. package/assets/worker-kits/growthub-zernio-social-v1/templates/caption-copy-deck.md +105 -0
  30. package/assets/worker-kits/growthub-zernio-social-v1/templates/client-proposal.md +98 -0
  31. package/assets/worker-kits/growthub-zernio-social-v1/templates/content-calendar.md +70 -0
  32. package/assets/worker-kits/growthub-zernio-social-v1/templates/platform-publishing-plan.md +86 -0
  33. package/assets/worker-kits/growthub-zernio-social-v1/templates/scheduling-manifest.md +92 -0
  34. package/assets/worker-kits/growthub-zernio-social-v1/templates/social-campaign-brief.md +102 -0
  35. package/assets/worker-kits/growthub-zernio-social-v1/validation-checklist.md +85 -0
  36. package/assets/worker-kits/growthub-zernio-social-v1/workers/zernio-social-operator/CLAUDE.md +307 -0
  37. package/package.json +1 -1
@@ -0,0 +1,70 @@
1
+ # Content Calendar — [Client Name] · [Project Name]
2
+
3
+ **Kit:** `growthub-zernio-social-v1`
4
+ **Generated:** [YYYY-MM-DD]
5
+ **Mode:** [api-live | agent-only | hybrid]
6
+ **Version:** `v1`
7
+
8
+ ---
9
+
10
+ ## Calendar Header
11
+
12
+ | Field | Value |
13
+ |---|---|
14
+ | Client | [Client Name] |
15
+ | Zernio profile id | [prof_... or placeholder] |
16
+ | Campaign window | [YYYY-MM-DD] → [YYYY-MM-DD] |
17
+ | Platforms | [comma-separated Zernio platform slugs] |
18
+ | Posting timezone | [IANA tz] |
19
+
20
+ ---
21
+
22
+ ## Calendar Table
23
+
24
+ Column contract (one row per scheduled post):
25
+
26
+ | Date | Day | Platform | Account | Theme | Post Type | Caption Preview | CTA | Media Notes | Status |
27
+ |---|---|---|---|---|---|---|---|---|---|
28
+ | YYYY-MM-DD | Mon | `instagram` | [@handle or accountId] | [Pillar] | image | [first 100 chars of variant A] | [CTA] | [dims, duration, overlays] | draft |
29
+ | YYYY-MM-DD | Mon | `twitter` | [@handle or accountId] | [Pillar] | text | [first 100 chars] | [CTA] | — | draft |
30
+ | YYYY-MM-DD | Tue | `linkedin` | [page id or accountId] | [Pillar] | carousel | [first 100 chars] | [CTA] | [slide count + order] | draft |
31
+ | ... | | | | | | | | | |
32
+
33
+ ### Rules
34
+
35
+ - One row per scheduled post
36
+ - `Platform` values must exist in `docs/platform-coverage.md`
37
+ - `Post Type` must be valid for the platform
38
+ - `Caption Preview` is the first 100 characters of the selected variant — full captions live in the Caption Copy Deck
39
+ - `CTA` is required and non-empty
40
+ - `Media Notes` are required for image/video/carousel/reel/short/story
41
+ - `Status` defaults to `draft` and moves to `scheduled` once the manifest is submitted
42
+
43
+ ---
44
+
45
+ ## Posting Cadence Summary
46
+
47
+ | Platform | Posts / week | Best time window | Notes |
48
+ |---|---|---|---|
49
+ | `instagram` | [3] | [12:00–13:00 local] | [rationale] |
50
+ | `linkedin` | [3] | [08:00–09:30 local] | [rationale] |
51
+ | `twitter` | [7] | [spread: 08:00, 12:00, 17:00] | [rationale] |
52
+
53
+ ---
54
+
55
+ ## Theme Pillar Distribution
56
+
57
+ | Pillar | Count | % of calendar |
58
+ |---|---|---|
59
+ | [Pillar 1] | [N] | [40%] |
60
+ | [Pillar 2] | [N] | [30%] |
61
+ | [Pillar 3] | [N] | [20%] |
62
+ | [Pillar 4] | [N] | [10%] |
63
+
64
+ ---
65
+
66
+ ## Notes
67
+
68
+ - Cadence must match the Platform Publishing Plan
69
+ - Multi-platform posts spaced ≥30 minutes apart to avoid simultaneous-publishing optics
70
+ - Weekend slots default to community / engagement pillars unless client overrides
@@ -0,0 +1,86 @@
1
+ # Platform Publishing Plan — [Client Name] · [Project Name]
2
+
3
+ **Kit:** `growthub-zernio-social-v1`
4
+ **Generated:** [YYYY-MM-DD]
5
+ **Mode:** [api-live | agent-only | hybrid]
6
+ **Version:** `v1`
7
+
8
+ ---
9
+
10
+ ## Per-Platform Rows
11
+
12
+ Produce one row per platform in scope. Every field is required.
13
+
14
+ ### [Platform — e.g., Instagram]
15
+
16
+ | Field | Value |
17
+ |---|---|
18
+ | Zernio platform id | `instagram` |
19
+ | Zernio account id | [acc_ig_... or `placeholder_@handle` in agent-only] |
20
+ | Format mix | [e.g., 40% reels, 30% carousel, 20% single image, 10% story] |
21
+ | Posting frequency | [e.g., 3/week + daily stories] |
22
+ | Best posting times (local) | [e.g., Tue 12:00, Thu 12:00, Sat 10:30] |
23
+ | Primary theme pillars | [pillar names] |
24
+ | Caption length target | [e.g., 125–150 chars above the fold] |
25
+ | Hashtag count | [e.g., 3–5 primary] |
26
+ | Content mix rationale | [One paragraph: why this mix fits the audience and objective] |
27
+
28
+ ### [Platform — e.g., LinkedIn]
29
+
30
+ | Field | Value |
31
+ |---|---|
32
+ | Zernio platform id | `linkedin` |
33
+ | Zernio account id | [page id or accountId] |
34
+ | Format mix | [e.g., 50% text+image, 30% document carousel, 20% video] |
35
+ | Posting frequency | [e.g., 3/week] |
36
+ | Best posting times (local) | [e.g., Tue 08:30, Wed 08:30, Thu 08:30] |
37
+ | Primary theme pillars | [pillar names] |
38
+ | Caption length target | [e.g., 1,200–2,000 chars for thought leadership] |
39
+ | Hashtag count | [e.g., 3–5 professional] |
40
+ | Content mix rationale | [One paragraph] |
41
+
42
+ ### [Platform — e.g., X/Twitter]
43
+
44
+ | Field | Value |
45
+ |---|---|
46
+ | Zernio platform id | `twitter` |
47
+ | Zernio account id | [acc_x_...] |
48
+ | Format mix | [e.g., 60% text, 25% image, 15% thread] |
49
+ | Posting frequency | [e.g., 7/week] |
50
+ | Best posting times (local) | [e.g., 08:00, 12:00, 17:00] |
51
+ | Primary theme pillars | [pillar names] |
52
+ | Caption length target | [e.g., 200–240 chars] |
53
+ | Hashtag count | [1–2] |
54
+ | Content mix rationale | [One paragraph] |
55
+
56
+ ---
57
+
58
+ ## Cross-Platform Orchestration
59
+
60
+ | Rule | Value |
61
+ |---|---|
62
+ | Minimum gap between simultaneous posts | 30 minutes |
63
+ | Collision check | Run against `GET /api/v1/posts?status=scheduled` before submission |
64
+ | Queue in use | [queue name or `none`] |
65
+ | Default timezone | [IANA tz] |
66
+
67
+ ---
68
+
69
+ ## Queue Coverage (if applicable)
70
+
71
+ | Queue name | Platforms covered | Slots per week |
72
+ |---|---|---|
73
+ | [weekly-evergreen] | [twitter, linkedin] | [3] |
74
+ | [daily-visual] | [instagram] | [5] |
75
+
76
+ If queues are used, posts scheduled into a queue omit `scheduledFor` from the Zernio body and include `queueId` — see `docs/posts-and-queues-layer.md`.
77
+
78
+ ---
79
+
80
+ ## Go-Live Checklist
81
+
82
+ - [ ] Every platform in this plan is connected on the Zernio profile
83
+ - [ ] Every `accountId` is a real Zernio id (live mode) or a documented placeholder (agent-only)
84
+ - [ ] Posting windows cross-checked against existing scheduled posts
85
+ - [ ] Hashtag and caption rules match `docs/ai-caption-layer.md`
86
+ - [ ] Client approved the plan before any write requests are issued
@@ -0,0 +1,92 @@
1
+ # Scheduling Manifest — [Client Name] · [Project Name]
2
+
3
+ **Kit:** `growthub-zernio-social-v1`
4
+ **Generated:** [YYYY-MM-DD]
5
+ **Mode:** [api-live | agent-only | hybrid]
6
+ **Version:** `v1`
7
+
8
+ ---
9
+
10
+ ## Purpose
11
+
12
+ This file documents the Zernio-shaped scheduling manifest for this campaign. The machine-readable companion is `scheduling-manifest.json` in the same folder — the operator writes that file alongside this Markdown record.
13
+
14
+ Manifest shape is fully specified in `docs/posts-and-queues-layer.md`. Every post entry is a valid `POST /api/v1/posts` body (minus the two bookkeeping fields `clientPostId` and `status`).
15
+
16
+ ---
17
+
18
+ ## Manifest Header
19
+
20
+ | Field | Value |
21
+ |---|---|
22
+ | `version` | `1.0` |
23
+ | `profileId` | [prof_... or `placeholder`] |
24
+ | `timezone` | [IANA tz, e.g., `America/New_York`] |
25
+ | `dryRun` | [true in agent-only mode, false otherwise] |
26
+ | `generatedAt` | [ISO 8601 with tz offset] |
27
+ | Post count | [N entries] |
28
+
29
+ ---
30
+
31
+ ## Post Entries (reference table)
32
+
33
+ | clientPostId | scheduledFor | platforms (count) | media (count) | status |
34
+ |---|---|---|---|---|
35
+ | `urban-cycle-20260501-001` | 2026-05-01T09:00:00-04:00 | 2 | 1 | pending |
36
+ | `urban-cycle-20260501-002` | 2026-05-01T12:30:00-04:00 | 1 | 0 | pending |
37
+
38
+ Full JSON lives in `scheduling-manifest.json` beside this file.
39
+
40
+ ---
41
+
42
+ ## Reference JSON Block
43
+
44
+ ```json
45
+ {
46
+ "zernioSchedulingManifest": {
47
+ "version": "1.0",
48
+ "profileId": "prof_abc123",
49
+ "timezone": "America/New_York",
50
+ "dryRun": false,
51
+ "generatedAt": "2026-04-15T14:30:00-04:00",
52
+ "posts": [
53
+ {
54
+ "clientPostId": "urban-cycle-20260501-001",
55
+ "content": "Launch day — shipping our spring gravel lineup. Ride it today →",
56
+ "scheduledFor": "2026-05-01T09:00:00-04:00",
57
+ "timezone": "America/New_York",
58
+ "media": [{ "mediaId": "med_HERO_01" }],
59
+ "platforms": [
60
+ { "platform": "instagram", "accountId": "acc_ig_UrbanCycle" },
61
+ { "platform": "twitter", "accountId": "acc_x_UrbanCycle" }
62
+ ],
63
+ "status": "pending"
64
+ }
65
+ ]
66
+ }
67
+ }
68
+ ```
69
+
70
+ ---
71
+
72
+ ## Submission Sequence
73
+
74
+ 1. Upload every referenced media asset via `POST /api/v1/media`, capturing each returned `mediaId`
75
+ 2. Replace placeholder media IDs in `scheduling-manifest.json`
76
+ 3. Iterate `posts[]`, issuing one `POST /api/v1/posts` per entry with `Idempotency-Key: <clientPostId>`
77
+ 4. Update each entry's `status` from `pending` to `scheduled` on 2xx, or `failed` on non-2xx with the Zernio `requestId`
78
+ 5. If the campaign uses a recurring queue, submit `POST /api/v1/queues` first so its id can be referenced by queued post entries
79
+
80
+ ---
81
+
82
+ ## Validation Before Submit
83
+
84
+ - [ ] Every post in the manifest also exists in the Content Calendar
85
+ - [ ] Every caption is the selected variant from the Caption Copy Deck
86
+ - [ ] Every platform exists in `docs/platform-coverage.md`
87
+ - [ ] Every `scheduledFor` is ISO 8601 with timezone offset
88
+ - [ ] Every `clientPostId` follows `<client-slug>-<YYYYMMDD>-<sequence>`
89
+ - [ ] In api-live mode, every `accountId` is confirmed via `GET /api/v1/accounts`
90
+ - [ ] `dryRun` matches the execution mode declared in the Social Campaign Brief
91
+
92
+ Failure on any of these blocks submission.
@@ -0,0 +1,102 @@
1
+ # Social Campaign Brief — [Client Name] · [Project Name]
2
+
3
+ **Kit:** `growthub-zernio-social-v1`
4
+ **Generated:** [YYYY-MM-DD]
5
+ **Mode:** [api-live | agent-only | hybrid]
6
+ **Version:** `v1`
7
+
8
+ ---
9
+
10
+ ## Project Overview
11
+
12
+ | Field | Value |
13
+ |---|---|
14
+ | Client | [Client Name] |
15
+ | Project | [Project Name] |
16
+ | Campaign window | [YYYY-MM-DD] → [YYYY-MM-DD] |
17
+ | Zernio profile id | [prof_...] or `placeholder` in agent-only mode |
18
+ | Posting timezone | [IANA tz name, e.g., America/New_York] |
19
+
20
+ ---
21
+
22
+ ## Campaign Objective
23
+
24
+ **Primary:** [brand awareness | lead generation | engagement | product launch | community growth]
25
+
26
+ **Why this objective:** [One paragraph grounded in the brand kit's current stage and retainer context.]
27
+
28
+ ---
29
+
30
+ ## Target Platforms
31
+
32
+ | Platform | Zernio ID | Account | Rationale |
33
+ |---|---|---|---|
34
+ | [Instagram] | `instagram` | [@handle or accountId] | [Why selected — demographics, format fit, client capacity] |
35
+ | [LinkedIn] | `linkedin` | [company page or accountId] | [Why selected] |
36
+ | [X/Twitter] | `twitter` | [@handle] | [Why selected] |
37
+
38
+ Max 5 platforms unless the brand kit documents the team capacity to support more.
39
+
40
+ ---
41
+
42
+ ## Audience Profile
43
+
44
+ ### Primary
45
+
46
+ | Attribute | Value |
47
+ |---|---|
48
+ | Age range | [range] |
49
+ | Geography | [regions or countries] |
50
+ | Interests | [top 3–5] |
51
+ | Pain points | [top 3] |
52
+ | Content preferences | [formats + topics] |
53
+
54
+ ### Secondary
55
+
56
+ | Attribute | Value |
57
+ |---|---|
58
+ | Age range | [range] |
59
+ | Platforms | [where they are concentrated] |
60
+ | Interests | [top 2–3] |
61
+
62
+ ---
63
+
64
+ ## KPI Targets
65
+
66
+ | KPI | Metric | Target | Timeline |
67
+ |---|---|---|---|
68
+ | [Brand awareness] | [Impressions] | [50,000/month] | [Month 1] |
69
+ | [Engagement] | [Engagement rate] | [≥3%] | [Rolling] |
70
+ | [Lead generation] | [Link clicks] | [200/month] | [Month 1] |
71
+
72
+ ---
73
+
74
+ ## Content Theme Pillars
75
+
76
+ | Pillar | Description | % of calendar | Primary platforms |
77
+ |---|---|---|---|
78
+ | [Pillar 1] | [One-sentence definition] | [40%] | [platforms] |
79
+ | [Pillar 2] | [Definition] | [30%] | [platforms] |
80
+ | [Pillar 3] | [Definition] | [20%] | [platforms] |
81
+ | [Pillar 4] | [Definition] | [10%] | [platforms] |
82
+
83
+ ---
84
+
85
+ ## Brand Voice Summary
86
+
87
+ | Attribute | Spec |
88
+ |---|---|
89
+ | Tone | [From brand kit] |
90
+ | Words to use | [Top 5–8] |
91
+ | Words to avoid | [Top 5–8] |
92
+ | Emoji rule | [Per platform] |
93
+ | CTA style | [From brand kit] |
94
+
95
+ ---
96
+
97
+ ## Execution Notes
98
+
99
+ - Caption variants: 3 per post (A direct, B narrative, C question/hook)
100
+ - Every write request to Zernio uses `Idempotency-Key = clientPostId`
101
+ - `dryRun` is `[true/false]` based on execution mode
102
+ - Manifest submission order: media uploads → posts → (optional) queue creation
@@ -0,0 +1,85 @@
1
+ # Validation Checklist — growthub-zernio-social-v1
2
+
3
+ **Run through this checklist before starting every operator session and before delivering any artifact package.**
4
+
5
+ ---
6
+
7
+ ## Pre-Session Checklist
8
+
9
+ ### Environment Gate
10
+
11
+ - [ ] Node.js 18+ is installed (`node --version` returns 18+)
12
+ - [ ] `curl` is installed (used for Zernio healthchecks)
13
+ - [ ] Git is installed (`git --version`)
14
+
15
+ ### Api-Live Mode (skip if agent-only)
16
+
17
+ - [ ] `ZERNIO_API_KEY` is set in `.env` and matches `sk_` + 64 hex format
18
+ - [ ] `ZERNIO_API_URL` is set (default `https://zernio.com/api/v1`)
19
+ - [ ] `GET /api/v1/profiles` returns 200 with the API key
20
+ - [ ] `ZERNIO_PROFILE_ID` is set and exists on the account
21
+ - [ ] At least one platform account is connected on the profile (`GET /api/v1/accounts`)
22
+ - [ ] API key scope is `read-write` (required for scheduling)
23
+
24
+ ### Agent-Only Mode (skip if api-live)
25
+
26
+ - [ ] Mode is confirmed with the user and documented as `agent-only` at the top of all outputs
27
+ - [ ] Scheduling manifests are marked as `"dryRun": true` in the manifest header
28
+ - [ ] Every `platforms[].accountId` is flagged as placeholder tagged with the account handle
29
+
30
+ ### Context
31
+
32
+ - [ ] Brand kit exists for the active client (`brands/<client-slug>/brand-kit.md`)
33
+ - [ ] Campaign objective is confirmed (one of: brand awareness / lead generation / engagement / product launch / community growth)
34
+ - [ ] Target platforms are confirmed and in the supported list (`docs/platform-coverage.md`)
35
+ - [ ] Campaign timeframe and posting cadence are confirmed
36
+
37
+ ---
38
+
39
+ ## Pre-Delivery Checklist
40
+
41
+ ### Content Calendar
42
+
43
+ - [ ] All calendar rows have dates within the campaign window
44
+ - [ ] All platform slugs match `docs/platform-coverage.md`
45
+ - [ ] All post types are valid for their target platform
46
+ - [ ] Every row has a non-empty CTA
47
+ - [ ] Media asset notes are present for all image/video/carousel posts
48
+
49
+ ### Caption Copy Deck
50
+
51
+ - [ ] All 3 variants (A/B/C) are present for every post entry
52
+ - [ ] All captions respect platform character limits
53
+ - [ ] Hashtag counts are within platform-recommended ranges
54
+ - [ ] No placeholder text remains (no `[INSERT CAPTION HERE]` style fragments)
55
+
56
+ ### Scheduling Manifest
57
+
58
+ - [ ] Shape matches `POST /api/v1/posts` body expectations (see `docs/posts-and-queues-layer.md`)
59
+ - [ ] All `scheduledFor` timestamps are ISO 8601 with explicit timezone offset
60
+ - [ ] All `clientPostId` values follow the naming convention
61
+ - [ ] `profileId` is present (or the manifest is `"dryRun": true`)
62
+ - [ ] `platforms[].platform` values all exist in `docs/platform-coverage.md`
63
+ - [ ] Every post in the manifest has a corresponding entry in the ContentCalendar
64
+
65
+ ### Output Files
66
+
67
+ - [ ] All files follow the naming convention (`ClientSlug_OutputType_v<N>_<YYYYMMDD>.md`)
68
+ - [ ] All files are saved to `output/<client-slug>/<project-slug>/`
69
+ - [ ] Deliverable is logged in the brand kit DELIVERABLES LOG
70
+ - [ ] No API keys, tokens, or credentials appear in any output file
71
+ - [ ] No partial Zernio request responses with raw auth headers are included
72
+
73
+ ---
74
+
75
+ ## Kit Integrity Checklist (run after kit changes)
76
+
77
+ - [ ] `kit.json` is valid JSON with `schemaVersion: 2`
78
+ - [ ] All paths in `frozenAssetPaths` exist on disk
79
+ - [ ] All paths in `outputStandard.requiredPaths` exist on disk
80
+ - [ ] Bundle manifest `bundles/growthub-zernio-social-v1.json` exists and matches kit.json
81
+ - [ ] `bundle.kitId` in bundle manifest matches `kit.id` in kit.json
82
+ - [ ] `bundle.workerId` in bundle manifest matches `entrypoint.workerId` in kit.json
83
+ - [ ] All paths in `requiredFrozenAssets` in bundle manifest exist on disk
84
+ - [ ] `node scripts/check-worker-kits.mjs` passes
85
+ - [ ] `bash scripts/check-custom-workspace-kernel.sh` passes