@akiojin/gwt 2.14.0 → 3.1.0

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.
Files changed (64) hide show
  1. package/README.ja.md +10 -2
  2. package/README.md +9 -2
  3. package/dist/cli/ui/components/App.d.ts.map +1 -1
  4. package/dist/cli/ui/components/App.js +19 -4
  5. package/dist/cli/ui/components/App.js.map +1 -1
  6. package/dist/cli/ui/components/parts/Header.d.ts +8 -0
  7. package/dist/cli/ui/components/parts/Header.d.ts.map +1 -1
  8. package/dist/cli/ui/components/parts/Header.js +7 -2
  9. package/dist/cli/ui/components/parts/Header.js.map +1 -1
  10. package/dist/cli/ui/components/screens/BranchListScreen.d.ts +3 -1
  11. package/dist/cli/ui/components/screens/BranchListScreen.d.ts.map +1 -1
  12. package/dist/cli/ui/components/screens/BranchListScreen.js +9 -17
  13. package/dist/cli/ui/components/screens/BranchListScreen.js.map +1 -1
  14. package/dist/cli/ui/components/screens/EnvironmentProfileScreen.d.ts +16 -0
  15. package/dist/cli/ui/components/screens/EnvironmentProfileScreen.d.ts.map +1 -0
  16. package/dist/cli/ui/components/screens/EnvironmentProfileScreen.js +576 -0
  17. package/dist/cli/ui/components/screens/EnvironmentProfileScreen.js.map +1 -0
  18. package/dist/cli/ui/hooks/useProfiles.d.ts +41 -0
  19. package/dist/cli/ui/hooks/useProfiles.d.ts.map +1 -0
  20. package/dist/cli/ui/hooks/useProfiles.js +136 -0
  21. package/dist/cli/ui/hooks/useProfiles.js.map +1 -0
  22. package/dist/cli/ui/types.d.ts +1 -1
  23. package/dist/cli/ui/types.d.ts.map +1 -1
  24. package/dist/client/assets/{index-DPWWHorC.js → index-f5D2XwDh.js} +12 -12
  25. package/dist/client/index.html +1 -1
  26. package/dist/config/profiles.d.ts +94 -0
  27. package/dist/config/profiles.d.ts.map +1 -0
  28. package/dist/config/profiles.js +287 -0
  29. package/dist/config/profiles.js.map +1 -0
  30. package/dist/config/tools.d.ts +10 -0
  31. package/dist/config/tools.d.ts.map +1 -1
  32. package/dist/config/tools.js +19 -2
  33. package/dist/config/tools.js.map +1 -1
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +7 -44
  36. package/dist/index.js.map +1 -1
  37. package/dist/types/profiles.d.ts +54 -0
  38. package/dist/types/profiles.d.ts.map +1 -0
  39. package/dist/types/profiles.js +33 -0
  40. package/dist/types/profiles.js.map +1 -0
  41. package/dist/web/client/src/components/ui/alert.d.ts +1 -1
  42. package/dist/web/client/src/components/ui/badge.d.ts +1 -1
  43. package/dist/web/client/src/pages/BranchDetailPage.d.ts.map +1 -1
  44. package/dist/web/client/src/pages/BranchDetailPage.js +49 -52
  45. package/dist/web/client/src/pages/BranchDetailPage.js.map +1 -1
  46. package/dist/web/server/tray.d.ts +1 -0
  47. package/dist/web/server/tray.d.ts.map +1 -1
  48. package/dist/web/server/tray.js +27 -8
  49. package/dist/web/server/tray.js.map +1 -1
  50. package/package.json +4 -3
  51. package/src/cli/ui/__tests__/components/App.protected-branch.test.tsx +1 -1
  52. package/src/cli/ui/__tests__/components/screens/BranchListScreen.test.tsx +0 -14
  53. package/src/cli/ui/components/App.tsx +49 -36
  54. package/src/cli/ui/components/parts/Header.tsx +16 -1
  55. package/src/cli/ui/components/screens/BranchListScreen.tsx +11 -16
  56. package/src/cli/ui/components/screens/EnvironmentProfileScreen.tsx +924 -0
  57. package/src/cli/ui/hooks/useProfiles.ts +211 -0
  58. package/src/cli/ui/types.ts +2 -1
  59. package/src/config/profiles.ts +362 -0
  60. package/src/config/tools.ts +20 -2
  61. package/src/index.ts +7 -49
  62. package/src/types/profiles.ts +64 -0
  63. package/src/web/client/src/pages/BranchDetailPage.tsx +60 -64
  64. package/src/web/server/tray.ts +43 -16
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>gwt - Web UI</title>
7
- <script type="module" crossorigin src="/assets/index-DPWWHorC.js"></script>
7
+ <script type="module" crossorigin src="/assets/index-f5D2XwDh.js"></script>
8
8
  <link rel="stylesheet" crossorigin href="/assets/index-DsDNCy5f.css">
