@akiojin/gwt 3.0.0 → 3.1.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.
Files changed (53) hide show
  1. package/README.ja.md +1 -1
  2. package/README.md +1 -1
  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 +16 -8
  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/cli/ui/utils/branchFormatter.d.ts.map +1 -1
  25. package/dist/cli/ui/utils/branchFormatter.js +2 -2
  26. package/dist/cli/ui/utils/branchFormatter.js.map +1 -1
  27. package/dist/config/profiles.d.ts +94 -0
  28. package/dist/config/profiles.d.ts.map +1 -0
  29. package/dist/config/profiles.js +287 -0
  30. package/dist/config/profiles.js.map +1 -0
  31. package/dist/config/tools.d.ts +10 -0
  32. package/dist/config/tools.d.ts.map +1 -1
  33. package/dist/config/tools.js +19 -2
  34. package/dist/config/tools.js.map +1 -1
  35. package/dist/types/profiles.d.ts +54 -0
  36. package/dist/types/profiles.d.ts.map +1 -0
  37. package/dist/types/profiles.js +33 -0
  38. package/dist/types/profiles.js.map +1 -0
  39. package/dist/web/client/src/components/ui/alert.d.ts +1 -1
  40. package/dist/web/client/src/components/ui/badge.d.ts +1 -1
  41. package/package.json +4 -3
  42. package/src/cli/ui/__tests__/components/screens/BranchListScreen.test.tsx +40 -1
  43. package/src/cli/ui/__tests__/utils/branchFormatter.test.ts +1 -1
  44. package/src/cli/ui/components/App.tsx +49 -36
  45. package/src/cli/ui/components/parts/Header.tsx +16 -1
  46. package/src/cli/ui/components/screens/BranchListScreen.tsx +17 -7
  47. package/src/cli/ui/components/screens/EnvironmentProfileScreen.tsx +924 -0
  48. package/src/cli/ui/hooks/useProfiles.ts +211 -0
  49. package/src/cli/ui/types.ts +2 -1
  50. package/src/cli/ui/utils/branchFormatter.ts +2 -3
  51. package/src/config/profiles.ts +362 -0
  52. package/src/config/tools.ts +20 -2
  53. package/src/types/profiles.ts +64 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/config/profiles.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,MAAM,EACN,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EACL,uBAAuB,EACvB,kBAAkB,GAGnB,MAAM,sBAAsB,CAAC;AAE9B;;;;GAIG;AACH,SAAS,YAAY;IACnB,MAAM,YAAY,GAChB,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QAC5D,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ;QACtB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB;YAC9B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YACpD,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB;YAClC,CAAC,CAAC,OAAO,EAAE,CAAC;IAClB,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB;IAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,eAAe,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAClC,MAAM,eAAe,GAAG,IAAI,CAAC;AAC7B,MAAM,aAAa,GAAG,MAAM,CAAC;AAE7B,SAAS,mBAAmB;IAC1B,OAAO,GAAG,qBAAqB,EAAE,OAAO,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAI,EAAoB;IACrD,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IACvC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,SAAS,CACpB,IAAI,CAAC,SAAS,CACZ,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EACzD,IAAI,EACJ,CAAC,CACF,EACD,OAAO,CACR,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC;YACD,MAAM;QACR,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC;gBACpD,MAAM,KAAK,CAAC;YACd,CAAC;YAED,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,KAAK,CAAC;YACd,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,OAAO,GAAG,aAAa,CAAC;gBAC9D,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBAChC,2BAA2B;oBAC7B,CAAC,CAAC,CAAC;oBACH,SAAS;gBACX,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,kCAAkC;YACpC,CAAC;YAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,eAAe,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CACb,oCAAoC,QAAQ,wCAAwC,CACrF,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC5B,UAAU,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAC5C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAChC,gCAAgC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,OAAyD;IAEzD,MAAM,gBAAgB,CAAC,KAAK,IAAI,EAAE;QAChC,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;QACpC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;QACtB,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,qBAAqB,EAAE,CAAC;AAE5D;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,qBAAqB,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAmB,CAAC;QAEpD,SAAS;QACT,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QAED,IACE,MAAM,CAAC,aAAa,KAAK,IAAI;YAC7B,MAAM,CAAC,aAAa,KAAK,SAAS;YAClC,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ,EACxC,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI;YAC3C,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;SAChC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,0BAA0B;QAC1B,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACzE,wCAAwC;YACxC,yBAAyB;YACzB,OAAO;gBACL,OAAO,EAAE,uBAAuB,CAAC,OAAO;gBACxC,aAAa,EAAE,IAAI;gBACnB,QAAQ,EAAE,EAAE;aACb,CAAC;QACJ,CAAC;QAED,eAAe;QACf,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAsB;IACvD,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,UAAU,GAAG,qBAAqB,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,GAAG,UAAU,MAAM,CAAC;IAErC,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAChC,6BAA6B;QAC/B,CAAC,CAAC,CAAC;QACH,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;IAEpC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACtD,OAAO,OAAO,IAAI,IAAI,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;IACpC,OAAO,MAAM,CAAC,aAAa,CAAC;AAC9B,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,WAA0B;IAE1B,MAAM,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QACpC,IAAI,WAAW,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,YAAY,WAAW,kBAAkB,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,CAAC,aAAa,GAAG,WAAW,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,OAA2B;IAE3B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,0BAA0B,IAAI,8FAA8F,CAC7H,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QACpC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,kBAAkB,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,OAAoC;IAEpC,MAAM,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,kBAAkB,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG;YACtB,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACxB,GAAG,OAAO;SACX,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY;IAC9C,MAAM,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,kBAAkB,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CACb,iCAAiC,IAAI,4CAA4C,CAClF,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,OAAO,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAEzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAC5B,CAAC"}
