@akiojin/gwt 4.11.6 → 4.12.1
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/bin/gwt.js +36 -10
- package/dist/claude.d.ts +1 -0
- package/dist/claude.d.ts.map +1 -1
- package/dist/claude.js +81 -24
- package/dist/claude.js.map +1 -1
- package/dist/cli/ui/App.solid.d.ts.map +1 -1
- package/dist/cli/ui/App.solid.js +280 -50
- package/dist/cli/ui/App.solid.js.map +1 -1
- package/dist/cli/ui/components/solid/QuickStartStep.d.ts.map +1 -1
- package/dist/cli/ui/components/solid/QuickStartStep.js +35 -22
- package/dist/cli/ui/components/solid/QuickStartStep.js.map +1 -1
- package/dist/cli/ui/components/solid/SelectInput.d.ts.map +1 -1
- package/dist/cli/ui/components/solid/SelectInput.js +2 -1
- package/dist/cli/ui/components/solid/SelectInput.js.map +1 -1
- package/dist/cli/ui/components/solid/WizardController.d.ts.map +1 -1
- package/dist/cli/ui/components/solid/WizardController.js +67 -13
- package/dist/cli/ui/components/solid/WizardController.js.map +1 -1
- package/dist/cli/ui/components/solid/WizardSteps.d.ts +5 -0
- package/dist/cli/ui/components/solid/WizardSteps.d.ts.map +1 -1
- package/dist/cli/ui/components/solid/WizardSteps.js +50 -70
- package/dist/cli/ui/components/solid/WizardSteps.js.map +1 -1
- package/dist/cli/ui/core/theme.d.ts +9 -0
- package/dist/cli/ui/core/theme.d.ts.map +1 -1
- package/dist/cli/ui/core/theme.js +21 -0
- package/dist/cli/ui/core/theme.js.map +1 -1
- package/dist/cli/ui/screens/solid/BranchListScreen.d.ts +9 -2
- package/dist/cli/ui/screens/solid/BranchListScreen.d.ts.map +1 -1
- package/dist/cli/ui/screens/solid/BranchListScreen.js +101 -28
- package/dist/cli/ui/screens/solid/BranchListScreen.js.map +1 -1
- package/dist/cli/ui/screens/solid/ConfirmScreen.d.ts +2 -1
- package/dist/cli/ui/screens/solid/ConfirmScreen.d.ts.map +1 -1
- package/dist/cli/ui/screens/solid/ConfirmScreen.js +11 -3
- package/dist/cli/ui/screens/solid/ConfirmScreen.js.map +1 -1
- package/dist/cli/ui/screens/solid/EnvironmentScreen.d.ts.map +1 -1
- package/dist/cli/ui/screens/solid/EnvironmentScreen.js +9 -10
- package/dist/cli/ui/screens/solid/EnvironmentScreen.js.map +1 -1
- package/dist/cli/ui/screens/solid/LogScreen.d.ts +7 -1
- package/dist/cli/ui/screens/solid/LogScreen.d.ts.map +1 -1
- package/dist/cli/ui/screens/solid/LogScreen.js +254 -16
- package/dist/cli/ui/screens/solid/LogScreen.js.map +1 -1
- package/dist/cli/ui/screens/solid/ProfileEnvScreen.d.ts.map +1 -1
- package/dist/cli/ui/screens/solid/ProfileEnvScreen.js +8 -5
- package/dist/cli/ui/screens/solid/ProfileEnvScreen.js.map +1 -1
- package/dist/cli/ui/screens/solid/SelectorScreen.d.ts.map +1 -1
- package/dist/cli/ui/screens/solid/SelectorScreen.js +12 -4
- package/dist/cli/ui/screens/solid/SelectorScreen.js.map +1 -1
- package/dist/cli/ui/types.d.ts +1 -0
- package/dist/cli/ui/types.d.ts.map +1 -1
- package/dist/cli/ui/utils/branchFormatter.d.ts +1 -0
- package/dist/cli/ui/utils/branchFormatter.d.ts.map +1 -1
- package/dist/cli/ui/utils/branchFormatter.js +29 -7
- package/dist/cli/ui/utils/branchFormatter.js.map +1 -1
- package/dist/cli/ui/utils/continueSession.d.ts +14 -0
- package/dist/cli/ui/utils/continueSession.d.ts.map +1 -1
- package/dist/cli/ui/utils/continueSession.js +61 -3
- package/dist/cli/ui/utils/continueSession.js.map +1 -1
- package/dist/cli/ui/utils/installedVersionCache.d.ts +33 -0
- package/dist/cli/ui/utils/installedVersionCache.d.ts.map +1 -0
- package/dist/cli/ui/utils/installedVersionCache.js +59 -0
- package/dist/cli/ui/utils/installedVersionCache.js.map +1 -0
- package/dist/cli/ui/utils/modelOptions.d.ts.map +1 -1
- package/dist/cli/ui/utils/modelOptions.js +16 -0
- package/dist/cli/ui/utils/modelOptions.js.map +1 -1
- package/dist/cli/ui/utils/versionCache.d.ts +37 -0
- package/dist/cli/ui/utils/versionCache.d.ts.map +1 -0
- package/dist/cli/ui/utils/versionCache.js +70 -0
- package/dist/cli/ui/utils/versionCache.js.map +1 -0
- package/dist/cli/ui/utils/versionFetcher.d.ts +41 -0
- package/dist/cli/ui/utils/versionFetcher.d.ts.map +1 -0
- package/dist/cli/ui/utils/versionFetcher.js +89 -0
- package/dist/cli/ui/utils/versionFetcher.js.map +1 -0
- package/dist/codex.d.ts +1 -0
- package/dist/codex.d.ts.map +1 -1
- package/dist/codex.js +95 -25
- package/dist/codex.js.map +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +10 -1
- package/dist/config/index.js.map +1 -1
- package/dist/gemini.d.ts +1 -0
- package/dist/gemini.d.ts.map +1 -1
- package/dist/gemini.js +36 -3
- package/dist/gemini.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -2
- package/dist/index.js.map +1 -1
- package/dist/launcher.d.ts.map +1 -1
- package/dist/launcher.js +43 -8
- package/dist/launcher.js.map +1 -1
- package/dist/logging/agentOutput.d.ts +21 -0
- package/dist/logging/agentOutput.d.ts.map +1 -0
- package/dist/logging/agentOutput.js +164 -0
- package/dist/logging/agentOutput.js.map +1 -0
- package/dist/logging/formatter.d.ts.map +1 -1
- package/dist/logging/formatter.js +18 -4
- package/dist/logging/formatter.js.map +1 -1
- package/dist/logging/logger.d.ts.map +1 -1
- package/dist/logging/logger.js +2 -0
- package/dist/logging/logger.js.map +1 -1
- package/dist/logging/reader.d.ts +22 -0
- package/dist/logging/reader.d.ts.map +1 -1
- package/dist/logging/reader.js +116 -1
- package/dist/logging/reader.js.map +1 -1
- package/dist/opentui/index.solid.js +2575 -888
- package/dist/services/codingAgentResolver.d.ts.map +1 -1
- package/dist/services/codingAgentResolver.js +8 -6
- package/dist/services/codingAgentResolver.js.map +1 -1
- package/dist/services/dependency-installer.js +2 -2
- package/dist/services/dependency-installer.js.map +1 -1
- package/dist/shared/codingAgentConstants.d.ts +3 -0
- package/dist/shared/codingAgentConstants.d.ts.map +1 -1
- package/dist/shared/codingAgentConstants.js +66 -0
- package/dist/shared/codingAgentConstants.js.map +1 -1
- package/dist/utils/bun-runtime.d.ts +12 -0
- package/dist/utils/bun-runtime.d.ts.map +1 -0
- package/dist/utils/bun-runtime.js +13 -0
- package/dist/utils/bun-runtime.js.map +1 -0
- package/dist/utils/session/common.d.ts +8 -0
- package/dist/utils/session/common.d.ts.map +1 -1
- package/dist/utils/session/common.js +22 -0
- package/dist/utils/session/common.js.map +1 -1
- package/dist/utils/session/parsers/claude.d.ts +10 -4
- package/dist/utils/session/parsers/claude.d.ts.map +1 -1
- package/dist/utils/session/parsers/claude.js +64 -18
- package/dist/utils/session/parsers/claude.js.map +1 -1
- package/dist/utils/session/parsers/codex.d.ts.map +1 -1
- package/dist/utils/session/parsers/codex.js +47 -28
- package/dist/utils/session/parsers/codex.js.map +1 -1
- package/dist/utils/session/parsers/gemini.d.ts.map +1 -1
- package/dist/utils/session/parsers/gemini.js +43 -6
- package/dist/utils/session/parsers/gemini.js.map +1 -1
- package/dist/utils/session/parsers/opencode.d.ts.map +1 -1
- package/dist/utils/session/parsers/opencode.js +43 -6
- package/dist/utils/session/parsers/opencode.js.map +1 -1
- package/dist/utils/session/types.d.ts +7 -0
- package/dist/utils/session/types.d.ts.map +1 -1
- package/dist/web/client/src/components/ui/alert.d.ts +1 -1
- package/dist/worktree.d.ts +4 -1
- package/dist/worktree.d.ts.map +1 -1
- package/dist/worktree.js +21 -15
- package/dist/worktree.js.map +1 -1
- package/package.json +2 -1
- package/src/claude.ts +99 -28
- package/src/cli/ui/App.solid.tsx +373 -51
- package/src/cli/ui/__tests__/solid/AppSolid.cleanup.test.tsx +921 -1
- package/src/cli/ui/__tests__/solid/BranchListScreen.test.tsx +105 -5
- package/src/cli/ui/__tests__/solid/ConfirmScreen.test.tsx +77 -0
- package/src/cli/ui/__tests__/solid/LogScreen.test.tsx +351 -0
- package/src/cli/ui/__tests__/solid/components/QuickStartStep.test.tsx +73 -2
- package/src/cli/ui/__tests__/solid/components/WizardController.test.tsx +71 -0
- package/src/cli/ui/__tests__/solid/components/WizardSteps.test.tsx +95 -2
- package/src/cli/ui/__tests__/utils/branchFormatter.test.ts +72 -45
- package/src/cli/ui/components/solid/QuickStartStep.tsx +35 -23
- package/src/cli/ui/components/solid/SearchInput.tsx +1 -1
- package/src/cli/ui/components/solid/SelectInput.tsx +4 -0
- package/src/cli/ui/components/solid/WizardController.tsx +85 -12
- package/src/cli/ui/components/solid/WizardSteps.tsx +78 -90
- package/src/cli/ui/core/theme.ts +32 -0
- package/src/cli/ui/hooks/solid/useAsyncOperation.ts +8 -6
- package/src/cli/ui/hooks/solid/useGitOperations.ts +6 -5
- package/src/cli/ui/screens/solid/BranchListScreen.tsx +135 -32
- package/src/cli/ui/screens/solid/ConfirmScreen.tsx +20 -8
- package/src/cli/ui/screens/solid/EnvironmentScreen.tsx +22 -20
- package/src/cli/ui/screens/solid/LogScreen.tsx +364 -35
- package/src/cli/ui/screens/solid/ProfileEnvScreen.tsx +19 -15
- package/src/cli/ui/screens/solid/SelectorScreen.tsx +25 -14
- package/src/cli/ui/screens/solid/SettingsScreen.tsx +5 -3
- package/src/cli/ui/types.ts +1 -0
- package/src/cli/ui/utils/__tests__/branchFormatter.test.ts +53 -6
- package/src/cli/ui/utils/__tests__/installedVersionCache.test.ts +46 -0
- package/src/cli/ui/utils/branchFormatter.ts +35 -7
- package/src/cli/ui/utils/continueSession.ts +90 -3
- package/src/cli/ui/utils/installedVersionCache.ts +84 -0
- package/src/cli/ui/utils/modelOptions.test.ts +6 -0
- package/src/cli/ui/utils/modelOptions.ts +16 -0
- package/src/cli/ui/utils/versionCache.ts +93 -0
- package/src/cli/ui/utils/versionFetcher.ts +120 -0
- package/src/codex.ts +124 -26
- package/src/config/__tests__/saveSession.test.ts +2 -2
- package/src/config/index.ts +11 -1
- package/src/gemini.ts +50 -4
- package/src/index.test.ts +16 -10
- package/src/index.ts +41 -1
- package/src/launcher.ts +49 -8
- package/src/logging/agentOutput.ts +216 -0
- package/src/logging/formatter.ts +23 -4
- package/src/logging/logger.ts +2 -0
- package/src/logging/reader.ts +165 -1
- package/src/services/__tests__/BatchMergeService.test.ts +34 -14
- package/src/services/codingAgentResolver.ts +12 -5
- package/src/services/dependency-installer.ts +2 -2
- package/src/shared/codingAgentConstants.ts +73 -0
- package/src/utils/bun-runtime.ts +29 -0
- package/src/utils/session/common.ts +28 -0
- package/src/utils/session/parsers/claude.ts +79 -29
- package/src/utils/session/parsers/codex.ts +49 -26
- package/src/utils/session/parsers/gemini.ts +46 -5
- package/src/utils/session/parsers/opencode.ts +46 -5
- package/src/utils/session/types.ts +4 -0
- package/src/worktree.ts +28 -15
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import path from "node:path";
|
|
9
9
|
import { homedir } from "node:os";
|
|
10
|
-
import { UUID_REGEX, collectFilesIterative, matchesCwd, readSessionInfoFromFile, } from "../common.js";
|
|
10
|
+
import { UUID_REGEX, collectFilesIterative, matchesCwd, resolveBranchFromCwd, readSessionInfoFromFile, } from "../common.js";
|
|
11
|
+
import { listAllWorktrees } from "../../../worktree.js";
|
|
11
12
|
/**
|
|
12
13
|
* Finds the latest Codex session with optional time filtering and cwd matching.
|
|
13
14
|
*
|
|
@@ -50,41 +51,59 @@ export async function findLatestCodexSession(options = {}) {
|
|
|
50
51
|
}
|
|
51
52
|
return b.mtime - a.mtime;
|
|
52
53
|
});
|
|
53
|
-
|
|
54
|
+
const branchFilter = typeof options.branch === "string" && options.branch.trim().length > 0
|
|
55
|
+
? options.branch.trim()
|
|
56
|
+
: null;
|
|
57
|
+
const shouldCheckBranch = Boolean(branchFilter);
|
|
58
|
+
const shouldCheckCwd = Boolean(options.cwd) && !shouldCheckBranch;
|
|
59
|
+
let worktrees = [];
|
|
60
|
+
if (shouldCheckBranch) {
|
|
61
|
+
if (Array.isArray(options.worktrees) && options.worktrees.length > 0) {
|
|
62
|
+
worktrees = options.worktrees
|
|
63
|
+
.filter((entry) => entry?.path && entry?.branch)
|
|
64
|
+
.map((entry) => ({ path: entry.path, branch: entry.branch }));
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
try {
|
|
68
|
+
const allWorktrees = await listAllWorktrees();
|
|
69
|
+
worktrees = allWorktrees
|
|
70
|
+
.filter((entry) => entry?.path && entry?.branch)
|
|
71
|
+
.map((entry) => ({ path: entry.path, branch: entry.branch }));
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
worktrees = [];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (!worktrees.length)
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
54
80
|
for (const file of ordered) {
|
|
55
81
|
// Priority 1: Extract session ID from filename (most reliable for Codex)
|
|
56
82
|
const filenameMatch = path.basename(file.fullPath).match(UUID_REGEX);
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
continue; // cwd doesn't match, try next file
|
|
83
|
+
const idFromName = filenameMatch?.[0] ?? null;
|
|
84
|
+
const needsInfo = shouldCheckBranch || shouldCheckCwd || !idFromName;
|
|
85
|
+
const info = needsInfo
|
|
86
|
+
? await readSessionInfoFromFile(file.fullPath)
|
|
87
|
+
: null;
|
|
88
|
+
const sessionCwd = info?.cwd ?? null;
|
|
89
|
+
if (shouldCheckBranch) {
|
|
90
|
+
const resolvedBranch = resolveBranchFromCwd(sessionCwd, worktrees);
|
|
91
|
+
if (resolvedBranch !== branchFilter) {
|
|
92
|
+
continue;
|
|
69
93
|
}
|
|
70
|
-
return { id: sessionId, mtime: file.mtime };
|
|
71
94
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
continue;
|
|
76
|
-
if (options.cwd) {
|
|
77
|
-
if (matchesCwd(info.cwd, options.cwd)) {
|
|
78
|
-
return { id: info.id, mtime: file.mtime };
|
|
79
|
-
}
|
|
80
|
-
if (!info.cwd && !fallbackMissingCwd) {
|
|
81
|
-
fallbackMissingCwd = { id: info.id, mtime: file.mtime };
|
|
95
|
+
if (shouldCheckCwd && options.cwd) {
|
|
96
|
+
if (!matchesCwd(sessionCwd, options.cwd)) {
|
|
97
|
+
continue;
|
|
82
98
|
}
|
|
83
|
-
continue;
|
|
84
99
|
}
|
|
85
|
-
|
|
100
|
+
const sessionId = idFromName ?? info?.id ?? null;
|
|
101
|
+
if (sessionId) {
|
|
102
|
+
return { id: sessionId, mtime: file.mtime };
|
|
103
|
+
}
|
|
104
|
+
// (already handled via info above)
|
|
86
105
|
}
|
|
87
|
-
return
|
|
106
|
+
return null;
|
|
88
107
|
}
|
|
89
108
|
/**
|
|
90
109
|
* Finds the latest Codex session ID.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../../src/utils/session/parsers/codex.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,UAAU,EACV,uBAAuB,GACxB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../../src/utils/session/parsers/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../../src/utils/session/parsers/gemini.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../../src/utils/session/parsers/gemini.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAS3E;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAkFnC;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB"}
|
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import path from "node:path";
|
|
8
8
|
import { homedir } from "node:os";
|
|
9
|
-
import { collectFilesIterative, matchesCwd, readSessionInfoFromFile, } from "../common.js";
|
|
9
|
+
import { collectFilesIterative, matchesCwd, resolveBranchFromCwd, readSessionInfoFromFile, } from "../common.js";
|
|
10
|
+
import { listAllWorktrees } from "../../../worktree.js";
|
|
10
11
|
/**
|
|
11
12
|
* Finds the latest Gemini session with optional time filtering and cwd matching.
|
|
12
13
|
*
|
|
@@ -45,15 +46,47 @@ export async function findLatestGeminiSession(options = {}) {
|
|
|
45
46
|
}
|
|
46
47
|
return b.mtime - a.mtime;
|
|
47
48
|
});
|
|
49
|
+
const branchFilter = typeof options.branch === "string" && options.branch.trim().length > 0
|
|
50
|
+
? options.branch.trim()
|
|
51
|
+
: null;
|
|
52
|
+
const shouldCheckBranch = Boolean(branchFilter);
|
|
53
|
+
const shouldCheckCwd = Boolean(options.cwd) && !shouldCheckBranch;
|
|
54
|
+
let worktrees = [];
|
|
55
|
+
if (shouldCheckBranch) {
|
|
56
|
+
if (Array.isArray(options.worktrees) && options.worktrees.length > 0) {
|
|
57
|
+
worktrees = options.worktrees
|
|
58
|
+
.filter((entry) => entry?.path && entry?.branch)
|
|
59
|
+
.map((entry) => ({ path: entry.path, branch: entry.branch }));
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
try {
|
|
63
|
+
const allWorktrees = await listAllWorktrees();
|
|
64
|
+
worktrees = allWorktrees
|
|
65
|
+
.filter((entry) => entry?.path && entry?.branch)
|
|
66
|
+
.map((entry) => ({ path: entry.path, branch: entry.branch }));
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
worktrees = [];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (!worktrees.length)
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
48
75
|
for (const file of pool) {
|
|
49
76
|
const info = await readSessionInfoFromFile(file.fullPath);
|
|
50
77
|
if (!info.id)
|
|
51
78
|
continue;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
79
|
+
const sessionCwd = info.cwd ?? null;
|
|
80
|
+
if (shouldCheckBranch) {
|
|
81
|
+
const resolvedBranch = resolveBranchFromCwd(sessionCwd, worktrees);
|
|
82
|
+
if (resolvedBranch !== branchFilter) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (shouldCheckCwd && options.cwd) {
|
|
87
|
+
if (!matchesCwd(sessionCwd, options.cwd)) {
|
|
88
|
+
continue;
|
|
55
89
|
}
|
|
56
|
-
continue;
|
|
57
90
|
}
|
|
58
91
|
return { id: info.id, mtime: file.mtime };
|
|
59
92
|
}
|
|
@@ -66,7 +99,11 @@ export async function findLatestGeminiSession(options = {}) {
|
|
|
66
99
|
* @returns Session ID string or null if not found
|
|
67
100
|
*/
|
|
68
101
|
export async function findLatestGeminiSessionId(cwd, options = {}) {
|
|
69
|
-
const searchOptions = {
|
|
102
|
+
const searchOptions = {
|
|
103
|
+
cwd: options.cwd ?? cwd,
|
|
104
|
+
branch: options.branch ?? null,
|
|
105
|
+
worktrees: options.worktrees ?? null,
|
|
106
|
+
};
|
|
70
107
|
if (options.since !== undefined)
|
|
71
108
|
searchOptions.since = options.since;
|
|
72
109
|
if (options.until !== undefined)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../../src/utils/session/parsers/gemini.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,uBAAuB,GACxB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../../src/utils/session/parsers/gemini.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../../src/utils/session/parsers/opencode.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../../src/utils/session/parsers/opencode.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAwB7E;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAkFrC;AAED;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB"}
|
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import path from "node:path";
|
|
9
9
|
import { homedir } from "node:os";
|
|
10
|
-
import { collectFilesIterative, matchesCwd, readSessionInfoFromFile, } from "../common.js";
|
|
10
|
+
import { collectFilesIterative, matchesCwd, resolveBranchFromCwd, readSessionInfoFromFile, } from "../common.js";
|
|
11
|
+
import { listAllWorktrees } from "../../../worktree.js";
|
|
11
12
|
/**
|
|
12
13
|
* Returns the OpenCode session directory
|
|
13
14
|
* OpenCode stores sessions in: ~/.local/share/opencode/storage/session/[projectID]/[sessionID].json
|
|
@@ -53,15 +54,47 @@ export async function findLatestOpenCodeSession(options = {}) {
|
|
|
53
54
|
}
|
|
54
55
|
return b.mtime - a.mtime;
|
|
55
56
|
});
|
|
57
|
+
const branchFilter = typeof options.branch === "string" && options.branch.trim().length > 0
|
|
58
|
+
? options.branch.trim()
|
|
59
|
+
: null;
|
|
60
|
+
const shouldCheckBranch = Boolean(branchFilter);
|
|
61
|
+
const shouldCheckCwd = Boolean(options.cwd) && !shouldCheckBranch;
|
|
62
|
+
let worktrees = [];
|
|
63
|
+
if (shouldCheckBranch) {
|
|
64
|
+
if (Array.isArray(options.worktrees) && options.worktrees.length > 0) {
|
|
65
|
+
worktrees = options.worktrees
|
|
66
|
+
.filter((entry) => entry?.path && entry?.branch)
|
|
67
|
+
.map((entry) => ({ path: entry.path, branch: entry.branch }));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
try {
|
|
71
|
+
const allWorktrees = await listAllWorktrees();
|
|
72
|
+
worktrees = allWorktrees
|
|
73
|
+
.filter((entry) => entry?.path && entry?.branch)
|
|
74
|
+
.map((entry) => ({ path: entry.path, branch: entry.branch }));
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
worktrees = [];
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (!worktrees.length)
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
56
83
|
for (const file of pool) {
|
|
57
84
|
const info = await readSessionInfoFromFile(file.fullPath);
|
|
58
85
|
if (!info.id)
|
|
59
86
|
continue;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
87
|
+
const sessionCwd = info.cwd ?? null;
|
|
88
|
+
if (shouldCheckBranch) {
|
|
89
|
+
const resolvedBranch = resolveBranchFromCwd(sessionCwd, worktrees);
|
|
90
|
+
if (resolvedBranch !== branchFilter) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (shouldCheckCwd && options.cwd) {
|
|
95
|
+
if (!matchesCwd(sessionCwd, options.cwd)) {
|
|
96
|
+
continue;
|
|
63
97
|
}
|
|
64
|
-
continue;
|
|
65
98
|
}
|
|
66
99
|
return { id: info.id, mtime: file.mtime };
|
|
67
100
|
}
|
|
@@ -74,7 +107,11 @@ export async function findLatestOpenCodeSession(options = {}) {
|
|
|
74
107
|
* @returns Session ID string or null if not found
|
|
75
108
|
*/
|
|
76
109
|
export async function findLatestOpenCodeSessionId(cwd, options = {}) {
|
|
77
|
-
const searchOptions = {
|
|
110
|
+
const searchOptions = {
|
|
111
|
+
cwd: options.cwd ?? cwd,
|
|
112
|
+
branch: options.branch ?? null,
|
|
113
|
+
worktrees: options.worktrees ?? null,
|
|
114
|
+
};
|
|
78
115
|
if (options.since !== undefined)
|
|
79
116
|
searchOptions.since = options.since;
|
|
80
117
|
if (options.until !== undefined)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../../src/utils/session/parsers/opencode.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,uBAAuB,GACxB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../../src/utils/session/parsers/opencode.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,13 @@ export interface SessionSearchOptions {
|
|
|
15
15
|
windowMs?: number;
|
|
16
16
|
/** Working directory filter */
|
|
17
17
|
cwd?: string | null;
|
|
18
|
+
/** Branch name filter (resolved from session cwd via worktree paths) */
|
|
19
|
+
branch?: string | null;
|
|
20
|
+
/** Optional worktree list to avoid shelling out for branch mapping */
|
|
21
|
+
worktrees?: {
|
|
22
|
+
path: string;
|
|
23
|
+
branch: string;
|
|
24
|
+
}[] | null;
|
|
18
25
|
}
|
|
19
26
|
/**
|
|
20
27
|
* Base session info with ID and modification time
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/session/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/session/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,sEAAsE;IACtE,SAAS,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,IAAI,CAAC;CACvD;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC;AAE5C;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC;AAE5C;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { type VariantProps } from "class-variance-authority";
|
|
3
3
|
declare const Alert: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & VariantProps<(props?: ({
|
|
4
|
-
variant?: "default" | "warning" | "
|
|
4
|
+
variant?: "default" | "warning" | "info" | "success" | "destructive" | null | undefined;
|
|
5
5
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string> & React.RefAttributes<HTMLDivElement>>;
|
|
6
6
|
declare const AlertTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLHeadingElement> & React.RefAttributes<HTMLParagraphElement>>;
|
|
7
7
|
declare const AlertDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;
|
package/dist/worktree.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export interface WorktreeInfo {
|
|
|
23
23
|
isLocked?: boolean;
|
|
24
24
|
isPrunable?: boolean;
|
|
25
25
|
}
|
|
26
|
+
export declare function listAllWorktrees(): Promise<WorktreeInfo[]>;
|
|
26
27
|
/**
|
|
27
28
|
* 追加のworktree(メインworktreeを除く)の一覧を取得
|
|
28
29
|
* @returns {Promise<WorktreeInfo[]>} worktree情報の配列
|
|
@@ -105,7 +106,9 @@ export declare function repairWorktreePath(branch: string, currentPath: string,
|
|
|
105
106
|
* @returns 修復結果(成功数、失敗数、失敗詳細)
|
|
106
107
|
*/
|
|
107
108
|
export declare function repairWorktrees(targetBranches: string[]): Promise<RepairResult>;
|
|
108
|
-
export declare function getCleanupStatus(
|
|
109
|
+
export declare function getCleanupStatus({ onProgress, }?: {
|
|
110
|
+
onProgress?: (status: CleanupStatus) => void;
|
|
111
|
+
}): Promise<CleanupStatus[]>;
|
|
109
112
|
/**
|
|
110
113
|
* マージ済みPRに関連するworktreeおよびローカルブランチのクリーンアップ候補を取得
|
|
111
114
|
* @returns {Promise<CleanupTarget[]>} クリーンアップ候補の配列
|
package/dist/worktree.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../src/worktree.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../src/worktree.ts"],"names":[],"mappings":"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"}
|
package/dist/worktree.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { execa } from "execa";
|
|
2
|
-
import
|
|
2
|
+
import { lstat, mkdir, readFile, rm } from "node:fs/promises";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import chalk from "chalk";
|
|
5
5
|
import { createLogger } from "./logging/logger.js";
|
|
@@ -173,6 +173,9 @@ async function listWorktrees() {
|
|
|
173
173
|
throw new WorktreeError("Failed to list worktrees", error);
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
|
+
export async function listAllWorktrees() {
|
|
177
|
+
return listWorktrees();
|
|
178
|
+
}
|
|
176
179
|
/**
|
|
177
180
|
* 追加のworktree(メインworktreeを除く)の一覧を取得
|
|
178
181
|
* @returns {Promise<WorktreeInfo[]>} worktree情報の配列
|
|
@@ -293,7 +296,7 @@ async function assessStaleWorktreeDirectory(targetPath) {
|
|
|
293
296
|
}
|
|
294
297
|
let gitMetaStat;
|
|
295
298
|
try {
|
|
296
|
-
gitMetaStat = await
|
|
299
|
+
gitMetaStat = await lstat(gitMetaPath);
|
|
297
300
|
}
|
|
298
301
|
catch {
|
|
299
302
|
return { status: "unknown", reason: "unable to stat .git" };
|
|
@@ -306,7 +309,7 @@ async function assessStaleWorktreeDirectory(targetPath) {
|
|
|
306
309
|
}
|
|
307
310
|
let gitMetaContents = "";
|
|
308
311
|
try {
|
|
309
|
-
gitMetaContents = await
|
|
312
|
+
gitMetaContents = await readFile(gitMetaPath, "utf8");
|
|
310
313
|
}
|
|
311
314
|
catch {
|
|
312
315
|
return { status: "unknown", reason: "unable to read .git" };
|
|
@@ -339,7 +342,7 @@ export async function createWorktree(config) {
|
|
|
339
342
|
try {
|
|
340
343
|
const staleness = await assessStaleWorktreeDirectory(config.worktreePath);
|
|
341
344
|
if (staleness.status === "stale") {
|
|
342
|
-
await
|
|
345
|
+
await rm(config.worktreePath, { recursive: true, force: true });
|
|
343
346
|
}
|
|
344
347
|
else if (staleness.status === "unknown") {
|
|
345
348
|
const reason = staleness.reason ? ` (${staleness.reason})` : "";
|
|
@@ -347,7 +350,7 @@ export async function createWorktree(config) {
|
|
|
347
350
|
}
|
|
348
351
|
const worktreeParentDir = path.dirname(config.worktreePath);
|
|
349
352
|
try {
|
|
350
|
-
await
|
|
353
|
+
await mkdir(worktreeParentDir, { recursive: true });
|
|
351
354
|
}
|
|
352
355
|
catch (error) {
|
|
353
356
|
const errorWithCode = error;
|
|
@@ -597,7 +600,7 @@ async function getWorktreesWithPRStatus() {
|
|
|
597
600
|
* worktreeに存在しないローカルブランチのクリーンアップ候補を取得
|
|
598
601
|
* @returns {Promise<CleanupTarget[]>} クリーンアップ候補の配列
|
|
599
602
|
*/
|
|
600
|
-
async function getOrphanedLocalBranchStatuses({ baseBranch, repoRoot, }) {
|
|
603
|
+
async function getOrphanedLocalBranchStatuses({ baseBranch, repoRoot, onProgress, }) {
|
|
601
604
|
try {
|
|
602
605
|
// 並列実行で高速化
|
|
603
606
|
const [localBranches, worktrees] = await Promise.all([
|
|
@@ -629,8 +632,7 @@ async function getOrphanedLocalBranchStatuses({ baseBranch, repoRoot, }) {
|
|
|
629
632
|
hasUnpushed = true;
|
|
630
633
|
}
|
|
631
634
|
const { upstream, hasUpstream } = await resolveUpstreamStatus(localBranch.name, repoRoot);
|
|
632
|
-
const
|
|
633
|
-
const hasUniqueCommits = await branchHasUniqueCommitsComparedToBase(localBranch.name, comparisonBase, repoRoot);
|
|
635
|
+
const hasUniqueCommits = await branchHasUniqueCommitsComparedToBase(localBranch.name, baseBranch, repoRoot);
|
|
634
636
|
const reasons = buildCleanupReasons({
|
|
635
637
|
hasUniqueCommits,
|
|
636
638
|
hasUncommitted: false,
|
|
@@ -640,7 +642,7 @@ async function getOrphanedLocalBranchStatuses({ baseBranch, repoRoot, }) {
|
|
|
640
642
|
if (process.env.DEBUG_CLEANUP) {
|
|
641
643
|
console.log(chalk.gray(`Debug: Checking orphaned branch ${localBranch.name} -> reasons: ${reasons.join(", ")}`));
|
|
642
644
|
}
|
|
643
|
-
|
|
645
|
+
const status = {
|
|
644
646
|
worktreePath: null, // worktreeは存在しない
|
|
645
647
|
branch: localBranch.name,
|
|
646
648
|
hasUncommittedChanges: false, // worktreeが存在しないため常にfalse
|
|
@@ -651,7 +653,9 @@ async function getOrphanedLocalBranchStatuses({ baseBranch, repoRoot, }) {
|
|
|
651
653
|
hasUpstream,
|
|
652
654
|
upstream,
|
|
653
655
|
reasons,
|
|
654
|
-
}
|
|
656
|
+
};
|
|
657
|
+
statuses.push(status);
|
|
658
|
+
onProgress?.(status);
|
|
655
659
|
}
|
|
656
660
|
}
|
|
657
661
|
if (process.env.DEBUG_CLEANUP) {
|
|
@@ -667,7 +671,7 @@ async function getOrphanedLocalBranchStatuses({ baseBranch, repoRoot, }) {
|
|
|
667
671
|
return [];
|
|
668
672
|
}
|
|
669
673
|
}
|
|
670
|
-
export async function getCleanupStatus() {
|
|
674
|
+
export async function getCleanupStatus({ onProgress, } = {}) {
|
|
671
675
|
const [config, repoRoot, worktreesWithPR] = await Promise.all([
|
|
672
676
|
getConfig(),
|
|
673
677
|
getRepositoryRoot(),
|
|
@@ -677,6 +681,7 @@ export async function getCleanupStatus() {
|
|
|
677
681
|
const orphanedStatuses = await getOrphanedLocalBranchStatuses({
|
|
678
682
|
baseBranch,
|
|
679
683
|
repoRoot,
|
|
684
|
+
...(onProgress ? { onProgress } : {}),
|
|
680
685
|
});
|
|
681
686
|
const statuses = [];
|
|
682
687
|
if (process.env.DEBUG_CLEANUP) {
|
|
@@ -713,8 +718,7 @@ export async function getCleanupStatus() {
|
|
|
713
718
|
}
|
|
714
719
|
}
|
|
715
720
|
const { upstream, hasUpstream } = await resolveUpstreamStatus(worktree.branch, repoRoot);
|
|
716
|
-
const
|
|
717
|
-
const hasUniqueCommits = await branchHasUniqueCommitsComparedToBase(worktree.branch, comparisonBase, repoRoot);
|
|
721
|
+
const hasUniqueCommits = await branchHasUniqueCommitsComparedToBase(worktree.branch, baseBranch, repoRoot);
|
|
718
722
|
const reasons = buildCleanupReasons({
|
|
719
723
|
hasUniqueCommits,
|
|
720
724
|
hasUncommitted,
|
|
@@ -724,7 +728,7 @@ export async function getCleanupStatus() {
|
|
|
724
728
|
if (process.env.DEBUG_CLEANUP) {
|
|
725
729
|
console.log(chalk.gray(`Debug: Cleanup reasons for ${worktree.branch}: ${reasons.length > 0 ? reasons.join(", ") : "none"}`));
|
|
726
730
|
}
|
|
727
|
-
|
|
731
|
+
const status = {
|
|
728
732
|
worktreePath: worktree.worktreePath,
|
|
729
733
|
branch: worktree.branch,
|
|
730
734
|
hasUncommittedChanges: hasUncommitted,
|
|
@@ -739,7 +743,9 @@ export async function getCleanupStatus() {
|
|
|
739
743
|
...(isAccessible
|
|
740
744
|
? {}
|
|
741
745
|
: { invalidReason: "Path not accessible in current environment" }),
|
|
742
|
-
}
|
|
746
|
+
};
|
|
747
|
+
statuses.push(status);
|
|
748
|
+
onProgress?.(status);
|
|
743
749
|
}
|
|
744
750
|
statuses.push(...orphanedStatuses);
|
|
745
751
|
if (process.env.DEBUG_CLEANUP) {
|