@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.
- package/README.md +1 -1
- package/assets/worker-kits/creative-strategist-v1/kit.json +5 -2
- package/assets/worker-kits/growthub-agency-portal-starter-v1/kit.json +4 -1
- package/assets/worker-kits/growthub-ai-website-cloner-v1/kit.json +6 -3
- package/assets/worker-kits/growthub-creative-video-pipeline-v1/kit.json +4 -1
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/README.md +4 -4
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/api/workspace/integration-entities/route.js +50 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/globals.css +284 -15
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/page.jsx +5 -2
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/settings/integrations/page.jsx +4 -5
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/workspace-builder.jsx +507 -34
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/integrations/growthub-connection-normalizer.js +12 -16
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/integrations/index.js +61 -11
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/domain/integrations.js +31 -1
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-schema.js +54 -7
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/kit.json +5 -2
- package/assets/worker-kits/growthub-email-marketing-v1/kit.json +5 -2
- package/assets/worker-kits/growthub-geo-seo-v1/kit.json +5 -2
- package/assets/worker-kits/growthub-hyperframes-studio-v1/kit.json +5 -2
- package/assets/worker-kits/growthub-marketing-skills-v1/kit.json +6 -3
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/kit.json +5 -2
- package/assets/worker-kits/growthub-open-montage-studio-v1/kit.json +6 -3
- package/assets/worker-kits/growthub-postiz-social-v1/kit.json +5 -2
- package/assets/worker-kits/growthub-twenty-crm-v1/kit.json +6 -3
- package/assets/worker-kits/growthub-video-use-studio-v1/kit.json +5 -2
- package/assets/worker-kits/growthub-zernio-social-v1/kit.json +5 -2
- package/dist/index.js +1750 -433
- 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
|
-
|
|
12
|
-
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
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
|
|
184
|
-
objectType
|
|
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: "
|
|
150
|
-
{ Name: "
|
|
151
|
-
{ Name: "
|
|
152
|
-
{ Name: "
|
|
153
|
-
{ Name: "
|
|
154
|
-
{ Name: "
|
|
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`
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
7
|
-
"description": "Self-contained local execution environment for OpenMontage agentic video production. Produces end-to-end video content through 12 production pipelines
|
|
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
|
|
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
|
|
7
|
-
"description": "Self-contained local execution environment for Twenty CRM
|
|
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
|
|
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
|
|
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
|
}
|