diff --git a/.github/scripts/check_version_consistency.py b/.github/scripts/check_version_consistency.py index daf78a8d2c..828b583eb5 100755 --- a/.github/scripts/check_version_consistency.py +++ b/.github/scripts/check_version_consistency.py @@ -13,8 +13,8 @@ def find_version_references(directory: str) -> Tuple[Set[str], Set[str]]: version_pattern_runtime = re.compile(r'runtime:(\d{1})\.(\d{2})') for root, _, files in os.walk(directory): - # Skip .git directory - if '.git' in root: + # Skip .git directory and docs/build directory + if '.git' in root or 'docs/build' in root: continue for file in files: @@ -28,11 +28,15 @@ def find_version_references(directory: str) -> Tuple[Set[str], Set[str]]: # Find all openhands version references matches = version_pattern_openhands.findall(content) - openhands_versions.update(matches) + if matches: + print(f'Found openhands version {matches} in {file_path}') + openhands_versions.update(matches) # Find all runtime version references matches = version_pattern_runtime.findall(content) - runtime_versions.update(matches) + if matches: + print(f'Found runtime version {matches} in {file_path}') + runtime_versions.update(matches) except Exception as e: print(f'Error reading {file_path}: {e}', file=sys.stderr) @@ -41,8 +45,12 @@ def find_version_references(directory: str) -> Tuple[Set[str], Set[str]]: def main(): repo_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')) + print(f'Checking version consistency in {repo_root}') openhands_versions, runtime_versions = find_version_references(repo_root) + print(f'Found openhands versions: {sorted(openhands_versions)}') + print(f'Found runtime versions: {sorted(runtime_versions)}') + exit_code = 0 if len(openhands_versions) > 1: diff --git a/.openhands/setup.sh b/.openhands/setup.sh old mode 100644 new mode 100755 diff --git a/docs/docusaurus.config.ts b/docs/docusaurus.config.ts index 0901ce075e..b873378bfb 100644 --- a/docs/docusaurus.config.ts +++ b/docs/docusaurus.config.ts @@ -24,7 +24,7 @@ const config: Config = { // may want to replace "en" with "zh-Hans". i18n: { defaultLocale: 'en', - locales: ['en', 'fr', 'zh-Hans', 'pt-BR'], + locales: ['en', 'fr', 'zh-Hans', 'ja', 'pt-BR'], localeConfigs: { en: { htmlLang: 'en-GB', diff --git a/docs/i18n/fr/docusaurus-plugin-content-docs/current.json b/docs/i18n/fr/docusaurus-plugin-content-docs/current.json index eeeb46120b..8693737777 100644 --- a/docs/i18n/fr/docusaurus-plugin-content-docs/current.json +++ b/docs/i18n/fr/docusaurus-plugin-content-docs/current.json @@ -14,5 +14,197 @@ "sidebar.apiSidebar.category.Backend": { "message": "Backend", "description": "The label for category Backend in sidebar apiSidebar" + }, + "sidebar.docsSidebar.category.User Guides": { + "message": "Guides d'Utilisateur", + "description": "The label for category User Guides in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.Running OpenHands": { + "message": "Exécution d'OpenHands", + "description": "The label for category Running OpenHands in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.Prompting": { + "message": "Prompting", + "description": "The label for category Prompting in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.Architecture": { + "message": "Architecture", + "description": "The label for category Architecture in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Running OpenHands": { + "message": "Exécution d'OpenHands", + "description": "The label for document Running OpenHands in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Getting Started": { + "message": "Commencer", + "description": "The label for document Getting Started in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Key Features": { + "message": "Fonctionnalités Clés", + "description": "The label for document Key Features in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.Customization": { + "message": "Personnalisation", + "description": "The label for category Customization in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.Usage Methods": { + "message": "Méthodes d'Utilisation", + "description": "The label for category Usage Methods in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.Advanced Configuration": { + "message": "Configuration Avancée", + "description": "The label for category Advanced Configuration in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Troubleshooting": { + "message": "Dépannage", + "description": "The label for document Troubleshooting in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Feedback": { + "message": "Retour d'Information", + "description": "The label for document Feedback in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.For OpenHands Developers": { + "message": "Pour les Développeurs OpenHands", + "description": "The label for category For OpenHands Developers in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.About": { + "message": "À Propos", + "description": "The label for document About in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Best Practices": { + "message": "Meilleures Pratiques", + "description": "The label for document Best Practices in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.Microagents": { + "message": "Micro-agents", + "description": "The label for category Microagents in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Overview": { + "message": "Aperçu", + "description": "The label for document Overview in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Repository": { + "message": "Dépôt", + "description": "The label for document Repository in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Public": { + "message": "Public", + "description": "The label for document Public in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Repository Customization": { + "message": "Personnalisation du Dépôt", + "description": "The label for document Repository Customization in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.GUI Mode": { + "message": "Mode GUI", + "description": "The label for document GUI Mode in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.CLI Mode": { + "message": "Mode CLI", + "description": "The label for document CLI Mode in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Headless Mode": { + "message": "Mode Sans Interface", + "description": "The label for document Headless Mode in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Github Action": { + "message": "Action GitHub", + "description": "The label for document Github Action in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.Cloud": { + "message": "Cloud", + "description": "The label for category Cloud in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Openhands Cloud": { + "message": "OpenHands Cloud", + "description": "The label for document Openhands Cloud in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Cloud GitHub Resolver": { + "message": "Résolveur GitHub Cloud", + "description": "The label for document Cloud GitHub Resolver in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.LLM Configuration": { + "message": "Configuration LLM", + "description": "The label for category LLM Configuration in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.Providers": { + "message": "Fournisseurs", + "description": "The label for category Providers in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Azure": { + "message": "Azure", + "description": "The label for document Azure in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Google": { + "message": "Google", + "description": "The label for document Google in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Groq": { + "message": "Groq", + "description": "The label for document Groq in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.LiteLLM Proxy": { + "message": "Proxy LiteLLM", + "description": "The label for document LiteLLM Proxy in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.OpenAI": { + "message": "OpenAI", + "description": "The label for document OpenAI in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.OpenRouter": { + "message": "OpenRouter", + "description": "The label for document OpenRouter in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.Runtime Configuration": { + "message": "Configuration d'Exécution", + "description": "The label for category Runtime Configuration in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Docker Runtime": { + "message": "Environnement Docker", + "description": "The label for document Docker Runtime in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Remote Runtime": { + "message": "Environnement Distant", + "description": "The label for document Remote Runtime in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Modal Runtime": { + "message": "Environnement Modal", + "description": "The label for document Modal Runtime in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Daytona Runtime": { + "message": "Environnement Daytona", + "description": "The label for document Daytona Runtime in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Local Runtime": { + "message": "Environnement Local", + "description": "The label for document Local Runtime in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Configuration Options": { + "message": "Options de Configuration", + "description": "The label for document Configuration Options in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Custom Sandbox": { + "message": "Bac à Sable Personnalisé", + "description": "The label for document Custom Sandbox in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Development Overview": { + "message": "Aperçu du Développement", + "description": "The label for document Development Overview in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Backend": { + "message": "Backend", + "description": "The label for document Backend in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Runtime": { + "message": "Environnement d'Exécution", + "description": "The label for document Runtime in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Debugging": { + "message": "Débogage", + "description": "The label for document Debugging in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Evaluation": { + "message": "Évaluation", + "description": "The label for document Evaluation in sidebar docsSidebar" } } diff --git a/docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/installation.mdx b/docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/installation.mdx index edee490fba..03b0ab9470 100644 --- a/docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/installation.mdx +++ b/docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/installation.mdx @@ -1,6 +1,6 @@ -# Installation +# Exécution d'OpenHands ## Configuration système requise diff --git a/docs/i18n/ja/code.json b/docs/i18n/ja/code.json new file mode 100644 index 0000000000..ee8b324afd --- /dev/null +++ b/docs/i18n/ja/code.json @@ -0,0 +1,427 @@ +{ + "footer.title": { + "message": "OpenHands" + }, + "footer.docs": { + "message": "ドキュメント" + }, + "footer.community": { + "message": "コミュニティ" + }, + "footer.copyright": { + "message": "© {year} OpenHands" + }, + "faq.title": { + "message": "よくある質問", + "description": "FAQ Title" + }, + "faq.description": { + "message": "よくある質問" + }, + "faq.section.title.1": { + "message": "OpenHandsとは何ですか?", + "description": "First Section Title" + }, + "faq.section.highlight": { + "message": "OpenHands", + "description": "Highlight Text" + }, + "faq.section.description.1": { + "message": "はソフトウェアエンジニアリングとウェブナビゲーションのタスクをいつでも解決できる自律型ソフトウェアエンジニアです。「過去数ヶ月間のOpenHandsリポジトリへのプルリクエスト数を調べる」などのデータサイエンスクエリや、「このファイルにテストを追加して、すべてのテストが通るか確認してください。通らない場合は、ファイルを修正してください」などのソフトウェアエンジニアリングタスクを実行できます。", + "description": "Description for OpenHands" + }, + "faq.section.description.2": { + "message": "さらに、OpenHandsは新しいエージェントをテストおよび評価したいエージェント開発者向けのプラットフォームとコミュニティでもあります。", + "description": "Further Description for OpenHands" + }, + "faq.section.title.2": { + "message": "サポート", + "description": "Support Section Title" + }, + "faq.section.support.answer": { + "message": "他のユーザーも同様に発生する可能性のある問題が発生した場合は、{githubLink}で報告してください。インストールに関する問題や一般的な質問がある場合は、{discordLink}または{slackLink}にご参加ください。", + "description": "Support Answer" + }, + "faq.section.title.3": { + "message": "OpenHandsでGitHubの問題を解決するには?", + "description": "GitHub Issue Section Title" + }, + "faq.section.github.steps.intro": { + "message": "OpenHandsを使用してGitHubの問題を解決するには、以下のようなステップを実行するようOpenHandsにコマンドを送信します:", + "description": "GitHub Steps Introduction" + }, + "faq.section.github.step1": { + "message": "イシュー https://github.com/All-Hands-AI/OpenHands/issues/1611 を読む", + "description": "GitHub Step 1" + }, + "faq.section.github.step2": { + "message": "リポジトリをクローンして新しいブランチをチェックアウトする", + "description": "GitHub Step 2" + }, + "faq.section.github.step3": { + "message": "イシューの説明に基づいて、問題を解決するためにファイルを修正する", + "description": "GitHub Step 3" + }, + "faq.section.github.step4": { + "message": "GITHUB_TOKEN環境変数を使用して結果をGitHubにプッシュする", + "description": "GitHub Step 4" + }, + "faq.section.github.step5": { + "message": "プルリクエストを送信するために使用するリンクを教えてください", + "description": "GitHub Step 5" + }, + "faq.section.github.steps.preRun": { + "message": "OpenHandsを起動する前に、以下を実行できます:", + "description": "GitHub Steps Pre-Run" + }, + "faq.section.github.steps.tokenInfo": { + "message": "ここでXXXはあなたが作成したGitHubトークンで、OpenHandsリポジトリにプッシュする権限を持っています。OpenHandsリポジトリの変更権限がない場合は、次のように変更する必要があるかもしれません:", + "description": "GitHub Steps Token Info" + }, + "faq.section.github.steps.usernameInfo": { + "message": "ここでUSERNAMEはあなたのGitHubユーザー名です。", + "description": "GitHub Steps Username Info" + }, + "faq.section.title.4": { + "message": "OpenHandsはDevinとどう違いますか?", + "description": "Devin Section Title" + }, + "faq.section.openhands.linkText": { + "message": "Devin", + "description": "Devin Link Text" + }, + "faq.section.openhands.description": { + "message": "はCognition Inc.の商用製品で、OpenHandsの最初のインスピレーションとなりました。どちらもソフトウェアエンジニアリングの仕事をうまくこなすことを目指していますが、OpenHandsはダウンロード、使用、修正が可能である一方、DevinはCognitionのサイトを通じてのみ使用できます。さらに、OpenHandsは最初のインスピレーションを超えて進化し、現在はエージェント開発全般のためのコミュニティエコシステムとなっており、あなたの参加と", + "description": "Devin Description" + }, + "faq.section.openhands.contribute": { + "message": "貢献", + "description": "Contribute Link" + }, + "faq.section.title.5": { + "message": "OpenHandsはChatGPTとどう違いますか?", + "description": "ChatGPT Section Title" + }, + "faq.section.chatgpt.description": { + "message": "ChatGPTはオンラインでアクセスでき、ローカルファイルに接続せず、コード実行能力も限られています。コードを書くことはできますが、テストや実行が難しいです。", + "description": "ChatGPT Description" + }, + "homepage.description": { + "message": "ソフトウェアエンジニアリングのためのAIコード生成。", + "description": "The homepage description" + }, + "homepage.getStarted": { + "message": "はじめる" + }, + "welcome.message": { + "message": "OpenHandsへようこそ。複雑なエンジニアリングタスクを実行し、ソフトウェア開発プロジェクトでユーザーと積極的に協力できる自律型AIソフトウェアエンジニアシステムです。" + }, + "theme.ErrorPageContent.title": { + "message": "このページはクラッシュしました。", + "description": "The title of the fallback page when the page crashed" + }, + "theme.BackToTopButton.buttonAriaLabel": { + "message": "ページの先頭に戻る", + "description": "The ARIA label for the back to top button" + }, + "theme.blog.archive.title": { + "message": "アーカイブ", + "description": "The page & hero title of the blog archive page" + }, + "theme.blog.archive.description": { + "message": "アーカイブ", + "description": "The page & hero description of the blog archive page" + }, + "theme.blog.paginator.navAriaLabel": { + "message": "ブログ記事リストのページネーション", + "description": "The ARIA label for the blog pagination" + }, + "theme.blog.paginator.newerEntries": { + "message": "新しい記事", + "description": "The label used to navigate to the newer blog posts page (previous page)" + }, + "theme.blog.paginator.olderEntries": { + "message": "古い記事", + "description": "The label used to navigate to the older blog posts page (next page)" + }, + "theme.blog.post.paginator.navAriaLabel": { + "message": "ブログ記事のページネーション", + "description": "The ARIA label for the blog posts pagination" + }, + "theme.blog.post.paginator.newerPost": { + "message": "新しい記事", + "description": "The blog post button label to navigate to the newer/previous post" + }, + "theme.blog.post.paginator.olderPost": { + "message": "古い記事", + "description": "The blog post button label to navigate to the older/next post" + }, + "theme.blog.post.plurals": { + "message": "1記事|{count}記事", + "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.blog.tagTitle": { + "message": "「{tagName}」のタグが付いた{nPosts}", + "description": "The title of the page for a blog tag" + }, + "theme.tags.tagsPageLink": { + "message": "すべてのタグを表示", + "description": "The label of the link targeting the tag list page" + }, + "theme.colorToggle.ariaLabel": { + "message": "ダークモードとライトモードを切り替える(現在は{mode})", + "description": "The ARIA label for the navbar color mode toggle" + }, + "theme.colorToggle.ariaLabel.mode.dark": { + "message": "ダークモード", + "description": "The name for the dark color mode" + }, + "theme.colorToggle.ariaLabel.mode.light": { + "message": "ライトモード", + "description": "The name for the light color mode" + }, + "theme.docs.breadcrumbs.navAriaLabel": { + "message": "パンくずリストナビゲーション", + "description": "The ARIA label for the breadcrumbs" + }, + "theme.docs.DocCard.categoryDescription.plurals": { + "message": "1項目|{count}項目", + "description": "The default description for a category card in the generated index about how many items this category includes" + }, + "theme.docs.paginator.navAriaLabel": { + "message": "ドキュメントページ", + "description": "The ARIA label for the docs pagination" + }, + "theme.docs.paginator.previous": { + "message": "前へ", + "description": "The label used to navigate to the previous doc" + }, + "theme.docs.paginator.next": { + "message": "次へ", + "description": "The label used to navigate to the next doc" + }, + "theme.docs.tagDocListPageTitle.nDocsTagged": { + "message": "1つのドキュメントにタグ付け|{count}のドキュメントにタグ付け", + "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.docs.tagDocListPageTitle": { + "message": "\"{tagName}\"で{nDocsTagged}", + "description": "The title of the page for a docs tag" + }, + "theme.docs.versionBadge.label": { + "message": "バージョン: {versionLabel}" + }, + "theme.docs.versions.unreleasedVersionLabel": { + "message": "これは{siteTitle}の次期バージョン{versionLabel}のドキュメントです。", + "description": "The label used to tell the user that he's browsing an unreleased doc version" + }, + "theme.docs.versions.unmaintainedVersionLabel": { + "message": "これは{siteTitle} {versionLabel}のドキュメントで、現在はアクティブにメンテナンスされていません。", + "description": "The label used to tell the user that he's browsing an unmaintained doc version" + }, + "theme.docs.versions.latestVersionSuggestionLabel": { + "message": "最新のドキュメントについては、{latestVersionLink}({versionLabel})をご覧ください。", + "description": "The label used to tell the user to check the latest version" + }, + "theme.docs.versions.latestVersionLinkLabel": { + "message": "最新バージョン", + "description": "The label used for the latest version suggestion link label" + }, + "theme.common.editThisPage": { + "message": "このページを編集", + "description": "The link label to edit the current page" + }, + "theme.common.headingLinkTitle": { + "message": "{heading}への直接リンク", + "description": "Title for link to heading" + }, + "theme.lastUpdated.atDate": { + "message": " {date}に", + "description": "The words used to describe on which date a page has been last updated" + }, + "theme.lastUpdated.byUser": { + "message": " {user}によって", + "description": "The words used to describe by who the page has been last updated" + }, + "theme.lastUpdated.lastUpdatedAtBy": { + "message": "最終更新{atDate}{byUser}", + "description": "The sentence used to display when a page has been last updated, and by who" + }, + "theme.navbar.mobileVersionsDropdown.label": { + "message": "バージョン", + "description": "The label for the navbar versions dropdown on mobile view" + }, + "theme.NotFound.title": { + "message": "ページが見つかりません", + "description": "The title of the 404 page" + }, + "theme.tags.tagsListLabel": { + "message": "タグ:", + "description": "The label alongside a tag list" + }, + "theme.admonition.caution": { + "message": "注意", + "description": "The default label used for the Caution admonition (:::caution)" + }, + "theme.admonition.danger": { + "message": "危険", + "description": "The default label used for the Danger admonition (:::danger)" + }, + "theme.admonition.info": { + "message": "情報", + "description": "The default label used for the Info admonition (:::info)" + }, + "theme.admonition.note": { + "message": "メモ", + "description": "The default label used for the Note admonition (:::note)" + }, + "theme.admonition.tip": { + "message": "ヒント", + "description": "The default label used for the Tip admonition (:::tip)" + }, + "theme.admonition.warning": { + "message": "警告", + "description": "The default label used for the Warning admonition (:::warning)" + }, + "theme.AnnouncementBar.closeButtonAriaLabel": { + "message": "閉じる", + "description": "The ARIA label for close button of announcement bar" + }, + "theme.blog.sidebar.navAriaLabel": { + "message": "最近のブログ記事ナビゲーション", + "description": "The ARIA label for recent posts in the blog sidebar" + }, + "theme.CodeBlock.copied": { + "message": "コピーしました", + "description": "The copied button label on code blocks" + }, + "theme.CodeBlock.copyButtonAriaLabel": { + "message": "コードをコピー", + "description": "The ARIA label for copy code blocks button" + }, + "theme.CodeBlock.copy": { + "message": "コピー", + "description": "The copy button label on code blocks" + }, + "theme.CodeBlock.wordWrapToggle": { + "message": "折り返し表示の切り替え", + "description": "The title attribute for toggle word wrapping button of code block lines" + }, + "theme.DocSidebarItem.expandCategoryAriaLabel": { + "message": "サイドバーカテゴリ「{label}」を展開", + "description": "The ARIA label to expand the sidebar category" + }, + "theme.DocSidebarItem.collapseCategoryAriaLabel": { + "message": "サイドバーカテゴリ「{label}」を折りたたむ", + "description": "The ARIA label to collapse the sidebar category" + }, + "theme.NavBar.navAriaLabel": { + "message": "メイン", + "description": "The ARIA label for the main navigation" + }, + "theme.navbar.mobileLanguageDropdown.label": { + "message": "言語", + "description": "The label for the mobile language switcher dropdown" + }, + "theme.NotFound.p1": { + "message": "お探しのものが見つかりませんでした。", + "description": "The first paragraph of the 404 page" + }, + "theme.NotFound.p2": { + "message": "元のURLにリンクしたサイトの所有者に連絡して、リンクが切れていることを知らせてください。", + "description": "The 2nd paragraph of the 404 page" + }, + "theme.TOCCollapsible.toggleButtonLabel": { + "message": "このページの内容", + "description": "The label used by the button on the collapsible TOC component" + }, + "theme.blog.post.readMore": { + "message": "もっと読む", + "description": "The label used in blog post item excerpts to link to full blog posts" + }, + "theme.blog.post.readMoreLabel": { + "message": "{title}についてもっと読む", + "description": "The ARIA label for the link to full blog posts from excerpts" + }, + "theme.blog.post.readingTime.plurals": { + "message": "1分で読めます|{readingTime}分で読めます", + "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.docs.breadcrumbs.home": { + "message": "ホームページ", + "description": "The ARIA label for the home page in the breadcrumbs" + }, + "theme.docs.sidebar.collapseButtonTitle": { + "message": "サイドバーを折りたたむ", + "description": "The title attribute for collapse button of doc sidebar" + }, + "theme.docs.sidebar.collapseButtonAriaLabel": { + "message": "サイドバーを折りたたむ", + "description": "The title attribute for collapse button of doc sidebar" + }, + "theme.docs.sidebar.navAriaLabel": { + "message": "ドキュメントサイドバーナビゲーション", + "description": "The ARIA label for the sidebar navigation" + }, + "theme.docs.sidebar.closeSidebarButtonAriaLabel": { + "message": "ナビゲーションバーを閉じる", + "description": "The ARIA label for close button of mobile sidebar" + }, + "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { + "message": "← メインメニューに戻る", + "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)" + }, + "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { + "message": "ナビゲーションバーの開閉", + "description": "The ARIA label for hamburger menu button of mobile navigation" + }, + "theme.docs.sidebar.expandButtonTitle": { + "message": "サイドバーを展開", + "description": "The ARIA label and title attribute for expand button of doc sidebar" + }, + "theme.docs.sidebar.expandButtonAriaLabel": { + "message": "サイドバーを展開", + "description": "The ARIA label and title attribute for expand button of doc sidebar" + }, + "theme.ErrorPageContent.tryAgain": { + "message": "再試行", + "description": "The label of the button to try again rendering when the React error boundary captures an error" + }, + "theme.common.skipToMainContent": { + "message": "メインコンテンツに直接移動", + "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" + }, + "theme.tags.tagsPageTitle": { + "message": "タグ", + "description": "The title of the tag list page" + }, + "theme.unlistedContent.title": { + "message": "非公開ページ", + "description": "The unlisted content banner title" + }, + "theme.unlistedContent.message": { + "message": "このページは非公開です。検索エンジンにインデックスされず、直接リンクを持つユーザーのみがアクセスできます。", + "description": "The unlisted content banner message" + }, + "Use AI to tackle the toil in your backlog. Our agents have all the same tools as a human developer: they can modify code, run commands, browse the web, call APIs, and yes-even copy code snippets from StackOverflow.": { + "message": "AIを使用してバックログの作業を効率化しましょう。私たちのエージェントは人間の開発者と同じツールを持っています:コードの修正、コマンドの実行、ウェブの閲覧、APIの呼び出し、そしてStackOverflowからのコードスニペットのコピーさえも可能です。" + }, + "Get started with OpenHands.": { + "message": "OpenHandsを始める" + }, + "Most Popular Links": { + "message": "人気のリンク" + }, + "Customizing OpenHands to a repository": { + "message": "リポジトリ向けにOpenHandsをカスタマイズする" + }, + "Integrating OpenHands with Github": { + "message": "OpenHandsをGithubと統合する" + }, + "Recommended models to use": { + "message": "推奨モデル" + }, + "Connecting OpenHands to your filesystem": { + "message": "OpenHandsをファイルシステムに接続する" + } +} diff --git a/docs/i18n/ja/docusaurus-plugin-content-blog/options.json b/docs/i18n/ja/docusaurus-plugin-content-blog/options.json new file mode 100644 index 0000000000..5902ba6488 --- /dev/null +++ b/docs/i18n/ja/docusaurus-plugin-content-blog/options.json @@ -0,0 +1,14 @@ +{ + "title": { + "message": "ブログ", + "description": "The title for the blog used in SEO" + }, + "description": { + "message": "OpenHands ブログ", + "description": "The description for the blog used in SEO" + }, + "sidebar.title": { + "message": "最近の投稿", + "description": "The label for the left sidebar" + } +} diff --git a/docs/i18n/ja/docusaurus-plugin-content-docs/current.json b/docs/i18n/ja/docusaurus-plugin-content-docs/current.json new file mode 100644 index 0000000000..10b665d027 --- /dev/null +++ b/docs/i18n/ja/docusaurus-plugin-content-docs/current.json @@ -0,0 +1,210 @@ +{ + "version.label": { + "message": "次のバージョン", + "description": "The label for version current" + }, + "sidebar.docsSidebar.category.🤖 Backends LLM": { + "message": "🤖 LLMバックエンド", + "description": "The label for category 🤖 Backends LLM in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.🚧 Dépannage": { + "message": "🚧 トラブルシューティング", + "description": "The label for category 🚧 Dépannage in sidebar docsSidebar" + }, + "sidebar.apiSidebar.category.Backend": { + "message": "バックエンド", + "description": "The label for category Backend in sidebar apiSidebar" + }, + "sidebar.docsSidebar.category.User Guides": { + "message": "ユーザーガイド", + "description": "The label for category User Guides in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.Running OpenHands": { + "message": "OpenHandsの実行", + "description": "The label for category Running OpenHands in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.Prompting": { + "message": "プロンプト", + "description": "The label for category Prompting in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.Architecture": { + "message": "アーキテクチャ", + "description": "The label for category Architecture in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Running OpenHands": { + "message": "OpenHandsの実行", + "description": "The label for document Running OpenHands in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Getting Started": { + "message": "はじめに", + "description": "The label for document Getting Started in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Key Features": { + "message": "主な機能", + "description": "The label for document Key Features in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.Customization": { + "message": "カスタマイズ", + "description": "The label for category Customization in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.Usage Methods": { + "message": "使用方法", + "description": "The label for category Usage Methods in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.Advanced Configuration": { + "message": "高度な設定", + "description": "The label for category Advanced Configuration in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Troubleshooting": { + "message": "トラブルシューティング", + "description": "The label for document Troubleshooting in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Feedback": { + "message": "フィードバック", + "description": "The label for document Feedback in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.For OpenHands Developers": { + "message": "OpenHands開発者向け", + "description": "The label for category For OpenHands Developers in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.About": { + "message": "概要", + "description": "The label for document About in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Best Practices": { + "message": "ベストプラクティス", + "description": "The label for document Best Practices in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.Microagents": { + "message": "マイクロエージェント", + "description": "The label for category Microagents in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Overview": { + "message": "概要", + "description": "The label for document Overview in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Repository": { + "message": "リポジトリ", + "description": "The label for document Repository in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Public": { + "message": "パブリック", + "description": "The label for document Public in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Repository Customization": { + "message": "リポジトリのカスタマイズ", + "description": "The label for document Repository Customization in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.GUI Mode": { + "message": "GUIモード", + "description": "The label for document GUI Mode in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.CLI Mode": { + "message": "CLIモード", + "description": "The label for document CLI Mode in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Headless Mode": { + "message": "ヘッドレスモード", + "description": "The label for document Headless Mode in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Github Action": { + "message": "GitHub アクション", + "description": "The label for document Github Action in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.Cloud": { + "message": "クラウド", + "description": "The label for category Cloud in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Openhands Cloud": { + "message": "OpenHands クラウド", + "description": "The label for document Openhands Cloud in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Cloud GitHub Resolver": { + "message": "クラウド GitHub リゾルバー", + "description": "The label for document Cloud GitHub Resolver in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.LLM Configuration": { + "message": "LLM 設定", + "description": "The label for category LLM Configuration in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.Providers": { + "message": "プロバイダー", + "description": "The label for category Providers in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Azure": { + "message": "Azure", + "description": "The label for document Azure in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Google": { + "message": "Google", + "description": "The label for document Google in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Groq": { + "message": "Groq", + "description": "The label for document Groq in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.LiteLLM Proxy": { + "message": "LiteLLM プロキシ", + "description": "The label for document LiteLLM Proxy in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.OpenAI": { + "message": "OpenAI", + "description": "The label for document OpenAI in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.OpenRouter": { + "message": "OpenRouter", + "description": "The label for document OpenRouter in sidebar docsSidebar" + }, + "sidebar.docsSidebar.category.Runtime Configuration": { + "message": "ランタイム設定", + "description": "The label for category Runtime Configuration in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Docker Runtime": { + "message": "Docker ランタイム", + "description": "The label for document Docker Runtime in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Remote Runtime": { + "message": "リモートランタイム", + "description": "The label for document Remote Runtime in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Modal Runtime": { + "message": "Modal ランタイム", + "description": "The label for document Modal Runtime in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Daytona Runtime": { + "message": "Daytona ランタイム", + "description": "The label for document Daytona Runtime in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Local Runtime": { + "message": "ローカルランタイム", + "description": "The label for document Local Runtime in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Configuration Options": { + "message": "設定オプション", + "description": "The label for document Configuration Options in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Custom Sandbox": { + "message": "カスタムサンドボックス", + "description": "The label for document Custom Sandbox in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Development Overview": { + "message": "開発概要", + "description": "The label for document Development Overview in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Backend": { + "message": "バックエンド", + "description": "The label for document Backend in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Runtime": { + "message": "ランタイム", + "description": "The label for document Runtime in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Debugging": { + "message": "デバッグ", + "description": "The label for document Debugging in sidebar docsSidebar" + }, + "sidebar.docsSidebar.doc.Evaluation": { + "message": "評価", + "description": "The label for document Evaluation in sidebar docsSidebar" + } +} diff --git a/docs/i18n/ja/docusaurus-plugin-content-docs/current/python/python.md b/docs/i18n/ja/docusaurus-plugin-content-docs/current/python/python.md new file mode 100644 index 0000000000..2f0497efac --- /dev/null +++ b/docs/i18n/ja/docusaurus-plugin-content-docs/current/python/python.md @@ -0,0 +1,88 @@ +# Python API + +OpenHandsは、Pythonコードから直接使用できる豊富なAPIを提供しています。以下は、主要なAPIの概要です。 + +## OpenHands クライアント + +```python +from openhands import OpenHandsClient + +# クライアントの初期化 +client = OpenHandsClient( + api_key="your-api-key", # OpenAI APIキーなど + model="gpt-4", # 使用するLLMモデル + workspace="/path/to/workspace" # 作業ディレクトリ +) + +# タスクの実行 +result = client.execute_task("新しいPythonファイルを作成してください") + +# 結果の取得 +print(result.success) # タスクが成功したかどうか +print(result.output) # タスクの出力 +print(result.error) # エラーメッセージ(存在する場合) +``` + +## サンドボックス設定 + +```python +from openhands import SandboxConfig + +# サンドボックス設定のカスタマイズ +config = SandboxConfig( + allowed_commands=["git", "python"], # 許可するコマンド + timeout=300, # タイムアウト(秒) + max_memory="2g", # メモリ制限 + network_access=True # ネットワークアクセスの許可 +) + +# 設定を使用してクライアントを初期化 +client = OpenHandsClient( + api_key="your-api-key", + model="gpt-4", + workspace="/path/to/workspace", + sandbox_config=config +) +``` + +## イベントハンドリング + +```python +from openhands import OpenHandsClient + +def on_progress(event): + print(f"進捗: {event.message}") + +def on_error(event): + print(f"エラー: {event.error}") + +# イベントハンドラーを設定してクライアントを初期化 +client = OpenHandsClient( + api_key="your-api-key", + model="gpt-4", + workspace="/path/to/workspace", + on_progress=on_progress, + on_error=on_error +) +``` + +## 非同期API + +```python +import asyncio +from openhands import AsyncOpenHandsClient + +async def main(): + # 非同期クライアントの初期化 + client = AsyncOpenHandsClient( + api_key="your-api-key", + model="gpt-4", + workspace="/path/to/workspace" + ) + + # タスクの非同期実行 + result = await client.execute_task("新しいPythonファイルを作成してください") + print(result.output) + +# 非同期メインの実行 +asyncio.run(main()) diff --git a/docs/i18n/ja/docusaurus-plugin-content-docs/current/python/sidebar.json b/docs/i18n/ja/docusaurus-plugin-content-docs/current/python/sidebar.json new file mode 100644 index 0000000000..9e151822dd --- /dev/null +++ b/docs/i18n/ja/docusaurus-plugin-content-docs/current/python/sidebar.json @@ -0,0 +1,5 @@ +{ + "items": ["python/python"], + "label": "バックエンド", + "type": "categorie" +} diff --git a/docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/about.md b/docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/about.md new file mode 100644 index 0000000000..aff9df37c6 --- /dev/null +++ b/docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/about.md @@ -0,0 +1,27 @@ +# OpenHands について + +## 研究戦略 + +LLM を使用して本番レベルのアプリケーションを完全に複製することは複雑な endeavor です。私たちの戦略は以下の通りです: + +- **コア技術研究:** コード生成と処理の技術的側面を理解し改善するための基礎研究に注力します。 +- **タスク計画:** バグ検出、コードベース管理、最適化の機能を開発します。 +- **評価:** 私たちのエージェントをより良く理解し改善するための包括的な評価指標を確立します。 + +## デフォルトエージェント + +現在のデフォルトエージェントは、コードの生成とファイル処理が可能な [CodeActAgent](agents) です。 + +## 構築技術 + +OpenHands は、強力なフレームワークとライブラリを組み合わせて構築されており、開発のための堅牢な基盤を提供しています。 +プロジェクトで使用されている主要な技術は以下の通りです: + +![FastAPI](https://img.shields.io/badge/FastAPI-black?style=for-the-badge) ![uvicorn](https://img.shields.io/badge/uvicorn-black?style=for-the-badge) ![LiteLLM](https://img.shields.io/badge/LiteLLM-black?style=for-the-badge) ![Docker](https://img.shields.io/badge/Docker-black?style=for-the-badge) ![Ruff](https://img.shields.io/badge/Ruff-black?style=for-the-badge) ![MyPy](https://img.shields.io/badge/MyPy-black?style=for-the-badge) ![LlamaIndex](https://img.shields.io/badge/LlamaIndex-black?style=for-the-badge) ![React](https://img.shields.io/badge/React-black?style=for-the-badge) + +これらの技術の選択は進行中であり、プロジェクトの進化に伴って新しい技術が追加されたり、既存の技術が削除されたりする可能性があることに注意してください。 +私たちは OpenHands の機能を強化するために、最も適切で効率的なツールを採用するよう努めています。 + +## ライセンス + +MIT [ライセンス](https://github.com/All-Hands-AI/OpenHands/blob/main/LICENSE) の下で配布されています。 diff --git a/docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/agents.md b/docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/agents.md new file mode 100644 index 0000000000..7096246ffa --- /dev/null +++ b/docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/agents.md @@ -0,0 +1,23 @@ +# 🧠 メインエージェントと機能 + +## CodeActAgent + +### 説明 + +このエージェントは、CodeActのアイデア ([論文](https://arxiv.org/abs/2402.01030), [ツイート](https://twitter.com/xingyaow_/status/1754556835703751087)) を実装しており、LLMエージェントの**行動**を、_シンプルさ_と_パフォーマンス_の両方のために、統一された**コード**行動空間に統合します。 + +概念的なアイデアは以下の図に示されています。各ターンで、エージェントは以下のことができます。 + +1. **会話**: 明確化、確認などのために、自然言語で人間とコミュニケーションをとる。 +2. **CodeAct**: コードを実行してタスクを実行することを選択する + +- 任意の有効なLinux `bash`コマンドを実行する +- [対話型Pythonインタープリター](https://ipython.org/)で任意の有効な`Python`コードを実行する。これは`bash`コマンドを通してシミュレートされます。詳細はプラグインシステムを参照してください。 + +![image](https://github.com/All-Hands-AI/OpenHands/assets/38853559/92b622e3-72ad-4a61-8f41-8c040b6d5fb3) + +### デモ + +https://github.com/All-Hands-AI/OpenHands/assets/38853559/f592a192-e86c-4f48-ad31-d69282d5f6ac + +_データサイエンスタスク(線形回帰)を実行する`gpt-4-turbo-2024-04-09`を使用したCodeActAgentの例_。 diff --git a/docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/architecture.mdx b/docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/architecture.mdx new file mode 100644 index 0000000000..0a9726de68 --- /dev/null +++ b/docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/architecture.mdx @@ -0,0 +1,50 @@ +--- +sidebar_position: 4 +--- + +# 🏛️ システムアーキテクチャの概要 + +以下は、システムアーキテクチャの高レベルな概要です。システムは主に2つのコンポーネントに分かれています: フロントエンドとバックエンドです。フロントエンドはユーザーとのインタラクションの管理と結果の表示を担当します。バックエンドはビジネスロジックの管理とエージェントの実行を担当します。 + +![system_architecture.svg](/img/system_architecture.svg) + +この概要は、主要なコンポーネントとそれらの相互作用を示すために簡略化されています。バックエンドアーキテクチャのより詳細なビューについては、[バックエンドアーキテクチャ](#backend-architecture-ja)のセクションを参照してください。 + +# バックエンドアーキテクチャ {#backend-architecture-ja} + +_**注意**: バックエンドアーキテクチャは開発中であり、変更される可能性があります。以下の図は、図のフッターに示されているコミットに基づく現在のバックエンドアーキテクチャを示しています。_ + +![backend_architecture.svg](/img/backend_architecture.svg) + +
+ この図の更新 +
+ バックエンドアーキテクチャ図の生成は部分的に自動化されています。 + 図はpy2pumlツールを使用してコード内の型アノテーションから生成されます。 + その後、図は手動でレビューされ、調整され、PNGとSVGにエクスポートされます。 + + ## 前提条件 + + - openhandsが実行可能なPython環境 + (リポジトリのルートにあるREADME.mdファイルの指示に従って) + - [py2puml](https://github.com/lucsorel/py2puml)がインストールされていること + +## 手順 + +1. リポジトリのルートから以下のコマンドを実行して、図を自動的に生成します: + `py2puml openhands openhands > docs/architecture/backend_architecture.puml` + +2. 生成されたファイルをPlantUMLエディタ(Visual Studio CodeのPlantUML拡張機能や[PlantText](https://www.planttext.com/)など)で開きます。 + +3. 生成されたPUMLを確認し、図に必要な変更を加えます(欠落している部分を追加し、エラーを修正し、レイアウトを改善します)。 + _py2pumlはコード内の型アノテーションから図を作成するため、型アノテーションが欠落していたり正しくない場合、図が不完全または不正確になる可能性があります。_ + +4. 新しい図と以前の図の違いを確認し、変更が正しいかどうかを手動で確認します。 + _過去に図に手動で追加され、現在も関連性のある部分を削除しないように注意してください。_ + +5. 図の生成に使用されたコミットのハッシュを図のフッターに追加します。 + +6. 図をPNGファイルとSVGファイルにエクスポートし、`docs/architecture`ディレクトリ内の既存の図を置き換えます。これは(例えば[PlantText](https://www.planttext.com/)を使用して)行うことができます。 + +
+
diff --git a/docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/architecture/backend.mdx b/docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/architecture/backend.mdx new file mode 100644 index 0000000000..40462d111b --- /dev/null +++ b/docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/architecture/backend.mdx @@ -0,0 +1,53 @@ +# 🏛️ システムアーキテクチャ + +
+ OpenHands System Architecture Diagram Jul 4 2024 +