9
9
  </head>
10
10
  <body>
@@ -0,0 +1,94 @@
1
+ /**
2
+ * 環境変数プロファイル設定管理
3
+ *
4
+ * ~/.gwt/profiles.yamlからプロファイル設定を読み込み、
5
+ * AIツール起動時の環境変数を管理します。
6
+ *
7
+ * @see specs/SPEC-dafff079/spec.md
8
+ */
9
+ import { type EnvironmentProfile, type ProfilesConfig } from "../types/profiles.js";
10
+ /**
11
+ * プロファイル設定ファイルのパス(後方互換性のためエクスポート)
12
+ *
13
+ * @deprecated 内部では getProfilesConfigPath() を使用してください。
14
+ * この定数はモジュールロード時に評価されるため、
15
+ * 実行中に環境変数(GWT_HOME/CLAUDE_WORKTREE_HOME)を変更しても反映されません。
16
+ */
17
+ export declare const PROFILES_CONFIG_PATH: string;
18
+ /**
19
+ * プロファイル設定を読み込む
20
+ *
21
+ * ~/.gwt/profiles.yamlから設定を読み込みます。
22
+ * ファイルが存在しない場合はデフォルト設定を返します。
23
+ *
24
+ * @returns ProfilesConfig
25
+ * @throws YAML構文エラー時
26
+ */
27
+ export declare function loadProfiles(): Promise<ProfilesConfig>;
28
+ /**
29
+ * プロファイル設定を保存する
30
+ *
31
+ * ~/.gwt/profiles.yamlに設定を保存します。
32
+ * ディレクトリが存在しない場合は自動的に作成します。
33
+ *
34
+ * @param config - 保存するプロファイル設定
35
+ */
36
+ export declare function saveProfiles(config: ProfilesConfig): Promise<void>;
37
+ /**
38
+ * アクティブなプロファイルを取得
39
+ *
40
+ * 現在選択されているプロファイルの設定を返します。
41
+ * プロファイルが選択されていない場合、または選択されたプロファイルが
42
+ * 存在しない場合はnullを返します。
43
+ *
44
+ * @returns アクティブなプロファイル、またはnull
45
+ */
46
+ export declare function getActiveProfile(): Promise<EnvironmentProfile | null>;
47
+ /**
48
+ * アクティブなプロファイル名を取得
49
+ *
50
+ * @returns アクティブなプロファイル名、またはnull
51
+ */
52
+ export declare function getActiveProfileName(): Promise<string | null>;
53
+ /**
54
+ * アクティブなプロファイルを設定
55
+ *
56
+ * @param profileName - 設定するプロファイル名(nullで無効化)
57
+ * @throws プロファイルが存在しない場合
58
+ */
59
+ export declare function setActiveProfile(profileName: string | null): Promise<void>;
60
+ /**
61
+ * 新しいプロファイルを作成
62
+ *
63
+ * @param name - プロファイル名
64
+ * @param profile - プロファイル設定
65
+ * @throws 既存のプロファイル名の場合
66
+ * @throws 無効なプロファイル名の場合
67
+ */
68
+ export declare function createProfile(name: string, profile: EnvironmentProfile): Promise<void>;
69
+ /**
70
+ * プロファイルを更新
71
+ *
72
+ * @param name - プロファイル名
73
+ * @param updates - 更新するフィールド(envが指定された場合は完全に置き換えられます)
74
+ * @throws プロファイルが存在しない場合
75
+ */
76
+ export declare function updateProfile(name: string, updates: Partial<EnvironmentProfile>): Promise<void>;
77
+ /**
78
+ * プロファイルを削除
79
+ *
80
+ * @param name - プロファイル名
81
+ * @throws アクティブなプロファイルの場合
82
+ * @throws プロファイルが存在しない場合
83
+ */
84
+ export declare function deleteProfile(name: string): Promise<void>;
85
+ /**
86
+ * アクティブなプロファイルの環境変数を解決
87
+ *
88
+ * AIツール起動時に使用する環境変数を返します。
89
+ * プロファイルが選択されていない場合は空オブジェクトを返します。
90
+ *
91
+ * @returns 環境変数のRecord
92
+ */
93
+ export declare function resolveProfileEnv(): Promise<Record<string, string>>;
94
+ //# sourceMappingURL=profiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/config/profiles.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AA4G9B;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,QAA0B,CAAC;AAE5D;;;;;;;;GAQG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC,CA2C5D;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBxE;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAS3E;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGnE;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAcf;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CAWf;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAc/D;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAQzE"}
@@ -0,0 +1,287 @@
1
+ /**
2
+ * 環境変数プロファイル設定管理
3
+ *
4
+ * ~/.gwt/profiles.yamlからプロファイル設定を読み込み、
5
+ * AIツール起動時の環境変数を管理します。
6
+ *
7
+ * @see specs/SPEC-dafff079/spec.md
8
+ */
9
+ import { mkdir, open, readFile, rename, stat, unlink, writeFile, } from "node:fs/promises";
10
+ import path from "node:path";
11
+ import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
12
+ import { homedir } from "node:os";
13
+ import { DEFAULT_PROFILES_CONFIG, isValidProfileName, } from "../types/profiles.js";
14
+ /**
15
+ * 設定ディレクトリのパスを取得
16
+ *
17
+ * 環境変数の優先順位: GWT_HOME > CLAUDE_WORKTREE_HOME (後方互換性) > ホームディレクトリ
18
+ */
19
+ function getConfigDir() {
20
+ const worktreeHome = process.env.GWT_HOME && process.env.GWT_HOME.trim().length > 0
21
+ ? process.env.GWT_HOME
22
+ : process.env.CLAUDE_WORKTREE_HOME &&
23
+ process.env.CLAUDE_WORKTREE_HOME.trim().length > 0
24
+ ? process.env.CLAUDE_WORKTREE_HOME
25
+ : homedir();
26
+ return path.join(worktreeHome, ".gwt");
27
+ }
28
+ /**
29
+ * プロファイル設定ファイルのパスを取得
30
+ */
31
+ function getProfilesConfigPath() {
32
+ return path.join(getConfigDir(), "profiles.yaml");
33
+ }
34
+ const LOCK_RETRY_INTERVAL_MS = 50;
35
+ const LOCK_TIMEOUT_MS = 3000;
36
+ const LOCK_STALE_MS = 30_000;
37
+ function getProfilesLockPath() {
38
+ return `${getProfilesConfigPath()}.lock`;
39
+ }
40
+ async function withProfilesLock(fn) {
41
+ const lockPath = getProfilesLockPath();
42
+ await mkdir(path.dirname(lockPath), { recursive: true });
43
+ const startedAt = Date.now();
44
+ while (true) {
45
+ try {
46
+ const handle = await open(lockPath, "wx");
47
+ try {
48
+ await handle.writeFile(JSON.stringify({ pid: process.pid, createdAt: new Date().toISOString() }, null, 2), "utf-8");
49
+ }
50
+ finally {
51
+ await handle.close();
52
+ }
53
+ break;
54
+ }
55
+ catch (error) {
56
+ if (!(error instanceof Error) || !("code" in error)) {
57
+ throw error;
58
+ }
59
+ if (error.code !== "EEXIST") {
60
+ throw error;
61
+ }
62
+ try {
63
+ const lockStat = await stat(lockPath);
64
+ const isStale = Date.now() - lockStat.mtimeMs > LOCK_STALE_MS;
65
+ if (isStale) {
66
+ await unlink(lockPath).catch(() => {
67
+ // 他プロセスが先に削除した可能性があるため無視する
68
+ });
69
+ continue;
70
+ }
71
+ }
72
+ catch {
73
+ // lock の stat/unlink が失敗してもリトライする
74
+ }
75
+ if (Date.now() - startedAt > LOCK_TIMEOUT_MS) {
76
+ throw new Error(`Timeout acquiring profiles lock: ${lockPath}. Another gwt instance may be running.`);
77
+ }
78
+ await new Promise((resolve) => setTimeout(resolve, LOCK_RETRY_INTERVAL_MS));
79
+ }
80
+ }
81
+ try {
82
+ return await fn();
83
+ }
84
+ finally {
85
+ await unlink(lockPath).catch(() => {
86
+ // lock が既に削除されている/削除できない場合は無視する
87
+ });
88
+ }
89
+ }
90
+ async function mutateProfiles(mutator) {
91
+ await withProfilesLock(async () => {
92
+ const config = await loadProfiles();
93
+ await mutator(config);
94
+ await saveProfiles(config);
95
+ });
96
+ }
97
+ /**
98
+ * プロファイル設定ファイルのパス(後方互換性のためエクスポート)
99
+ *
100
+ * @deprecated 内部では getProfilesConfigPath() を使用してください。
101
+ * この定数はモジュールロード時に評価されるため、
102
+ * 実行中に環境変数(GWT_HOME/CLAUDE_WORKTREE_HOME)を変更しても反映されません。
103
+ */
104
+ export const PROFILES_CONFIG_PATH = getProfilesConfigPath();
105
+ /**
106
+ * プロファイル設定を読み込む
107
+ *
108
+ * ~/.gwt/profiles.yamlから設定を読み込みます。
109
+ * ファイルが存在しない場合はデフォルト設定を返します。
110
+ *
111
+ * @returns ProfilesConfig
112
+ * @throws YAML構文エラー時
113
+ */
114
+ export async function loadProfiles() {
115
+ try {
116
+ const configPath = getProfilesConfigPath();
117
+ const content = await readFile(configPath, "utf-8");
118
+ const config = parseYaml(content);
119
+ // 基本的な検証
120
+ if (!config.version || typeof config.version !== "string") {
121
+ throw new Error("version field is required and must be a string");
122
+ }
123
+ if (config.profiles && typeof config.profiles !== "object") {
124
+ throw new Error("profiles field must be an object");
125
+ }
126
+ if (config.activeProfile !== null &&
127
+ config.activeProfile !== undefined &&
128
+ typeof config.activeProfile !== "string") {
129
+ throw new Error("activeProfile field must be a string or null");
130
+ }
131
+ return {
132
+ version: config.version,
133
+ activeProfile: config.activeProfile ?? null,
134
+ profiles: config.profiles ?? {},
135
+ };
136
+ }
137
+ catch (error) {
138
+ // ファイルが存在しない場合はデフォルト設定を返す
139
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
140
+ // DEFAULT_PROFILES_CONFIG は不変オブジェクトのため、
141
+ // 呼び出し側が編集できるように新しい参照を返す
142
+ return {
143
+ version: DEFAULT_PROFILES_CONFIG.version,
144
+ activeProfile: null,
145
+ profiles: {},
146
+ };
147
+ }
148
+ // YAML構文エラーの場合
149
+ throw error;
150
+ }
151
+ }
152
+ /**
153
+ * プロファイル設定を保存する
154
+ *
155
+ * ~/.gwt/profiles.yamlに設定を保存します。
156
+ * ディレクトリが存在しない場合は自動的に作成します。
157
+ *
158
+ * @param config - 保存するプロファイル設定
159
+ */
160
+ export async function saveProfiles(config) {
161
+ const configDir = getConfigDir();
162
+ const configPath = getProfilesConfigPath();
163
+ const tempPath = `${configPath}.tmp`;
164
+ await mkdir(configDir, { recursive: true });
165
+ const yaml = stringifyYaml(config);
166
+ await writeFile(tempPath, yaml, { mode: 0o600 });
167
+ try {
168
+ await rename(tempPath, configPath);
169
+ }
170
+ catch (error) {
171
+ await unlink(tempPath).catch(() => {
172
+ // 一時ファイルが存在しない/削除できない場合は無視する
173
+ });
174
+ throw error;
175
+ }
176
+ }
177
+ /**
178
+ * アクティブなプロファイルを取得
179
+ *
180
+ * 現在選択されているプロファイルの設定を返します。
181
+ * プロファイルが選択されていない場合、または選択されたプロファイルが
182
+ * 存在しない場合はnullを返します。
183
+ *
184
+ * @returns アクティブなプロファイル、またはnull
185
+ */
186
+ export async function getActiveProfile() {
187
+ const config = await loadProfiles();
188
+ if (!config.activeProfile) {
189
+ return null;
190
+ }
191
+ const profile = config.profiles[config.activeProfile];
192
+ return profile ?? null;
193
+ }
194
+ /**
195
+ * アクティブなプロファイル名を取得
196
+ *
197
+ * @returns アクティブなプロファイル名、またはnull
198
+ */
199
+ export async function getActiveProfileName() {
200
+ const config = await loadProfiles();
201
+ return config.activeProfile;
202
+ }
203
+ /**
204
+ * アクティブなプロファイルを設定
205
+ *
206
+ * @param profileName - 設定するプロファイル名(nullで無効化)
207
+ * @throws プロファイルが存在しない場合
208
+ */
209
+ export async function setActiveProfile(profileName) {
210
+ await mutateProfiles(async (config) => {
211
+ if (profileName !== null && !config.profiles[profileName]) {
212
+ throw new Error(`Profile "${profileName}" does not exist`);
213
+ }
214
+ config.activeProfile = profileName;
215
+ });
216
+ }
217
+ /**
218
+ * 新しいプロファイルを作成
219
+ *
220
+ * @param name - プロファイル名
221
+ * @param profile - プロファイル設定
222
+ * @throws 既存のプロファイル名の場合
223
+ * @throws 無効なプロファイル名の場合
224
+ */
225
+ export async function createProfile(name, profile) {
226
+ if (!isValidProfileName(name)) {
227
+ throw new Error(`Invalid profile name: "${name}". Use lowercase letters, numbers, and hyphens (must start and end with a letter or number).`);
228
+ }
229
+ await mutateProfiles(async (config) => {
230
+ if (config.profiles[name]) {
231
+ throw new Error(`Profile "${name}" already exists`);
232
+ }
233
+ config.profiles[name] = profile;
234
+ });
235
+ }
236
+ /**
237
+ * プロファイルを更新
238
+ *
239
+ * @param name - プロファイル名
240
+ * @param updates - 更新するフィールド(envが指定された場合は完全に置き換えられます)
241
+ * @throws プロファイルが存在しない場合
242
+ */
243
+ export async function updateProfile(name, updates) {
244
+ await mutateProfiles(async (config) => {
245
+ if (!config.profiles[name]) {
246
+ throw new Error(`Profile "${name}" does not exist`);
247
+ }
248
+ config.profiles[name] = {
249
+ ...config.profiles[name],
250
+ ...updates,
251
+ };
252
+ });
253
+ }
254
+ /**
255
+ * プロファイルを削除
256
+ *
257
+ * @param name - プロファイル名
258
+ * @throws アクティブなプロファイルの場合
259
+ * @throws プロファイルが存在しない場合
260
+ */
261
+ export async function deleteProfile(name) {
262
+ await mutateProfiles(async (config) => {
263
+ if (!config.profiles[name]) {
264
+ throw new Error(`Profile "${name}" does not exist`);
265
+ }
266
+ if (config.activeProfile === name) {
267
+ throw new Error(`Cannot delete active profile "${name}". Please switch to another profile first.`);
268
+ }
269
+ delete config.profiles[name];
270
+ });
271
+ }
272
+ /**
273
+ * アクティブなプロファイルの環境変数を解決
274
+ *
275
+ * AIツール起動時に使用する環境変数を返します。
276
+ * プロファイルが選択されていない場合は空オブジェクトを返します。
277
+ *
278
+ * @returns 環境変数のRecord
279
+ */
280
+ export async function resolveProfileEnv() {
281
+ const profile = await getActiveProfile();
282
+ if (!profile) {
283
+ return {};
284
+ }
285
+ return { ...profile.env };
286
+ }
287
+ //# sourceMappingURL=profiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/config/profiles.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,16 @@ export declare const TOOLS_CONFIG_PATH: string;
23
23
  */
