-
{currentStep?.name}
+
+ Deploy
+ {' '}
+ Smol Developer
+
Step {currentIdx + 1} of {steps.length}
diff --git a/github/webhooks.ts b/github/webhooks.ts
index 8efae450a..43bfa5d7b 100644
--- a/github/webhooks.ts
+++ b/github/webhooks.ts
@@ -5,7 +5,7 @@ import {
} from '@octokit/webhooks'
import { prisma } from 'db/prisma'
-import { client as posthog } from 'utils/posthog'
+import { client as posthog } from 'utils/posthogNode'
import { DeploymentAuthData } from 'pages/api/agent'
import { smolDeveloperTemplateID } from 'utils/smolTemplates'
diff --git a/next.config.js b/next.config.js
index bb2d41ab2..52eed16c6 100644
--- a/next.config.js
+++ b/next.config.js
@@ -1,6 +1,78 @@
+/** @type {import('next').NextConfig} */
+const fastDockerBuild = {
+ compress: false,
+ productionBrowserSourceMaps: false,
+ eslint: {
+ ignoreDuringBuilds: true,
+ },
+ optimizeFonts: false,
+ typescript: {
+ ignoreBuildErrors: true,
+ },
+ output: 'standalone',
+ experimental: {
+ turbotrace: {
+ memoryLimit: 1000,
+ },
+ },
+}
+
/** @type {import('next').NextConfig} */
const nextConfig = {
- /* config options here */
+ ...process.env.BUILD === 'docker' && fastDockerBuild,
+ swcMinify: true,
+ experimental: {
+ appDir: true,
+ swcPlugins: [['next-superjson-plugin', {}]],
+ },
+ async rewrites() {
+ return [
+ {
+ source: '/ingest/:path*',
+ destination: 'https://app.posthog.com/:path*',
+ },
+ ]
+ },
}
module.exports = nextConfig
+
+
+// Injected content via Sentry wizard below
+
+const { withSentryConfig } = require('@sentry/nextjs')
+
+module.exports = process.env.BUILD === 'docker'
+ ? module.exports
+ : withSentryConfig(
+ module.exports,
+ {
+ // For all available options, see:
+ // https://github.com/getsentry/sentry-webpack-plugin#options
+
+ // Suppresses source map uploading logs during build
+ silent: true,
+
+ org: 'devbook-7f',
+ project: 'agent-dashboard',
+ },
+ {
+ // For all available options, see:
+ // https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/
+
+ // Upload a larger set of source maps for prettier stack traces (increases build time)
+ widenClientFileUpload: true,
+
+ // Transpiles SDK to be compatible with IE11 (increases bundle size)
+ transpileClientSDK: true,
+
+ // Routes browser requests to Sentry through a Next.js rewrite to circumvent ad-blockers (increases server load)
+ tunnelRoute: '/monitoring',
+
+ // Hides source maps from generated client bundles
+ hideSourceMaps: true,
+
+ // Automatically tree-shake Sentry logger statements to reduce bundle size
+ disableLogger: true,
+ }
+ )
diff --git a/package-lock.json b/package-lock.json
index 1daa78524..1ecabd600 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -63,6 +63,7 @@
"concurrently": "^7.6.0",
"cross-env": "^7.0.3",
"cssnano": "^6.0.0",
+ "encoding": "^0.1.13",
"eslint": "^8.35.0",
"eslint-config-next": "^13.2.3",
"eslint-plugin-tailwindcss": "^3.10.1",
@@ -3369,6 +3370,15 @@
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
"dev": true
},
+ "node_modules/encoding": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
+ "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
+ "devOptional": true,
+ "dependencies": {
+ "iconv-lite": "^0.6.2"
+ }
+ },
"node_modules/end-of-stream": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
@@ -4764,6 +4774,18 @@
"node": ">= 6"
}
},
+ "node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "devOptional": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
@@ -7592,6 +7614,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "devOptional": true
+ },
"node_modules/satori": {
"version": "0.10.1",
"resolved": "https://registry.npmjs.org/satori/-/satori-0.10.1.tgz",
diff --git a/package.json b/package.json
index 6235e248d..87d0c138d 100644
--- a/package.json
+++ b/package.json
@@ -95,6 +95,7 @@
"concurrently": "^7.6.0",
"cross-env": "^7.0.3",
"cssnano": "^6.0.0",
+ "encoding": "^0.1.13",
"eslint": "^8.35.0",
"eslint-config-next": "^13.2.3",
"eslint-plugin-tailwindcss": "^3.10.1",
diff --git a/pages/_app.tsx b/pages/_app.tsx
index 033405bd5..88eb1850d 100644
--- a/pages/_app.tsx
+++ b/pages/_app.tsx
@@ -13,23 +13,9 @@ import 'styles/global.css'
import { Database } from 'db/supabase'
import { clientCreds } from 'db/credentials'
import Layout from 'components/Layout'
+import * as posthogBrowser from '../utils/posthogBrowser'
-// Initialize PostHog
-if (typeof window !== 'undefined' && process.env.NEXT_PUBLIC_POSTHOG_KEY) {
- posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY, {
- // Use the ingest endpoint for all requests
- api_host: `${window.location.protocol}//${window.location.host}/ingest`,
- // Disable session recording when not in production
- disable_session_recording: process.env.NODE_ENV !== 'production',
- advanced_disable_toolbar_metrics: true,
- loaded: (posthog) => {
- // Enable debug mode in development
- if (process.env.NODE_ENV === 'development') {
- posthog.debug()
- }
- }
- })
-}
+posthogBrowser.maybeInit()
function App({ Component, pageProps }: AppProps<{ initialSession?: Session, project?: projects }>) {
const [supabaseClient] = useState(() => createBrowserSupabaseClient
(clientCreds))
diff --git a/pages/agent-old/README-REALLY.txt b/pages/agent-old/README-REALLY.txt
new file mode 100644
index 000000000..03b52be6b
--- /dev/null
+++ b/pages/agent-old/README-REALLY.txt
@@ -0,0 +1,2 @@
+This whole route was migrated to app router!
+Don't use this anymore! It's just here just for reference.
diff --git a/pages/agent/smol-developer/index.tsx b/pages/agent-old/smol-developer/index.tsx
similarity index 99%
rename from pages/agent/smol-developer/index.tsx
rename to pages/agent-old/smol-developer/index.tsx
index a45910ec9..341c40d8e 100644
--- a/pages/agent/smol-developer/index.tsx
+++ b/pages/agent-old/smol-developer/index.tsx
@@ -22,7 +22,7 @@ function SmolDeveloper() {
useEffect(() => {
if (user) {
- router.push('/agent/smol-developer/setup')
+ router.push('/agent-old/smol-developer/setup')
}
}, [user, router])
diff --git a/pages/agent/smol-developer/setup.tsx b/pages/agent-old/smol-developer/setup.tsx
similarity index 98%
rename from pages/agent/smol-developer/setup.tsx
rename to pages/agent-old/smol-developer/setup.tsx
index 7e0283a92..0631d9cee 100644
--- a/pages/agent/smol-developer/setup.tsx
+++ b/pages/agent-old/smol-developer/setup.tsx
@@ -54,8 +54,8 @@ export interface PostAgentBody {
}
const steps = [
- { name: 'Select Repository' },
- { name: 'Your Instructions' },
+ { name: 'Repository' },
+ { name: 'Agent Instructions' },
{ name: 'OpenAI API Key' },
{ name: 'Overview & Deploy' },
]
@@ -76,7 +76,7 @@ export const getServerSideProps: GetServerSideProps = async (ctx) => {
if (!session) {
return {
redirect: {
- destination: '/agent/smol-developer',
+ destination: '/agent-old/smol-developer',
permanent: false,
},
}
diff --git a/pages/api/agent/index.ts b/pages/api/agent/index.ts
index 8ba9335e3..003486a33 100644
--- a/pages/api/agent/index.ts
+++ b/pages/api/agent/index.ts
@@ -1,12 +1,12 @@
import { createServerSupabaseClient } from '@supabase/auth-helpers-nextjs'
import { NextApiRequest, NextApiResponse } from 'next'
import { nanoid } from 'nanoid'
-import { client as posthog } from 'utils/posthog'
+import { client as posthog } from 'utils/posthogNode'
-import { PostAgentResponse } from 'pages/agent/smol-developer/setup'
+import { PostAgentResponse } from 'pages/agent-old/smol-developer/setup'
import { prisma } from 'db/prisma'
import { serverCreds } from 'db/credentials'
-import { PostAgentBody } from 'pages/agent/smol-developer/setup'
+import { PostAgentBody } from 'pages/agent-old/smol-developer/setup'
import { getGHInstallationClient } from 'github/installationClient'
import {
createAgentDeployment,
diff --git a/pages/api/agent/run.ts b/pages/api/agent/run.ts
index e5a623307..ff9380cfb 100644
--- a/pages/api/agent/run.ts
+++ b/pages/api/agent/run.ts
@@ -3,7 +3,7 @@ import { NextApiRequest, NextApiResponse } from 'next'
import { prisma } from 'db/prisma'
import { getGHInstallationClient } from 'github/installationClient'
import { addCommentToPR } from 'github/pullRequest'
-import { client as posthog } from 'utils/posthog'
+import { client as posthog } from 'utils/posthogNode'
import { DeploymentAuthData } from '.'
import { smolDeveloperTemplateID } from 'utils/smolTemplates'
diff --git a/styles/global.css b/styles/global.css
index 7b4545f50..d7bda6aec 100644
--- a/styles/global.css
+++ b/styles/global.css
@@ -57,6 +57,90 @@
-webkit-text-security: disc;
text-security: disc;
}
+
+ /* TODO: Consider refactoring `agent-` classes to relevant components */
+ .agent-step-root {
+ @apply flex-1 flex flex-col justify-start;
+ }
+
+ .agent-step-footer {
+ @apply w-full flex items-center justify-between;
+ @apply text-sm;
+ }
+
+ .agent-step-footer-btn-back {
+ @apply flex items-center justify-start space-x-1;
+ @apply text-gray-400 hover:text-gray-100 transition-all;
+ }
+
+ .agent-step-footer-btn-next {
+ @apply px-4 py-2 flex items-center space-x-1 font-medium rounded-md border;
+ @apply border-indigo-400/30 bg-indigo-400/10 text-indigo-400 hover:bg-transparent hover:border-indigo-400 transition-all;
+ }
+
+ .agent-step-footer-btn-next_final {
+ /* indigo -> green*/
+ @apply border-green-400/30 bg-green-400/10 text-green-400 hover:border-green-400;
+ }
+
+ .agent-editor {
+ @apply relative bg-gray-950 flex flex-col p-2 w-full flex-1 overflow-auto border border-gray-700 rounded-md;
+ }
+
+ .agent-editor-textarea {
+ @apply bg-gray-950 p-4 text-gray-100;
+ }
+
+ .agent-step-title {
+ @apply text-2xl font-bold tracking-tight;
+ }
+
+ .agent-step-subtitle {
+ @apply mb-6;
+ @apply text-gray-400;
+ }
+
+ .agent-step-content {
+ @apply flex-1 w-full flex flex-col items-center justify-start;
+ @apply space-y-4;
+ }
+
+ .agent-step-overview-block {
+ @apply flex flex-col items-start justify-start;
+ @apply w-full;
+ }
+
+ .agent-step-overview-title {
+ @apply flex mb-2;
+ @apply text-sm;
+ @apply text-gray-300;
+ }
+
+ .agent-step-overview-edit {
+ @apply inline-flex;
+ }
+
+ .agent-step-overview-edit-icon {
+ @apply inline-block w-4 h-4 ml-2;
+ @apply text-gray-600 hover:text-white transition-all;
+ }
+
+ .agent-step-overview-value {
+ @apply block;
+ @apply text-sm text-white font-bold;
+ @apply flex items-center;
+ }
+
+ .agent-step-overview-icon {
+ @apply inline-block w-4 h-4 mr-2;
+ @apply text-gray-400;
+ }
+
+ .agent-btn-inline {
+ /* min dimensions so the button does not collapse with only spinner */
+ @apply min-w-[64px] min-h-[28px] flex items-center justify-center;
+ @apply rounded bg-white/10 px-2 py-1 text-sm font-medium text-white shadow-sm hover:bg-white/20;
+ }
}
.no-scroller::-webkit-scrollbar {
diff --git a/tailwind.config.js b/tailwind.config.js
index 402635e5e..96ca5f803 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -1,7 +1,12 @@
const { fontFamily } = require('tailwindcss/defaultTheme')
module.exports = {
- content: ['./components/**/*.{js,ts,jsx,tsx,css}', './pages/**/*.{js,ts,jsx,tsx,css}', './styles/**/*.{js,ts,jsx,tsx,css}'],
+ content: [
+ './components/**/*.{js,ts,jsx,tsx,css}',
+ './pages/**/*.{js,ts,jsx,tsx,css}',
+ './app/**/*.{js,ts,jsx,tsx,css}',
+ './styles/**/*.{js,ts,jsx,tsx,css}'
+ ],
darkMode: 'class',
important: true,
theme: {
diff --git a/tsconfig.json b/tsconfig.json
index c176259e9..351820c65 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -23,12 +23,13 @@
{
"name": "next"
}
- ],
+ ]
},
"include": [
"next-env.d.ts",
"**/*.ts",
- "**/*.tsx"
+ "**/*.tsx",
+ ".next/types/**/*.ts"
],
"exclude": [
"supabase",
diff --git a/utils/posthogBrowser.ts b/utils/posthogBrowser.ts
new file mode 100644
index 000000000..74acfeb27
--- /dev/null
+++ b/utils/posthogBrowser.ts
@@ -0,0 +1,19 @@
+import posthog from 'posthog-js'
+
+export function maybeInit() {
+ if (typeof window === 'undefined' || !process.env.NEXT_PUBLIC_POSTHOG_KEY) return
+
+ posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY, {
+ // Use the ingest endpoint for all requests
+ api_host: `${window.location.protocol}//${window.location.host}/ingest`,
+ // Disable session recording when not in production
+ disable_session_recording: process.env.NODE_ENV !== 'production',
+ advanced_disable_toolbar_metrics: true,
+ loaded: (posthog) => {
+ // Enable debug mode in development
+ if (process.env.NODE_ENV === 'development') {
+ posthog.debug()
+ }
+ }
+ })
+}
diff --git a/utils/posthog.ts b/utils/posthogNode.ts
similarity index 100%
rename from utils/posthog.ts
rename to utils/posthogNode.ts