Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# OpenAI Configuration
OPENAI_API_KEY=your_openai_api_key_here
OPENAI_ORGANIZATION=your_openai_organization_here

# Anthropic Configuration (optional)
ANTHROPIC_API_KEY=your_anthropic_api_key_here

# Google AI Configuration (optional)
GOOGLE_AI_API_KEY=your_google_ai_api_key_here

# Authentication
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=your_nextauth_secret_here

# Database
DATABASE_URL=postgresql://username:password@localhost:5432/aiagent_platform

# Redis (for caching and real-time features)
REDIS_URL=redis://localhost:6379

# Vector Database (Pinecone)
PINECONE_API_KEY=your_pinecone_api_key_here
PINECONE_ENVIRONMENT=your_pinecone_environment_here

# LangChain Configuration
LANGCHAIN_TRACING_V2=true
LANGCHAIN_ENDPOINT=https://api.smith.langchain.com
LANGCHAIN_API_KEY=your_langchain_api_key_here
LANGCHAIN_PROJECT=your_langchain_project_here

# Email Configuration (for notifications)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your_email@gmail.com
SMTP_PASSWORD=your_app_password_here

# AWS Configuration (for file storage)
AWS_ACCESS_KEY_ID=your_aws_access_key_here
AWS_SECRET_ACCESS_KEY=your_aws_secret_key_here
AWS_REGION=us-east-1
AWS_S3_BUCKET=your_s3_bucket_here

# Analytics
VERCEL_ANALYTICS_ID=your_vercel_analytics_id_here

# Development
NODE_ENV=development
NEXT_PUBLIC_APP_URL=http://localhost:3000
28 changes: 28 additions & 0 deletions next.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/** @type {import('next').NextConfig} */
const nextConfig = {
experimental: {
serverActions: true,
serverComponentsExternalPackages: ['@langchain/core', '@langchain/openai'],
},
webpack: (config) => {
config.resolve.alias = {
...config.resolve.alias,
'@': './src',
};
return config;
},
images: {
remotePatterns: [
{
protocol: 'https',
hostname: '**',
},
],
},
env: {
NEXTAUTH_URL: process.env.NEXTAUTH_URL,
NEXTAUTH_SECRET: process.env.NEXTAUTH_SECRET,
},
};