@@ -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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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * 環境変数プロファイル型定義
3
+ *
4
+ * プロファイル機能で使用する型を定義します。
5
+ * @see specs/SPEC-dafff079/spec.md
6
+ */
7
+ /**
8
+ * 環境変数プロファイル
9
+ *
10
+ * 環境変数のセットを表します。
11
+ */
12
+ export interface EnvironmentProfile {
13
+ /** プロファイルの表示名 */
14
+ displayName: string;
15
+ /** プロファイルの説明(オプション) */
16
+ description?: string;
17
+ /** 環境変数のキーバリューペア */
18
+ env: Record<string, string>;
19
+ }
20
+ /**
21
+ * プロファイル設定
22
+ *
23
+ * 全プロファイルを管理する設定です。
24
+ * ~/.gwt/profiles.yaml に保存されます。
25
+ */
26
+ export interface ProfilesConfig {
27
+ /** 設定ファイルのバージョン */
28
+ version: string;
29
+ /** 現在アクティブなプロファイル名(nullの場合はプロファイルなし) */
30
+ activeProfile: string | null;
31
+ /** プロファイルの辞書(キー: プロファイル名、値: プロファイル設定) */
32
+ profiles: Record<string, EnvironmentProfile>;
33
+ }
34
+ /**
35
+ * デフォルトのプロファイル設定
36
+ *
37
+ * profiles.yamlが存在しない場合に使用されます。
38
+ * 不変オブジェクトとして扱われるため、変更は禁止されています。
39
+ */
40
+ export declare const DEFAULT_PROFILES_CONFIG: Readonly<ProfilesConfig>;
41
+ /**
42
+ * プロファイル名のバリデーションパターン
43
+ *
44
+ * 小文字英数字とハイフンのみを許可し、先頭と末尾は英数字でなければなりません。
45
+ */
46
+ export declare const PROFILE_NAME_PATTERN: RegExp;
47
+ /**
48
+ * プロファイル名をバリデート
49
+ *
50
+ * @param name - 検証するプロファイル名
51
+ * @returns バリデーション結果
52
+ */
53
+ export declare function isValidProfileName(name: string): boolean;
54
+ //# sourceMappingURL=profiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/types/profiles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,iBAAiB;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB;IACpB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CAC9C;AAED;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,cAAc,CAI3D,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,QAAsC,CAAC;AAExE;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * 環境変数プロファイル型定義
3
+ *
4
+ * プロファイル機能で使用する型を定義します。
5
+ * @see specs/SPEC-dafff079/spec.md
6
+ */
7
+ /**
8
+ * デフォルトのプロファイル設定
9
+ *
10
+ * profiles.yamlが存在しない場合に使用されます。
11
+ * 不変オブジェクトとして扱われるため、変更は禁止されています。
12
+ */
13
+ export const DEFAULT_PROFILES_CONFIG = Object.freeze({
14
+ version: "1.0",
15
+ activeProfile: null,
16
+ profiles: Object.freeze({}),
17
+ });
18
+ /**
19
+ * プロファイル名のバリデーションパターン
20
+ *
21
+ * 小文字英数字とハイフンのみを許可し、先頭と末尾は英数字でなければなりません。
22
+ */
23
+ export const PROFILE_NAME_PATTERN = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;
24
+ /**
25
+ * プロファイル名をバリデート
26
+ *
27
+ * @param name - 検証するプロファイル名
28
+ * @returns バリデーション結果
29
+ */
30
+ export function isValidProfileName(name) {
31
+ return name.length > 0 && PROFILE_NAME_PATTERN.test(name);
32
+ }
33
+ //# sourceMappingURL=profiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/types/profiles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA+BH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAA6B,MAAM,CAAC,MAAM,CAAC;IAC7E,OAAO,EAAE,KAAK;IACd,aAAa,EAAE,IAAI;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;CAC5B,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,mCAAmC,CAAC;AAExE;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5D,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" | "success" | "warning" | "info" | "destructive" | null | undefined;
4
+ variant?: "default" | "warning" | "success" | "info" | "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>>;
@@ -1,7 +1,7 @@
1
1
  import * as React from "react";
