@growthub/cli 0.9.10 → 0.9.12

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 (32) hide show
  1. package/README.md +1 -1
  2. package/assets/worker-kits/creative-strategist-v1/kit.json +5 -2
  3. package/assets/worker-kits/growthub-agency-portal-starter-v1/kit.json +4 -1
  4. package/assets/worker-kits/growthub-ai-website-cloner-v1/kit.json +6 -3
  5. package/assets/worker-kits/growthub-creative-video-pipeline-v1/kit.json +4 -1
  6. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/README.md +4 -4
  7. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/api/workspace/integration-entities/route.js +50 -0
  8. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/api/workspace/route.js +1 -1
  9. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/data-model/page.jsx +389 -0
  10. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/globals.css +362 -15
  11. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/page.jsx +5 -2
  12. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/settings/integrations/page.jsx +5 -5
  13. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/workspace-builder.jsx +625 -56
  14. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/integrations/growthub-connection-normalizer.js +12 -16
  15. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/integrations/index.js +61 -11
  16. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/domain/integrations.js +31 -1
  17. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-config.js +3 -1
  18. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-data-model.js +433 -0
  19. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-schema.js +112 -14
  20. package/assets/worker-kits/growthub-custom-workspace-starter-v1/kit.json +5 -2
  21. package/assets/worker-kits/growthub-email-marketing-v1/kit.json +5 -2
  22. package/assets/worker-kits/growthub-geo-seo-v1/kit.json +5 -2
  23. package/assets/worker-kits/growthub-hyperframes-studio-v1/kit.json +5 -2
  24. package/assets/worker-kits/growthub-marketing-skills-v1/kit.json +6 -3
  25. package/assets/worker-kits/growthub-open-higgsfield-studio-v1/kit.json +5 -2
  26. package/assets/worker-kits/growthub-open-montage-studio-v1/kit.json +6 -3
  27. package/assets/worker-kits/growthub-postiz-social-v1/kit.json +5 -2
  28. package/assets/worker-kits/growthub-twenty-crm-v1/kit.json +6 -3
  29. package/assets/worker-kits/growthub-video-use-studio-v1/kit.json +5 -2
  30. package/assets/worker-kits/growthub-zernio-social-v1/kit.json +5 -2
  31. package/dist/index.js +1750 -433
  32. package/package.json +1 -1
@@ -12,11 +12,12 @@
12
12
  * - `widgetTypes` palette of allowed widget kinds (label/icon)
13
13
  * - `canvas` active canvas: layout, single-tab `widgets[]`, or
14
14
  * multi-tab `tabs[]` + `activeTabId`, plus `bindings`
15
+ * - `dataModel` governed manual data objects, never dashboard widgets
15
16
  *
16
17
  * Other top-level fields (`id`, `name`, `description`, `capabilities`,
17
18
  * `branding`, `pipelines`, `integrations`, `provenance`) are preserved
18
19
  * round-trip but cannot be mutated through PATCH. The validator rejects
19
- * unknown fields inside the three allowlisted sections.
20
+ * unknown fields inside the allowlisted sections.
20
21
  *
21
22
  * Canonical canvas shape (mutually exclusive — never both at once):
22
23
  *
@@ -39,13 +40,15 @@
39
40
  const GRID_COLUMNS = 12;
40
41
  const GRID_ROWS = 16;
41
42
  const KNOWN_WIDGET_KINDS = ["chart", "view", "iframe", "rich-text"];
42
- const KNOWN_FIELDS = ["dashboards", "widgetTypes", "canvas"];
43
+ const KNOWN_FIELDS = ["dashboards", "widgetTypes", "canvas", "dataModel"];
43
44
  const KNOWN_DATA_BINDING_MODES = ["manual", "json", "csv", "integration"];
44
45
  const KNOWN_CHART_TYPES = ["bar-vertical", "bar-horizontal", "line", "pie", "sum", "gauge"];
45
46
  const KNOWN_FILTER_OPERATORS = ["eq", "ne", "contains", "gt", "lt", "isEmpty", "isNotEmpty"];
46
47
  const KNOWN_FILTER_CONJUNCTIONS = ["and", "or"];
47
48
  const KNOWN_SORT_DIRECTIONS = ["asc", "desc"];
