Showing preview only (910K chars total). Download the full file or copy to clipboard to get everything.
Repository: reworkd/AgentGPT
Branch: main
Commit: 18b073ab05b2
Files: 518
Total size: 24.9 MB
Directory structure:
gitextract_0gj4cfja/
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-report.yaml
│ │ ├── config.yml
│ │ ├── docs.yml
│ │ └── feature-request.yaml
│ ├── PULL_REQUEST_TEMPLATE/
│ │ └── pull_request_template.md
│ ├── SECURITY.md
│ ├── SUPPORT.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── node.js.yml
│ ├── python.yml
│ ├── sponsors.yml
│ └── webhooks.yml
├── .gitignore
├── LICENSE
├── README.md
├── cli/
│ ├── .gitignore
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── envGenerator.js
│ │ ├── helpers.js
│ │ ├── index.js
│ │ └── questions/
│ │ ├── existingEnvQuestions.js
│ │ ├── newEnvQuestions.js
│ │ └── sharedQuestions.js
│ └── tsconfig.json
├── db/
│ └── Dockerfile
├── docker-compose.yml
├── docs/
│ ├── README.hu-Cs4K1Sr4C.md
│ ├── README.md
│ ├── README.zh-HANS.md
│ ├── developers/
│ │ ├── api-keys.mdx
│ │ ├── file-downloads.mdx
│ │ └── sdk.mdx
│ ├── docs.json
│ ├── features/
│ │ ├── deduplication.mdx
│ │ ├── exports/
│ │ │ ├── api-exports.mdx
│ │ │ ├── bulk-exports.mdx
│ │ │ └── overview.mdx
│ │ ├── file-downloads.mdx
│ │ ├── scheduling.mdx
│ │ └── templates.mdx
│ ├── introduction.mdx
│ ├── key-concepts.mdx
│ └── schemas.mdx
├── next/
│ ├── .dockerignore
│ ├── .eslintrc.json
│ ├── .gitignore
│ ├── .husky/
│ │ ├── .gitignore
│ │ └── pre-commit
│ ├── Dockerfile
│ ├── __mocks__/
│ │ └── matchMedia.mock.ts
│ ├── __tests__/
│ │ ├── message-service.test.ts
│ │ ├── stripe.sh
│ │ ├── whitespace.test.ts
│ │ └── with-retries.test.ts
│ ├── entrypoint.sh
│ ├── jest.config.cjs
│ ├── next-i18next.config.js
│ ├── next.config.mjs
│ ├── package.json
│ ├── postcss.config.cjs
│ ├── posts/
│ │ └── Understanding-AgentGPT.mdx
│ ├── prettier.config.cjs
│ ├── prisma/
│ │ ├── .gitignore
│ │ ├── useMysql.sh
│ │ └── useSqlite.sh
│ ├── public/
│ │ ├── locales/
│ │ │ ├── de/
│ │ │ │ ├── chat.json
│ │ │ │ ├── chat.missing.json
│ │ │ │ ├── common.json
│ │ │ │ ├── drawer.json
│ │ │ │ ├── errors.json
│ │ │ │ ├── help.json
│ │ │ │ ├── indexPage.json
│ │ │ │ ├── languages.json
│ │ │ │ └── settings.json
│ │ │ ├── en/
│ │ │ │ ├── chat.json
│ │ │ │ ├── chat.missing.json
│ │ │ │ ├── common.json
│ │ │ │ ├── common.missing.json
│ │ │ │ ├── drawer.json
│ │ │ │ ├── errors.json
│ │ │ │ ├── help.json
│ │ │ │ ├── indexPage.json
│ │ │ │ ├── languages.json
│ │ │ │ └── settings.json
│ │ │ ├── es/
│ │ │ │ ├── chat.json
│ │ │ │ ├── chat.missing.json
│ │ │ │ ├── common.json
│ │ │ │ ├── drawer.json
│ │ │ │ ├── errors.json
│ │ │ │ ├── help.json
│ │ │ │ ├── indexPage.json
│ │ │ │ ├── languages.json
│ │ │ │ └── settings.json
│ │ │ ├── fr/
│ │ │ │ ├── chat.json
│ │ │ │ ├── chat.missing.json
│ │ │ │ ├── common.json
│ │ │ │ ├── drawer.json
│ │ │ │ ├── errors.json
│ │ │ │ ├── help.json
│ │ │ │ ├── indexPage.json
│ │ │ │ ├── languages.json
│ │ │ │ └── settings.json
│ │ │ ├── hr/
│ │ │ │ ├── chat.json
│ │ │ │ ├── chat.missing.json
│ │ │ │ ├── common.json
│ │ │ │ ├── drawer.json
│ │ │ │ ├── errors.json
│ │ │ │ ├── help.json
│ │ │ │ ├── indexPage.json
│ │ │ │ ├── languages.json
│ │ │ │ └── settings.json
│ │ │ ├── hu/
│ │ │ │ ├── chat.json
│ │ │ │ ├── chat.missing.json
│ │ │ │ ├── common.json
│ │ │ │ ├── drawer.json
│ │ │ │ ├── errors.json
│ │ │ │ ├── help.json
│ │ │ │ ├── indexPage.json
│ │ │ │ ├── languages.json
│ │ │ │ └── settings.json
│ │ │ ├── it/
│ │ │ │ ├── chat.json
│ │ │ │ ├── chat.missing.json
│ │ │ │ ├── common.json
│ │ │ │ ├── drawer.json
│ │ │ │ ├── errors.json
│ │ │ │ ├── help.json
│ │ │ │ ├── indexPage.json
│ │ │ │ ├── languages.json
│ │ │ │ └── settings.json
│ │ │ ├── ja/
│ │ │ │ ├── chat.json
│ │ │ │ ├── chat.missing.json
│ │ │ │ ├── common.json
│ │ │ │ ├── drawer.json
│ │ │ │ ├── errors.json
│ │ │ │ ├── help.json
│ │ │ │ ├── indexPage.json
│ │ │ │ ├── languages.json
│ │ │ │ └── settings.json
│ │ │ ├── ko/
│ │ │ │ ├── chat.json
│ │ │ │ ├── chat.missing.json
│ │ │ │ ├── common.json
│ │ │ │ ├── drawer.json
│ │ │ │ ├── errors.json
│ │ │ │ ├── help.json
│ │ │ │ ├── indexPage.json
│ │ │ │ ├── languages.json
│ │ │ │ └── settings.json
│ │ │ ├── lt/
│ │ │ │ ├── chat.json
│ │ │ │ ├── chat.missing.json
│ │ │ │ ├── common.json
│ │ │ │ ├── drawer.json
│ │ │ │ ├── errors.json
│ │ │ │ ├── help.json
│ │ │ │ ├── indexPage.json
│ │ │ │ ├── languages.json
│ │ │ │ └── settings.json
│ │ │ ├── nl/
│ │ │ │ ├── chat.json
│ │ │ │ ├── chat.missing.json
│ │ │ │ ├── common.json
│ │ │ │ ├── drawer.json
│ │ │ │ ├── errors.json
│ │ │ │ ├── help.json
│ │ │ │ ├── indexPage.json
│ │ │ │ ├── languages.json
│ │ │ │ └── settings.json
│ │ │ ├── pl/
│ │ │ │ ├── chat.json
│ │ │ │ ├── chat.missing.json
│ │ │ │ ├── common.json
│ │ │ │ ├── drawer.json
│ │ │ │ ├── errors.json
│ │ │ │ ├── help.json
│ │ │ │ ├── indexPage.json
│ │ │ │ ├── languages.json
│ │ │ │ └── settings.json
│ │ │ ├── pt/
│ │ │ │ ├── chat.json
│ │ │ │ ├── chat.missing.json
│ │ │ │ ├── common.json
│ │ │ │ ├── drawer.json
│ │ │ │ ├── errors.json
│ │ │ │ ├── help.json
│ │ │ │ ├── indexPage.json
│ │ │ │ ├── languages.json
│ │ │ │ └── settings.json
│ │ │ ├── ro/
│ │ │ │ ├── chat.json
│ │ │ │ ├── chat.missing.json
│ │ │ │ ├── common.json
│ │ │ │ ├── drawer.json
│ │ │ │ ├── errors.json
│ │ │ │ ├── help.json
│ │ │ │ ├── indexPage.json
│ │ │ │ ├── languages.json
│ │ │ │ └── settings.json
│ │ │ ├── ru/
│ │ │ │ ├── chat.json
│ │ │ │ ├── chat.missing.json
│ │ │ │ ├── common.json
│ │ │ │ ├── drawer.json
│ │ │ │ ├── errors.json
│ │ │ │ ├── help.json
│ │ │ │ ├── indexPage.json
│ │ │ │ ├── languages.json
│ │ │ │ └── settings.json
│ │ │ ├── sk/
│ │ │ │ ├── chat.json
│ │ │ │ ├── chat.missing.json
│ │ │ │ ├── common.json
│ │ │ │ ├── drawer.json
│ │ │ │ ├── errors.json
│ │ │ │ ├── help.json
│ │ │ │ ├── indexPage.json
│ │ │ │ ├── languages.json
│ │ │ │ └── settings.json
│ │ │ ├── tr/
│ │ │ │ ├── chat.json
│ │ │ │ ├── chat.missing.json
│ │ │ │ ├── common.json
│ │ │ │ ├── drawer.json
│ │ │ │ ├── errors.json
│ │ │ │ ├── help.json
│ │ │ │ ├── indexPage.json
│ │ │ │ ├── languages.json
│ │ │ │ └── settings.json
│ │ │ ├── uk/
│ │ │ │ ├── chat.json
│ │ │ │ ├── chat.missing.json
│ │ │ │ ├── common.json
│ │ │ │ ├── drawer.json
│ │ │ │ ├── errors.json
│ │ │ │ ├── help.json
│ │ │ │ ├── indexPage.json
│ │ │ │ ├── languages.json
│ │ │ │ └── settings.json
│ │ │ ├── zh/
│ │ │ │ ├── chat.json
│ │ │ │ ├── chat.missing.json
│ │ │ │ ├── common.json
│ │ │ │ ├── drawer.json
│ │ │ │ ├── errors.json
│ │ │ │ ├── help.json
│ │ │ │ ├── indexPage.json
│ │ │ │ ├── languages.json
│ │ │ │ └── settings.json
│ │ │ └── zhtw/
│ │ │ ├── chat.json
│ │ │ ├── chat.missing.json
│ │ │ ├── common.json
│ │ │ ├── drawer.json
│ │ │ ├── errors.json
│ │ │ ├── help.json
│ │ │ ├── indexPage.json
│ │ │ ├── languages.json
│ │ │ └── settings.json
│ │ ├── orb-v1-medium.webm
│ │ ├── robots.txt
│ │ └── site.webmanifest
│ ├── src/
│ │ ├── components/
│ │ │ ├── Accordion.tsx
│ │ │ ├── AppHead.tsx
│ │ │ ├── AppTitle.tsx
│ │ │ ├── Badge.tsx
│ │ │ ├── BannerBadge.tsx
│ │ │ ├── Button.tsx
│ │ │ ├── Globe.tsx
│ │ │ ├── GlowWrapper.tsx
│ │ │ ├── HeroCard.tsx
│ │ │ ├── Input.tsx
│ │ │ ├── Label.tsx
│ │ │ ├── Menu.tsx
│ │ │ ├── NavBar.tsx
│ │ │ ├── Ping.tsx
│ │ │ ├── PrimaryButton.tsx
│ │ │ ├── QuestionInput.tsx
│ │ │ ├── Switch.tsx
│ │ │ ├── TextButton.tsx
│ │ │ ├── Tooltip.tsx
│ │ │ ├── WindowButton.tsx
│ │ │ ├── console/
│ │ │ │ ├── AgentControls.tsx
│ │ │ │ ├── ChatMessage.tsx
│ │ │ │ ├── ChatWindow.tsx
│ │ │ │ ├── ChatWindowTitle.tsx
│ │ │ │ ├── ExampleAgentButton.tsx
│ │ │ │ ├── ExampleAgents.tsx
│ │ │ │ ├── MacWindowHeader.tsx
│ │ │ │ ├── MarkdownRenderer.tsx
│ │ │ │ ├── SourceCard.tsx
│ │ │ │ ├── SourceLink.tsx
│ │ │ │ └── SummarizeButton.tsx
│ │ │ ├── dialog/
│ │ │ │ ├── HelpDialog.tsx
│ │ │ │ ├── SignInDialog.tsx
│ │ │ │ └── ToolsDialog.tsx
│ │ │ ├── drawer/
│ │ │ │ ├── DrawerItemButton.tsx
│ │ │ │ ├── LeftSidebar.tsx
│ │ │ │ ├── Sidebar.tsx
│ │ │ │ └── TaskSidebar.tsx
│ │ │ ├── index/
│ │ │ │ ├── chat.tsx
│ │ │ │ └── landing.tsx
│ │ │ ├── landing/
│ │ │ │ ├── Backing.tsx
│ │ │ │ ├── ConnectorSection.tsx
│ │ │ │ ├── FooterLinks.tsx
│ │ │ │ ├── Hero.tsx
│ │ │ │ ├── OpenSource.tsx
│ │ │ │ └── Section.tsx
│ │ │ ├── loader.tsx
│ │ │ ├── motions/
│ │ │ │ ├── CycleIcons.tsx
│ │ │ │ ├── FadeIn.tsx
│ │ │ │ ├── FadeOut.tsx
│ │ │ │ ├── HideShow.tsx
│ │ │ │ ├── expand.tsx
│ │ │ │ └── popin.tsx
│ │ │ ├── pdf/
│ │ │ │ ├── MyDocument.tsx
│ │ │ │ └── PDFButton.tsx
│ │ │ ├── sidebar/
│ │ │ │ ├── AuthItem.tsx
│ │ │ │ ├── LinkIconItem.tsx
│ │ │ │ ├── LinkItem.tsx
│ │ │ │ └── links.tsx
│ │ │ ├── templates/
│ │ │ │ ├── TemplateCard.tsx
│ │ │ │ ├── TemplateData.tsx
│ │ │ │ └── TemplateSearch.tsx
│ │ │ ├── toast.tsx
│ │ │ └── utils/
│ │ │ └── helpers.tsx
│ │ ├── env/
│ │ │ ├── client.mjs
│ │ │ ├── schema.mjs
│ │ │ └── server.mjs
│ │ ├── hooks/
│ │ │ ├── useAgent.ts
│ │ │ ├── useAuth.ts
│ │ │ ├── useModels.ts
│ │ │ ├── useMouseMovement.ts
│ │ │ ├── useSID.ts
│ │ │ ├── useSettings.ts
│ │ │ └── useTools.ts
│ │ ├── layout/
│ │ │ ├── dashboard.tsx
│ │ │ ├── default.tsx
│ │ │ └── grid.tsx
│ │ ├── lib/
│ │ │ └── posts.ts
│ │ ├── pages/
│ │ │ ├── _app.tsx
│ │ │ ├── agent/
│ │ │ │ └── index.tsx
│ │ │ ├── api/
│ │ │ │ ├── auth/
│ │ │ │ │ └── [...nextauth].ts
│ │ │ │ └── trpc/
│ │ │ │ └── [trpc].ts
│ │ │ ├── blog/
│ │ │ │ └── [slug].tsx
│ │ │ ├── blog.tsx
│ │ │ ├── home.tsx
│ │ │ ├── index.tsx
│ │ │ ├── settings.tsx
│ │ │ ├── signin.tsx
│ │ │ ├── templates.tsx
│ │ │ └── welcome.tsx
│ │ ├── server/
│ │ │ ├── api/
│ │ │ │ ├── root.ts
│ │ │ │ ├── routers/
│ │ │ │ │ └── agentRouter.ts
│ │ │ │ └── trpc.ts
│ │ │ ├── auth/
│ │ │ │ ├── auth.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── local-auth.ts
│ │ │ └── db.ts
│ │ ├── services/
│ │ │ ├── agent/
│ │ │ │ ├── agent-api.ts
│ │ │ │ ├── agent-run-model.tsx
│ │ │ │ ├── agent-work/
│ │ │ │ │ ├── agent-work.ts
│ │ │ │ │ ├── analyze-task-work.ts
│ │ │ │ │ ├── chat-work.ts
│ │ │ │ │ ├── create-task-work.ts
│ │ │ │ │ ├── execute-task-work.ts
│ │ │ │ │ ├── start-task-work.ts
│ │ │ │ │ └── summarize-work.ts
│ │ │ │ ├── analysis.ts
│ │ │ │ ├── autonomous-agent.ts
│ │ │ │ └── message-service.ts
│ │ │ ├── api/
│ │ │ │ └── org.ts
│ │ │ ├── api-utils.ts
│ │ │ ├── fetch-utils.ts
│ │ │ ├── stream-utils.ts
│ │ │ └── workflow/
│ │ │ └── oauthApi.ts
│ │ ├── stores/
│ │ │ ├── agentInputStore.ts
│ │ │ ├── agentStore.ts
│ │ │ ├── configStore.ts
│ │ │ ├── helpers.ts
│ │ │ ├── index.ts
│ │ │ ├── messageStore.ts
│ │ │ ├── modelSettingsStore.ts
│ │ │ └── taskStore.ts
│ │ ├── styles/
│ │ │ └── globals.css
│ │ ├── types/
│ │ │ ├── errors.ts
│ │ │ ├── index.ts
│ │ │ ├── message.ts
│ │ │ ├── modelSettings.ts
│ │ │ ├── next-auth.d.ts
│ │ │ ├── propTypes.ts
│ │ │ └── task.ts
│ │ ├── ui/
│ │ │ ├── button.tsx
│ │ │ ├── checkbox.tsx
│ │ │ ├── combox.tsx
│ │ │ ├── dialog.tsx
│ │ │ ├── highlight.tsx
│ │ │ ├── input.tsx
│ │ │ └── select.tsx
│ │ └── utils/
│ │ ├── api.ts
│ │ ├── constants.ts
│ │ ├── helpers.ts
│ │ ├── i18next.n.ts
│ │ ├── interfaces.ts
│ │ ├── languages.ts
│ │ ├── translations.ts
│ │ ├── user.ts
│ │ └── whitespace.ts
│ ├── tailwind.config.cjs
│ ├── tsconfig.json
│ └── wait-for-db.sh
├── platform/
│ ├── .dockerignore
│ ├── .editorconfig
│ ├── .flake8
│ ├── .gitignore
│ ├── .pre-commit-config.yaml
│ ├── Dockerfile
│ ├── README.md
│ ├── entrypoint.sh
│ ├── pyproject.toml
│ └── reworkd_platform/
│ ├── __init__.py
│ ├── __main__.py
│ ├── conftest.py
│ ├── constants.py
│ ├── db/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── crud/
│ │ │ ├── __init__.py
│ │ │ ├── agent.py
│ │ │ ├── base.py
│ │ │ ├── oauth.py
│ │ │ ├── organization.py
│ │ │ └── user.py
│ │ ├── dependencies.py
│ │ ├── meta.py
│ │ ├── models/
│ │ │ ├── __init__.py
│ │ │ ├── agent.py
│ │ │ ├── auth.py
│ │ │ └── user.py
│ │ └── utils.py
│ ├── logging.py
│ ├── schemas/
│ │ ├── __init__.py
│ │ ├── agent.py
│ │ └── user.py
│ ├── services/
│ │ ├── __init__.py
│ │ ├── anthropic.py
│ │ ├── aws/
│ │ │ ├── __init__.py
│ │ │ └── s3.py
│ │ ├── oauth_installers.py
│ │ ├── pinecone/
│ │ │ ├── __init__.py
│ │ │ ├── lifetime.py
│ │ │ └── pinecone.py
│ │ ├── security.py
│ │ ├── ssl.py
│ │ └── tokenizer/
│ │ ├── __init__.py
│ │ ├── dependencies.py
│ │ ├── lifetime.py
│ │ └── token_service.py
│ ├── settings.py
│ ├── tests/
│ │ ├── __init__.py
│ │ ├── agent/
│ │ │ ├── test_analysis.py
│ │ │ ├── test_crud.py
│ │ │ ├── test_model_factory.py
│ │ │ ├── test_task_output_parser.py
│ │ │ └── test_tools.py
│ │ ├── memory/
│ │ │ └── memory_with_fallback_test.py
│ │ ├── test_dependancies.py
│ │ ├── test_helpers.py
│ │ ├── test_oauth_installers.py
│ │ ├── test_reworkd_platform.py
│ │ ├── test_s3.py
│ │ ├── test_schemas.py
│ │ ├── test_security.py
│ │ ├── test_settings.py
│ │ └── test_token_service.py
│ ├── timer.py
│ └── web/
│ ├── __init__.py
│ ├── api/
│ │ ├── __init__.py
│ │ ├── agent/
│ │ │ ├── __init__.py
│ │ │ ├── agent_service/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── agent_service.py
│ │ │ │ ├── agent_service_provider.py
│ │ │ │ ├── mock_agent_service.py
│ │ │ │ └── open_ai_agent_service.py
│ │ │ ├── analysis.py
│ │ │ ├── dependancies.py
│ │ │ ├── helpers.py
│ │ │ ├── model_factory.py
│ │ │ ├── prompts.py
│ │ │ ├── stream_mock.py
│ │ │ ├── task_output_parser.py
│ │ │ ├── tools/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── code.py
│ │ │ │ ├── conclude.py
│ │ │ │ ├── image.py
│ │ │ │ ├── open_ai_function.py
│ │ │ │ ├── reason.py
│ │ │ │ ├── search.py
│ │ │ │ ├── sidsearch.py
│ │ │ │ ├── tool.py
│ │ │ │ ├── tools.py
│ │ │ │ ├── utils.py
│ │ │ │ └── wikipedia_search.py
│ │ │ └── views.py
│ │ ├── auth/
│ │ │ ├── __init__.py
│ │ │ └── views.py
│ │ ├── dependencies.py
│ │ ├── error_handling.py
│ │ ├── errors.py
│ │ ├── http_responses.py
│ │ ├── memory/
│ │ │ ├── __init__.py
│ │ │ ├── memory.py
│ │ │ ├── memory_with_fallback.py
│ │ │ └── null.py
│ │ ├── metadata.py
│ │ ├── models/
│ │ │ ├── __init__.py
│ │ │ └── views.py
│ │ ├── monitoring/
│ │ │ ├── __init__.py
│ │ │ └── views.py
│ │ └── router.py
│ ├── application.py
│ └── lifetime.py
├── scripts/
│ ├── post-sync.sh
│ └── prepare-sync.sh
├── setup.bat
└── setup.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
================================================
FILE: .gitattributes
================================================
# Auto detect text files and perform LF normalization
* text=auto
================================================
FILE: .github/CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at twitter
@asimdotshrestha.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.
================================================
FILE: .github/CONTRIBUTING.md
================================================
# Contributing to AgentGPT
First of all, thank you for your interest in contributing to AgentGPT! We appreciate the time and effort you're willing to invest in making our project better. This document provides guidelines and information to make the contribution process as smooth as possible.
## Table of Contents
- [Code of Conduct](#code-of-conduct)
- [Getting Started](#getting-started)
- [How to Contribute](#how-to-contribute)
- [Reporting Bugs](#reporting-bugs)
- [Suggesting Enhancements](#suggesting-enhancements)
- [Submitting Pull Requests](#submitting-pull-requests)
- [Style Guidelines](#style-guidelines)
- [Code Style](#code-style)
- [Commit Messages](#commit-messages)
- [Additional Resources](#additional-resources)
## Code of Conduct
All contributors are expected to adhere to our [Code of Conduct](CODE_OF_CONDUCT.md). Please read it before participating in the AgentGPT community.
## Getting Started
1. Fork the repository and clone it to your local machine.
2. Set up the development environment by following the instructions in the [README.md](https://github.com/reworkd/AgentGPT/tree/main/README.md) file.
3. Explore the codebase, run tests, and verify that everything works as expected.
## How to Contribute
### Reporting Bugs
If you encounter a bug or issue while using AgentGPT, please open a new issue on the [GitHub Issues](https://github.com/reworkd/AgentGPT/issues) page. Provide a clear and concise description of the problem, steps to reproduce it, and any relevant error messages or logs.
### Suggesting Enhancements
We welcome ideas for improvements and new features. To suggest an enhancement, open a new issue on the [GitHub Issues](https://github.com/reworkd/AgentGPT/issues) page. Describe the enhancement in detail, explain the use case, and outline the benefits it would bring to the project.
### Submitting Pull Requests
1. Create a new branch for your feature or bugfix. Use a descriptive name like `feature/your-feature-name` or `fix/your-bugfix-name`.
2. Make your changes, following the [Style Guidelines](#style-guidelines) below.
3. Test your changes and ensure that they don't introduce new issues or break existing functionality.
4. Commit your changes, following the [commit message guidelines](#commit-messages).
5. Push your branch to your fork on GitHub.
6. Open a new pull request against the `main` branch of the Wolverine repository. Include a clear and concise description of your changes, referencing any related issues.
## Style Guidelines
### Code Style
AgentGPT uses [ESLint](https://eslint.org/) as its code style guide. Please ensure that your code follows these guidelines.
### Commit Messages
Write clear and concise commit messages that briefly describe the changes made in each commit. Use the imperative mood and start with a capitalized verb, e.g., "Add new feature" or "Fix bug in function".
## Additional Resources
- [GitHub Help](https://help.github.com/)
- [GitHub Pull Request Documentation](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests)
- [ESLint Style Guide](https://eslint.org/)
Thank you once again for your interest in contributing to AgentGPT. We look forward to collaborating with you and creating an even better project together!
================================================
FILE: .github/FUNDING.yml
================================================
github: reworkd-admin
================================================
FILE: .github/ISSUE_TEMPLATE/bug-report.yaml
================================================
name: Bug Report
description: File a bug report
labels: ["bug", "needs triage"]
body:
- type: markdown
attributes:
value: |
## Before you start
Please **make sure you are on the latest version.**
If you encountered the issue after you installed, updated, or reloaded, **please try restarting before reporting the bug**.
- type: checkboxes
id: no-duplicate-issues
attributes:
label: "Please check that this issue hasn't been reported before."
description: "The **Label filters** may help make your search more focussed."
options:
- label: "I searched previous [Bug Reports](https://github.com/reworkd/AgentGPT/labels/bug) didn't find any similar reports."
required: true
- type: textarea
id: expected
attributes:
label: Expected Behavior
description: Tell us what **should** happen.
validations:
required: true
- type: textarea
id: what-happened
attributes:
label: Current behaviour
description: |
Tell us what happens instead of the expected behavior.
Adding of screenshots really helps.
validations:
required: true
- type: textarea
id: reproduce
attributes:
label: Steps to reproduce
description: |
Which exact steps can a developer take to reproduce the issue?
The more detail you provide, the easier it will be to narrow down and fix the bug.
Please paste in tasks and/or queries **as text, not screenshots**.
placeholder: |
Example of the level of detail needed to reproduce any bugs efficiently and reliably.
1. Go to the '...' page.
2. Click on the '...' button.
3. Scroll down to '...'.
4. Observe the error.
validations:
required: true
- type: textarea
id: possible-solution
attributes:
label: Possible solution
placeholder: I think that change foo to type bar would fix it...
description: |
Not obligatory, but please suggest a fix or reason for the bug, if you have an idea.
- type: checkboxes
id: operating-systems
attributes:
label: Which Operating Systems are you using?
description: You may select more than one.
options:
- label: Android
- label: iPhone/iPad
- label: Linux
- label: macOS
- label: Windows
- type: checkboxes
id: acknowledgements
attributes:
label: 'Acknowledgements'
description: 'Please confirm the following:'
options:
- label: 'My issue title is concise, descriptive, and in title casing.'
required: true
- label: 'I have searched the existing issues to make sure this bug has not been reported yet.'
required: true
- label: 'I am using the latest version of AgentGPT.'
required: true
- label: 'I have provided enough information for the maintainers to reproduce and diagnose the issue.'
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: true
contact_links:
- name: Ask a question
url: https://github.com/reworkd/AgentGPT/discussions/categories/q-a
about: Ask questions and discuss with other community members
- name: Discuss the Project in Discord
url: https://discord.gg/jjYCfaqu
================================================
FILE: .github/ISSUE_TEMPLATE/docs.yml
================================================
name: Documentation Improvement / Clarity
description: Make a suggestion to improve the project documentation.
labels: ['needs triage']
body:
- type: markdown
attributes:
value: '## :book: Documentation :book:'
- type: markdown
attributes:
value: |
* Ask questions in [Discord](https://discord.gg/jjYCfaqu).
* Before you file an issue read the [Contributing guide](https://github.com/reworkd/AgentGPT/tree/main/.github/CONTRIBUTING.md).
* Check to make sure someone hasn't already opened a [similar issue](https://github.com/reworkd/AgentGPT/issues).
- type: textarea
attributes:
label: What piece of documentation is affected?
description: Please link to the article you'd like to see updated.
validations:
required: true
- type: textarea
attributes:
label: What part(s) of the article would you like to see updated?
description: |
- Give as much detail as you can to help us understand the change you want to see.
- Why should the docs be changed? What use cases does it support?
- What is the expected outcome?
validations:
required: true
- type: textarea
attributes:
label: Additional Information
description: Add any other context or screenshots about the feature request here.
validations:
required: false
- type: checkboxes
id: acknowledgements
attributes:
label: 'Acknowledgements'
description: 'Please confirm the following:'
options:
- label: 'My issue title is concise, descriptive, and in title casing.'
required: true
- label: 'I have searched the existing issues to make sure this feature has not been requested yet.'
required: true
- label: 'I have provided enough information for the maintainers to understand and evaluate this request.'
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/feature-request.yaml
================================================
name: Feature Request / Enhancement
description: Suggest a new feature or feature enhancement for the project
labels: ["enhancement", "needs triage"]
body:
- type: checkboxes
id: no-duplicate-issues
attributes:
label: "⚠️ Please check that this feature request hasn't been suggested before."
description: "There are two locations for previous feature requests. Please search in both. Thank you. The **Label filters** may help make your search more focussed."
options:
- label: "I searched previous [Ideas in Discussions](https://github.com/reworkd/AgentGPT/discussions/categories/ideas) didn't find any similar feature requests."
required: true
- label: "I searched previous [Issues](https://github.com/reworkd/AgentGPT/labels/enhancement) didn't find any similar feature requests."
required: true
- type: textarea
id: feature-description
validations:
required: true
attributes:
label: "🔖 Feature description"
description: "A clear and concise description of what the feature request is."
placeholder: "You should add ..."
- type: textarea
id: solution
validations:
required: true
attributes:
label: "✔️ Solution"
description: "A clear and concise description of what you want to happen, and why."
placeholder: "In my use-case, ..."
- type: textarea
id: alternatives
validations:
required: false
attributes:
label: "❓ Alternatives"
description: "A clear and concise description of any alternative solutions or features you've considered."
placeholder: "I have considered ..."
- type: textarea
id: additional-context
validations:
required: false
attributes:
label: "📝 Additional Context"
description: "Add any other context or screenshots about the feature request here."
placeholder: "..."
- type: checkboxes
id: acknowledgements
attributes:
label: 'Acknowledgements'
description: 'Please confirm the following:'
options:
- label: 'My issue title is concise, descriptive, and in title casing.'
required: true
- label: 'I have searched the existing issues to make sure this feature has not been requested yet.'
required: true
- label: 'I have provided enough information for the maintainers to understand and evaluate this request.'
required: true
================================================
FILE: .github/PULL_REQUEST_TEMPLATE/pull_request_template.md
================================================
<!--- Provide a general summary of your changes in the Title above -->
# Description
<!--- Describe your changes in detail -->
## Motivation and Context
<!--- Why is this change required? What problem does it solve? -->
<!--- If it fixes an open issue, please link to the issue here. -->
## How has this been tested?
<!--- Please describe in detail how you tested your changes. -->
<!--- Include details of your testing environment, tests ran to see how -->
<!--- your change affects other areas of the code, etc. -->
## Screenshots (if appropriate)
## Types of changes
<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: -->
Changes visible to users:
- [ ] **Bug fix** (prefix: `fix` - non-breaking change which fixes an issue)
- [ ] **New feature** (prefix: `feat` - non-breaking change which adds functionality)
- [ ] **Breaking change** (prefix: `feat!!` or `fix!!` - fix or feature that would cause existing functionality to not work as expected)
- [ ] **Documentation** (prefix: `docs` - improvements to any documentation content **for users**)
- [ ] **Homepage** (prefix: `page` - improvements to the [Homepage](https://agentgpt.reworkd.ai/) #{HOMEPAGE} should lead to the place where one could actually change the homepage
- [ ] **Contributing Guidelines** (prefix: `contrib` - any improvements to documentation content **for contributors** - see [Contributing](https://github.com/reworkd/AgentGPT/tree/main/.github/CONTRIBUTING.md)
Internal changes:
- [ ] **Refactor** (prefix: `refactor` - non-breaking change which only improves the design or structure of existing code, and making no changes to its external behaviour)
- [ ] **Tests** (prefix: `test` - additions and improvements to unit tests and the smoke tests)
- [ ] **Infrastructure** (prefix: `chore` - examples include GitHub Actions, issue templates)
## Checklist
<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
- [ ] My code follows the code style of this project and passes `npm run lint`.
- [ ] My change requires a change to the documentation.
- [ ] I have [updated the documentation](https://reworkd.ai/docs) accordingly. # {DOCUMENTATION} <------- this should lead to the doc that could be changed/ didnt find it
- [ ] My change has adequate [Unit Test coverage]({PLACEHOLDER}).
## Terms
<!--
By submitting this pull request, you must agree to follow our
[contributing guide](https://github.com/reworkd/AgentGPT/tree/main/.github/CONTRIBUTING.md) and
[Code of Conduct](https://github.com/reworkd/AgentGPT/tree/main/.github/CODE_OF_CONDUCT.md).
Put an x in the boxes to confirm you agree.
-->
- [ ] My contribution follow this project's [contributing guide](https://github.com/reworkd/AgentGPT/tree/main/.github/CONTRIBUTING.md)
- [ ] I agree to follow this project's [Code of Conduct](https://github.com/reworkd/AgentGPT/tree/main/.github/CODE_OF_CONDUCT.md)
================================================
FILE: .github/SECURITY.md
================================================
# Security Policy
## Supported Versions
Due to the nature of the fast development that is happening in this project, only the latest released version can be supported.
## Reporting a Vulnerability
If you find a vulnerability, please either report a vulnerability [here](https://github.com/reworkd/AgentGPT/security) or contact us on twitter @asimdotshrestha. Please don't create a GitHub before contacting a maintainer to allow us to fix the vulnerability before others can take advantage of it.
================================================
FILE: .github/SUPPORT.md
================================================
# Support
If you need help with this project or have questions, please:
1. Check the documentation.
2. Search the existing issues and pull requests.
3. Create a new issue if your question is not answered or your problem is not solved.
Please note that this project is maintained by volunteers who have limited availability. We'll do our best to address your questions and concerns in a timely manner.
================================================
FILE: .github/dependabot.yml
================================================
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: npm
directory: /cli
schedule:
interval: weekly
- package-ecosystem: npm
directory: /next
schedule:
interval: weekly
- package-ecosystem: pip
directory: /platform
schedule:
interval: weekly
================================================
FILE: .github/workflows/node.js.yml
================================================
name: Node.js CI
on:
push:
branches: [ "main" ]
paths:
- 'next/**'
pull_request:
branches: [ "main" ]
paths:
- 'next/**'
jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: next
steps:
- uses: actions/checkout@v3
- name: Use Node.js 18
uses: actions/setup-node@v3
with:
node-version: 18.x
cache: "npm"
cache-dependency-path: next/package-lock.json
- run: npm ci
- run: npm test
env:
OPENAI_API_KEY: sk-0000000000
- run: ./prisma/useSqlite.sh && npm run postinstall
================================================
FILE: .github/workflows/python.yml
================================================
name: Testing Platform
on:
pull_request:
branches: [ "main" ]
paths:
- 'platform/**'
env:
PYTHON_VERSION: "3.11"
jobs:
black:
runs-on: ubuntu-latest
defaults:
run:
working-directory: platform
steps:
- uses: actions/checkout@v3
- name: Install poetry
run: pipx install poetry
- uses: actions/setup-python@v4
with:
python-version: ${{ env.PYTHON_VERSION }}
cache: 'poetry'
- run: poetry install
- name: Run black check
run: poetry run black --check .
mypy:
runs-on: ubuntu-latest
defaults:
run:
working-directory: platform
steps:
- uses: actions/checkout@v3
- name: Install poetry
run: pipx install poetry
- uses: actions/setup-python@v4
with:
python-version: ${{ env.PYTHON_VERSION }}
cache: 'poetry'
- run: poetry install
- name: Run mypy check
run: poetry run mypy .
pytest:
runs-on: ubuntu-latest
defaults:
run:
working-directory: platform
services:
reworkd_platform-db:
image: bitnami/mysql:8.0.30
env:
MYSQL_ROOT_PASSWORD: "reworkd_platform"
MYSQL_ROOT_USER: "reworkd_platform"
MYSQL_DATABASE: "reworkd_platform"
MYSQL_AUTHENTICATION_PLUGIN: "mysql_native_password"
options: >-
--health-cmd="mysqladmin ping -u root"
--health-interval=15s
--health-timeout=5s
--health-retries=6
ports:
- 3306:3306
steps:
- uses: actions/checkout@v3
- name: Install poetry
run: pipx install poetry
- uses: actions/setup-python@v4
with:
python-version: ${{ env.PYTHON_VERSION }}
cache: 'poetry'
- run: poetry install
- name: Run pytest check
run: poetry run pytest -vv --cov="reworkd_platform" .
env:
REWORKD_PLATFORM_HOST: "0.0.0.0"
REWORKD_PLATFORM_DB_HOST: localhost
REWORKD_PLATFORM_KAFKA_BOOTSTRAP_SERVERS: '["localhost:9092"]'
================================================
FILE: .github/workflows/sponsors.yml
================================================
name: Generate Sponsors README
on:
workflow_dispatch:
schedule:
- cron: 0 0 * * *
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎️
uses: actions/checkout@v2
- name: Generate Sponsors 💖
uses: JamesIves/github-sponsors-readme-action@v1.2.2
with:
token: ${{ secrets.SPONSOR_WORKFLOW_PAT }}
file: 'README.md'
minimum: 1399
- name: Create Pull Request
uses: peter-evans/create-pull-request@v5.0.1
with:
token: ${{ secrets.SPONSOR_WORKFLOW_PAT }}
branch: "workflow/sponsors"
title: "🤖 Update Sponsors"
commit-message: "🤖 Update Sponsors"
body: "🤖 Automated pull request created by [sponsors action](https://github.com/reworkd/AgentGPT/actions/workflows/sponsors.yml)"
labels: "documentation"
================================================
FILE: .github/workflows/webhooks.yml
================================================
name: Invoke Deployment Webhooks
on:
workflow_dispatch:
push:
branches: [ "main" ]
jobs:
invoke:
name: Invoke Webhooks
runs-on: ubuntu-latest
environment: production
if: github.repository == 'reworkd/AgentGPT'
steps:
- name: Trigger Webhooks
run: |
curl -L \
-X POST \
-H "Accept: application/vnd.github+json" \
-H ${{ secrets.WEBHOOK_AUTHORIZATION }} \
-H "X-GitHub-Api-Version: 2022-11-28" \
-d '{"ref":"main"}' \
${{ secrets.DEPLOYMENT_WEBHOOK_URL }}
================================================
FILE: .gitignore
================================================
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# database
/prisma/db.sqlite
/prisma/db.sqlite-journal
/db/db.sqlite
# next.js
/.next/
/out/
next-env.d.ts
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
# local env files
# do not commit any .env files to git, except for the .env.example file. https://create.t3.gg/en/usage/env-variables#using-environment-variables
.env*
# vercel
.vercel
# typescript
*.tsbuildinfo
.idea
.swc
# extracted language files
/public/locales/$LOCALES
.eslintcache
# Sentry Auth Token
.sentryclirc
/volumes/
schema.prismae
*.sql
================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
================================================
FILE: README.md
================================================
<p align="center">
<img src="https://raw.githubusercontent.com/reworkd/AgentGPT/main/next/public/banner.png" height="300" alt="AgentGPT Logo"/>
</p>
<p align="center">
<em>🤖 Assemble, configure, and deploy autonomous AI Agent(s) in your browser. 🤖 </em>
</p>
<p align="center">
<img alt="Node version" src="https://img.shields.io/static/v1?label=node&message=%20%3E=18&logo=node.js&color=2334D058" />
<a href="https://github.com/reworkd/AgentGPT/blob/master/README.md"><img src="https://img.shields.io/badge/lang-English-blue.svg" alt="English"></a>
<a href="https://github.com/reworkd/AgentGPT/blob/master/docs/README.zh-HANS.md"><img src="https://img.shields.io/badge/lang-简体中文-red.svg" alt="简体中文"></a>
<a href="https://github.com/reworkd/AgentGPT/blob/master/docs/README.hu-Cs4K1Sr4C.md"><img src="https://img.shields.io/badge/lang-Hungarian-red.svg" alt="Hungarian"></a>
</p>
<p align="center">
<a href="https://agentgpt.reworkd.ai">🔗 Short link</a>
<span> • </span>
<a href="https://reworkd.ai/docs">📚 Docs</a>
<span> • </span>
<a href="https://twitter.com/reworkdai">🐦 Twitter</a>
<span> • </span>
<a href="https://discord.gg/gcmNyAAFfV">📢 Discord</a>
</p>
AgentGPT allows you to configure and deploy Autonomous AI agents.
Name your own custom AI and have it embark on any goal imaginable.
It will attempt to reach the goal by thinking of tasks to do, executing them, and learning from the results 🚀.
---
## ✨ Demo
For the best demo experience, try [our site](https://agentgpt.reworkd.ai) directly :)
[Demo Video](https://github.com/reworkd/AgentGPT/assets/50181239/5348e44a-29a5-4280-a06b-fe1429a8d99e)
## 👨🚀 Getting Started
The easiest way to get started with AgentGPT is automatic setup CLI bundled with the project.
The cli sets up the following for AgentGPT:
- 🔐 [Environment variables](https://github.com/reworkd/AgentGPT/blob/main/.env.example) (and API Keys)
- 🗂️ [Database](https://github.com/reworkd/AgentGPT/tree/main/db) (Mysql)
- 🤖 [Backend](https://github.com/reworkd/AgentGPT/tree/main/platform) (FastAPI)
- 🎨 [Frontend](https://github.com/reworkd/AgentGPT/tree/main/next) (Nextjs)
## Prerequisites :point_up:
Before you get started, please make sure you have the following installed:
- An editor of your choice. For example, [Visual Studio Code (VS Code)](https://code.visualstudio.com/download)
- [Node.js](https://nodejs.org/en/download)
- [Git](https://git-scm.com/downloads)
- [Docker](https://www.docker.com/products/docker-desktop). After installation, please create an account, open up the Docker application, and sign in.
- An [OpenAI API key](https://platform.openai.com/signup)
- A [Serper API Key](https://serper.dev/signup) (optional)
- A [Replicate API Token](https://replicate.com/signin) (optional)
## Getting Started :rocket:
1. **Open your editor**
2. **Open the Terminal** - Typically, you can do this from a 'Terminal' tab or by using a shortcut
(e.g., `Ctrl + ~` for Windows or `Control + ~` for Mac in VS Code).
3. **Clone the Repository and Navigate into the Directory** - Once your terminal is open, you can clone the repository and move into the directory by running the commands below.
**For Mac/Linux users** :apple: :penguin:
```bash
git clone https://github.com/reworkd/AgentGPT.git
cd AgentGPT
./setup.sh
```
**For Windows users** :windows:
```bash
git clone https://github.com/reworkd/AgentGPT.git
cd AgentGPT
./setup.bat
```
4. **Follow the setup instructions from the script** - add the appropriate API keys, and once all of the services are running, travel to [http://localhost:3000](http://localhost:3000) on your web-browser.
Happy hacking! :tada:
## 🚀 Tech Stack
- ✅ **Bootstrapping**: [create-t3-app](https://create.t3.gg) + [FastAPI-template](https://github.com/s3rius/FastAPI-template).
- ✅ **Framework**: [Nextjs 13 + Typescript](https://nextjs.org/) + [FastAPI](https://fastapi.tiangolo.com/)
- ✅ **Auth**: [Next-Auth.js](https://next-auth.js.org)
- ✅ **ORM**: [Prisma](https://prisma.io) & [SQLModel](https://sqlmodel.tiangolo.com/).
- ✅ **Database**: [Planetscale](https://planetscale.com/).
- ✅ **Styling**: [TailwindCSS + HeadlessUI](https://tailwindcss.com).
- ✅ **Schema Validation**: [Zod](https://github.com/colinhacks/zod) + [Pydantic](https://docs.pydantic.dev/).
- ✅ **LLM Tooling**: [Langchain](https://github.com/hwchase17/langchain).
<h2 align="center">
💝 Our GitHub sponsors 💝
</h2>
<p align="center">
Join us in fueling the development of AgentGPT, an open-source project pushing the boundaries of AI agents! Your sponsorship would drive progress by helping us scale up resources, enhance features and functionality, and continue to iterate on this exciting project! 🚀
</p>
<p align="center">
<!-- sponsors --><a href="https://github.com/arthurbnhm"><img src="https://github.com/arthurbnhm.png" width="60px" alt="Arthur" /></a><a href="https://github.com/mrayonnaise"><img src="https://github.com/mrayonnaise.png" width="60px" alt="Matt Ray" /></a><a href="https://github.com/jd3655"><img src="https://github.com/jd3655.png" width="60px" alt="Vector Ventures" /></a><a href="https://github.com/durairajasivam"><img src="https://github.com/durairajasivam.png" width="60px" alt="" /></a><a href="https://github.com/floriank"><img src="https://github.com/floriank.png" width="60px" alt="Florian Kraft" /></a><a href="https://github.com/localecho"><img src="https://github.com/localecho.png" width="60px" alt="" /></a><a href="https://github.com/fireheat135"><img src="https://github.com/fireheat135.png" width="60px" alt="" /></a><a href="https://github.com/zoelidity"><img src="https://github.com/zoelidity.png" width="60px" alt="Zoe" /></a><a href="https://github.com/busseyl"><img src="https://github.com/busseyl.png" width="60px" alt="Lucas Bussey" /></a><a href="https://github.com/DuanChaori"><img src="https://github.com/DuanChaori.png" width="60px" alt="" /></a><a href="https://github.com/jukwaphil1"><img src="https://github.com/jukwaphil1.png" width="60px" alt="" /></a><a href="https://github.com/lisa-ee"><img src="https://github.com/lisa-ee.png" width="60px" alt="Lisa" /></a><a href="https://github.com/VulcanT"><img src="https://github.com/VulcanT.png" width="60px" alt="" /></a><a href="https://github.com/kman62"><img src="https://github.com/kman62.png" width="60px" alt="kmotte" /></a><a href="https://github.com/Haithamhaj"><img src="https://github.com/Haithamhaj.png" width="60px" alt="" /></a><a href="https://github.com/SwftCoins"><img src="https://github.com/SwftCoins.png" width="60px" alt="SWFT Blockchain" /></a><a href="https://github.com/ChevalierzA"><img src="https://github.com/ChevalierzA.png" width="60px" alt="" /></a><a href="https://github.com/research-developer"><img src="https://github.com/research-developer.png" width="60px" alt="" /></a><a href="https://github.com/Mitchell-Coder-New"><img src="https://github.com/Mitchell-Coder-New.png" width="60px" alt="" /></a><a href="https://github.com/Trecares"><img src="https://github.com/Trecares.png" width="60px" alt="" /></a><a href="https://github.com/nnkostov"><img src="https://github.com/nnkostov.png" width="60px" alt="Nikolay Kostov" /></a><a href="https://github.com/oryanmoshe"><img src="https://github.com/oryanmoshe.png" width="60px" alt="Oryan Moshe" /></a><a href="https://github.com/ClayNelson"><img src="https://github.com/ClayNelson.png" width="60px" alt="Clay Nelson" /></a><a href="https://github.com/0xmatchmaker"><img src="https://github.com/0xmatchmaker.png" width="60px" alt="0xmatchmaker" /></a><a href="https://github.com/carlosbartolomeu"><img src="https://github.com/carlosbartolomeu.png" width="60px" alt="" /></a><a href="https://github.com/Agronobeetles"><img src="https://github.com/Agronobeetles.png" width="60px" alt="" /></a><a href="https://github.com/CloudyGuyThompson"><img src="https://github.com/CloudyGuyThompson.png" width="60px" alt="Guy Thompson" /></a><a href="https://github.com/Jhonvolt17"><img src="https://github.com/Jhonvolt17.png" width="60px" alt="" /></a><a href="https://github.com/sirswali"><img src="https://github.com/sirswali.png" width="60px" alt="Vusi Dube" /></a><a href="https://github.com/Tweezamiza"><img src="https://github.com/Tweezamiza.png" width="60px" alt="" /></a><a href="https://github.com/DixonFyre"><img src="https://github.com/DixonFyre.png" width="60px" alt="" /></a><a href="https://github.com/jenius-eagle"><img src="https://github.com/jenius-eagle.png" width="60px" alt="" /></a><a href="https://github.com/CubanCongaMan"><img src="https://github.com/CubanCongaMan.png" width="60px" alt="Roberto Luis Sanchez, P.E., P.G.; D,GE; F.ASCE" /></a><a href="https://github.com/cskrobec"><img src="https://github.com/cskrobec.png" width="60px" alt="" /></a><a href="https://github.com/Jahmazon"><img src="https://github.com/Jahmazon.png" width="60px" alt="" /></a><a href="https://github.com/ISDAworld"><img src="https://github.com/ISDAworld.png" width="60px" alt="David Gammond" /></a><a href="https://github.com/lazzacapital"><img src="https://github.com/lazzacapital.png" width="60px" alt="Lazza Capital" /></a><a href="https://github.com/OptionalJoystick"><img src="https://github.com/OptionalJoystick.png" width="60px" alt="" /></a><a href="https://github.com/rodolfoguzzi"><img src="https://github.com/rodolfoguzzi.png" width="60px" alt="" /></a><a href="https://github.com/bluecat2210"><img src="https://github.com/bluecat2210.png" width="60px" alt="" /></a><a href="https://github.com/dactylogram9"><img src="https://github.com/dactylogram9.png" width="60px" alt="" /></a><a href="https://github.com/RUFreeJAC63"><img src="https://github.com/RUFreeJAC63.png" width="60px" alt="" /></a><a href="https://github.com/cecilmiles"><img src="https://github.com/cecilmiles.png" width="60px" alt="" /></a><a href="https://github.com/Djarielm007"><img src="https://github.com/Djarielm007.png" width="60px" alt="" /></a><a href="https://github.com/mikenj07"><img src="https://github.com/mikenj07.png" width="60px" alt="" /></a><a href="https://github.com/SvetaMolusk"><img src="https://github.com/SvetaMolusk.png" width="60px" alt="" /></a><a href="https://github.com/wuminkung"><img src="https://github.com/wuminkung.png" width="60px" alt="" /></a><a href="https://github.com/zhoumo1221"><img src="https://github.com/zhoumo1221.png" width="60px" alt="" /></a><a href="https://github.com/Stefan6666XXX"><img src="https://github.com/Stefan6666XXX.png" width="60px" alt="Stephane DeGuire" /></a><a href="https://github.com/lyska"><img src="https://github.com/lyska.png" width="60px" alt="Lyska" /></a><a href="https://github.com/KurganKolde"><img src="https://github.com/KurganKolde.png" width="60px" alt="" /></a><a href="https://github.com/sclappccsu"><img src="https://github.com/sclappccsu.png" width="60px" alt="Sharon Clapp at CCSU" /></a><a href="https://github.com/Rooba-Finance"><img src="https://github.com/Rooba-Finance.png" width="60px" alt="Rooba.Finance" /></a><a href="https://github.com/ferienhausmiete"><img src="https://github.com/ferienhausmiete.png" width="60px" alt="" /></a><a href="https://github.com/benjaminbales"><img src="https://github.com/benjaminbales.png" width="60px" alt="Benjamin Bales" /></a><a href="https://github.com/pimentel233"><img src="https://github.com/pimentel233.png" width="60px" alt="" /></a><a href="https://github.com/PinkyWobbles"><img src="https://github.com/PinkyWobbles.png" width="60px" alt="" /></a><a href="https://github.com/jconroy11"><img src="https://github.com/jconroy11.png" width="60px" alt="" /></a><a href="https://github.com/DavidJamesRotenberg"><img src="https://github.com/DavidJamesRotenberg.png" width="60px" alt="" /></a><a href="https://github.com/antecochat"><img src="https://github.com/antecochat.png" width="60px" alt="" /></a><a href="https://github.com/RealBonOfaSitch"><img src="https://github.com/RealBonOfaSitch.png" width="60px" alt="" /></a><!-- sponsors -->
</p>
<h2 align="center">
💪 Contributors 💪
</h2>
<p align="center">
Our contributors have made this project possible. Thank you! 🙏
</p>
<a href="https://github.com/reworkd/agentgpt/graphs/contributors">
<img src="https://contrib.rocks/image?repo=reworkd/agentgpt" />
</a>
<div align="center">
<sub>Made with <a href="https://contrib.rocks">contrib.rocks</a>.</sub>
</div>
================================================
FILE: cli/.gitignore
================================================
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
.eslintcache
================================================
FILE: cli/README.md
================================================
## AgentGPT CLI
AgentGPT CLI is a utility designed to streamline the setup process of your AgentGPT environment.
It uses Inquirer to interactively build up ENV values while also validating they are correct.
This was first created by @JPDucky on GitHub.
### Running the tool
```
// Running from the root of the project
./setup.sh
```
```
// Running from the cli directory
cd cli/
npm run start
```
### Updating ENV values
To update ENV values:
- Add a question to the list of questions in `index.js` for the ENV value
- Add a value in the `envDefinition` for the ENV value
- Add the ENV value to the `.env.example` in the root of the project
================================================
FILE: cli/package.json
================================================
{
"name": "agentgpt-cli",
"version": "1.0.0",
"description": "A CLI to create your AgentGPT environment",
"private": true,
"engines": {
"node": ">=18.0.0 <19.0.0"
},
"type": "module",
"main": "index.js",
"scripts": {
"start": "node src/index.js",
"dev": "node src/index.js"
},
"author": "reworkd",
"dependencies": {
"@octokit/auth-basic": "^1.4.8",
"@octokit/rest": "^20.0.2",
"chalk": "^5.3.0",
"clear": "^0.1.0",
"clui": "^0.3.6",
"configstore": "^6.0.0",
"dotenv": "^16.3.1",
"figlet": "^1.7.0",
"inquirer": "^9.2.12",
"lodash": "^4.17.21",
"minimist": "^1.2.8",
"node-fetch": "^3.3.2",
"simple-git": "^3.20.0",
"touch": "^3.1.0"
}
}
================================================
FILE: cli/src/envGenerator.js
================================================
import crypto from "crypto";
import fs from "fs";
import chalk from "chalk";
export const generateEnv = (envValues) => {
let isDockerCompose = envValues.runOption === "docker-compose";
let dbPort = isDockerCompose ? 3307 : 3306;
let platformUrl = isDockerCompose
? "http://host.docker.internal:8000"
: "http://localhost:8000";
const envDefinition = getEnvDefinition(
envValues,
isDockerCompose,
dbPort,
platformUrl
);
const envFileContent = generateEnvFileContent(envDefinition);
saveEnvFile(envFileContent);
};
const getEnvDefinition = (envValues, isDockerCompose, dbPort, platformUrl) => {
return {
"Deployment Environment": {
NODE_ENV: "development",
NEXT_PUBLIC_VERCEL_ENV: "${NODE_ENV}",
},
NextJS: {
NEXT_PUBLIC_BACKEND_URL: "http://localhost:8000",
NEXT_PUBLIC_MAX_LOOPS: 100,
},
"Next Auth config": {
NEXTAUTH_SECRET: generateAuthSecret(),
NEXTAUTH_URL: "http://localhost:3000",
},
"Auth providers (Use if you want to get out of development mode sign-in)": {
GOOGLE_CLIENT_ID: "***",
GOOGLE_CLIENT_SECRET: "***",
GITHUB_CLIENT_ID: "***",
GITHUB_CLIENT_SECRET: "***",
DISCORD_CLIENT_SECRET: "***",
DISCORD_CLIENT_ID: "***",
},
Backend: {
REWORKD_PLATFORM_ENVIRONMENT: "${NODE_ENV}",
REWORKD_PLATFORM_FF_MOCK_MODE_ENABLED: false,
REWORKD_PLATFORM_MAX_LOOPS: "${NEXT_PUBLIC_MAX_LOOPS}",
REWORKD_PLATFORM_OPENAI_API_KEY:
envValues.OpenAIApiKey || '"<change me>"',
REWORKD_PLATFORM_FRONTEND_URL: "http://localhost:3000",
REWORKD_PLATFORM_RELOAD: true,
REWORKD_PLATFORM_OPENAI_API_BASE: "https://api.openai.com/v1",
REWORKD_PLATFORM_SERP_API_KEY: envValues.serpApiKey || '""',
REWORKD_PLATFORM_REPLICATE_API_KEY: envValues.replicateApiKey || '""',
},
"Database (Backend)": {
REWORKD_PLATFORM_DATABASE_USER: "reworkd_platform",
REWORKD_PLATFORM_DATABASE_PASSWORD: "reworkd_platform",
REWORKD_PLATFORM_DATABASE_HOST: "agentgpt_db",
REWORKD_PLATFORM_DATABASE_PORT: dbPort,
REWORKD_PLATFORM_DATABASE_NAME: "reworkd_platform",
REWORKD_PLATFORM_DATABASE_URL:
"mysql://${REWORKD_PLATFORM_DATABASE_USER}:${REWORKD_PLATFORM_DATABASE_PASSWORD}@${REWORKD_PLATFORM_DATABASE_HOST}:${REWORKD_PLATFORM_DATABASE_PORT}/${REWORKD_PLATFORM_DATABASE_NAME}",
},
"Database (Frontend)": {
DATABASE_USER: "reworkd_platform",
DATABASE_PASSWORD: "reworkd_platform",
DATABASE_HOST: "agentgpt_db",
DATABASE_PORT: dbPort,
DATABASE_NAME: "reworkd_platform",
DATABASE_URL:
"mysql://${DATABASE_USER}:${DATABASE_PASSWORD}@${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME}",
},
};
};
const generateEnvFileContent = (config) => {
let configFile = "";
Object.entries(config).forEach(([section, variables]) => {
configFile += `# ${section}:\n`;
Object.entries(variables).forEach(([key, value]) => {
configFile += `${key}=${value}\n`;
});
configFile += "\n";
});
return configFile.trim();
};
const generateAuthSecret = () => {
const length = 32;
const buffer = crypto.randomBytes(length);
return buffer.toString("base64");
};
const ENV_PATH = "../next/.env";
const BACKEND_ENV_PATH = "../platform/.env";
export const doesEnvFileExist = () => {
return fs.existsSync(ENV_PATH);
};
// Read the existing env file, test if it is missing any keys or contains any extra keys
export const testEnvFile = () => {
const data = fs.readFileSync(ENV_PATH, "utf8");
// Make a fake definition to compare the keys of
const envDefinition = getEnvDefinition({}, "", "", "", "");
const lines = data
.split("\n")
.filter((line) => !line.startsWith("#") && line.trim() !== "");
const envKeysFromFile = lines.map((line) => line.split("=")[0]);
const envKeysFromDef = Object.entries(envDefinition).flatMap(
([section, entries]) => Object.keys(entries)
);
const missingFromFile = envKeysFromDef.filter(
(key) => !envKeysFromFile.includes(key)
);
if (missingFromFile.length > 0) {
let errorMessage = "\nYour ./next/.env is missing the following keys:\n";
missingFromFile.forEach((key) => {
errorMessage += chalk.whiteBright(`- ❌ ${key}\n`);
});
errorMessage += "\n";
errorMessage += chalk.red(
"We recommend deleting your .env file(s) and restarting this script."
);
throw new Error(errorMessage);
}
};
export const saveEnvFile = (envFileContent) => {
fs.writeFileSync(ENV_PATH, envFileContent);
fs.writeFileSync(BACKEND_ENV_PATH, envFileContent);
};
================================================
FILE: cli/src/helpers.js
================================================
import chalk from "chalk";
import figlet from "figlet";
export const printTitle = () => {
console.log(
chalk.red(
figlet.textSync("AgentGPT", {
horizontalLayout: "full",
font: "ANSI Shadow",
})
)
);
console.log(
"Welcome to the AgentGPT CLI! This CLI will generate the required .env files."
);
console.log(
"Copies of the generated envs will be created in `./next/.env` and `./platform/.env`.\n"
);
};
// Function to check if entered api key is in the correct format or empty
export const isValidKey = (apikey, pattern) => {
return (apikey === "" || pattern.test(apikey))
};
export const validKeyErrorMessage = "\nInvalid api key. Please try again."
================================================
FILE: cli/src/index.js
================================================
import inquirer from "inquirer";
import dotenv from "dotenv";
import { printTitle } from "./helpers.js";
import { doesEnvFileExist, generateEnv, testEnvFile } from "./envGenerator.js";
import { newEnvQuestions } from "./questions/newEnvQuestions.js";
import { existingEnvQuestions } from "./questions/existingEnvQuestions.js";
import { spawn } from "child_process";
import chalk from "chalk";
const handleExistingEnv = () => {
console.log(chalk.yellow("Existing ./next/env file found. Validating..."));
try {
testEnvFile();
} catch (e) {
console.log(e.message);
return;
}
inquirer.prompt(existingEnvQuestions).then((answers) => {
handleRunOption(answers.runOption);
});
};
const handleNewEnv = () => {
inquirer.prompt(newEnvQuestions).then((answers) => {
dotenv.config({ path: "./.env" });
generateEnv(answers);
console.log("\nEnv files successfully created!");
handleRunOption(answers.runOption);
});
};
const handleRunOption = (runOption) => {
if (runOption === "docker-compose") {
const dockerComposeUp = spawn("docker-compose", ["up", "--build"], {
stdio: "inherit",
});
}
if (runOption === "manual") {
console.log(
"Please go into the ./next folder and run `npm install && npm run dev`."
);
console.log(
"Please also go into the ./platform folder and run `poetry install && poetry run python -m reworkd_platform`."
);
console.log(
"Please use or update the MySQL database configuration in the env file(s)."
);
}
};
printTitle();
if (doesEnvFileExist()) {
handleExistingEnv();
} else {
handleNewEnv();
}
================================================
FILE: cli/src/questions/existingEnvQuestions.js
================================================
import { RUN_OPTION_QUESTION } from "./sharedQuestions.js";
export const existingEnvQuestions = [
RUN_OPTION_QUESTION
];
================================================
FILE: cli/src/questions/newEnvQuestions.js
================================================
import { isValidKey, validKeyErrorMessage } from "../helpers.js";
import { RUN_OPTION_QUESTION } from "./sharedQuestions.js";
import fetch from "node-fetch";
export const newEnvQuestions = [
RUN_OPTION_QUESTION,
{
type: "input",
name: "OpenAIApiKey",
message:
"Enter your openai key (eg: sk...) or press enter to continue with no key:",
validate: async(apikey) => {
if(apikey === "") return true;
if(!isValidKey(apikey, /^sk-[a-zA-Z0-9]{48}$/)) {
return validKeyErrorMessage
}
const endpoint = "https://api.openai.com/v1/models"
const response = await fetch(endpoint, {
headers: {
"Authorization": `Bearer ${apikey}`,
},
});
if(!response.ok) {
return validKeyErrorMessage
}
return true
},
},
{
type: "input",
name: "serpApiKey",
message:
"What is your SERP API key (https://serper.dev/)? Leave empty to disable web search.",
validate: async(apikey) => {
if(apikey === "") return true;
if(!isValidKey(apikey, /^[a-zA-Z0-9]{40}$/)) {
return validKeyErrorMessage
}
const endpoint = "https://google.serper.dev/search"
const response = await fetch(endpoint, {
method: 'POST',
headers: {
"X-API-KEY": apikey,
"Content-Type": "application/json",
},
body: JSON.stringify({
"q": "apple inc"
}),
});
if(!response.ok) {
return validKeyErrorMessage
}
return true
},
},
{
type: "input",
name: "replicateApiKey",
message:
"What is your Replicate API key (https://replicate.com/)? Leave empty to just use DALL-E for image generation.",
validate: async(apikey) => {
if(apikey === "") return true;
if(!isValidKey(apikey, /^r8_[a-zA-Z0-9]{37}$/)) {
return validKeyErrorMessage
}
const endpoint = "https://api.replicate.com/v1/models/replicate/hello-world"
const response = await fetch(endpoint, {
headers: {
"Authorization": `Token ${apikey}`,
},
});
if(!response.ok) {
return validKeyErrorMessage
}
return true
},
},
];
================================================
FILE: cli/src/questions/sharedQuestions.js
================================================
export const RUN_OPTION_QUESTION = {
type: 'list',
name: 'runOption',
choices: [
{ value: "docker-compose", name: "🐋 Docker-compose (Recommended)" },
{ value: "manual", name: "💪 Manual (Not recommended)" },
],
message: 'How will you be running AgentGPT?',
default: "docker-compose",
}
================================================
FILE: cli/tsconfig.json
================================================
{
"compilerOptions": {
/* Visit https://aka.ms/tsconfig to read more about this file */
/* Projects */
// "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
// "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
/* Language and Environment */
"target": "es2016",
/* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
// "src": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
// "jsx": "preserve", /* Specify what JSX code is generated. */
// "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
// "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
// "noLib": true, /* Disable including any library files, including the default src.d.ts. */
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
/* Modules */
"module": "commonjs",
/* Specify what module code is generated. */
// "rootDir": "./", /* Specify the root folder within your source files. */
// "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
// "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
// "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
// "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
// "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
// "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
// "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
// "resolveJsonModule": true, /* Enable importing .json files. */
// "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
// "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
/* JavaScript Support */
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
/* Emit */
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
// "outDir": "./", /* Specify an output folder for all emitted files. */
// "removeComments": true, /* Disable emitting comments. */
// "noEmit": true, /* Disable emitting files from a compilation. */
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
// "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
// "newLine": "crlf", /* Set the newline character for emitting files. */
// "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
// "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
// "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
// "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
/* Interop Constraints */
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
// "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
"esModuleInterop": true,
/* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
"forceConsistentCasingInFileNames": true,
/* Ensure that casing is correct in imports. */
/* Type Checking */
"strict": true,
/* Enable all strict type-checking options. */
// "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
// "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
// "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
// "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
// "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
// "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
// "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
/* Completeness */
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
"skipLibCheck": true
/* Skip type checking all .d.ts files. */
}
}
================================================
FILE: db/Dockerfile
================================================
FROM mysql:8.0
ADD setup.sql /docker-entrypoint-initdb.d
================================================
FILE: docker-compose.yml
================================================
version: '3.9'
services:
frontend:
container_name: frontend
build:
context: ./next
dockerfile: Dockerfile
ports:
- "3000:3000"
volumes:
- ./next/.env:/next/.env
- ./next/:/next/
- /next/node_modules
- /next/.next
platform:
container_name: platform
build:
context: ./platform
target: prod
ports:
- "8000:8000"
restart: always
volumes:
- ./platform:/app/src/
env_file:
- next/.env
environment:
REWORKD_PLATFORM_HOST: 0.0.0.0
REWORKD_PLATFORM_DB_HOST: agentgpt_db
REWORKD_PLATFORM_DB_PORT: "3307"
REWORKD_PLATFORM_DB_USER: "reworkd_platform"
REWORKD_PLATFORM_DB_PASS: "reworkd_platform"
REWORKD_PLATFORM_DB_BASE: "reworkd_platform"
depends_on:
- agentgpt_db
agentgpt_db:
image: mysql:8.0
container_name: agentgpt_db
restart: always
build:
context: ./db
ports:
- "3308:3307"
environment:
MYSQL_DATABASE: "reworkd_platform"
MYSQL_USER: "reworkd_platform"
MYSQL_PASSWORD: "reworkd_platform"
MYSQL_ROOT_PASSWORD: "reworkd_platform"
MYSQL_TCP_PORT: 3307
volumes:
- agentgpt_db:/var/lib/mysql
command: [ 'mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci' ]
volumes:
agentgpt_db:
================================================
FILE: docs/README.hu-Cs4K1Sr4C.md
================================================
<p align="center">
<img src="https://raw.githubusercontent.com/reworkd/AgentGPT/main/public/banner.png?token=GHSAT0AAAAAAB7JND3U3VGGF3UYYHGYO4RAZBSDJAQ" height="300"/>
</p>
<p align="center">
<em>🤖 Szerelje össze, konfigurálja és telepítse az autonóm AI-ügynököket a böngészőjében. 🤖 </em>
</p>
<p align="center">
<img alt="Node version" src="https://img.shields.io/static/v1?label=node&message=%20%3E=16.0.0&logo=node.js&color=2334D058" />
<a href="https://github.com/reworkd/AgentGPT/blob/master/README.md"><img src="https://img.shields.io/badge/lang-English-blue.svg" alt="English"></a>
<a href="https://github.com/reworkd/AgentGPT/blob/master/docs/README.zh-HANS.md"><img src="https://img.shields.io/badge/lang-简体中文-red.svg" alt="简体中文"></a>
<a href="https://github.com/reworkd/AgentGPT/blob/master/docs/README.hu-Cs4K1Sr4C.md"><img src="https://img.shields.io/badge/lang-Hungarian-red.svg" alt="Hungarian"></a>
</p>
<p align="center">
<a href="https://agentgpt.reworkd.ai">🔗 Weboldal</a>
<span> • </span>
<a href="#-getting-started">🤝 Hozzájárulás</a>
<span> • </span>
<a href="https://twitter.com/asimdotshrestha/status/1644883727707959296">🐦 Twitter</a>
<span> • </span>
<a href="https://discord.gg/gcmNyAAFfV">📢 Discord</a>
</p>
---
<h2 align="center">
💝 Támogassa az AgentGPT fejlesztését!! 💝
</h2>
<p align="center">
Csatlakozzon hozzánk, az AgentGPT fejlesztéséhez, egy nyílt forráskódú projekthez, amely az AI automatizálás határait feszegeti! Kihívásokkal nézünk szembe a működési költségek fedezése 💸, beleértve a házon belüli API-t és egyéb infrastrukturális költségeket, amelyek az előrejelzések szerint körülbelül napi 150 USD-ra nőnek. 💳🤕 Az Ön szponzorálása elősegítené a fejlődést azáltal, hogy segít nekünk az erőforrások bővítésében, a funkciók és a funkcionalitás bővítésében, valamint az izgalmas projekt folytatásában! 🚀
</p>
<p align="center">
Ennek az ingyenes, nyílt forráskódú projektnek a szponzorálásával nem csak az avatarod/logódat láthatod alább, hanem exkluzív lehetőséget kapsz az alapítókkal való beszélgetésre is!🗣️
</p>
<p align="center">
<a href="https://github.com/sponsors/reworkd-admin">👉 Kattint ide</a> ha szeretnéd támogatni a projektet
</p>
<h3 align="center">
🙌🏻 Szponzoraink 🙌🏻
</h3>
<div align="center" dir="auto">
<!-- sponsors --><a href="https://github.com/arthurbnhm"><img src="https://github.com/arthurbnhm.png" width="60px" alt="Arthur" /></a><a href="https://github.com/mrayonnaise"><img src="https://github.com/mrayonnaise.png" width="60px" alt="Matt Ray" /></a><a href="https://github.com/iv-ann"><img src="https://github.com/iv-ann.png" width="60px" alt="Ivan" /></a><a href="https://github.com/alex-shortt"><img src="https://github.com/alex-shortt.png" width="60px" alt="Alex Shortt" /></a><a href="https://github.com/echallenge"><img src="https://github.com/echallenge.png" width="60px" alt="eDad" /></a><a href="https://github.com/jd3655"><img src="https://github.com/jd3655.png" width="60px" alt="Vector Ventures" /></a><a href="https://github.com/PersonMan65"><img src="https://github.com/PersonMan65.png" width="60px" alt="" /></a><a href="https://github.com/peth-yursick"><img src="https://github.com/peth-yursick.png" width="60px" alt="" /></a><a href="https://github.com/durairajasivam"><img src="https://github.com/durairajasivam.png" width="60px" alt="" /></a><a href="https://github.com/floriank"><img src="https://github.com/floriank.png" width="60px" alt="Florian Kraft" /></a><a href="https://github.com/SicilianaTrevino"><img src="https://github.com/SicilianaTrevino.png" width="60px" alt="" /></a><a href="https://github.com/andrewpeluso"><img src="https://github.com/andrewpeluso.png" width="60px" alt="" /></a><a href="https://github.com/localecho"><img src="https://github.com/localecho.png" width="60px" alt="" /></a><a href="https://github.com/fireheat135"><img src="https://github.com/fireheat135.png" width="60px" alt="" /></a><a href="https://github.com/ashventure"><img src="https://github.com/ashventure.png" width="60px" alt="" /></a><a href="https://github.com/biolippi"><img src="https://github.com/biolippi.png" width="60px" alt="" /></a><a href="https://github.com/orkunisitmak"><img src="https://github.com/orkunisitmak.png" width="60px" alt="" /></a><a href="https://github.com/zoelidity"><img src="https://github.com/zoelidity.png" width="60px" alt="Zoe" /></a><a href="https://github.com/busseyl"><img src="https://github.com/busseyl.png" width="60px" alt="Lucas Bussey" /></a><a href="https://github.com/DuanChaori"><img src="https://github.com/DuanChaori.png" width="60px" alt="" /></a><a href="https://github.com/Faitltd"><img src="https://github.com/Faitltd.png" width="60px" alt="fAIt" /></a><a href="https://github.com/jukwaphil1"><img src="https://github.com/jukwaphil1.png" width="60px" alt="" /></a><a href="https://github.com/lisa-ee"><img src="https://github.com/lisa-ee.png" width="60px" alt="Lisa" /></a><a href="https://github.com/VulcanT"><img src="https://github.com/VulcanT.png" width="60px" alt="" /></a><a href="https://github.com/kman62"><img src="https://github.com/kman62.png" width="60px" alt="kmotte" /></a><a href="https://github.com/Haithamhaj"><img src="https://github.com/Haithamhaj.png" width="60px" alt="" /></a><a href="https://github.com/SwftCoins"><img src="https://github.com/SwftCoins.png" width="60px" alt="SWFT Blockchain" /></a><a href="https://github.com/ChevalierzA"><img src="https://github.com/ChevalierzA.png" width="60px" alt="" /></a><a href="https://github.com/research-developer"><img src="https://github.com/research-developer.png" width="60px" alt="" /></a><a href="https://github.com/Wetradetogether"><img src="https://github.com/Wetradetogether.png" width="60px" alt="Wetradetogether Corporation" /></a><a href="https://github.com/keanuhsieh"><img src="https://github.com/keanuhsieh.png" width="60px" alt="" /></a><a href="https://github.com/sorrynothing"><img src="https://github.com/sorrynothing.png" width="60px" alt="" /></a><a href="https://github.com/FelixAI2023"><img src="https://github.com/FelixAI2023.png" width="60px" alt="" /></a><a href="https://github.com/Mitchell-Coder-New"><img src="https://github.com/Mitchell-Coder-New.png" width="60px" alt="" /></a><a href="https://github.com/Xiaofeixiao0309"><img src="https://github.com/Xiaofeixiao0309.png" width="60px" alt="XIAO FEI" /></a><a href="https://github.com/jondwillis"><img src="https://github.com/jondwillis.png" width="60px" alt="jon" /></a><a href="https://github.com/mojosolo"><img src="https://github.com/mojosolo.png" width="60px" alt="MojoSolo" /></a><a href="https://github.com/Trecares"><img src="https://github.com/Trecares.png" width="60px" alt="" /></a><a href="https://github.com/nnkostov"><img src="https://github.com/nnkostov.png" width="60px" alt="Nikolay Kostov" /></a><a href="https://github.com/mfcolbrie"><img src="https://github.com/mfcolbrie.png" width="60px" alt="" /></a><a href="https://github.com/oryanmoshe"><img src="https://github.com/oryanmoshe.png" width="60px" alt="Oryan Moshe" /></a><a href="https://github.com/newjxmaster"><img src="https://github.com/newjxmaster.png" width="60px" alt="Napole" /></a><a href="https://github.com/jofe03"><img src="https://github.com/jofe03.png" width="60px" alt="" /></a><a href="https://github.com/DanielRobertKelly"><img src="https://github.com/DanielRobertKelly.png" width="60px" alt="" /></a><a href="https://github.com/genetrader"><img src="https://github.com/genetrader.png" width="60px" alt="Gene Waxman" /></a><a href="https://github.com/NerdDeWallStreet"><img src="https://github.com/NerdDeWallStreet.png" width="60px" alt="Nerd de Wall Street" /></a><a href="https://github.com/qwe777897"><img src="https://github.com/qwe777897.png" width="60px" alt="" /></a><a href="https://github.com/tudorw"><img src="https://github.com/tudorw.png" width="60px" alt="Tudor Watson" /></a><a href="https://github.com/ClayNelson"><img src="https://github.com/ClayNelson.png" width="60px" alt="Clay Nelson" /></a><a href="https://github.com/johnopaluwa"><img src="https://github.com/johnopaluwa.png" width="60px" alt="Opaluwa John" /></a><a href="https://github.com/Mamadouff"><img src="https://github.com/Mamadouff.png" width="60px" alt="" /></a><a href="https://github.com/xuxizhen"><img src="https://github.com/xuxizhen.png" width="60px" alt="xizhen" /></a><a href="https://github.com/ShamrockYuma"><img src="https://github.com/ShamrockYuma.png" width="60px" alt="Elizabeth" /></a><a href="https://github.com/thecatfix"><img src="https://github.com/thecatfix.png" width="60px" alt="John Shelburne" /></a><a href="https://github.com/18900775855"><img src="https://github.com/18900775855.png" width="60px" alt="bin" /></a><a href="https://github.com/destro225"><img src="https://github.com/destro225.png" width="60px" alt="" /></a><a href="https://github.com/0xmatchmaker"><img src="https://github.com/0xmatchmaker.png" width="60px" alt="0xmatchmaker" /></a><a href="https://github.com/dray3310"><img src="https://github.com/dray3310.png" width="60px" alt="" /></a><a href="https://github.com/mgesteban"><img src="https://github.com/mgesteban.png" width="60px" alt="Grace Esteban" /></a><a href="https://github.com/fegodi"><img src="https://github.com/fegodi.png" width="60px" alt="" /></a><a href="https://github.com/kylburns89"><img src="https://github.com/kylburns89.png" width="60px" alt="" /></a><a href="https://github.com/Ademrobert"><img src="https://github.com/Ademrobert.png" width="60px" alt="Adem Ottoman" /></a><a href="https://github.com/mouhaxp"><img src="https://github.com/mouhaxp.png" width="60px" alt="" /></a><a href="https://github.com/carlosbartolomeu"><img src="https://github.com/carlosbartolomeu.png" width="60px" alt="" /></a><a href="https://github.com/Zoffra1984"><img src="https://github.com/Zoffra1984.png" width="60px" alt="" /></a><a href="https://github.com/Agronobeetles"><img src="https://github.com/Agronobeetles.png" width="60px" alt="" /></a><a href="https://github.com/CloudyGuyThompson"><img src="https://github.com/CloudyGuyThompson.png" width="60px" alt="Guy Thompson" /></a><a href="https://github.com/rocogirl-jp"><img src="https://github.com/rocogirl-jp.png" width="60px" alt="" /></a><a href="https://github.com/Jhonvolt17"><img src="https://github.com/Jhonvolt17.png" width="60px" alt="" /></a><a href="https://github.com/koltziver"><img src="https://github.com/koltziver.png" width="60px" alt="" /></a><a href="https://github.com/meeuwsstefaan"><img src="https://github.com/meeuwsstefaan.png" width="60px" alt="Stefaan Meeuws" /></a><a href="https://github.com/sirswali"><img src="https://github.com/sirswali.png" width="60px" alt="Vusi Dube" /></a><a href="https://github.com/Tweezamiza"><img src="https://github.com/Tweezamiza.png" width="60px" alt="" /></a><a href="https://github.com/Kenono2000"><img src="https://github.com/Kenono2000.png" width="60px" alt="Ken Wong" /></a><a href="https://github.com/QuickBenx"><img src="https://github.com/QuickBenx.png" width="60px" alt="" /></a><a href="https://github.com/ouguajian"><img src="https://github.com/ouguajian.png" width="60px" alt="" /></a><a href="https://github.com/DixonFyre"><img src="https://github.com/DixonFyre.png" width="60px" alt="" /></a><a href="https://github.com/ospl99"><img src="https://github.com/ospl99.png" width="60px" alt="" /></a><a href="https://github.com/bbookser"><img src="https://github.com/bbookser.png" width="60px" alt="Bradford Bookser" /></a><a href="https://github.com/abhirichster"><img src="https://github.com/abhirichster.png" width="60px" alt="" /></a><a href="https://github.com/SwingPoint"><img src="https://github.com/SwingPoint.png" width="60px" alt="" /></a><a href="https://github.com/jenius-eagle"><img src="https://github.com/jenius-eagle.png" width="60px" alt="" /></a><a href="https://github.com/CubanCongaMan"><img src="https://github.com/CubanCongaMan.png" width="60px" alt="Roberto Luis Sanchez, P.E., P.G.; D,GE; F.ASCE" /></a><a href="https://github.com/cskrobec"><img src="https://github.com/cskrobec.png" width="60px" alt="" /></a><a href="https://github.com/Jahmazon"><img src="https://github.com/Jahmazon.png" width="60px" alt="" /></a><a href="https://github.com/jackPan010203"><img src="https://github.com/jackPan010203.png" width="60px" alt="" /></a><a href="https://github.com/pmespresso"><img src="https://github.com/pmespresso.png" width="60px" alt="πisk0mate" /></a><a href="https://github.com/itbc2004"><img src="https://github.com/itbc2004.png" width="60px" alt="" /></a><a href="https://github.com/ISDAworld"><img src="https://github.com/ISDAworld.png" width="60px" alt="David Gammond" /></a><a href="https://github.com/mattlwaters"><img src="https://github.com/mattlwaters.png" width="60px" alt="" /></a><a href="https://github.com/Stargard"><img src="https://github.com/Stargard.png" width="60px" alt="" /></a><a href="https://github.com/lazzacapital"><img src="https://github.com/lazzacapital.png" width="60px" alt="Lazza Capital" /></a><a href="https://github.com/MichaelRDionne"><img src="https://github.com/MichaelRDionne.png" width="60px" alt="Michael R Dionne" /></a><a href="https://github.com/nilotpalc"><img src="https://github.com/nilotpalc.png" width="60px" alt="Nilotpal Choudhury" /></a><a href="https://github.com/FrankyPete"><img src="https://github.com/FrankyPete.png" width="60px" alt="" /></a><a href="https://github.com/TylerrDurden1979"><img src="https://github.com/TylerrDurden1979.png" width="60px" alt="" /></a><a href="https://github.com/OptionalJoystick"><img src="https://github.com/OptionalJoystick.png" width="60px" alt="" /></a><a href="https://github.com/PaulV27"><img src="https://github.com/PaulV27.png" width="60px" alt="" /></a><a href="https://github.com/rodolfoguzzi"><img src="https://github.com/rodolfoguzzi.png" width="60px" alt="" /></a><a href="https://github.com/bluecat2210"><img src="https://github.com/bluecat2210.png" width="60px" alt="" /></a><!-- sponsors -->
</div>
---
Az AgentGPT lehetővé teszi az automatizált AI-ügynökök konfigurálását és üzembe helyezését.
Nevezze el saját egyéni mesterséges intelligenciáját, és tegye lehetővé, hogy bármilyen célt elérjen.
Megkísérli elérni a célt az elvégzendő feladatok átgondolásával, végrehajtásával és az eredményekből való tanulással 🚀.
## 🎉 Útiterv
Ez a platform jelenleg béta állapotban van és a következőkön dolgozunk:
- Hosszú távú memória vektoros DB-n keresztül 🧠
- Webböngészési lehetőségek a LangChain-en keresztül 🌐
- Interakció webhelyekkel és emberekkel 👨👩👦
- Írási lehetőségek egy dokumentum API-n keresztül 📄
- Az AI-ügynökök mentése 💾
- Felhasználók és hitelesítés 🔐
- Stripe integráció egy alsó limites fizetős verzióhoz (hogy ne aggódjunk az infra költségek miatt) 💵
Hamarosan még több jön...
## 🚀 Tech Stack
- ✅ **Bootstrapping**: [create-t3-app](https://create.t3.gg).
- ✅ **Framework**: [Nextjs 13 + Typescript](https://nextjs.org/).
- ✅ **Auth**: [Next-Auth.js](https://next-auth.js.org)
- ✅ **ORM**: [Prisma](https://prisma.io).
- ✅ **Database**: [Supabase](https://supabase.com/).
- ✅ **Styling**: [TailwindCSS + HeadlessUI](https://tailwindcss.com).
- ✅ **Typescript Schema Validation**: [Zod](https://github.com/colinhacks/zod).
- ✅ **End-to-end typesafe API**: [tRPC](https://trpc.io/).
## 👨🚀 Első lépések
### 🐳 Docker beállítása
Az AgentGPT helyi futtatásának legegyszerűbb módja a Docker használata.
Egy kényelmes beállítási szkriptet biztosítunk az induláshoz.
```bash
./setup.sh --docker
```
### 👷 Helyi fejlesztési beállítások
Ha helyben szeretné fejleszteni az Agent GPT-t, a legegyszerűbb módja a mellékelt telepítőszkript használata.
```bash
./setup.sh --local
```
### 🛠️ Manuális beállítás
> 🚧 Szüksége lesz a [Nodejs +18 (LTS recommended)](https://nodejs.org/en/) telepítésre.
1. Elágaztatni a tárat
- [Elágaztatás](https://github.com/reworkd/AgentGPT/fork).
2. Klónozni a tárolót:
```bash
git clone git@github.com:YOU_USER/AgentGPT.git
```
3. Függőségek telepítése:
```bash
cd AgentGPT
npm install
```
4. Hozzon létre egy **.env** fájlt a következő tartalommal:
> 🚧 A környezeti változóknak meg kell egyeznie a következő [sémával](https://github.com/reworkd/AgentGPT/blob/main/src/env/schema.mjs).
```bash
# Telepítési környezet:
NODE_ENV=development
# Következő hitelesítési konfiguráció:
# Hozzon létre egy titkos kulcsot az `openssl rand -base64 32` paranccsal
NEXTAUTH_SECRET=VÁLTOZTASS_MEG
NEXTAUTH_URL=http://localhost:3000
DATABASE_URL=file:./db.sqlite
# OpenAI API kulcs
OPENAI_API_KEY=VÁLTOZTASS_MEG
```
5. Módosítsa a prisma sémát az sqlite használatához:
```bash
./prisma/useSqlite.sh
```
**Megjegyzés:** Ezt csak akkor kell megtenni, ha sqlite-ot szeretne használni.
6. Kész 🥳, következő a futtatás:
```bash
# Adatbázis-migrálások létrehozása
npx prisma db push
npm run dev
```
### 🚀 GitHub Codespaces
Állítsa be azonnal az AgentGPT-t a felhőben a [GitHub Codespaces](https://github.com/features/codespaces) használatával.
1. A GitHub-tárhelyen kattintson a zöld "Kód" gombra, és válassza a "Kódterek" lehetőséget.
2. Hozzon létre egy új kódteret, vagy válasszon egy előzőt, amelyet már létrehozott.
3. A kódtér külön lapon nyílik meg a böngészőben.
4. A terminálban futtassa a `bash ./setup.sh --local` parancsot
5. Amikor a terminál kéri, adja hozzá OpenAI API-kulcsát.
6. Kattintson a "Megnyitás böngészőben" gombra, amikor az összeállítási folyamat befejeződött.
- Az AgentGPT leállításához írja be a Ctrl+C billentyűkombinációt a terminálba.
- Az AgentGPT újraindításához futtassa az "npm run dev" parancsot a terminálban.
Futtassa a projektet 🥳
```
npm run dev
```
---
<h3 align="center">
🙌🏻 További szponzoraink 🙌🏻
</h3>
<div align="center" dir="auto">
<a href="https://github.com/Trecares" style="display: inline-block; margin-right: 20px;">
<img src="https://github.com/Trecares.png" width="50px" alt="Trecares" style="max-width:100%;">
</a>
<a href="https://github.com/oryanmoshe" style="display: inline-block; margin-right: 20px;">
<img src="https://github.com/oryanmoshe.png" width="50px" alt="oryanmoshe" style="max-width:100%;">
</a>
<a href="https://github.com/rekimcn" style="display: inline-block; margin-right: 20px;">
<img src="https://github.com/rekimcn.png" width="50px" alt="rekimcn" style="max-width:100%;">
</a>
<a href="https://github.com/qwe777897" style="display: inline-block; margin-right: 20px;">
<img src="https://github.com/qwe777897.png" width="50px" alt="qwe777897" style="max-width:100%;">
</a>
<a href="https://github.com/ClayNelson" style="display: inline-block; margin-right: 20px;">
<img src="https://github.com/ClayNelson.png" width="50px" alt="ClayNelson" style="max-width:100%;">
</a>
<a href="https://github.com/xuxizhen" style="display: inline-block; margin-right: 20px;">
<img src="https://github.com/xuxizhen.png" width="50px" alt="xuxizhen" style="max-width:100%;">
</a>
<a href="https://github.com/destro225" style="display: inline-block; margin-right: 20px;">
<img src="https://github.com/destro225.png" width="50px" alt="destro225" style="max-width:100%;">
</a>
<a href="https://github.com/mouhaxp" style="display: inline-block; margin-right: 20px;">
<img src="https://github.com/mouhaxp.png" width="50px" alt="mouhaxp" style="max-width:100%;">
</a>
<a href="https://github.com/carlosbartolomeu" style="display: inline-block; margin-right: 20px;">
<img src="https://github.com/carlosbartolomeu.png" width="50px" alt="carlosbartolomeu" style="max-width:100%;">
</a>
<a href="https://github.com/Agronobeetles" style="display: inline-block; margin-right: 20px;">
<img src="https://github.com/Agronobeetles.png" width="50px" alt="Agronobeetles " style="max-width:100%;">
</a>
<a href="https://github.com/CloudyGuyThompson" style="display: inline-block; margin-right: 20px;">
<img src="https://github.com/CloudyGuyThompson.png" width="50px" alt="CloudyGuyThompson" style="max-width:100%;">
</a>
<a href="https://github.com/xinghz" style="display: inline-block; margin-right: 20px;">
<img src="https://github.com/xinghz.png" width="50px" alt="xinghz" style="max-width:100%;">
</a>
<a href="https://github.com/Jaimbart" style="display: inline-block; margin-right: 20px;">
<img src="https://github.com/Jaimbart.png" width="50px" alt="Jaimbart" style="max-width:100%;">
</a>
<a href="https://github.com/Jhonvolt17" style="display: inline-block; margin-right: 20px;">
<img src="https://github.com/Jhonvolt17.png" width="50px" alt="Jhonvolt17" style="max-width:100%;">
</a>
<a href="https://github.com/koltziver" style="display: inline-block; margin-right: 20px;">
<img src="https://github.com/koltziver.png" width="50px" alt="koltziver" style="max-width:100%;">
</a>
<a href="https://github.com/sirswali" style="display: inline-block; margin-right: 20px;">
<img src="https://github.com/sirswali.png" width="50px" alt="sirswali" style="max-width:100%;">
</a>
<a href="https://github.com/DixonFyre" style="display: inline-block; margin-right: 20px;">
<img src="https://github.com/DixonFyre.png" width="50px" alt="DixonFyre" style="max-width:100%;">
</a>
</div>
================================================
FILE: docs/README.md
================================================
================================================
FILE: docs/README.zh-HANS.md
================================================
<p align="center">
<img src="https://raw.githubusercontent.com/reworkd/AgentGPT/main/next/public/banner.png" height="300" alt="AgentGPT Logo"/>
</p>
<p align="center">
<em>🤖 组装,配置和部署自主的 AI 代理(只需浏览器) 🤖 </em>
</p>
<p align="center">
<img alt="Node version" src="https://img.shields.io/static/v1?label=node&message=%20%3E=18&logo=node.js&color=2334D058" />
<a href="https://github.com/reworkd/AgentGPT/blob/master/README.md"><img src="https://img.shields.io/badge/lang-English-blue.svg" alt="English"></a>
<a href="https://github.com/reworkd/AgentGPT/blob/master/docs/README.zh-HANS.md"><img src="https://img.shields.io/badge/lang-简体中文-red.svg" alt="简体中文"></a>
<a href="https://github.com/reworkd/AgentGPT/blob/master/docs/README.hu-Cs4K1Sr4C.md"><img src="https://img.shields.io/badge/lang-Hungarian-red.svg" alt="Hungarian"></a>
</p>
<p align="center">
<a href="https://agentgpt.reworkd.ai">🔗 短链接</a>
<span> • </span>
<a href="https://reworkd.ai/docs">📚 文档</a>
<span> • </span>
<a href="https://twitter.com/reworkdai">🐦 推特</a>
<span> • </span>
<a href="https://discord.gg/gcmNyAAFfV">📢 Discord</a>
</p>
AgentGPT允许您配置和部署自主AI代理。
为您自己的定制AI命名,并使其追求任何可以想象到的目标。
它将通过思考要执行的任务、执行这些任务并从结果中学习来尝试实现目标🚀。
---
## ✨ 演示
为了获得最佳的演示体验,请直接访问 [our site](https://agentgpt.reworkd.ai) :)
[Demo Video](https://github.com/reworkd/AgentGPT/assets/50181239/5348e44a-29a5-4280-a06b-fe1429a8d99e)
## 👨🚀 开始使用
使用AgentGPT的最简单方法是自动设置CLI,该CLI与项目捆绑在一起。
cli为AgentGPT设置了以下内容:
- 🔐 [Environment variables](https://github.com/reworkd/AgentGPT/blob/main/.env.example) (和 API 密钥)
- 🗂️ [Database](https://github.com/reworkd/AgentGPT/tree/main/db) (Mysql)
- 🤖 [Backend](https://github.com/reworkd/AgentGPT/tree/main/platform) (FastAPI)
- 🎨 [Frontend](https://github.com/reworkd/AgentGPT/tree/main/next) (Nextjs)
## 先决条件👆
开始之前,请确保您已安装了以下内容:
- 选择你的编辑器,例如[Visual Studio Code (VS Code)](https://code.visualstudio.com/download)
- [Node.js](https://nodejs.org/en/download)
- [Git](https://git-scm.com/downloads)
- [Docker](https://www.docker.com/products/docker-desktop). 安装完成后,请创建一个账号,打开 Docker 应用程序,并登录。
- 一个 [OpenAI API key](https://platform.openai.com/signup)
- 一个 [Serper API Key](https://serper.dev/signup) (可选)
- 一个 [Replicate API Token](https://replicate.com/signin) (可选)
## 入门指南🚀
1. **打开你的编辑器**
2. **打开终端** - 通常,你可以在'Terminal'标签页中执行此操作,或者使用快捷键
(例如,在 VS Code 中,对于 Windows 可以使用 `Ctrl + ~`,对于 Mac 可以使用 `Control + ~`)。
3. **克隆存储库并进入目录** - 一旦您的终端打开,您可以通过运行下面的命令克隆存储库并进入目录。
**For Mac/Linux users** 🍎 🐧
```bash
git clone https://github.com/reworkd/AgentGPT.git
cd AgentGPT
./setup.sh
```
**For Windows users** :windows:
```bash
git clone https://github.com/reworkd/AgentGPT.git
cd AgentGPT
./setup.bat
```
4. **按照脚本中的设置说明进行操作。** - 在添加适当的 API 密钥之后,确保所有服务都已经运行起来,然后在您的网页浏览器中访问 [http://localhost:3000](http://localhost:3000)。
黑客快乐! 🎉
## 🚀 技术栈
- ✅ **Bootstrapping**: [create-t3-app](https://create.t3.gg) + [FastAPI-template](https://github.com/s3rius/FastAPI-template).
- ✅ **Framework**: [Nextjs 13 + Typescript](https://nextjs.org/) + [FastAPI](https://fastapi.tiangolo.com/)
- ✅ **Auth**: [Next-Auth.js](https://next-auth.js.org)
- ✅ **ORM**: [Prisma](https://prisma.io) & [SQLModel](https://sqlmodel.tiangolo.com/).
- ✅ **Database**: [Planetscale](https://planetscale.com/).
- ✅ **Styling**: [TailwindCSS + HeadlessUI](https://tailwindcss.com).
- ✅ **Schema Validation**: [Zod](https://github.com/colinhacks/zod) + [Pydantic](https://docs.pydantic.dev/).
- ✅ **LLM Tooling**: [Langchain](https://github.com/hwchase17/langchain).
<h2 align="center">
💝 支持 AgentGPT 的发展!! 💝
</h2>
<p align="center">
加入我们,共同推动AgentGPT的发展,这是一个突破人工智能代理边界的开源项目!您的赞助将通过帮助我们扩大资源、增强功能和继续迭代这个令人兴奋的项目来推动进步!🚀
</p>
<p align="center">
<!-- sponsors --><a href="https://github.com/arthurbnhm"><img src="https://github.com/arthurbnhm.png" width="60px" alt="Arthur" /></a><a href="https://github.com/mrayonnaise"><img src="https://github.com/mrayonnaise.png" width="60px" alt="Matt Ray" /></a><a href="https://github.com/jd3655"><img src="https://github.com/jd3655.png" width="60px" alt="Vector Ventures" /></a><a href="https://github.com/durairajasivam"><img src="https://github.com/durairajasivam.png" width="60px" alt="" /></a><a href="https://github.com/floriank"><img src="https://github.com/floriank.png" width="60px" alt="Florian Kraft" /></a><a href="https://github.com/localecho"><img src="https://github.com/localecho.png" width="60px" alt="" /></a><a href="https://github.com/fireheat135"><img src="https://github.com/fireheat135.png" width="60px" alt="" /></a><a href="https://github.com/zoelidity"><img src="https://github.com/zoelidity.png" width="60px" alt="Zoe" /></a><a href="https://github.com/busseyl"><img src="https://github.com/busseyl.png" width="60px" alt="Lucas Bussey" /></a><a href="https://github.com/DuanChaori"><img src="https://github.com/DuanChaori.png" width="60px" alt="" /></a><a href="https://github.com/jukwaphil1"><img src="https://github.com/jukwaphil1.png" width="60px" alt="" /></a><a href="https://github.com/lisa-ee"><img src="https://github.com/lisa-ee.png" width="60px" alt="Lisa" /></a><a href="https://github.com/VulcanT"><img src="https://github.com/VulcanT.png" width="60px" alt="" /></a><a href="https://github.com/kman62"><img src="https://github.com/kman62.png" width="60px" alt="kmotte" /></a><a href="https://github.com/Haithamhaj"><img src="https://github.com/Haithamhaj.png" width="60px" alt="" /></a><a href="https://github.com/SwftCoins"><img src="https://github.com/SwftCoins.png" width="60px" alt="SWFT Blockchain" /></a><a href="https://github.com/ChevalierzA"><img src="https://github.com/ChevalierzA.png" width="60px" alt="" /></a><a href="https://github.com/research-developer"><img src="https://github.com/research-developer.png" width="60px" alt="" /></a><a href="https://github.com/Mitchell-Coder-New"><img src="https://github.com/Mitchell-Coder-New.png" width="60px" alt="" /></a><a href="https://github.com/Trecares"><img src="https://github.com/Trecares.png" width="60px" alt="" /></a><a href="https://github.com/nnkostov"><img src="https://github.com/nnkostov.png" width="60px" alt="Nikolay Kostov" /></a><a href="https://github.com/oryanmoshe"><img src="https://github.com/oryanmoshe.png" width="60px" alt="Oryan Moshe" /></a><a href="https://github.com/ClayNelson"><img src="https://github.com/ClayNelson.png" width="60px" alt="Clay Nelson" /></a><a href="https://github.com/0xmatchmaker"><img src="https://github.com/0xmatchmaker.png" width="60px" alt="0xmatchmaker" /></a><a href="https://github.com/carlosbartolomeu"><img src="https://github.com/carlosbartolomeu.png" width="60px" alt="" /></a><a href="https://github.com/Agronobeetles"><img src="https://github.com/Agronobeetles.png" width="60px" alt="" /></a><a href="https://github.com/CloudyGuyThompson"><img src="https://github.com/CloudyGuyThompson.png" width="60px" alt="Guy Thompson" /></a><a href="https://github.com/Jhonvolt17"><img src="https://github.com/Jhonvolt17.png" width="60px" alt="" /></a><a href="https://github.com/sirswali"><img src="https://github.com/sirswali.png" width="60px" alt="Vusi Dube" /></a><a href="https://github.com/Tweezamiza"><img src="https://github.com/Tweezamiza.png" width="60px" alt="" /></a><a href="https://github.com/DixonFyre"><img src="https://github.com/DixonFyre.png" width="60px" alt="" /></a><a href="https://github.com/jenius-eagle"><img src="https://github.com/jenius-eagle.png" width="60px" alt="" /></a><a href="https://github.com/CubanCongaMan"><img src="https://github.com/CubanCongaMan.png" width="60px" alt="Roberto Luis Sanchez, P.E., P.G.; D,GE; F.ASCE" /></a><a href="https://github.com/cskrobec"><img src="https://github.com/cskrobec.png" width="60px" alt="" /></a><a href="https://github.com/Jahmazon"><img src="https://github.com/Jahmazon.png" width="60px" alt="" /></a><a href="https://github.com/ISDAworld"><img src="https://github.com/ISDAworld.png" width="60px" alt="David Gammond" /></a><a href="https://github.com/lazzacapital"><img src="https://github.com/lazzacapital.png" width="60px" alt="Lazza Capital" /></a><a href="https://github.com/OptionalJoystick"><img src="https://github.com/OptionalJoystick.png" width="60px" alt="" /></a><a href="https://github.com/rodolfoguzzi"><img src="https://github.com/rodolfoguzzi.png" width="60px" alt="" /></a><a href="https://github.com/bluecat2210"><img src="https://github.com/bluecat2210.png" width="60px" alt="" /></a><a href="https://github.com/dactylogram9"><img src="https://github.com/dactylogram9.png" width="60px" alt="" /></a><a href="https://github.com/RUFreeJAC63"><img src="https://github.com/RUFreeJAC63.png" width="60px" alt="" /></a><a href="https://github.com/cecilmiles"><img src="https://github.com/cecilmiles.png" width="60px" alt="" /></a><a href="https://github.com/Djarielm007"><img src="https://github.com/Djarielm007.png" width="60px" alt="" /></a><a href="https://github.com/mikenj07"><img src="https://github.com/mikenj07.png" width="60px" alt="" /></a><a href="https://github.com/SvetaMolusk"><img src="https://github.com/SvetaMolusk.png" width="60px" alt="" /></a><a href="https://github.com/wuminkung"><img src="https://github.com/wuminkung.png" width="60px" alt="" /></a><a href="https://github.com/zhoumo1221"><img src="https://github.com/zhoumo1221.png" width="60px" alt="" /></a><a href="https://github.com/Stefan6666XXX"><img src="https://github.com/Stefan6666XXX.png" width="60px" alt="Stephane DeGuire" /></a><a href="https://github.com/lyska"><img src="https://github.com/lyska.png" width="60px" alt="Lyska" /></a><a href="https://github.com/KurganKolde"><img src="https://github.com/KurganKolde.png" width="60px" alt="" /></a><a href="https://github.com/sclappccsu"><img src="https://github.com/sclappccsu.png" width="60px" alt="Sharon Clapp at CCSU" /></a><a href="https://github.com/Rooba-Finance"><img src="https://github.com/Rooba-Finance.png" width="60px" alt="Rooba.Finance" /></a><a href="https://github.com/ferienhausmiete"><img src="https://github.com/ferienhausmiete.png" width="60px" alt="" /></a><a href="https://github.com/benjaminbales"><img src="https://github.com/benjaminbales.png" width="60px" alt="Benjamin Bales" /></a><a href="https://github.com/pimentel233"><img src="https://github.com/pimentel233.png" width="60px" alt="" /></a><a href="https://github.com/PinkyWobbles"><img src="https://github.com/PinkyWobbles.png" width="60px" alt="" /></a><a href="https://github.com/jconroy11"><img src="https://github.com/jconroy11.png" width="60px" alt="" /></a><a href="https://github.com/DavidJamesRotenberg"><img src="https://github.com/DavidJamesRotenberg.png" width="60px" alt="" /></a><a href="https://github.com/antecochat"><img src="https://github.com/antecochat.png" width="60px" alt="" /></a><a href="https://github.com/RealBonOfaSitch"><img src="https://github.com/RealBonOfaSitch.png" width="60px" alt="" /></a><!-- sponsors -->
</p>
<h2 align="center">
💪 贡献者 💪
</h2>
<p align="center">
我们的贡献者使这个项目成为可能。谢谢!🙏
</p>
<a href="https://github.com/reworkd/agentgpt/graphs/contributors">
<img src="https://contrib.rocks/image?repo=reworkd/agentgpt" />
</a>
<div align="center">
<sub>使用 <a href="https://contrib.rocks">contrib.rocks</a>制作。</sub>
</div>
================================================
FILE: docs/developers/api-keys.mdx
================================================
---
title: API Keys
---
Before you can use the Reworkd API, you will need to create an API key for your organization. To do this:
1. Travel to the organization API key page. You may either visit [https://auth.reworkd.ai/org/api_keys/](https://auth.reworkd.ai/org/api_keys/) directly or click the settings button on the organization menu dropdown
<Frame>
<img src="/images/organization-menu.png" />
</Frame>
2. Ensure you are on the `Organization API Keys` page
3. Click the `New API key` button and create a new API key with a reasonable expiration date
You should now be able to use your new API key to authenticate your requests. To do this, you will need to add the following header to your requests:
```
Authorization: Bearer <YOUR-API-KEY>
```
================================================
FILE: docs/developers/file-downloads.mdx
================================================
---
title: Handling File Downloads
---
Different types of file downloads require different code strategies. This page outlines various strategies you may take.
## Regular Download Links
Regular downloads occur when the file link is directly available within the HTML (typically in the `href` of an `<a>` tag). Clicking these links directly initiates a file download.
To handle these downloads:
1. Save the URL directly from the page.
2. Reworkd will then asynchronously visit and download the file. We use `curl-cffi` mimicking browser behavior when downloading the file.
```python
# Select the link element
link = await sdk.page.query_selector('a.download')
# Get the URL directly
href = await link.get_attribute("href")
# Save the URL, Lambda will handle the download
await sdk.save_data({"download_url": href })
```
## Indirect Download Links
Indirect downloads happen when the direct link isn't immediately visible but becomes available after clicking a button or link.
To handle indirect downloads:
1. Click the button/link to open the URL.
2. Capture and save the newly loaded URL.
3. Automatically navigate back.
```python
# Select element to open page
element = await sdk.page.query_selector('button.download')
# Capture the URL after clicking
download_url = await sdk.capture_url(element)
# Save URL for download via Lambda
await sdk.save_data({"download_url": download_url })
```
## JavaScript/Dynamic Downloads
Dynamic downloads occur when a file download is triggered by JavaScript events directly in the browser, without a direct URL.
To handle dynamic downloads:
1. Use `capture_download` method to trigger and capture the download directly in the browser.
2. Retrieve the file metadata (URL and title).
```python
# Select element triggering download
element = await sdk.page.query_selector('button.download')
# Capture download event directly
download_metadata = await sdk.capture_download(element)
# Save file metadata directly
await sdk.save_data({
"attachment": {
"download_url": download_metadata["url"],
"title": download_metadata["title"],
},
})
```
## Downloads Requiring Cookies/Session
Some sites require the download to occur within the same browser session that accessed the page, making AWS Lambda unsuitable.
In these cases:
- Follow the same approach as dynamic downloads, handling the download directly in the browser context using `capture_download`.
================================================
FILE: docs/developers/sdk.mdx
================================================
---
title: Scraping SDK
---
As part of code generation, Reworkd generates code in its own custom SDK called [Harambe](https://github.com/reworkd/harambe).
Harambe is web scraping SDK with a number of useful methods and features for:
- Saving data and validating that the data follows a specific schema
- Enqueuing (and automatically formatting) urls
- De-duplicating saved data, urls, etc
- Effectively handling classic web scraping problems like pagination, pdfs, downloads, etc
These methods, what they do, how they work, and some examples of how to use them will be highlighted below.
---
## `save_data`
Save scraped data and validate its type matches the current schema
**Signature:**
```python
def save_data(self, data: dict[str, Any], source_url: str | None = None) -> None
```
**Params:**
- `data`: Rows of data (as dictionaries) to save
- `source_url`: Optional URL to associate with the data, defaults to current page URL. Only use this if the source of the data is different than the current page when the data is saved
**Raises:**
- `SchemaValidationError`: If any of the saved data does not match the provided schema
**Example:**
```python
await sdk.save_data({ "title": "example", "description": "another_example" })
await sdk.save_data({ "title": "example", "description": "another_example" }, source_url="https://www.example.com/product/example_id")
```
---
## `enqueue`
Enqueue url(s) to be scraped later.
**Signature:**
```python
def enqueue(self, urls: str | Awaitable[str], context: dict[str, Any] | None = None, options: dict[str, Any] | None = None) -> None
```
**Params:**
- `urls`: urls to enqueue
- `context`: additional context to pass to the next run of the next stage/url. Typically just data that is only available on the current page but required in the schema. Only use this when some data is available on this page, but not on the page that is enqueued.
- `options`: job level options to pass to the next stage/url
**Example:**
```python
await sdk.enqueue("https://www.test.com")
await sdk.enqueue("/some-path") # This will automatically be converted into an absolute url
```
---
## `paginate`
SDK method to automatically facilitate paginating a list of elements.
Simply define a function that should return any of:
- A direct link to the next page
- An element with hrefs to the next page
- An element to click on to get to the next page
And call `sdk.paginate` at the end of your scrape function. The element will automatically be used to paginate the site and run the scraping code against all pages
Pagination will conclude once all pages are reached no next page element is found.
This method should ALWAYS be used for pagination instead of manual for loops and if statements.
**Signature:**
```python
def paginate(self, get_next_page_element: Callable[Ellipsis, Awaitable[str | playwright.async_api._generated.ElementHandle | None]], timeout: int = 2000) -> None
```
**Params:**
- `get_next_page_element`: the url or ElementHandle of the next page
- `timeout`: milliseconds to sleep for before continuing. Only use if there is no other wait option
**Example:**
```python
async def pager():
return await page.query_selector("div.pagination > .pager.next")
await sdk.paginate(pager)
```
---
## `capture_url`
Capture the url of a click event. This will click the element and return the url
via network request interception. This is useful for capturing urls that are
generated dynamically (eg: redirects to document downloads).
**Signature:**
```python
def capture_url(self, clickable: ElementHandle, resource_type: Literal[document, stylesheet, image, media, font, script, texttrack, xhr, fetch, eventsource, websocket, manifest, other, *] = 'document', timeout: int | None = 10000) -> str | None
```
**Params:**
- `clickable`: the element to click
- `resource_type`: the type of resource to capture
- `timeout`: the time to wait for the new page to open (in ms)
**Return Value:**
url: the url of the captured resource or None if no match was found
**Raises:**
- `ValueError`: if more than one page is created by the click event
---
## `capture_download`
Capture a download event that gets triggered by clicking an element. This method will:
- Handle clicking the element
- Download the resulting file
- Apply download handling logic and build a download URL
- Return a download metadata object
Use this method to manually download dynamic files or files that can only be downloaded in the current browser session.
**Signature:**
```python
def capture_download(self, clickable: ElementHandle, override_filename: str | None = None, override_url: str | None = None, timeout: float | None = None) -> DownloadMeta
```
**Return Value:**
DownloadMeta: A typed dict containing the download metadata such as the `url` and `filename`
---
## `capture_html`
Capture and download the html content of the document or a specific element.
The returned HTML will be cleaned of any excluded elements and will be wrapped in a proper HTML document structure.
**Signature:**
```python
def capture_html(self, selector: str = 'html', exclude_selectors: list[str] | None = None, soup_transform: Callable[BeautifulSoup, None] | None = None, html_converter_type: Literal[markdown, text] = 'markdown') -> HTMLMetadata
```
**Params:**
- `selector`: CSS selector of element to capture. Defaults to "html" for the document element.
- `exclude_selectors`: List of CSS selectors for elements to exclude from capture.
- `soup_transform`: A function to transform the BeautifulSoup html prior to saving. Use this to remove aspects of the returned content
- `html_converter_type`: Type of HTML converter to use for the inner text. Defaults to "markdown".
**Return Value:**
HTMLMetadata containing the `html` of the element, the formatted `text` of the element, along with the `url` and `filename` of the document
**Raises:**
- `ValueError`: If the specified selector doesn't match any element.
**Example:**
```python
meta = await sdk.capture_html(selector="div.content")
await sdk.save_data({"name": meta["filename"], "text": meta["text"], "download_url": meta["url"]})
```
---
## `capture_pdf`
Capture the current page as a pdf and then apply some download handling logic
from the observer to transform to a usable URL
**Signature:**
```python
def capture_pdf(self) -> DownloadMeta
```
**Return Value:**
DownloadMeta: A typed dict containing the download metadata such as the `url` and `filename`
**Example:**
```python
meta = await sdk.capture_pdf()
await sdk.save_data({"file_name": meta["filename"], "download_url": meta["url"]})
```
---
## `log`
Log a message via both `print` and `console.log` if a browser is running
Concatenates all arguments with spaces.
Args:
*args: Values to log (will be concatenated)
**Signature:**
```python
def log(self, args) -> None
```
================================================
FILE: docs/docs.json
================================================
{
"$schema": "https://mintlify.com/docs.json",
"theme": "mint",
"name": "Reworkd",
"background": {
"color": {
"light": "#FBFCFD",
"dark": "#11181C"
}
},
"colors": {
"primary": "#7E868C",
"light": "#7E868C",
"dark": "#7E868C"
},
"favicon": "/favicon.png",
"navigation": {
"tabs": [
{
"tab": "Documentation",
"icon": "book-open",
"groups": [
{
"group": "Get Started",
"pages": [
"introduction",
"key-concepts",
"schemas"
]
},
{
"group": "Features",
"pages": [
"features/deduplication",
{
"group": "Exports",
"pages": [
"features/exports/overview",
"features/exports/api-exports",
"features/exports/bulk-exports"
]
},
"features/scheduling",
"features/templates",
"features/file-downloads"
]
},
{
"group": "Developers",
"pages": [
"developers/api-keys",
"developers/sdk",
"developers/file-downloads"
]
}
]
},
{
"tab": "API Reference",
"icon": "book-open",
"openapi": "https://api.reworkd.dev/api/openapi.json"
}
],
"global": {
"anchors": [
{
"anchor": "Website",
"href": "https://www.reworkd.ai/",
"icon": "globe"
},
{
"anchor": "GitHub",
"href": "https://github.com/reworkd",
"icon": "github"
}
]
}
},
"logo": {
"light": "/images/logo.png",
"dark": "/images/logo-light.png"
},
"navbar": {
"primary": {
"type": "github",
"href": "https://github.com/reworkd"
}
},
"footer": {
"socials": {
"github": "https://github.com/reworkd",
"twitter": "https://twitter.com/ReworkdAI",
"linkedin": "https://www.linkedin.com/company/reworkd/"
}
}
}
================================================
FILE: docs/features/deduplication.mdx
================================================
---
title: Deduplication
description: Automatically generate scrapers
---
Reworkd automatically handles deduplicating data whenever your scrapers re-run.
## How It Works
When saving data, Reworkd uses a **unique key** (or composite key) based on the record's fields to determine if the data is new or if it is a duplicate of data that has already been saved.
| Scenario | Action Taken by Reworkd |
| --- | --- |
| **New row of data saved** | Inserts data and marks as a `CREATE` change. |
| **Duplicate row of data saved** | Skips insertion; no duplicate is created. |
| **Updating data that has been seen before (existing key)** | Updates existing record without duplication and marks as an `UPDATE` change |
## Defining your Deduplication Key
When you are creating your schema, you must also select which of the fields you want to use as part of your **primary/deduplication key**.
This deduplication key is critical to ensure you avoid duplicated data. It must:
- ✅ **Be unique** for every output row.
- ✅ **Remain stable** over time (avoid frequently changing fields).
- ✅ **Be consistent**. Regardless of what website you are on, this key must be the same for the same item.
If there is no one obvious key field, use multiple attributes to create a reliable **composite key**.
## Good vs. Poor Key Examples
#### Good key choices
- Unique ID like a **SKU** or **UPC**
- Combination of unique attributes like **Brand + Model + Color**
#### Poor key choices
- Price (frequently changes)
- Availability status (frequently fluctuating)
- Timestamp of last update
================================================
FILE: docs/features/exports/api-exports.mdx
================================================
---
title: API Exports
description: Export data via our APIs
---
The most common way for our customers to ingest our data is via our API endpoints.
If you haven't already, create an API key by following our [API key documentation](/developers/api-keys) and get started with our API below.
<CardGroup cols={1}>
<Card title="Outputs API" icon="chart-mixed" href="/api-reference/public/get-outputs-for-a-scraping-group">
Full API documentation for how to export data from your groups
</Card>
</CardGroup>
## Getting only new data
Use the `created_after` query parameter to filter for data created after your last ingestion.
Typically our customers will call our API once a day, keeping track of the exact datetime in which they made the API call.
Any subsequent API calls they make will set `created_after` to the previously recorded datetime.
================================================
FILE: docs/features/exports/bulk-exports.mdx
================================================
---
title: Bulk Exports
description: Export data via our UI
---
Bulk exports are JSON or CSV files of all of the scraped data within a group or job.
You create bulk exports in our UI by selecting the group you want to export, and optionally selecting a job and/or a date you want to filter the data by.
Bulk exports are useful for getting a full snapshot of your data at a given point in time but our API exports should be the preferred export method for most use cases.
<Warning>Note: Running an export for a large group may take a very long time to complete.</Warning>
<CardGroup cols={1}>
<Card title="Reworkd Exports Page" icon="files" href="https://app.reworkd.ai/exports">
Bulk export data from your scraping groups
</Card>
</CardGroup>
================================================
FILE: docs/features/exports/overview.mdx
================================================
---
title: Exports Overview
sidebarTitle: Overview
description: Exporting your data out of Reworkd
---
<CardGroup cols={2}>
<Card title="API Exports" icon="chart-mixed" href="/features/exports/api-exports">
Dynamically export data from your groups via our APIs
</Card>
<Card title="Bulk Exports" icon="files" href="/features/exports/bulk-exports">
Create single file exports of entire groups via our UI
</Card>
</CardGroup>
================================================
FILE: docs/features/file-downloads.mdx
================================================
---
title: File Downloads
---
Reworkd can automatically handle downloading files on your behalf. Files are stored in our infrastructure, and download links to these files are provided in all export formats.
## Setting up downloads
To configure automatic downloads:
1. Create a field in your schema with the **URL** type.
2. In the field settings, ensure **Download file from URL** is set to `True`.
3. Create a job that will save the download URL to a file in this field.
Once the job is run, the file linked in that URL will be automatically downloaded.
<Warning>
Note: File downloads happen asynchronously. It may take time for files to appear in your exports.
</Warning>
## Retrieving files
File download links will be included in the `files` array of your exports.
Example API response for file data:
```json
{
...
"files": [
{
"id": "70057eca-d05c-4a33-ae84-4af8dce83ce3",
"field": "attachments[0].url",
"url_etag_hash": "92359181252f9b52a4da21599fbf8f8d.pdf",
"s3_key": "test_key.pdf",
"s3_url": "https://files.reworkd.dev/test_url",
"source_url": "https://source-website.com/download/49a42973",
"create_date": "2024-08-26T18:49:31.575000",
"file_url": "s3://deworkd-prod-files/11ee111ee.pdf",
"file_type": "pdf",
"file_checksum": "7eec76e4bd1fed22f5d7d5fa7efbeaf717a77da771bb5c61e09b0d7ae46bbd",
"file_metadata": {
"url": "https://source-website.com/download/49a42973",
"filename": "Test document.pdf",
"dynamic_download": "true"
}
}
],
...
}
```
### Key fields
- `s3_url`: Pre-signed URL to retrieve the file from our S3 bucket.
- `source_url`: Original URL of the file; points to our S3 bucket if no canonical source URL exists. If so, file_metadata.dynamic_download will be set to true.
- `field`: Indicates which field in the output data the file relates to.
## How are files downloaded?
#### Regular downloads
Regular downloads occur when files are directly accessible via a URL (e.g., direct PDF links).
- The canonical URL of the file is used and saved
- Files are downloaded asynchronously via AWS Lambda using a dedicated download queue. Delays may occur.
#### Dynamic downloads
Dynamic downloads occur when there is no canonical URL available, typically triggered via JavaScript or requiring active session information.
- Files are downloaded directly in the browser worker to guarantee accuracy.
- Because no canonical link is available, the link to the current page is used as the source URL.
- For more technical details, see Handling file downloading.
## File storage
**We can only guarantee that your downloaded files remain stored within our S3 buckets for 90 days.**
If your use case requires longer retention periods, please let us know!
================================================
FILE: docs/features/scheduling.mdx
================================================
---
title: Scheduling
description: Re-use scrapers across identical sites
---
You can schedule groups to be re-run at a specific cadence. To set a schedule, go to the settings tab within a group and select the schedule you want to use.
## Overriding schedules
Often there may be specific sources within a group that you want to run more or less frequently than the rest of the group.
To do this, you can override the schedule for the specific source by going into the settings tab of the job.
## How are pages re-visited?
#### Category/Listing pages
All higher level stages such as category and listing pages will always be re-run in subsequent runs.
They will enqueue and run all of their lower level stages (except for detail pages).
#### Detail pages
Detail page visits are de-duplicated. By we do not revisit detail pages after initially scraping its data by default.
This is because there is no consistent way to detect detail page changes without actually opening the page and re-running the extraction code. If you require detail page re-visits, please reach out to us!
================================================
FILE: docs/features/templates.mdx
================================================
---
title: Templates
description: Re-use scrapers across identical sites
---
<Note>Note: Templates are not available for hobby plan customers</Note>
When scraping, you'll often encounter multiple websites using identical underlying structures or sharing the same web provider.
Instead of repeatedly writing new scrapers for each of these websites—which consumes both your time and LLM tokens—use Templates.
Templates allow you to save and re-use pre-built scraper code.
Once created, templates can be applied to multiple websites with matching structures, without any extra effort required.
This means whenever the structure of these websites changes, you only need to update the template once to instantly fix the issue for all associated sites, rather than manually updating each individual scraper.
================================================
FILE: docs/introduction.mdx
================================================
---
title: Introduction
description: Reworkd - Extract web data at scale
---
<Frame>
<img src="/images/banner.png" />
</Frame>
Reworkd uses LLMs to parse, understand, and interact with web pages to help users scrape web data at ***scale***.
Reworkd customers are extracting millions of rows of data to help build data constrained products, fine tune domain specific language models, and enrich existing data pipelines.
<Info>
We also built AgentGPT! If you're looking for info on AgentGPT, please visit our
[Github](https://github.com/reworkd/AgentGPT)
</Info>
<CardGroup cols={2}>
<Card title="Build your first scraper" icon="lightbulb" href="https://app.arcade.software/share/6GkFKiXytq3lXQU3JWAx">
Learn how to scrape a website and its sub pages with Reworkd
</Card>
<Card title="Key terms" icon="brain" href="/key-concepts">
Understand all of the key terms required to get started
</Card>
<Card title="Exporting data" icon="globe" href="/features/exports/overview">
Learn how to export the data you scrape
</Card>
<Card title="Blog" icon="rss" href="https://www.reworkd.ai/blog">
Read the latest updates on the Reworkd blog
</Card>
</CardGroup>
================================================
FILE: docs/key-concepts.mdx
================================================
---
title: Key Concepts
description: Everything you need to get started with Reworkd
---
# Groups
A group is the first thing you create when you use Reworkd.
Groups are a collection of source urls/jobs that share a common schema and scraping frequency.
For example, if you were looking to scrape multiple online bookstores for book data, you might create a **Bookstore** group
and add all of the bookstore source URLs within it.
### Schemas
A schema is a structured definition of the data you want to scrape from a website. Read more about schemas in our [Schemas](/features/schemas) page.
All jobs within a group will share the same schema.
# Jobs
A job represents a distinct source URL within a scraping group.
We break jobs down to various stages as a scraper flows through a website and enqueues additional pages.
We consider the first job the source job, and any jobs that get enqueued by the source job are considered child jobs.
Jobs can be configured with various settings such as proxy types, timeouts, and other parameters to optimize the scraping process for different page requirements.
### Stages
Every job is associated with a specific type of stage. Suppose you are wanting to scrape an e-commerce website.
1. The first stage might be the **category** page. This page would list all of the different categories of products available on the site such as shirts, pants, shoes, etc.
This job would go through and enqueue all of these categories as listing pages.
2. Each **listing** page would just be all of the products under a specific category. For example, it may be a list of pants.
Listing jobs would just go through each page of the list and enqueue the associated product detail page.
3. Finally, the **detail** page would be the final page. This page contains all of the information about a specific product. This job would just save the data of the product and be done.
# Run
A `Run` is a single execution of a scraping job.
Job runs are essential for tracking the status and results of each scraping attempt, ensuring data is consistently collected and processed correctly;
they can also be retried upon failures to enhance data accuracy.
Additionally, job runs often generate a list of outputs, capturing the extracted data or links to be further processed.
================================================
FILE: docs/schemas.mdx
================================================
---
title: Schemas
---
Schemas are the definition for the exact data format you expect websites within a particular group to use.
Every row of data Reworkd processes will go through a strict schema validation process to guaranteed your data is consistent with your schema.
## Schema field types
Schemas support both basic data types like strings and numbers along with a collection of advanced fields that apply transformations to the data:
- **URL**: A string field that transform relative URLs into absolute URLs and fail if an invalid URL is provided. URL fields will also allow you to download files from whatever URL is provided. See the Downloading files page for more information.
- **Phone Number**: A string field that will case cast values to known phone number types
- **Currency**
## What makes for a good schema?
How well you can scrape a page is is heavily impacted by your schema choices. Here are some loose guides on making a good schema:
1. Simple. The less fields there are, the less room for error there.
2. Only use fields you need today. Do not build schemas for fields you probably won't need
3. Ensure schema fields actually appear on the page.
- Do not include nice-to-have fields that never actually appear on any website
- Do not include fields that are only present in one of your 10s/100s/1000s of websites
4. **Capture fields as they appear on the page.** If they appear as arbitrary strings but your system requires them to be in domain specific enums, capture them as strings and create your own post processing layer to transform them as necessary
5. Avoid derived field: fields that are generated from other fields in the schema. Derived fields should be handled in your own application code
6. Ensure fields are unambiguous
- Carefully name fields as they appear on websites
- Provide field descriptions and example values where possible to clarify ambiguity. Clarify industry specific naming jargon and describe all of the different aliases that a given field may go by on the site
7. Use advanced fields if possible. They abstract away some of the complexities of data transformations from LLMs leading to lower failures and higher data consistency
## What if the page is missing fields?
Often not every website will conform to the unified schema you’ve created.
Sometimes individual pages may be missing fields while other times the entire website itself may not present a field.
If the field is missing, it will be left as null in the output. If it is an array, it will be left as an empty array.
================================================
FILE: next/.dockerignore
================================================
**/.git
**/node_modules
**/idea
**/.next
**/aws
**/.husky
**/venv
================================================
FILE: next/.eslintrc.json
================================================
{
"overrides": [
{
"extends": [
"plugin:@typescript-eslint/recommended-requiring-type-checking"
],
"files": [
"*.ts",
"*.tsx"
],
"parserOptions": {
"project": "tsconfig.json"
}
}
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"project": "./tsconfig.json"
},
"plugins": [
"@typescript-eslint", "import"
],
"extends": [
"next/core-web-vitals",
"plugin:@typescript-eslint/recommended"
],
"rules": {
"@typescript-eslint/consistent-type-imports": "warn",
"@typescript-eslint/no-unused-vars": "off",
"@typescript-eslint/no-unsafe-return": "off",
"@typescript-eslint/no-unsafe-member-access": "off",
"@typescript-eslint/no-unsafe-call": "off",
"@typescript-eslint/no-unsafe-assignment": "off",
"@typescript-eslint/no-unsafe-argument": "off",
"@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/no-restricted-imports": [
"error",
{
"paths": [
{
"name": "react-i18next",
"importNames": [
"useTranslation"
],
"message": "Import useTranslation from next-i18next instead."
}
]
}
],
"import/no-unresolved": "error",
// "import/no-named-as-default-member": "off",
"import/order": [
"error",
{
"groups": [
"builtin", // Built-in imports (come from NodeJS native) go first
"external", // <- External imports
"internal", // <- Absolute imports
["sibling", "parent"], // <- Relative imports, the sibling and parent types they can be mingled together
"index", // <- index imports
"unknown" // <- unknown
],
"newlines-between": "always",
"alphabetize": {
/* sort in ascending order. Options: ["ignore", "asc", "desc"] */
"order": "asc",
/* ignore case. Options: [true, false] */
"caseInsensitive": true
}
}
]
}
}
================================================
FILE: next/.gitignore
================================================
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# database
/prisma/db.sqlite
/prisma/db.sqlite-journal
/db/db.sqlite
# next.js
/.next/
/out/
next-env.d.ts
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
# local env files
# do not commit any .env files to git, except for the .env.example file. https://create.t3.gg/en/usage/env-variables#using-environment-variables
.env*
# vercel
.vercel
# typescript
*.tsbuildinfo
.idea
.swc
# extracted language files
/public/locales/$LOCALES
.eslintcache
# Sentry Auth Token
.sentryclirc
/volumes/
================================================
FILE: next/.husky/.gitignore
================================================
_
================================================
FILE: next/.husky/pre-commit
================================================
#!/usr/bin/env sh
#npx lint-staged --allow-empty
================================================
FILE: next/Dockerfile
================================================
# Use the official Node.js image as the base image
FROM node:19-alpine
ARG NODE_ENV
ENV NODE_ENV=$NODE_ENV
# Needed for the wait-for-db script
RUN apk add --no-cache netcat-openbsd
# Set the working directory
WORKDIR /next
# Copy package.json and package-lock.json to the working directory
COPY package*.json ./
# Install dependencies
RUN npm ci
# Copy the wait-for-db.sh script
COPY wait-for-db.sh /usr/local/bin/wait-for-db.sh
RUN chmod +x /usr/local/bin/wait-for-db.sh
# Copy the rest of the application code
COPY . .
COPY entrypoint.sh /
# Ensure correct line endings after these files are edited by windows
RUN apk add --no-cache dos2unix netcat-openbsd \
&& dos2unix /entrypoint.sh
# Expose the port the app will run on
EXPOSE 3000
ENTRYPOINT ["sh", "/entrypoint.sh"]
# Start the application
CMD ["npm", "run", "dev"]
================================================
FILE: next/__mocks__/matchMedia.mock.ts
================================================
// When using the matchMedia API in your tests, you will need to mock it.
Object.defineProperty(window, "matchMedia", {
writable: true,
value: jest.fn().mockImplementation((query: string) => ({
matches: false,
media: query,
onchange: null,
addListener: jest.fn(), // Deprecated
removeListener: jest.fn(), // Deprecated
addEventListener: jest.fn(),
removeEventListener: jest.fn(),
dispatchEvent: jest.fn(),
})),
});
================================================
FILE: next/__tests__/message-service.test.ts
================================================
import "../__mocks__/matchMedia.mock"
import type { Message } from "../src/types/message";
import { MessageService } from "../src/services/agent/message-service";
describe("sendErrorMessage", () => {
let instance: MessageService;
let renderMessage: jest.Mock;
beforeEach(() => {
renderMessage = jest.fn((message: Message) => ({}));
instance = new MessageService(renderMessage);
});
it("should handle Axios errors", () => {
const axiosError = {
isAxiosError: true,
response: { status: 429, data: { detail: "ERROR_API_KEY_QUOTA" } },
};
instance.sendErrorMessage(axiosError);
expect(renderMessage).toHaveBeenCalledWith({
type: "error",
value: "ERROR_API_KEY_QUOTA",
});
});
it("should handle platform errors", () => {
const axiosError = {
isAxiosError: true,
response: {
status: 409,
data: {
error: "OpenAIError",
detail: "You have exceeded the maximum number of requests allowed for your API key.",
code: 429,
},
},
};
instance.sendErrorMessage(axiosError);
expect(renderMessage).toHaveBeenCalledWith({
type: "error",
value: axiosError.response.data.detail,
});
});
it("should handle unknown platform errors", () => {
const axiosError = {
isAxiosError: true,
response: { status: 409 },
};
instance.sendErrorMessage(axiosError);
expect(renderMessage).toHaveBeenCalledWith({
type: "error",
value: "An Unknown Error Occurred, Please Try Again!",
});
});
it("should handle non-Axios string errors", () => {
const error = "An error occurred";
instance.sendErrorMessage(error);
expect(renderMessage).toHaveBeenCalledWith({
type: "error",
value: error,
});
});
it("should handle unknown errors", () => {
instance.sendErrorMessage({});
expect(renderMessage).toHaveBeenCalledWith({
type: "error",
value: "An unknown error occurred. Please try again later.",
});
});
});
================================================
FILE: next/__tests__/stripe.sh
================================================
stripe listen --forward-to localhost:3000/api/webhooks/stripe
================================================
FILE: next/__tests__/whitespace.test.ts
================================================
import { isEmptyOrBlank } from "../src/utils/whitespace";
describe("WhiteSpace and empty string should return true", () => {
test("Empty string should return true", () => {
const emptyString = "";
expect(isEmptyOrBlank(emptyString)).toEqual(true);
})
test("WhiteSpace string should return true", () => {
const whiteSpaceString = " ";
expect(isEmptyOrBlank(whiteSpaceString)).toEqual(true);
})
test("NewLine should return true", () => {
const newLineString = "\n\n";
expect(isEmptyOrBlank(newLineString)).toEqual(true);
})
})
================================================
FILE: next/__tests__/with-retries.test.ts
================================================
import { withRetries } from "../src/services/api-utils";
describe("withRetries", () => {
it("should retry 3 times by default", async () => {
let numTries = 0;
await withRetries(
(): Promise<void> => {
++numTries;
throw new Error();
},
(): Promise<boolean> => {
return Promise.resolve(true);
}
);
expect(numTries).toEqual(4);
});
it("should retry numRetries times on error", async () => {
const numRetries = 5;
let numTries = 0;
await withRetries(
(): Promise<void> => {
++numTries;
throw new Error();
},
(): Promise<boolean> => {
return Promise.resolve(true);
},
numRetries
);
expect(numTries).toEqual(numRetries + 1);
});
it("should retry if onError returns true", async () => {
let numTries = 0;
await withRetries(
(): Promise<void> => {
++numTries;
throw new Error();
},
(): Promise<boolean> => {
return Promise.resolve(true);
}
);
expect(numTries).toBeGreaterThan(1);
});
it("should stop if onError returns false", async () => {
let numTries = 0;
await withRetries(
(): Promise<void> => {
++numTries;
throw new Error();
},
(): Promise<boolean> => {
return Promise.resolve(false);
}
);
expect(numTries).toEqual(1);
});
});
================================================
FILE: next/entrypoint.sh
================================================
#!/usr/bin/env sh
cd /next
dos2unix wait-for-db.sh
# copy .env file if not exists
[ ! -f .env ] && [ -f .env.example ] && cp .env.example .env
cp .env .env.temp
dos2unix .env.temp
cat .env.temp > .env
rm .env.temp
source .env
# Ensure DB is available before running Prisma commands
./wait-for-db.sh agentgpt_db 3307
# Run Prisma commands
if [[ ! -f "/app/prisma/${DATABASE_URL:5}" ]]; then
npx prisma migrate deploy --name init
npx prisma db push
fi
# Generate Prisma client
npx prisma generate
# run cmd
exec "$@"
================================================
FILE: next/jest.config.cjs
================================================
const nextJest = require("next/jest");
const createJestConfig = nextJest({
// Provide the path to your Next.js app to load next.config.js and .env files in your test environment
dir: "./",
});
// Add any custom config to be passed to Jest
/** @type {import('jest').Config} */
const customJestConfig = {
// Add more setup options before each test is run
// setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
// if using TypeScript with a baseUrl set to the root directory then you need the below for alias' to work
moduleDirectories: ["node_modules", "<rootDir>/"],
testEnvironment: "jest-environment-jsdom",
};
// createJestConfig is exported this way to ensure that next/jest can load the Next.js config which is async
module.exports = createJestConfig(customJestConfig);
================================================
FILE: next/next-i18next.config.js
================================================
module.exports = {
i18n: {
defaultLocale: "en",
locales: [
"en",
"hu",
"fr",
"de",
"it",
"ja",
"lt",
"zh",
"zhtw",
"ko",
"pl",
"pt",
"ro",
"ru",
"uk",
"es",
"nl",
"sk",
"hr",
"tr",
],
},
localePath: typeof window === "undefined" ? "./public/locales" : "/locales",
debug: false,
reloadOnPrerender: process.env.NODE_ENV === "development",
defaultNS: "common",
ns: ["common", "help", "settings", "chat", "agent", "errors", "languages", "drawer", "indexPage"],
react: {
useSuspense: false,
},
saveMissing: true,
};
================================================
FILE: next/next.config.mjs
================================================
import nextI18NextConfig from "./next-i18next.config.js";
// @ts-check
/**
* Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation.
* This is especially useful for Docker builds.
*/
!process.env.SKIP_ENV_VALIDATION && (await import("./src/env/server.mjs"));
/** @type {import("next").NextConfig} */
const config = {
reactStrictMode: true,
/* If trying out the experimental appDir, comment the i18n config out
* @see https://github.com/vercel/next.js/issues/41980 */
i18n: nextI18NextConfig.i18n,
webpack: function(config, options) {
config.experiments = { asyncWebAssembly: true, layers: true };
config.watchOptions = {
poll: 1000,
aggregateTimeout: 300
};
config.module.rules.push({
test: /\.svg$/i,
issuer: /\.[jt]sx?$/,
use: ['@svgr/webpack'],
})
return config;
},
rewrites() {
return {
beforeFiles: [
{
source: '/:path*',
has: [
{
type: 'host',
value: 'reworkd.ai',
},
],
destination: '/landing-page',
},
]
}
}
};
export default config;
================================================
FILE: next/package.json
================================================
{
"name": "agent-gpt",
"version": "1.0.0",
"private": true,
"engines": {
"node": ">=18.0.0 <19.0.0"
},
"scripts": {
"build": "next build --no-lint",
"dev": "next dev",
"postinstall": "prisma generate",
"lint": "cross-env SKIP_ENV_VALIDATION=1 next lint --fix",
"start": "next start",
"prepare": "cd .. && husky install next/.husky",
"test": "cross-env SKIP_ENV_VALIDATION=1 jest"
},
"dependencies": {
"@headlessui/react": "^1.7.14",
"@next-auth/prisma-adapter": "^1.0.5",
"@prisma/client": "^4.9.0",
"@radix-ui/react-switch": "^1.0.2",
"@radix-ui/react-toast": "^1.1.4",
"@radix-ui/react-tooltip": "^1.0.5",
"@react-pdf/renderer": "^3.1.9",
"@sid-hq/sid": "^3.1.0",
"@splinetool/react-spline": "^2.2.6",
"@tailwindcss/forms": "^0.5.3",
"@tanstack/react-query": "^4.29.14",
"@trpc/client": "^10.21.1",
"@trpc/next": "^10.21.1",
"@trpc/react-query": "^10.21.1",
"@trpc/server": "^10.9.0",
"@types/lodash": "^4.14.194",
"@uiball/loaders": "^1.3.0",
"@vercel/analytics": "^1.0.1",
"@vercel/edge": "^0.3.4",
"axios": "^0.26.0",
"cheerio": "^1.0.0-rc.12",
"clsx": "^1.2.1",
"cobe": "^0.6.3",
"cookies-next": "^2.1.2",
"framer-motion": "^10.12.8",
"gray-matter": "^4.0.3",
"html-to-image": "^1.11.11",
"i18next": "^22.4.15",
"lodash": "^4.17.21",
"next": "^13.5.6",
"next-auth": "4.20.1",
"next-i18next": "^13.2.2",
"nextjs-google-analytics": "^2.3.3",
"openai": "^4.14.2",
"react": "18.2.0",
"react-dom": "18.2.0",
"react-i18next": "^12.3.1",
"react-icons": "^4.11.0",
"react-markdown": "^8.0.7",
"react-type-animation": "^3.1.0",
"rehype-highlight": "^6.0.0",
"remark-gfm": "^3.0.1",
"superjson": "1.9.1",
"tailwindcss-radix": "^2.8.0",
"uuid": "^9.0.1",
"zod": "^3.22.2",
"zustand": "^4.3.7"
},
"devDependencies": {
"@svgr/webpack": "^8.0.1",
"@tailwindcss/typography": "^0.5.9",
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^14.0.0",
"@types/node": "^18.11.18",
"@types/prettier": "^2.7.3",
"@types/react": "^18.0.26",
"@types/react-dom": "^18.2.7",
"@types/uuid": "^9.0.5",
"@typescript-eslint/eslint-plugin": "^5.59.8",
"@typescript-eslint/parser": "^5.59.1",
"autoprefixer": "^10.4.7",
"cross-env": "^7.0.3",
"eslint": "^8.43.0",
"eslint-config-next": "13.4.1",
"eslint-plugin-import": "^2.27.5",
"husky": "^8.0.3",
"jest": "^29.3.1",
"jest-environment-jsdom": "^29.7.0",
"lint-staged": "^13.2.1",
"postcss": "^8.4.24",
"prettier": "^2.8.8",
"prettier-plugin-tailwindcss": "^0.2.8",
"prisma": "^4.9.0",
"tailwindcss": "^3.3.2",
"typescript": "^5.1.3"
},
"ct3aMetadata": {
"initVersion": "7.4.0"
},
"lint-staged": {
"*.js": "eslint --cache --fix",
"*.{js,css,md}": "prettier --write"
}
}
================================================
FILE: next/postcss.config.cjs
================================================
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};
================================================
FILE: next/posts/Understanding-AgentGPT.mdx
================================================
---
title: "Understanding AgentGPT: How we build AI agents that reason, remember, and perform."
description: "How we build AI agents that reason, remember, and perform."
imageUrl: "https://petal-diplodocus-04a.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fef520689-ca1b-4489-98aa-41136f565840%2FCybrCo_Art_human-like_robot_typing_on_a_computer_in_a_dark_room_a0174b88-a5b9-4b82-98c6-734dbbde8d09.webp?id=f768fec9-bd6a-43ae-811d-1adb065c6c8e&table=block&spaceId=46c3481b-d8de-4c34-8647-2292d63a5f29&width=2000&userId=&cache=v2"
date: "July 17th, 2023"
datetime: "2023-07-17"
category:
title: "Tech"
href: "#"
author:
name: "Arthur Riechert"
role: "Writer"
href: "#"
imageUrl: "https://pbs.twimg.com/profile_images/1676828916546248704/5YMDlr1U_400x400.jpg"
---

> Alt: A robotic agent types at a laptop in a dark room.
---
The invention of the **Generative Pre-trained Transformer (GPT)** is one of the recent decade's most important
advancements in AI technology. The GPTs powering today's **Large Language Models (LLMs)** demonstrate a _remarkable
ability for reasoning, understanding, and planning_. However, their true potential has yet to be fully realized.
At **Reworkd**, we believe that the _true power of LLMs lies in agentic behavior_. By engineering a system that draws on
LLMs' emergent abilities and providing an ecosystem that supports environmental interactions, we can draw out the full
potential of models like GPT-4. Here's how AgentGPT works.
## LLMs have a lot of limitations.
The main products shipping LLMs are chatbots powered by
[Foundation Model - Techopedia](https://www.techopedia.com/definition/34826/foundation-model).
If you have any familiarity working with OpenAI's API, a common formula you might use for chatting with the model may
include:
- Taking the user's message.
- Adding a list of chat histories.
- Sending the chat history across the API to retrieve a completion.
This method works fine when the scope of conversations is small; however, _as you continue adding new messages to the
chat history, the size and complexity of completions balloons_, and you will quickly run into a wall: the dreaded
context limit.
A **context limit** is the maximum number of **tokens** (a token usually represents a single word) that can be input
into
the model for a single response. They are necessary because the _computational cost as we add additional tokens tends to
increase quadratically_. However, they are often the bane of prompt engineers.
One solution is to measure the number of tokens in the chat history before sending it to the model and removing old
messages to ensure it fits the token limit. While this approach works, it ultimately reduces the amount of knowledge
available to the assistant.
Another issue that standalone LLMs face is the need for human guidance. Fundamentally, LLMs are next-word predictors,
and often, their internal structure is not inherently suited to higher-order thought processes, such as **reasoning**
through complex tasks. This weakness doesn't mean they can't or don't reason. In fact, there are several [studies](https://arxiv.org/abs/2205.11916#:~:text=While%20these%20successes%20are%20often%20attributed%20to%20LLMs%27,%22Let%27s%20think%20step%20by%20step%22%20before%20each%20answer.) that shows they can. However, it does mean they face certain impediments. For example, the LLM itself can create a logical list of steps; however, it has _no built-in mechanisms for observation and reflection on that list._
A pre-trained model is essentially a "black box" for the end user in which the final product that is shipped has
_limited to no capability of actively updating its knowledge base and tends to act in unpredictable ways_. As a result,
it's [hallucination](https://arxiv.org/abs/2202.03629)-prone.
Thus, it requires a lot of effort on the user's part to guide the model's output, and prompting the LLM itself becomes a
job on its own. This extra work is a far cry from our vision of an AI-powered future.
By providing a platform to give LLMs agentic abilities, _AgentGPT aims to overcome the limitations of standalone LLMs by
leveraging prompt engineering techniques, vector databases, and API tooling._ Here’s some interesting work that is being
done with the agent concept:
[](https://twitter.com/DrJimFan/status/1673006745067847683)
> Alt: A Twitter post by Dr. Jim Fan
## What are agents?
In a general sense, [agents](https://zapier.com/blog/ai-agent/) are rational actors. They use thinking and reasoning to
influence their environment. _This could be in the form of solving problems or pursuing specific goals. They might
interact with humans or utilize tools._ Ultimately, we can apply this concept to LLMs to instill more intelligent and
logical behavior.
In AgentGPT, large language models essentially function as the **brain** of each agent. As a result, we can produce
powerful agents by cleverly _manipulating the English language_ and engineering a _framework that supports
interoperability between LLM completions and a diverse set of APIs_.
### Engineering this system consists of 3 parts.
**Reasoning and Planning.** If you were to simply take a general goal, such as "build a scaling e-commerce platform,"
and
give it to ChatGPT, you would likely get a response along the lines of "As an AI language model…." However, through
**prompt engineering**, we can get a model to _break down goals into digestible steps and reflect on them_ with a method
called chain of thought prompting.
**Memory.** When dealing with memory, we divide the problem into **short-term** and **long-term**. In managing
short-term
memory, we can use prompting techniques such as _few-shot prompting to steer LLM responses_. However, _cost and context
limits make it tricky to generate completions without limiting the breadth of information_ a model can use to make
decisions.
Similarly, this issue also arises in **long-term memory** because it would be impossible to provide an appropriate
corpus
of writing to bridge the gap between GPT -4's cutoff date, 2021, till today. By using vector databases, we attempt to
overcome this using specialized models for _information retrieval in high-dimensional vector spaces_.
**Tools**. Another challenge in using LLMs as general actors is their confinement to text outputs. Again, we can use
prompt engineering techniques to solve this issue. We can generate predictable function calls from the LLM through
few-shot and chain-of-thought methods, utilizing API tools like **Google Search**, **Hugging Face**, **Dall-E**, etc. In
addition, we can use fine-tuned LLMs that only return responses in specialized formatting, like JSON. This is the
approach OpenAI took when they recently released the function calling feature for their API.
These three concepts have formed the backbone of multiple successful agent-based LLM platforms such
as [Microsoft Jarvis](https://github.com/microsoft/JARVIS), [AutoGPT](https://github.com/Significant-Gravitas/Auto-GPT), [BabyAGI](https://github.com/yoheinakajima/babyagi),
and of course, AgentGPT. With this brief overview in mind, let's dive deeper into each component.
## How do we get agents to act intelligently?
**Prompt engineering** has become highly popularized, and it's only natural given its ability to _increase the
reliability of LLM responses_, opening a wide avenue of potential applications for generative AI. AgentGPT's ability to
think and reason is a result of novel prompting methods.
### A Brief Intro to Prompt Engineering
Prompt engineering is a largely empirical field that aims to find methods to steer LLM responses by finding clever ways
to use the English language. _You can think of it like lawyering, where every nuance in the wording of a prompt counts._
These are the main concepts and building blocks for more advanced prompting techniques:
1. **Zero-Shot** involves sending the raw command directly to the LLM with little to no formatting.
2. **Few-Shot** gives context for completions in the form of example responses.
3. **Chain-of-Thought** guides the model in reasoning through generating and reasoning over a complex task.
### How AgentGPT Uses Prompt Engineering
AgentGPT uses an advanced form of chain-of-thought prompting called **Plan-and-Solve** to generate the steps you see
when
operating the agents.
Traditionally, chain-of-thought prompting utilized few-shot techniques to provide examples of a thinking and reasoning
process. However, as is becomes a theme, it becomes more costly as the complexity of a task increases because we will
need to provide more context.
**Plan-and-solve (PS):** By virtue of being a zero-shot method, it provides a _prompting framework for LLM-guided
reasoning using "trigger" words_. These keywords trigger a reasoning response from the model.
We can expand on this concept by _modifying the prompt to extract important variables and steps to generate a final
response with a cohesive format_. This method allows us to parse the final response and display it for the end user as
well as feed sub-steps into future plan-and-solve prompts.

> Alt: Picture of Plan & Solve
While PS prompting helps evoke a reasoning response, it still misses a fundamental concept in reasoning, and that is
proper handling for reflection and action. **Reflection**is _fundamental for any agent because it must rationalize an
action, perform that action, and use feedback to adjust future actions._ Without it, the agent would be stateless and
unchanging.
AgentGPT uses a prompting framework called Reasoning and Acting ([ReAct](https://arxiv.org/pdf/2210.03629.pdf)) to
expand on the capabilities of the Plan-and-Solve concept. **ReAct** aims to _enable a framework for the model to access
fresh knowledge through external knowledge bases and make observations of actions it has taken_. Using those
observations, the LLM can make educated decisions on the next set of steps to complete while performing actions to query
knowledge bases such as **Google Search** or **Wikipedia API**.
Prompt engineering is largely effective in resolving challenges in short-term memory as well as instilling the reasoning
behavior that you can see when AgentGPT is at work. However, prompt engineering does not resolve the issue of long-term
memory. This issue is where vector databases come in, and we will look at those next.

> Alt : ReAct (Reason + Act) Logic Picture
> The ReAct framework allows us to generate a reasoning response, an action, and a reflection to
> steer the model’s response. This example is courtesy of the following
> paper: [ReAct: Synergizing Reasoning and Acting in Language Models](https://arxiv.org/abs/2210.03629)\*
## How do we give agents a working memory?
While we have seen that _prompt engineering is largely effective in resolving issues with short-term memory and
reasoning_, we cannot solve long-term memory solely through clever English. Since we are not allowed to update the model
to learn our data, we must build an external system for storing and retrieving knowledge.
A clever solution might use an LLM to _generate summaries of previous conversations as context for the prompt_. However,
there are three significant issues with this. First, we are diluting the relevant information for the conversation;
second, it introduces another cost area by paying for API usage for those summaries; and third, it's unscalable.
Thus, prompts appear to be ineffective for long-term memory. Seeing as _long-term memory is a problem of storage and
efficient retrieval of information_, there is no absence of research in the study of search, so we must look towards
vector databases.
### Vector Databases Demystified
**[Vector databases](https://aws.amazon.com/what-is/vector-databases/)** have been hyped up for a while now, and the
hype
is very deserved. They are an efficient way of storing and retrieving vectors by allowing us to use some fun new
_algorithms to query billions - even trillions - of data records in milliseconds._
Let's start with a little bit of vocabulary:
- A **vector** in the context of an LLM is a representation of a piece of text that a model like GPT-4 encodes.
- A **vector space** contains many of these vectors.
- An **embedding** is the vectorized version of a text.
### Vector libraries like
[Facebook AI Similarity Search](https://www.bing.com/ck/a?!&&p=a0f4167bc6cd7db9JmltdHM9MTY4ODM0MjQwMCZpZ3VpZD0zOTYwYjczZS1hNzg2LTY5Y2MtMjM2YS1hNDdmYTYwMjY4MjImaW5zaWQ9NTIwMQ&ptn=3&hsh=3&fclid=3960b73e-a786-69cc-236a-a47fa6026822&psq=faiss+github&u=a1aHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rcmVzZWFyY2gvZmFpc3M&ntb=1) (
FAISS) give us access to valuable _tools to control these vectors and locate them efficiently in the vector space._
Since the text is in a numerical embedding dictated by the model type (i.e., text-embedding-ada-002), there is some
location in space that the text exists in, and it's based on the numbers that compose its vector. That means _similar
texts will be represented as vectors with similar numbers, and thus, they will likely be grouped closely. On the other
hand, less similar texts will be further away_. For example, texts about cooking will be closer to food than texts about
physics.
There are several different algorithms for querying the vector space, but the most relevant to this discussion is the
cosine similarity search. **[Cosine similarity](https://www.geeksforgeeks.org/cosine-similarity/)** measures the cosine
of the angle between two non-zero vectors. _It is a measure of orientation, meaning that it's used to determine how
similar two documents (or whatever the vectors represent) are_. Cosine similarity can range from -1 to 1, with -1
meaning the vectors are diametrically opposed (completely opposite), 0 meaning the vectors are orthogonal (or
unrelated), and 1 meaning the vectors are identical.
FAISS is helpful in managing these vector spaces, but it is not a database. _Vector libraries
lack [CRUD](https://www.freecodecamp.org/news/crud-operations-explained/) operations, which makes them alone unviable
for long-term memory_, and that's where cloud services such as Pinecone and Weaviate step in.
**Pinecone** and **Weaviate** essentially do all the hard work of managing our vectors. They provide an API that allows
you
to upload embeddings, perform various types of searches, and store those vectors for later. _They provide the typical
CRUD functions we need to instill memory into LLMs in easily-accessible Python modules._
By using them, we can encode large amounts of information for future storage and retrieval. For instance, when the LLM
needs extra knowledge to complete a task, we can prompt it to query the vector space to find relevant information. Thus,
we can create long-term memory.

> Alt : Robot With A Rose In Hand
## Tools to interact with the environment
While **prompt engineering** and **vector databases** resolve many of the limitations and challenges of LLMs, there is
still the problem of agent interaction. _How can we extend the capabilities of an LLM to interact with the environment
outside of text?_
APIs are the answer. By utilizing APIs, we can give our agents the ability to perform a wide range of actions and
access external resources.
Here are a few examples:
- **Google Search API**: Allows agents to search the web and retrieve relevant information.
- **Hugging Face**: Provides access to various NLP models and transformers for tasks such as summarization, translation,
sentiment analysis, and more.
- **Dall-E**: Enables agents to generate images from textual descriptions.
- **OpenAI's GPT API**: Allows agents to utilize the GPT-4 model for text completion and generation.
Using API tools in combination with prompt engineering techniques, we can create prompts that generate predictable
function calls and utilize the output of API requests to enhance the agent's capabilities. This enables agents to
interact with the environment in a meaningful way beyond text-based interactions.
### Engineering Robust Function Calls
Again, we can achieve tooling through prompt engineering by _representing the tool we want to provide for the model_ as a **function**. _We can then tell the model that this function exists in a prompt, so our program can call it programmatically based on the model's response_. First, however, we should examine the main challenges in implementing tool interactions: consistency, context, and format.
For example, responses tend to vary among chat completions
gitextract_0gj4cfja/ ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── CODE_OF_CONDUCT.md │ ├── CONTRIBUTING.md │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report.yaml │ │ ├── config.yml │ │ ├── docs.yml │ │ └── feature-request.yaml │ ├── PULL_REQUEST_TEMPLATE/ │ │ └── pull_request_template.md │ ├── SECURITY.md │ ├── SUPPORT.md │ ├── dependabot.yml │ └── workflows/ │ ├── node.js.yml │ ├── python.yml │ ├── sponsors.yml │ └── webhooks.yml ├── .gitignore ├── LICENSE ├── README.md ├── cli/ │ ├── .gitignore │ ├── README.md │ ├── package.json │ ├── src/ │ │ ├── envGenerator.js │ │ ├── helpers.js │ │ ├── index.js │ │ └── questions/ │ │ ├── existingEnvQuestions.js │ │ ├── newEnvQuestions.js │ │ └── sharedQuestions.js │ └── tsconfig.json ├── db/ │ └── Dockerfile ├── docker-compose.yml ├── docs/ │ ├── README.hu-Cs4K1Sr4C.md │ ├── README.md │ ├── README.zh-HANS.md │ ├── developers/ │ │ ├── api-keys.mdx │ │ ├── file-downloads.mdx │ │ └── sdk.mdx │ ├── docs.json │ ├── features/ │ │ ├── deduplication.mdx │ │ ├── exports/ │ │ │ ├── api-exports.mdx │ │ │ ├── bulk-exports.mdx │ │ │ └── overview.mdx │ │ ├── file-downloads.mdx │ │ ├── scheduling.mdx │ │ └── templates.mdx │ ├── introduction.mdx │ ├── key-concepts.mdx │ └── schemas.mdx ├── next/ │ ├── .dockerignore │ ├── .eslintrc.json │ ├── .gitignore │ ├── .husky/ │ │ ├── .gitignore │ │ └── pre-commit │ ├── Dockerfile │ ├── __mocks__/ │ │ └── matchMedia.mock.ts │ ├── __tests__/ │ │ ├── message-service.test.ts │ │ ├── stripe.sh │ │ ├── whitespace.test.ts │ │ └── with-retries.test.ts │ ├── entrypoint.sh │ ├── jest.config.cjs │ ├── next-i18next.config.js │ ├── next.config.mjs │ ├── package.json │ ├── postcss.config.cjs │ ├── posts/ │ │ └── Understanding-AgentGPT.mdx │ ├── prettier.config.cjs │ ├── prisma/ │ │ ├── .gitignore │ │ ├── useMysql.sh │ │ └── useSqlite.sh │ ├── public/ │ │ ├── locales/ │ │ │ ├── de/ │ │ │ │ ├── chat.json │ │ │ │ ├── chat.missing.json │ │ │ │ ├── common.json │ │ │ │ ├── drawer.json │ │ │ │ ├── errors.json │ │ │ │ ├── help.json │ │ │ │ ├── indexPage.json │ │ │ │ ├── languages.json │ │ │ │ └── settings.json │ │ │ ├── en/ │ │ │ │ ├── chat.json │ │ │ │ ├── chat.missing.json │ │ │ │ ├── common.json │ │ │ │ ├── common.missing.json │ │ │ │ ├── drawer.json │ │ │ │ ├── errors.json │ │ │ │ ├── help.json │ │ │ │ ├── indexPage.json │ │ │ │ ├── languages.json │ │ │ │ └── settings.json │ │ │ ├── es/ │ │ │ │ ├── chat.json │ │ │ │ ├── chat.missing.json │ │ │ │ ├── common.json │ │ │ │ ├── drawer.json │ │ │ │ ├── errors.json │ │ │ │ ├── help.json │ │ │ │ ├── indexPage.json │ │ │ │ ├── languages.json │ │ │ │ └── settings.json │ │ │ ├── fr/ │ │ │ │ ├── chat.json │ │ │ │ ├── chat.missing.json │ │ │ │ ├── common.json │ │ │ │ ├── drawer.json │ │ │ │ ├── errors.json │ │ │ │ ├── help.json │ │ │ │ ├── indexPage.json │ │ │ │ ├── languages.json │ │ │ │ └── settings.json │ │ │ ├── hr/ │ │ │ │ ├── chat.json │ │ │ │ ├── chat.missing.json │ │ │ │ ├── common.json │ │ │ │ ├── drawer.json │ │ │ │ ├── errors.json │ │ │ │ ├── help.json │ │ │ │ ├── indexPage.json │ │ │ │ ├── languages.json │ │ │ │ └── settings.json │ │ │ ├── hu/ │ │ │ │ ├── chat.json │ │ │ │ ├── chat.missing.json │ │ │ │ ├── common.json │ │ │ │ ├── drawer.json │ │ │ │ ├── errors.json │ │ │ │ ├── help.json │ │ │ │ ├── indexPage.json │ │ │ │ ├── languages.json │ │ │ │ └── settings.json │ │ │ ├── it/ │ │ │ │ ├── chat.json │ │ │ │ ├── chat.missing.json │ │ │ │ ├── common.json │ │ │ │ ├── drawer.json │ │ │ │ ├── errors.json │ │ │ │ ├── help.json │ │ │ │ ├── indexPage.json │ │ │ │ ├── languages.json │ │ │ │ └── settings.json │ │ │ ├── ja/ │ │ │ │ ├── chat.json │ │ │ │ ├── chat.missing.json │ │ │ │ ├── common.json │ │ │ │ ├── drawer.json │ │ │ │ ├── errors.json │ │ │ │ ├── help.json │ │ │ │ ├── indexPage.json │ │ │ │ ├── languages.json │ │ │ │ └── settings.json │ │ │ ├── ko/ │ │ │ │ ├── chat.json │ │ │ │ ├── chat.missing.json │ │ │ │ ├── common.json │ │ │ │ ├── drawer.json │ │ │ │ ├── errors.json │ │ │ │ ├── help.json │ │ │ │ ├── indexPage.json │ │ │ │ ├── languages.json │ │ │ │ └── settings.json │ │ │ ├── lt/ │ │ │ │ ├── chat.json │ │ │ │ ├── chat.missing.json │ │ │ │ ├── common.json │ │ │ │ ├── drawer.json │ │ │ │ ├── errors.json │ │ │ │ ├── help.json │ │ │ │ ├── indexPage.json │ │ │ │ ├── languages.json │ │ │ │ └── settings.json │ │ │ ├── nl/ │ │ │ │ ├── chat.json │ │ │ │ ├── chat.missing.json │ │ │ │ ├── common.json │ │ │ │ ├── drawer.json │ │ │ │ ├── errors.json │ │ │ │ ├── help.json │ │ │ │ ├── indexPage.json │ │ │ │ ├── languages.json │ │ │ │ └── settings.json │ │ │ ├── pl/ │ │ │ │ ├── chat.json │ │ │ │ ├── chat.missing.json │ │ │ │ ├── common.json │ │ │ │ ├── drawer.json │ │ │ │ ├── errors.json │ │ │ │ ├── help.json │ │ │ │ ├── indexPage.json │ │ │ │ ├── languages.json │ │ │ │ └── settings.json │ │ │ ├── pt/ │ │ │ │ ├── chat.json │ │ │ │ ├── chat.missing.json │ │ │ │ ├── common.json │ │ │ │ ├── drawer.json │ │ │ │ ├── errors.json │ │ │ │ ├── help.json │ │ │ │ ├── indexPage.json │ │ │ │ ├── languages.json │ │ │ │ └── settings.json │ │ │ ├── ro/ │ │ │ │ ├── chat.json │ │ │ │ ├── chat.missing.json │ │ │ │ ├── common.json │ │ │ │ ├── drawer.json │ │ │ │ ├── errors.json │ │ │ │ ├── help.json │ │ │ │ ├── indexPage.json │ │ │ │ ├── languages.json │ │ │ │ └── settings.json │ │ │ ├── ru/ │ │ │ │ ├── chat.json │ │ │ │ ├── chat.missing.json │ │ │ │ ├── common.json │ │ │ │ ├── drawer.json │ │ │ │ ├── errors.json │ │ │ │ ├── help.json │ │ │ │ ├── indexPage.json │ │ │ │ ├── languages.json │ │ │ │ └── settings.json │ │ │ ├── sk/ │ │ │ │ ├── chat.json │ │ │ │ ├── chat.missing.json │ │ │ │ ├── common.json │ │ │ │ ├── drawer.json │ │ │ │ ├── errors.json │ │ │ │ ├── help.json │ │ │ │ ├── indexPage.json │ │ │ │ ├── languages.json │ │ │ │ └── settings.json │ │ │ ├── tr/ │ │ │ │ ├── chat.json │ │ │ │ ├── chat.missing.json │ │ │ │ ├── common.json │ │ │ │ ├── drawer.json │ │ │ │ ├── errors.json │ │ │ │ ├── help.json │ │ │ │ ├── indexPage.json │ │ │ │ ├── languages.json │ │ │ │ └── settings.json │ │ │ ├── uk/ │ │ │ │ ├── chat.json │ │ │ │ ├── chat.missing.json │ │ │ │ ├── common.json │ │ │ │ ├── drawer.json │ │ │ │ ├── errors.json │ │ │ │ ├── help.json │ │ │ │ ├── indexPage.json │ │ │ │ ├── languages.json │ │ │ │ └── settings.json │ │ │ ├── zh/ │ │ │ │ ├── chat.json │ │ │ │ ├── chat.missing.json │ │ │ │ ├── common.json │ │ │ │ ├── drawer.json │ │ │ │ ├── errors.json │ │ │ │ ├── help.json │ │ │ │ ├── indexPage.json │ │ │ │ ├── languages.json │ │ │ │ └── settings.json │ │ │ └── zhtw/ │ │ │ ├── chat.json │ │ │ ├── chat.missing.json │ │ │ ├── common.json │ │ │ ├── drawer.json │ │ │ ├── errors.json │ │ │ ├── help.json │ │ │ ├── indexPage.json │ │ │ ├── languages.json │ │ │ └── settings.json │ │ ├── orb-v1-medium.webm │ │ ├── robots.txt │ │ └── site.webmanifest │ ├── src/ │ │ ├── components/ │ │ │ ├── Accordion.tsx │ │ │ ├── AppHead.tsx │ │ │ ├── AppTitle.tsx │ │ │ ├── Badge.tsx │ │ │ ├── BannerBadge.tsx │ │ │ ├── Button.tsx │ │ │ ├── Globe.tsx │ │ │ ├── GlowWrapper.tsx │ │ │ ├── HeroCard.tsx │ │ │ ├── Input.tsx │ │ │ ├── Label.tsx │ │ │ ├── Menu.tsx │ │ │ ├── NavBar.tsx │ │ │ ├── Ping.tsx │ │ │ ├── PrimaryButton.tsx │ │ │ ├── QuestionInput.tsx │ │ │ ├── Switch.tsx │ │ │ ├── TextButton.tsx │ │ │ ├── Tooltip.tsx │ │ │ ├── WindowButton.tsx │ │ │ ├── console/ │ │ │ │ ├── AgentControls.tsx │ │ │ │ ├── ChatMessage.tsx │ │ │ │ ├── ChatWindow.tsx │ │ │ │ ├── ChatWindowTitle.tsx │ │ │ │ ├── ExampleAgentButton.tsx │ │ │ │ ├── ExampleAgents.tsx │ │ │ │ ├── MacWindowHeader.tsx │ │ │ │ ├── MarkdownRenderer.tsx │ │ │ │ ├── SourceCard.tsx │ │ │ │ ├── SourceLink.tsx │ │ │ │ └── SummarizeButton.tsx │ │ │ ├── dialog/ │ │ │ │ ├── HelpDialog.tsx │ │ │ │ ├── SignInDialog.tsx │ │ │ │ └── ToolsDialog.tsx │ │ │ ├── drawer/ │ │ │ │ ├── DrawerItemButton.tsx │ │ │ │ ├── LeftSidebar.tsx │ │ │ │ ├── Sidebar.tsx │ │ │ │ └── TaskSidebar.tsx │ │ │ ├── index/ │ │ │ │ ├── chat.tsx │ │ │ │ └── landing.tsx │ │ │ ├── landing/ │ │ │ │ ├── Backing.tsx │ │ │ │ ├── ConnectorSection.tsx │ │ │ │ ├── FooterLinks.tsx │ │ │ │ ├── Hero.tsx │ │ │ │ ├── OpenSource.tsx │ │ │ │ └── Section.tsx │ │ │ ├── loader.tsx │ │ │ ├── motions/ │ │ │ │ ├── CycleIcons.tsx │ │ │ │ ├── FadeIn.tsx │ │ │ │ ├── FadeOut.tsx │ │ │ │ ├── HideShow.tsx │ │ │ │ ├── expand.tsx │ │ │ │ └── popin.tsx │ │ │ ├── pdf/ │ │ │ │ ├── MyDocument.tsx │ │ │ │ └── PDFButton.tsx │ │ │ ├── sidebar/ │ │ │ │ ├── AuthItem.tsx │ │ │ │ ├── LinkIconItem.tsx │ │ │ │ ├── LinkItem.tsx │ │ │ │ └── links.tsx │ │ │ ├── templates/ │ │ │ │ ├── TemplateCard.tsx │ │ │ │ ├── TemplateData.tsx │ │ │ │ └── TemplateSearch.tsx │ │ │ ├── toast.tsx │ │ │ └── utils/ │ │ │ └── helpers.tsx │ │ ├── env/ │ │ │ ├── client.mjs │ │ │ ├── schema.mjs │ │ │ └── server.mjs │ │ ├── hooks/ │ │ │ ├── useAgent.ts │ │ │ ├── useAuth.ts │ │ │ ├── useModels.ts │ │ │ ├── useMouseMovement.ts │ │ │ ├── useSID.ts │ │ │ ├── useSettings.ts │ │ │ └── useTools.ts │ │ ├── layout/ │ │ │ ├── dashboard.tsx │ │ │ ├── default.tsx │ │ │ └── grid.tsx │ │ ├── lib/ │ │ │ └── posts.ts │ │ ├── pages/ │ │ │ ├── _app.tsx │ │ │ ├── agent/ │ │ │ │ └── index.tsx │ │ │ ├── api/ │ │ │ │ ├── auth/ │ │ │ │ │ └── [...nextauth].ts │ │ │ │ └── trpc/ │ │ │ │ └── [trpc].ts │ │ │ ├── blog/ │ │ │ │ └── [slug].tsx │ │ │ ├── blog.tsx │ │ │ ├── home.tsx │ │ │ ├── index.tsx │ │ │ ├── settings.tsx │ │ │ ├── signin.tsx │ │ │ ├── templates.tsx │ │ │ └── welcome.tsx │ │ ├── server/ │ │ │ ├── api/ │ │ │ │ ├── root.ts │ │ │ │ ├── routers/ │ │ │ │ │ └── agentRouter.ts │ │ │ │ └── trpc.ts │ │ │ ├── auth/ │ │ │ │ ├── auth.ts │ │ │ │ ├── index.ts │ │ │ │ └── local-auth.ts │ │ │ └── db.ts │ │ ├── services/ │ │ │ ├── agent/ │ │ │ │ ├── agent-api.ts │ │ │ │ ├── agent-run-model.tsx │ │ │ │ ├── agent-work/ │ │ │ │ │ ├── agent-work.ts │ │ │ │ │ ├── analyze-task-work.ts │ │ │ │ │ ├── chat-work.ts │ │ │ │ │ ├── create-task-work.ts │ │ │ │ │ ├── execute-task-work.ts │ │ │ │ │ ├── start-task-work.ts │ │ │ │ │ └── summarize-work.ts │ │ │ │ ├── analysis.ts │ │ │ │ ├── autonomous-agent.ts │ │ │ │ └── message-service.ts │ │ │ ├── api/ │ │ │ │ └── org.ts │ │ │ ├── api-utils.ts │ │ │ ├── fetch-utils.ts │ │ │ ├── stream-utils.ts │ │ │ └── workflow/ │ │ │ └── oauthApi.ts │ │ ├── stores/ │ │ │ ├── agentInputStore.ts │ │ │ ├── agentStore.ts │ │ │ ├── configStore.ts │ │ │ ├── helpers.ts │ │ │ ├── index.ts │ │ │ ├── messageStore.ts │ │ │ ├── modelSettingsStore.ts │ │ │ └── taskStore.ts │ │ ├── styles/ │ │ │ └── globals.css │ │ ├── types/ │ │ │ ├── errors.ts │ │ │ ├── index.ts │ │ │ ├── message.ts │ │ │ ├── modelSettings.ts │ │ │ ├── next-auth.d.ts │ │ │ ├── propTypes.ts │ │ │ └── task.ts │ │ ├── ui/ │ │ │ ├── button.tsx │ │ │ ├── checkbox.tsx │ │ │ ├── combox.tsx │ │ │ ├── dialog.tsx │ │ │ ├── highlight.tsx │ │ │ ├── input.tsx │ │ │ └── select.tsx │ │ └── utils/ │ │ ├── api.ts │ │ ├── constants.ts │ │ ├── helpers.ts │ │ ├── i18next.n.ts │ │ ├── interfaces.ts │ │ ├── languages.ts │ │ ├── translations.ts │ │ ├── user.ts │ │ └── whitespace.ts │ ├── tailwind.config.cjs │ ├── tsconfig.json │ └── wait-for-db.sh ├── platform/ │ ├── .dockerignore │ ├── .editorconfig │ ├── .flake8 │ ├── .gitignore │ ├── .pre-commit-config.yaml │ ├── Dockerfile │ ├── README.md │ ├── entrypoint.sh │ ├── pyproject.toml │ └── reworkd_platform/ │ ├── __init__.py │ ├── __main__.py │ ├── conftest.py │ ├── constants.py │ ├── db/ │ │ ├── __init__.py │ │ ├── base.py │ │ ├── crud/ │ │ │ ├── __init__.py │ │ │ ├── agent.py │ │ │ ├── base.py │ │ │ ├── oauth.py │ │ │ ├── organization.py │ │ │ └── user.py │ │ ├── dependencies.py │ │ ├── meta.py │ │ ├── models/ │ │ │ ├── __init__.py │ │ │ ├── agent.py │ │ │ ├── auth.py │ │ │ └── user.py │ │ └── utils.py │ ├── logging.py │ ├── schemas/ │ │ ├── __init__.py │ │ ├── agent.py │ │ └── user.py │ ├── services/ │ │ ├── __init__.py │ │ ├── anthropic.py │ │ ├── aws/ │ │ │ ├── __init__.py │ │ │ └── s3.py │ │ ├── oauth_installers.py │ │ ├── pinecone/ │ │ │ ├── __init__.py │ │ │ ├── lifetime.py │ │ │ └── pinecone.py │ │ ├── security.py │ │ ├── ssl.py │ │ └── tokenizer/ │ │ ├── __init__.py │ │ ├── dependencies.py │ │ ├── lifetime.py │ │ └── token_service.py │ ├── settings.py │ ├── tests/ │ │ ├── __init__.py │ │ ├── agent/ │ │ │ ├── test_analysis.py │ │ │ ├── test_crud.py │ │ │ ├── test_model_factory.py │ │ │ ├── test_task_output_parser.py │ │ │ └── test_tools.py │ │ ├── memory/ │ │ │ └── memory_with_fallback_test.py │ │ ├── test_dependancies.py │ │ ├── test_helpers.py │ │ ├── test_oauth_installers.py │ │ ├── test_reworkd_platform.py │ │ ├── test_s3.py │ │ ├── test_schemas.py │ │ ├── test_security.py │ │ ├── test_settings.py │ │ └── test_token_service.py │ ├── timer.py │ └── web/ │ ├── __init__.py │ ├── api/ │ │ ├── __init__.py │ │ ├── agent/ │ │ │ ├── __init__.py │ │ │ ├── agent_service/ │ │ │ │ ├── __init__.py │ │ │ │ ├── agent_service.py │ │ │ │ ├── agent_service_provider.py │ │ │ │ ├── mock_agent_service.py │ │ │ │ └── open_ai_agent_service.py │ │ │ ├── analysis.py │ │ │ ├── dependancies.py │ │ │ ├── helpers.py │ │ │ ├── model_factory.py │ │ │ ├── prompts.py │ │ │ ├── stream_mock.py │ │ │ ├── task_output_parser.py │ │ │ ├── tools/ │ │ │ │ ├── __init__.py │ │ │ │ ├── code.py │ │ │ │ ├── conclude.py │ │ │ │ ├── image.py │ │ │ │ ├── open_ai_function.py │ │ │ │ ├── reason.py │ │ │ │ ├── search.py │ │ │ │ ├── sidsearch.py │ │ │ │ ├── tool.py │ │ │ │ ├── tools.py │ │ │ │ ├── utils.py │ │ │ │ └── wikipedia_search.py │ │ │ └── views.py │ │ ├── auth/ │ │ │ ├── __init__.py │ │ │ └── views.py │ │ ├── dependencies.py │ │ ├── error_handling.py │ │ ├── errors.py │ │ ├── http_responses.py │ │ ├── memory/ │ │ │ ├── __init__.py │ │ │ ├── memory.py │ │ │ ├── memory_with_fallback.py │ │ │ └── null.py │ │ ├── metadata.py │ │ ├── models/ │ │ │ ├── __init__.py │ │ │ └── views.py │ │ ├── monitoring/ │ │ │ ├── __init__.py │ │ │ └── views.py │ │ └── router.py │ ├── application.py │ └── lifetime.py ├── scripts/ │ ├── post-sync.sh │ └── prepare-sync.sh ├── setup.bat └── setup.sh
SYMBOL INDEX (554 symbols across 191 files)
FILE: cli/src/envGenerator.js
constant ENV_PATH (line 98) | const ENV_PATH = "../next/.env";
constant BACKEND_ENV_PATH (line 99) | const BACKEND_ENV_PATH = "../platform/.env";
FILE: cli/src/questions/sharedQuestions.js
constant RUN_OPTION_QUESTION (line 1) | const RUN_OPTION_QUESTION = {
FILE: next/next.config.mjs
method rewrites (line 29) | rewrites() {
FILE: next/src/components/Accordion.tsx
type AccordionProps (line 4) | interface AccordionProps {
FILE: next/src/components/Badge.tsx
type BadgeProps (line 4) | interface BadgeProps {
FILE: next/src/components/BannerBadge.tsx
type BadgeProps (line 6) | type BadgeProps = PropsWithChildren<React.AnchorHTMLAttributes<HTMLAncho...
FILE: next/src/components/Button.tsx
type ButtonProps (line 7) | interface ButtonProps {
FILE: next/src/components/Globe.tsx
function Globe (line 6) | function Globe(): JSX.Element {
FILE: next/src/components/GlowWrapper.tsx
type GlowWrapperProps (line 4) | type GlowWrapperProps = {
FILE: next/src/components/HeroCard.tsx
type HeroCardProps (line 7) | type HeroCardProps = {
FILE: next/src/components/Input.tsx
type InputElement (line 7) | type InputElement = HTMLInputElement | HTMLTextAreaElement;
type InputProps (line 9) | interface InputProps {
FILE: next/src/components/Label.tsx
type LabelProps (line 7) | interface LabelProps {
FILE: next/src/components/Menu.tsx
type MenuProps (line 7) | interface MenuProps {
function Menu (line 15) | function Menu({ icon, name, items, chevron, buttonPosition = "top" }: Me...
type MenuItemsProps (line 30) | type MenuItemsProps = {
FILE: next/src/components/NavBar.tsx
function NavBar (line 30) | function NavBar() {
FILE: next/src/components/PrimaryButton.tsx
type PrimaryButtonProps (line 7) | type PrimaryButtonProps = {
function PrimaryButton (line 14) | function PrimaryButton({ children, onClick, icon, className }: PrimaryBu...
FILE: next/src/components/QuestionInput.tsx
type Props (line 5) | interface Props extends React.InputHTMLAttributes<HTMLInputElement> {
FILE: next/src/components/Switch.tsx
type SwitchProps (line 5) | interface SwitchProps {
FILE: next/src/components/TextButton.tsx
type TextButtonProps (line 7) | type TextButtonProps = {
function TextButton (line 13) | function TextButton({ children, onClick, icon, className }: TextButtonPr...
FILE: next/src/components/Tooltip.tsx
type TooltipProps (line 6) | interface TooltipProps {
FILE: next/src/components/WindowButton.tsx
type WindowButtonProps (line 6) | type WindowButtonProps = {
FILE: next/src/components/console/AgentControls.tsx
type AgentControlsProps (line 9) | type AgentControlsProps = {
FILE: next/src/components/console/ChatWindow.tsx
type ChatControls (line 15) | interface ChatControls {
type ChatWindowProps (line 22) | interface ChatWindowProps extends HeaderProps {
FILE: next/src/components/console/ExampleAgents.tsx
type ExampleAgentsProps (line 8) | type ExampleAgentsProps = {
FILE: next/src/components/console/MacWindowHeader.tsx
type HeaderProps (line 19) | interface HeaderProps {
type MacWindowInternalProps (line 120) | interface MacWindowInternalProps extends PropsWithChildren {
FILE: next/src/components/console/MarkdownRenderer.tsx
type MarkdownRendererProps (line 10) | interface MarkdownRendererProps {
type CustomCodeBlockProps (line 81) | interface CustomCodeBlockProps {
FILE: next/src/components/console/SourceLink.tsx
type LinkInfo (line 9) | interface LinkInfo {
FILE: next/src/components/dialog/HelpDialog.tsx
function HelpDialog (line 8) | function HelpDialog() {
FILE: next/src/components/dialog/SignInDialog.tsx
type SignInDialogProps (line 6) | interface SignInDialogProps {
FILE: next/src/components/dialog/ToolsDialog.tsx
type ToolProps (line 52) | interface ToolProps {
FILE: next/src/components/drawer/DrawerItemButton.tsx
type DrawerItemProps (line 4) | interface DrawerItemProps {
FILE: next/src/components/drawer/Sidebar.tsx
type DisplayProps (line 7) | type DisplayProps = {
type SidebarProps (line 12) | type SidebarProps = DisplayProps & {
type SidebarTransitionProps (line 33) | type SidebarTransitionProps = {
FILE: next/src/components/index/chat.tsx
type ChatProps (line 15) | type ChatProps = {
FILE: next/src/components/index/landing.tsx
type LandingProps (line 16) | type LandingProps = {
FILE: next/src/components/landing/FooterLinks.tsx
type FooterLinkProps (line 3) | interface FooterLinkProps {
FILE: next/src/components/landing/OpenSource.tsx
type TerminalProps (line 8) | interface TerminalProps {
FILE: next/src/components/landing/Section.tsx
type ResourceProps (line 53) | interface ResourceProps {
FILE: next/src/components/loader.tsx
type LoaderProps (line 4) | interface LoaderProps {
FILE: next/src/components/motions/CycleIcons.tsx
type CycleItemsProps (line 6) | interface CycleItemsProps extends PropsWithChildren {
FILE: next/src/components/motions/FadeIn.tsx
type MotionProps (line 4) | interface MotionProps extends PropsWithChildren {
FILE: next/src/components/motions/FadeOut.tsx
type MotionProps (line 4) | interface MotionProps extends PropsWithChildren {
FILE: next/src/components/motions/HideShow.tsx
type MotionProps (line 4) | interface MotionProps extends PropsWithChildren {
FILE: next/src/components/motions/expand.tsx
type MotionProps (line 4) | interface MotionProps extends PropsWithChildren {
FILE: next/src/components/motions/popin.tsx
type MotionProps (line 4) | interface MotionProps extends PropsWithChildren {
FILE: next/src/components/sidebar/links.tsx
type LinkMetadata (line 13) | type LinkMetadata = {
constant PAGE_LINKS (line 20) | const PAGE_LINKS: LinkMetadata[] = [
constant SOCIAL_LINKS (line 46) | const SOCIAL_LINKS: LinkMetadata[] = [
FILE: next/src/components/templates/TemplateCard.tsx
type TemplateCardProps (line 7) | type TemplateCardProps = {
FILE: next/src/components/templates/TemplateData.tsx
constant TEMPLATE_DATA (line 24) | const TEMPLATE_DATA: TemplateModel[] = [
type TemplateModel (line 208) | interface TemplateModel {
FILE: next/src/components/templates/TemplateSearch.tsx
type SearchBarProps (line 4) | interface SearchBarProps {
FILE: next/src/components/toast.tsx
type Props (line 7) | type Props = {
FILE: next/src/env/schema.mjs
function stringToBoolean (line 9) | function stringToBoolean() {
FILE: next/src/hooks/useAgent.ts
type AgentUtils (line 8) | type AgentUtils = {
function useAgent (line 13) | function useAgent(): AgentUtils {
FILE: next/src/hooks/useAuth.ts
type Provider (line 6) | type Provider = "google" | "github" | "discord";
type Auth (line 8) | interface Auth {
type UseAuthOptions (line 15) | interface UseAuthOptions {
function useAuth (line 20) | function useAuth(
FILE: next/src/hooks/useModels.ts
type LLMModel (line 15) | type LLMModel = z.infer<typeof Model>;
function useModels (line 17) | function useModels() {
FILE: next/src/hooks/useMouseMovement.ts
function useMouseMovement (line 4) | function useMouseMovement() {
FILE: next/src/hooks/useSID.ts
constant QUERY_KEY (line 6) | const QUERY_KEY = ["sid"];
function useSID (line 8) | function useSID(session: Session | null) {
FILE: next/src/hooks/useSettings.ts
type SettingsModel (line 12) | type SettingsModel = {
function useSettings (line 18) | function useSettings(): SettingsModel {
FILE: next/src/hooks/useTools.ts
type ActiveTool (line 22) | type ActiveTool = z.infer<typeof ActiveToolSchema>;
function useTools (line 47) | function useTools() {
FILE: next/src/layout/dashboard.tsx
type SidebarSettings (line 10) | type SidebarSettings = {
type DashboardLayoutProps (line 15) | type DashboardLayoutProps = {
FILE: next/src/layout/default.tsx
type LayoutProps (line 5) | interface LayoutProps {
FILE: next/src/layout/grid.tsx
type Props (line 5) | interface Props extends PropsWithChildren {
function GridLayout (line 9) | function GridLayout(props: Props) {
FILE: next/src/lib/posts.ts
type SlugData (line 7) | interface SlugData {
function getSortedPostsData (line 16) | function getSortedPostsData(): SlugData[] {
type PostData (line 40) | interface PostData {
function getPostData (line 47) | function getPostData(slug: string): PostData {
FILE: next/src/pages/blog.tsx
function BlogPage (line 11) | function BlogPage({ allPostsData }) {
function getStaticProps (line 102) | async function getStaticProps() {
FILE: next/src/pages/blog/[slug].tsx
function BlogPost (line 14) | function BlogPost({
function getStaticPaths (line 64) | async function getStaticPaths() {
function getStaticProps (line 79) | async function getStaticProps({ params }: { params: { slug: string } }) {
FILE: next/src/pages/signin.tsx
type Provider (line 93) | type Provider = Record<LiteralUnion<BuiltInProviderType>, ClientSafeProv...
type ButtonDetail (line 95) | interface ButtonDetail {
function getServerSideProps (line 138) | async function getServerSideProps(context: GetServerSidePropsContext) {
FILE: next/src/server/api/root.ts
type AppRouter (line 9) | type AppRouter = typeof appRouter;
FILE: next/src/server/api/routers/agentRouter.ts
type CreateAgentProps (line 14) | type CreateAgentProps = z.infer<typeof createAgentParser>;
type SaveAgentProps (line 20) | type SaveAgentProps = z.infer<typeof saveAgentParser>;
function generateAgentName (line 22) | async function generateAgentName(goal: string) {
FILE: next/src/server/api/trpc.ts
type CreateContextOptions (line 34) | type CreateContextOptions = {
method errorFormatter (line 72) | errorFormatter({ shape }) {
FILE: next/src/server/auth/index.ts
function overridePrisma (line 15) | function overridePrisma<T>(fn: (user: T) => Awaitable<AdapterUser>) {
method session (line 35) | async session({ session, user }) {
FILE: next/src/server/auth/local-auth.ts
function cookieToString (line 16) | function cookieToString(cookie: string | undefined | null | boolean) {
method authorize (line 41) | async authorize(credentials, req) {
method signIn (line 76) | async signIn({ user }) {
FILE: next/src/services/agent/agent-api.ts
type ApiProps (line 10) | type ApiProps = Pick<RequestBody, "model_settings" | "goal"> & {
class AgentApi (line 15) | class AgentApi {
method constructor (line 20) | constructor(apiProps: ApiProps) {
method createAgent (line 24) | async createAgent(): Promise<void> {
method saveMessages (line 32) | saveMessages(messages: Message[]): void {
method getInitialTasks (line 41) | async getInitialTasks(): Promise<string[]> {
method getAdditionalTasks (line 45) | async getAdditionalTasks(
method analyzeTask (line 63) | async analyzeTask(task: string): Promise<Analysis> {
method post (line 70) | private async post<T>(
FILE: next/src/services/agent/agent-run-model.tsx
type AgentRunModel (line 10) | interface AgentRunModel {
type AgentLifecycle (line 32) | type AgentLifecycle = "offline" | "running" | "pausing" | "paused" | "st...
class DefaultAgentRunModel (line 34) | class DefaultAgentRunModel implements AgentRunModel {
method constructor (line 38) | constructor(goal: string) {
method updateTaskStatus (line 67) | updateTaskStatus(task: Task, status: TaskStatus): Task {
method updateTaskResult (line 71) | updateTaskResult(task: Task, result: string): Task {
method updateTask (line 75) | updateTask(updatedTask: Task): Task {
FILE: next/src/services/agent/agent-work/agent-work.ts
type AgentWork (line 1) | interface AgentWork {
FILE: next/src/services/agent/agent-work/analyze-task-work.ts
class AnalyzeTaskWork (line 8) | class AnalyzeTaskWork implements AgentWork {
method constructor (line 11) | constructor(private parent: AutonomousAgent, private task: Task) {}
FILE: next/src/services/agent/agent-work/chat-work.ts
class ChatWork (line 9) | class ChatWork implements AgentWork {
method constructor (line 10) | constructor(private parent: AutonomousAgent, private message: string) {}
FILE: next/src/services/agent/agent-work/create-task-work.ts
class CreateTaskWork (line 5) | class CreateTaskWork implements AgentWork {
method constructor (line 8) | constructor(private parent: AutonomousAgent, private task: Task) {}
FILE: next/src/services/agent/agent-work/execute-task-work.ts
class ExecuteTaskWork (line 11) | class ExecuteTaskWork implements AgentWork {
method constructor (line 14) | constructor(private parent: AutonomousAgent, private task: Task, priva...
FILE: next/src/services/agent/agent-work/start-task-work.ts
class StartGoalWork (line 4) | class StartGoalWork implements AgentWork {
method constructor (line 7) | constructor(private parent: AutonomousAgent) {}
FILE: next/src/services/agent/agent-work/summarize-work.ts
class SummarizeWork (line 9) | class SummarizeWork implements AgentWork {
method constructor (line 10) | constructor(private parent: AutonomousAgent) {}
FILE: next/src/services/agent/analysis.ts
type Analysis (line 1) | type Analysis = {
FILE: next/src/services/agent/autonomous-agent.ts
class AutonomousAgent (line 17) | class AutonomousAgent {
method constructor (line 27) | constructor(
method run (line 42) | async run() {
method runWork (line 87) | private async runWork(work: AgentWork, shouldStop: () => boolean = () ...
method pauseAgent (line 125) | pauseAgent() {
method stopAgent (line 129) | stopAgent() {
method summarize (line 134) | async summarize() {
method chat (line 142) | async chat(message: string) {
method createTaskMessages (line 157) | async createTaskMessages(tasks: string[]) {
FILE: next/src/services/agent/message-service.ts
class MessageService (line 12) | class MessageService {
method constructor (line 15) | constructor(renderMessage: (message: Message) => void) {
FILE: next/src/services/api-utils.ts
function getHeaders (line 41) | function getHeaders(session?: Session) {
function getUrl (line 50) | function getUrl(url: string) {
function withRetries (line 53) | async function withRetries(
FILE: next/src/services/api/org.ts
class OrganizationApi (line 21) | class OrganizationApi {
method constructor (line 24) | constructor(accessToken?: string) {
method get (line 28) | async get(name: string) {
FILE: next/src/services/fetch-utils.ts
function getHeaders (line 5) | function getHeaders(accessToken: string | undefined, organizationId: str...
FILE: next/src/services/stream-utils.ts
type TextStream (line 3) | type TextStream = ReadableStreamDefaultReader<Uint8Array>;
function readStream (line 32) | async function readStream(reader: TextStream): Promise<string | null> {
function processStream (line 37) | async function processStream(
FILE: next/src/services/workflow/oauthApi.ts
class OauthApi (line 7) | class OauthApi {
method constructor (line 11) | constructor(accessToken?: string, organizationId?: string) {
method fromSession (line 16) | static fromSession(session: Session | null) {
method install (line 20) | async install(provider: string, redirectUri?: string) {
method uninstall (line 31) | async uninstall(provider: string) {
method get_info (line 42) | async get_info(provider: string) {
method get_info_sid (line 56) | async get_info_sid() {
FILE: next/src/stores/agentInputStore.ts
type AgentInputSlice (line 8) | interface AgentInputSlice {
FILE: next/src/stores/agentStore.ts
type AgentSlice (line 10) | interface AgentSlice {
type ToolsSlice (line 29) | interface ToolsSlice {
FILE: next/src/stores/configStore.ts
type Layout (line 7) | interface Layout {
type LayoutSlice (line 12) | interface LayoutSlice {
type OrganizationRole (line 17) | interface OrganizationRole {
type AuthSlice (line 23) | interface AuthSlice {
FILE: next/src/stores/helpers.ts
type WithSelectors (line 8) | type WithSelectors<S> = S extends { getState: () => infer T }
FILE: next/src/stores/messageStore.ts
type MessageSlice (line 13) | interface MessageSlice {
FILE: next/src/stores/modelSettingsStore.ts
type ModelSettingsSlice (line 11) | interface ModelSettingsSlice {
FILE: next/src/stores/taskStore.ts
type TaskSlice (line 19) | interface TaskSlice {
FILE: next/src/types/errors.ts
constant MAX_LOOPS_ERROR (line 4) | const MAX_LOOPS_ERROR = "MaxLoopsError";
type PlatformError (line 11) | type PlatformError = z.infer<typeof platformErrorSchema>;
type ValueError (line 40) | type ValueError = z.infer<typeof valueErrorSchema>;
FILE: next/src/types/message.ts
type Message (line 32) | type Message = z.infer<typeof messageSchema>;
FILE: next/src/types/modelSettings.ts
constant GPT_MODEL_NAMES (line 8) | const GPT_MODEL_NAMES = [GPT_35_TURBO, GPT_35_TURBO_16K, GPT_4];
type GPTModelNames (line 9) | type GPTModelNames = "gpt-3.5-turbo" | "gpt-3.5-turbo-16k" | "gpt-4";
constant MAX_TOKENS (line 11) | const MAX_TOKENS: Record<GPTModelNames, number> = {
type ModelSettings (line 17) | interface ModelSettings {
FILE: next/src/types/next-auth.d.ts
type Session (line 7) | interface Session {
type User (line 15) | interface User {
FILE: next/src/types/propTypes.ts
type toolTipProperties (line 1) | type toolTipProperties = {
FILE: next/src/types/task.ts
constant MESSAGE_TYPE_TASK (line 3) | const MESSAGE_TYPE_TASK = "task";
type TaskStatus (line 25) | type TaskStatus = z.infer<typeof TaskStatusSchema>;
type Task (line 36) | type Task = z.infer<typeof taskSchema>;
FILE: next/src/ui/button.tsx
type ButtonProps (line 7) | interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonEleme...
FILE: next/src/ui/checkbox.tsx
type Props (line 4) | interface Props extends ButtonHTMLAttributes<HTMLInputElement> {
function Checkbox (line 11) | function Checkbox(props: Props) {
FILE: next/src/ui/combox.tsx
type Props (line 7) | interface Props<T> {
FILE: next/src/ui/dialog.tsx
type DialogProps (line 6) | interface DialogProps extends PropsWithChildren {
FILE: next/src/ui/highlight.tsx
type Props (line 12) | interface Props {
FILE: next/src/ui/input.tsx
type Props (line 4) | interface Props extends React.InputHTMLAttributes<HTMLInputElement> {
FILE: next/src/ui/select.tsx
type Props (line 8) | interface Props<T> {
function Select (line 18) | function Select<T>(props: Props<T>) {
FILE: next/src/utils/api.ts
method config (line 25) | config() {
type RouterInputs (line 60) | type RouterInputs = inferRouterInputs<AppRouter>;
type RouterOutputs (line 65) | type RouterOutputs = inferRouterOutputs<AppRouter>;
FILE: next/src/utils/constants.ts
constant GPT_35_TURBO (line 4) | const GPT_35_TURBO = "gpt-3.5-turbo" as const;
constant GPT_4 (line 5) | const GPT_4 = "gpt-4" as const;
constant GPT_MODEL_NAMES (line 6) | const GPT_MODEL_NAMES = [GPT_35_TURBO, GPT_4];
constant DEFAULT_MAX_LOOPS_FREE (line 8) | const DEFAULT_MAX_LOOPS_FREE = 25 as const;
constant DEFAULT_MAX_LOOPS_CUSTOM_API_KEY (line 9) | const DEFAULT_MAX_LOOPS_CUSTOM_API_KEY = 10 as const;
FILE: next/src/utils/helpers.ts
type Constructor (line 1) | type Constructor<T> = new (...args: unknown[]) => T;
FILE: next/src/utils/interfaces.ts
type ApiModelSettings (line 6) | interface ApiModelSettings {
type RequestBody (line 25) | interface RequestBody {
FILE: next/src/utils/languages.ts
type Language (line 1) | type Language = {
constant ENGLISH (line 7) | const ENGLISH = { code: "en", name: "English", flag: "🇺🇸" };
FILE: next/src/utils/translations.ts
type Namespace (line 3) | type Namespace =
FILE: next/src/utils/whitespace.ts
function regex (line 1) | function regex() {
function isEmptyOrBlank (line 5) | function isEmptyOrBlank(value: string) {
FILE: platform/reworkd_platform/__main__.py
function main (line 6) | def main() -> None:
FILE: platform/reworkd_platform/conftest.py
function anyio_backend (line 20) | def anyio_backend() -> str:
function _engine (line 30) | async def _engine() -> AsyncGenerator[AsyncEngine, None]:
function dbsession (line 55) | async def dbsession(
function fastapi_app (line 85) | def fastapi_app(dbsession: AsyncSession) -> FastAPI:
function client (line 97) | async def client(
FILE: platform/reworkd_platform/db/base.py
class Base (line 15) | class Base(DeclarativeBase):
method get (line 28) | async def get(cls: Type[T], session: AsyncSession, id_: str) -> Option...
method get_or_404 (line 32) | async def get_or_404(cls: Type[T], session: AsyncSession, id_: str) -> T:
method save (line 38) | async def save(self: T, session: AsyncSession) -> T:
method delete (line 43) | async def delete(self: T, session: AsyncSession) -> None:
class TrackedModel (line 47) | class TrackedModel(Base):
method delete (line 60) | async def delete(self, session: AsyncSession) -> None:
class UserMixin (line 66) | class UserMixin:
FILE: platform/reworkd_platform/db/crud/agent.py
class AgentCRUD (line 13) | class AgentCRUD(BaseCrud):
method __init__ (line 14) | def __init__(self, session: AsyncSession, user: UserBase):
method create_run (line 18) | async def create_run(self, goal: str) -> AgentRun:
method create_task (line 24) | async def create_task(self, run_id: str, type_: Loop_Step) -> AgentTask:
method validate_task_count (line 31) | async def validate_task_count(self, run_id: str, type_: str) -> None:
FILE: platform/reworkd_platform/db/crud/base.py
class BaseCrud (line 8) | class BaseCrud:
method __init__ (line 9) | def __init__(self, session: AsyncSession):
FILE: platform/reworkd_platform/db/crud/oauth.py
class OAuthCrud (line 14) | class OAuthCrud(BaseCrud):
method inject (line 16) | async def inject(
method create_installation (line 22) | async def create_installation(
method get_installation_by_state (line 33) | async def get_installation_by_state(self, state: str) -> Optional[Oaut...
method get_installation_by_user_id (line 38) | async def get_installation_by_user_id(
method get_installation_by_organization_id (line 49) | async def get_installation_by_organization_id(
method get_all (line 61) | async def get_all(self, user: UserBase) -> Dict[str, str]:
FILE: platform/reworkd_platform/db/crud/organization.py
class OrgUser (line 18) | class OrgUser(BaseModel):
class OrganizationUsers (line 24) | class OrganizationUsers(BaseModel):
class OrganizationCrud (line 30) | class OrganizationCrud(BaseCrud):
method __init__ (line 31) | def __init__(self, session: AsyncSession, user: UserBase):
method inject (line 36) | def inject(
method create_organization (line 43) | async def create_organization(self, name: str) -> Organization:
method get_by_name (line 49) | async def get_by_name(self, name: str) -> Optional[OrganizationUsers]:
FILE: platform/reworkd_platform/db/crud/user.py
class UserCrud (line 11) | class UserCrud(BaseCrud):
method get_user_session (line 12) | async def get_user_session(self, token: str) -> UserSession:
method get_user_organization (line 20) | async def get_user_organization(
FILE: platform/reworkd_platform/db/dependencies.py
function get_db_session (line 7) | async def get_db_session(request: Request) -> AsyncGenerator[AsyncSessio...
FILE: platform/reworkd_platform/db/models/__init__.py
function load_all_models (line 6) | def load_all_models() -> None:
FILE: platform/reworkd_platform/db/models/agent.py
class AgentRun (line 7) | class AgentRun(Base):
class AgentTask (line 17) | class AgentTask(Base):
FILE: platform/reworkd_platform/db/models/auth.py
class Organization (line 7) | class Organization(TrackedModel):
class OrganizationUser (line 14) | class OrganizationUser(TrackedModel):
class OauthCredentials (line 22) | class OauthCredentials(TrackedModel):
FILE: platform/reworkd_platform/db/models/user.py
class UserSession (line 9) | class UserSession(Base):
class User (line 23) | class User(Base):
FILE: platform/reworkd_platform/db/utils.py
function create_engine (line 10) | def create_engine() -> AsyncEngine:
function create_database (line 33) | async def create_database() -> None:
function drop_database (line 53) | async def drop_database() -> None:
FILE: platform/reworkd_platform/logging.py
class InterceptHandler (line 10) | class InterceptHandler(logging.Handler):
method emit (line 21) | def emit(self, record: logging.LogRecord) -> None: # pragma: no cover
function configure_logging (line 44) | def configure_logging() -> None: # pragma: no cover
FILE: platform/reworkd_platform/schemas/agent.py
class ModelSettings (line 28) | class ModelSettings(BaseModel):
method validate_max_tokens (line 36) | def validate_max_tokens(cls, v: float, values: Dict[str, Any]) -> float:
class AgentRunCreate (line 43) | class AgentRunCreate(BaseModel):
class AgentRun (line 48) | class AgentRun(AgentRunCreate):
class AgentTaskAnalyze (line 52) | class AgentTaskAnalyze(AgentRun):
class AgentTaskExecute (line 58) | class AgentTaskExecute(AgentRun):
class AgentTaskCreate (line 63) | class AgentTaskCreate(AgentRun):
class AgentSummarize (line 70) | class AgentSummarize(AgentRun):
class AgentChat (line 74) | class AgentChat(AgentRun):
class NewTasksResponse (line 79) | class NewTasksResponse(BaseModel):
class RunCount (line 84) | class RunCount(BaseModel):
FILE: platform/reworkd_platform/schemas/user.py
class OrganizationRole (line 6) | class OrganizationRole(BaseModel):
class UserBase (line 12) | class UserBase(BaseModel):
method organization_id (line 20) | def organization_id(self) -> Optional[str]:
FILE: platform/reworkd_platform/services/anthropic.py
class AbstractPrompt (line 7) | class AbstractPrompt(BaseModel):
method to_string (line 8) | def to_string(self) -> str:
class HumanAssistantPrompt (line 12) | class HumanAssistantPrompt(AbstractPrompt):
method to_string (line 16) | def to_string(self) -> str:
class ClaudeService (line 22) | class ClaudeService:
method __init__ (line 23) | def __init__(self, api_key: Optional[str], model: str = "claude-2"):
method completion (line 27) | async def completion(
FILE: platform/reworkd_platform/services/aws/s3.py
class PresignedPost (line 14) | class PresignedPost(BaseModel):
class SimpleStorageService (line 19) | class SimpleStorageService:
method __init__ (line 22) | def __init__(self, bucket: Optional[str]) -> None:
method create_presigned_upload_url (line 29) | def create_presigned_upload_url(
method create_presigned_download_url (line 40) | def create_presigned_download_url(self, object_name: str) -> str:
method upload_to_bucket (line 46) | def upload_to_bucket(
method download_file (line 59) | def download_file(self, object_name: str, local_filename: str) -> None:
method list_keys (line 64) | def list_keys(self, prefix: str) -> List[str]:
method download_folder (line 71) | def download_folder(self, prefix: str, path: str) -> List[str]:
method delete_folder (line 80) | def delete_folder(self, prefix: str) -> None:
FILE: platform/reworkd_platform/services/oauth_installers.py
class OAuthInstaller (line 18) | class OAuthInstaller(ABC):
method __init__ (line 19) | def __init__(self, crud: OAuthCrud, settings: Settings):
method install (line 24) | async def install(self, user: UserBase, redirect_uri: str) -> str:
method install_callback (line 28) | async def install_callback(self, code: str, state: str) -> OauthCreden...
method uninstall (line 32) | async def uninstall(self, user: UserBase) -> bool:
method store_access_token (line 36) | def store_access_token(creds: OauthCredentials, access_token: str) -> ...
method store_refresh_token (line 40) | def store_refresh_token(creds: OauthCredentials, refresh_token: str) -...
class SIDInstaller (line 44) | class SIDInstaller(OAuthInstaller):
method install (line 47) | async def install(self, user: UserBase, redirect_uri: str) -> str:
method install_callback (line 72) | async def install_callback(self, code: str, state: str) -> OauthCreden...
method uninstall (line 101) | async def uninstall(self, user: UserBase) -> bool:
function installer_factory (line 135) | def installer_factory(
FILE: platform/reworkd_platform/services/pinecone/lifetime.py
function init_pinecone (line 6) | def init_pinecone() -> None:
FILE: platform/reworkd_platform/services/pinecone/pinecone.py
class Row (line 18) | class Row(BaseModel):
class QueryResult (line 24) | class QueryResult(BaseModel):
class PineconeMemory (line 30) | class PineconeMemory(AgentMemory):
method __init__ (line 35) | def __init__(self, index_name: str, namespace: str = ""):
method __enter__ (line 40) | def __enter__(self) -> AgentMemory:
method __exit__ (line 48) | def __exit__(self, *args: Any, **kwargs: Any) -> None:
method reset_class (line 52) | def reset_class(self) -> None:
method add_tasks (line 56) | def add_tasks(self, tasks: List[str]) -> List[str]:
method get_similar_tasks (line 77) | def get_similar_tasks(
method should_use (line 97) | def should_use() -> bool:
FILE: platform/reworkd_platform/services/security.py
class EncryptionService (line 9) | class EncryptionService:
method __init__ (line 10) | def __init__(self, secret: bytes):
method encrypt (line 13) | def encrypt(self, text: str) -> bytes:
method decrypt (line 16) | def decrypt(self, encoded_bytes: Union[bytes, str]) -> str:
FILE: platform/reworkd_platform/services/ssl.py
function get_ssl_context (line 10) | def get_ssl_context(
FILE: platform/reworkd_platform/services/tokenizer/dependencies.py
function get_token_service (line 6) | def get_token_service(request: Request) -> TokenService:
FILE: platform/reworkd_platform/services/tokenizer/lifetime.py
function init_tokenizer (line 7) | def init_tokenizer(app: FastAPI) -> None: # pragma: no cover
FILE: platform/reworkd_platform/services/tokenizer/token_service.py
class TokenService (line 7) | class TokenService:
method __init__ (line 8) | def __init__(self, encoding: Encoding):
method create (line 12) | def create(cls, encoding: str = "cl100k_base") -> "TokenService":
method tokenize (line 15) | def tokenize(self, text: str) -> list[int]:
method detokenize (line 18) | def detokenize(self, tokens: list[int]) -> str:
method count (line 21) | def count(self, text: str) -> int:
method get_completion_space (line 24) | def get_completion_space(self, model: LLM_Model, *prompts: str) -> int:
method calculate_max_tokens (line 29) | def calculate_max_tokens(self, model: WrappedChatOpenAI, *prompts: str...
FILE: platform/reworkd_platform/settings.py
class Settings (line 34) | class Settings(BaseSettings):
method kafka_consumer_group (line 110) | def kafka_consumer_group(self) -> str:
method db_url (line 122) | def db_url(self) -> URL:
method pusher_enabled (line 133) | def pusher_enabled(self) -> bool:
method kafka_enabled (line 144) | def kafka_enabled(self) -> bool:
method helicone_enabled (line 154) | def helicone_enabled(self) -> bool:
method sid_enabled (line 163) | def sid_enabled(self) -> bool:
class Config (line 172) | class Config:
FILE: platform/reworkd_platform/tests/agent/test_analysis.py
function test_analysis_model (line 8) | def test_analysis_model() -> None:
function test_analysis_model_search_empty_arg (line 17) | def test_analysis_model_search_empty_arg() -> None:
function test_analysis_model_search_non_empty_arg (line 22) | def test_analysis_model_search_non_empty_arg() -> None:
function test_analysis_model_invalid_tool (line 29) | def test_analysis_model_invalid_tool() -> None:
FILE: platform/reworkd_platform/tests/agent/test_crud.py
function test_validate_task_count_no_error (line 13) | async def test_validate_task_count_no_error(mocker) -> None:
function test_validate_task_count_when_run_not_found (line 23) | async def test_validate_task_count_when_run_not_found(mocker: MockerFixt...
function test_validate_task_count_max_loops_error (line 32) | async def test_validate_task_count_max_loops_error(mocker: MockerFixture...
function test_validate_task_count_multiple_summary_error (line 42) | async def test_validate_task_count_multiple_summary_error(
function mock_agent_run_exists (line 53) | def mock_agent_run_exists(mocker: MockerFixture, exists: bool) -> None:
function mock_session_with_run_count (line 57) | def mock_session_with_run_count(mocker: MockerFixture, run_count: int) -...
FILE: platform/reworkd_platform/tests/agent/test_model_factory.py
function test_helicone_enabled_without_custom_api_key (line 16) | def test_helicone_enabled_without_custom_api_key():
function test_helicone_disabled (line 37) | def test_helicone_disabled():
function test_helicone_enabled_with_custom_api_key (line 48) | def test_helicone_enabled_with_custom_api_key():
function test_create_model (line 75) | def test_create_model(streaming, use_azure):
function test_custom_model_settings (line 127) | def test_custom_model_settings(model_settings: ModelSettings, streaming:...
FILE: platform/reworkd_platform/tests/agent/test_task_output_parser.py
function test_parse_success (line 32) | def test_parse_success(input_text: str, expected_output: List[str]) -> N...
function test_parse_with_completed_tasks (line 38) | def test_parse_with_completed_tasks() -> None:
function test_parse_failure (line 67) | def test_parse_failure(input_text: str, exception: Type[Exception]) -> N...
function test_extract_array_success (line 132) | def test_extract_array_success(input_str: str, expected: List[str]) -> N...
function test_extract_array_exception (line 148) | def test_extract_array_exception(input_str: str, exception: Type[Excepti...
function test_remove_task_prefix (line 186) | def test_remove_task_prefix(task_input: str, expected_output: str) -> None:
function test_real_tasks_filter_no_task (line 202) | def test_real_tasks_filter_no_task(input_text: str, expected_result: boo...
FILE: platform/reworkd_platform/tests/agent/test_tools.py
function test_get_tool_name (line 18) | def test_get_tool_name() -> None:
function test_format_tool_name (line 24) | def test_format_tool_name() -> None:
function test_get_tools_overview_no_duplicates (line 31) | def test_get_tools_overview_no_duplicates() -> None:
function test_get_default_tool (line 48) | def test_get_default_tool() -> None:
function test_get_tool_from_name (line 52) | def test_get_tool_from_name() -> None:
FILE: platform/reworkd_platform/tests/memory/memory_with_fallback_test.py
function test_memory_primary (line 14) | def test_memory_primary(mocker, method_name: str, args) -> None:
function test_memory_fallback (line 33) | def test_memory_fallback(mocker, method_name: str, args) -> None:
FILE: platform/reworkd_platform/tests/test_dependancies.py
function test_agent_validate (line 17) | async def test_agent_validate(mocker, validator, step):
FILE: platform/reworkd_platform/tests/test_helpers.py
function act (line 9) | async def act(*args, settings: ModelSettings = ModelSettings(), **kwargs):
function test_service_unavailable_error (line 14) | async def test_service_unavailable_error():
function test_should_log (line 30) | async def test_should_log(settings, should_log):
FILE: platform/reworkd_platform/tests/test_oauth_installers.py
function test_installer_factory (line 6) | def test_installer_factory(mocker):
function test_integration_dne (line 11) | def test_integration_dne(mocker):
FILE: platform/reworkd_platform/tests/test_reworkd_platform.py
function test_health (line 9) | async def test_health(client: AsyncClient, fastapi_app: FastAPI) -> None:
FILE: platform/reworkd_platform/tests/test_s3.py
function test_create_signed_post (line 4) | def test_create_signed_post(mocker):
FILE: platform/reworkd_platform/tests/test_schemas.py
function test_model_settings_valid (line 25) | def test_model_settings_valid(settings):
function test_model_settings_invalid (line 51) | def test_model_settings_invalid(settings):
function test_model_settings_default (line 56) | def test_model_settings_default():
FILE: platform/reworkd_platform/tests/test_security.py
function test_encrypt_decrypt (line 8) | def test_encrypt_decrypt():
function test_invalid_key (line 19) | def test_invalid_key():
FILE: platform/reworkd_platform/tests/test_settings.py
function test_settings_create (line 4) | def test_settings_create():
FILE: platform/reworkd_platform/tests/test_token_service.py
function test_happy_path (line 11) | def test_happy_path() -> None:
function test_nothing (line 17) | def test_nothing() -> None:
function validate_tokenize_and_detokenize (line 23) | def validate_tokenize_and_detokenize(
function test_calculate_max_tokens_with_small_max_tokens (line 32) | def test_calculate_max_tokens_with_small_max_tokens() -> None:
function test_calculate_max_tokens_with_high_completion_tokens (line 44) | def test_calculate_max_tokens_with_high_completion_tokens() -> None:
function test_calculate_max_tokens_with_negative_result (line 58) | def test_calculate_max_tokens_with_negative_result() -> None:
FILE: platform/reworkd_platform/timer.py
function timed_function (line 18) | def timed_function(level: Log_Level = "INFO") -> Callable[..., Any]:
FILE: platform/reworkd_platform/web/api/agent/agent_service/agent_service.py
class AgentService (line 8) | class AgentService(Protocol):
method start_goal_agent (line 9) | async def start_goal_agent(self, *, goal: str) -> List[str]:
method analyze_task_agent (line 12) | async def analyze_task_agent(
method execute_task_agent (line 17) | async def execute_task_agent(
method create_tasks_agent (line 26) | async def create_tasks_agent(
method summarize_task_agent (line 37) | async def summarize_task_agent(
method chat (line 45) | async def chat(
FILE: platform/reworkd_platform/web/api/agent/agent_service/agent_service_provider.py
function get_agent_service (line 22) | def get_agent_service(
FILE: platform/reworkd_platform/web/api/agent/agent_service/mock_agent_service.py
class MockAgentService (line 13) | class MockAgentService(AgentService):
method start_goal_agent (line 14) | async def start_goal_agent(self, **kwargs: Any) -> List[str]:
method create_tasks_agent (line 18) | async def create_tasks_agent(self, **kwargs: Any) -> List[str]:
method analyze_task_agent (line 22) | async def analyze_task_agent(self, **kwargs: Any) -> Analysis:
method execute_task_agent (line 30) | async def execute_task_agent(self, **kwargs: Any) -> FastAPIStreamingR...
method summarize_task_agent (line 45) | async def summarize_task_agent(
method chat (line 64) | async def chat(
FILE: platform/reworkd_platform/web/api/agent/agent_service/open_ai_agent_service.py
class OpenAIAgentService (line 43) | class OpenAIAgentService(AgentService):
method __init__ (line 44) | def __init__(
method start_goal_agent (line 60) | async def start_goal_agent(self, *, goal: str) -> List[str]:
method analyze_task_agent (line 88) | async def analyze_task_agent(
method execute_task_agent (line 126) | async def execute_task_agent(
method create_tasks_agent (line 146) | async def create_tasks_agent(
method summarize_task_agent (line 178) | async def summarize_task_agent(
method chat (line 199) | async def chat(
FILE: platform/reworkd_platform/web/api/agent/analysis.py
class AnalysisArguments (line 6) | class AnalysisArguments(BaseModel):
class Analysis (line 15) | class Analysis(AnalysisArguments):
method action_must_be_valid_tool (line 19) | def action_must_be_valid_tool(cls, v: str) -> str:
method search_action_must_have_arg (line 28) | def search_action_must_have_arg(cls, v: str, values: Dict[str, str]) -...
method get_default_analysis (line 37) | def get_default_analysis(cls, task: str) -> "Analysis":
FILE: platform/reworkd_platform/web/api/agent/dependancies.py
function agent_crud (line 26) | def agent_crud(
function agent_start_validator (line 33) | async def agent_start_validator(
function validate (line 48) | async def validate(body: T, crud: AgentCRUD, type_: Loop_Step) -> T:
function agent_analyze_validator (line 53) | async def agent_analyze_validator(
function agent_execute_validator (line 60) | async def agent_execute_validator(
function agent_create_validator (line 77) | async def agent_create_validator(
function agent_summarize_validator (line 84) | async def agent_summarize_validator(
function agent_chat_validator (line 91) | async def agent_chat_validator(
FILE: platform/reworkd_platform/web/api/agent/helpers.py
function parse_with_handling (line 19) | def parse_with_handling(parser: BaseOutputParser[T], completion: str) -> T:
function openai_error_handler (line 28) | async def openai_error_handler(
function call_model_with_handling (line 68) | async def call_model_with_handling(
FILE: platform/reworkd_platform/web/api/agent/model_factory.py
class WrappedChatOpenAI (line 11) | class WrappedChatOpenAI(ChatOpenAI):
class WrappedAzureChatOpenAI (line 20) | class WrappedAzureChatOpenAI(AzureChatOpenAI, WrappedChatOpenAI):
function create_model (line 29) | def create_model(
function get_base_and_headers (line 72) | def get_base_and_headers(
FILE: platform/reworkd_platform/web/api/agent/stream_mock.py
function stream_string (line 11) | def stream_string(data: str, delayed: bool = False) -> FastAPIStreamingR...
function stream_generator (line 17) | async def stream_generator(data: str, delayed: bool) -> AsyncGenerator[b...
FILE: platform/reworkd_platform/web/api/agent/task_output_parser.py
class TaskOutputParser (line 8) | class TaskOutputParser(BaseOutputParser[List[str]]):
method __init__ (line 16) | def __init__(self, *, completed_tasks: List[str]):
method parse (line 20) | def parse(self, text: str) -> List[str]:
method get_format_instructions (line 31) | def get_format_instructions(self) -> str:
function extract_array (line 41) | def extract_array(input_str: str) -> List[str]:
function handle_multiline_string (line 53) | def handle_multiline_string(input_str: str) -> List[str]:
function remove_prefix (line 68) | def remove_prefix(input_str: str) -> str:
function real_tasks_filter (line 76) | def real_tasks_filter(input_str: str) -> bool:
FILE: platform/reworkd_platform/web/api/agent/tools/code.py
class Code (line 10) | class Code(Tool):
method call (line 14) | async def call(
FILE: platform/reworkd_platform/web/api/agent/tools/conclude.py
class Conclude (line 9) | class Conclude(Tool):
method call (line 12) | async def call(
FILE: platform/reworkd_platform/web/api/agent/tools/image.py
function get_replicate_image (line 15) | async def get_replicate_image(input_str: str) -> str:
function get_open_ai_image (line 36) | async def get_open_ai_image(input_str: str) -> str:
class Image (line 47) | class Image(Tool):
method call (line 57) | async def call(
FILE: platform/reworkd_platform/web/api/agent/tools/open_ai_function.py
class FunctionDescription (line 7) | class FunctionDescription(TypedDict):
function get_tool_function (line 18) | def get_tool_function(tool: Type[Tool]) -> FunctionDescription:
FILE: platform/reworkd_platform/web/api/agent/tools/reason.py
class Reason (line 10) | class Reason(Tool):
method call (line 16) | async def call(
FILE: platform/reworkd_platform/web/api/agent/tools/search.py
function _google_serper_search_results (line 22) | async def _google_serper_search_results(
class Search (line 42) | class Search(Tool):
method available (line 52) | def available() -> bool:
method call (line 55) | async def call(
method _call (line 66) | async def _call(
FILE: platform/reworkd_platform/web/api/agent/tools/sidsearch.py
function _sid_search_results (line 21) | async def _sid_search_results(
function token_exchange (line 38) | async def token_exchange(refresh_token: str) -> tuple[str, datetime]:
function get_access_token (line 57) | async def get_access_token(
class SID (line 72) | class SID(Tool):
method available (line 84) | def available() -> bool:
method dynamic_available (line 88) | async def dynamic_available(user: UserBase, oauth_crud: OAuthCrud) -> ...
method _run_sid (line 95) | async def _run_sid(
method call (line 130) | async def call(
FILE: platform/reworkd_platform/web/api/agent/tools/tool.py
class Tool (line 11) | class Tool(ABC):
method __init__ (line 20) | def __init__(self, model: BaseChatModel, language: str):
method available (line 25) | def available() -> bool:
method dynamic_available (line 29) | async def dynamic_available(user: UserBase, oauth_crud: OAuthCrud) -> ...
method call (line 33) | async def call(
FILE: platform/reworkd_platform/web/api/agent/tools/tools.py
function get_user_tools (line 12) | async def get_user_tools(
function get_available_tools (line 19) | def get_available_tools() -> List[Type[Tool]]:
function get_available_tools_names (line 23) | def get_available_tools_names() -> List[str]:
function get_external_tools (line 27) | def get_external_tools() -> List[Type[Tool]]:
function get_default_tools (line 36) | def get_default_tools() -> List[Type[Tool]]:
function get_tool_name (line 42) | def get_tool_name(tool: Type[Tool]) -> str:
function format_tool_name (line 46) | def format_tool_name(tool_name: str) -> str:
function get_tools_overview (line 50) | def get_tools_overview(tools: List[Type[Tool]]) -> str:
function get_tool_from_name (line 65) | def get_tool_from_name(tool_name: str) -> Type[Tool]:
function get_default_tool (line 73) | def get_default_tool() -> Type[Tool]:
function get_default_tool_name (line 77) | def get_default_tool_name() -> str:
FILE: platform/reworkd_platform/web/api/agent/tools/utils.py
class CitedSnippet (line 11) | class CitedSnippet:
method __repr__ (line 16) | def __repr__(self) -> str:
class Snippet (line 24) | class Snippet:
method __repr__ (line 27) | def __repr__(self) -> str:
function summarize (line 34) | def summarize(
function summarize_with_sources (line 55) | def summarize_with_sources(
function summarize_sid (line 78) | def summarize_sid(
FILE: platform/reworkd_platform/web/api/agent/tools/wikipedia_search.py
class Wikipedia (line 10) | class Wikipedia(Tool):
method call (line 20) | async def call(
FILE: platform/reworkd_platform/web/api/agent/views.py
function start_tasks (line 37) | async def start_tasks(
function analyze_tasks (line 46) | async def analyze_tasks(
function execute_tasks (line 58) | async def execute_tasks(
function create_tasks (line 72) | async def create_tasks(
function summarize (line 87) | async def summarize(
function chat (line 104) | async def chat(
class ToolModel (line 120) | class ToolModel(BaseModel):
class ToolsResponse (line 127) | class ToolsResponse(BaseModel):
function get_user_tools (line 132) | async def get_user_tools() -> ToolsResponse:
FILE: platform/reworkd_platform/web/api/auth/views.py
function organizations (line 17) | async def organizations(
function oauth_install (line 26) | async def oauth_install(
function oauth_uninstall (line 36) | async def oauth_uninstall(
function oauth_callback (line 47) | async def oauth_callback(
function sid_info (line 63) | async def sid_info(
FILE: platform/reworkd_platform/web/api/dependencies.py
function user_crud (line 15) | def user_crud(
function get_current_user (line 21) | async def get_current_user(
FILE: platform/reworkd_platform/web/api/error_handling.py
function platformatic_exception_handler (line 8) | async def platformatic_exception_handler(
FILE: platform/reworkd_platform/web/api/errors.py
class PlatformaticError (line 1) | class PlatformaticError(Exception):
method __init__ (line 12) | def __init__(
class OpenAIError (line 25) | class OpenAIError(PlatformaticError):
class ReplicateError (line 29) | class ReplicateError(PlatformaticError):
class MaxLoopsError (line 33) | class MaxLoopsError(PlatformaticError):
class MultipleSummaryError (line 37) | class MultipleSummaryError(PlatformaticError):
FILE: platform/reworkd_platform/web/api/http_responses.py
function forbidden (line 4) | def forbidden(detail: str = "Forbidden") -> HTTPException:
function not_found (line 8) | def not_found(detail: str = "Not Found") -> HTTPException:
FILE: platform/reworkd_platform/web/api/memory/memory.py
class AgentMemory (line 7) | class AgentMemory(ABC):
method __enter__ (line 14) | def __enter__(self) -> "AgentMemory":
method __exit__ (line 18) | def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> N...
method add_tasks (line 22) | def add_tasks(self, tasks: List[str]) -> List[str]:
method get_similar_tasks (line 26) | def get_similar_tasks(self, query: str, score_threshold: float = 0.95)...
method reset_class (line 30) | def reset_class(self) -> None:
method should_use (line 34) | def should_use() -> bool:
FILE: platform/reworkd_platform/web/api/memory/memory_with_fallback.py
class MemoryWithFallback (line 10) | class MemoryWithFallback(AgentMemory):
method __init__ (line 16) | def __init__(self, primary: AgentMemory, secondary: AgentMemory):
method __enter__ (line 20) | def __enter__(self) -> AgentMemory:
method __exit__ (line 27) | def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> N...
method add_tasks (line 34) | def add_tasks(self, tasks: List[str]) -> List[str]:
method get_similar_tasks (line 41) | def get_similar_tasks(self, query: str, score_threshold: float = 0) ->...
method reset_class (line 48) | def reset_class(self) -> None:
FILE: platform/reworkd_platform/web/api/memory/null.py
class NullAgentMemory (line 6) | class NullAgentMemory(AgentMemory):
method __enter__ (line 12) | def __enter__(self) -> AgentMemory:
method __exit__ (line 15) | def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> N...
method add_tasks (line 18) | def add_tasks(self, tasks: List[str]) -> List[str]:
method get_similar_tasks (line 21) | def get_similar_tasks(self, query: str, score_threshold: float = 0) ->...
method reset_class (line 24) | def reset_class(self) -> None:
FILE: platform/reworkd_platform/web/api/metadata.py
class Metadata (line 14) | class Metadata(BaseModel):
function extract_metadata (line 23) | async def extract_metadata(url: str) -> Metadata:
FILE: platform/reworkd_platform/web/api/models/views.py
class ModelWithAccess (line 13) | class ModelWithAccess(BaseModel):
method from_model (line 21) | def from_model(name: str, max_tokens: int, user: UserBase) -> "ModelWi...
function get_models (line 27) | async def get_models(
FILE: platform/reworkd_platform/web/api/monitoring/views.py
function health_check (line 7) | def health_check() -> None:
function error_check (line 16) | def error_check() -> None:
FILE: platform/reworkd_platform/web/application.py
function get_app (line 18) | def get_app() -> FastAPI:
FILE: platform/reworkd_platform/web/lifetime.py
function _setup_db (line 12) | def _setup_db(app: FastAPI) -> None: # pragma: no cover
function _create_tables (line 31) | async def _create_tables() -> None: # pragma: no cover
function register_startup_event (line 41) | def register_startup_event(
function register_shutdown_event (line 63) | def register_shutdown_event(
Condensed preview — 518 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (897K chars).
[
{
"path": ".editorconfig",
"chars": 146,
"preview": "root = true\n\n[*]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ni"
},
{
"path": ".gitattributes",
"chars": 66,
"preview": "# Auto detect text files and perform LF normalization\n* text=auto\n"
},
{
"path": ".github/CODE_OF_CONDUCT.md",
"chars": 5226,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participa"
},
{
"path": ".github/CONTRIBUTING.md",
"chars": 3278,
"preview": "# Contributing to AgentGPT\n\nFirst of all, thank you for your interest in contributing to AgentGPT! We appreciate the tim"
},
{
"path": ".github/FUNDING.yml",
"chars": 22,
"preview": "github: reworkd-admin\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug-report.yaml",
"chars": 3029,
"preview": "name: Bug Report\ndescription: File a bug report\nlabels: [\"bug\", \"needs triage\"]\nbody:\n - type: markdown\n attributes:"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 283,
"preview": "blank_issues_enabled: true\ncontact_links:\n - name: Ask a question\n url: https://github.com/reworkd/AgentGPT/discussi"
},
{
"path": ".github/ISSUE_TEMPLATE/docs.yml",
"chars": 1909,
"preview": "name: Documentation Improvement / Clarity\ndescription: Make a suggestion to improve the project documentation.\nlabels: ["
},
{
"path": ".github/ISSUE_TEMPLATE/feature-request.yaml",
"chars": 2456,
"preview": "name: Feature Request / Enhancement\ndescription: Suggest a new feature or feature enhancement for the project\nlabels: [\""
},
{
"path": ".github/PULL_REQUEST_TEMPLATE/pull_request_template.md",
"chars": 3033,
"preview": "<!--- Provide a general summary of your changes in the Title above -->\n\n# Description\n\n<!--- Describe your changes in de"
},
{
"path": ".github/SECURITY.md",
"chars": 501,
"preview": "# Security Policy\n\n## Supported Versions\n\nDue to the nature of the fast development that is happening in this project, o"
},
{
"path": ".github/SUPPORT.md",
"chars": 404,
"preview": "# Support\n\nIf you need help with this project or have questions, please:\n\n1. Check the documentation.\n2. Search the exis"
},
{
"path": ".github/dependabot.yml",
"chars": 448,
"preview": "# Please see the documentation for all configuration options:\n# https://docs.github.com/github/administering-a-repositor"
},
{
"path": ".github/workflows/node.js.yml",
"chars": 640,
"preview": "name: Node.js CI\n\non:\n push:\n branches: [ \"main\" ]\n paths:\n - 'next/**'\n pull_request:\n branches: [ \"mai"
},
{
"path": ".github/workflows/python.yml",
"chars": 2116,
"preview": "name: Testing Platform\non:\n pull_request:\n branches: [ \"main\" ]\n paths:\n - 'platform/**'\n\nenv:\n PYTHON_VERS"
},
{
"path": ".github/workflows/sponsors.yml",
"chars": 870,
"preview": "name: Generate Sponsors README\non:\n workflow_dispatch:\n schedule:\n - cron: 0 0 * * *\njobs:\n deploy:\n runs-on: u"
},
{
"path": ".github/workflows/webhooks.yml",
"chars": 563,
"preview": "name: Invoke Deployment Webhooks\non:\n workflow_dispatch:\n push:\n branches: [ \"main\" ]\n\njobs:\n invoke:\n name: In"
},
{
"path": ".gitignore",
"chars": 737,
"preview": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pn"
},
{
"path": "LICENSE",
"chars": 35149,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "README.md",
"chars": 12397,
"preview": "<p align=\"center\">\n <img src=\"https://raw.githubusercontent.com/reworkd/AgentGPT/main/next/public/banner.png\" height=\"3"
},
{
"path": "cli/.gitignore",
"chars": 283,
"preview": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pn"
},
{
"path": "cli/README.md",
"chars": 649,
"preview": "## AgentGPT CLI\n\nAgentGPT CLI is a utility designed to streamline the setup process of your AgentGPT environment.\nIt use"
},
{
"path": "cli/package.json",
"chars": 731,
"preview": "{\n \"name\": \"agentgpt-cli\",\n \"version\": \"1.0.0\",\n \"description\": \"A CLI to create your AgentGPT environment\",\n \"priva"
},
{
"path": "cli/src/envGenerator.js",
"chars": 4649,
"preview": "import crypto from \"crypto\";\nimport fs from \"fs\";\nimport chalk from \"chalk\";\n\nexport const generateEnv = (envValues) => "
},
{
"path": "cli/src/helpers.js",
"chars": 711,
"preview": "import chalk from \"chalk\";\nimport figlet from \"figlet\";\n\nexport const printTitle = () => {\n console.log(\n chalk.red("
},
{
"path": "cli/src/index.js",
"chars": 1632,
"preview": "import inquirer from \"inquirer\";\nimport dotenv from \"dotenv\";\nimport { printTitle } from \"./helpers.js\";\nimport { doesEn"
},
{
"path": "cli/src/questions/existingEnvQuestions.js",
"chars": 124,
"preview": "import { RUN_OPTION_QUESTION } from \"./sharedQuestions.js\";\n\nexport const existingEnvQuestions = [\n RUN_OPTION_QUESTION"
},
{
"path": "cli/src/questions/newEnvQuestions.js",
"chars": 2673,
"preview": "import { isValidKey, validKeyErrorMessage } from \"../helpers.js\";\nimport { RUN_OPTION_QUESTION } from \"./sharedQuestions"
},
{
"path": "cli/src/questions/sharedQuestions.js",
"chars": 305,
"preview": "export const RUN_OPTION_QUESTION = {\n type: 'list',\n name: 'runOption',\n choices: [\n { value: \"docker-compose\", na"
},
{
"path": "cli/tsconfig.json",
"chars": 12140,
"preview": "{\n \"compilerOptions\": {\n /* Visit https://aka.ms/tsconfig to read more about this file */\n\n /* Projects */\n //"
},
{
"path": "db/Dockerfile",
"chars": 58,
"preview": "FROM mysql:8.0\n\nADD setup.sql /docker-entrypoint-initdb.d\n"
},
{
"path": "docker-compose.yml",
"chars": 1357,
"preview": "version: '3.9'\n\nservices:\n frontend:\n container_name: frontend\n build:\n context: ./next\n dockerfile: Do"
},
{
"path": "docs/README.hu-Cs4K1Sr4C.md",
"chars": 21271,
"preview": "<p align=\"center\">\n <img src=\"https://raw.githubusercontent.com/reworkd/AgentGPT/main/public/banner.png?token=GHSAT0AAA"
},
{
"path": "docs/README.md",
"chars": 0,
"preview": ""
},
{
"path": "docs/README.zh-HANS.md",
"chars": 11319,
"preview": "<p align=\"center\">\n <img src=\"https://raw.githubusercontent.com/reworkd/AgentGPT/main/next/public/banner.png\" height=\"3"
},
{
"path": "docs/developers/api-keys.mdx",
"chars": 753,
"preview": "---\ntitle: API Keys\n---\n\nBefore you can use the Reworkd API, you will need to create an API key for your organization. T"
},
{
"path": "docs/developers/file-downloads.mdx",
"chars": 2430,
"preview": "---\ntitle: Handling File Downloads\n---\nDifferent types of file downloads require different code strategies. This page ou"
},
{
"path": "docs/developers/sdk.mdx",
"chars": 6837,
"preview": "---\ntitle: Scraping SDK\n---\n\nAs part of code generation, Reworkd generates code in its own custom SDK called [Harambe](h"
},
{
"path": "docs/docs.json",
"chars": 2190,
"preview": "{\n \"$schema\": \"https://mintlify.com/docs.json\",\n \"theme\": \"mint\",\n \"name\": \"Reworkd\",\n \"background\": {\n \"color\""
},
{
"path": "docs/features/deduplication.mdx",
"chars": 1575,
"preview": "---\ntitle: Deduplication\ndescription: Automatically generate scrapers\n---\n\nReworkd automatically handles deduplicating d"
},
{
"path": "docs/features/exports/api-exports.mdx",
"chars": 854,
"preview": "---\ntitle: API Exports\ndescription: Export data via our APIs\n---\n\nThe most common way for our customers to ingest our da"
},
{
"path": "docs/features/exports/bulk-exports.mdx",
"chars": 755,
"preview": "---\ntitle: Bulk Exports\ndescription: Export data via our UI\n---\n\nBulk exports are JSON or CSV files of all of the scrape"
},
{
"path": "docs/features/exports/overview.mdx",
"chars": 443,
"preview": "---\ntitle: Exports Overview\nsidebarTitle: Overview\ndescription: Exporting your data out of Reworkd\n---\n\n<CardGroup cols="
},
{
"path": "docs/features/file-downloads.mdx",
"chars": 2905,
"preview": "---\ntitle: File Downloads\n---\n\nReworkd can automatically handle downloading files on your behalf. Files are stored in ou"
},
{
"path": "docs/features/scheduling.mdx",
"chars": 1081,
"preview": "---\ntitle: Scheduling\ndescription: Re-use scrapers across identical sites\n---\n\nYou can schedule groups to be re-run at a"
},
{
"path": "docs/features/templates.mdx",
"chars": 805,
"preview": "---\ntitle: Templates\ndescription: Re-use scrapers across identical sites\n---\n\n<Note>Note: Templates are not available fo"
},
{
"path": "docs/introduction.mdx",
"chars": 1229,
"preview": "---\ntitle: Introduction\ndescription: Reworkd - Extract web data at scale\n---\n\n<Frame>\n <img src=\"/images/banner.png\" "
},
{
"path": "docs/key-concepts.mdx",
"chars": 2291,
"preview": "---\ntitle: Key Concepts\ndescription: Everything you need to get started with Reworkd\n---\n\n# Groups\nA group is the first "
},
{
"path": "docs/schemas.mdx",
"chars": 2553,
"preview": "---\ntitle: Schemas\n---\nSchemas are the definition for the exact data format you expect websites within a particular grou"
},
{
"path": "next/.dockerignore",
"chars": 65,
"preview": "**/.git\n**/node_modules\n**/idea\n**/.next\n**/aws\n**/.husky\n**/venv"
},
{
"path": "next/.eslintrc.json",
"chars": 2126,
"preview": "{\n \"overrides\": [\n {\n \"extends\": [\n \"plugin:@typescript-eslint/recommended-requiring-type-checking\"\n "
},
{
"path": "next/.gitignore",
"chars": 716,
"preview": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pn"
},
{
"path": "next/.husky/.gitignore",
"chars": 2,
"preview": "_\n"
},
{
"path": "next/.husky/pre-commit",
"chars": 50,
"preview": "#!/usr/bin/env sh\n\n#npx lint-staged --allow-empty\n"
},
{
"path": "next/Dockerfile",
"chars": 841,
"preview": "# Use the official Node.js image as the base image\nFROM node:19-alpine\n\nARG NODE_ENV\n\nENV NODE_ENV=$NODE_ENV\n\n# Needed f"
},
{
"path": "next/__mocks__/matchMedia.mock.ts",
"chars": 453,
"preview": "// When using the matchMedia API in your tests, you will need to mock it.\nObject.defineProperty(window, \"matchMedia\", {\n"
},
{
"path": "next/__tests__/message-service.test.ts",
"chars": 2051,
"preview": "import \"../__mocks__/matchMedia.mock\"\nimport type { Message } from \"../src/types/message\";\nimport { MessageService } fro"
},
{
"path": "next/__tests__/stripe.sh",
"chars": 61,
"preview": "stripe listen --forward-to localhost:3000/api/webhooks/stripe"
},
{
"path": "next/__tests__/whitespace.test.ts",
"chars": 565,
"preview": "import { isEmptyOrBlank } from \"../src/utils/whitespace\";\n\ndescribe(\"WhiteSpace and empty string should return true\", ()"
},
{
"path": "next/__tests__/with-retries.test.ts",
"chars": 1420,
"preview": "import { withRetries } from \"../src/services/api-utils\";\n\ndescribe(\"withRetries\", () => {\n it(\"should retry 3 times by "
},
{
"path": "next/entrypoint.sh",
"chars": 526,
"preview": "#!/usr/bin/env sh\n\ncd /next\ndos2unix wait-for-db.sh\n\n# copy .env file if not exists\n[ ! -f .env ] && [ -f .env.example ]"
},
{
"path": "next/jest.config.cjs",
"chars": 788,
"preview": "const nextJest = require(\"next/jest\");\n\nconst createJestConfig = nextJest({\n // Provide the path to your Next.js app to"
},
{
"path": "next/next-i18next.config.js",
"chars": 667,
"preview": "module.exports = {\n i18n: {\n defaultLocale: \"en\",\n locales: [\n \"en\",\n \"hu\",\n \"fr\",\n \"de\",\n "
},
{
"path": "next/next.config.mjs",
"chars": 1263,
"preview": "import nextI18NextConfig from \"./next-i18next.config.js\";\n\n// @ts-check\n/**\n * Run `build` or `dev` with `SKIP_ENV_VALID"
},
{
"path": "next/package.json",
"chars": 2975,
"preview": "{\n \"name\": \"agent-gpt\",\n \"version\": \"1.0.0\",\n \"private\": true,\n \"engines\": {\n \"node\": \">=18.0.0 <19.0.0\"\n },\n \""
},
{
"path": "next/postcss.config.cjs",
"chars": 83,
"preview": "module.exports = {\n plugins: {\n tailwindcss: {},\n autoprefixer: {},\n },\n};\n"
},
{
"path": "next/posts/Understanding-AgentGPT.mdx",
"chars": 22215,
"preview": "---\ntitle: \"Understanding AgentGPT: How we build AI agents that reason, remember, and perform.\"\ndescription: \"How we bui"
},
{
"path": "next/prettier.config.cjs",
"chars": 142,
"preview": "/** @type {import(\"prettier\").Config} */\nmodule.exports = {\n plugins: [require.resolve(\"prettier-plugin-tailwindcss\")],"
},
{
"path": "next/prisma/.gitignore",
"chars": 15,
"preview": "schema.prisma*\n"
},
{
"path": "next/prisma/useMysql.sh",
"chars": 99,
"preview": "#!/bin/bash\ncd \"$(dirname \"$0\")\" || exit 1\n\nrm schema.prisma\nmv schema.prisma.mysql schema.prisma\n\n"
},
{
"path": "next/prisma/useSqlite.sh",
"chars": 260,
"preview": "#!/usr/bin/env bash\ncd \"$(dirname \"$0\")\" || exit 1\n\ncp schema.prisma schema.prisma.mysql\nsed -ie 's/mysql/sqlite/g' sche"
},
{
"path": "next/public/locales/de/chat.json",
"chars": 1344,
"preview": "{\n \"EXPERIENCING_EXCEPTIONAL_TRAFFIC\": \"🚨 Wir haben außergewöhnlichen Verkehr, erwarten Sie Verzögerungen und Ausfälle,"
},
{
"path": "next/public/locales/de/chat.missing.json",
"chars": 830,
"preview": "{\n\t\"👉 Create an agent by adding a name / goal, and hitting deploy! Try our examples below!\": \"👉 Erstelle einen Agenten, "
},
{
"path": "next/public/locales/de/common.json",
"chars": 1196,
"preview": "{\n\t\"ADDING_TASK\": \"Aufgabe Hinzufügen\",\n\t\"AGENTGPT_DOCUMENTATION\": \"Dokumentation von AgentGPT\",\n\t\"CLOSE\": \"Schließen\",\n"
},
{
"path": "next/public/locales/de/drawer.json",
"chars": 475,
"preview": "{\n\t\"ACCOUNT\": \"Konto\",\n\t\"HELP_BUTTON\": \"Hilfe\",\n\t\"MY_AGENTS\": \"Meine Agenten\",\n\t\"NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST\""
},
{
"path": "next/public/locales/de/errors.json",
"chars": 1747,
"preview": "{\n \"ERROR_ACCESSING_OPENAI_API_KEY\": \"Fehler beim Zugriff auf den OpenAI API-Schlüssel. Bitte überprüfen Sie den API-Sc"
},
{
"path": "next/public/locales/de/help.json",
"chars": 917,
"preview": "{\n\t\"AGENTGPT_DOCUMENTATION\": \"Dokumentation von AgentGPT\",\n\t\"FOLLOW_THE_JOURNEY\": \"Folgen Sie uns auf folgenden Wegen:\","
},
{
"path": "next/public/locales/de/indexPage.json",
"chars": 367,
"preview": "{\n \"BETA\": \"Beta\",\n \"HEADING_DESCRIPTION\": \"Stellen Sie autonome KI-Agenten in Ihrem Browser zusammen, konfigurieren S"
},
{
"path": "next/public/locales/de/languages.json",
"chars": 405,
"preview": "{\n \"ENGLISH\": \"Englisch\",\n \"FRENCH\": \"Französisch\",\n \"SPANISH\": \"Spanisch\",\n \"GERMAN\": \"Deutsch\",\n \"JAPAN"
},
{
"path": "next/public/locales/de/settings.json",
"chars": 2162,
"preview": "{\n\t\"ADVANCED_SETTINGS\": \"Erweiterte Einstellungen\",\n\t\"API_KEY\": \"API-Schlüssel\",\n\t\"AUTOMATIC_MODE\": \"Automatikmodus\",\n\t\""
},
{
"path": "next/public/locales/en/chat.json",
"chars": 1159,
"preview": "{\n \"COMPLETING\": \"Completing:\",\n \"CONSIDER_SPONSORING_ON_GITHUB\": \"Please consider sponsoring the project on GitHub.\","
},
{
"path": "next/public/locales/en/chat.missing.json",
"chars": 3267,
"preview": "{\n \"👉 創建一個AI機器人,輸入名稱和目標,然後點擊\\\"啟動AI!\\\"按鈕\": \"👉 創建一個AI機器人,輸入名稱和目標,然後點擊\\\"啟動AI!\\\"按鈕\",\n \"👉 Utwórz agenta, dodając nazwę i ce"
},
{
"path": "next/public/locales/en/common.json",
"chars": 1025,
"preview": "{\n\t\"ADDING_TASK\": \"Adding Task\",\n\t\"AGENTGPT_DOCUMENTATION\": \"AgentGPT's Documentation\",\n\t\"CLOSE\": \"Close\",\n\t\"CONTINUE\": "
},
{
"path": "next/public/locales/en/common.missing.json",
"chars": 38,
"preview": "{\n \"Current tasks\": \"Current tasks\"\n}"
},
{
"path": "next/public/locales/en/drawer.json",
"chars": 395,
"preview": "{\n \"HELP_BUTTON\": \"Help\",\n \"SETTINGS_BUTTON\": \"Settings\",\n \"SUPPORT_BUTTON\": \"Support\",\n \"MY_AGENTS\": \"My Agents\",\n "
},
{
"path": "next/public/locales/en/errors.json",
"chars": 1360,
"preview": "{\n \"ERROR_ACCESSING_OPENAI_API_KEY\": \"ERROR accessing the backend. Please email support@reworkd.ai or try again later\","
},
{
"path": "next/public/locales/en/help.json",
"chars": 787,
"preview": "{\n \"WELCOME_TO_AGENT_GPT\": \"Welcome to AgentGPT\",\n \"INTRODUCING_AGENTGPT\": \"allows you to configure and deploy Autonom"
},
{
"path": "next/public/locales/en/indexPage.json",
"chars": 310,
"preview": "{\n \"BETA\": \"Beta\",\n \"HEADING_DESCRIPTION\": \"Assemble, configure, and deploy autonomous AI Agents in your browser.\",\n "
},
{
"path": "next/public/locales/en/languages.json",
"chars": 365,
"preview": "{\n \"ENGLISH\": \"English\",\n \"FRENCH\": \"French\",\n \"SPANISH\": \"Spanish\",\n \"GERMAN\": \"Deutsch\",\n \"JAPANESE\": \""
},
{
"path": "next/public/locales/en/settings.json",
"chars": 1841,
"preview": "{\n\t\"ADVANCED_SETTINGS\": \"Advanced settings\",\n\t\"API_KEY\": \"Key\",\n\t\"AUTOMATIC_MODE\": \"Automatic mode\",\n\t\"AUTOMATIC_MODE_DE"
},
{
"path": "next/public/locales/es/chat.json",
"chars": 1278,
"preview": "{\n \"EXPERIENCING_EXCEPTIONAL_TRAFFIC\": \"🚨 AgentGPT experimenta un tráfico excepcional. Si no estas usando tu propia cla"
},
{
"path": "next/public/locales/es/chat.missing.json",
"chars": 816,
"preview": "{\n\t\"👉 Create an agent by adding a name / goal, and hitting deploy! Try our examples below!\": \"👉 ¡Crea un Agente agregand"
},
{
"path": "next/public/locales/es/common.json",
"chars": 1048,
"preview": "{\n\t\"ADDING_TASK\": \"Añadiendo tarea\",\n\t\"AGENTGPT_DOCUMENTATION\": \"Documentación de AgentGPT\",\n\t\"CLOSE\": \"Cerrar\",\n\t\"CONTI"
},
{
"path": "next/public/locales/es/drawer.json",
"chars": 431,
"preview": "{\n\t\"ACCOUNT\": \"Cuenta\",\n\t\"HELP_BUTTON\": \"Ayuda\",\n\t\"MY_AGENTS\": \"Mis agentes\",\n\t\"NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST\":"
},
{
"path": "next/public/locales/es/errors.json",
"chars": 1758,
"preview": "{\n \"ERROR_ACCESSING_OPENAI_API_KEY\": \"Error al acceder al API de OpenAI. Por favor, verifica tu clave de API o intenta "
},
{
"path": "next/public/locales/es/help.json",
"chars": 951,
"preview": "{\n\t\"WELCOME_TO_AGENT_GPT\": \"Bienvenido a AgentGPT\",\n\t\"INTRODUCING_AGENTGPT\": \"te permite configurar y ejecutar agentes d"
},
{
"path": "next/public/locales/es/indexPage.json",
"chars": 327,
"preview": "{\n \"BETA\": \"Beta\",\n \"HEADING_DESCRIPTION\": \"Ensambla, configura y ejecuta agentes de IA autónomos en tu navegador.\",\n "
},
{
"path": "next/public/locales/es/languages.json",
"chars": 365,
"preview": "{\n \"ENGLISH\": \"Inglés\",\n \"FRENCH\": \"Francés\",\n \"SPANISH\": \"Español\",\n \"GERMAN\": \"Alemán\",\n \"JAPANESE\": \"J"
},
{
"path": "next/public/locales/es/settings.json",
"chars": 2154,
"preview": "{\n\t\"ADVANCED_SETTINGS\": \"Configuración avanzada\",\n\t\"API_KEY\": \"Clave del API de OpenAI\",\n\t\"AUTOMATIC_MODE\": \"Modo automá"
},
{
"path": "next/public/locales/fr/chat.json",
"chars": 1282,
"preview": "{\n \"EXPERIENCING_EXCEPTIONAL_TRAFFIC\": \"🚨 Nous rencontrons un trafic exceptionnel, prévoyez des retards et des échecs s"
},
{
"path": "next/public/locales/fr/chat.missing.json",
"chars": 730,
"preview": "{\n\t\"👉 Create an agent by adding a name / goal, and hitting deploy! Try our examples below!\": \"👉 Créez un agent en ajouta"
},
{
"path": "next/public/locales/fr/common.json",
"chars": 1108,
"preview": "{\n\t\"ADDING_TASK\": \"Ajout de tâche\",\n\t\"AGENTGPT_DOCUMENTATION\": \"Documentation d'AgentGPT\",\n\t\"CLOSE\": \"Fermer\",\n\t\"CONTINU"
},
{
"path": "next/public/locales/fr/drawer.json",
"chars": 474,
"preview": "{\n\t\"ACCOUNT\": \"Compte\",\n\t\"HELP_BUTTON\": \"Aide\",\n\t\"MY_AGENTS\": \"Mes agents\",\n\t\"NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST\": \""
},
{
"path": "next/public/locales/fr/errors.json",
"chars": 1792,
"preview": "{\n \"ERROR_ACCESSING_OPENAI_API_KEY\": \"ERREUR lors de l'accès à la clé d'API OpenAI. Veuillez vérifier la clé d'API ou r"
},
{
"path": "next/public/locales/fr/help.json",
"chars": 918,
"preview": "{\n\t\"AGENTGPT_DOCUMENTATION\": \"Documentation d'AgentGPT\",\n\t\"FOLLOW_THE_JOURNEY\": \"Suivez notre parcours ci-dessous :\",\n\t\""
},
{
"path": "next/public/locales/fr/indexPage.json",
"chars": 332,
"preview": "{\n \"BETA\": \"Béta\",\n \"HEADING_DESCRIPTION\": \"Assembler, configurer et déployer des agents d'IA autonomes dans votre nav"
},
{
"path": "next/public/locales/fr/languages.json",
"chars": 378,
"preview": "{\n \"ENGLISH\": \"Anglais\",\n \"FRENCH\": \"Français\",\n \"SPANISH\": \"Espagnol\",\n \"GERMAN\": \"Allemand\",\n \"JAPANESE"
},
{
"path": "next/public/locales/fr/settings.json",
"chars": 2104,
"preview": "{\n\t\"ADVANCED_SETTINGS\": \"Paramètres avancés\",\n\t\"API_KEY\": \"Clé API\",\n\t\"AUTOMATIC_MODE\": \"Mode automatique\",\n\t\"AUTOMATIC_"
},
{
"path": "next/public/locales/hr/chat.json",
"chars": 1182,
"preview": "{\n \"EXPERIENCING_EXCEPTIONAL_TRAFFIC\": \"🚨 Doživljavamo iznimno velik promet, očekujte kašnjenja i probleme ako ne koris"
},
{
"path": "next/public/locales/hr/chat.missing.json",
"chars": 794,
"preview": "{\n\t\"👉 Create an agent by adding a name / goal, and hitting deploy! Try our examples below!\": \"👉 Izradite agenta dodavanj"
},
{
"path": "next/public/locales/hr/common.json",
"chars": 1072,
"preview": "{\n\t\"ADDING_TASK\": \"Dodavanje zadatka\",\n\t\"AGENTGPT_DOCUMENTATION\": \"Dokumentacija AgentGPT-a\",\n\t\"CLOSE\": \"Zatvoriti\",\n\t\"C"
},
{
"path": "next/public/locales/hr/drawer.json",
"chars": 452,
"preview": "{\n\t\"ACCOUNT\": \"Račun\",\n\t\"HELP_BUTTON\": \"Pomoć\",\n\t\"MY_AGENTS\": \"Moji agenti\",\n\t\"NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST\": "
},
{
"path": "next/public/locales/hr/errors.json",
"chars": 1551,
"preview": "{\n \"ERROR_ACCESSING_OPENAI_API_KEY\": \"Pogreška prilikom pristupa OpenAI API ključu. Provjerite ključ ili pokušajte kasn"
},
{
"path": "next/public/locales/hr/help.json",
"chars": 871,
"preview": "{\n\t\"AGENTGPT_DOCUMENTATION\": \"Dokumentacija AgentGPT-a\",\n\t\"FOLLOW_THE_JOURNEY\": \"Pratite naše putovanje u nastavku:\",\n\t\""
},
{
"path": "next/public/locales/hr/indexPage.json",
"chars": 329,
"preview": "{\n \"BETA\": \"Beta\",\n \"HEADING_DESCRIPTION\": \"Sastavite, konfigurirajte i instalirajte autonomne AI agente u svom pregle"
},
{
"path": "next/public/locales/hr/languages.json",
"chars": 389,
"preview": "{\n \"ENGLISH\": \"Engleski\",\n \"FRENCH\": \"Francuski\",\n \"SPANISH\": \"Španjolski\",\n \"GERMAN\": \"Njemački\",\n \"JAPA"
},
{
"path": "next/public/locales/hr/settings.json",
"chars": 1953,
"preview": "{\n\t\"ADVANCED_SETTINGS\": \"Napredne postavke\",\n\t\"API_KEY\": \"API ključ\",\n\t\"AUTOMATIC_MODE\": \"Automatski način rada\",\n\t\"AUTO"
},
{
"path": "next/public/locales/hu/chat.json",
"chars": 1271,
"preview": "{\n \"EXPERIENCING_EXCEPTIONAL_TRAFFIC\": \"🚨 Kivételesen nagy forgalmat tapasztalunk, várható késések és hibák, ha nem a s"
},
{
"path": "next/public/locales/hu/chat.missing.json",
"chars": 814,
"preview": "{\n\t\"👉 Create an agent by adding a name / goal, and hitting deploy! Try our examples below!\": \"👉 Hozzon létre egy ügynökö"
},
{
"path": "next/public/locales/hu/common.json",
"chars": 1071,
"preview": "{\n\t\"ADDING_TASK\": \"Feladat hozzáadása\",\n\t\"AGENTGPT_DOCUMENTATION\": \"AgentGPT Dokumentáció\",\n\t\"CLOSE\": \"Bezárás\",\n\t\"CONTI"
},
{
"path": "next/public/locales/hu/drawer.json",
"chars": 482,
"preview": "{\n \"HELP_BUTTON\": \"Segítség\",\n \"SETTINGS_BUTTON\": \"Beállítások\",\n \"SUPPORT_BUTTON\": \"Támogatás\",\n \"MY_AGENTS\": \"Az é"
},
{
"path": "next/public/locales/hu/errors.json",
"chars": 1641,
"preview": "{\n \"ERROR_ACCESSING_OPENAI_API_KEY\": \"HIBA a OpenAI API-hoz való csatlakozás közben. Kérjük, ellenőrizze az API-kulcsot"
},
{
"path": "next/public/locales/hu/help.json",
"chars": 949,
"preview": "{\n\t\"AGENTGPT_DOCUMENTATION\": \"AgentGPT dokumentációja\",\n\t\"FOLLOW_THE_JOURNEY\": \"Kövessen minket az alábbi utakon:\",\n\t\"IN"
},
{
"path": "next/public/locales/hu/indexPage.json",
"chars": 325,
"preview": "{\n \"BETA\": \"Béta\",\n \"HEADING_DESCRIPTION\": \"Összeállít, konfigurál és telepít autonóm MI ügynököket a böngészőjében.\","
},
{
"path": "next/public/locales/hu/languages.json",
"chars": 353,
"preview": "{\n \"ENGLISH\": \"Angol\",\n \"FRENCH\": \"Francia\",\n \"SPANISH\": \"Spanyol\",\n \"GERMAN\": \"Német\",\n \"JAPANESE\": \"Jap"
},
{
"path": "next/public/locales/hu/settings.json",
"chars": 2038,
"preview": "{\n\t\"ADVANCED_SETTINGS\": \"Haladó beállítások\",\n\t\"API_KEY\": \"Kulcs\",\n\t\"AUTOMATIC_MODE\": \"Automatikus mód\",\n\t\"AUTOMATIC_MOD"
},
{
"path": "next/public/locales/it/chat.json",
"chars": 1286,
"preview": "{\n\t\"COMPLETING\": \"Completando:\",\n\t\"CONSIDER_SPONSORING_ON_GITHUB\": \"Considera di sponsorizzare il progetto su GitHub.\",\n"
},
{
"path": "next/public/locales/it/chat.missing.json",
"chars": 802,
"preview": "{\n\t\"👉 Create an agent by adding a name / goal, and hitting deploy! Try our examples below!\": \"👉 Crea un agente aggiungen"
},
{
"path": "next/public/locales/it/common.json",
"chars": 1090,
"preview": "{\n\t\"ADDING_TASK\": \"Aggiunta attività\",\n\t\"AGENTGPT_DOCUMENTATION\": \"Documentazione di AgentGPT\",\n\t\"CLOSE\": \"Chiudi\",\n\t\"CO"
},
{
"path": "next/public/locales/it/drawer.json",
"chars": 444,
"preview": "{\n\t\"ACCOUNT\": \"Account\",\n\t\"HELP_BUTTON\": \"Aiuto\",\n\t\"MY_AGENTS\": \"I miei agenti\",\n\t\"NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRS"
},
{
"path": "next/public/locales/it/errors.json",
"chars": 1721,
"preview": "{\n \"ERROR_ACCESSING_OPENAI_API_KEY\": \"ERRORE durante l'accesso alla chiave API di OpenAI. Controllare la chiave API o"
},
{
"path": "next/public/locales/it/help.json",
"chars": 957,
"preview": "{\n\t\"AGENTGPT_DOCUMENTATION\": \"Documentazione di AgentGPT\",\n\t\"FOLLOW_THE_JOURNEY\": \"Seguici sui seguenti canali:\",\n\t\"INTE"
},
{
"path": "next/public/locales/it/indexPage.json",
"chars": 321,
"preview": "{\n \"BETA\": \"Beta\",\n \"HEADING_DESCRIPTION\": \"Compila, configura e installa agenti AI autonomi nel tuo browser.\",\n \"AGE"
},
{
"path": "next/public/locales/it/languages.json",
"chars": 377,
"preview": "{\n \"ENGLISH\": \"Inglese\",\n \"FRENCH\": \"Francese\",\n \"SPANISH\": \"Spagnolo\",\n \"GERMAN\": \"Tedesco\",\n \"JAPANESE\""
},
{
"path": "next/public/locales/it/settings.json",
"chars": 2068,
"preview": "{\n\t\"ADVANCED_SETTINGS\": \"Impostazioni avanzate\",\n\t\"API_KEY\": \"Chiave API\",\n\t\"AUTOMATIC_MODE\": \"Modalità automatica\",\n\t\"A"
},
{
"path": "next/public/locales/ja/chat.json",
"chars": 1073,
"preview": "{\n\t\"COMPLETING\": \"Completing:\",\n\t\"CONSIDER_SPONSORING_ON_GITHUB\": \"Please consider sponsoring the project on GitHub.\",\n\t"
},
{
"path": "next/public/locales/ja/chat.missing.json",
"chars": 750,
"preview": "{\n\t\"👉 Create an agent by adding a name / goal, and hitting deploy! Try our examples below!\": \"👉 名前/目標を追加してエージェントを作成し、デプロ"
},
{
"path": "next/public/locales/ja/common.json",
"chars": 816,
"preview": "{\n\t\"ADDING_TASK\": \"タスクの追加\",\n\t\"AGENTGPT_DOCUMENTATION\": \"AgentGPT のドキュメント\",\n\t\"CLOSE\": \"閉じる\",\n\t\"CONTINUE\": \"続く\",\n\t\"COPIED_"
},
{
"path": "next/public/locales/ja/drawer.json",
"chars": 336,
"preview": "{\n\t\"ACCOUNT\": \"アカウント\",\n\t\"HELP_BUTTON\": \"ヘルプ\",\n\t\"MY_AGENTS\": \"私のエージェント\",\n\t\"NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST\": \"ここに何"
},
{
"path": "next/public/locales/ja/errors.json",
"chars": 949,
"preview": "{\n \"ERROR_ACCESSING_OPENAI_API_KEY\": \"OpenAI APIキーにアクセスできませんでした。APIキーを確認するか、後でもう一度お試しください。\",\n \"ERROR_ADDING_ADDITIONAL"
},
{
"path": "next/public/locales/ja/help.json",
"chars": 555,
"preview": "{\n\t\"AGENTGPT_DOCUMENTATION\": \"AgentGPT のドキュメント\",\n\t\"FOLLOW_THE_JOURNEY\": \"以下のチャンネルで私たちに参加してください:\",\n\t\"INTERACTION_WITH_WEB"
},
{
"path": "next/public/locales/ja/indexPage.json",
"chars": 255,
"preview": "{\n \"BETA\": \"ベータ版\",\n \"HEADING_DESCRIPTION\": \"ブラウザーで自律型AIエージェントを構成、設定、およびインストールします。\",\n \"AGENT_NAME\": \"名前\",\n \"LABEL_AGE"
},
{
"path": "next/public/locales/ja/languages.json",
"chars": 333,
"preview": "{\n \"ENGLISH\": \"英語\",\n \"FRENCH\": \"フランス語\",\n \"SPANISH\": \"スペイン語\",\n \"GERMAN\": \"ドイツ語\",\n \"JAPANESE\": \"日本語\",\n \""
},
{
"path": "next/public/locales/ja/settings.json",
"chars": 1365,
"preview": "{\n\t\"ADVANCED_SETTINGS\": \"高度な設定\",\n\t\"API_KEY\": \"APIキー\",\n\t\"AUTOMATIC_MODE\": \"自動モード\",\n\t\"AUTOMATIC_MODE_DESCRIPTION\": \"(デフォルト"
},
{
"path": "next/public/locales/ko/chat.json",
"chars": 900,
"preview": "{\n\t\"COMPLETING\": \"완료중:\",\n\t\"CONSIDER_SPONSORING_ON_GITHUB\": \"GitHub에서 이 프로젝트를 후원해주세요.\",\n\t\"CONSOLE_TEXT_COPIED_TO_CLIPBOAR"
},
{
"path": "next/public/locales/ko/chat.missing.json",
"chars": 747,
"preview": "{\n\t\"👉 Create an agent by adding a name / goal, and hitting deploy! Try our examples below!\": \"👉 이름/목표를 추가하고 배포를 눌러 에이전트를"
},
{
"path": "next/public/locales/ko/common.json",
"chars": 821,
"preview": "{\n\t\"ADDING_TASK\": \"작업 추가\",\n\t\"AGENTGPT_DOCUMENTATION\": \"AgentGPT 문서\",\n\t\"CLOSE\": \"닫기\",\n\t\"CONTINUE\": \"계속하다\",\n\t\"COPIED_TO_CL"
},
{
"path": "next/public/locales/ko/drawer.json",
"chars": 321,
"preview": "{\n\t\"ACCOUNT\": \"계정\",\n\t\"HELP_BUTTON\": \"도움말\",\n\t\"MY_AGENTS\": \"나의 대리인\",\n\t\"NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST\": \"여기에 무언가 표"
},
{
"path": "next/public/locales/ko/errors.json",
"chars": 1024,
"preview": "{\n \"ERROR_ACCESSING_OPENAI_API_KEY\": \"오류: OpenAI API에 접속하는 중에 문제가 발생했습니다. API 키를 확인하거나 나중에 다시 시도해주세요.\",\n \"ERROR_ADDING"
},
{
"path": "next/public/locales/ko/help.json",
"chars": 589,
"preview": "{\n\t\"AGENTGPT_DOCUMENTATION\": \"AgentGPT 문서\",\n\t\"FOLLOW_THE_JOURNEY\": \"아래의 방법으로 우리를 따라가십시오:\",\n\t\"INTERACTION_WITH_WEBSITES_A"
},
{
"path": "next/public/locales/ko/indexPage.json",
"chars": 253,
"preview": "{\n \"BETA\": \"베타\",\n \"HEADING_DESCRIPTION\": \"브라우저에서 자율적 인 AI 에이전트를 구성, 구성 및 설치합니다.\",\n \"AGENT_NAME\": \"이름\",\n \"LABEL_AGENT"
},
{
"path": "next/public/locales/ko/languages.json",
"chars": 324,
"preview": "{\n \"ENGLISH\": \"영어\",\n \"FRENCH\": \"프랑스어\",\n \"SPANISH\": \"스페인어\",\n \"GERMAN\": \"독일어\",\n \"JAPANESE\": \"일본어\",\n \"KOR"
},
{
"path": "next/public/locales/ko/settings.json",
"chars": 1395,
"preview": "{\n\t\"ADVANCED_SETTINGS\": \"고급 설정\",\n\t\"API_KEY\": \"API 키\",\n\t\"AUTOMATIC_MODE\": \"자동 모드\",\n\t\"AUTOMATIC_MODE_DESCRIPTION\": \"(기본값) "
},
{
"path": "next/public/locales/lt/chat.json",
"chars": 1209,
"preview": "{\n\t\"COMPLETING\": \"Baigiama:\",\n\t\"CONSIDER_SPONSORING_ON_GITHUB\": \"Remkite projektą per GitHub.\",\n\t\"CONSOLE_TEXT_COPIED_TO"
},
{
"path": "next/public/locales/lt/chat.missing.json",
"chars": 809,
"preview": "{\n\t\"👉 Create an agent by adding a name / goal, and hitting deploy! Try our examples below!\": \"👉 Sukurkite agentą pridėda"
},
{
"path": "next/public/locales/lt/common.json",
"chars": 1124,
"preview": "{\n\t\"ADDING_TASK\": \"Pridedama užduotis\",\n\t\"AGENTGPT_DOCUMENTATION\": \"Agento GPT dokumentacija\",\n\t\"CLOSE\": \"Uždaryti\",\n\t\"C"
},
{
"path": "next/public/locales/lt/drawer.json",
"chars": 469,
"preview": "{\n\t\"ACCOUNT\": \"Paskyra\",\n\t\"HELP_BUTTON\": \"Pagalba\",\n\t\"MY_AGENTS\": \"Mano agentai\",\n\t\"NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIR"
},
{
"path": "next/public/locales/lt/errors.json",
"chars": 1584,
"preview": "{\n \"ERROR_ACCESSING_OPENAI_API_KEY\": \"KLAIDA jungiantis prie OpenAI API. Patikrinkite API raktą arba bandykite vėliau.\""
},
{
"path": "next/public/locales/lt/help.json",
"chars": 837,
"preview": "{\n\t\"AGENTGPT_DOCUMENTATION\": \"Agento GPT dokumentacija\",\n\t\"FOLLOW_THE_JOURNEY\": \"Sekite mus šiais keliais:\",\n\t\"INTERACTI"
},
{
"path": "next/public/locales/lt/indexPage.json",
"chars": 321,
"preview": "{\n \"BETA\": \"Beta\",\n \"HEADING_DESCRIPTION\": \"Compila, configura e installa agenti AI autonomi nel tuo browser.\",\n \"AGE"
},
{
"path": "next/public/locales/lt/languages.json",
"chars": 359,
"preview": "{\n \"ENGLISH\": \"Anglų\",\n \"FRENCH\": \"Prancūzų\",\n \"SPANISH\": \"Ispanų\",\n \"GERMAN\": \"Vokiečių\",\n \"JAPANESE\": \""
},
{
"path": "next/public/locales/lt/settings.json",
"chars": 1987,
"preview": "{\n\t\"ADVANCED_SETTINGS\": \"Išplėstiniai nustatymai\",\n\t\"API_KEY\": \"API raktas\",\n\t\"AUTOMATIC_MODE\": \"Automatinis režimas\",\n\t"
},
{
"path": "next/public/locales/nl/chat.json",
"chars": 1300,
"preview": "{\n\t\"COMPLETING\": \"Voltooien:\",\n\t\"CONSIDER_SPONSORING_ON_GITHUB\": \"Overweeg om het project te sponsoren via GitHub.\",\n\t\"C"
},
{
"path": "next/public/locales/nl/chat.missing.json",
"chars": 755,
"preview": "{\n\t\"👉 Create an agent by adding a name / goal, and hitting deploy! Try our examples below!\": \"👉 Maak een agent aan door "
},
{
"path": "next/public/locales/nl/common.json",
"chars": 1086,
"preview": "{\n\t\"ADDING_TASK\": \"Taak toevoegen\",\n\t\"AGENTGPT_DOCUMENTATION\": \"Documentatie van AgentGPT\",\n\t\"CLOSE\": \"Sluiten\",\n\t\"CONTI"
},
{
"path": "next/public/locales/nl/drawer.json",
"chars": 443,
"preview": "{\n\t\"ACCOUNT\": \"Account\",\n\t\"HELP_BUTTON\": \"Help\",\n\t\"MY_AGENTS\": \"Mijn agenten\",\n\t\"NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST\""
},
{
"path": "next/public/locales/nl/errors.json",
"chars": 1631,
"preview": "{\n \"ERROR_ACCESSING_OPENAI_API_KEY\": \"FOUT bij het openen van de OpenAI API-sleutel. Controleer de API-sleutel of probe"
},
{
"path": "next/public/locales/nl/help.json",
"chars": 862,
"preview": "{\n\t\"AGENTGPT_DOCUMENTATION\": \"Documentatie van AgentGPT\",\n\t\"FOLLOW_THE_JOURNEY\": \"Volg ons op onze reis:\",\n\t\"INTERACTION"
},
{
"path": "next/public/locales/nl/indexPage.json",
"chars": 325,
"preview": "{\n \"BETA\": \"Bèta\",\n \"HEADING_DESCRIPTION\": \"Compileer, configureer en installeer autonome AI-agenten in uw browser.\",\n"
},
{
"path": "next/public/locales/nl/languages.json",
"chars": 368,
"preview": "{\n \"ENGLISH\": \"Engels\",\n \"FRENCH\": \"Frans\",\n \"SPANISH\": \"Spaans\",\n \"GERMAN\": \"Duits\",\n \"JAPANESE\": \"Japan"
},
{
"path": "next/public/locales/nl/settings.json",
"chars": 2014,
"preview": "{\n\t\"ADVANCED_SETTINGS\": \"Geavanceerde instellingen\",\n\t\"API_KEY\": \"API-sleutel\",\n\t\"AUTOMATIC_MODE\": \"Automatische modus\","
},
{
"path": "next/public/locales/pl/chat.json",
"chars": 1195,
"preview": "{\n\t\"COMPLETING\": \"Wykonywanie:\",\n\t\"CONSIDER_SPONSORING_ON_GITHUB\": \"Rozważ wsparcie projektu na GitHub.\",\n\t\"CONSOLE_TEXT"
},
{
"path": "next/public/locales/pl/chat.missing.json",
"chars": 803,
"preview": "{\n\t\"👉 Create an agent by adding a name / goal, and hitting deploy! Try our examples below!\": \"👉 Utwórz agenta, dodając n"
},
{
"path": "next/public/locales/pl/common.json",
"chars": 1081,
"preview": "{\n\t\"ADDING_TASK\": \"Dodawanie zadania\",\n\t\"AGENTGPT_DOCUMENTATION\": \"Dokumentacja AgentGPT\",\n\t\"CLOSE\": \"Zamknąć\",\n\t\"CONTIN"
},
{
"path": "next/public/locales/pl/drawer.json",
"chars": 460,
"preview": "{\n\t\"ACCOUNT\": \"Konto\",\n\t\"HELP_BUTTON\": \"Pomoc\",\n\t\"MY_AGENTS\": \"Moje agenci\",\n\t\"NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST\": "
},
{
"path": "next/public/locales/pl/errors.json",
"chars": 1606,
"preview": "{\n \"ERROR_ACCESSING_OPENAI_API_KEY\": \"BŁĄD podczas łączenia się z kluczem API OpenAI. Proszę sprawdzić klucz API lub sp"
},
{
"path": "next/public/locales/pl/help.json",
"chars": 899,
"preview": "{\n\t\"AGENTGPT_DOCUMENTATION\": \"Dokumentacja AgentGPT\",\n\t\"FOLLOW_THE_JOURNEY\": \"Podążaj za nami na naszej drodze:\",\n\t\"INTE"
},
{
"path": "next/public/locales/pl/indexPage.json",
"chars": 326,
"preview": "{\n \"BETA\": \"Beta\",\n \"HEADING_DESCRIPTION\": \"Twórz, konfiguruj i instaluj autonomiczne agenty AI w Twojej przeglądarce."
},
{
"path": "next/public/locales/pl/languages.json",
"chars": 388,
"preview": "{\n \"ENGLISH\": \"Angielski\",\n \"FRENCH\": \"Francuski\",\n \"SPANISH\": \"Hiszpański\",\n \"GERMAN\": \"Niemiecki\",\n \"JA"
},
{
"path": "next/public/locales/pl/settings.json",
"chars": 1968,
"preview": "{\n\t\"ADVANCED_SETTINGS\": \"Zaawansowane ustawienia\",\n\t\"API_KEY\": \"Klucz API\",\n\t\"AUTOMATIC_MODE\": \"Tryb automatyczny\",\n\t\"AU"
},
{
"path": "next/public/locales/pt/chat.json",
"chars": 1290,
"preview": "{\n\t\"COMPLETING\": \"Completando:\",\n\t\"CONSIDER_SPONSORING_ON_GITHUB\": \"Considere apoiar o projeto no GitHub.\",\n\t\"CONSOLE_TE"
},
{
"path": "next/public/locales/pt/chat.missing.json",
"chars": 802,
"preview": "{\n\t\"👉 Create an agent by adding a name / goal, and hitting deploy! Try our examples below!\": \"👉 Crie um agente adicionan"
},
{
"path": "next/public/locales/pt/common.json",
"chars": 1105,
"preview": "{\n\t\"ADDING_TASK\": \"Adding Task\",\n\t\"AGENTGPT_DOCUMENTATION\": \"Documentação do AgentGPT\",\n\t\"CLOSE\": \"Fechar\",\n\t\"CONTINUE\":"
},
{
"path": "next/public/locales/pt/drawer.json",
"chars": 438,
"preview": "{\n\t\"ACCOUNT\": \"Conta\",\n\t\"HELP_BUTTON\": \"Ajuda\",\n\t\"MY_AGENTS\": \"Meus agentes\",\n\t\"NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST\":"
},
{
"path": "next/public/locales/pt/errors.json",
"chars": 1681,
"preview": "{\n \"ERROR_ACCESSING_OPENAI_API_KEY\": \"Erro ao acessar a chave da API OpenAI durante a conexão. Por favor, verifique a c"
},
{
"path": "next/public/locales/pt/help.json",
"chars": 827,
"preview": "{\n\t\"AGENTGPT_DOCUMENTATION\": \"Documentação do AgentGPT\",\n\t\"FOLLOW_THE_JOURNEY\": \"Siga-nos nas seguintes jornadas:\",\n\t\"IN"
},
{
"path": "next/public/locales/pt/indexPage.json",
"chars": 320,
"preview": "{\n \"BETA\": \"Beta\",\n \"HEADING_DESCRIPTION\": \"Crie, configure e instale agentes autônomos de IA em seu navegador.\",\n \"A"
},
{
"path": "next/public/locales/pt/languages.json",
"chars": 368,
"preview": "{\n \"ENGLISH\": \"Inglês\",\n \"FRENCH\": \"Francês\",\n \"SPANISH\": \"Espanhol\",\n \"GERMAN\": \"Alemão\",\n \"JAPANESE\": \""
},
{
"path": "next/public/locales/pt/settings.json",
"chars": 2075,
"preview": "{\n\t\"ADVANCED_SETTINGS\": \"Configurações avançadas\",\n\t\"API_KEY\": \"Chave de API\",\n\t\"AUTOMATIC_MODE\": \"Modo automático\",\n\t\"A"
},
{
"path": "next/public/locales/ro/chat.json",
"chars": 1247,
"preview": "{\n\t\"COMPLETING\": \"Finalizare:\",\n\t\"CONSIDER_SPONSORING_ON_GITHUB\": \"Luați în considerare sponsorizarea proiectului pe Git"
},
{
"path": "next/public/locales/ro/chat.missing.json",
"chars": 801,
"preview": "{\n\t\"👉 Create an agent by adding a name / goal, and hitting deploy! Try our examples below!\": \"👉 Creați un agent adăugând"
},
{
"path": "next/public/locales/ro/common.json",
"chars": 1106,
"preview": "{\n\t\"ADDING_TASK\": \"Adăugarea sarcinii\",\n\t\"AGENTGPT_DOCUMENTATION\": \"Documentația AgentGPT\",\n\t\"CLOSE\": \"Închidere\",\n\t\"CON"
},
{
"path": "next/public/locales/ro/drawer.json",
"chars": 436,
"preview": "{\n\t\"ACCOUNT\": \"Cont\",\n\t\"HELP_BUTTON\": \"Ajutor\",\n\t\"MY_AGENTS\": \"Agenta mea\",\n\t\"NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST\": \""
},
{
"path": "next/public/locales/ro/errors.json",
"chars": 1628,
"preview": "{\n \"ERROR_ACCESSING_OPENAI_API_KEY\": \"EROARE la conectarea cu cheia API OpenAI. Vă rugăm să verificați cheia API sau în"
},
{
"path": "next/public/locales/ro/help.json",
"chars": 861,
"preview": "{\n\t\"AGENTGPT_DOCUMENTATION\": \"Documentația AgentGPT\",\n\t\"FOLLOW_THE_JOURNEY\": \"Urmăriți călătoria noastră:\",\n\t\"INTERACTIO"
},
{
"path": "next/public/locales/ro/indexPage.json",
"chars": 329,
"preview": "{\n \"BETA\": \"Beta\",\n \"HEADING_DESCRIPTION\": \"Compilează, configurează și instalează agenți autonomi de IA în browser-ul"
},
{
"path": "next/public/locales/ro/languages.json",
"chars": 376,
"preview": "{\n \"ENGLISH\": \"Engleză\",\n \"FRENCH\": \"Franceză\",\n \"SPANISH\": \"Spaniolă\",\n \"GERMAN\": \"Germană\",\n \"JAPANESE\""
},
{
"path": "next/public/locales/ro/settings.json",
"chars": 1996,
"preview": "{\n\t\"ADVANCED_SETTINGS\": \"Setări avansate\",\n\t\"API_KEY\": \"Cheie API\",\n\t\"AUTOMATIC_MODE\": \"Mod automat\",\n\t\"AUTOMATIC_MODE_D"
},
{
"path": "next/public/locales/ru/chat.json",
"chars": 1185,
"preview": "{\n\t\"COMPLETING\": \"Завершение:\",\n\t\"CONSIDER_SPONSORING_ON_GITHUB\": \"Поддержите проект на GitHub.\",\n\t\"CONSOLE_TEXT_COPIED_"
},
{
"path": "next/public/locales/ru/chat.missing.json",
"chars": 775,
"preview": "{\n\t\"👉 Create an agent by adding a name / goal, and hitting deploy! Try our examples below!\": \"👉 Создайте агента, добавив"
}
]
// ... and 318 more files (download for full content)
About this extraction
This page contains the full source code of the reworkd/AgentGPT GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 518 files (24.9 MB), approximately 230.0k tokens, and a symbol index with 554 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.