@growthub/cli 0.9.10 → 0.9.11

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 (28) 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/globals.css +284 -15
  9. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/page.jsx +5 -2
  10. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/settings/integrations/page.jsx +4 -5
  11. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/workspace-builder.jsx +507 -34
  12. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/integrations/growthub-connection-normalizer.js +12 -16
  13. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/integrations/index.js +61 -11
  14. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/domain/integrations.js +31 -1
  15. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-schema.js +54 -7
  16. package/assets/worker-kits/growthub-custom-workspace-starter-v1/kit.json +5 -2
  17. package/assets/worker-kits/growthub-email-marketing-v1/kit.json +5 -2
  18. package/assets/worker-kits/growthub-geo-seo-v1/kit.json +5 -2
  19. package/assets/worker-kits/growthub-hyperframes-studio-v1/kit.json +5 -2
  20. package/assets/worker-kits/growthub-marketing-skills-v1/kit.json +6 -3
  21. package/assets/worker-kits/growthub-open-higgsfield-studio-v1/kit.json +5 -2
  22. package/assets/worker-kits/growthub-open-montage-studio-v1/kit.json +6 -3
  23. package/assets/worker-kits/growthub-postiz-social-v1/kit.json +5 -2
  24. package/assets/worker-kits/growthub-twenty-crm-v1/kit.json +6 -3
  25. package/assets/worker-kits/growthub-video-use-studio-v1/kit.json +5 -2
  26. package/assets/worker-kits/growthub-zernio-social-v1/kit.json +5 -2
  27. package/dist/index.js +1750 -433
  28. package/package.json +1 -1
@@ -1,15 +1,12 @@
1
- const providerAliases = {
2
- ga4: "google-analytics",
3
- google_analytics: "google-analytics",
4
- google_drive: "google-drive",
5
- ghl: "go-high-level",
6
- gohighlevel: "go-high-level",
7
- meta: "meta-ads",
8
- meta_ads: "meta-ads"
9
- };
10
1
  function normalizeProviderId(provider) {
11
- const normalized = provider.trim().toLowerCase().replaceAll("_", "-");
12
- return providerAliases[normalized] || normalized;
2
+ return provider.trim().toLowerCase().replaceAll("_", "-");
3
+ }
4
+ function providerLabel(provider) {
5
+ return normalizeProviderId(provider)
6
+ .split("-")
7
+ .filter(Boolean)
8
+ .map((part) => part.slice(0, 1).toUpperCase() + part.slice(1))
9
+ .join(" ");
13
10
  }