48
49
  const KNOWN_AGGREGATIONS = ["sum", "avg", "count", "min", "max"];
50
+
51
+ const NORMALIZED_OBJECT_FIELD_IDS = ["id", "label", "secondaryLabel", "entityType", "provider", "lane", "status"];
49
52
  const WORKSPACE_TEMPLATE_KIND = "growthub-workspace-template";
50
53
  const WORKSPACE_TEMPLATE_VERSION = 1;
51
54
  const WORKSPACE_TEMPLATE_SOURCE = "growthub-custom-workspace-starter-v1";
@@ -141,17 +144,35 @@ const WIDGET_SCHEMA_CONTRACTS = {
141
144
  source: "string",
142
145
  rows: "manual record[] optional",
143
146
  json: "JSON string optional",
144
- csv: "CSV string optional"
147
+ csv: "CSV string optional",
148
+ sourceType: "managed-integrations | custom-api-webhooks optional",
149
+ sourceAuthority: "string optional — adapter authority label, never a secret",
150
+ endpointRef: "string optional — stable custom API/webhook reference, never a token",
151
+ integrationId: "string optional (when mode === 'integration')",
152
+ lane: "string optional (when mode === 'integration')",
153
+ entityId: "string optional — stable source object ID (never a token or credential)",
154
+ entityType: "string optional — adapter-provided object type",
155
+ entityLabel: "string optional — display-only resolved label, not authoritative"
156
+ },
157
+ NormalizedIntegrationEntity: {
158
+ id: "non-empty string — stable source object ID",
159
+ label: "non-empty string — primary display name",
160
+ secondaryLabel: "string optional — muted subtitle (ID, domain, or type hint)",
161
+ entityType: "string optional — adapter-provided object type",
162
+ provider: "string optional — adapter/provider slug",
163
+ lane: "string optional — adapter-provided lane",
164
+ status: "string optional — adapter-provided status",
165
+ metadata: "record optional — additional adapter metadata"
145
166
  }
146
167
  };
147
168
 
148
169
  const SAMPLE_VIEW_ROWS = [
149
- { Name: "CMWL Direct", "Domain Name": "centerformedica" },
150
- { Name: "Medi-Weightloss", "Domain Name": "mediweightloss.com" },
151
- { Name: "Optima Tyler", "Domain Name": "optimatyler.com" },
152
- { Name: "Balanced Hormone He...", "Domain Name": "balancedhormor" },
153
- { Name: "Jolie Aesthetics RVA", "Domain Name": "jolie-aesthetics.c" },
154
- { Name: "Livea Centers", "Domain Name": "livea.com" }
170
+ { Name: "Example Company A", "Domain Name": "example-a.test" },
171
+ { Name: "Example Company B", "Domain Name": "example-b.test" },
172
+ { Name: "Example Company C", "Domain Name": "example-c.test" },
173
+ { Name: "Example Company D", "Domain Name": "example-d.test" },
174
+ { Name: "Example Company E", "Domain Name": "example-e.test" },
175
+ { Name: "Example Company F", "Domain Name": "example-f.test" }
155
176
  ];
156
177
 
