@akiojin/gwt 2.0.0 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/claude-history.d.ts +60 -0
- package/dist/claude-history.d.ts.map +1 -0
- package/dist/claude-history.js +606 -0
- package/dist/claude-history.js.map +1 -0
- package/dist/claude.d.ts +12 -0
- package/dist/claude.d.ts.map +1 -0
- package/dist/claude.js +222 -0
- package/dist/claude.js.map +1 -0
- package/dist/cli/ui/components/App.d.ts +22 -0
- package/dist/cli/ui/components/App.d.ts.map +1 -0
- package/dist/cli/ui/components/App.js +557 -0
- package/dist/cli/ui/components/App.js.map +1 -0
- package/dist/cli/ui/components/common/Confirm.d.ts +13 -0
- package/dist/cli/ui/components/common/Confirm.d.ts.map +1 -0
- package/dist/cli/ui/components/common/Confirm.js +20 -0
- package/dist/cli/ui/components/common/Confirm.js.map +1 -0
- package/dist/cli/ui/components/common/ErrorBoundary.d.ts +23 -0
- package/dist/cli/ui/components/common/ErrorBoundary.d.ts.map +1 -0
- package/dist/cli/ui/components/common/ErrorBoundary.js +37 -0
- package/dist/cli/ui/components/common/ErrorBoundary.js.map +1 -0
- package/dist/cli/ui/components/common/Input.d.ts +14 -0
- package/dist/cli/ui/components/common/Input.d.ts.map +1 -0
- package/dist/cli/ui/components/common/Input.js +14 -0
- package/dist/cli/ui/components/common/Input.js.map +1 -0
- package/dist/cli/ui/components/common/LoadingIndicator.d.ts +19 -0
- package/dist/cli/ui/components/common/LoadingIndicator.d.ts.map +1 -0
- package/dist/cli/ui/components/common/LoadingIndicator.js +61 -0
- package/dist/cli/ui/components/common/LoadingIndicator.js.map +1 -0
- package/dist/cli/ui/components/common/Select.d.ts +30 -0
- package/dist/cli/ui/components/common/Select.d.ts.map +1 -0
- package/dist/cli/ui/components/common/Select.js +140 -0
- package/dist/cli/ui/components/common/Select.js.map +1 -0
- package/dist/cli/ui/components/parts/Footer.d.ts +15 -0
- package/dist/cli/ui/components/parts/Footer.d.ts.map +1 -0
- package/dist/cli/ui/components/parts/Footer.js +20 -0
- package/dist/cli/ui/components/parts/Footer.js.map +1 -0
- package/dist/cli/ui/components/parts/Header.d.ts +29 -0
- package/dist/cli/ui/components/parts/Header.d.ts.map +1 -0
- package/dist/cli/ui/components/parts/Header.js +19 -0
- package/dist/cli/ui/components/parts/Header.js.map +1 -0
- package/dist/cli/ui/components/parts/MergeStatusList.d.ts +13 -0
- package/dist/cli/ui/components/parts/MergeStatusList.d.ts.map +1 -0
- package/dist/cli/ui/components/parts/MergeStatusList.js +52 -0
- package/dist/cli/ui/components/parts/MergeStatusList.js.map +1 -0
- package/dist/cli/ui/components/parts/ProgressBar.d.ts +13 -0
- package/dist/cli/ui/components/parts/ProgressBar.d.ts.map +1 -0
- package/dist/cli/ui/components/parts/ProgressBar.js +53 -0
- package/dist/cli/ui/components/parts/ProgressBar.js.map +1 -0
- package/dist/cli/ui/components/parts/ScrollableList.d.ts +12 -0
- package/dist/cli/ui/components/parts/ScrollableList.d.ts.map +1 -0
- package/dist/cli/ui/components/parts/ScrollableList.js +11 -0
- package/dist/cli/ui/components/parts/ScrollableList.js.map +1 -0
- package/dist/cli/ui/components/parts/Stats.d.ts +13 -0
- package/dist/cli/ui/components/parts/Stats.d.ts.map +1 -0
- package/dist/cli/ui/components/parts/Stats.js +42 -0
- package/dist/cli/ui/components/parts/Stats.js.map +1 -0
- package/dist/cli/ui/components/screens/AIToolSelectorScreen.d.ts +20 -0
- package/dist/cli/ui/components/screens/AIToolSelectorScreen.d.ts.map +1 -0
- package/dist/cli/ui/components/screens/AIToolSelectorScreen.js +77 -0
- package/dist/cli/ui/components/screens/AIToolSelectorScreen.js.map +1 -0
- package/dist/cli/ui/components/screens/BatchMergeProgressScreen.d.ts +14 -0
- package/dist/cli/ui/components/screens/BatchMergeProgressScreen.d.ts.map +1 -0
- package/dist/cli/ui/components/screens/BatchMergeProgressScreen.js +41 -0
- package/dist/cli/ui/components/screens/BatchMergeProgressScreen.js.map +1 -0
- package/dist/cli/ui/components/screens/BatchMergeResultScreen.d.ts +14 -0
- package/dist/cli/ui/components/screens/BatchMergeResultScreen.d.ts.map +1 -0
- package/dist/cli/ui/components/screens/BatchMergeResultScreen.js +71 -0
- package/dist/cli/ui/components/screens/BatchMergeResultScreen.js.map +1 -0
- package/dist/cli/ui/components/screens/BranchCreatorScreen.d.ts +15 -0
- package/dist/cli/ui/components/screens/BranchCreatorScreen.d.ts.map +1 -0
- package/dist/cli/ui/components/screens/BranchCreatorScreen.js +142 -0
- package/dist/cli/ui/components/screens/BranchCreatorScreen.js.map +1 -0
- package/dist/cli/ui/components/screens/BranchListScreen.d.ts +39 -0
- package/dist/cli/ui/components/screens/BranchListScreen.d.ts.map +1 -0
- package/dist/cli/ui/components/screens/BranchListScreen.js +172 -0
- package/dist/cli/ui/components/screens/BranchListScreen.js.map +1 -0
- package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.d.ts +29 -0
- package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.d.ts.map +1 -0
- package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.js +92 -0
- package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.js.map +1 -0
- package/dist/cli/ui/components/screens/PRCleanupScreen.d.ts +23 -0
- package/dist/cli/ui/components/screens/PRCleanupScreen.d.ts.map +1 -0
- package/dist/cli/ui/components/screens/PRCleanupScreen.js +94 -0
- package/dist/cli/ui/components/screens/PRCleanupScreen.js.map +1 -0
- package/dist/cli/ui/components/screens/SessionSelectorScreen.d.ts +17 -0
- package/dist/cli/ui/components/screens/SessionSelectorScreen.d.ts.map +1 -0
- package/dist/cli/ui/components/screens/SessionSelectorScreen.js +55 -0
- package/dist/cli/ui/components/screens/SessionSelectorScreen.js.map +1 -0
- package/dist/cli/ui/components/screens/WorktreeManagerScreen.d.ts +20 -0
- package/dist/cli/ui/components/screens/WorktreeManagerScreen.d.ts.map +1 -0
- package/dist/cli/ui/components/screens/WorktreeManagerScreen.js +65 -0
- package/dist/cli/ui/components/screens/WorktreeManagerScreen.js.map +1 -0
- package/dist/cli/ui/hooks/useBatchMerge.d.ts +17 -0
- package/dist/cli/ui/hooks/useBatchMerge.d.ts.map +1 -0
- package/dist/cli/ui/hooks/useBatchMerge.js +77 -0
- package/dist/cli/ui/hooks/useBatchMerge.js.map +1 -0
- package/dist/cli/ui/hooks/useGitData.d.ts +20 -0
- package/dist/cli/ui/hooks/useGitData.d.ts.map +1 -0
- package/dist/cli/ui/hooks/useGitData.js +116 -0
- package/dist/cli/ui/hooks/useGitData.js.map +1 -0
- package/dist/cli/ui/hooks/useScreenState.d.ts +12 -0
- package/dist/cli/ui/hooks/useScreenState.d.ts.map +1 -0
- package/dist/cli/ui/hooks/useScreenState.js +30 -0
- package/dist/cli/ui/hooks/useScreenState.js.map +1 -0
- package/dist/cli/ui/hooks/useTerminalSize.d.ts +9 -0
- package/dist/cli/ui/hooks/useTerminalSize.d.ts.map +1 -0
- package/dist/cli/ui/hooks/useTerminalSize.js +24 -0
- package/dist/cli/ui/hooks/useTerminalSize.js.map +1 -0
- package/dist/cli/ui/screens/BranchActionSelectorScreen.d.ts +21 -0
- package/dist/cli/ui/screens/BranchActionSelectorScreen.d.ts.map +1 -0
- package/dist/cli/ui/screens/BranchActionSelectorScreen.js +61 -0
- package/dist/cli/ui/screens/BranchActionSelectorScreen.js.map +1 -0
- package/dist/cli/ui/types.d.ts +245 -0
- package/dist/cli/ui/types.d.ts.map +1 -0
- package/dist/cli/ui/types.js +2 -0
- package/dist/cli/ui/types.js.map +1 -0
- package/dist/cli/ui/utils/baseBranch.d.ts +4 -0
- package/dist/cli/ui/utils/baseBranch.d.ts.map +1 -0
- package/dist/cli/ui/utils/baseBranch.js +17 -0
- package/dist/cli/ui/utils/baseBranch.js.map +1 -0
- package/dist/cli/ui/utils/branchFormatter.d.ts +13 -0
- package/dist/cli/ui/utils/branchFormatter.d.ts.map +1 -0
- package/dist/cli/ui/utils/branchFormatter.js +202 -0
- package/dist/cli/ui/utils/branchFormatter.js.map +1 -0
- package/dist/cli/ui/utils/statisticsCalculator.d.ts +9 -0
- package/dist/cli/ui/utils/statisticsCalculator.d.ts.map +1 -0
- package/dist/cli/ui/utils/statisticsCalculator.js +37 -0
- package/dist/cli/ui/utils/statisticsCalculator.js.map +1 -0
- package/dist/client/assets/index-CqaYsI0z.js +81 -0
- package/dist/client/assets/index-Dy3OxWpP.css +32 -0
- package/dist/client/index.html +13 -0
- package/dist/codex.d.ts +12 -0
- package/dist/codex.d.ts.map +1 -0
- package/dist/codex.js +106 -0
- package/dist/codex.js.map +1 -0
- package/dist/config/builtin-tools.d.ts +19 -0
- package/dist/config/builtin-tools.d.ts.map +1 -0
- package/dist/config/builtin-tools.js +40 -0
- package/dist/config/builtin-tools.js.map +1 -0
- package/dist/config/constants.d.ts +74 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +90 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/env-history.d.ts +4 -0
- package/dist/config/env-history.d.ts.map +1 -0
- package/dist/config/env-history.js +34 -0
- package/dist/config/env-history.js.map +1 -0
- package/dist/config/index.d.ts +24 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +144 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/tools.d.ts +40 -0
- package/dist/config/tools.d.ts.map +1 -0
- package/dist/config/tools.js +238 -0
- package/dist/config/tools.js.map +1 -0
- package/dist/git.d.ts +145 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +871 -0
- package/dist/git.js.map +1 -0
- package/dist/github.d.ts +14 -0
- package/dist/github.d.ts.map +1 -0
- package/dist/github.js +123 -0
- package/dist/github.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +510 -0
- package/dist/index.js.map +1 -0
- package/dist/launcher.d.ts +30 -0
- package/dist/launcher.d.ts.map +1 -0
- package/dist/launcher.js +116 -0
- package/dist/launcher.js.map +1 -0
- package/dist/repositories/git.repository.d.ts +38 -0
- package/dist/repositories/git.repository.d.ts.map +1 -0
- package/dist/repositories/git.repository.js +117 -0
- package/dist/repositories/git.repository.js.map +1 -0
- package/dist/repositories/github.repository.d.ts +16 -0
- package/dist/repositories/github.repository.d.ts.map +1 -0
- package/dist/repositories/github.repository.js +61 -0
- package/dist/repositories/github.repository.js.map +1 -0
- package/dist/repositories/worktree.repository.d.ts +18 -0
- package/dist/repositories/worktree.repository.d.ts.map +1 -0
- package/dist/repositories/worktree.repository.js +57 -0
- package/dist/repositories/worktree.repository.js.map +1 -0
- package/dist/services/BatchMergeService.d.ts +45 -0
- package/dist/services/BatchMergeService.d.ts.map +1 -0
- package/dist/services/BatchMergeService.js +197 -0
- package/dist/services/BatchMergeService.js.map +1 -0
- package/dist/services/WorktreeOrchestrator.d.ts +37 -0
- package/dist/services/WorktreeOrchestrator.d.ts.map +1 -0
- package/dist/services/WorktreeOrchestrator.js +74 -0
- package/dist/services/WorktreeOrchestrator.js.map +1 -0
- package/dist/services/dependency-installer.d.ts +26 -0
- package/dist/services/dependency-installer.d.ts.map +1 -0
- package/dist/services/dependency-installer.js +139 -0
- package/dist/services/dependency-installer.js.map +1 -0
- package/dist/services/git.service.d.ts +27 -0
- package/dist/services/git.service.d.ts.map +1 -0
- package/dist/services/git.service.js +95 -0
- package/dist/services/git.service.js.map +1 -0
- package/dist/services/github.service.d.ts +14 -0
- package/dist/services/github.service.d.ts.map +1 -0
- package/dist/services/github.service.js +52 -0
- package/dist/services/github.service.js.map +1 -0
- package/dist/services/worktree.service.d.ts +20 -0
- package/dist/services/worktree.service.d.ts.map +1 -0
- package/dist/services/worktree.service.js +52 -0
- package/dist/services/worktree.service.js.map +1 -0
- package/dist/types/api.d.ts +211 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +8 -0
- package/dist/types/api.js.map +1 -0
- package/dist/types/tools.d.ts +201 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +8 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/utils/spinner.d.ts +6 -0
- package/dist/utils/spinner.d.ts.map +1 -0
- package/dist/utils/spinner.js +47 -0
- package/dist/utils/spinner.js.map +1 -0
- package/dist/utils/terminal.d.ts +20 -0
- package/dist/utils/terminal.d.ts.map +1 -0
- package/dist/utils/terminal.js +232 -0
- package/dist/utils/terminal.js.map +1 -0
- package/dist/utils.d.ts +9 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +48 -0
- package/dist/utils.js.map +1 -0
- package/dist/web/client/src/components/BranchGraph.d.ts +8 -0
- package/dist/web/client/src/components/BranchGraph.d.ts.map +1 -0
- package/dist/web/client/src/components/BranchGraph.js +125 -0
- package/dist/web/client/src/components/BranchGraph.js.map +1 -0
- package/dist/web/client/src/components/EnvEditor.d.ts +20 -0
- package/dist/web/client/src/components/EnvEditor.d.ts.map +1 -0
- package/dist/web/client/src/components/EnvEditor.js +65 -0
- package/dist/web/client/src/components/EnvEditor.js.map +1 -0
- package/dist/web/client/src/components/Terminal.d.ts +15 -0
- package/dist/web/client/src/components/Terminal.d.ts.map +1 -0
- package/dist/web/client/src/components/Terminal.js +112 -0
- package/dist/web/client/src/components/Terminal.js.map +1 -0
- package/dist/web/client/src/hooks/useBranches.d.ts +16 -0
- package/dist/web/client/src/hooks/useBranches.d.ts.map +1 -0
- package/dist/web/client/src/hooks/useBranches.js +35 -0
- package/dist/web/client/src/hooks/useBranches.js.map +1 -0
- package/dist/web/client/src/hooks/useConfig.d.ts +13 -0
- package/dist/web/client/src/hooks/useConfig.d.ts.map +1 -0
- package/dist/web/client/src/hooks/useConfig.js +27 -0
- package/dist/web/client/src/hooks/useConfig.js.map +1 -0
- package/dist/web/client/src/hooks/useSessions.d.ts +21 -0
- package/dist/web/client/src/hooks/useSessions.d.ts.map +1 -0
- package/dist/web/client/src/hooks/useSessions.js +49 -0
- package/dist/web/client/src/hooks/useSessions.js.map +1 -0
- package/dist/web/client/src/hooks/useWorktrees.d.ts +17 -0
- package/dist/web/client/src/hooks/useWorktrees.d.ts.map +1 -0
- package/dist/web/client/src/hooks/useWorktrees.js +41 -0
- package/dist/web/client/src/hooks/useWorktrees.js.map +1 -0
- package/dist/web/client/src/lib/api.d.ts +82 -0
- package/dist/web/client/src/lib/api.d.ts.map +1 -0
- package/dist/web/client/src/lib/api.js +147 -0
- package/dist/web/client/src/lib/api.js.map +1 -0
- package/dist/web/client/src/lib/websocket.d.ts +52 -0
- package/dist/web/client/src/lib/websocket.d.ts.map +1 -0
- package/dist/web/client/src/lib/websocket.js +137 -0
- package/dist/web/client/src/lib/websocket.js.map +1 -0
- package/dist/web/client/src/main.d.ts +2 -0
- package/dist/web/client/src/main.d.ts.map +1 -0
- package/dist/web/client/src/main.js +23 -0
- package/dist/web/client/src/main.js.map +1 -0
- package/dist/web/client/src/pages/BranchDetailPage.d.ts +3 -0
- package/dist/web/client/src/pages/BranchDetailPage.d.ts.map +1 -0
- package/dist/web/client/src/pages/BranchDetailPage.js +519 -0
- package/dist/web/client/src/pages/BranchDetailPage.js.map +1 -0
- package/dist/web/client/src/pages/BranchListPage.d.ts +3 -0
- package/dist/web/client/src/pages/BranchListPage.d.ts.map +1 -0
- package/dist/web/client/src/pages/BranchListPage.js +150 -0
- package/dist/web/client/src/pages/BranchListPage.js.map +1 -0
- package/dist/web/client/src/pages/ConfigManagementPage.d.ts +3 -0
- package/dist/web/client/src/pages/ConfigManagementPage.d.ts.map +1 -0
- package/dist/web/client/src/pages/ConfigManagementPage.js +125 -0
- package/dist/web/client/src/pages/ConfigManagementPage.js.map +1 -0
- package/dist/web/client/src/router.d.ts +9 -0
- package/dist/web/client/src/router.d.ts.map +1 -0
- package/dist/web/client/src/router.js +27 -0
- package/dist/web/client/src/router.js.map +1 -0
- package/dist/web/client/vite.config.d.ts +3 -0
- package/dist/web/client/vite.config.d.ts.map +1 -0
- package/dist/web/client/vite.config.js +21 -0
- package/dist/web/client/vite.config.js.map +1 -0
- package/dist/web/server/env/importer.d.ts +3 -0
- package/dist/web/server/env/importer.d.ts.map +1 -0
- package/dist/web/server/env/importer.js +47 -0
- package/dist/web/server/env/importer.js.map +1 -0
- package/dist/web/server/index.d.ts +11 -0
- package/dist/web/server/index.d.ts.map +1 -0
- package/dist/web/server/index.js +62 -0
- package/dist/web/server/index.js.map +1 -0
- package/dist/web/server/pty/manager.d.ts +50 -0
- package/dist/web/server/pty/manager.d.ts.map +1 -0
- package/dist/web/server/pty/manager.js +143 -0
- package/dist/web/server/pty/manager.js.map +1 -0
- package/dist/web/server/routes/branches.d.ts +11 -0
- package/dist/web/server/routes/branches.d.ts.map +1 -0
- package/dist/web/server/routes/branches.js +97 -0
- package/dist/web/server/routes/branches.js.map +1 -0
- package/dist/web/server/routes/config.d.ts +6 -0
- package/dist/web/server/routes/config.d.ts.map +1 -0
- package/dist/web/server/routes/config.js +162 -0
- package/dist/web/server/routes/config.js.map +1 -0
- package/dist/web/server/routes/index.d.ts +13 -0
- package/dist/web/server/routes/index.d.ts.map +1 -0
- package/dist/web/server/routes/index.js +29 -0
- package/dist/web/server/routes/index.js.map +1 -0
- package/dist/web/server/routes/sessions.d.ts +12 -0
- package/dist/web/server/routes/sessions.d.ts.map +1 -0
- package/dist/web/server/routes/sessions.js +95 -0
- package/dist/web/server/routes/sessions.js.map +1 -0
- package/dist/web/server/routes/worktrees.d.ts +11 -0
- package/dist/web/server/routes/worktrees.d.ts.map +1 -0
- package/dist/web/server/routes/worktrees.js +80 -0
- package/dist/web/server/routes/worktrees.js.map +1 -0
- package/dist/web/server/services/branches.d.ts +17 -0
- package/dist/web/server/services/branches.d.ts.map +1 -0
- package/dist/web/server/services/branches.js +262 -0
- package/dist/web/server/services/branches.js.map +1 -0
- package/dist/web/server/services/worktrees.d.ts +24 -0
- package/dist/web/server/services/worktrees.d.ts.map +1 -0
- package/dist/web/server/services/worktrees.js +60 -0
- package/dist/web/server/services/worktrees.js.map +1 -0
- package/dist/web/server/websocket/handler.d.ts +41 -0
- package/dist/web/server/websocket/handler.d.ts.map +1 -0
- package/dist/web/server/websocket/handler.js +143 -0
- package/dist/web/server/websocket/handler.js.map +1 -0
- package/dist/worktree.d.ts +53 -0
- package/dist/worktree.d.ts.map +1 -0
- package/dist/worktree.js +489 -0
- package/dist/worktree.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { readFile, writeFile, mkdir } from "node:fs/promises";
|
|
4
|
+
const DEFAULT_CONFIG = {
|
|
5
|
+
defaultBaseBranch: "main",
|
|
6
|
+
skipPermissions: false,
|
|
7
|
+
enableGitHubIntegration: true,
|
|
8
|
+
enableDebugMode: false,
|
|
9
|
+
worktreeNamingPattern: "{repo}-{branch}",
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* 設定ファイルを読み込む
|
|
13
|
+
*/
|
|
14
|
+
export async function loadConfig() {
|
|
15
|
+
const configPaths = [
|
|
16
|
+
path.join(process.cwd(), ".gwt.json"),
|
|
17
|
+
path.join(process.cwd(), ".claude-worktree.json"), // 後方互換性
|
|
18
|
+
path.join(homedir(), ".config", "gwt", "config.json"),
|
|
19
|
+
path.join(homedir(), ".config", "claude-worktree", "config.json"), // 後方互換性
|
|
20
|
+
path.join(homedir(), ".gwt.json"),
|
|
21
|
+
path.join(homedir(), ".claude-worktree.json"), // 後方互換性
|
|
22
|
+
];
|
|
23
|
+
for (const configPath of configPaths) {
|
|
24
|
+
try {
|
|
25
|
+
const content = await readFile(configPath, "utf-8");
|
|
26
|
+
const userConfig = JSON.parse(content);
|
|
27
|
+
return { ...DEFAULT_CONFIG, ...userConfig };
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
// 設定ファイルが見つからない場合は次を試す
|
|
31
|
+
if (process.env.DEBUG_CONFIG) {
|
|
32
|
+
console.error(`Failed to load config from ${configPath}:`, error instanceof Error ? error.message : String(error));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// 環境変数からも読み込み
|
|
37
|
+
return {
|
|
38
|
+
...DEFAULT_CONFIG,
|
|
39
|
+
defaultBaseBranch: process.env.CLAUDE_WORKTREE_BASE_BRANCH ||
|
|
40
|
+
DEFAULT_CONFIG.defaultBaseBranch,
|
|
41
|
+
skipPermissions: process.env.CLAUDE_WORKTREE_SKIP_PERMISSIONS === "true",
|
|
42
|
+
enableGitHubIntegration: process.env.CLAUDE_WORKTREE_GITHUB !== "false",
|
|
43
|
+
enableDebugMode: process.env.DEBUG_CLEANUP === "true" || process.env.DEBUG === "true",
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* 設定値を取得する
|
|
48
|
+
*/
|
|
49
|
+
let cachedConfig = null;
|
|
50
|
+
export async function getConfig() {
|
|
51
|
+
if (!cachedConfig) {
|
|
52
|
+
cachedConfig = await loadConfig();
|
|
53
|
+
}
|
|
54
|
+
return cachedConfig;
|
|
55
|
+
}
|
|
56
|
+
export function resetConfigCache() {
|
|
57
|
+
cachedConfig = null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* セッションデータの保存・読み込み
|
|
61
|
+
*/
|
|
62
|
+
function getSessionFilePath(repositoryRoot) {
|
|
63
|
+
const sessionDir = path.join(homedir(), ".config", "gwt", "sessions");
|
|
64
|
+
const repoName = path.basename(repositoryRoot);
|
|
65
|
+
const repoHash = Buffer.from(repositoryRoot)
|
|
66
|
+
.toString("base64")
|
|
67
|
+
.replace(/[/+=]/g, "_");
|
|
68
|
+
return path.join(sessionDir, `${repoName}_${repoHash}.json`);
|
|
69
|
+
}
|
|
70
|
+
export async function saveSession(sessionData) {
|
|
71
|
+
try {
|
|
72
|
+
const sessionPath = getSessionFilePath(sessionData.repositoryRoot);
|
|
73
|
+
const sessionDir = path.dirname(sessionPath);
|
|
74
|
+
// ディレクトリを作成
|
|
75
|
+
await mkdir(sessionDir, { recursive: true });
|
|
76
|
+
await writeFile(sessionPath, JSON.stringify(sessionData, null, 2), "utf-8");
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
// セッション保存の失敗は致命的ではないため、エラーをログに出力するのみ
|
|
80
|
+
if (process.env.DEBUG_SESSION) {
|
|
81
|
+
console.error("Failed to save session:", error instanceof Error ? error.message : String(error));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export async function loadSession(repositoryRoot) {
|
|
86
|
+
try {
|
|
87
|
+
const sessionPath = getSessionFilePath(repositoryRoot);
|
|
88
|
+
const content = await readFile(sessionPath, "utf-8");
|
|
89
|
+
const sessionData = JSON.parse(content);
|
|
90
|
+
// セッションが24時間以内のもののみ有効とする
|
|
91
|
+
const now = Date.now();
|
|
92
|
+
const sessionAge = now - sessionData.timestamp;
|
|
93
|
+
const maxAge = 24 * 60 * 60 * 1000; // 24時間
|
|
94
|
+
if (sessionAge > maxAge) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
return sessionData;
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
if (process.env.DEBUG_SESSION) {
|
|
101
|
+
console.error("Failed to load session:", error instanceof Error ? error.message : String(error));
|
|
102
|
+
}
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
export async function getAllSessions() {
|
|
107
|
+
try {
|
|
108
|
+
const sessionDir = path.join(homedir(), ".config", "gwt", "sessions");
|
|
109
|
+
const { readdir } = await import("node:fs/promises");
|
|
110
|
+
const files = await readdir(sessionDir);
|
|
111
|
+
const sessions = [];
|
|
112
|
+
const now = Date.now();
|
|
113
|
+
const maxAge = 24 * 60 * 60 * 1000; // 24時間
|
|
114
|
+
for (const file of files) {
|
|
115
|
+
if (!file.endsWith(".json"))
|
|
116
|
+
continue;
|
|
117
|
+
try {
|
|
118
|
+
const filePath = path.join(sessionDir, file);
|
|
119
|
+
const content = await readFile(filePath, "utf-8");
|
|
120
|
+
const sessionData = JSON.parse(content);
|
|
121
|
+
// 有効期限内のセッションのみ
|
|
122
|
+
const sessionAge = now - sessionData.timestamp;
|
|
123
|
+
if (sessionAge <= maxAge) {
|
|
124
|
+
sessions.push(sessionData);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
if (process.env.DEBUG_SESSION) {
|
|
129
|
+
console.error(`Failed to load session file ${file}:`, error instanceof Error ? error.message : String(error));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// 最新のものから順にソート
|
|
134
|
+
sessions.sort((a, b) => b.timestamp - a.timestamp);
|
|
135
|
+
return sessions;
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
if (process.env.DEBUG_SESSION) {
|
|
139
|
+
console.error("Failed to get all sessions:", error instanceof Error ? error.message : String(error));
|
|
140
|
+
}
|
|
141
|
+
return [];
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* カスタムツール設定管理
|
|
3
|
+
*
|
|
4
|
+
* ~/.gwt/tools.jsonから設定を読み込み、
|
|
5
|
+
* ビルトインツールと統合して管理します。
|
|
6
|
+
*/
|
|
7
|
+
import type { ToolsConfig, CustomAITool, AIToolConfig } from "../types/tools.js";
|
|
8
|
+
/**
|
|
9
|
+
* ツール設定ファイルのパス
|
|
10
|
+
* 環境変数の優先順位: GWT_HOME > CLAUDE_WORKTREE_HOME (後方互換性) > ホームディレクトリ
|
|
11
|
+
*/
|
|
12
|
+
export declare const WORKTREE_HOME: string;
|
|
13
|
+
export declare const CONFIG_DIR: string;
|
|
14
|
+
export declare const TOOLS_CONFIG_PATH: string;
|
|
15
|
+
/**
|
|
16
|
+
* ツール設定を読み込む
|
|
17
|
+
*
|
|
18
|
+
* ~/.gwt/tools.jsonから設定を読み込みます。
|
|
19
|
+
* ファイルが存在しない場合は空配列を返します。
|
|
20
|
+
*
|
|
21
|
+
* @returns ToolsConfig
|
|
22
|
+
* @throws JSON構文エラー時
|
|
23
|
+
*/
|
|
24
|
+
export declare function loadToolsConfig(): Promise<ToolsConfig>;
|
|
25
|
+
export declare function saveToolsConfig(config: ToolsConfig): Promise<void>;
|
|
26
|
+
export declare function getSharedEnvironment(): Promise<Record<string, string>>;
|
|
27
|
+
/**
|
|
28
|
+
* IDでツールを検索
|
|
29
|
+
*
|
|
30
|
+
* @param id - ツールID
|
|
31
|
+
* @returns ツール設定(見つからない場合はundefined)
|
|
32
|
+
*/
|
|
33
|
+
export declare function getToolById(id: string): Promise<CustomAITool | undefined>;
|
|
34
|
+
/**
|
|
35
|
+
* すべてのツール(ビルトイン+カスタム)を取得
|
|
36
|
+
*
|
|
37
|
+
* @returns AIToolConfigの配列
|
|
38
|
+
*/
|
|
39
|
+
export declare function getAllTools(): Promise<AIToolConfig[]>;
|
|
40
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/config/tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACb,MAAM,mBAAmB,CAAC;AAG3B;;;GAGG;AACH,eAAO,MAAM,aAAa,QAKX,CAAC;AAGhB,eAAO,MAAM,UAAU,QAAmC,CAAC;AAC3D,eAAO,MAAM,iBAAiB,QAAsC,CAAC;AA0CrE;;;;;;;;GAQG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC,CAgC5D;AA2DD,wBAAsB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAcxE;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAG5E;AAsDD;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAUnC;AAED;;;;GAIG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAsB3D"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* カスタムツール設定管理
|
|
3
|
+
*
|
|
4
|
+
* ~/.gwt/tools.jsonから設定を読み込み、
|
|
5
|
+
* ビルトインツールと統合して管理します。
|
|
6
|
+
*/
|
|
7
|
+
import { homedir } from "node:os";
|
|
8
|
+
import path from "node:path";
|
|
9
|
+
import { readFile, writeFile, mkdir, rename, access, cp } from "node:fs/promises";
|
|
10
|
+
import { BUILTIN_TOOLS } from "./builtin-tools.js";
|
|
11
|
+
/**
|
|
12
|
+
* ツール設定ファイルのパス
|
|
13
|
+
* 環境変数の優先順位: GWT_HOME > CLAUDE_WORKTREE_HOME (後方互換性) > ホームディレクトリ
|
|
14
|
+
*/
|
|
15
|
+
export const WORKTREE_HOME = (process.env.GWT_HOME && process.env.GWT_HOME.trim().length > 0)
|
|
16
|
+
? process.env.GWT_HOME
|
|
17
|
+
: (process.env.CLAUDE_WORKTREE_HOME && process.env.CLAUDE_WORKTREE_HOME.trim().length > 0)
|
|
18
|
+
? process.env.CLAUDE_WORKTREE_HOME
|
|
19
|
+
: homedir();
|
|
20
|
+
const LEGACY_CONFIG_DIR = path.join(homedir(), ".claude-worktree");
|
|
21
|
+
export const CONFIG_DIR = path.join(WORKTREE_HOME, ".gwt");
|
|
22
|
+
export const TOOLS_CONFIG_PATH = path.join(CONFIG_DIR, "tools.json");
|
|
23
|
+
const TEMP_CONFIG_PATH = `${TOOLS_CONFIG_PATH}.tmp`;
|
|
24
|
+
/**
|
|
25
|
+
* レガシー設定ディレクトリから新しいディレクトリへ移行
|
|
26
|
+
*/
|
|
27
|
+
async function migrateLegacyConfig() {
|
|
28
|
+
try {
|
|
29
|
+
// 新しいディレクトリが既に存在する場合は移行不要
|
|
30
|
+
try {
|
|
31
|
+
await access(CONFIG_DIR);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// 新しいディレクトリが存在しない場合は続行
|
|
36
|
+
}
|
|
37
|
+
// レガシーディレクトリの存在を確認
|
|
38
|
+
try {
|
|
39
|
+
await access(LEGACY_CONFIG_DIR);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// レガシーディレクトリも存在しない場合は移行不要
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
// レガシーディレクトリを新しいディレクトリにコピー
|
|
46
|
+
await mkdir(path.dirname(CONFIG_DIR), { recursive: true });
|
|
47
|
+
await cp(LEGACY_CONFIG_DIR, CONFIG_DIR, { recursive: true });
|
|
48
|
+
console.log(`✅ Migrated configuration from ${LEGACY_CONFIG_DIR} to ${CONFIG_DIR}`);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
// 移行に失敗しても継続(エラーログのみ)
|
|
52
|
+
if (process.env.DEBUG) {
|
|
53
|
+
console.error("Failed to migrate legacy config:", error);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const DEFAULT_CONFIG = {
|
|
58
|
+
version: "1.0.0",
|
|
59
|
+
env: {},
|
|
60
|
+
customTools: [],
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* ツール設定を読み込む
|
|
64
|
+
*
|
|
65
|
+
* ~/.gwt/tools.jsonから設定を読み込みます。
|
|
66
|
+
* ファイルが存在しない場合は空配列を返します。
|
|
67
|
+
*
|
|
68
|
+
* @returns ToolsConfig
|
|
69
|
+
* @throws JSON構文エラー時
|
|
70
|
+
*/
|
|
71
|
+
export async function loadToolsConfig() {
|
|
72
|
+
// 最初の呼び出し時にレガシー設定の移行を試行
|
|
73
|
+
await migrateLegacyConfig();
|
|
74
|
+
try {
|
|
75
|
+
const content = await readFile(TOOLS_CONFIG_PATH, "utf-8");
|
|
76
|
+
const config = JSON.parse(content);
|
|
77
|
+
// 検証
|
|
78
|
+
validateToolsConfig(config);
|
|
79
|
+
return {
|
|
80
|
+
...config,
|
|
81
|
+
env: config.env ?? {},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
// ファイルが存在しない場合は空配列を返す
|
|
86
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT") {
|
|
87
|
+
return { ...DEFAULT_CONFIG };
|
|
88
|
+
}
|
|
89
|
+
// JSON構文エラーの場合
|
|
90
|
+
if (error instanceof SyntaxError) {
|
|
91
|
+
throw new Error(`Failed to parse tools.json: ${error.message}\n` +
|
|
92
|
+
`Please check the JSON syntax in ${TOOLS_CONFIG_PATH}`);
|
|
93
|
+
}
|
|
94
|
+
// その他のエラー
|
|
95
|
+
throw error;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* ToolsConfig全体を検証
|
|
100
|
+
*
|
|
101
|
+
* @param config - 検証対象の設定
|
|
102
|
+
* @throws 検証エラー時
|
|
103
|
+
*/
|
|
104
|
+
function validateToolsConfig(config) {
|
|
105
|
+
// versionフィールドの検証
|
|
106
|
+
if (!config.version || typeof config.version !== "string") {
|
|
107
|
+
throw new Error("version field is required and must be a string");
|
|
108
|
+
}
|
|
109
|
+
// customToolsフィールドの検証
|
|
110
|
+
if (!Array.isArray(config.customTools)) {
|
|
111
|
+
throw new Error("customTools field must be an array");
|
|
112
|
+
}
|
|
113
|
+
if (config.env && typeof config.env !== "object") {
|
|
114
|
+
throw new Error("env field must be an object map of key/value pairs");
|
|
115
|
+
}
|
|
116
|
+
if (config.env) {
|
|
117
|
+
for (const [key, value] of Object.entries(config.env)) {
|
|
118
|
+
if (!key || typeof key !== "string") {
|
|
119
|
+
throw new Error("env keys must be non-empty strings");
|
|
120
|
+
}
|
|
121
|
+
if (typeof value !== "string") {
|
|
122
|
+
throw new Error(`env value for key "${key}" must be a string`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// 各ツールの検証
|
|
127
|
+
const seenIds = new Set();
|
|
128
|
+
for (const tool of config.customTools) {
|
|
129
|
+
validateCustomAITool(tool);
|
|
130
|
+
// ID重複チェック
|
|
131
|
+
if (seenIds.has(tool.id)) {
|
|
132
|
+
throw new Error(`Duplicate tool ID found: "${tool.id}"\n` +
|
|
133
|
+
`Each tool must have a unique ID in ${TOOLS_CONFIG_PATH}`);
|
|
134
|
+
}
|
|
135
|
+
seenIds.add(tool.id);
|
|
136
|
+
// ビルトインツールとのID重複チェック
|
|
137
|
+
const builtinIds = BUILTIN_TOOLS.map((t) => t.id);
|
|
138
|
+
if (builtinIds.includes(tool.id)) {
|
|
139
|
+
throw new Error(`Tool ID "${tool.id}" conflicts with builtin tool\n` +
|
|
140
|
+
`Builtin tool IDs: ${builtinIds.join(", ")}`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
export async function saveToolsConfig(config) {
|
|
145
|
+
const normalized = {
|
|
146
|
+
version: config.version,
|
|
147
|
+
updatedAt: config.updatedAt ?? new Date().toISOString(),
|
|
148
|
+
env: config.env ?? {},
|
|
149
|
+
customTools: config.customTools,
|
|
150
|
+
};
|
|
151
|
+
validateToolsConfig(normalized);
|
|
152
|
+
await mkdir(CONFIG_DIR, { recursive: true });
|
|
153
|
+
const payload = JSON.stringify(normalized, null, 2);
|
|
154
|
+
await writeFile(TEMP_CONFIG_PATH, payload, { mode: 0o600 });
|
|
155
|
+
await rename(TEMP_CONFIG_PATH, TOOLS_CONFIG_PATH);
|
|
156
|
+
}
|
|
157
|
+
export async function getSharedEnvironment() {
|
|
158
|
+
const config = await loadToolsConfig();
|
|
159
|
+
return { ...(config.env ?? {}) };
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* CustomAITool単体を検証
|
|
163
|
+
*
|
|
164
|
+
* @param tool - 検証対象のツール
|
|
165
|
+
* @throws 検証エラー時
|
|
166
|
+
*/
|
|
167
|
+
function validateCustomAITool(tool) {
|
|
168
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
169
|
+
const t = tool;
|
|
170
|
+
// 必須フィールドの存在チェック
|
|
171
|
+
const requiredFields = ["id", "displayName", "type", "command", "modeArgs"];
|
|
172
|
+
for (const field of requiredFields) {
|
|
173
|
+
if (!t[field]) {
|
|
174
|
+
throw new Error(`Required field "${field}" is missing in tool configuration`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// id形式の検証(小文字英数字とハイフンのみ)
|
|
178
|
+
if (!/^[a-z0-9-]+$/.test(t.id)) {
|
|
179
|
+
throw new Error(`Invalid tool ID format: "${t.id}"\n` +
|
|
180
|
+
`Tool ID must contain only lowercase letters, numbers, and hyphens (pattern: ^[a-z0-9-]+$)`);
|
|
181
|
+
}
|
|
182
|
+
// typeフィールドの値検証
|
|
183
|
+
const validTypes = ["path", "bunx", "command"];
|
|
184
|
+
if (!validTypes.includes(t.type)) {
|
|
185
|
+
throw new Error(`Invalid type: "${t.type}"\n` +
|
|
186
|
+
`Type must be one of: ${validTypes.join(", ")}`);
|
|
187
|
+
}
|
|
188
|
+
// type='path'の場合、commandが絶対パスであることを確認
|
|
189
|
+
if (t.type === "path" && !path.isAbsolute(t.command)) {
|
|
190
|
+
throw new Error(`For type="path", command must be an absolute path: "${t.command}"`);
|
|
191
|
+
}
|
|
192
|
+
// modeArgsの検証(少なくとも1つのモードが定義されている)
|
|
193
|
+
if (!t.modeArgs.normal && !t.modeArgs.continue && !t.modeArgs.resume) {
|
|
194
|
+
throw new Error(`modeArgs must define at least one mode (normal, continue, or resume) for tool "${t.id}"`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* IDでツールを検索
|
|
199
|
+
*
|
|
200
|
+
* @param id - ツールID
|
|
201
|
+
* @returns ツール設定(見つからない場合はundefined)
|
|
202
|
+
*/
|
|
203
|
+
export async function getToolById(id) {
|
|
204
|
+
// ビルトインツールから検索
|
|
205
|
+
const builtinTool = BUILTIN_TOOLS.find((t) => t.id === id);
|
|
206
|
+
if (builtinTool) {
|
|
207
|
+
return builtinTool;
|
|
208
|
+
}
|
|
209
|
+
// カスタムツールから検索
|
|
210
|
+
const config = await loadToolsConfig();
|
|
211
|
+
return config.customTools.find((t) => t.id === id);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* すべてのツール(ビルトイン+カスタム)を取得
|
|
215
|
+
*
|
|
216
|
+
* @returns AIToolConfigの配列
|
|
217
|
+
*/
|
|
218
|
+
export async function getAllTools() {
|
|
219
|
+
const config = await loadToolsConfig();
|
|
220
|
+
// ビルトインツールをAIToolConfig形式に変換
|
|
221
|
+
const builtinConfigs = BUILTIN_TOOLS.map((tool) => ({
|
|
222
|
+
id: tool.id,
|
|
223
|
+
displayName: tool.displayName,
|
|
224
|
+
...(tool.icon ? { icon: tool.icon } : {}),
|
|
225
|
+
isBuiltin: true,
|
|
226
|
+
}));
|
|
227
|
+
// カスタムツールをAIToolConfig形式に変換
|
|
228
|
+
const customConfigs = config.customTools.map((tool) => ({
|
|
229
|
+
id: tool.id,
|
|
230
|
+
displayName: tool.displayName,
|
|
231
|
+
...(tool.icon ? { icon: tool.icon } : {}),
|
|
232
|
+
isBuiltin: false,
|
|
233
|
+
customConfig: tool,
|
|
234
|
+
}));
|
|
235
|
+
// ビルトイン + カスタム の順で統合
|
|
236
|
+
return [...builtinConfigs, ...customConfigs];
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/config/tools.ts"],"names":[],"mappings":"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"}
|
package/dist/git.d.ts
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { BranchInfo } from "./cli/ui/types.js";
|
|
2
|
+
export declare class GitError extends Error {
|
|
3
|
+
cause?: unknown | undefined;
|
|
4
|
+
constructor(message: string, cause?: unknown | undefined);
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* 現在のディレクトリがGitリポジトリかどうかを確認
|
|
8
|
+
* Worktree環境でも動作するように、.gitファイルの存在も確認します
|
|
9
|
+
* @returns {Promise<boolean>} Gitリポジトリの場合true
|
|
10
|
+
*/
|
|
11
|
+
export declare function isGitRepository(): Promise<boolean>;
|
|
12
|
+
/**
|
|
13
|
+
* Gitリポジトリのルートディレクトリを取得
|
|
14
|
+
* @returns {Promise<string>} リポジトリのルートパス
|
|
15
|
+
* @throws {GitError} リポジトリルートの取得に失敗した場合
|
|
16
|
+
*/
|
|
17
|
+
export declare function getRepositoryRoot(): Promise<string>;
|
|
18
|
+
/**
|
|
19
|
+
* 現在の作業ツリー(root branch か worktree かを問わず)のルートディレクトリを取得
|
|
20
|
+
* @returns {Promise<string>} カレントWorktreeのルートパス
|
|
21
|
+
* @throws {GitError} 取得に失敗した場合
|
|
22
|
+
*/
|
|
23
|
+
export declare function getWorktreeRoot(): Promise<string>;
|
|
24
|
+
export declare function getCurrentBranch(): Promise<string | null>;
|
|
25
|
+
export declare function getLocalBranches(): Promise<BranchInfo[]>;
|
|
26
|
+
export declare function getRemoteBranches(): Promise<BranchInfo[]>;
|
|
27
|
+
/**
|
|
28
|
+
* ローカルとリモートのすべてのブランチ情報を取得
|
|
29
|
+
* @returns {Promise<BranchInfo[]>} ブランチ情報の配列
|
|
30
|
+
*/
|
|
31
|
+
export declare function getAllBranches(): Promise<BranchInfo[]>;
|
|
32
|
+
export declare function createBranch(branchName: string, baseBranch?: string): Promise<void>;
|
|
33
|
+
export declare function branchExists(branchName: string): Promise<boolean>;
|
|
34
|
+
export declare function deleteBranch(branchName: string, force?: boolean): Promise<void>;
|
|
35
|
+
export declare function hasUncommittedChanges(worktreePath: string): Promise<boolean>;
|
|
36
|
+
export declare function getChangedFilesCount(worktreePath: string): Promise<number>;
|
|
37
|
+
export declare function showStatus(worktreePath: string): Promise<string>;
|
|
38
|
+
export declare function stashChanges(worktreePath: string, message?: string): Promise<void>;
|
|
39
|
+
export declare function discardAllChanges(worktreePath: string): Promise<void>;
|
|
40
|
+
export declare function commitChanges(worktreePath: string, message: string): Promise<void>;
|
|
41
|
+
export declare function hasUnpushedCommits(worktreePath: string, branch: string): Promise<boolean>;
|
|
42
|
+
export declare function hasUnpushedCommitsInRepo(branch: string, repoRoot?: string): Promise<boolean>;
|
|
43
|
+
export declare function branchHasUniqueCommitsComparedToBase(branch: string, baseBranch: string, repoRoot?: string): Promise<boolean>;
|
|
44
|
+
/**
|
|
45
|
+
* Get the latest commit message for a specific branch in a worktree
|
|
46
|
+
*/
|
|
47
|
+
export declare function getLatestCommitMessage(worktreePath: string, branch: string): Promise<string | null>;
|
|
48
|
+
/**
|
|
49
|
+
* Get the count of unpushed commits
|
|
50
|
+
*/
|
|
51
|
+
export declare function getUnpushedCommitsCount(worktreePath: string, branch: string): Promise<number>;
|
|
52
|
+
/**
|
|
53
|
+
* Get the count of uncommitted changes (staged + unstaged)
|
|
54
|
+
*/
|
|
55
|
+
export declare function getUncommittedChangesCount(worktreePath: string): Promise<number>;
|
|
56
|
+
/**
|
|
57
|
+
* Enhanced session information for better display
|
|
58
|
+
*/
|
|
59
|
+
export interface EnhancedSessionInfo {
|
|
60
|
+
hasUncommittedChanges: boolean;
|
|
61
|
+
uncommittedChangesCount: number;
|
|
62
|
+
hasUnpushedCommits: boolean;
|
|
63
|
+
unpushedCommitsCount: number;
|
|
64
|
+
latestCommitMessage: string | null;
|
|
65
|
+
branchType: "feature" | "bugfix" | "hotfix" | "develop" | "main" | "master" | "other";
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get enhanced session information for display
|
|
69
|
+
*/
|
|
70
|
+
export declare function getEnhancedSessionInfo(worktreePath: string, branch: string): Promise<EnhancedSessionInfo>;
|
|
71
|
+
export declare function fetchAllRemotes(options?: {
|
|
72
|
+
cwd?: string;
|
|
73
|
+
}): Promise<void>;
|
|
74
|
+
export declare function getCurrentVersion(repoRoot: string): Promise<string>;
|
|
75
|
+
export declare function calculateNewVersion(currentVersion: string, versionBump: "patch" | "minor" | "major"): string;
|
|
76
|
+
export declare function executeNpmVersionInWorktree(worktreePath: string, newVersion: string): Promise<void>;
|
|
77
|
+
export declare function deleteRemoteBranch(branchName: string, remote?: string): Promise<void>;
|
|
78
|
+
export declare function getCurrentBranchName(worktreePath: string): Promise<string>;
|
|
79
|
+
export declare function pushBranchToRemote(worktreePath: string, branchName: string, remote?: string): Promise<void>;
|
|
80
|
+
export declare function checkRemoteBranchExists(branchName: string, remote?: string, options?: {
|
|
81
|
+
cwd?: string;
|
|
82
|
+
}): Promise<boolean>;
|
|
83
|
+
/**
|
|
84
|
+
* 現在のディレクトリがworktreeディレクトリかどうかを確認
|
|
85
|
+
* @returns {Promise<boolean>} worktreeディレクトリの場合true
|
|
86
|
+
*/
|
|
87
|
+
export declare function isInWorktree(): Promise<boolean>;
|
|
88
|
+
/**
|
|
89
|
+
* .gitignoreファイルに指定されたエントリーが存在することを保証します
|
|
90
|
+
* エントリーが既に存在する場合は何もしません
|
|
91
|
+
* @param {string} repoRoot - リポジトリのルートディレクトリ
|
|
92
|
+
* @param {string} entry - 追加するエントリー(例: ".worktrees/")
|
|
93
|
+
* @throws {GitError} ファイルの読み書きに失敗した場合
|
|
94
|
+
*/
|
|
95
|
+
/**
|
|
96
|
+
* Merge from source branch to current branch in worktree
|
|
97
|
+
* @param worktreePath - Path to worktree directory
|
|
98
|
+
* @param sourceBranch - Source branch to merge from
|
|
99
|
+
* @param dryRun - If true, use --no-commit flag for dry-run mode
|
|
100
|
+
* @see specs/SPEC-ee33ca26/research.md - Decision 3: Dry-run implementation
|
|
101
|
+
*/
|
|
102
|
+
export declare function mergeFromBranch(worktreePath: string, sourceBranch: string, dryRun?: boolean): Promise<void>;
|
|
103
|
+
/**
|
|
104
|
+
* Check if there is a merge in progress in worktree
|
|
105
|
+
* @param worktreePath - Path to worktree directory
|
|
106
|
+
* @returns true if MERGE_HEAD exists (merge in progress)
|
|
107
|
+
* @see specs/SPEC-ee33ca26/research.md - Best practices: Git state confirmation
|
|
108
|
+
*/
|
|
109
|
+
export declare function hasMergeConflict(worktreePath: string): Promise<boolean>;
|
|
110
|
+
/**
|
|
111
|
+
* Abort current merge operation in worktree
|
|
112
|
+
* @param worktreePath - Path to worktree directory
|
|
113
|
+
* @see specs/SPEC-ee33ca26/research.md - Decision 3: Dry-run rollback
|
|
114
|
+
*/
|
|
115
|
+
export declare function abortMerge(worktreePath: string): Promise<void>;
|
|
116
|
+
/**
|
|
117
|
+
* Get current merge status in worktree
|
|
118
|
+
* @param worktreePath - Path to worktree directory
|
|
119
|
+
* @returns Object with inProgress and hasConflict flags
|
|
120
|
+
* @see specs/SPEC-ee33ca26/research.md - Best practices: Git state confirmation
|
|
121
|
+
*/
|
|
122
|
+
export declare function getMergeStatus(worktreePath: string): Promise<{
|
|
123
|
+
inProgress: boolean;
|
|
124
|
+
hasConflict: boolean;
|
|
125
|
+
}>;
|
|
126
|
+
/**
|
|
127
|
+
* Reset worktree to HEAD (rollback all changes)
|
|
128
|
+
* Used for dry-run cleanup after git merge --no-commit
|
|
129
|
+
* @param worktreePath - Path to worktree directory
|
|
130
|
+
* @see specs/SPEC-ee33ca26/research.md - Dry-run implementation: --no-commit + rollback
|
|
131
|
+
*/
|
|
132
|
+
export declare function resetToHead(worktreePath: string): Promise<void>;
|
|
133
|
+
export interface BranchDivergenceStatus {
|
|
134
|
+
branch: string;
|
|
135
|
+
remoteAhead: number;
|
|
136
|
+
localAhead: number;
|
|
137
|
+
}
|
|
138
|
+
export declare function getBranchDivergenceStatuses(options?: {
|
|
139
|
+
cwd?: string;
|
|
140
|
+
remote?: string;
|
|
141
|
+
branches?: string[];
|
|
142
|
+
}): Promise<BranchDivergenceStatus[]>;
|
|
143
|
+
export declare function pullFastForward(worktreePath: string, remote?: string): Promise<void>;
|
|
144
|
+
export declare function ensureGitignoreEntry(repoRoot: string, entry: string): Promise<void>;
|
|
145
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
|