14
11
  function isHostedRecord(row) {
15
12
  return "provider" in row && ("ready" in row || "connectedAt" in row || "scopes" in row || "handle" in row);
@@ -41,10 +38,10 @@ function normalizeMcpAccount(account) {
41
38
  const isVerified = account.isVerified === true;
42
39
  const isConnected = isActive;
43
40
  return {
44
- id: provider,
45
- provider,
46
- label: account.connectionName || void 0,
47
- name: account.connectionName || void 0,
41
+ id: provider,
42
+ provider,
43
+ label: providerLabel(provider),
44
+ name: providerLabel(provider),
48
45
  authType: normalizeConnectionType(account.connectionType),
49
46
  status: isConnected ? "connected" : "needs-connection",
50
47
  isConnected,
@@ -54,7 +51,6 @@ function normalizeMcpAccount(account) {
54
51
  setupMode: "hosted-authority",
55
52
  connectionMetadata: {
56
53
  source: "growthub-mcp-accounts",
57
- accountId: account.id,
58
54
  connectionName: account.connectionName,
59
55
  connectionType: account.connectionType,
60
56
  isVerified,
@@ -1,6 +1,7 @@
1
1
  import { readAdapterConfig } from "@/lib/adapters/env";
2
2
  import {
3
- governedWorkspaceIntegrationCatalog
3
+ governedWorkspaceIntegrationCatalog,
4
+ normalizeIntegrationEntities
4
5
  } from "@/lib/domain/integrations";
5
6
  import {
6
7
  normalizeGrowthubBridgePayload
@@ -136,10 +137,10 @@ function mergeBridgeRows(rows) {
136
137
  });
137
138
  if (!row) return catalogItem;
138
139
  seenProviders.add(row.provider || row.id || catalogItem.provider);
139
- return {
140
- ...catalogItem,
141
- label: row.label || row.name || catalogItem.label,
142
- name: row.name || row.label || catalogItem.name,
140
+ return {
141
+ ...catalogItem,
142
+ label: catalogItem.label,
143
+ name: catalogItem.name,
143
144
  icon: row.icon || catalogItem.icon,
144
145
  description: row.description || catalogItem.description,
145
146
  category: row.category || catalogItem.category,
@@ -150,7 +151,6 @@ function mergeBridgeRows(rows) {
150
151
  setupMode: row.setupMode || catalogItem.setupMode,
151
152
  status: row.status || (row.isConnected || row.isActive ? "connected" : catalogItem.status),
152
153
  connectionId: row.connectionId,
153
- accountId: row.accountId,
154
154
  secretEnvName: row.secretEnvName,
155
155
  connectionMetadata: row.connectionMetadata || row.metadata,
156
156
  metadata: row.metadata || row.connectionMetadata
@@ -167,8 +167,9 @@ function mergeBridgeRows(rows) {
167
167
  function toDiscoveredIntegration(row) {
168
168
  const provider = row.provider || row.id || "unknown-provider";
169
169
  const label = row.label || row.name || provider;
170
- const isDataPipeline = ["windsor-ai", "google-sheets", "google-analytics", "shopify", "meta-ads"].includes(provider);
171
170
  const isConnected = row.isConnected ?? row.status === "connected";
171
+ const lane = typeof row.lane === "string" && row.lane ? row.lane : "workspace-integration";
172
+ const objectType = typeof row.objectType === "string" && row.objectType ? row.objectType : "mcp-connection";
172
173
  return {
173
174
  id: row.id || provider,
174
175
  label,
@@ -180,19 +181,68 @@ function toDiscoveredIntegration(row) {
180
181
  authType: row.authType || "oauth_first_party",
181
182
  isConnected,
182
183
  isActive: row.isActive ?? isConnected,
183
- lane: isDataPipeline ? "data-source" : "workspace-integration",
184
- objectType: isDataPipeline ? "data-pipeline" : "mcp-connection",
184
+ lane,
185
+ objectType,
185
186
  status: row.status || (isConnected ? "connected" : "needs-connection"),
186
187
  authPath: row.authPath || "growthub-mcp-bridge",
187
188
  setupMode: row.setupMode || "hosted-authority",
188
189
  connectionId: row.connectionId,
189
- accountId: row.accountId,
190
190
  secretEnvName: row.secretEnvName,
191
191
  connectionMetadata: row.connectionMetadata || row.metadata,
192
192
  metadata: row.metadata || row.connectionMetadata
193
193
  };
194
194
  }
195
+ /**
196
+ * Governed Integration Reference Binding — entity metadata resolution.
197
+ *
198
+ * Returns NormalizedIntegrationEntity[] for the requested integration when a
199
+ * server-side object resolver is available. Bridge connection discovery alone
200
+ * does not fabricate provider objects.
201
+ *
202
+ * Authority invariant: this function runs server-side only (API route).
203
+ * The browser NEVER calls provider APIs, holds tokens, or resolves entities.
204
+ */
205
+ async function listEntityMetadataForIntegration(integrationId) {
206
+ if (!integrationId) return [];
207
+ const config = readAdapterConfig();
208
+
209
+ if (config.integrationAdapter === "growthub-bridge" &&
210
+ config.growthubBridge?.baseUrl &&
211
+ process.env.GROWTHUB_BRIDGE_ACCESS_TOKEN) {
212
+ try {
213
+ const baseUrl = config.growthubBridge.baseUrl;
214
+ const entitiesPath = `/api/integrations/${encodeURIComponent(integrationId)}/entities`;
215
+ const url = new URL(entitiesPath, baseUrl);
216
+ const headers = {
217
+ accept: "application/json",
218
+ authorization: `Bearer ${process.env.GROWTHUB_BRIDGE_ACCESS_TOKEN}`
219
+ };
220
+ if (config.growthubBridge.userId) {
221
+ headers["x-user-id"] = config.growthubBridge.userId;
222
+ }
223
+ const response = await fetch(url, {
224
+ headers,
225
+ next: { revalidate: 30 }
226
+ });
227
+ if (response.ok) {
228
+ const payload = await response.json();
229
+ const entities = Array.isArray(payload.entities) ? payload.entities :
230
+ Array.isArray(payload.objects) ? payload.objects :
231
+ Array.isArray(payload.data) ? payload.data :
232
+ Array.isArray(payload) ? payload : [];
233
+ const normalized = normalizeIntegrationEntities(entities);
234
+ if (normalized.length) return normalized;
235
+ }
236
+ } catch {
237
+ // No fallback object data. The UI must surface the missing resolver.
238
+ }
239
+ }
240
+
241
+ return [];
242
+ }
243
+
195
244
  export {
196
245
  describeIntegrationAdapter,
197
- listGovernedWorkspaceIntegrations
246
+ listGovernedWorkspaceIntegrations,
247
+ listEntityMetadataForIntegration
198
248
  };
@@ -173,13 +173,43 @@ const workspaceIntegrations = [
173
173
  }
174
174
  ];
175
175
  const governedWorkspaceIntegrationCatalog = [...dataSources, ...workspaceIntegrations];
176
+
176
177
  function groupIntegrationsByLane(integrations) {
177
178
  return {
178
179
  dataSources: integrations.filter((item) => item.lane === "data-source"),
179
180
  workspaceIntegrations: integrations.filter((item) => item.lane === "workspace-integration")
180
181
  };
181
182
  }
183
+
184
+ function normalizeIntegrationEntity(entity) {
185
+ if (!entity || typeof entity !== "object" || Array.isArray(entity)) return null;
186
+ const id = typeof entity.id === "string" ? entity.id.trim() : "";
187
+ const label = typeof entity.label === "string" && entity.label.trim()
188
+ ? entity.label.trim()
189
+ : id;
190
+ if (!id || !label) return null;
191
+ const normalized = {
192
+ id,
193
+ label,
194
+ secondaryLabel: typeof entity.secondaryLabel === "string" ? entity.secondaryLabel : id,
195
+ entityType: typeof entity.entityType === "string" ? entity.entityType : undefined,
196
+ provider: typeof entity.provider === "string" ? entity.provider : undefined,
197
+ lane: typeof entity.lane === "string" ? entity.lane : undefined,
198
+ status: typeof entity.status === "string" ? entity.status : undefined,
199
+ metadata: entity.metadata && typeof entity.metadata === "object" && !Array.isArray(entity.metadata)
200
+ ? entity.metadata
201
+ : undefined
202
+ };
203
+ return Object.fromEntries(Object.entries(normalized).filter(([, value]) => value !== undefined));
204
+ }
205
+
206
+ function normalizeIntegrationEntities(entities) {
207
+ if (!Array.isArray(entities)) return [];
208
+ return entities.map(normalizeIntegrationEntity).filter(Boolean);
209
+ }
210
+
182
211
  export {
183
212
  governedWorkspaceIntegrationCatalog,
184
- groupIntegrationsByLane
213
+ groupIntegrationsByLane,
214
+ normalizeIntegrationEntities
185
215
  };
@@ -46,6 +46,8 @@ const KNOWN_FILTER_OPERATORS = ["eq", "ne", "contains", "gt", "lt", "isEmpty", "
46
46
  const KNOWN_FILTER_CONJUNCTIONS = ["and", "or"];
47
47
  const KNOWN_SORT_DIRECTIONS = ["asc", "desc"];
48
48
  const KNOWN_AGGREGATIONS = ["sum", "avg", "count", "min", "max"];
49
+
50
+ const NORMALIZED_OBJECT_FIELD_IDS = ["id", "label", "secondaryLabel", "entityType", "provider", "lane", "status"];
49
51
  const WORKSPACE_TEMPLATE_KIND = "growthub-workspace-template";
50
52
  const WORKSPACE_TEMPLATE_VERSION = 1;
51
53
  const WORKSPACE_TEMPLATE_SOURCE = "growthub-custom-workspace-starter-v1";
@@ -141,17 +143,35 @@ const WIDGET_SCHEMA_CONTRACTS = {
141
143
  source: "string",
142
144
  rows: "manual record[] optional",
143
145
  json: "JSON string optional",
144
- csv: "CSV string optional"
146
+ csv: "CSV string optional",
147
+ sourceType: "managed-integrations | custom-api-webhooks optional",
148
+ sourceAuthority: "string optional — adapter authority label, never a secret",
149
+ endpointRef: "string optional — stable custom API/webhook reference, never a token",
150
+ integrationId: "string optional (when mode === 'integration')",
151
+ lane: "string optional (when mode === 'integration')",
152
+ entityId: "string optional — stable source object ID (never a token or credential)",
153
+ entityType: "string optional — adapter-provided object type",
154
+ entityLabel: "string optional — display-only resolved label, not authoritative"
155
+ },
156
+ NormalizedIntegrationEntity: {
157
+ id: "non-empty string — stable source object ID",
158
+ label: "non-empty string — primary display name",
159
+ secondaryLabel: "string optional — muted subtitle (ID, domain, or type hint)",
160
+ entityType: "string optional — adapter-provided object type",
161
+ provider: "string optional — adapter/provider slug",
162
+ lane: "string optional — adapter-provided lane",
163
+ status: "string optional — adapter-provided status",
164
+ metadata: "record optional — additional adapter metadata"
145
165
  }
146
166
  };
147
167
 
148
168
  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" }
169
+ { Name: "Example Company A", "Domain Name": "example-a.test" },
170
+ { Name: "Example Company B", "Domain Name": "example-b.test" },
171
+ { Name: "Example Company C", "Domain Name": "example-c.test" },
172
+ { Name: "Example Company D", "Domain Name": "example-d.test" },
173
+ { Name: "Example Company E", "Domain Name": "example-e.test" },
174
+ { Name: "Example Company F", "Domain Name": "example-f.test" }
155
175
  ];
156
176
 
157
177
  const SAMPLE_DATA_BINDINGS = {
@@ -365,6 +385,14 @@ function validateStaticDataBinding(binding, path, errors) {
365
385
  if (!KNOWN_DATA_BINDING_MODES.includes(binding.mode)) {
366
386
  errors.push(`${path}.mode must be one of ${KNOWN_DATA_BINDING_MODES.join(", ")}`);
367
387
  }
388
+ if (binding.mode === "integration") {
389
+ if (typeof binding.integrationId !== "string" || !binding.integrationId.trim()) {
390
+ errors.push(`${path}.integrationId is required when mode is integration`);
391
+ }
392
+ if (typeof binding.lane !== "string" || !binding.lane.trim()) {
393
+ errors.push(`${path}.lane is required when mode is integration`);
394
+ }
395
+ }
368
396
  if (binding.source !== undefined && typeof binding.source !== "string") {
369
397
  errors.push(`${path}.source must be a string`);
370
398
  }
@@ -377,12 +405,30 @@ function validateStaticDataBinding(binding, path, errors) {
377
405
  if (binding.csv !== undefined && typeof binding.csv !== "string") {
378
406
  errors.push(`${path}.csv must be a string`);
379
407
  }
408
+ if (binding.sourceType !== undefined && typeof binding.sourceType !== "string") {
409
+ errors.push(`${path}.sourceType must be a string`);
410
+ }
411
+ if (binding.sourceAuthority !== undefined && typeof binding.sourceAuthority !== "string") {
412
+ errors.push(`${path}.sourceAuthority must be a string`);
413
+ }
414
+ if (binding.endpointRef !== undefined && typeof binding.endpointRef !== "string") {
415
+ errors.push(`${path}.endpointRef must be a string`);
416
+ }
380
417
  if (binding.integrationId !== undefined && typeof binding.integrationId !== "string") {
381
418
  errors.push(`${path}.integrationId must be a string`);
382
419
  }
383
420
  if (binding.lane !== undefined && typeof binding.lane !== "string") {
384
421
  errors.push(`${path}.lane must be a string`);
385
422
  }
423
+ if (binding.entityId !== undefined && typeof binding.entityId !== "string") {
424
+ errors.push(`${path}.entityId must be a string`);
425
+ }
426
+ if (binding.entityType !== undefined && typeof binding.entityType !== "string") {
427
+ errors.push(`${path}.entityType must be a string`);
428
+ }
429
+ if (binding.entityLabel !== undefined && typeof binding.entityLabel !== "string") {
430
+ errors.push(`${path}.entityLabel must be a string`);
431
+ }
386
432
  }
387
433
 
388
434
  function validateFieldSettings(fieldSettings, path, errors) {
@@ -970,6 +1016,7 @@ export {
970
1016
  KNOWN_FILTER_OPERATORS,
971
1017
  KNOWN_SORT_DIRECTIONS,
972
1018
  KNOWN_WIDGET_KINDS,
1019
+ NORMALIZED_OBJECT_FIELD_IDS,
973
1020
  SAMPLE_DATA_BINDINGS,
974
1021
  SAMPLE_VIEW_ROWS,
975
1022
  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
  }