157
178
  const SAMPLE_DATA_BINDINGS = {
@@ -182,11 +203,11 @@ function defaultConfigFor(kind) {
182
203
  return { values: [58, 36, 72, 48, 64], binding: SAMPLE_DATA_BINDINGS.reportingJson };
183
204
  case "view":
184
205
  return {
185
- source: "Companies",
206
+ source: "",
186
207
  layout: "Table",
187
- columns: ["Name", "Domain Name"],
188
- rows: SAMPLE_VIEW_ROWS,
189
- binding: SAMPLE_DATA_BINDINGS.companiesManual
208
+ columns: [],
209
+ rows: [],
210
+ binding: { mode: "manual", source: "Static rows", rows: [] }
190
211
  };
191
212
  case "iframe":
192
213
  return { url: "" };
@@ -227,7 +248,13 @@ const DASHBOARD_TEMPLATES = [
227
248
  dashboard: { name: "Client Portal", status: "draft" },
228
249
  widgets: [
229
250
  createWidget("rich-text", "Client Summary", { x: 0, y: 0, w: 4, h: 4 }, { text: "Current client priorities, owner notes, and next milestone.", binding: { mode: "manual", source: "Manual text", rows: [] } }),
230
- createWidget("view", "Companies", { x: 4, y: 0, w: 5, h: 5 }),
251
+ createWidget("view", "Companies", { x: 4, y: 0, w: 5, h: 5 }, {
252
+ source: "Companies",
253
+ layout: "Table",
254
+ columns: ["Name", "Domain Name"],
255
+ rows: SAMPLE_VIEW_ROWS,
256
+ binding: SAMPLE_DATA_BINDINGS.companiesManual
257
+ }),
231
258
  createWidget("iframe", "Client Portal Embed", { x: 9, y: 0, w: 3, h: 5 }, { url: "" }),
232
259
  createWidget("chart", "Delivery Health", { x: 0, y: 4, w: 4, h: 4 }, { values: [72, 64, 81, 58, 76], binding: SAMPLE_DATA_BINDINGS.reportingJson })
233
260
  ]
@@ -365,6 +392,14 @@ function validateStaticDataBinding(binding, path, errors) {
365
392
  if (!KNOWN_DATA_BINDING_MODES.includes(binding.mode)) {
366
393
  errors.push(`${path}.mode must be one of ${KNOWN_DATA_BINDING_MODES.join(", ")}`);
367
394
  }
395
+ if (binding.mode === "integration") {
396
+ if (typeof binding.integrationId !== "string" || !binding.integrationId.trim()) {
397
+ errors.push(`${path}.integrationId is required when mode is integration`);
398
+ }
399
+ if (typeof binding.lane !== "string" || !binding.lane.trim()) {
400
+ errors.push(`${path}.lane is required when mode is integration`);
401
+ }
402
+ }
368
403
  if (binding.source !== undefined && typeof binding.source !== "string") {
369
404
  errors.push(`${path}.source must be a string`);
370
405
  }
@@ -377,12 +412,33 @@ function validateStaticDataBinding(binding, path, errors) {
377
412
  if (binding.csv !== undefined && typeof binding.csv !== "string") {
378
413
  errors.push(`${path}.csv must be a string`);
379
414
  }
415
+ if (binding.sourceType !== undefined && typeof binding.sourceType !== "string") {
416
+ errors.push(`${path}.sourceType must be a string`);
417
+ }
418
+ if (binding.sourceAuthority !== undefined && typeof binding.sourceAuthority !== "string") {
419
+ errors.push(`${path}.sourceAuthority must be a string`);
420
+ }
421
+ if (binding.endpointRef !== undefined && typeof binding.endpointRef !== "string") {
422
+ errors.push(`${path}.endpointRef must be a string`);
423
+ }
424
+ if (binding.objectId !== undefined && typeof binding.objectId !== "string") {
425
+ errors.push(`${path}.objectId must be a string`);
426
+ }
380
427
  if (binding.integrationId !== undefined && typeof binding.integrationId !== "string") {
381
428
  errors.push(`${path}.integrationId must be a string`);
382
429
  }
383
430
  if (binding.lane !== undefined && typeof binding.lane !== "string") {
384
431
  errors.push(`${path}.lane must be a string`);
385
432
  }
433
+ if (binding.entityId !== undefined && typeof binding.entityId !== "string") {
434
+ errors.push(`${path}.entityId must be a string`);
435
+ }
436
+ if (binding.entityType !== undefined && typeof binding.entityType !== "string") {
437
+ errors.push(`${path}.entityType must be a string`);
438
+ }
439
+ if (binding.entityLabel !== undefined && typeof binding.entityLabel !== "string") {
440
+ errors.push(`${path}.entityLabel must be a string`);
441
+ }
386
442
  }
387
443
 
388
444
  function validateFieldSettings(fieldSettings, path, errors) {
@@ -722,6 +778,46 @@ function validateCanvasConfig(canvas, errors) {
722
778
  }
723
779
  }
724
780
 
781
+ function validateDataModelConfig(dataModel, errors) {
782
+ if (dataModel === undefined) return;
783
+ if (!isPlainObject(dataModel)) {
784
+ errors.push("dataModel must be a plain object");
785
+ return;
786
+ }
787
+ if (dataModel.objects === undefined) return;
788
+ if (!Array.isArray(dataModel.objects)) {
789
+ errors.push("dataModel.objects must be an array");
790
+ return;
791
+ }
792
+ const ids = new Set();
793
+ dataModel.objects.forEach((object, index) => {
794
+ const prefix = `dataModel.objects[${index}]`;
795
+ if (!isPlainObject(object)) {
796
+ errors.push(`${prefix} must be an object`);
797
+ return;
798
+ }
799
+ if (typeof object.id !== "string" || !object.id.trim()) {
800
+ errors.push(`${prefix}.id must be a non-empty string`);
801
+ } else if (ids.has(object.id)) {
802
+ errors.push(`${prefix}.id duplicates an earlier object id`);
803
+ } else {
804
+ ids.add(object.id);
805
+ }
806
+ if (typeof object.label !== "string" || !object.label.trim()) errors.push(`${prefix}.label must be a non-empty string`);
807
+ if (object.source !== undefined && typeof object.source !== "string") errors.push(`${prefix}.source must be a string`);
808
+ validateStringArray(object.columns, `${prefix}.columns`, errors);
809
+ if (!Array.isArray(object.rows)) {
810
+ errors.push(`${prefix}.rows must be an array`);
811
+ } else {
812
+ object.rows.forEach((row, rowIndex) => {
813
+ if (!isPlainObject(row)) errors.push(`${prefix}.rows[${rowIndex}] must be a plain object`);
814
+ });
815
+ }
816
+ validateStaticDataBinding(object.binding, `${prefix}.binding`, errors);
817
+ validateFieldSettings(object.fieldSettings, `${prefix}.fieldSettings`, errors);
818
+ });
819
+ }
820
+
725
821
  function validateTemplateWidgetArray(widgets, contextPath, errors) {
726
822
  if (!Array.isArray(widgets)) {
727
823
  errors.push(`${contextPath} must be an array`);
@@ -950,6 +1046,7 @@ function validateWorkspaceConfig(nextConfig) {
950
1046
  if (nextConfig.dashboards !== undefined) validateDashboardArray(nextConfig.dashboards, errors);
951
1047
  if (nextConfig.widgetTypes !== undefined && !Array.isArray(nextConfig.widgetTypes)) errors.push("widgetTypes must be an array");
952
1048
  if (nextConfig.canvas !== undefined) validateCanvasConfig(nextConfig.canvas, errors);
1049
+ if (nextConfig.dataModel !== undefined) validateDataModelConfig(nextConfig.dataModel, errors);
953
1050
  if (errors.length) {
954
1051
  const error = new Error(`invalid workspace config: ${errors.join("; ")}`);
955
1052
  error.code = "INVALID_WORKSPACE_CONFIG";
@@ -970,6 +1067,7 @@ export {
970
1067
  KNOWN_FILTER_OPERATORS,
971
1068
  KNOWN_SORT_DIRECTIONS,
972
1069
  KNOWN_WIDGET_KINDS,
1070
+ NORMALIZED_OBJECT_FIELD_IDS,
973
1071
  SAMPLE_DATA_BINDINGS,
974
1072
  SAMPLE_VIEW_ROWS,
975
1073
  WIDGET_SCHEMA_CONTRACTS,
@@ -101,7 +101,7 @@
101
101
  },
102
102
  "outputStandard": {
103
103
  "type": "working-directory",
104
- "description": "Fork the starter kit directly with `growthub starter init` the CLI materializes this bundled asset tree to the user's chosen path, auto-registers the destination as a kit-fork (canonical state under `<forkPath>/.growthub-fork/fork.json`), optionally binds it to a GitHub remote, and hands off the forkId. Every downstream customization flows through the v1 Self-Healing Fork Sync Agent.",
104
+ "description": "Fork the starter kit directly with `growthub starter init` \u2014 the CLI materializes this bundled asset tree to the user's chosen path, auto-registers the destination as a kit-fork (canonical state under `<forkPath>/.growthub-fork/fork.json`), optionally binds it to a GitHub remote, and hands off the forkId. Every downstream customization flows through the v1 Self-Healing Fork Sync Agent.",
105
105
  "requiredPaths": [
106
106
  "QUICKSTART.md",
107
107
  "kit.json",
@@ -159,5 +159,8 @@
159
159
  "provenance": {
160
160
  "sourceRepo": "growthub-local",
161
161
  "frozenAt": "2026-04-16T00:00:00.000Z"
162
- }
162
+ },
163
+ "workspaceVisibility": "official",
164
+ "workspaceCompatible": true,
165
+ "workspaceCategory": "workspace-starter"
163
166
  }
@@ -3,7 +3,7 @@
3
3
  "kit": {
4
4
  "id": "growthub-email-marketing-v1",
5
5
  "version": "1.0.0",
6
- "name": "Growthub Agent Worker Kit Email Marketing Strategist",
6
+ "name": "Growthub Agent Worker Kit \u2014 Email Marketing Strategist",
7
7
  "description": "Self-contained local execution environment for Growthub-focused email marketing. Produces brand-aware email campaigns, nurture sequences, broadcasts, and content-pillar-driven campaign plans with pluggable email platform integration.",
8
8
  "type": "worker",
9
9
  "visibility": "public-open-source",
@@ -112,5 +112,8 @@
112
112
  "provenance": {
113
113
  "sourceRepo": "growthub-local",
114
114
  "frozenAt": "2026-04-10T00:00:00.000Z"
115
- }
115
+ },
116
+ "workspaceVisibility": "addon",
117
+ "workspaceCompatible": true,
118
+ "workspaceCategory": "email-marketing"
116
119
  }
@@ -3,7 +3,7 @@
3
3
  "kit": {
4
4
  "id": "growthub-geo-seo-v1",
5
5
  "version": "1.0.0",
6
- "name": "Growthub Agent Worker Kit GEO SEO Studio",
6
+ "name": "Growthub Agent Worker Kit \u2014 GEO SEO Studio",
7
7
  "description": "Self-contained local execution environment for GEO + SEO auditing using geo-seo-claude. Produces AI search visibility audits, citability scores, crawler access reports, brand mention scans, remediation roadmaps, and client-ready PDF deliverables via 14 specialized commands and 5 parallel subagents.",
8
8
  "type": "worker",
9
9
  "visibility": "public-open-source",
@@ -116,5 +116,8 @@
116
116
  "provenance": {
117
117
  "sourceRepo": "growthub-local",
118
118
  "frozenAt": "2026-04-14T00:00:00.000Z"
119
- }
119
+ },
120
+ "workspaceVisibility": "addon",
121
+ "workspaceCompatible": false,
122
+ "workspaceCategory": "studio"
120
123
  }
@@ -3,7 +3,7 @@
3
3
  "kit": {
4
4
  "id": "growthub-hyperframes-studio-v1",
5
5
  "version": "1.0.0",
6
- "name": "Growthub Agent Worker Kit Hyperframes Studio",
6
+ "name": "Growthub Agent Worker Kit \u2014 Hyperframes Studio",
7
7
  "description": "Self-contained local execution environment for Hyperframes video production. Produces implementation-ready video briefs, composition specs, render plans, and QA handoff artifacts for HTML-native rendering workflows.",
8
8
  "type": "worker",
9
9
  "visibility": "public-open-source",
@@ -105,5 +105,8 @@
105
105
  "provenance": {
106
106
  "sourceRepo": "growthub-local",
107
107
  "frozenAt": "2026-04-17T00:00:00.000Z"
108
- }
108
+ },
109
+ "workspaceVisibility": "addon",
110
+ "workspaceCompatible": false,
111
+ "workspaceCategory": "studio"
109
112
  }
@@ -3,8 +3,8 @@
3
3
  "kit": {
4
4
  "id": "growthub-marketing-skills-v1",
5
5
  "version": "1.0.0",
6
- "name": "Growthub Agent Worker Kit Marketing Operator",
7
- "description": "Self-contained marketing execution environment wrapping the open-source marketingskills library (coreyhaines31/marketingskills). Provides structured marketing workflows for CRO, SEO, content strategy, email sequences, paid ads, and growth grounded in product-marketing context and brand voice. Skills are one dimension of the kit; the operator workflow, brand kit, templates, and output standards form the complete environment.",
6
+ "name": "Growthub Agent Worker Kit \u2014 Marketing Operator",
7
+ "description": "Self-contained marketing execution environment wrapping the open-source marketingskills library (coreyhaines31/marketingskills). Provides structured marketing workflows for CRO, SEO, content strategy, email sequences, paid ads, and growth \u2014 grounded in product-marketing context and brand voice. Skills are one dimension of the kit; the operator workflow, brand kit, templates, and output standards form the complete environment.",
8
8
  "type": "worker",
9
9
  "visibility": "public-open-source",
10
10
  "sourceRepo": "growthub-local",
@@ -101,5 +101,8 @@
101
101
  "sourceRepo": "growthub-local",
102
102
  "upstream": "https://github.com/coreyhaines31/marketingskills",
103
103
  "frozenAt": "2026-04-15T00:00:00.000Z"
104
- }
104
+ },
105
+ "workspaceVisibility": "addon",
106
+ "workspaceCompatible": true,
107
+ "workspaceCategory": "marketing-operator"
105
108
  }
@@ -3,7 +3,7 @@
3
3
  "kit": {
4
4
  "id": "growthub-open-higgsfield-studio-v1",
5
5
  "version": "1.0.0",
6
- "name": "Growthub Agent Worker Kit Open Higgsfield Studio",
6
+ "name": "Growthub Agent Worker Kit \u2014 Open Higgsfield Studio",
7
7
  "description": "Self-contained local execution environment for Open Higgsfield AI visual production. Produces implementation-ready visual briefs, prompt systems, shot plans, generation batches, model selections, and execution handoff artifacts for browser, desktop, and local fork workflows.",
8
8
  "type": "worker",
9
9
  "visibility": "public-open-source",
@@ -119,5 +119,8 @@
119
119
  "provenance": {
120
120
  "sourceRepo": "growthub-local",
121
121
  "frozenAt": "2026-04-10T00:00:00.000Z"
122
- }
122
+ },
123
+ "workspaceVisibility": "addon",
124
+ "workspaceCompatible": false,
125
+ "workspaceCategory": "studio"
123
126
  }
@@ -3,8 +3,8 @@
3
3
  "kit": {
4
4
  "id": "growthub-open-montage-studio-v1",
5
5
  "version": "1.0.0",
6
- "name": "Growthub Agent Worker Kit Open Montage Studio",
7
- "description": "Self-contained local execution environment for OpenMontage agentic video production. Produces end-to-end video content through 12 production pipelines from animated explainers and cinematic trailers to documentary montages and talking heads with direct CMS node integration for first-party video/image generation.",
6
+ "name": "Growthub Agent Worker Kit \u2014 Open Montage Studio",
7
+ "description": "Self-contained local execution environment for OpenMontage agentic video production. Produces end-to-end video content through 12 production pipelines \u2014 from animated explainers and cinematic trailers to documentary montages and talking heads \u2014 with direct CMS node integration for first-party video/image generation.",
8
8
  "type": "worker",
9
9
  "visibility": "public-open-source",
10
10
  "sourceRepo": "growthub-local",
@@ -115,5 +115,8 @@
115
115
  "provenance": {
116
116
  "sourceRepo": "growthub-local",
117
117
  "frozenAt": "2026-04-14T00:00:00.000Z"
118
- }
118
+ },
119
+ "workspaceVisibility": "addon",
120
+ "workspaceCompatible": false,
121
+ "workspaceCategory": "studio"
119
122
  }
@@ -3,7 +3,7 @@
3
3
  "kit": {
4
4
  "id": "growthub-postiz-social-v1",
5
5
  "version": "1.0.0",
6
- "name": "Growthub Agent Worker Kit Postiz Social Media Studio",
6
+ "name": "Growthub Agent Worker Kit \u2014 Postiz Social Media Studio",
7
7
  "description": "Self-contained local execution environment for Postiz, the open-source agentic social media scheduler. Produces implementation-ready social media campaigns, content calendars, multi-platform publishing plans, AI-assisted captions, and analytics briefings across 28+ platforms including Instagram, LinkedIn, TikTok, X/Twitter, YouTube, Pinterest, Reddit, Bluesky, and more.",
8
8
  "type": "worker",
9
9
  "visibility": "public-open-source",
@@ -112,5 +112,8 @@
112
112
  "provenance": {
113
113
  "sourceRepo": "growthub-local",
114
114
  "frozenAt": "2026-04-15T00:00:00.000Z"
115
- }
115
+ },
116
+ "workspaceVisibility": "addon",
117
+ "workspaceCompatible": false,
118
+ "workspaceCategory": "social-media"
116
119
  }