24
24
  export declare function loadToolsConfig(): Promise<ToolsConfig>;
25
25
  export declare function saveToolsConfig(config: ToolsConfig): Promise<void>;
26
+ /**
27
+ * 共有環境変数を取得
28
+ *
29
+ * AIツール起動時に適用される環境変数を返します。
30
+ * マージ優先順位(後勝ち):
31
+ * 1. tools.json の env フィールド
32
+ * 2. profiles.yaml のアクティブプロファイル
33
+ *
34
+ * @returns 環境変数のRecord
35
+ */
26
36
  export declare function getSharedEnvironment(): Promise<Record<string, string>>;
27
37
  /**
28
38
  * IDでツールを検索
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/config/tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACb,MAAM,mBAAmB,CAAC;AAG3B;;;GAGG;AACH,eAAO,MAAM,aAAa,QAMT,CAAC;AAGlB,eAAO,MAAM,UAAU,QAAmC,CAAC;AAC3D,eAAO,MAAM,iBAAiB,QAAsC,CAAC;AA4CrE;;;;;;;;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"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/config/tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACb,MAAM,mBAAmB,CAAC;AAI3B;;;GAGG;AACH,eAAO,MAAM,aAAa,QAMT,CAAC;AAGlB,eAAO,MAAM,UAAU,QAAmC,CAAC;AAC3D,eAAO,MAAM,iBAAiB,QAAsC,CAAC;AA4CrE;;;;;;;;GAQG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC,CAgC5D;AA2DD,wBAAsB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAcxE;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAU5E;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"}
@@ -8,6 +8,7 @@ import { homedir } from "node:os";
8
8
  import path from "node:path";
9
9
  import { readFile, writeFile, mkdir, rename, access, cp, } from "node:fs/promises";
10
10
  import { BUILTIN_TOOLS } from "./builtin-tools.js";
11
+ import { resolveProfileEnv } from "./profiles.js";
11
12
  /**
12
13
  * ツール設定ファイルのパス
13
14
  * 環境変数の優先順位: GWT_HOME > CLAUDE_WORKTREE_HOME (後方互換性) > ホームディレクトリ
@@ -155,9 +156,25 @@ export async function saveToolsConfig(config) {
155
156
  await writeFile(TEMP_CONFIG_PATH, payload, { mode: 0o600 });
156
157
  await rename(TEMP_CONFIG_PATH, TOOLS_CONFIG_PATH);
157
158
  }
159
+ /**
160
+ * 共有環境変数を取得
161
+ *
162
+ * AIツール起動時に適用される環境変数を返します。
163
+ * マージ優先順位(後勝ち):
164
+ * 1. tools.json の env フィールド
165
+ * 2. profiles.yaml のアクティブプロファイル
166
+ *
167
+ * @returns 環境変数のRecord
168
+ */
158
169
  export async function getSharedEnvironment() {
159
- const config = await loadToolsConfig();
160
- return { ...(config.env ?? {}) };
170
+ const [config, profileEnv] = await Promise.all([
171
+ loadToolsConfig(),
172
+ resolveProfileEnv(),
173
+ ]);
174
+ return {
175
+ ...(config.env ?? {}),
176
+ ...profileEnv, // プロファイルが後勝ち
177
+ };
161
178
  }
