@growthub/cli 0.9.3 → 0.9.5

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 (46) hide show
  1. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/growthub.config.json +112 -0
  2. package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/package.json +1 -1
  3. package/assets/worker-kits/growthub-agency-portal-starter-v1/bundles/growthub-agency-portal-starter-v1.json +1 -0
  4. package/assets/worker-kits/growthub-agency-portal-starter-v1/kit.json +2 -0
  5. package/assets/worker-kits/growthub-creative-video-pipeline-v1/apps/creative-video-pipeline/package.json +1 -1
  6. package/assets/worker-kits/growthub-custom-workspace-starter-v1/SKILL.md +35 -1
  7. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/.env.example +41 -0
  8. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/README.md +38 -0
  9. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/api/settings/integrations/route.js +13 -0
  10. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/api/workspace/route.js +91 -0
  11. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/globals.css +912 -0
  12. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/layout.jsx +14 -0
  13. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/page.jsx +23 -0
  14. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/settings/integrations/page.jsx +105 -0
  15. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/workspace-builder.jsx +680 -0
  16. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/growthub.config.json +53 -0
  17. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/jsconfig.json +8 -0
  18. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/auth/index.js +21 -0
  19. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/env.js +28 -0
  20. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/integrations/growthub-connection-normalizer.js +95 -0
  21. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/integrations/index.js +198 -0
  22. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/payments/index.js +13 -0
  23. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/persistence/index.js +13 -0
  24. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/persistence/postgres.js +16 -0
  25. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/persistence/provider-managed.js +16 -0
  26. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/persistence/qstash-kv.js +16 -0
  27. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/domain/integrations.js +185 -0
  28. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/domain/portal.js +150 -0
  29. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-config.js +232 -0
  30. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/next.config.js +10 -0
  31. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/package-lock.json +976 -0
  32. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/package.json +17 -0
  33. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/postcss.config.mjs +3 -0
  34. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/vercel.json +5 -0
  35. package/assets/worker-kits/growthub-custom-workspace-starter-v1/bundles/growthub-custom-workspace-starter-v1.json +13 -0
  36. package/assets/worker-kits/growthub-custom-workspace-starter-v1/docs/adapter-contracts.md +86 -0
  37. package/assets/worker-kits/growthub-custom-workspace-starter-v1/docs/vercel-serverless-deployment.md +46 -0
  38. package/assets/worker-kits/growthub-custom-workspace-starter-v1/growthub.config.json +49 -0
  39. package/assets/worker-kits/growthub-custom-workspace-starter-v1/helpers/check-self-improving-health.sh +60 -0
  40. package/assets/worker-kits/growthub-custom-workspace-starter-v1/helpers/promote-capability.mjs +37 -0
  41. package/assets/worker-kits/growthub-custom-workspace-starter-v1/helpers/propose-capability.mjs +38 -0
  42. package/assets/worker-kits/growthub-custom-workspace-starter-v1/kit.json +45 -0
  43. package/assets/worker-kits/growthub-custom-workspace-starter-v1/templates/deployment-handoff.md +61 -0
  44. package/assets/worker-kits/growthub-custom-workspace-starter-v1/templates/supabase-setup-plan.md +26 -0
  45. package/dist/index.js +2903 -1596
  46. package/package.json +2 -1