module.exports = nextConfig;
272 changes: 141 additions & 131 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,133 +1,143 @@
{
"name": "twotone",
"version": "0.0.2",
"description": "",
"author": {
"name": "Brian Chirls"
},
"contributors": [
{
"name": "Cristian Vogel",
"url": "https://github.com/cristianvogel"
},
{
"name": "Brian Chirls",
"url": "https://github.com/brianchirls"
}
],
"main": "index.js",
"engines": {
"node": "^14.0.0"
},
"scripts": {
"lint": "eslint ./; true",
"lint-fix": "eslint --fix ./; true",
"start": "NODE_ENV=development webpack-dev-server",
"dev": "NODE_ENV=development webpack",
"build": "NODE_ENV=production webpack",
"deploy": "gh-pages -d ./build",
"github-labels": "node -r dotenv/config ./node_modules/github-label-sync/bin/github-label-sync.js -l ./devops/labels.json datavized/twotone",
"test": "echo \"Error: no test specified\" && exit 1"
},
"license": "MPL-2.0",
"devDependencies": {
"@babel/core": "^7.16.7",
"@babel/plugin-proposal-class-properties": "^7.16.7",
"@babel/plugin-proposal-object-rest-spread": "^7.16.7",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-syntax-jsx": "^7.16.7",
"@babel/plugin-transform-react-jsx": "^7.16.7",
"@babel/plugin-transform-react-jsx-self": "^7.16.7",
"@babel/plugin-transform-react-jsx-source": "^7.16.7",
"@babel/plugin-transform-runtime": "^7.16.7",
"@babel/polyfill": "^7.12.1",
"@babel/preset-env": "^7.16.7",
"@babel/preset-react": "^7.16.7",
"autoprefixer": "^9.6.1",
"babel-loader": "^8.2.3",
"babel-plugin-transform-react-remove-prop-types": "^0.4.24",
"bluebird": "^3.5.5",
"case-sensitive-paths-webpack-plugin": "^2.2.0",
"clean-webpack-plugin": "^3.0.0",
"copy-webpack-plugin": "^6.3.2",
"datavized-code-style": "github:datavized/code-style",
"dotenv": "^8.1.0",
"eslint": "^6.3.0",
"eslint-config-crockford": "^2.0.0",
"eslint-loader": "^3.0.0",
"eslint-plugin-babel": "^5.3.1",
"eslint-plugin-import": "^2.25.4",
"eslint-plugin-jsx-a11y": "^6.5.1",
"eslint-plugin-react": "^7.28.0",
"exports-loader": "^0.7.0",
"fast-async": "^7.0.6",
"favicons-webpack-plugin": "^4.2.0",
"file-loader": "^4.2.0",
"gh-pages": "^3.1.0",
"github-label-sync": "^1.4.1",
"html-loader": "^0.5.5",
"html-webpack-plugin": "^4.5.1",
"imagemin-mozjpeg": "^8.0.0",
"imagemin-webpack-plugin": "^2.4.2",
"postcss-flexbugs-fixes": "^4.1.0",
"postcss-loader": "^3.0.0",
"react-dev-utils": "^12.0.0",
"react-hot-loader": "^4.12.12",
"style-loader": "^1.0.0",
"unused-files-webpack-plugin": "^3.4.0",
"url-loader": "^2.1.0",
"webpack": "^4.39.3",
"webpack-build-notifier": "^1.1.1",
"webpack-bundle-analyzer": "^3.4.1",
"webpack-cli": "^3.3.7",
"webpack-dev-server": "^3.8.0",
"webpack-merge": "^4.2.2",
"webpack-sources": "^1.4.3",
"workbox-webpack-plugin": "^4.3.1",
"xlsx": ">=0.17.0"
},
"dependencies": {
"@hot-loader/react-dom": "^17.0.2",
"@material-ui/core": "^3.9.3",
"@material-ui/icons": "^3.0.2",
"@material-ui/lab": "^3.0.0-alpha.30",
"audio-metadata": "^0.3.0",
"audio-recorder-polyfill": "^0.1.6",
"browser-id3-writer": "^4.2.0",
"bulma": "^0.9.3",
"classnames": "^2.2.6",
"debounce": "^1.2.0",
"error-stack-parser": "^2.0.3",
"event-emitter": "^0.3.5",
"fast-deep-equal": "^2.0.1",
"file-saver": "^2.0.2",
"idb-keyval": "^3.2.0",
"ismobilejs": "^1.0.2",
"jsmediatags": "^3.9.2",
"lamejs": "^1.2.0",
"mui-virtualized-table": "^2.2.3",
"node-sass": "^7.0.1",
"parsecurrency": "^1.0.0",
"postcss": "^8.4.5",
"postcss-scss": "^4.0.3",
"pouchdb": "^7.1.1",
"prop-types": "^15.7.2",
"rc-slider": "^9.0.0",
"react": "^16.9.0",
"react-confirm": "^0.1.18",
"react-dom": "^16.9.0",
"react-dropzone": "^10.1.8",
"react-joyride": "^2.1.1",
"react-mic-record": "github:datavized/react-mic-record#hack",
"react-sortable-hoc": "^1.10.1",
"react-virtualized": "^9.21.1",
"serialize-error": "^4.1.0",
"standardized-audio-context": "^21.2.1",
"to-id": "^2.0.0",
"unistore": "^3.4.1",
"wav-encoder": "^1.3.0",
"webmidi": ">=3.0.1",
"worker-loader": "^2.0.0",
"xlsx": ">=0.17.0"
}
"name": "aiagent-platform",
"version": "1.0.0",
"description": "Professional AI Agent Platform - Build, Deploy, and Manage AI Agents",
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
"lint:fix": "next lint --fix",
"type-check": "tsc --noEmit",
"test": "jest",
"test:watch": "jest --watch",
"test:coverage": "jest --coverage",
"analyze": "cross-env ANALYZE=true next build",
"storybook": "storybook dev -p 6006",
"build-storybook": "storybook build",
"db:generate": "prisma generate",
"db:push": "prisma db push",
"db:studio": "prisma studio"
},
"dependencies": {
"@ai-sdk/openai": "^0.0.66",
"@auth/prisma-adapter": "^1.4.0",
"@hookform/resolvers": "^3.3.4",
"@langchain/core": "^0.1.48",
"@langchain/openai": "^0.0.15",
"@next-auth/prisma-adapter": "^1.0.7",
"@prisma/client": "^5.10.2",
"@radix-ui/react-accordion": "^1.1.2",
"@radix-ui/react-alert-dialog": "^1.0.5",
"@radix-ui/react-avatar": "^1.0.4",
"@radix-ui/react-badge": "^1.0.4",
"@radix-ui/react-button": "^1.0.4",
"@radix-ui/react-card": "^1.0.4",
"@radix-ui/react-checkbox": "^1.0.4",
"@radix-ui/react-dialog": "^1.0.5",
"@radix-ui/react-dropdown-menu": "^2.0.6",
"@radix-ui/react-form": "^0.0.3",
"@radix-ui/react-icons": "^1.3.0",
"@radix-ui/react-label": "^2.0.2",
"@radix-ui/react-navigation-menu": "^1.1.4",
"@radix-ui/react-progress": "^1.0.3",
"@radix-ui/react-scroll-area": "^1.0.5",
"@radix-ui/react-select": "^2.0.0",
"@radix-ui/react-separator": "^1.0.3",
"@radix-ui/react-sheet": "^1.0.4",
"@radix-ui/react-skeleton": "^1.0.4",
"@radix-ui/react-slider": "^1.1.2",
"@radix-ui/react-slot": "^1.0.2",
"@radix-ui/react-switch": "^1.0.3",
"@radix-ui/react-tabs": "^1.0.4",
"@radix-ui/react-textarea": "^1.0.4",
"@radix-ui/react-toast": "^1.1.5",
"@radix-ui/react-toggle": "^1.0.3",
"@radix-ui/react-tooltip": "^1.0.7",
"@tanstack/react-query": "^5.25.0",
"@tanstack/react-table": "^8.13.2",
"@vercel/analytics": "^1.2.2",
"@vercel/speed-insights": "^1.0.10",
"ai": "^3.0.9",
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.0",
"cmdk": "^0.2.1",
"date-fns": "^3.3.1",
"framer-motion": "^11.0.6",
"langchain": "^0.1.25",
"lucide-react": "^0.336.0",
"next": "14.1.0",
"next-auth": "^4.24.6",
"next-themes": "^0.2.1",
"openai": "^4.28.4",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-hook-form": "^7.50.1",
"react-hot-toast": "^2.4.1",
"react-markdown": "^9.0.1",
"react-syntax-highlighter": "^15.5.0",
"recharts": "^2.12.1",
"remark-gfm": "^4.0.0",
"socket.io-client": "^4.7.4",
"tailwind-merge": "^2.2.1",
"tailwindcss-animate": "^1.0.7",
"vaul": "^0.9.0",
"zod": "^3.22.4",
"zustand": "^4.5.1"
},
"devDependencies": {
"@next/bundle-analyzer": "^14.1.0",
"@storybook/addon-essentials": "^7.6.17",
"@storybook/addon-interactions": "^7.6.17",
"@storybook/addon-links": "^7.6.17",
"@storybook/addon-onboarding": "^1.0.11",
"@storybook/blocks": "^7.6.17",
"@storybook/nextjs": "^7.6.17",
"@storybook/react": "^7.6.17",
"@storybook/test": "^7.6.17",
"@testing-library/jest-dom": "^6.4.2",
"@testing-library/react": "^14.2.1",
"@testing-library/user-event": "^14.5.2",
"@types/jest": "^29.5.12",
"@types/node": "^20.11.20",
"@types/react": "^18.2.57",
"@types/react-dom": "^18.2.19",
"@types/react-syntax-highlighter": "^15.5.11",
"@typescript-eslint/eslint-plugin": "^7.0.2",
"@typescript-eslint/parser": "^7.0.2",
"autoprefixer": "^10.4.17",
"cross-env": "^7.0.3",
"eslint": "^8.56.0",
"eslint-config-next": "14.1.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-storybook": "^0.8.0",
"jest": "^29.7.0",
"jest-environment-jsdom": "^29.7.0",
"postcss": "^8.4.35",
"prettier": "^3.2.5",
"prisma": "^5.10.2",
"storybook": "^7.6.17",
"tailwindcss": "^3.4.1",
"typescript": "^5.3.3"
},
"keywords": [
"ai",
"agents",
"platform",
"langchain",
"openai",
"nextjs",
"typescript",
"ai-platform",
"multi-agent",
"conversational-ai"
],
"author": {
"name": "AI Agent Platform Team"
},
"license": "MIT",
"engines": {
"node": ">=18.0.0"
}
}
6 changes: 6 additions & 0 deletions postcss.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}
Loading