@@ -3,8 +3,8 @@
3
3
  "kit": {
4
4
  "id": "growthub-twenty-crm-v1",
5
5
  "version": "1.0.0",
6
- "name": "Growthub Agent Worker Kit Twenty CRM",
7
- "description": "Self-contained local execution environment for Twenty CRM the open-source Salesforce/Apollo alternative. Produces CRM setup plans, data model designs, lead enrichment pipelines, pipeline automation briefs, webhook integration specs, API query plans, and client-ready CRM playbooks for teams adopting Twenty as their growth stack foundation.",
6
+ "name": "Growthub Agent Worker Kit \u2014 Twenty CRM",
7
+ "description": "Self-contained local execution environment for Twenty CRM \u2014 the open-source Salesforce/Apollo alternative. Produces CRM setup plans, data model designs, lead enrichment pipelines, pipeline automation briefs, webhook integration specs, API query plans, and client-ready CRM playbooks for teams adopting Twenty as their growth stack foundation.",
8
8
  "type": "worker",
9
9
  "visibility": "public-open-source",
10
10
  "sourceRepo": "growthub-local",
@@ -116,5 +116,8 @@
116
116
  "provenance": {
117
117
  "sourceRepo": "growthub-local",
118
118
  "frozenAt": "2026-04-15T00:00:00.000Z"
119
- }
119
+ },
120
+ "workspaceVisibility": "addon",
121
+ "workspaceCompatible": false,
122
+ "workspaceCategory": "crm"
120
123
  }