@@ -0,0 +1,14 @@
1
+ import "./globals.css";
2
+ const metadata = {
3
+ title: "Growthub Workspace",
4
+ description: "Configurable governed workspace dashboard builder."
5
+ };
6
+ function RootLayout({ children }) {
7
+ return <html lang="en">
8
+ <body>{children}</body>
9
+ </html>;
10
+ }
11
+ export {
12
+ RootLayout as default,
13
+ metadata
14
+ };
@@ -0,0 +1,23 @@
1
+ import workspaceConfig from "../growthub.config.json";
2
+ import { readAdapterConfig } from "@/lib/adapters/env";
3
+ import { describeIntegrationAdapter } from "@/lib/adapters/integrations";
4
+ import { describePersistenceMode } from "@/lib/workspace-config";
5
+ import WorkspaceBuilder from "./workspace-builder.jsx";
6
+
7
+ function Home() {
8
+ const adapterConfig = readAdapterConfig();
9
+ const integrationAdapter = describeIntegrationAdapter();
10
+ const persistence = describePersistenceMode();
11
+ return (
12
+ <WorkspaceBuilder
13
+ initialConfig={workspaceConfig}
14
+ adapterConfig={adapterConfig}
15
+ integrationAdapter={integrationAdapter}
16
+ persistence={persistence}
17
+ />
18
+ );
19
+ }
20
+
21
+ export {
22
+ Home as default
23
+ };
@@ -0,0 +1,105 @@
1
+ import { readAdapterConfig } from "@/lib/adapters/env";
2
+ import { describeIntegrationAdapter, listAgencyPortalIntegrations } from "@/lib/adapters/integrations";
3
+ import { groupIntegrationsByLane } from "@/lib/domain/integrations";
4
+ import { buildPortalWorkspace } from "@/lib/domain/portal";
5
+ import { describeAuthAdapter } from "@/lib/adapters/auth";
6
+ import { describePaymentAdapter } from "@/lib/adapters/payments";
7
+ import { describePersistenceAdapter } from "@/lib/adapters/persistence";
8
+ import Link from "next/link";
9
+ async function IntegrationsSettingsPage() {
10
+ const config = readAdapterConfig();
11
+ const adapter = describeIntegrationAdapter();
12
+ const grouped = groupIntegrationsByLane(await listAgencyPortalIntegrations());
13
+ const workspace = buildPortalWorkspace({
14
+ config,
15
+ integrations: grouped,
16
+ adapters: {
17
+ persistence: describePersistenceAdapter(),
18
+ auth: describeAuthAdapter(),
19
+ payments: describePaymentAdapter(),
20
+ integrations: adapter
21
+ }
22
+ });
23
+ const rows = [
24
+ ...grouped.dataSources.map((item) => ({ ...item, primitiveGroup: "data-source" })),
25
+ ...grouped.workspaceIntegrations.map((item) => ({ ...item, primitiveGroup: "workspace-integration" }))
26
+ ];
27
+ return <main className="shell">
28
+ <aside className="sidebar">
29
+ <div className="brand">
30
+ <span className="brand-mark">{workspace.identity.mark}</span>
31
+ <span>{workspace.identity.label}</span>
32
+ </div>
33
+ <nav className="nav">
34
+ {workspace.navigation.map((item) => <Link className={item.href === "/settings/integrations" ? "active" : ""} key={item.href} href={item.href.startsWith("#") ? `/${item.href}` : item.href}>
35
+ {item.label}
36
+ </Link>)}
37
+ </nav>
38
+ <div className="sidebar-footer">
39
+ <span className="status-dot" />
40
+ {adapter.authority}
41
+ </div>
42
+ </aside>
43
+ <section className="main">
44
+ <div className="utility-bar">
45
+ <div>
46
+ <strong>{adapter.label}</strong>
47
+ <span>{workspace.identity.primitiveContract}</span>
48
+ </div>
49
+ <div className="utility-actions">
50
+ <span className="pill">{adapter.id}</span>
51
+ <span className="pill">{adapter.authority}</span>
52
+ </div>
53
+ </div>
54
+ <section className="primitive-grid summary" aria-label="Integration adapter primitives">
55
+ <article className="primitive-card">
56
+ <div className="primitive-card-top">
57
+ <p className="card-label">Authority</p>
58
+ <span className="status runtime-derived">{adapter.authority}</span>
59
+ </div>
60
+ <strong>{adapter.id}</strong>
61
+ <div className="primitive-meta">
62
+ {adapter.requiredEnv.map((key) => <code key={key}>{key}</code>)}
63
+ </div>
64
+ </article>
65
+ <article className="primitive-card">
66
+ <div className="primitive-card-top">
67
+ <p className="card-label">Data-source primitives</p>
68
+ <span className="status runtime-derived">{grouped.dataSources.length}</span>
69
+ </div>
70
+ <strong>{grouped.dataSources.filter((item) => item.isConnected).length}/{grouped.dataSources.length}</strong>
71
+ <div className="primitive-meta"><span>{config.reportingAdapter || "reporting-adapter"}</span></div>
72
+ </article>
73
+ <article className="primitive-card">
74
+ <div className="primitive-card-top">
75
+ <p className="card-label">Workspace primitives</p>
76
+ <span className="status runtime-derived">{grouped.workspaceIntegrations.length}</span>
77
+ </div>
78
+ <strong>{grouped.workspaceIntegrations.filter((item) => item.isConnected).length}/{grouped.workspaceIntegrations.length}</strong>
79
+ <div className="primitive-meta"><span>{config.integrationAdapter}</span></div>
80
+ </article>
81
+ </section>
82
+ <section className="integration-board">
83
+ {rows.map((item) => <article className="integration-card" key={item.id}>
84
+ <div className="integration-card-top">
85
+ <div className="provider-mark">{item.icon || item.label.slice(0, 1)}</div>
86
+ <div>
87
+ <strong>{item.label}</strong>
88
+ <p>{item.provider} / {item.objectType} / {item.primitiveGroup}</p>
89
+ </div>
90
+ <span className={`status ${item.status}`}>{item.status}</span>
91
+ </div>
92
+ <div className="integration-card-meta">
93
+ <span>{item.authPath}</span>
94
+ <span>{item.setupMode}</span>
95
+ <span>{item.authType}</span>
96
+ {item.secretEnvName ? <span>{item.secretEnvName}</span> : null}
97
+ </div>
98
+ </article>)}
99
+ </section>
100
+ </section>
101
+ </main>;
102
+ }
103
+ export {
104
+ IntegrationsSettingsPage as default
105
+ };