2
2
  import { type VariantProps } from "class-variance-authority";
3
3
  declare const badgeVariants: (props?: ({
4
- variant?: "default" | "local" | "remote" | "success" | "warning" | "secondary" | "destructive" | "outline" | null | undefined;
4
+ variant?: "default" | "warning" | "local" | "remote" | "success" | "secondary" | "destructive" | "outline" | null | undefined;
5
5
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
6
  export interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akiojin/gwt",
3
- "version": "3.0.0",
3
+ "version": "3.1.1",
4
4
  "description": "Interactive Git worktree manager for Claude Code with graphical branch selection",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -70,7 +70,7 @@
70
70
  "ink": "^6.3.1",
71
71
  "ink-select-input": "^6.2.0",
72
72
  "ink-text-input": "^6.0.0",
73
- "node-pty": "1.1.0-beta39",
73
+ "node-pty": "1.1.0-beta42",
74
74
  "pino": "^10.1.0",
75
75
  "react": "^19.2.0",
76
76
  "react-dom": "^19.2.0",
@@ -82,6 +82,7 @@
82
82
  "ws": "^8.18.0",
83
83
  "xterm": "^5.4.0-beta.37",
84
84
  "xterm-addon-fit": "^0.9.0-beta.37",
85
+ "yaml": "^2.8.2",
85
86
  "zustand": "^5.0.2"
86
87
  },
87
88
  "devDependencies": {
@@ -90,7 +91,7 @@
90
91
  "@playwright/test": "^1.51.0",
91
92
  "@testing-library/jest-dom": "^6.9.1",
92
93
  "@testing-library/react": "^16.3.0",
93
- "@types/node": "^24.10.1",
94
+ "@types/node": "^25.0.2",
94
95
  "@types/react": "^19.2.2",
95
96
  "@types/react-dom": "^19.0.3",
96
97
  "@types/ws": "^8.5.13",
@@ -211,7 +211,46 @@ describe("BranchListScreen", () => {
211
211
  );
212
212
 
213
213
  const text = container.textContent ?? "";
214
- expect(text).toMatch(/\[ \]\s(🟢|⚪)\s(🛡|⚠)/); // state cluster with spacing
214
+ expect(text).toMatch(/\[ \]\s(🟢|🔴|⚪)\s(🛡|⚠)/); // state cluster with spacing
215
+ });
216
+
217
+ it("should display 🔴 for inaccessible worktree", async () => {
218
+ const onSelect = vi.fn();
219
+ const branches: BranchItem[] = [
220
+ {
221
+ ...formatBranchItem({
222
+ name: "feature/missing-worktree",
223
+ type: "local",
224
+ branchType: "feature",
225
+ isCurrent: false,
226
+ hasUnpushedCommits: false,
227
+ worktree: {
228
+ path: "/tmp/wt-missing",
229
+ locked: false,
230
+ prunable: false,
231
+ isAccessible: false,
232
+ },
233
+ }),
234
+ safeToCleanup: false,
235
+ },
236
+ ];
237
+
238
+ let renderResult: ReturnType<typeof inkRender>;
239
+ await act(async () => {
240
+ renderResult = inkRender(
241
+ <BranchListScreen
242
+ branches={branches}
243
+ stats={mockStats}
244
+ onSelect={onSelect}
245
+ />,
246
+ { stripAnsi: false },
247
+ );
248
+ });
249
+
250
+ const frame = stripControlSequences(
251
+ stripAnsi(renderResult.lastFrame() ?? ""),
252
+ );
253
+ expect(frame).toContain("[ ] 🔴 ⚠");
215
254
  });
216
255
 
217
256
  it("should render last tool usage when available and Unknown when not", () => {
@@ -284,7 +284,7 @@ describe("branchFormatter", () => {
284
284
 
285
285
  const result = formatBranchItem(branchInfo);
286
286
 
287
- expect(result.icons).toContain("🟠"); // inaccessible worktree icon
287
+ expect(result.icons).toContain("🔴"); // inaccessible worktree icon
288
288
  expect(result.icons).toContain("⚠️"); // warning icon
289
289
  expect(result.worktreeStatus).toBe("inaccessible");
290
290
  });
@@ -7,7 +7,10 @@ import React, {
7
7
  } from "react";
8
8
  import { useApp } from "ink";
9
9
  import { ErrorBoundary } from "./common/ErrorBoundary.js";
10
- import { BranchListScreen } from "./screens/BranchListScreen.js";
10
+ import {
11
+ BranchListScreen,
12
+ type BranchListScreenProps,
13
+ } from "./screens/BranchListScreen.js";
11
14
  import { BranchCreatorScreen } from "./screens/BranchCreatorScreen.js";
12
15
  import { BranchActionSelectorScreen } from "../screens/BranchActionSelectorScreen.js";
13
16
  import { AIToolSelectorScreen } from "./screens/AIToolSelectorScreen.js";
@@ -19,7 +22,9 @@ import {
19
22
  ModelSelectorScreen,
20
23
  type ModelSelectionResult,
21
24
  } from "./screens/ModelSelectorScreen.js";
25
+ import { EnvironmentProfileScreen } from "./screens/EnvironmentProfileScreen.js";
22
26
  import { useGitData } from "../hooks/useGitData.js";
27
+ import { useProfiles } from "../hooks/useProfiles.js";
23
28
  import { useScreenState } from "../hooks/useScreenState.js";
24
29
  import { formatBranchItems } from "../utils/branchFormatter.js";
25
30
  import { calculateStatistics } from "../utils/statisticsCalculator.js";
@@ -108,6 +113,9 @@ export function App({ onExit, loadingIndicatorDelay = 300 }: AppProps) {
108
113
  });
109
114
  const { currentScreen, navigateTo, goBack } = useScreenState();
110
115
 
116
+ // Profile state
117
+ const { activeProfileName, refresh: refreshProfiles } = useProfiles();
118
+
111
119
  // Version state
112
120
  const [version, setVersion] = useState<string | null>(null);
113
121
  const [repoRoot, setRepoRoot] = useState<string | null>(null);
@@ -1153,31 +1161,39 @@ export function App({ onExit, loadingIndicatorDelay = 300 }: AppProps) {
1153
1161
 
1154
1162
  // Render screen based on currentScreen
1155
1163
  const renderScreen = () => {
1164
+ const renderBranchListScreen = (
1165
+ additionalProps?: Partial<BranchListScreenProps>,
1166
+ ) => (
1167
+ <BranchListScreen
1168
+ branches={branchItems}
1169
+ stats={stats}
1170
+ onSelect={handleSelect}
1171
+ onQuit={handleQuit}
1172
+ onRefresh={refresh}
1173
+ loading={loading}
1174
+ error={error}
1175
+ lastUpdated={lastUpdated}
1176
+ loadingIndicatorDelay={loadingIndicatorDelay}
1177
+ version={version}
1178
+ workingDirectory={workingDirectory}
1179
+ activeProfile={activeProfileName}
1180
+ onOpenProfiles={() => navigateTo("environment-profile")}
1181
+ {...additionalProps}
1182
+ />
1183
+ );
1184
+
1156
1185
  switch (currentScreen) {
1157
1186
  case "branch-list":
1158
- return (
1159
- <BranchListScreen
1160
- branches={branchItems}
1161
- stats={stats}
1162
- onSelect={handleSelect}
1163
- onQuit={handleQuit}
1164
- onCleanupCommand={handleCleanupCommand}
1165
- onRefresh={refresh}
1166
- loading={loading}
1167
- error={error}
1168
- lastUpdated={lastUpdated}
1169
- loadingIndicatorDelay={loadingIndicatorDelay}
1170
- cleanupUI={{
1171
- indicators: cleanupIndicators,
1172
- footerMessage: cleanupFooterMessage,
1173
- inputLocked: cleanupInputLocked,
1174
- }}
1175
- version={version}
1176
- workingDirectory={workingDirectory}
1177
- selectedBranches={selectedBranches}
1178
- onToggleSelect={toggleBranchSelection}
1179
- />
1180
- );
1187
+ return renderBranchListScreen({
1188
+ onCleanupCommand: handleCleanupCommand,
1189
+ cleanupUI: {
1190
+ indicators: cleanupIndicators,
1191
+ footerMessage: cleanupFooterMessage,
1192
+ inputLocked: cleanupInputLocked,
1193
+ },
1194
+ selectedBranches,
1195
+ onToggleSelect: toggleBranchSelection,
1196
+ });
1181
1197
 
1182
1198
  case "branch-creator":
1183
1199
  return (
@@ -1268,22 +1284,19 @@ export function App({ onExit, loadingIndicatorDelay = 300 }: AppProps) {
1268
1284
  />
1269
1285
  );
1270
1286
 
1271
- default:
1287
+ case "environment-profile":
1272
1288
  return (
1273
- <BranchListScreen
1274
- branches={branchItems}
1275
- stats={stats}
1276
- onSelect={handleSelect}
1277
- onQuit={handleQuit}
1278
- onRefresh={refresh}
1279
- loading={loading}
1280
- error={error}
1281
- lastUpdated={lastUpdated}
1282
- loadingIndicatorDelay={loadingIndicatorDelay}
1289
+ <EnvironmentProfileScreen
1290
+ onBack={() => {
1291
+ void refreshProfiles();
1292
+ goBack();
1293
+ }}
1283
1294
  version={version}
1284
- workingDirectory={workingDirectory}
1285
1295
  />
1286
1296
  );
1297
+
1298
+ default:
1299
+ return renderBranchListScreen();
1287
1300
  }
1288
1301
  };
1289
1302
 
@@ -22,6 +22,14 @@ export interface HeaderProps {
22
22
  * @default undefined
23
23
  */
24
24
  workingDirectory?: string;
25
+ /**
26
+ * 現在アクティブなプロファイル名
27
+ * - string: プロファイル名が利用可能(例: "development")
28
+ * - null: プロファイルが選択されていない
29
+ * - undefined: プロファイル情報未提供
30
+ * @default undefined
31
+ */
32
+ activeProfile?: string | null | undefined;
25
33
  }
26
34
 
27
35
  /**
@@ -36,9 +44,16 @@ export const Header = React.memo(function Header({
36
44
  width = 80,
37
45
  version,
38
46
  workingDirectory,
47
+ activeProfile,
39
48
  }: HeaderProps) {
40
49
  const divider = dividerChar.repeat(width);
41
- const displayTitle = version ? `${title} v${version}` : title;
50
+
51
+ // タイトル構築: "gwt v2.14 | Profile: development" または "gwt v2.14 | Profile: (none)"
52
+ let displayTitle = version ? `${title} v${version}` : title;
53
+ if (activeProfile !== undefined) {
54
+ const profileLabel = activeProfile ?? "(none)";
55
+ displayTitle = `${displayTitle} | Profile: ${profileLabel}`;
56
+ }
42
57
 
43
58
  return (
44
59
  <Box flexDirection="column">
@@ -27,7 +27,7 @@ const WIDTH_OVERRIDES: Record<string, number> = {
27
27
  // Worktree status icons
28
28
  "🟢": 2,
29
29
  "⚪": 2,
30
- "🟠": 1,
30
+ "🔴": 2,
31
31
  // Change status icons
32
32
  "👉": 1,
33
33
  "💾": 1,
@@ -84,6 +84,7 @@ export interface BranchListScreenProps {
84
84
  onQuit?: () => void;
85
85
  onCleanupCommand?: () => void;
86
86
  onRefresh?: () => void;
87
+ onOpenProfiles?: () => void;
87
88
  loading?: boolean;
88
89
  error?: Error | null;
89
90
  lastUpdated?: Date | null;
@@ -91,6 +92,7 @@ export interface BranchListScreenProps {
91
92
  cleanupUI?: CleanupUIState;
92
93
  version?: string | null;
93
94
  workingDirectory?: string;
95
+ activeProfile?: string | null;
94
96
  // Test support: allow external control of filter mode and query
95
97
  testFilterMode?: boolean;
96
98
  testOnFilterModeChange?: (mode: boolean) => void;
@@ -110,6 +112,7 @@ export function BranchListScreen({
110
112
  onSelect,
111
113
  onCleanupCommand,
112
114
  onRefresh,
115
+ onOpenProfiles,
113
116
  loading = false,
114
117
  error = null,
115
118
  lastUpdated = null,
@@ -117,6 +120,7 @@ export function BranchListScreen({
117
120
  cleanupUI,
118
121
  version,
119
122
  workingDirectory,
123
+ activeProfile,
120
124
  testFilterMode,
121
125
  testOnFilterModeChange,
122
126
  testFilterQuery,
@@ -125,7 +129,7 @@ export function BranchListScreen({
125
129
  onToggleSelect,
126
130
  }: BranchListScreenProps) {
127
131
  const { rows } = useTerminalSize();
128
- const headerText = " Legend: [ ]/[ * ] select 🟢/⚪ worktree 🛡/⚠ safe";
132
+ const headerText = " Legend: [ ]/[ * ] select 🟢/🔴/⚪ worktree 🛡/⚠ safe";
129
133
  const selectedSet = useMemo(
130
134
  () => new Set(selectedBranches),
131
135
  [selectedBranches],
@@ -206,6 +210,8 @@ export function BranchListScreen({
206
210
  onCleanupCommand?.();
207
211
  } else if (input === "r" && onRefresh) {
208
212
  onRefresh();
213
+ } else if (input === "p" && onOpenProfiles) {
214
+ onOpenProfiles();
209
215
  }
210
216
  });
211
217
 
@@ -262,7 +268,8 @@ export function BranchListScreen({
262
268
  { key: "enter", description: "Select" },
263
269
  { key: "f", description: "Filter" },
264
270
  { key: "r", description: "Refresh" },
265
- { key: "c", description: "Cleanup branches" },
271
+ { key: "c", description: "Cleanup" },
272
+ { key: "p", description: "Profiles" },
266
273
  ];
267
274
 
268
275
  const formatLatestCommit = useCallback((timestamp?: number) => {
@@ -399,10 +406,12 @@ export function BranchListScreen({
399
406
 
400
407
  const isChecked = selectedSet.has(item.name);
401
408
  const selectionIcon = isChecked ? "[*]" : "[ ]";
402
- const hasWorktree =
403
- item.worktreeStatus === "active" ||
404
- item.worktreeStatus === "inaccessible";
405
- const worktreeIcon = hasWorktree ? chalk.green("🟢") : chalk.gray("⚪");
409
+ let worktreeIcon = chalk.gray("⚪");
410
+ if (item.worktreeStatus === "active") {
411
+ worktreeIcon = chalk.green("🟢");
412
+ } else if (item.worktreeStatus === "inaccessible") {
413
+ worktreeIcon = chalk.red("🔴");
414
+ }
406
415
  const safeIcon =
407
416
  item.safeToCleanup === true ? chalk.green("🛡") : chalk.yellow("⚠");
408
417
  const stateCluster = `${selectionIcon} ${worktreeIcon} ${safeIcon}`;
@@ -514,6 +523,7 @@ export function BranchListScreen({
514
523
  titleColor="cyan"
515
524
  version={version}
516
525
  {...(workingDirectory !== undefined && { workingDirectory })}
526
+ activeProfile={activeProfile}
517
527
  />
518
528
 
519
529
  {/* Filter Input - Always visible */}