162
179
  /**
163
180
  * CustomAITool単体を検証
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/config/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/config/tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAwBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAkQlE;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,eAAe,EAAE,eAAe,GAC/B,OAAO,CAAC,IAAI,CAAC,CAmff;AAED,KAAK,SAAS,GAAG,MAAM,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;AAC5D,KAAK,eAAe,GAAG,CAAC,SAAS,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAWrE,wBAAsB,kBAAkB,CACtC,SAAS,GAAE,SAAqB,EAChC,eAAe,GAAE,eAAsC,GACtD,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA0F1C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAwBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAqQlE;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,eAAe,EAAE,eAAe,GAC/B,OAAO,CAAC,IAAI,CAAC,CAmff;AAED,KAAK,SAAS,GAAG,MAAM,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;AAC5D,KAAK,eAAe,GAAG,CAAC,SAAS,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAWrE,wBAAsB,kBAAkB,CACtC,SAAS,GAAE,SAAqB,EAChC,eAAe,GAAE,eAAsC,GACtD,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA6C1C"}
package/dist/index.js CHANGED
@@ -8,7 +8,6 @@ import { WorktreeOrchestrator, } from "./services/WorktreeOrchestrator.js";
8
8
  import chalk from "chalk";
9
9
  import { worktreeExists, isProtectedBranchName, switchToProtectedBranch, WorktreeError, } from "./worktree.js";
10
10
  import { getTerminalStreams, waitForUserAcknowledgement, } from "./utils/terminal.js";
11
- import { resolveWebUiPort, isPortInUse } from "./utils/webui.js";
12
11
  import { createLogger } from "./logging/logger.js";
13
12
  import { getToolById, getSharedEnvironment } from "./config/tools.js";
14
13
  import { launchCustomAITool } from "./launcher.js";
@@ -131,7 +130,10 @@ function showHelp() {
131
130
  console.log(`
132
131
  Worktree Manager
133
132
 
134
- Usage: gwt [options]
133
+ Usage: gwt [command] [options]
134
+
135
+ Commands:
136
+ serve Start Web UI server (http://localhost:3000)
135
137
 
136
138
  Options:
137
139
  -h, --help Show this help message
@@ -139,7 +141,8 @@ Options:
139
141
 
140
142
  Description:
141
143
  Interactive Git worktree manager with AI tool selection (Claude Code / Codex CLI) and graphical branch selection.
142
- Launch without additional options to open the interactive menu.
144
+ Launch without additional options to open the interactive CLI menu.
145
+ Use 'gwt serve' to start the Web UI server for browser-based management.
143
146
  `);
144
147
  }
145
148
  /**
@@ -656,47 +659,7 @@ export async function main() {
656
659
  await waitForErrorAcknowledgement();
657
660
  process.exit(1);
658
661
  }
659
- // Start Web UI server in background (skip if port is in use)
660
- const port = resolveWebUiPort();
661
- const portInUse = await isPortInUse(port);
662
- let webServerHandlePromise = null;
663
- if (portInUse) {
664
- printWarning(`Port ${port} is already in use. Skipping Web UI server.`);
665
- }
666
- else {
667
- const { startWebServer } = await import("./web/server/index.js");
668
- webServerHandlePromise = startWebServer({ background: true }).catch((err) => {
669
- appLogger.warn({ err }, "Web UI server failed to start");
670
- return null;
671
- });
672
- printInfo(`Web UI available at http://localhost:${port}`);
673
- }
674
- try {
675
- await runInteractiveLoop();
676
- }
677
- finally {
678
- if (webServerHandlePromise) {
679
- const shutdownTimeoutMs = 2000;
680
- const handleOrTimeout = await Promise.race([
681
- webServerHandlePromise,
682
- new Promise((resolve) => {
683
- const timer = setTimeout(() => resolve("timeout"), shutdownTimeoutMs);
684
- timer.unref?.();
685
- }),
686
- ]);
687
- if (handleOrTimeout === "timeout") {
688
- appLogger.warn({ timeoutMs: shutdownTimeoutMs }, "Web UI server startup did not finish before shutdown timeout; skipping stop");
689
- }
690
- else if (handleOrTimeout) {
691
- try {
692
- await handleOrTimeout.close();
693
- }
694
- catch (err) {
695
- appLogger.warn({ err }, "Web UI server failed to stop");
696
- }
697
- }
698
- }
699
- }
662
+ await runInteractiveLoop();
700
663
  }
701
664
  // Run the application if this module is executed directly
702
665
  if (import.meta.url === `file://${process.argv[1]}`) {