@@ -3,7 +3,7 @@
3
3
  "kit": {
4
4
  "id": "growthub-video-use-studio-v1",
5
5
  "version": "1.0.0",
6
- "name": "Growthub Agent Worker Kit Video Use Studio",
6
+ "name": "Growthub Agent Worker Kit \u2014 Video Use Studio",
7
7
  "description": "Self-contained local execution environment for conversational video editing with browser-use/video-use. Produces implementation-ready video briefs, transcript-driven edit strategies, edit decision lists, render plans, and QA handoff artifacts for ElevenLabs Scribe + FFmpeg workflows.",
8
8
  "type": "worker",
9
9
  "visibility": "public-open-source",
@@ -108,5 +108,8 @@
108
108
  "provenance": {
109
109
  "sourceRepo": "growthub-local",
110
110
  "frozenAt": "2026-04-23T00:00:00.000Z"
111
- }
111
+ },
112
+ "workspaceVisibility": "addon",
113
+ "workspaceCompatible": false,
114
+ "workspaceCategory": "studio"
112
115
  }
@@ -3,7 +3,7 @@
3
3
  "kit": {
4
4
  "id": "growthub-zernio-social-v1",
5
5
  "version": "1.0.0",
6
- "name": "Growthub Agent Worker Kit Zernio Social Media Studio",
6
+ "name": "Growthub Agent Worker Kit \u2014 Zernio Social Media Studio",
7
7
  "description": "Self-contained local execution environment for Zernio, the unified social media REST API for developers and AI agents. Produces implementation-ready social media campaigns, content calendars, multi-platform publishing plans, AI-assisted captions, Zernio-shaped scheduling manifests, recurring queue definitions, inbox reply plans, and analytics briefings across 14 platforms including X/Twitter, Instagram, Facebook, LinkedIn, TikTok, YouTube, Pinterest, Reddit, Bluesky, Threads, Google Business, Telegram, Snapchat, and WhatsApp.",
8
8
  "type": "worker",
9
9
  "visibility": "public-open-source",
@@ -144,5 +144,8 @@
144
144
  "provenance": {
145
145
  "sourceRepo": "growthub-local",
146
146
  "frozenAt": "2026-04-15T00:00:00.000Z"
147
- }
147
+ },
148
+ "workspaceVisibility": "addon",
149
+ "workspaceCompatible": false,
150
+ "workspaceCategory": "social-media"
148
151
  }