From 25f20f7f8d064137403855a76a9de56b456af7e8 Mon Sep 17 00:00:00 2001 From: d-kimsuon Date: Fri, 31 Oct 2025 02:17:53 +0900 Subject: [PATCH] chore: improve setup project feature --- .../projects/components/DirectoryPicker.tsx | 45 +++++++++--- ...ojectDialog.tsx => SetupProjectDialog.tsx} | 49 ++++--------- src/app/projects/page.tsx | 4 +- src/lib/api/queries.ts | 14 +++- src/lib/i18n/locales/en/messages.json | 73 ++++++++++--------- src/lib/i18n/locales/en/messages.ts | 2 +- src/lib/i18n/locales/ja/messages.json | 73 ++++++++++--------- src/lib/i18n/locales/ja/messages.ts | 2 +- .../functions/getDirectoryListing.ts | 3 +- .../presentation/FileSystemController.ts | 9 ++- .../project/presentation/ProjectController.ts | 9 ++- src/server/hono/route.ts | 4 + 12 files changed, 164 insertions(+), 123 deletions(-) rename src/app/projects/components/{CreateProjectDialog.tsx => SetupProjectDialog.tsx} (61%) diff --git a/src/app/projects/components/DirectoryPicker.tsx b/src/app/projects/components/DirectoryPicker.tsx index 78f4d90..4ed6a7c 100644 --- a/src/app/projects/components/DirectoryPicker.tsx +++ b/src/app/projects/components/DirectoryPicker.tsx @@ -1,19 +1,28 @@ import { Trans } from "@lingui/react"; import { useQuery } from "@tanstack/react-query"; import { ChevronRight, Folder } from "lucide-react"; -import { type FC, useState } from "react"; -import { Button } from "@/components/ui/button"; +import { type FC, useEffect, useState } from "react"; +import { Checkbox } from "@/components/ui/checkbox"; +import { Label } from "@/components/ui/label"; import { directoryListingQuery } from "@/lib/api/queries"; export type DirectoryPickerProps = { - selectedPath: string; onPathChange: (path: string) => void; }; export const DirectoryPicker: FC = ({ onPathChange }) => { const [currentPath, setCurrentPath] = useState(undefined); + const [showHidden, setShowHidden] = useState(false); - const { data, isLoading } = useQuery(directoryListingQuery(currentPath)); + const { data, isLoading } = useQuery( + directoryListingQuery(currentPath, showHidden), + ); + + useEffect(() => { + if (data?.currentPath) { + onPathChange(data.currentPath); + } + }, [data?.currentPath, onPathChange]); const handleNavigate = (entryPath: string) => { if (entryPath === "") { @@ -25,20 +34,26 @@ export const DirectoryPicker: FC = ({ onPathChange }) => { setCurrentPath(newPath); }; - const handleSelect = () => { - onPathChange(data?.currentPath || ""); - }; - return (
-
+

{" "} {data?.currentPath || "~"}

- +
+
+ setShowHidden(checked === true)} + /> +
{isLoading ? ( @@ -49,6 +64,12 @@ export const DirectoryPicker: FC = ({ onPathChange }) => {
{data.entries .filter((entry) => entry.type === "directory") + .filter( + (entry) => + showHidden || + entry.name === ".." || + !entry.name.startsWith("."), + ) .map((entry) => ( diff --git a/src/app/projects/page.tsx b/src/app/projects/page.tsx index 3ef19f4..cde8818 100644 --- a/src/app/projects/page.tsx +++ b/src/app/projects/page.tsx @@ -2,8 +2,8 @@ import { Trans } from "@lingui/react"; import { HistoryIcon } from "lucide-react"; import { type FC, Suspense } from "react"; import { GlobalSidebar } from "@/components/GlobalSidebar"; -import { CreateProjectDialog } from "./components/CreateProjectDialog"; import { ProjectList } from "./components/ProjectList"; +import { SetupProjectDialog } from "./components/SetupProjectDialog"; export const ProjectsPage: FC = () => { return ( @@ -30,7 +30,7 @@ export const ProjectsPage: FC = () => {

- +
+export const directoryListingQuery = ( + currentPath?: string, + showHidden?: boolean, +) => ({ - queryKey: ["directory-listing", currentPath], + queryKey: ["directory-listing", currentPath, showHidden], queryFn: async (): Promise => { const response = await honoClient.api.fs["directory-browser"].$get({ - query: currentPath ? { currentPath } : {}, + query: { + ...(currentPath ? { currentPath } : {}), + ...(showHidden !== undefined + ? { showHidden: showHidden.toString() } + : {}), + }, }); if (!response.ok) { diff --git a/src/lib/i18n/locales/en/messages.json b/src/lib/i18n/locales/en/messages.json index 1aaf0a1..d57429a 100644 --- a/src/lib/i18n/locales/en/messages.json +++ b/src/lib/i18n/locales/en/messages.json @@ -517,27 +517,6 @@ ], "translation": "Conversation is paused..." }, - "project.create.title": { - "message": "Create New Project", - "placeholders": {}, - "comments": [], - "origin": [["src/app/projects/components/CreateProjectDialog.tsx", 64]], - "translation": "Create New Project" - }, - "project.create.action.create": { - "message": "Create Project", - "placeholders": {}, - "comments": [], - "origin": [["src/app/projects/components/CreateProjectDialog.tsx", 112]], - "translation": "Create Project" - }, - "project.create.action.creating": { - "message": "Creating...", - "placeholders": {}, - "comments": [], - "origin": [["src/app/projects/components/CreateProjectDialog.tsx", 106]], - "translation": "Creating..." - }, "cron_builder.cron_expression": { "translation": "Cron Expression", "message": "Cron Expression", @@ -973,7 +952,7 @@ "placeholders": {}, "comments": [], "origin": [["src/app/projects/components/ProjectList.tsx", 36]], - "translation": "No Claude Code projects found in your ~/.claude/projects directory. Start a conversation with Claude Code to create your first project." + "translation": "No Claude Code projects found in your ~/.claude/projects directory. Start a conversation with Claude Code to set up your first project." }, "directory_picker.no_directories": { "message": "No directories found", @@ -1207,13 +1186,6 @@ ], "translation": "Schema Validation Error" }, - "project.create.description": { - "message": "Select a directory to initialize as a Claude Code project. This will run <0>/init in the selected directory.", - "placeholders": {}, - "comments": [], - "origin": [["src/app/projects/components/CreateProjectDialog.tsx", 67]], - "translation": "Select a directory to initialize as a Claude Code project. This will run <0>/init in the selected directory." - }, "notification.description": { "message": "Select a sound to play when a task completes", "placeholders": {}, @@ -1252,12 +1224,12 @@ "origin": [["src/app/projects/components/DirectoryPicker.tsx", 42]], "translation": "Select This Directory" }, - "project.create.selected_directory": { - "message": "Selected directory:", + "directory_picker.show_hidden": { + "message": "Show hidden files", "placeholders": {}, "comments": [], - "origin": [["src/app/projects/components/CreateProjectDialog.tsx", 84]], - "translation": "Selected directory:" + "origin": [["src/app/projects/components/DirectoryPicker.tsx", 56]], + "translation": "Show hidden files" }, "chat.send": { "message": "Send", @@ -2217,5 +2189,40 @@ ] ], "translation": "Create" + }, + "project.setup.title": { + "message": "Setup New Project", + "placeholders": {}, + "comments": [], + "origin": [["src/app/projects/components/CreateProjectDialog.tsx", 68]], + "translation": "Setup New Project" + }, + "project.setup.action.setup": { + "message": "Setup Project", + "placeholders": {}, + "comments": [], + "origin": [["src/app/projects/components/CreateProjectDialog.tsx", 117]], + "translation": "Setup Project" + }, + "project.setup.action.setting_up": { + "message": "Setting up...", + "placeholders": {}, + "comments": [], + "origin": [["src/app/projects/components/CreateProjectDialog.tsx", 111]], + "translation": "Setting up..." + }, + "project.setup.description": { + "message": "Navigate to a directory to set up as a Claude Code project. If CLAUDE.md exists, the project will be described. Otherwise, <0>/init will be run to initialize it.", + "placeholders": {}, + "comments": [], + "origin": [["src/app/projects/components/SetupProjectDialog.tsx", 72]], + "translation": "Navigate to a directory to set up as a Claude Code project. If CLAUDE.md exists, the project will be described. Otherwise, <0>/init will be run to initialize it." + }, + "project.setup.selected_directory": { + "message": "Selected directory:", + "placeholders": {}, + "comments": [], + "origin": [["src/app/projects/components/CreateProjectDialog.tsx", 89]], + "translation": "Selected directory:" } } diff --git a/src/lib/i18n/locales/en/messages.ts b/src/lib/i18n/locales/en/messages.ts index a32bc63..2437471 100644 --- a/src/lib/i18n/locales/en/messages.ts +++ b/src/lib/i18n/locales/en/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"Available commands\":[\"Available commands\"],\"Available files and directories\":[\"Available files and directories\"],\"Close sidebar\":[\"Close sidebar\"],\"Compare from\":[\"Compare from\"],\"Compare to\":[\"Compare to\"],\"Failed to commit\":[\"Failed to commit\"],\"Failed to commit and push\":[\"Failed to commit and push\"],\"Failed to push\":[\"Failed to push\"],\"Message input with completion support\":[\"Message input with completion support\"],\"Reload MCP servers\":[\"Reload MCP servers\"],\"Retry Push\":[\"Retry Push\"],\"Select enter key behavior\":[\"Select enter key behavior\"],\"Select language\":[\"Select language\"],\"Select permission mode\":[\"Select permission mode\"],\"Select theme\":[\"Select theme\"],\"Type your message here... (Start with / for commands, @ for files, Command+Enter to send)\":[\"Type your message here... (Start with / for commands, @ for files, Command+Enter to send)\"],\"Type your message here... (Start with / for commands, @ for files, Enter to send)\":[\"Type your message here... (Start with / for commands, @ for files, Enter to send)\"],\"Type your message here... (Start with / for commands, @ for files, Shift+Enter to send)\":[\"Type your message here... (Start with / for commands, @ for files, Shift+Enter to send)\"],\"Type your message... (Start with / for commands, @ for files, Command+Enter to send)\":[\"Type your message... (Start with / for commands, @ for files, Command+Enter to send)\"],\"Type your message... (Start with / for commands, @ for files, Enter to send)\":[\"Type your message... (Start with / for commands, @ for files, Enter to send)\"],\"Type your message... (Start with / for commands, @ for files, Shift+Enter to send)\":[\"Type your message... (Start with / for commands, @ for files, Shift+Enter to send)\"],\"Uncommitted changes\":[\"Uncommitted changes\"],\"assistant.thinking\":[\"Thinking\"],\"assistant.tool.input_parameters\":[\"Input Parameters\"],\"assistant.tool.message_count\":[[\"count\"],\" messages\"],\"assistant.tool.result\":[\"Tool Result\"],\"assistant.tool.task_id\":[\"Task ID\"],\"assistant.tool.tool_id\":[\"Tool ID\"],\"assistant.tool.view_task\":[\"View Task\"],\"assistant.tool.view_task_details\":[\"View Task\"],\"chat.attach_file\":[\"Attach\"],\"chat.autocomplete.active\":[\"Autocomplete active\"],\"chat.button.start\":[\"Start Chat\"],\"chat.error.send_failed\":[\"Failed to send message. Please try again.\"],\"chat.modal.title\":[\"Start New Chat\"],\"chat.placeholder.continue.command_enter\":[\"Type your message... (Start with / for commands, @ for files, Command+Enter to send, or schedule for later)\"],\"chat.placeholder.continue.enter\":[\"Type your message... (Start with / for commands, @ for files, Enter to send, or schedule for later)\"],\"chat.placeholder.continue.shift_enter\":[\"Type your message... (Start with / for commands, @ for files, Shift+Enter to send, or schedule for later)\"],\"chat.placeholder.resume.command_enter\":[\"Type your message... (Start with / for commands, @ for files, Command+Enter to send, or schedule for later)\"],\"chat.placeholder.resume.enter\":[\"Type your message... (Start with / for commands, @ for files, Enter to send, or schedule for later)\"],\"chat.placeholder.resume.shift_enter\":[\"Type your message... (Start with / for commands, @ for files, Shift+Enter to send, or schedule for later)\"],\"chat.resume\":[\"Resume\"],\"chat.scheduled_send.failed\":[\"Failed to schedule message\"],\"chat.scheduled_send.success\":[\"Message scheduled successfully\"],\"chat.scheduled_send.success_description\":[\"You can view and manage it in the Scheduler tab\"],\"chat.send\":[\"Send\"],\"chat.send_mode.immediate\":[\"Send now\"],\"chat.send_mode.label\":[\"Send mode\"],\"chat.send_mode.scheduled\":[\"Schedule send\"],\"chat.send_mode.scheduled_time\":[\"Scheduled time\"],\"chat.status.processing\":[\"Processing...\"],\"common.action.cancel\":[\"Cancel\"],\"common.cancel\":[\"Cancel\"],\"common.create\":[\"Create\"],\"common.error\":[\"Error\"],\"common.loading\":[\"Loading...\"],\"common.saving\":[\"Saving...\"],\"common.update\":[\"Update\"],\"conversation.error.raw_content\":[\"Raw Content:\"],\"conversation.error.report_issue\":[\"Report this issue\"],\"conversation.error.schema\":[\"Schema Error\"],\"conversation.error.schema_validation\":[\"Schema Validation Error\"],\"conversation.error.schema_validation.description\":[\"This conversation entry failed to parse correctly. This might indicate a format change or parsing issue.\"],\"cron_builder.cron_expression\":[\"Cron Expression\"],\"cron_builder.custom\":[\"Custom\"],\"cron_builder.daily\":[\"Daily\"],\"cron_builder.day_of_week\":[\"Day of Week\"],\"cron_builder.expression\":[\"Expression\"],\"cron_builder.friday\":[\"Friday\"],\"cron_builder.hour\":[\"Hour (0-23)\"],\"cron_builder.hourly\":[\"Hourly\"],\"cron_builder.minute\":[\"Minute (0-59)\"],\"cron_builder.monday\":[\"Monday\"],\"cron_builder.preview\":[\"Preview\"],\"cron_builder.saturday\":[\"Saturday\"],\"cron_builder.schedule_type\":[\"Schedule Type\"],\"cron_builder.sunday\":[\"Sunday\"],\"cron_builder.thursday\":[\"Thursday\"],\"cron_builder.tuesday\":[\"Tuesday\"],\"cron_builder.wednesday\":[\"Wednesday\"],\"cron_builder.weekly\":[\"Weekly\"],\"diff.commit\":[\"Commit\"],\"diff.commit.changes\":[\"Commit Changes\"],\"diff.commit.message\":[\"Commit message\"],\"diff.commit.push\":[\"Commit & Push\"],\"diff.committing\":[\"Committing...\"],\"diff.committing.pushing\":[\"Committing & Pushing...\"],\"diff.deselect.all\":[\"Deselect All\"],\"diff.enter.message\":[\"Enter a commit message\"],\"diff.files\":[\"files\"],\"diff.files.changed\":[\"files changed\"],\"diff.loading\":[\"Loading diff...\"],\"diff.push\":[\"Push\"],\"diff.pushing\":[\"Pushing...\"],\"diff.select.all\":[\"Select All\"],\"diff.select.file\":[\"Select at least one file\"],\"directory_picker.current\":[\"Current:\"],\"directory_picker.loading\":[\"Loading...\"],\"directory_picker.no_directories\":[\"No directories found\"],\"directory_picker.select\":[\"Select This Directory\"],\"mcp.error.load_failed\":[\"Failed to load MCP servers: \",[\"error\"]],\"mcp.no.servers\":[\"No MCP servers found\"],\"mcp.title\":[\"MCP Servers\"],\"notfound.button.go_home\":[\"Go to Home\"],\"notfound.default.description\":[\"The page you are looking for does not exist or has been moved.\"],\"notfound.default.title\":[\"Page Not Found\"],\"notfound.project.description\":[\"The project you are looking for does not exist.\"],\"notfound.project.title\":[\"Project Not Found\"],\"notfound.session.description\":[\"The session you are looking for does not exist.\"],\"notfound.session.title\":[\"Session Not Found\"],\"notification.beep\":[\"Beep\"],\"notification.chime\":[\"Chime\"],\"notification.description\":[\"Select a sound to play when a task completes\"],\"notification.none\":[\"None\"],\"notification.ping\":[\"Ping\"],\"notification.pop\":[\"Pop\"],\"notification.test\":[\"Test\"],\"project.create.action.create\":[\"Create Project\"],\"project.create.action.creating\":[\"Creating...\"],\"project.create.description\":[\"Select a directory to initialize as a Claude Code project. This will run <0>/init in the selected directory.\"],\"project.create.selected_directory\":[\"Selected directory:\"],\"project.create.title\":[\"Create New Project\"],\"project.error.back_to_projects\":[\"Back to Projects\"],\"project.error.description\":[\"We encountered an error while loading this project\"],\"project.error.details_title\":[\"Error Details\"],\"project.error.error_id\":[\"Error ID:\"],\"project.error.title\":[\"Failed to load project\"],\"project.error.try_again\":[\"Try Again\"],\"project.new\":[\"New Project\"],\"project.not_found.back_to_projects\":[\"Back to Projects\"],\"project.not_found.description\":[\"The project you are looking for does not exist or has been removed\"],\"project.not_found.title\":[\"Project Not Found\"],\"project_list.last_modified\":[\"Last modified:\"],\"project_list.messages\":[\"Messages:\"],\"project_list.no_projects.description\":[\"No Claude Code projects found in your ~/.claude/projects directory. Start a conversation with Claude Code to create your first project.\"],\"project_list.no_projects.title\":[\"No projects found\"],\"project_list.view_conversations\":[\"View Conversations\"],\"projects.page.description\":[\"Browse your Claude Code conversation history and project interactions\"],\"projects.page.loading\":[\"Loading projects...\"],\"projects.page.title\":[\"Your Projects\"],\"scheduler.dialog.description\":[\"Set up a scheduled job to send messages to Claude Code\"],\"scheduler.dialog.title.create\":[\"Create Scheduled Job\"],\"scheduler.dialog.title.edit\":[\"Edit Scheduled Job\"],\"scheduler.form.concurrency_policy\":[\"Concurrency Policy\"],\"scheduler.form.concurrency_policy.run\":[\"Run even if running\"],\"scheduler.form.concurrency_policy.skip\":[\"Skip if running\"],\"scheduler.form.enabled\":[\"Enabled\"],\"scheduler.form.enabled.description\":[\"Enable or disable this scheduled job\"],\"scheduler.form.message\":[\"Message Content\"],\"scheduler.form.message.aria_label\":[\"Message input with completion support (/ for commands, @ for files)\"],\"scheduler.form.message.hint\":[\"/ for commands, @ for files\"],\"scheduler.form.message.placeholder\":[\"Type message to send to Claude Code... (/ for commands, @ for files)\"],\"scheduler.form.name\":[\"Job Name\"],\"scheduler.form.name.placeholder\":[\"e.g., Daily Report\"],\"scheduler.form.reserved_time\":[\"Scheduled Date and Time\"],\"scheduler.form.reserved_time.hint\":[\"Will run once at the specified time, then be automatically deleted\"],\"scheduler.form.schedule_type\":[\"Schedule Type\"],\"scheduler.form.schedule_type.cron\":[\"Recurring (Cron)\"],\"scheduler.form.schedule_type.reserved\":[\"One-time\"],\"session.conversation.abort\":[\"Abort\"],\"session.conversation.in.progress\":[\"Conversation is in progress...\"],\"session.conversation.paused\":[\"Conversation is paused...\"],\"session.processing\":[\"Claude Code is processing...\"],\"session.status.paused\":[\"Paused\"],\"session.status.running\":[\"Running\"],\"sessions.load.more\":[\"Load More\"],\"sessions.new\":[\"New\"],\"sessions.title\":[\"Sessions\"],\"sessions.total\":[\"total\"],\"settings.description\":[\"Display and behavior preferences\"],\"settings.input.enter_key_behavior\":[\"Enter Key Behavior\"],\"settings.input.enter_key_behavior.command_enter\":[\"Command+Enter to send\"],\"settings.input.enter_key_behavior.description\":[\"Choose how the Enter key behaves in message input\"],\"settings.input.enter_key_behavior.enter\":[\"Enter to send\"],\"settings.input.enter_key_behavior.shift_enter\":[\"Shift+Enter to send (default)\"],\"settings.loading\":[\"Loading settings...\"],\"settings.locale\":[\"Language\"],\"settings.locale.description\":[\"Choose your preferred language\"],\"settings.locale.en\":[\"English\"],\"settings.locale.ja\":[\"日本語\"],\"settings.notifications\":[\"Notifications\"],\"settings.permission.mode\":[\"Permission Mode\"],\"settings.permission.mode.accept_edits\":[\"Accept Edits (Auto-approve file edits)\"],\"settings.permission.mode.bypass_permissions\":[\"Bypass Permissions (No prompts)\"],\"settings.permission.mode.default\":[\"Default (Ask permission)\"],\"settings.permission.mode.description\":[\"Control how Claude Code handles permission requests for file operations\"],\"settings.permission.mode.plan\":[\"Plan Mode (Planning only)\"],\"settings.permission.mode.unavailable\":[\"This feature is not available in your Claude Code version. All tools will be automatically approved.\"],\"settings.section.notifications\":[\"Notifications\"],\"settings.section.session_display\":[\"Session Display\"],\"settings.section.system_info\":[\"System Information\"],\"settings.session.display\":[\"Session Display\"],\"settings.session.hide_no_user_message\":[\"Hide sessions without user messages\"],\"settings.session.hide_no_user_message.description\":[\"Only show sessions that contain user commands or messages\"],\"settings.session.unify_same_title\":[\"Unify sessions with same title\"],\"settings.session.unify_same_title.description\":[\"Show only the latest session when multiple sessions have the same title\"],\"settings.tab.title\":[\"Settings for display and notifications\"],\"settings.theme\":[\"Theme\"],\"settings.theme.dark\":[\"Dark\"],\"settings.theme.description\":[\"Choose your preferred color theme\"],\"settings.theme.light\":[\"Light\"],\"settings.theme.system\":[\"System\"],\"settings.title\":[\"Settings\"],\"sidebar.back.to.projects\":[\"Back to projects\"],\"sidebar.show.mcp.settings\":[\"Show MCP server settings\"],\"sidebar.show.scheduler.jobs\":[\"Show scheduler jobs\"],\"sidebar.show.session.list\":[\"Show session list\"],\"system.info.tab.title\":[\"Show system information\"],\"system_info.available_features\":[\"Available Features\"],\"system_info.claude_code\":[\"Claude Code\"],\"system_info.description\":[\"Version and feature information\"],\"system_info.executable_path\":[\"Executable\"],\"system_info.feature.agent_sdk.description\":[\"Uses @anthropic-ai/claude-agent-sdk instead of @anthropic-ai/claude-code for enhanced capabilities\"],\"system_info.feature.agent_sdk.title\":[\"Enhanced Agent Mode\"],\"system_info.feature.tool_approval.description\":[\"Allows you to approve or reject tool executions before Claude runs them, giving you full control over actions\"],\"system_info.feature.tool_approval.title\":[\"Tool Execution Approval\"],\"system_info.feature.unknown.description\":[\"Feature information not available\"],\"system_info.feature.uuid_on_sdk_message.description\":[\"Adds unique identifiers to SDK messages for better tracking (v1.0.86+)\"],\"system_info.feature.uuid_on_sdk_message.title\":[\"Message UUID Support\"],\"system_info.loading\":[\"Loading system information...\"],\"system_info.title\":[\"System Information\"],\"system_info.unknown\":[\"Unknown\"],\"system_info.version_label\":[\"Version\"],\"system_info.viewer_version\":[\"Claude Code Viewer\"],\"user.content.document.pdf\":[\"PDF Document\"],\"user.content.document.text\":[\"Text Document\"],\"user.content.image\":[\"Attached Image\"],\"user.content.image.description\":[\"Image attached by user\"],\"user.content.unsupported_document\":[\"Unsupported Document\"],\"user.content.unsupported_document.description\":[\"Document type not supported for display\"],\"user.content.unsupported_media\":[\"Unsupported Media\"],\"user.content.unsupported_media.description\":[\"Media type not supported for display\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"Available commands\":[\"Available commands\"],\"Available files and directories\":[\"Available files and directories\"],\"Close sidebar\":[\"Close sidebar\"],\"Compare from\":[\"Compare from\"],\"Compare to\":[\"Compare to\"],\"Failed to commit\":[\"Failed to commit\"],\"Failed to commit and push\":[\"Failed to commit and push\"],\"Failed to push\":[\"Failed to push\"],\"Message input with completion support\":[\"Message input with completion support\"],\"Reload MCP servers\":[\"Reload MCP servers\"],\"Retry Push\":[\"Retry Push\"],\"Select enter key behavior\":[\"Select enter key behavior\"],\"Select language\":[\"Select language\"],\"Select permission mode\":[\"Select permission mode\"],\"Select theme\":[\"Select theme\"],\"Type your message here... (Start with / for commands, @ for files, Command+Enter to send)\":[\"Type your message here... (Start with / for commands, @ for files, Command+Enter to send)\"],\"Type your message here... (Start with / for commands, @ for files, Enter to send)\":[\"Type your message here... (Start with / for commands, @ for files, Enter to send)\"],\"Type your message here... (Start with / for commands, @ for files, Shift+Enter to send)\":[\"Type your message here... (Start with / for commands, @ for files, Shift+Enter to send)\"],\"Type your message... (Start with / for commands, @ for files, Command+Enter to send)\":[\"Type your message... (Start with / for commands, @ for files, Command+Enter to send)\"],\"Type your message... (Start with / for commands, @ for files, Enter to send)\":[\"Type your message... (Start with / for commands, @ for files, Enter to send)\"],\"Type your message... (Start with / for commands, @ for files, Shift+Enter to send)\":[\"Type your message... (Start with / for commands, @ for files, Shift+Enter to send)\"],\"Uncommitted changes\":[\"Uncommitted changes\"],\"assistant.thinking\":[\"Thinking\"],\"assistant.tool.input_parameters\":[\"Input Parameters\"],\"assistant.tool.message_count\":[[\"count\"],\" messages\"],\"assistant.tool.result\":[\"Tool Result\"],\"assistant.tool.task_id\":[\"Task ID\"],\"assistant.tool.tool_id\":[\"Tool ID\"],\"assistant.tool.view_task\":[\"View Task\"],\"assistant.tool.view_task_details\":[\"View Task\"],\"chat.attach_file\":[\"Attach\"],\"chat.autocomplete.active\":[\"Autocomplete active\"],\"chat.button.start\":[\"Start Chat\"],\"chat.error.send_failed\":[\"Failed to send message. Please try again.\"],\"chat.modal.title\":[\"Start New Chat\"],\"chat.placeholder.continue.command_enter\":[\"Type your message... (Start with / for commands, @ for files, Command+Enter to send, or schedule for later)\"],\"chat.placeholder.continue.enter\":[\"Type your message... (Start with / for commands, @ for files, Enter to send, or schedule for later)\"],\"chat.placeholder.continue.shift_enter\":[\"Type your message... (Start with / for commands, @ for files, Shift+Enter to send, or schedule for later)\"],\"chat.placeholder.resume.command_enter\":[\"Type your message... (Start with / for commands, @ for files, Command+Enter to send, or schedule for later)\"],\"chat.placeholder.resume.enter\":[\"Type your message... (Start with / for commands, @ for files, Enter to send, or schedule for later)\"],\"chat.placeholder.resume.shift_enter\":[\"Type your message... (Start with / for commands, @ for files, Shift+Enter to send, or schedule for later)\"],\"chat.resume\":[\"Resume\"],\"chat.scheduled_send.failed\":[\"Failed to schedule message\"],\"chat.scheduled_send.success\":[\"Message scheduled successfully\"],\"chat.scheduled_send.success_description\":[\"You can view and manage it in the Scheduler tab\"],\"chat.send\":[\"Send\"],\"chat.send_mode.immediate\":[\"Send now\"],\"chat.send_mode.label\":[\"Send mode\"],\"chat.send_mode.scheduled\":[\"Schedule send\"],\"chat.send_mode.scheduled_time\":[\"Scheduled time\"],\"chat.status.processing\":[\"Processing...\"],\"common.action.cancel\":[\"Cancel\"],\"common.cancel\":[\"Cancel\"],\"common.create\":[\"Create\"],\"common.error\":[\"Error\"],\"common.loading\":[\"Loading...\"],\"common.saving\":[\"Saving...\"],\"common.update\":[\"Update\"],\"conversation.error.raw_content\":[\"Raw Content:\"],\"conversation.error.report_issue\":[\"Report this issue\"],\"conversation.error.schema\":[\"Schema Error\"],\"conversation.error.schema_validation\":[\"Schema Validation Error\"],\"conversation.error.schema_validation.description\":[\"This conversation entry failed to parse correctly. This might indicate a format change or parsing issue.\"],\"cron_builder.cron_expression\":[\"Cron Expression\"],\"cron_builder.custom\":[\"Custom\"],\"cron_builder.daily\":[\"Daily\"],\"cron_builder.day_of_week\":[\"Day of Week\"],\"cron_builder.expression\":[\"Expression\"],\"cron_builder.friday\":[\"Friday\"],\"cron_builder.hour\":[\"Hour (0-23)\"],\"cron_builder.hourly\":[\"Hourly\"],\"cron_builder.minute\":[\"Minute (0-59)\"],\"cron_builder.monday\":[\"Monday\"],\"cron_builder.preview\":[\"Preview\"],\"cron_builder.saturday\":[\"Saturday\"],\"cron_builder.schedule_type\":[\"Schedule Type\"],\"cron_builder.sunday\":[\"Sunday\"],\"cron_builder.thursday\":[\"Thursday\"],\"cron_builder.tuesday\":[\"Tuesday\"],\"cron_builder.wednesday\":[\"Wednesday\"],\"cron_builder.weekly\":[\"Weekly\"],\"diff.commit\":[\"Commit\"],\"diff.commit.changes\":[\"Commit Changes\"],\"diff.commit.message\":[\"Commit message\"],\"diff.commit.push\":[\"Commit & Push\"],\"diff.committing\":[\"Committing...\"],\"diff.committing.pushing\":[\"Committing & Pushing...\"],\"diff.deselect.all\":[\"Deselect All\"],\"diff.enter.message\":[\"Enter a commit message\"],\"diff.files\":[\"files\"],\"diff.files.changed\":[\"files changed\"],\"diff.loading\":[\"Loading diff...\"],\"diff.push\":[\"Push\"],\"diff.pushing\":[\"Pushing...\"],\"diff.select.all\":[\"Select All\"],\"diff.select.file\":[\"Select at least one file\"],\"directory_picker.current\":[\"Current:\"],\"directory_picker.loading\":[\"Loading...\"],\"directory_picker.no_directories\":[\"No directories found\"],\"directory_picker.select\":[\"Select This Directory\"],\"directory_picker.show_hidden\":[\"Show hidden files\"],\"mcp.error.load_failed\":[\"Failed to load MCP servers: \",[\"error\"]],\"mcp.no.servers\":[\"No MCP servers found\"],\"mcp.title\":[\"MCP Servers\"],\"notfound.button.go_home\":[\"Go to Home\"],\"notfound.default.description\":[\"The page you are looking for does not exist or has been moved.\"],\"notfound.default.title\":[\"Page Not Found\"],\"notfound.project.description\":[\"The project you are looking for does not exist.\"],\"notfound.project.title\":[\"Project Not Found\"],\"notfound.session.description\":[\"The session you are looking for does not exist.\"],\"notfound.session.title\":[\"Session Not Found\"],\"notification.beep\":[\"Beep\"],\"notification.chime\":[\"Chime\"],\"notification.description\":[\"Select a sound to play when a task completes\"],\"notification.none\":[\"None\"],\"notification.ping\":[\"Ping\"],\"notification.pop\":[\"Pop\"],\"notification.test\":[\"Test\"],\"project.error.back_to_projects\":[\"Back to Projects\"],\"project.error.description\":[\"We encountered an error while loading this project\"],\"project.error.details_title\":[\"Error Details\"],\"project.error.error_id\":[\"Error ID:\"],\"project.error.title\":[\"Failed to load project\"],\"project.error.try_again\":[\"Try Again\"],\"project.new\":[\"New Project\"],\"project.not_found.back_to_projects\":[\"Back to Projects\"],\"project.not_found.description\":[\"The project you are looking for does not exist or has been removed\"],\"project.not_found.title\":[\"Project Not Found\"],\"project.setup.action.setting_up\":[\"Setting up...\"],\"project.setup.action.setup\":[\"Setup Project\"],\"project.setup.description\":[\"Navigate to a directory to set up as a Claude Code project. If CLAUDE.md exists, the project will be described. Otherwise, <0>/init will be run to initialize it.\"],\"project.setup.selected_directory\":[\"Selected directory:\"],\"project.setup.title\":[\"Setup New Project\"],\"project_list.last_modified\":[\"Last modified:\"],\"project_list.messages\":[\"Messages:\"],\"project_list.no_projects.description\":[\"No Claude Code projects found in your ~/.claude/projects directory. Start a conversation with Claude Code to set up your first project.\"],\"project_list.no_projects.title\":[\"No projects found\"],\"project_list.view_conversations\":[\"View Conversations\"],\"projects.page.description\":[\"Browse your Claude Code conversation history and project interactions\"],\"projects.page.loading\":[\"Loading projects...\"],\"projects.page.title\":[\"Your Projects\"],\"scheduler.dialog.description\":[\"Set up a scheduled job to send messages to Claude Code\"],\"scheduler.dialog.title.create\":[\"Create Scheduled Job\"],\"scheduler.dialog.title.edit\":[\"Edit Scheduled Job\"],\"scheduler.form.concurrency_policy\":[\"Concurrency Policy\"],\"scheduler.form.concurrency_policy.run\":[\"Run even if running\"],\"scheduler.form.concurrency_policy.skip\":[\"Skip if running\"],\"scheduler.form.enabled\":[\"Enabled\"],\"scheduler.form.enabled.description\":[\"Enable or disable this scheduled job\"],\"scheduler.form.message\":[\"Message Content\"],\"scheduler.form.message.aria_label\":[\"Message input with completion support (/ for commands, @ for files)\"],\"scheduler.form.message.hint\":[\"/ for commands, @ for files\"],\"scheduler.form.message.placeholder\":[\"Type message to send to Claude Code... (/ for commands, @ for files)\"],\"scheduler.form.name\":[\"Job Name\"],\"scheduler.form.name.placeholder\":[\"e.g., Daily Report\"],\"scheduler.form.reserved_time\":[\"Scheduled Date and Time\"],\"scheduler.form.reserved_time.hint\":[\"Will run once at the specified time, then be automatically deleted\"],\"scheduler.form.schedule_type\":[\"Schedule Type\"],\"scheduler.form.schedule_type.cron\":[\"Recurring (Cron)\"],\"scheduler.form.schedule_type.reserved\":[\"One-time\"],\"session.conversation.abort\":[\"Abort\"],\"session.conversation.in.progress\":[\"Conversation is in progress...\"],\"session.conversation.paused\":[\"Conversation is paused...\"],\"session.processing\":[\"Claude Code is processing...\"],\"session.status.paused\":[\"Paused\"],\"session.status.running\":[\"Running\"],\"sessions.load.more\":[\"Load More\"],\"sessions.new\":[\"New\"],\"sessions.title\":[\"Sessions\"],\"sessions.total\":[\"total\"],\"settings.description\":[\"Display and behavior preferences\"],\"settings.input.enter_key_behavior\":[\"Enter Key Behavior\"],\"settings.input.enter_key_behavior.command_enter\":[\"Command+Enter to send\"],\"settings.input.enter_key_behavior.description\":[\"Choose how the Enter key behaves in message input\"],\"settings.input.enter_key_behavior.enter\":[\"Enter to send\"],\"settings.input.enter_key_behavior.shift_enter\":[\"Shift+Enter to send (default)\"],\"settings.loading\":[\"Loading settings...\"],\"settings.locale\":[\"Language\"],\"settings.locale.description\":[\"Choose your preferred language\"],\"settings.locale.en\":[\"English\"],\"settings.locale.ja\":[\"日本語\"],\"settings.notifications\":[\"Notifications\"],\"settings.permission.mode\":[\"Permission Mode\"],\"settings.permission.mode.accept_edits\":[\"Accept Edits (Auto-approve file edits)\"],\"settings.permission.mode.bypass_permissions\":[\"Bypass Permissions (No prompts)\"],\"settings.permission.mode.default\":[\"Default (Ask permission)\"],\"settings.permission.mode.description\":[\"Control how Claude Code handles permission requests for file operations\"],\"settings.permission.mode.plan\":[\"Plan Mode (Planning only)\"],\"settings.permission.mode.unavailable\":[\"This feature is not available in your Claude Code version. All tools will be automatically approved.\"],\"settings.section.notifications\":[\"Notifications\"],\"settings.section.session_display\":[\"Session Display\"],\"settings.section.system_info\":[\"System Information\"],\"settings.session.display\":[\"Session Display\"],\"settings.session.hide_no_user_message\":[\"Hide sessions without user messages\"],\"settings.session.hide_no_user_message.description\":[\"Only show sessions that contain user commands or messages\"],\"settings.session.unify_same_title\":[\"Unify sessions with same title\"],\"settings.session.unify_same_title.description\":[\"Show only the latest session when multiple sessions have the same title\"],\"settings.tab.title\":[\"Settings for display and notifications\"],\"settings.theme\":[\"Theme\"],\"settings.theme.dark\":[\"Dark\"],\"settings.theme.description\":[\"Choose your preferred color theme\"],\"settings.theme.light\":[\"Light\"],\"settings.theme.system\":[\"System\"],\"settings.title\":[\"Settings\"],\"sidebar.back.to.projects\":[\"Back to projects\"],\"sidebar.show.mcp.settings\":[\"Show MCP server settings\"],\"sidebar.show.scheduler.jobs\":[\"Show scheduler jobs\"],\"sidebar.show.session.list\":[\"Show session list\"],\"system.info.tab.title\":[\"Show system information\"],\"system_info.available_features\":[\"Available Features\"],\"system_info.claude_code\":[\"Claude Code\"],\"system_info.description\":[\"Version and feature information\"],\"system_info.executable_path\":[\"Executable\"],\"system_info.feature.agent_sdk.description\":[\"Uses @anthropic-ai/claude-agent-sdk instead of @anthropic-ai/claude-code for enhanced capabilities\"],\"system_info.feature.agent_sdk.title\":[\"Enhanced Agent Mode\"],\"system_info.feature.tool_approval.description\":[\"Allows you to approve or reject tool executions before Claude runs them, giving you full control over actions\"],\"system_info.feature.tool_approval.title\":[\"Tool Execution Approval\"],\"system_info.feature.unknown.description\":[\"Feature information not available\"],\"system_info.feature.uuid_on_sdk_message.description\":[\"Adds unique identifiers to SDK messages for better tracking (v1.0.86+)\"],\"system_info.feature.uuid_on_sdk_message.title\":[\"Message UUID Support\"],\"system_info.loading\":[\"Loading system information...\"],\"system_info.title\":[\"System Information\"],\"system_info.unknown\":[\"Unknown\"],\"system_info.version_label\":[\"Version\"],\"system_info.viewer_version\":[\"Claude Code Viewer\"],\"user.content.document.pdf\":[\"PDF Document\"],\"user.content.document.text\":[\"Text Document\"],\"user.content.image\":[\"Attached Image\"],\"user.content.image.description\":[\"Image attached by user\"],\"user.content.unsupported_document\":[\"Unsupported Document\"],\"user.content.unsupported_document.description\":[\"Document type not supported for display\"],\"user.content.unsupported_media\":[\"Unsupported Media\"],\"user.content.unsupported_media.description\":[\"Media type not supported for display\"]}")as Messages; \ No newline at end of file diff --git a/src/lib/i18n/locales/ja/messages.json b/src/lib/i18n/locales/ja/messages.json index d4aeec3..626518f 100644 --- a/src/lib/i18n/locales/ja/messages.json +++ b/src/lib/i18n/locales/ja/messages.json @@ -517,27 +517,6 @@ ], "translation": "会話を一時停止中..." }, - "project.create.title": { - "message": "Create New Project", - "placeholders": {}, - "comments": [], - "origin": [["src/app/projects/components/CreateProjectDialog.tsx", 64]], - "translation": "新規プロジェクトを作成" - }, - "project.create.action.create": { - "message": "Create Project", - "placeholders": {}, - "comments": [], - "origin": [["src/app/projects/components/CreateProjectDialog.tsx", 112]], - "translation": "プロジェクトを作成" - }, - "project.create.action.creating": { - "message": "Creating...", - "placeholders": {}, - "comments": [], - "origin": [["src/app/projects/components/CreateProjectDialog.tsx", 106]], - "translation": "作成中..." - }, "cron_builder.cron_expression": { "translation": "Cron式", "message": "Cron Expression", @@ -973,7 +952,7 @@ "placeholders": {}, "comments": [], "origin": [["src/app/projects/components/ProjectList.tsx", 36]], - "translation": "~/.claude/projectsディレクトリにClaude Codeプロジェクトが見つかりません。Claude Codeとの会話を開始して、最初のプロジェクトを作成してください。" + "translation": "~/.claude/projectsディレクトリにClaude Codeプロジェクトが見つかりません。Claude Codeとの会話を開始して、最初のプロジェクトをセットアップしてください。" }, "directory_picker.no_directories": { "message": "No directories found", @@ -1207,13 +1186,6 @@ ], "translation": "スキーマ検証エラー" }, - "project.create.description": { - "message": "Select a directory to initialize as a Claude Code project. This will run <0>/init in the selected directory.", - "placeholders": {}, - "comments": [], - "origin": [["src/app/projects/components/CreateProjectDialog.tsx", 67]], - "translation": "Claude Codeプロジェクトとして初期化するディレクトリを選択してください。選択したディレクトリで<0>/initが実行されます。" - }, "notification.description": { "message": "Select a sound to play when a task completes", "placeholders": {}, @@ -1252,12 +1224,12 @@ "origin": [["src/app/projects/components/DirectoryPicker.tsx", 42]], "translation": "このディレクトリを選択" }, - "project.create.selected_directory": { - "message": "Selected directory:", + "directory_picker.show_hidden": { + "message": "Show hidden files", "placeholders": {}, "comments": [], - "origin": [["src/app/projects/components/CreateProjectDialog.tsx", 84]], - "translation": "選択したディレクトリ:" + "origin": [["src/app/projects/components/DirectoryPicker.tsx", 56]], + "translation": "隠しファイルを表示" }, "chat.send": { "message": "Send", @@ -2217,5 +2189,40 @@ ] ], "translation": "作成" + }, + "project.setup.title": { + "message": "Setup New Project", + "placeholders": {}, + "comments": [], + "origin": [["src/app/projects/components/CreateProjectDialog.tsx", 68]], + "translation": "新規プロジェクトをセットアップ" + }, + "project.setup.action.setup": { + "message": "Setup Project", + "placeholders": {}, + "comments": [], + "origin": [["src/app/projects/components/CreateProjectDialog.tsx", 117]], + "translation": "プロジェクトをセットアップ" + }, + "project.setup.action.setting_up": { + "message": "Setting up...", + "placeholders": {}, + "comments": [], + "origin": [["src/app/projects/components/CreateProjectDialog.tsx", 111]], + "translation": "セットアップ中..." + }, + "project.setup.description": { + "message": "Select a directory to set up as a Claude Code project. If CLAUDE.md exists, the project will be described. Otherwise, <0>/init will be run to initialize it.", + "placeholders": {}, + "comments": [], + "origin": [["src/app/projects/components/SetupProjectDialog.tsx", 72]], + "translation": "Claude Codeプロジェクトとしてセットアップするディレクトリまで移動してください。CLAUDE.mdが存在する場合はプロジェクトを説明し、存在しない場合は<0>/initで初期化します。" + }, + "project.setup.selected_directory": { + "message": "Selected directory:", + "placeholders": {}, + "comments": [], + "origin": [["src/app/projects/components/CreateProjectDialog.tsx", 89]], + "translation": "選択したディレクトリ:" } } diff --git a/src/lib/i18n/locales/ja/messages.ts b/src/lib/i18n/locales/ja/messages.ts index a010e2c..5c52b3d 100644 --- a/src/lib/i18n/locales/ja/messages.ts +++ b/src/lib/i18n/locales/ja/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"Available commands\":[\"利用可能なコマンド\"],\"Available files and directories\":[\"利用可能なファイルとディレクトリ\"],\"Close sidebar\":[\"サイドバーを閉じる\"],\"Compare from\":[\"比較元\"],\"Compare to\":[\"比較先\"],\"Failed to commit\":[\"コミットに失敗しました\"],\"Failed to commit and push\":[\"コミットとプッシュに失敗しました\"],\"Failed to push\":[\"プッシュに失敗しました\"],\"Message input with completion support\":[\"補完機能付きメッセージ入力\"],\"Reload MCP servers\":[\"MCPサーバーを再読み込み\"],\"Retry Push\":[\"プッシュを再試行\"],\"Select enter key behavior\":[\"Enterキーの動作を選択\"],\"Select language\":[\"言語を選択\"],\"Select permission mode\":[\"権限モードを選択\"],\"Select theme\":[\"テーマを選択\"],\"Type your message here... (Start with / for commands, @ for files, Command+Enter to send)\":[\"ここにメッセージを入力... (/でコマンド、@でファイル、Command+Enterで送信)\"],\"Type your message here... (Start with / for commands, @ for files, Enter to send)\":[\"ここにメッセージを入力... (/でコマンド、@でファイル、Enterで送信)\"],\"Type your message here... (Start with / for commands, @ for files, Shift+Enter to send)\":[\"ここにメッセージを入力... (/でコマンド、@でファイル、Shift+Enterで送信)\"],\"Type your message... (Start with / for commands, @ for files, Command+Enter to send)\":[\"メッセージを入力... (/でコマンド、@でファイル、Command+Enterで送信)\"],\"Type your message... (Start with / for commands, @ for files, Enter to send)\":[\"メッセージを入力... (/でコマンド、@でファイル、Enterで送信)\"],\"Type your message... (Start with / for commands, @ for files, Shift+Enter to send)\":[\"メッセージを入力... (/でコマンド、@でファイル、Shift+Enterで送信)\"],\"Uncommitted changes\":[\"未コミットの変更\"],\"assistant.thinking\":[\"思考中\"],\"assistant.tool.input_parameters\":[\"入力パラメータ\"],\"assistant.tool.message_count\":[[\"count\"],\"件のメッセージ\"],\"assistant.tool.result\":[\"ツール実行結果\"],\"assistant.tool.task_id\":[\"タスクID\"],\"assistant.tool.tool_id\":[\"ツールID\"],\"assistant.tool.view_task\":[\"タスクを表示\"],\"assistant.tool.view_task_details\":[\"タスクを確認\"],\"chat.attach_file\":[\"添付\"],\"chat.autocomplete.active\":[\"オートコンプリート有効\"],\"chat.button.start\":[\"チャット開始\"],\"chat.error.send_failed\":[\"メッセージの送信に失敗しました。もう一度お試しください。\"],\"chat.modal.title\":[\"新しいチャットを開始\"],\"chat.placeholder.continue.command_enter\":[\"メッセージを入力... (/でコマンド、@でファイル、Command+Enterで送信、または予約送信)\"],\"chat.placeholder.continue.enter\":[\"メッセージを入力... (/でコマンド、@でファイル、Enterで送信、または予約送信)\"],\"chat.placeholder.continue.shift_enter\":[\"メッセージを入力... (/でコマンド、@でファイル、Shift+Enterで送信、または予約送信)\"],\"chat.placeholder.resume.command_enter\":[\"メッセージを入力... (/でコマンド、@でファイル、Command+Enterで送信、または予約送信)\"],\"chat.placeholder.resume.enter\":[\"メッセージを入力... (/でコマンド、@でファイル、Enterで送信、または予約送信)\"],\"chat.placeholder.resume.shift_enter\":[\"メッセージを入力... (/でコマンド、@でファイル、Shift+Enterで送信、または予約送信)\"],\"chat.resume\":[\"再開\"],\"chat.scheduled_send.failed\":[\"メッセージの予約に失敗しました\"],\"chat.scheduled_send.success\":[\"メッセージを予約しました\"],\"chat.scheduled_send.success_description\":[\"スケジューラタブで確認・管理できます\"],\"chat.send\":[\"送信\"],\"chat.send_mode.immediate\":[\"今すぐ送信\"],\"chat.send_mode.label\":[\"送信モード\"],\"chat.send_mode.scheduled\":[\"予約送信\"],\"chat.send_mode.scheduled_time\":[\"送信予定時刻\"],\"chat.status.processing\":[\"処理中...\"],\"common.action.cancel\":[\"キャンセル\"],\"common.cancel\":[\"キャンセル\"],\"common.create\":[\"作成\"],\"common.error\":[\"エラー\"],\"common.loading\":[\"読み込み中...\"],\"common.saving\":[\"保存中...\"],\"common.update\":[\"更新\"],\"conversation.error.raw_content\":[\"生データ:\"],\"conversation.error.report_issue\":[\"この問題を報告\"],\"conversation.error.schema\":[\"スキーマエラー\"],\"conversation.error.schema_validation\":[\"スキーマ検証エラー\"],\"conversation.error.schema_validation.description\":[\"この会話エントリの解析に失敗しました。フォーマットの変更または解析の問題が考えられます。\"],\"cron_builder.cron_expression\":[\"Cron式\"],\"cron_builder.custom\":[\"カスタム\"],\"cron_builder.daily\":[\"毎日\"],\"cron_builder.day_of_week\":[\"曜日\"],\"cron_builder.expression\":[\"Cron式\"],\"cron_builder.friday\":[\"金曜日\"],\"cron_builder.hour\":[\"時 (0-23)\"],\"cron_builder.hourly\":[\"毎時\"],\"cron_builder.minute\":[\"分 (0-59)\"],\"cron_builder.monday\":[\"月曜日\"],\"cron_builder.preview\":[\"プレビュー\"],\"cron_builder.saturday\":[\"土曜日\"],\"cron_builder.schedule_type\":[\"スケジュールタイプ\"],\"cron_builder.sunday\":[\"日曜日\"],\"cron_builder.thursday\":[\"木曜日\"],\"cron_builder.tuesday\":[\"火曜日\"],\"cron_builder.wednesday\":[\"水曜日\"],\"cron_builder.weekly\":[\"毎週\"],\"diff.commit\":[\"コミット\"],\"diff.commit.changes\":[\"変更をコミット\"],\"diff.commit.message\":[\"コミットメッセージ\"],\"diff.commit.push\":[\"コミット&プッシュ\"],\"diff.committing\":[\"コミット中...\"],\"diff.committing.pushing\":[\"コミット&プッシュ中...\"],\"diff.deselect.all\":[\"すべて選択解除\"],\"diff.enter.message\":[\"コミットメッセージを入力\"],\"diff.files\":[\"ファイル\"],\"diff.files.changed\":[\"ファイルが変更されました\"],\"diff.loading\":[\"差分を読み込み中...\"],\"diff.push\":[\"プッシュ\"],\"diff.pushing\":[\"プッシュ中...\"],\"diff.select.all\":[\"すべて選択\"],\"diff.select.file\":[\"少なくとも1つのファイルを選択してください\"],\"directory_picker.current\":[\"現在:\"],\"directory_picker.loading\":[\"読み込み中...\"],\"directory_picker.no_directories\":[\"ディレクトリが見つかりません\"],\"directory_picker.select\":[\"このディレクトリを選択\"],\"mcp.error.load_failed\":[\"MCPサーバーの読み込みに失敗しました: \",[\"error\"]],\"mcp.no.servers\":[\"MCPサーバーが見つかりません\"],\"mcp.title\":[\"MCPサーバー\"],\"notfound.button.go_home\":[\"ホームに戻る\"],\"notfound.default.description\":[\"お探しのページは存在しないか、移動されました。\"],\"notfound.default.title\":[\"ページが見つかりません\"],\"notfound.project.description\":[\"お探しのプロジェクトは存在しません。\"],\"notfound.project.title\":[\"プロジェクトが見つかりません\"],\"notfound.session.description\":[\"お探しのセッションは存在しません。\"],\"notfound.session.title\":[\"セッションが見つかりません\"],\"notification.beep\":[\"ビープ音\"],\"notification.chime\":[\"チャイム\"],\"notification.description\":[\"Claude Code のタスクが完了した時に再生する音を選択してください\"],\"notification.none\":[\"なし\"],\"notification.ping\":[\"ピン\"],\"notification.pop\":[\"ポップ\"],\"notification.test\":[\"テスト\"],\"project.create.action.create\":[\"プロジェクトを作成\"],\"project.create.action.creating\":[\"作成中...\"],\"project.create.description\":[\"Claude Codeプロジェクトとして初期化するディレクトリを選択してください。選択したディレクトリで<0>/initが実行されます。\"],\"project.create.selected_directory\":[\"選択したディレクトリ:\"],\"project.create.title\":[\"新規プロジェクトを作成\"],\"project.error.back_to_projects\":[\"プロジェクト一覧に戻る\"],\"project.error.description\":[\"このプロジェクトの読み込み中にエラーが発生しました\"],\"project.error.details_title\":[\"エラー詳細\"],\"project.error.error_id\":[\"エラーID:\"],\"project.error.title\":[\"プロジェクトの読み込みに失敗しました\"],\"project.error.try_again\":[\"再試行\"],\"project.new\":[\"新規プロジェクト\"],\"project.not_found.back_to_projects\":[\"プロジェクト一覧に戻る\"],\"project.not_found.description\":[\"お探しのプロジェクトは存在しないか、削除されています\"],\"project.not_found.title\":[\"プロジェクトが見つかりません\"],\"project_list.last_modified\":[\"最終更新:\"],\"project_list.messages\":[\"メッセージ:\"],\"project_list.no_projects.description\":[\"~/.claude/projectsディレクトリにClaude Codeプロジェクトが見つかりません。Claude Codeとの会話を開始して、最初のプロジェクトを作成してください。\"],\"project_list.no_projects.title\":[\"プロジェクトが見つかりません\"],\"project_list.view_conversations\":[\"会話を表示\"],\"projects.page.description\":[\"Claude Codeの会話履歴とプロジェクトの操作を閲覧\"],\"projects.page.loading\":[\"プロジェクトを読み込み中...\"],\"projects.page.title\":[\"プロジェクト\"],\"scheduler.dialog.description\":[\"Claude Codeにメッセージを送信するスケジュールジョブを設定します\"],\"scheduler.dialog.title.create\":[\"スケジュールジョブを作成\"],\"scheduler.dialog.title.edit\":[\"スケジュールジョブを編集\"],\"scheduler.form.concurrency_policy\":[\"同時実行ポリシー\"],\"scheduler.form.concurrency_policy.run\":[\"実行中でも実行する\"],\"scheduler.form.concurrency_policy.skip\":[\"実行中の場合はスキップ\"],\"scheduler.form.enabled\":[\"有効化\"],\"scheduler.form.enabled.description\":[\"このスケジュールジョブを有効または無効にします\"],\"scheduler.form.message\":[\"メッセージ内容\"],\"scheduler.form.message.aria_label\":[\"補完機能付きメッセージ入力 (/でコマンド、@でファイル)\"],\"scheduler.form.message.hint\":[\"/でコマンド補完、@でファイル補完\"],\"scheduler.form.message.placeholder\":[\"Claude Codeに送信するメッセージを入力... (/でコマンド補完、@でファイル補完)\"],\"scheduler.form.name\":[\"ジョブ名\"],\"scheduler.form.name.placeholder\":[\"例: 日次レポート\"],\"scheduler.form.reserved_time\":[\"実行予定日時\"],\"scheduler.form.reserved_time.hint\":[\"指定した日時に一度だけ実行されます。実行後は自動的に削除されます\"],\"scheduler.form.schedule_type\":[\"スケジュールタイプ\"],\"scheduler.form.schedule_type.cron\":[\"定期実行 (Cron)\"],\"scheduler.form.schedule_type.reserved\":[\"予約実行\"],\"session.conversation.abort\":[\"中止\"],\"session.conversation.in.progress\":[\"会話を進行中...\"],\"session.conversation.paused\":[\"会話を一時停止中...\"],\"session.processing\":[\"Claude Codeが処理中...\"],\"session.status.paused\":[\"一時停止\"],\"session.status.running\":[\"実行中\"],\"sessions.load.more\":[\"さらに読み込む\"],\"sessions.new\":[\"新規\"],\"sessions.title\":[\"セッション\"],\"sessions.total\":[\"合計\"],\"settings.description\":[\"表示と動作の設定\"],\"settings.input.enter_key_behavior\":[\"Enterキーの動作\"],\"settings.input.enter_key_behavior.command_enter\":[\"Command+Enterで送信\"],\"settings.input.enter_key_behavior.description\":[\"メッセージ入力でのEnterキーの動作を選択\"],\"settings.input.enter_key_behavior.enter\":[\"Enterで送信\"],\"settings.input.enter_key_behavior.shift_enter\":[\"Shift+Enterで送信(デフォルト)\"],\"settings.loading\":[\"設定を読み込み中...\"],\"settings.locale\":[\"言語\"],\"settings.locale.description\":[\"お好みの言語を選択\"],\"settings.locale.en\":[\"English\"],\"settings.locale.ja\":[\"日本語\"],\"settings.notifications\":[\"通知\"],\"settings.permission.mode\":[\"権限モード\"],\"settings.permission.mode.accept_edits\":[\"編集を承認(ファイル編集を自動承認)\"],\"settings.permission.mode.bypass_permissions\":[\"権限をバイパス(プロンプトなし)\"],\"settings.permission.mode.default\":[\"デフォルト(権限を確認)\"],\"settings.permission.mode.description\":[\"ファイル操作の権限リクエストの処理方法を制御\"],\"settings.permission.mode.plan\":[\"プランモード(計画のみ)\"],\"settings.permission.mode.unavailable\":[\"お使いのClaude Codeバージョンではこの機能は利用できません。すべてのツールは自動で承認されます。\"],\"settings.section.notifications\":[\"通知\"],\"settings.section.session_display\":[\"セッション表示\"],\"settings.section.system_info\":[\"システム情報\"],\"settings.session.display\":[\"セッション表示\"],\"settings.session.hide_no_user_message\":[\"ユーザーメッセージのないセッションを非表示\"],\"settings.session.hide_no_user_message.description\":[\"ユーザーコマンドまたはメッセージを含むセッションのみを表示\"],\"settings.session.unify_same_title\":[\"同じタイトルのセッションを統合\"],\"settings.session.unify_same_title.description\":[\"同じタイトルの複数のセッションがある場合、最新のセッションのみを表示\"],\"settings.tab.title\":[\"表示と通知の設定\"],\"settings.theme\":[\"テーマ\"],\"settings.theme.dark\":[\"ダーク\"],\"settings.theme.description\":[\"お好みのカラーテーマを選択\"],\"settings.theme.light\":[\"ライト\"],\"settings.theme.system\":[\"システム\"],\"settings.title\":[\"設定\"],\"sidebar.back.to.projects\":[\"プロジェクト一覧に戻る\"],\"sidebar.show.mcp.settings\":[\"MCPサーバー設定を表示\"],\"sidebar.show.scheduler.jobs\":[\"スケジューラジョブを表示\"],\"sidebar.show.session.list\":[\"セッション一覧を表示\"],\"system.info.tab.title\":[\"システム情報を表示\"],\"system_info.available_features\":[\"利用可能機能\"],\"system_info.claude_code\":[\"Claude Code\"],\"system_info.description\":[\"バージョンと機能情報\"],\"system_info.executable_path\":[\"実行ファイル\"],\"system_info.feature.agent_sdk.description\":[\"@anthropic-ai/claude-code ではなく @anthropic-ai/claude-agent-sdk を利用します\"],\"system_info.feature.agent_sdk.title\":[\"拡張エージェントモード\"],\"system_info.feature.tool_approval.description\":[\"Claude がツールを実行する前に承認または拒否でき、アクションを完全にコントロールできます\"],\"system_info.feature.tool_approval.title\":[\"ツール実行承認\"],\"system_info.feature.unknown.description\":[\"機能情報は利用できません\"],\"system_info.feature.uuid_on_sdk_message.description\":[\"SDKメッセージに一意の識別子を追加して追跡を改善します (v1.0.86+)\"],\"system_info.feature.uuid_on_sdk_message.title\":[\"メッセージUUIDサポート\"],\"system_info.loading\":[\"システム情報を読み込んでいます...\"],\"system_info.title\":[\"システム情報\"],\"system_info.unknown\":[\"不明\"],\"system_info.version_label\":[\"バージョン\"],\"system_info.viewer_version\":[\"Claude Code Viewer\"],\"user.content.document.pdf\":[\"PDF文書\"],\"user.content.document.text\":[\"テキスト文書\"],\"user.content.image\":[\"添付画像\"],\"user.content.image.description\":[\"ユーザーが添付した画像\"],\"user.content.unsupported_document\":[\"サポートされていない文書\"],\"user.content.unsupported_document.description\":[\"文書タイプは表示がサポートされていません\"],\"user.content.unsupported_media\":[\"サポートされていないメディア\"],\"user.content.unsupported_media.description\":[\"表示がサポートされていないメディア形式です\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"Available commands\":[\"利用可能なコマンド\"],\"Available files and directories\":[\"利用可能なファイルとディレクトリ\"],\"Close sidebar\":[\"サイドバーを閉じる\"],\"Compare from\":[\"比較元\"],\"Compare to\":[\"比較先\"],\"Failed to commit\":[\"コミットに失敗しました\"],\"Failed to commit and push\":[\"コミットとプッシュに失敗しました\"],\"Failed to push\":[\"プッシュに失敗しました\"],\"Message input with completion support\":[\"補完機能付きメッセージ入力\"],\"Reload MCP servers\":[\"MCPサーバーを再読み込み\"],\"Retry Push\":[\"プッシュを再試行\"],\"Select enter key behavior\":[\"Enterキーの動作を選択\"],\"Select language\":[\"言語を選択\"],\"Select permission mode\":[\"権限モードを選択\"],\"Select theme\":[\"テーマを選択\"],\"Type your message here... (Start with / for commands, @ for files, Command+Enter to send)\":[\"ここにメッセージを入力... (/でコマンド、@でファイル、Command+Enterで送信)\"],\"Type your message here... (Start with / for commands, @ for files, Enter to send)\":[\"ここにメッセージを入力... (/でコマンド、@でファイル、Enterで送信)\"],\"Type your message here... (Start with / for commands, @ for files, Shift+Enter to send)\":[\"ここにメッセージを入力... (/でコマンド、@でファイル、Shift+Enterで送信)\"],\"Type your message... (Start with / for commands, @ for files, Command+Enter to send)\":[\"メッセージを入力... (/でコマンド、@でファイル、Command+Enterで送信)\"],\"Type your message... (Start with / for commands, @ for files, Enter to send)\":[\"メッセージを入力... (/でコマンド、@でファイル、Enterで送信)\"],\"Type your message... (Start with / for commands, @ for files, Shift+Enter to send)\":[\"メッセージを入力... (/でコマンド、@でファイル、Shift+Enterで送信)\"],\"Uncommitted changes\":[\"未コミットの変更\"],\"assistant.thinking\":[\"思考中\"],\"assistant.tool.input_parameters\":[\"入力パラメータ\"],\"assistant.tool.message_count\":[[\"count\"],\"件のメッセージ\"],\"assistant.tool.result\":[\"ツール実行結果\"],\"assistant.tool.task_id\":[\"タスクID\"],\"assistant.tool.tool_id\":[\"ツールID\"],\"assistant.tool.view_task\":[\"タスクを表示\"],\"assistant.tool.view_task_details\":[\"タスクを確認\"],\"chat.attach_file\":[\"添付\"],\"chat.autocomplete.active\":[\"オートコンプリート有効\"],\"chat.button.start\":[\"チャット開始\"],\"chat.error.send_failed\":[\"メッセージの送信に失敗しました。もう一度お試しください。\"],\"chat.modal.title\":[\"新しいチャットを開始\"],\"chat.placeholder.continue.command_enter\":[\"メッセージを入力... (/でコマンド、@でファイル、Command+Enterで送信、または予約送信)\"],\"chat.placeholder.continue.enter\":[\"メッセージを入力... (/でコマンド、@でファイル、Enterで送信、または予約送信)\"],\"chat.placeholder.continue.shift_enter\":[\"メッセージを入力... (/でコマンド、@でファイル、Shift+Enterで送信、または予約送信)\"],\"chat.placeholder.resume.command_enter\":[\"メッセージを入力... (/でコマンド、@でファイル、Command+Enterで送信、または予約送信)\"],\"chat.placeholder.resume.enter\":[\"メッセージを入力... (/でコマンド、@でファイル、Enterで送信、または予約送信)\"],\"chat.placeholder.resume.shift_enter\":[\"メッセージを入力... (/でコマンド、@でファイル、Shift+Enterで送信、または予約送信)\"],\"chat.resume\":[\"再開\"],\"chat.scheduled_send.failed\":[\"メッセージの予約に失敗しました\"],\"chat.scheduled_send.success\":[\"メッセージを予約しました\"],\"chat.scheduled_send.success_description\":[\"スケジューラタブで確認・管理できます\"],\"chat.send\":[\"送信\"],\"chat.send_mode.immediate\":[\"今すぐ送信\"],\"chat.send_mode.label\":[\"送信モード\"],\"chat.send_mode.scheduled\":[\"予約送信\"],\"chat.send_mode.scheduled_time\":[\"送信予定時刻\"],\"chat.status.processing\":[\"処理中...\"],\"common.action.cancel\":[\"キャンセル\"],\"common.cancel\":[\"キャンセル\"],\"common.create\":[\"作成\"],\"common.error\":[\"エラー\"],\"common.loading\":[\"読み込み中...\"],\"common.saving\":[\"保存中...\"],\"common.update\":[\"更新\"],\"conversation.error.raw_content\":[\"生データ:\"],\"conversation.error.report_issue\":[\"この問題を報告\"],\"conversation.error.schema\":[\"スキーマエラー\"],\"conversation.error.schema_validation\":[\"スキーマ検証エラー\"],\"conversation.error.schema_validation.description\":[\"この会話エントリの解析に失敗しました。フォーマットの変更または解析の問題が考えられます。\"],\"cron_builder.cron_expression\":[\"Cron式\"],\"cron_builder.custom\":[\"カスタム\"],\"cron_builder.daily\":[\"毎日\"],\"cron_builder.day_of_week\":[\"曜日\"],\"cron_builder.expression\":[\"Cron式\"],\"cron_builder.friday\":[\"金曜日\"],\"cron_builder.hour\":[\"時 (0-23)\"],\"cron_builder.hourly\":[\"毎時\"],\"cron_builder.minute\":[\"分 (0-59)\"],\"cron_builder.monday\":[\"月曜日\"],\"cron_builder.preview\":[\"プレビュー\"],\"cron_builder.saturday\":[\"土曜日\"],\"cron_builder.schedule_type\":[\"スケジュールタイプ\"],\"cron_builder.sunday\":[\"日曜日\"],\"cron_builder.thursday\":[\"木曜日\"],\"cron_builder.tuesday\":[\"火曜日\"],\"cron_builder.wednesday\":[\"水曜日\"],\"cron_builder.weekly\":[\"毎週\"],\"diff.commit\":[\"コミット\"],\"diff.commit.changes\":[\"変更をコミット\"],\"diff.commit.message\":[\"コミットメッセージ\"],\"diff.commit.push\":[\"コミット&プッシュ\"],\"diff.committing\":[\"コミット中...\"],\"diff.committing.pushing\":[\"コミット&プッシュ中...\"],\"diff.deselect.all\":[\"すべて選択解除\"],\"diff.enter.message\":[\"コミットメッセージを入力\"],\"diff.files\":[\"ファイル\"],\"diff.files.changed\":[\"ファイルが変更されました\"],\"diff.loading\":[\"差分を読み込み中...\"],\"diff.push\":[\"プッシュ\"],\"diff.pushing\":[\"プッシュ中...\"],\"diff.select.all\":[\"すべて選択\"],\"diff.select.file\":[\"少なくとも1つのファイルを選択してください\"],\"directory_picker.current\":[\"現在:\"],\"directory_picker.loading\":[\"読み込み中...\"],\"directory_picker.no_directories\":[\"ディレクトリが見つかりません\"],\"directory_picker.select\":[\"このディレクトリを選択\"],\"directory_picker.show_hidden\":[\"隠しファイルを表示\"],\"mcp.error.load_failed\":[\"MCPサーバーの読み込みに失敗しました: \",[\"error\"]],\"mcp.no.servers\":[\"MCPサーバーが見つかりません\"],\"mcp.title\":[\"MCPサーバー\"],\"notfound.button.go_home\":[\"ホームに戻る\"],\"notfound.default.description\":[\"お探しのページは存在しないか、移動されました。\"],\"notfound.default.title\":[\"ページが見つかりません\"],\"notfound.project.description\":[\"お探しのプロジェクトは存在しません。\"],\"notfound.project.title\":[\"プロジェクトが見つかりません\"],\"notfound.session.description\":[\"お探しのセッションは存在しません。\"],\"notfound.session.title\":[\"セッションが見つかりません\"],\"notification.beep\":[\"ビープ音\"],\"notification.chime\":[\"チャイム\"],\"notification.description\":[\"Claude Code のタスクが完了した時に再生する音を選択してください\"],\"notification.none\":[\"なし\"],\"notification.ping\":[\"ピン\"],\"notification.pop\":[\"ポップ\"],\"notification.test\":[\"テスト\"],\"project.error.back_to_projects\":[\"プロジェクト一覧に戻る\"],\"project.error.description\":[\"このプロジェクトの読み込み中にエラーが発生しました\"],\"project.error.details_title\":[\"エラー詳細\"],\"project.error.error_id\":[\"エラーID:\"],\"project.error.title\":[\"プロジェクトの読み込みに失敗しました\"],\"project.error.try_again\":[\"再試行\"],\"project.new\":[\"新規プロジェクト\"],\"project.not_found.back_to_projects\":[\"プロジェクト一覧に戻る\"],\"project.not_found.description\":[\"お探しのプロジェクトは存在しないか、削除されています\"],\"project.not_found.title\":[\"プロジェクトが見つかりません\"],\"project.setup.action.setting_up\":[\"セットアップ中...\"],\"project.setup.action.setup\":[\"プロジェクトをセットアップ\"],\"project.setup.description\":[\"Claude Codeプロジェクトとしてセットアップするディレクトリまで移動してください。CLAUDE.mdが存在する場合はプロジェクトを説明し、存在しない場合は<0>/initで初期化します。\"],\"project.setup.selected_directory\":[\"選択したディレクトリ:\"],\"project.setup.title\":[\"新規プロジェクトをセットアップ\"],\"project_list.last_modified\":[\"最終更新:\"],\"project_list.messages\":[\"メッセージ:\"],\"project_list.no_projects.description\":[\"~/.claude/projectsディレクトリにClaude Codeプロジェクトが見つかりません。Claude Codeとの会話を開始して、最初のプロジェクトをセットアップしてください。\"],\"project_list.no_projects.title\":[\"プロジェクトが見つかりません\"],\"project_list.view_conversations\":[\"会話を表示\"],\"projects.page.description\":[\"Claude Codeの会話履歴とプロジェクトの操作を閲覧\"],\"projects.page.loading\":[\"プロジェクトを読み込み中...\"],\"projects.page.title\":[\"プロジェクト\"],\"scheduler.dialog.description\":[\"Claude Codeにメッセージを送信するスケジュールジョブを設定します\"],\"scheduler.dialog.title.create\":[\"スケジュールジョブを作成\"],\"scheduler.dialog.title.edit\":[\"スケジュールジョブを編集\"],\"scheduler.form.concurrency_policy\":[\"同時実行ポリシー\"],\"scheduler.form.concurrency_policy.run\":[\"実行中でも実行する\"],\"scheduler.form.concurrency_policy.skip\":[\"実行中の場合はスキップ\"],\"scheduler.form.enabled\":[\"有効化\"],\"scheduler.form.enabled.description\":[\"このスケジュールジョブを有効または無効にします\"],\"scheduler.form.message\":[\"メッセージ内容\"],\"scheduler.form.message.aria_label\":[\"補完機能付きメッセージ入力 (/でコマンド、@でファイル)\"],\"scheduler.form.message.hint\":[\"/でコマンド補完、@でファイル補完\"],\"scheduler.form.message.placeholder\":[\"Claude Codeに送信するメッセージを入力... (/でコマンド補完、@でファイル補完)\"],\"scheduler.form.name\":[\"ジョブ名\"],\"scheduler.form.name.placeholder\":[\"例: 日次レポート\"],\"scheduler.form.reserved_time\":[\"実行予定日時\"],\"scheduler.form.reserved_time.hint\":[\"指定した日時に一度だけ実行されます。実行後は自動的に削除されます\"],\"scheduler.form.schedule_type\":[\"スケジュールタイプ\"],\"scheduler.form.schedule_type.cron\":[\"定期実行 (Cron)\"],\"scheduler.form.schedule_type.reserved\":[\"予約実行\"],\"session.conversation.abort\":[\"中止\"],\"session.conversation.in.progress\":[\"会話を進行中...\"],\"session.conversation.paused\":[\"会話を一時停止中...\"],\"session.processing\":[\"Claude Codeが処理中...\"],\"session.status.paused\":[\"一時停止\"],\"session.status.running\":[\"実行中\"],\"sessions.load.more\":[\"さらに読み込む\"],\"sessions.new\":[\"新規\"],\"sessions.title\":[\"セッション\"],\"sessions.total\":[\"合計\"],\"settings.description\":[\"表示と動作の設定\"],\"settings.input.enter_key_behavior\":[\"Enterキーの動作\"],\"settings.input.enter_key_behavior.command_enter\":[\"Command+Enterで送信\"],\"settings.input.enter_key_behavior.description\":[\"メッセージ入力でのEnterキーの動作を選択\"],\"settings.input.enter_key_behavior.enter\":[\"Enterで送信\"],\"settings.input.enter_key_behavior.shift_enter\":[\"Shift+Enterで送信(デフォルト)\"],\"settings.loading\":[\"設定を読み込み中...\"],\"settings.locale\":[\"言語\"],\"settings.locale.description\":[\"お好みの言語を選択\"],\"settings.locale.en\":[\"English\"],\"settings.locale.ja\":[\"日本語\"],\"settings.notifications\":[\"通知\"],\"settings.permission.mode\":[\"権限モード\"],\"settings.permission.mode.accept_edits\":[\"編集を承認(ファイル編集を自動承認)\"],\"settings.permission.mode.bypass_permissions\":[\"権限をバイパス(プロンプトなし)\"],\"settings.permission.mode.default\":[\"デフォルト(権限を確認)\"],\"settings.permission.mode.description\":[\"ファイル操作の権限リクエストの処理方法を制御\"],\"settings.permission.mode.plan\":[\"プランモード(計画のみ)\"],\"settings.permission.mode.unavailable\":[\"お使いのClaude Codeバージョンではこの機能は利用できません。すべてのツールは自動で承認されます。\"],\"settings.section.notifications\":[\"通知\"],\"settings.section.session_display\":[\"セッション表示\"],\"settings.section.system_info\":[\"システム情報\"],\"settings.session.display\":[\"セッション表示\"],\"settings.session.hide_no_user_message\":[\"ユーザーメッセージのないセッションを非表示\"],\"settings.session.hide_no_user_message.description\":[\"ユーザーコマンドまたはメッセージを含むセッションのみを表示\"],\"settings.session.unify_same_title\":[\"同じタイトルのセッションを統合\"],\"settings.session.unify_same_title.description\":[\"同じタイトルの複数のセッションがある場合、最新のセッションのみを表示\"],\"settings.tab.title\":[\"表示と通知の設定\"],\"settings.theme\":[\"テーマ\"],\"settings.theme.dark\":[\"ダーク\"],\"settings.theme.description\":[\"お好みのカラーテーマを選択\"],\"settings.theme.light\":[\"ライト\"],\"settings.theme.system\":[\"システム\"],\"settings.title\":[\"設定\"],\"sidebar.back.to.projects\":[\"プロジェクト一覧に戻る\"],\"sidebar.show.mcp.settings\":[\"MCPサーバー設定を表示\"],\"sidebar.show.scheduler.jobs\":[\"スケジューラジョブを表示\"],\"sidebar.show.session.list\":[\"セッション一覧を表示\"],\"system.info.tab.title\":[\"システム情報を表示\"],\"system_info.available_features\":[\"利用可能機能\"],\"system_info.claude_code\":[\"Claude Code\"],\"system_info.description\":[\"バージョンと機能情報\"],\"system_info.executable_path\":[\"実行ファイル\"],\"system_info.feature.agent_sdk.description\":[\"@anthropic-ai/claude-code ではなく @anthropic-ai/claude-agent-sdk を利用します\"],\"system_info.feature.agent_sdk.title\":[\"拡張エージェントモード\"],\"system_info.feature.tool_approval.description\":[\"Claude がツールを実行する前に承認または拒否でき、アクションを完全にコントロールできます\"],\"system_info.feature.tool_approval.title\":[\"ツール実行承認\"],\"system_info.feature.unknown.description\":[\"機能情報は利用できません\"],\"system_info.feature.uuid_on_sdk_message.description\":[\"SDKメッセージに一意の識別子を追加して追跡を改善します (v1.0.86+)\"],\"system_info.feature.uuid_on_sdk_message.title\":[\"メッセージUUIDサポート\"],\"system_info.loading\":[\"システム情報を読み込んでいます...\"],\"system_info.title\":[\"システム情報\"],\"system_info.unknown\":[\"不明\"],\"system_info.version_label\":[\"バージョン\"],\"system_info.viewer_version\":[\"Claude Code Viewer\"],\"user.content.document.pdf\":[\"PDF文書\"],\"user.content.document.text\":[\"テキスト文書\"],\"user.content.image\":[\"添付画像\"],\"user.content.image.description\":[\"ユーザーが添付した画像\"],\"user.content.unsupported_document\":[\"サポートされていない文書\"],\"user.content.unsupported_document.description\":[\"文書タイプは表示がサポートされていません\"],\"user.content.unsupported_media\":[\"サポートされていないメディア\"],\"user.content.unsupported_media.description\":[\"表示がサポートされていないメディア形式です\"]}")as Messages; \ No newline at end of file diff --git a/src/server/core/file-system/functions/getDirectoryListing.ts b/src/server/core/file-system/functions/getDirectoryListing.ts index 0017a96..2763a07 100644 --- a/src/server/core/file-system/functions/getDirectoryListing.ts +++ b/src/server/core/file-system/functions/getDirectoryListing.ts @@ -17,6 +17,7 @@ export type DirectoryListingResult = { export const getDirectoryListing = async ( rootPath: string, basePath = "/", + showHidden = false, ): Promise => { const normalizedBasePath = basePath === "/" @@ -52,7 +53,7 @@ export const getDirectoryListing = async ( } for (const dirent of dirents) { - if (dirent.name.startsWith(".")) { + if (!showHidden && dirent.name.startsWith(".")) { continue; } diff --git a/src/server/core/file-system/presentation/FileSystemController.ts b/src/server/core/file-system/presentation/FileSystemController.ts index e49123e..94c9cf4 100644 --- a/src/server/core/file-system/presentation/FileSystemController.ts +++ b/src/server/core/file-system/presentation/FileSystemController.ts @@ -46,9 +46,10 @@ const LayerImpl = Effect.gen(function* () { const getDirectoryListingRoute = (options: { currentPath?: string | undefined; + showHidden?: boolean | undefined; }) => Effect.promise(async () => { - const { currentPath } = options; + const { currentPath, showHidden = false } = options; const rootPath = "/"; const defaultPath = homedir(); @@ -59,7 +60,11 @@ const LayerImpl = Effect.gen(function* () { ? targetPath.slice(rootPath.length) : targetPath; - const result = await getDirectoryListing(rootPath, relativePath); + const result = await getDirectoryListing( + rootPath, + relativePath, + showHidden, + ); return { response: result, diff --git a/src/server/core/project/presentation/ProjectController.ts b/src/server/core/project/presentation/ProjectController.ts index bf237ce..4ca4b3a 100644 --- a/src/server/core/project/presentation/ProjectController.ts +++ b/src/server/core/project/presentation/ProjectController.ts @@ -1,3 +1,4 @@ +import { FileSystem, Path } from "@effect/platform"; import { Context, Effect, Layer } from "effect"; import type { ControllerResponse } from "../../../lib/effect/toEffectResponse"; import type { InferEffect } from "../../../lib/effect/types"; @@ -15,6 +16,8 @@ const LayerImpl = Effect.gen(function* () { const userConfigService = yield* UserConfigService; const sessionRepository = yield* SessionRepository; const context = yield* ApplicationContext; + const fileSystem = yield* FileSystem.FileSystem; + const path = yield* Path.Path; const getProjects = () => Effect.gen(function* () { @@ -131,6 +134,10 @@ const LayerImpl = Effect.gen(function* () { const projectId = encodeProjectId(claudeProjectFilePath); const userConfig = yield* userConfigService.getUserConfig(); + // Check if CLAUDE.md exists in the project directory + const claudeMdPath = path.join(projectPath, "CLAUDE.md"); + const claudeMdExists = yield* fileSystem.exists(claudeMdPath); + const result = yield* claudeCodeLifeCycleService.startTask({ baseSession: { cwd: projectPath, @@ -139,7 +146,7 @@ const LayerImpl = Effect.gen(function* () { }, userConfig, input: { - text: "/init", + text: claudeMdExists ? "describe this project" : "/init", }, }); diff --git a/src/server/hono/route.ts b/src/server/hono/route.ts index f29843b..955c362 100644 --- a/src/server/hono/route.ts +++ b/src/server/hono/route.ts @@ -543,6 +543,10 @@ export const routes = (app: HonoAppType) => "query", z.object({ currentPath: z.string().optional(), + showHidden: z + .string() + .optional() + .transform((val) => val === "true"), }), ), async (c) => {