OpenHands システムアーキテクチャ図 (2024年7月4日)

+
+ +これはシステムアーキテクチャの高レベルな概要です。システムはフロントエンドとバックエンドの2つの主要コンポーネントに分かれています。フロントエンドはユーザーインタラクションを処理し、結果を表示する役割を担います。バックエンドはビジネスロジックを処理し、エージェントを実行する役割を担います。 + +# フロントエンドアーキテクチャ {#frontend-architecture-ja} + +![system_architecture.svg](/img/system_architecture.svg) + +この概要は、主要なコンポーネントとそれらの相互作用を示すために簡略化されています。バックエンドアーキテクチャのより詳細なビューについては、以下のバックエンドアーキテクチャのセクションを参照してください。 + +# バックエンドアーキテクチャ {#backend-architecture-ja} + +_**免責事項**: バックエンドアーキテクチャは現在進行中の作業であり、変更される可能性があります。以下の図は、図のフッターに示されているコミットに基づくバックエンドの現在のアーキテクチャを示しています。_ + +![backend_architecture.svg](/img/backend_architecture.svg) + +
+ この図の更新 +
+ バックエンドアーキテクチャ図の生成は部分的に自動化されています。 + この図は、py2pumlツールを使用してコード内の型ヒントから生成されます。 + その後、図は手動でレビュー、調整され、PNGとSVGにエクスポートされます。 + + ## 前提条件 + + - openhandsが実行可能なPython環境 + (リポジトリのルートにあるREADME.mdファイルの指示に従って) + - [py2puml](https://github.com/lucsorel/py2puml)がインストールされていること + +## 手順 + +1. リポジトリのルートから以下のコマンドを実行して、図を自動生成します: + `py2puml openhands openhands > docs/architecture/backend_architecture.puml` + +2. 生成されたファイルをPlantUMLエディタで開きます。例えば、PlantUML拡張機能を使用したVisual Studio Codeや[PlantText](https://www.planttext.com/)など。 + +3. 生成されたPUMLをレビューし、図に必要な調整を行います(欠落部分の追加、ミスの修正、位置の改善など)。 + _py2pumlは、コード内の型ヒントに基づいて図を作成するため、型ヒントが欠落していたり正しくない場合、図が不完全または不正確になることがあります。_ + +4. 新旧の図の差分をレビューし、変更が正しいかどうかを手動で確認します。 + _過去に図に手動で追加され、現在も関連性のある部分を削除しないように注意してください。_ + +5. 図のフッターに、図の生成に使用されたコミットのコミットハッシュを追加します。 + +6. 図をPNGとSVGファイルとしてエクスポートし、`docs/architecture`ディレクトリ内の既存の図を置き換えます。これは(例えば[PlantText](https://www.planttext.com/))で行うことができます。 + +
+
diff --git a/docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/architecture/runtime.md b/docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/architecture/runtime.md new file mode 100644 index 0000000000..b095636b9d --- /dev/null +++ b/docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/architecture/runtime.md @@ -0,0 +1,129 @@ +以下に翻訳結果を示します。 + +# 📦 Dockerランタイム + +OpenHands Dockerランタイムは、AIエージェントのアクションを安全かつ柔軟に実行できるようにするコアコンポーネントです。 +Dockerを使用してサンドボックス化された環境を作成し、ホストシステムを危険にさらすことなく任意のコードを安全に実行できます。 + +## サンドボックス化されたランタイムが必要な理由 + +OpenHandsでは、いくつかの理由から、信頼できないコードを安全で隔離された環境で実行する必要があります。 + +1. セキュリティ: 信頼できないコードを実行すると、ホストシステムに重大なリスクを及ぼす可能性があります。サンドボックス化された環境では、悪意のあるコードがホストシステムのリソースにアクセスしたり、変更したりすることを防ぐことができます。 +2. 一貫性: サンドボックス化された環境では、異なるマシンやセットアップ間でコードの実行が一貫していることが保証され、「自分のマシンでは動作する」という問題が解消されます。 +3. リソース制御: サンドボックス化により、リソースの割り当てと使用をより適切に制御でき、暴走プロセスがホストシステムに影響を与えることを防ぐことができます。 +4. 分離: 異なるプロジェクトやユーザーは、ホストシステムや他のプロジェクトに干渉することなく、分離された環境で作業できます。 +5. 再現性: サンドボックス化された環境では、実行環境が一貫しており制御可能であるため、バグや問題を再現しやすくなります。 + +## ランタイムの仕組み + +OpenHandsランタイムシステムは、Dockerコンテナを使用してクライアント-サーバーアーキテクチャを実装しています。以下は、その仕組みの概要です。 + +```mermaid +graph TD + A[ユーザー提供のカスタムDockerイメージ] --> B[OpenHandsバックエンド] + B -->|ビルド| C[OHランタイムイメージ] + C -->|起動| D[アクション実行サーバー] + D -->|初期化| E[ブラウザ] + D -->|初期化| F[Bashシェル] + D -->|初期化| G[プラグイン] + G -->|初期化| L[Jupyterサーバー] + + B -->|生成| H[エージェント] + B -->|生成| I[EventStream] + I <--->|REST APIを介して + アクションを実行し + 観測結果を取得 + | D + + H -->|アクション生成| I + I -->|観測結果取得| H + + subgraph "Dockerコンテナ" + D + E + F + G + L + end +``` + +1. ユーザー入力: ユーザーがカスタムベースDockerイメージを提供します。 +2. イメージのビルド: OpenHandsは、ユーザー提供のイメージをベースに新しいDockerイメージ(「OHランタイムイメージ」)をビルドします。この新しいイメージには、主に「ランタイムクライアント」であるOpenHands固有のコードが含まれます。 +3. コンテナの起動: OpenHandsが起動すると、OHランタイムイメージを使用してDockerコンテナが起動します。 +4. アクション実行サーバーの初期化: アクション実行サーバーは、コンテナ内で`ActionExecutor`を初期化し、Bashシェルなどの必要なコンポーネントをセットアップし、指定されたプラグインをロードします。 +5. 通信: OpenHandsバックエンド(`openhands/runtime/impl/eventstream/eventstream_runtime.py`)は、RESTful APIを介してアクション実行サーバーと通信し、アクションを送信し、観測結果を受信します。 +6. アクションの実行: ランタイムクライアントはバックエンドからアクションを受信し、サンドボックス化された環境内でそれらを実行し、観測結果を送り返します。 +7. 観測結果の返却: アクション実行サーバーは、実行結果を観測結果としてOpenHandsバックエンドに送り返します。 + +クライアントの役割: + +- OpenHandsバックエンドとサンドボックス化された環境の間の仲介役を果たします。 +- コンテナ内で様々なタイプのアクション(シェルコマンド、ファイル操作、Pythonコードなど)を安全に実行します。 +- 現在の作業ディレクトリやロードされたプラグインなど、サンドボックス化された環境の状態を管理します。 +- 観測結果をフォーマットしてバックエンドに返し、結果を処理するための一貫したインターフェースを確保します。 + +## OpenHandsがOHランタイムイメージをビルドおよび管理する方法 + +OpenHandsのランタイムイメージのビルドと管理に対するアプローチは、本番環境と開発環境の両方でDockerイメージを効率的、一貫性のある、柔軟な方法で作成および維持することを保証します。 + +詳細に興味がある場合は、[関連コード](https://github.com/All-Hands-AI/OpenHands/blob/main/openhands/runtime/utils/runtime_build.py)をチェックしてください。 + +### イメージタグ付けシステム + +OpenHandsは、再現性と柔軟性のバランスを取るために、ランタイムイメージに3つのタグシステムを使用しています。 +タグは以下の2つの形式のいずれかになります。 + +- **バージョン付きタグ**: `oh_v{openhands_version}_{base_image}` (例: `oh_v0.9.9_nikolaik_s_python-nodejs_t_python3.12-nodejs22`) +- **ロックタグ**: `oh_v{openhands_version}_{16_digit_lock_hash}` (例: `oh_v0.9.9_1234567890abcdef`) +- **ソースタグ**: `oh_v{openhands_version}_{16_digit_lock_hash}_{16_digit_source_hash}` + (例: `oh_v0.9.9_1234567890abcdef_1234567890abcdef`) + +#### ソースタグ - 最も具体的 + +これは、ソースディレクトリのディレクトリハッシュのMD5の最初の16桁です。これにより、openhandsソースのみのハッシュが得られます。 + +#### ロックタグ + +このハッシュは、以下のMD5の最初の16桁から構築されます。 + +- イメージがビルドされたベースイメージの名前(例: `nikolaik/python-nodejs:python3.12-nodejs22`) +- イメージに含まれる`pyproject.toml`の内容 +- イメージに含まれる`poetry.lock`の内容 + +これにより、ソースコードとは無関係に、Openhandsの依存関係のハッシュが効果的に得られます。 + +#### バージョン付きタグ - 最も一般的 + +このタグは、openhandsのバージョンとベースイメージ名(タグ標準に適合するように変換されたもの)を連結したものです。 + +#### ビルドプロセス + +イメージを生成する際... + +- **再ビルドなし**: OpenHandsは最初に、同じ**最も具体的なソースタグ**を持つイメージが存在するかどうかをチェックします。そのようなイメージが存在する場合、ビルドは実行されず、既存のイメージが使用されます。 +- **最速の再ビルド**: 次に、OpenHandsは**一般的なロックタグ**を持つイメージが存在するかどうかをチェックします。そのようなイメージが存在する場合、OpenHandsはそれに基づいて新しいイメージをビルドし、現在のソースコードをコピーする最終操作を除くすべてのインストール手順(`poetry install`や`apt-get`など)をバイパスします。新しいイメージには**ソース**タグのみが付けられます。 +- **まあまあの再ビルド**: **ソース**タグも**ロック**タグも存在しない場合、**バージョン付き**タグイメージに基づいてイメージがビルドされます。バージョン付きタグイメージでは、ほとんどの依存関係がすでにインストールされているため、時間を節約できます。 +- **最も遅い再ビルド**: 3つのタグのすべてが存在しない場合、ベースイメージに基づいて新しいイメージがビルドされます(これは遅い操作です)。この新しいイメージには、**ソース**、**ロック**、**バージョン付き**の各タグが付けられます。 + +このタグ付けアプローチにより、OpenHandsは開発環境と本番環境の両方を効率的に管理できます。 + +1. 同一のソースコードとDockerfileは、常に同じイメージを生成します(ハッシュベースのタグを介して)。 +2. 小さな変更が発生した場合、システムはイメージを迅速に再ビルドできます(最近の互換性のあるイメージを活用することで)。 +3. **ロック**タグ(例: `runtime:oh_v0.9.3_1234567890abcdef`)は、特定のベースイメージ、依存関係、およびOpenHandsバージョンの組み合わせに対する最新のビルドを常に指します。 + +## ランタイムプラグインシステム + +OpenHandsランタイムは、機能を拡張し、ランタイム環境をカスタマイズできるプラグインシステムをサポートしています。プラグインは、ランタイムクライアントの起動時に初期化されます。 + +独自のプラグインを実装したい場合は、[Jupyterプラグインの例](https://github.com/All-Hands-AI/OpenHands/blob/ecf4aed28b0cf7c18d4d8ff554883ba182fc6bdd/openhands/runtime/plugins/jupyter/__init__.py#L21-L55)をチェックしてください。 + +*プラグインシステムの詳細はまだ作成中です - 貢献を歓迎します!* + +プラグインシステムの主な側面: + +1. プラグインの定義: プラグインは、基本の`Plugin`クラスを継承するPythonクラスとして定義されます。 +2. プラグインの登録: 利用可能なプラグインは、`ALL_PLUGINS`辞書に登録されます。 +3. プラグインの指定: プラグインは、`Agent.sandbox_plugins: list[PluginRequirement]`に関連付けられます。ユーザーは、ランタイムを初期化するときにロードするプラグインを指定できます。 +4. 初期化: プラグインは、ランタイムクライアントの起動時に非同期で初期化されます。 +5. 使用: ランタイムクライアントは、初期化されたプラグインを使用して機能を拡張できます(例: IPythonセルを実行するためのJupyterPlugin)。 diff --git a/docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/configuration-options.md b/docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/configuration-options.md new file mode 100644 index 0000000000..a16a6afa8a --- /dev/null +++ b/docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/configuration-options.md @@ -0,0 +1,381 @@ +# 設定オプション + +このガイドでは、OpenHandsで利用可能なすべての設定オプションを詳しく説明し、その動作をカスタマイズし、他のサービスと統合するのに役立ちます。 + +:::note +[GUIモード](https://docs.all-hands.dev/modules/usage/how-to/gui-mode)で実行している場合、設定UIで利用可能な設定が常に優先されます。 +::: + +--- + +# 目次 + +1. [基本設定](#core-configuration) + - [APIキー](#api-keys) + - [ワークスペース](#workspace) + - [デバッグとロギング](#debugging-and-logging) + - [トラジェクトリ](#trajectories) + - [ファイルストア](#file-store) + - [タスク管理](#task-management) + - [サンドボックス設定](#sandbox-configuration) + - [その他](#miscellaneous) +2. [LLM設定](#llm-configuration) + - [AWS認証情報](#aws-credentials) + - [API設定](#api-configuration) + - [カスタムLLMプロバイダー](#custom-llm-provider) + - [埋め込み](#embeddings) + - [メッセージ処理](#message-handling) + - [モデル選択](#model-selection) + - [リトライ](#retrying) + - [詳細オプション](#advanced-options) +3. [エージェント設定](#agent-configuration) + - [メモリ設定](#memory-configuration) + - [LLM設定](#llm-configuration-1) + - [アクションスペース設定](#actionspace-configuration) + - [マイクロエージェントの使用](#microagent-usage) +4. [サンドボックス設定](#sandbox-configuration-1) + - [実行](#execution) + - [コンテナイメージ](#container-image) + - [ネットワーキング](#networking) + - [リンティングとプラグイン](#linting-and-plugins) + - [依存関係と環境](#dependencies-and-environment) + - [評価](#evaluation) +5. [セキュリティ設定](#security-configuration) + - [確認モード](#confirmation-mode) + - [セキュリティアナライザー](#security-analyzer) + +--- + +## 基本設定 + +基本設定オプションは`config.toml`ファイルの`[core]`セクションで定義されます。 + +**APIキー** +- `e2b_api_key` + - 型: `str` + - デフォルト値: `""` + - 説明: E2BのAPIキー + +- `modal_api_token_id` + - 型: `str` + - デフォルト値: `""` + - 説明: ModalのAPIトークンID + +- `modal_api_token_secret` + - 型: `str` + - デフォルト値: `""` + - 説明: ModalのAPIトークンシークレット + +**ワークスペース** +- `workspace_base` + - 型: `str` + - デフォルト値: `"./workspace"` + - 説明: ワークスペースのベースパス + +- `cache_dir` + - 型: `str` + - デフォルト値: `"/tmp/cache"` + - 説明: キャッシュディレクトリのパス + +**デバッグとロギング** +- `debug` + - 型: `bool` + - デフォルト値: `false` + - 説明: デバッグを有効にする + +- `disable_color` + - 型: `bool` + - デフォルト値: `false` + - 説明: ターミナル出力のカラー表示を無効にする + +**トラジェクトリ** +- `save_trajectory_path` + - 型: `str` + - デフォルト値: `"./trajectories"` + - 説明: トラジェクトリを保存するパス(フォルダまたはファイル)。フォルダの場合、トラジェクトリはセッションIDと.json拡張子を持つファイルとしてそのフォルダに保存されます。 + +**ファイルストア** +- `file_store_path` + - 型: `str` + - デフォルト値: `"/tmp/file_store"` + - 説明: ファイルストアのパス + +- `file_store` + - 型: `str` + - デフォルト値: `"memory"` + - 説明: ファイルストアのタイプ + +- `file_uploads_allowed_extensions` + - 型: `list of str` + - デフォルト値: `[".*"]` + - 説明: アップロードを許可するファイル拡張子のリスト + +- `file_uploads_max_file_size_mb` + - 型: `int` + - デフォルト値: `0` + - 説明: アップロードの最大ファイルサイズ(メガバイト) + +- `file_uploads_restrict_file_types` + - 型: `bool` + - デフォルト値: `false` + - 説明: ファイルアップロードのファイルタイプを制限する + +**タスク管理** +- `max_budget_per_task` + - 型: `float` + - デフォルト値: `0.0` + - 説明: タスクごとの最大予算(0.0は制限なし) + +- `max_iterations` + - 型: `int` + - デフォルト値: `100` + - 説明: 最大イテレーション数 + +**サンドボックス設定** +- `workspace_mount_path_in_sandbox` + - 型: `str` + - デフォルト値: `"/workspace"` + - 説明: サンドボックス内のワークスペースマウントパス + +- `workspace_mount_path` + - 型: `str` + - デフォルト値: `""` + - 説明: ワークスペースマウントパス + +- `workspace_mount_rewrite` + - 型: `str` + - デフォルト値: `""` + - 説明: ワークスペースマウントパスを書き換えるパス。通常は無視できます。別のコンテナ内での実行の特殊なケースを参照します。 + +**その他** +- `run_as_openhands` + - 型: `bool` + - デフォルト値: `true` + - 説明: OpenHandsとして実行する + +- `runtime` + - 型: `str` + - デフォルト値: `"docker"` + - 説明: 実行環境 + +- `default_agent` + - 型: `str` + - デフォルト値: `"CodeActAgent"` + - 説明: デフォルトのエージェント名 + +- `jwt_secret` + - 型: `str` + - デフォルト値: `uuid.uuid4().hex` + - 説明: 認証用のJWTシークレット。独自の値に設定してください。 + +## LLM設定 + +LLM(大規模言語モデル)設定オプションは`config.toml`ファイルの`[llm]`セクションで定義されます。 + +dockerコマンドで使用する場合は、`-e LLM_