@shepai/cli 1.129.2-pr414.a244c89 → 1.129.2-pr415.e8b42a3

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 (174) hide show
  1. package/dist/packages/core/src/application/ports/output/services/index.d.ts +1 -1
  2. package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
  3. package/dist/packages/core/src/application/ports/output/services/tool-installer.service.d.ts +13 -0
  4. package/dist/packages/core/src/application/ports/output/services/tool-installer.service.d.ts.map +1 -1
  5. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.d.ts +7 -1
  6. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.d.ts.map +1 -1
  7. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.js +37 -1
  8. package/dist/src/presentation/web/app/actions/get-available-terminals.d.ts +8 -3
  9. package/dist/src/presentation/web/app/actions/get-available-terminals.d.ts.map +1 -1
  10. package/dist/src/presentation/web/app/actions/get-available-terminals.js +14 -46
  11. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts.map +1 -1
  12. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.js +6 -21
  13. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts +0 -16
  14. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts.map +1 -1
  15. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.js +0 -126
  16. package/dist/tsconfig.build.tsbuildinfo +1 -1
  17. package/package.json +1 -1
  18. package/web/.next/BUILD_ID +1 -1
  19. package/web/.next/build-manifest.json +2 -2
  20. package/web/.next/fallback-build-manifest.json +2 -2
  21. package/web/.next/prerender-manifest.json +3 -3
  22. package/web/.next/required-server-files.js +1 -1
  23. package/web/.next/required-server-files.json +1 -1
  24. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +24 -24
  25. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +1 -1
  26. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  27. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  28. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +24 -24
  29. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  30. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  31. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  32. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +30 -30
  33. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -1
  34. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  35. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  36. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +30 -30
  37. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
  38. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  39. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  40. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +22 -22
  41. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  42. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  43. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  44. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +24 -24
  45. package/web/.next/server/app/(dashboard)/create/page.js +1 -1
  46. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  47. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  48. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +30 -30
  49. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -1
  50. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  51. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  52. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +30 -30
  53. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
  54. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  55. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  56. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +22 -22
  57. package/web/.next/server/app/(dashboard)/page.js +1 -1
  58. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  59. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  60. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +22 -22
  61. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  62. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  63. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  64. package/web/.next/server/app/_global-error.html +2 -2
  65. package/web/.next/server/app/_global-error.rsc +1 -1
  66. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  67. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  68. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  69. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  70. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  71. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +3 -3
  72. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  73. package/web/.next/server/app/api/graph-data/route.js +1 -1
  74. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  75. package/web/.next/server/app/settings/page/server-reference-manifest.json +8 -8
  76. package/web/.next/server/app/settings/page.js +1 -1
  77. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  78. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  79. package/web/.next/server/app/skills/page/server-reference-manifest.json +8 -8
  80. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  81. package/web/.next/server/app/tools/page/server-reference-manifest.json +8 -8
  82. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  83. package/web/.next/server/app/version/page/server-reference-manifest.json +3 -3
  84. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  85. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  86. package/web/.next/server/chunks/[root-of-the-server]__b2f9a412._.js +1 -1
  87. package/web/.next/server/chunks/{[root-of-the-server]__dcd4f847._.js → [root-of-the-server]__bc532286._.js} +2 -2
  88. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4e741df2.js +1 -1
  89. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4e741df2.js.map +1 -1
  90. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  91. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  92. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_026fdffa.js +1 -1
  93. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_026fdffa.js.map +1 -1
  94. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_8b91e197.js +1 -1
  95. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_8b91e197.js.map +1 -1
  96. package/web/.next/server/chunks/ssr/[root-of-the-server]__0e842eba._.js +1 -1
  97. package/web/.next/server/chunks/ssr/[root-of-the-server]__0e842eba._.js.map +1 -1
  98. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  99. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js +1 -1
  100. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js.map +1 -1
  101. package/web/.next/server/chunks/ssr/[root-of-the-server]__60684242._.js +2 -2
  102. package/web/.next/server/chunks/ssr/[root-of-the-server]__62cdea24._.js +4 -0
  103. package/web/.next/server/chunks/ssr/[root-of-the-server]__62cdea24._.js.map +1 -0
  104. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +2 -2
  105. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -1
  106. package/web/.next/server/chunks/ssr/[root-of-the-server]__755cfe02._.js +1 -1
  107. package/web/.next/server/chunks/ssr/[root-of-the-server]__755cfe02._.js.map +1 -1
  108. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js +1 -1
  109. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js.map +1 -1
  110. package/web/.next/server/chunks/ssr/[root-of-the-server]__99ab2519._.js +4 -0
  111. package/web/.next/server/chunks/ssr/[root-of-the-server]__99ab2519._.js.map +1 -0
  112. package/web/.next/server/chunks/ssr/[root-of-the-server]__a628fb91._.js +1 -1
  113. package/web/.next/server/chunks/ssr/[root-of-the-server]__a628fb91._.js.map +1 -1
  114. package/web/.next/server/chunks/ssr/[root-of-the-server]__bfba58e6._.js +1 -1
  115. package/web/.next/server/chunks/ssr/[root-of-the-server]__bfba58e6._.js.map +1 -1
  116. package/web/.next/server/chunks/ssr/[root-of-the-server]__c3ab8422._.js +1 -1
  117. package/web/.next/server/chunks/ssr/[root-of-the-server]__c3ab8422._.js.map +1 -1
  118. package/web/.next/server/chunks/ssr/_02ec1aea._.js +1 -1
  119. package/web/.next/server/chunks/ssr/_02ec1aea._.js.map +1 -1
  120. package/web/.next/server/chunks/ssr/{_e1434c79._.js → _38d666eb._.js} +2 -2
  121. package/web/.next/server/chunks/ssr/{_e1434c79._.js.map → _38d666eb._.js.map} +1 -1
  122. package/web/.next/server/chunks/ssr/{_5fb28e57._.js → _5cc6b884._.js} +2 -2
  123. package/web/.next/server/chunks/ssr/{_5fb28e57._.js.map → _5cc6b884._.js.map} +1 -1
  124. package/web/.next/server/chunks/ssr/_7dca1882._.js +1 -1
  125. package/web/.next/server/chunks/ssr/_7dca1882._.js.map +1 -1
  126. package/web/.next/server/chunks/ssr/_a9f57758._.js +1 -1
  127. package/web/.next/server/chunks/ssr/_a9f57758._.js.map +1 -1
  128. package/web/.next/server/chunks/ssr/_d8575088._.js +1 -1
  129. package/web/.next/server/chunks/ssr/_d8575088._.js.map +1 -1
  130. package/web/.next/server/chunks/ssr/_f39a1adb._.js +1 -1
  131. package/web/.next/server/chunks/ssr/_f39a1adb._.js.map +1 -1
  132. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  133. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  134. package/web/.next/server/chunks/ssr/src_presentation_web_1cf7f742._.js +3 -0
  135. package/web/.next/server/chunks/ssr/{src_presentation_web_2fdcc9da._.js.map → src_presentation_web_1cf7f742._.js.map} +1 -1
  136. package/web/.next/server/chunks/ssr/src_presentation_web_8e7fe0d1._.js +2 -2
  137. package/web/.next/server/chunks/ssr/src_presentation_web_8e7fe0d1._.js.map +1 -1
  138. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_ca051134.js +1 -1
  139. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_ca051134.js.map +1 -1
  140. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js +1 -1
  141. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js.map +1 -1
  142. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js +1 -1
  143. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js.map +1 -1
  144. package/web/.next/server/chunks/ssr/src_presentation_web_b9023017._.js +2 -2
  145. package/web/.next/server/chunks/ssr/src_presentation_web_b9023017._.js.map +1 -1
  146. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  147. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  148. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  149. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  150. package/web/.next/server/pages/500.html +2 -2
  151. package/web/.next/server/server-reference-manifest.js +1 -1
  152. package/web/.next/server/server-reference-manifest.json +38 -38
  153. package/web/.next/static/chunks/{069841443403cfcc.js → 2109939b818e8a21.js} +2 -2
  154. package/web/.next/static/chunks/{676c6d4741f6192d.js → 3b013cb80e3abe8d.js} +1 -1
  155. package/web/.next/static/chunks/{901929c364c0910e.js → 3db5579b21f4865e.js} +1 -1
  156. package/web/.next/static/chunks/{b19d87b816606ee1.js → 4a4322e31546aeb2.js} +1 -1
  157. package/web/.next/static/chunks/{92f126f7bc731420.js → 4d1d68d12435ab5e.js} +2 -2
  158. package/web/.next/static/chunks/{a22e9f6f61bf7c13.js → 5cf6bacf2a830ba1.js} +1 -1
  159. package/web/.next/static/chunks/{e9d946d8d4227e83.js → 68f633e5218bb175.js} +1 -1
  160. package/web/.next/static/chunks/{3328e3a18a27d6a2.js → 7d65e69aeeeb0685.js} +1 -1
  161. package/web/.next/static/chunks/87cedd21dc11fb2f.js +1 -0
  162. package/web/.next/static/chunks/{1192d7345f9f2518.js → d7e86e225826ded3.js} +1 -1
  163. package/web/.next/static/chunks/{82c085fcdc2b24c4.js → e83aac447467719e.js} +1 -1
  164. package/web/.next/static/chunks/{f48057e0ef8a1769.js → edb724ea4f507470.js} +1 -1
  165. package/web/.next/server/chunks/ssr/[root-of-the-server]__2f886f77._.js +0 -4
  166. package/web/.next/server/chunks/ssr/[root-of-the-server]__2f886f77._.js.map +0 -1
  167. package/web/.next/server/chunks/ssr/[root-of-the-server]__f4a463ee._.js +0 -4
  168. package/web/.next/server/chunks/ssr/[root-of-the-server]__f4a463ee._.js.map +0 -1
  169. package/web/.next/server/chunks/ssr/src_presentation_web_2fdcc9da._.js +0 -3
  170. package/web/.next/static/chunks/51b7b8bdb07f2ebf.js +0 -1
  171. /package/web/.next/server/chunks/{[root-of-the-server]__dcd4f847._.js.map → [root-of-the-server]__bc532286._.js.map} +0 -0
  172. /package/web/.next/static/{BI_nIsDchXe-UwYQ69wzj → UBAo6avNyvCewhdD7bkhO}/_buildManifest.js +0 -0
  173. /package/web/.next/static/{BI_nIsDchXe-UwYQ69wzj → UBAo6avNyvCewhdD7bkhO}/_clientMiddlewareManifest.json +0 -0
  174. /package/web/.next/static/{BI_nIsDchXe-UwYQ69wzj → UBAo6avNyvCewhdD7bkhO}/_ssgManifest.js +0 -0
@@ -10,7 +10,7 @@ export type { IVersionService } from './version-service.interface.js';
10
10
  export type { IWebServerService } from './web-server-service.interface.js';
11
11
  export type { IWorktreeService, WorktreeInfo } from './worktree-service.interface.js';
12
12
  export { WorktreeError, WorktreeErrorCode } from './worktree-service.interface.js';
13
- export type { IToolInstallerService } from './tool-installer.service.js';
13
+ export type { IToolInstallerService, AvailableTerminalEntry } from './tool-installer.service.js';
14
14
  export type { INotificationService } from './notification-service.interface.js';
15
15
  export type { IGitPrService, CiStatus, CiStatusResult, DiffSummary, MergeStrategy, PrCreateResult, } from './git-pr-service.interface.js';
16
16
  export { GitPrError, GitPrErrorCode } from './git-pr-service.interface.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAClG,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,uCAAuC,CAAC;AAC/C,YAAY,EACV,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACnF,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,YAAY,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAChF,YAAY,EACV,aAAa,EACb,QAAQ,EACR,cAAc,EACd,WAAW,EACX,aAAa,EACb,cAAc,GACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC3E,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,eAAe,GAChB,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjF,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC9F,YAAY,EACV,wBAAwB,EACxB,UAAU,EACV,2BAA2B,EAC3B,YAAY,EACZ,eAAe,GAChB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,0CAA0C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAClG,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,uCAAuC,CAAC;AAC/C,YAAY,EACV,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACnF,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACjG,YAAY,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAChF,YAAY,EACV,aAAa,EACb,QAAQ,EACR,cAAc,EACd,WAAW,EACX,aAAa,EACb,cAAc,GACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC3E,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,eAAe,GAChB,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjF,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC9F,YAAY,EACV,wBAAwB,EACxB,UAAU,EACV,2BAA2B,EAC3B,YAAY,EACZ,eAAe,GAChB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,0CAA0C,CAAC"}
@@ -5,6 +5,11 @@
5
5
  * Implementations check tool availability and execute installations.
6
6
  */
7
7
  import type { ToolInstallationStatus, ToolInstallCommand } from '../../../../domain/generated/output.js';
8
+ export interface AvailableTerminalEntry {
9
+ id: string;
10
+ name: string;
11
+ available: boolean;
12
+ }
8
13
  /**
9
14
  * Service interface for tool installation management.
10
15
  */
@@ -31,5 +36,13 @@ export interface IToolInstallerService {
31
36
  * @returns ToolInstallationStatus with result of installation
32
37
  */
33
38
  executeInstall(toolName: string, onOutput?: (data: string) => void): Promise<ToolInstallationStatus>;
39
+ /**
40
+ * List all terminal emulators supported on the current platform with availability status.
41
+ * Uses tool metadata loaded in the Node.js context (not bundled by Next.js),
42
+ * so this must be called via the DI container from server actions.
43
+ *
44
+ * @returns Array of terminal entries with id, name, and availability
45
+ */
46
+ listAvailableTerminals(): Promise<AvailableTerminalEntry[]>;
34
47
  }
35
48
  //# sourceMappingURL=tool-installer.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-installer.service.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/tool-installer.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,wCAAwC,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAErE;;;;;OAKG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAAC;IAE/D;;;;;;OAMG;IACH,cAAc,CACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,sBAAsB,CAAC,CAAC;CACpC"}
1
+ {"version":3,"file":"tool-installer.service.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/tool-installer.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,wCAAwC,CAAC;AAEhD,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAErE;;;;;OAKG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAAC;IAE/D;;;;;;OAMG;IACH,cAAc,CACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAEnC;;;;;;OAMG;IACH,sBAAsB,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC;CAC7D"}
@@ -11,7 +11,7 @@
11
11
  * - Automatic timeout handling with process termination
12
12
  * - Immutable status objects via value object factory functions
13
13
  */
14
- import type { IToolInstallerService } from '../../../application/ports/output/services/tool-installer.service.js';
14
+ import type { IToolInstallerService, AvailableTerminalEntry } from '../../../application/ports/output/services/tool-installer.service.js';
15
15
  import type { ToolInstallationStatus, ToolInstallCommand } from '../../../domain/generated/output.js';
16
16
  export declare class ToolInstallerServiceImpl implements IToolInstallerService {
17
17
  /**
@@ -29,6 +29,12 @@ export declare class ToolInstallerServiceImpl implements IToolInstallerService {
29
29
  * Streams stdout/stderr to optional callback and handles timeout automatically.
30
30
  */
31
31
  executeInstall(toolName: string, onOutput?: (data: string) => void): Promise<ToolInstallationStatus>;
32
+ /**
33
+ * List all terminal emulators supported on the current platform with availability status.
34
+ * TOOL_METADATA is loaded in the Node.js CLI context, so this is safe to call from the
35
+ * DI container even when the Next.js standalone bundle cannot resolve tools/ via import.meta.url.
36
+ */
37
+ listAvailableTerminals(): Promise<AvailableTerminalEntry[]>;
32
38
  /**
33
39
  * Create installation suggestions for a tool based on its metadata
34
40
  */
@@ -1 +1 @@
1
- {"version":3,"file":"tool-installer.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-installer.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sEAAsE,CAAC;AAClH,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,qCAAqC,CAAC;AA2B7C,qBACa,wBAAyB,YAAW,qBAAqB;IACpE;;;OAGG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAoC1E;;;OAGG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAqB9D;;;OAGG;IACG,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,sBAAsB,CAAC;IAgFlC;;OAEG;IACH,OAAO,CAAC,6BAA6B;CA4BtC"}
1
+ {"version":3,"file":"tool-installer.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-installer.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,sEAAsE,CAAC;AAC9E,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,qCAAqC,CAAC;AA2B7C,qBACa,wBAAyB,YAAW,qBAAqB;IACpE;;;OAGG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAoC1E;;;OAGG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAqB9D;;;OAGG;IACG,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,sBAAsB,CAAC;IAgFlC;;;;OAIG;IACG,sBAAsB,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAuCjE;;OAEG;IACH,OAAO,CAAC,6BAA6B;CA4BtC"}
@@ -21,7 +21,7 @@ import { injectable } from 'tsyringe';
21
21
  import { exec, spawn } from 'node:child_process';
22
22
  import { platform } from 'node:os';
23
23
  import { createAvailableStatus, createMissingStatus, createErrorStatus, } from '../../../domain/value-objects/tool-installation-status.js';
24
- import { TOOL_METADATA } from './tool-metadata.js';
24
+ import { TOOL_METADATA, getTerminalEntries } from './tool-metadata.js';
25
25
  import { checkBinaryExists } from './binary-exists.js';
26
26
  /**
27
27
  * Resolve binary name for the current platform.
@@ -172,6 +172,42 @@ let ToolInstallerServiceImpl = class ToolInstallerServiceImpl {
172
172
  });
173
173
  });
174
174
  }
175
+ /**
176
+ * List all terminal emulators supported on the current platform with availability status.
177
+ * TOOL_METADATA is loaded in the Node.js CLI context, so this is safe to call from the
178
+ * DI container even when the Next.js standalone bundle cannot resolve tools/ via import.meta.url.
179
+ */
180
+ async listAvailableTerminals() {
181
+ const currentPlatform = platform();
182
+ const entries = getTerminalEntries();
183
+ const results = [];
184
+ for (const [id, meta] of entries) {
185
+ if (meta.platforms &&
186
+ !meta.platforms.includes(currentPlatform)) {
187
+ continue;
188
+ }
189
+ if (id === 'system-terminal') {
190
+ results.unshift({ id: 'system', name: meta.name, available: true });
191
+ continue;
192
+ }
193
+ const binary = typeof meta.binary === 'string' ? meta.binary : meta.binary[currentPlatform];
194
+ if (!binary)
195
+ continue;
196
+ let available = false;
197
+ if (meta.verifyCommand.startsWith('test ')) {
198
+ available = await runVerifyCommand(meta.verifyCommand);
199
+ }
200
+ else {
201
+ const result = await checkBinaryExists(binary);
202
+ available = result.found;
203
+ }
204
+ results.push({ id, name: meta.name, available });
205
+ }
206
+ if (!results.some((r) => r.id === 'system')) {
207
+ results.unshift({ id: 'system', name: 'System Terminal', available: true });
208
+ }
209
+ return results;
210
+ }
175
211
  /**
176
212
  * Create installation suggestions for a tool based on its metadata
177
213
  */
@@ -4,9 +4,14 @@ export interface AvailableTerminal {
4
4
  available: boolean;
5
5
  }
6
6
  /**
7
- * Returns the list of terminal entries from tool metadata, filtered to the
8
- * current platform, with availability checks. The "system-terminal" entry
9
- * is always marked available and listed first.
7
+ * Returns the list of terminal entries from the DI container's IToolInstallerService,
8
+ * filtered to the current platform with availability checks.
9
+ *
10
+ * Using the DI container (not a direct import from tool-metadata) ensures that
11
+ * TOOL_METADATA is read from the correct tools/ directory path — it is loaded once
12
+ * in the Node.js CLI bootstrap context where import.meta.url resolves correctly.
13
+ * Direct imports of tool-metadata from Next.js server action bundles break in
14
+ * standalone production mode because import.meta.url points to the chunk file.
10
15
  */
11
16
  export declare function getAvailableTerminals(): Promise<AvailableTerminal[]>;
12
17
  //# sourceMappingURL=get-available-terminals.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-available-terminals.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-available-terminals.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAkD1E"}
1
+ {"version":3,"file":"get-available-terminals.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-available-terminals.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAO1E"}
@@ -1,53 +1,21 @@
1
1
  'use server';
2
- import { platform } from 'node:os';
3
- import { getTerminalEntries } from '../../../../../packages/core/src/infrastructure/services/tool-installer/tool-metadata.js';
4
- import { checkBinaryExists } from '../../../../../packages/core/src/infrastructure/services/tool-installer/binary-exists.js';
2
+ import { resolve } from '../../lib/server-container.js';
5
3
  /**
6
- * Returns the list of terminal entries from tool metadata, filtered to the
7
- * current platform, with availability checks. The "system-terminal" entry
8
- * is always marked available and listed first.
4
+ * Returns the list of terminal entries from the DI container's IToolInstallerService,
5
+ * filtered to the current platform with availability checks.
6
+ *
7
+ * Using the DI container (not a direct import from tool-metadata) ensures that
8
+ * TOOL_METADATA is read from the correct tools/ directory path — it is loaded once
9
+ * in the Node.js CLI bootstrap context where import.meta.url resolves correctly.
10
+ * Direct imports of tool-metadata from Next.js server action bundles break in
11
+ * standalone production mode because import.meta.url points to the chunk file.
9
12
  */
10
13
  export async function getAvailableTerminals() {
11
- const currentPlatform = platform();
12
- const entries = getTerminalEntries();
13
- const results = [];
14
- for (const [id, meta] of entries) {
15
- // Skip terminals not supported on this platform
16
- if (meta.platforms &&
17
- !meta.platforms.includes(currentPlatform)) {
18
- continue;
19
- }
20
- // System terminal is always available
21
- if (id === 'system-terminal') {
22
- results.unshift({ id: 'system', name: meta.name, available: true });
23
- continue;
24
- }
25
- // Check binary availability
26
- const binary = typeof meta.binary === 'string' ? meta.binary : meta.binary[currentPlatform];
27
- if (!binary)
28
- continue;
29
- // For app-bundle terminals (Warp, iTerm2) that use verifyCommand instead of binary check
30
- let available = false;
31
- if (meta.verifyCommand.startsWith('test ')) {
32
- // Use verifyCommand for app-bundle checks (e.g., "test -d /Applications/Warp.app")
33
- try {
34
- const { execSync } = await import('node:child_process');
35
- execSync(meta.verifyCommand, { stdio: 'ignore' });
36
- available = true;
37
- }
38
- catch {
39
- available = false;
40
- }
41
- }
42
- else {
43
- const result = await checkBinaryExists(binary);
44
- available = result.found;
45
- }
46
- results.push({ id, name: meta.name, available });
14
+ try {
15
+ const service = resolve('IToolInstallerService');
16
+ return await service.listAvailableTerminals();
47
17
  }
48
- // Ensure system terminal is always present even if not in tool metadata
49
- if (!results.some((r) => r.id === 'system')) {
50
- results.unshift({ id: 'system', name: 'System Terminal', available: true });
18
+ catch {
19
+ return [{ id: 'system', name: 'System Terminal', available: true }];
51
20
  }
52
- return results;
53
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"activity-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/activity-tab.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACtB,MAAM,yCAAyC,CAAC;AA4EjD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,iBAAiB,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC7C;AAmED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,mEAAmE;IACnE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,eAAe,EAAE,EAC1B,QAAQ,CAAC,EAAE,qBAAqB,EAAE,GACjC,iBAAiB,EAAE,CAgErB;AA6BD,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,gBAAgB,2CAqE3F"}
1
+ {"version":3,"file":"activity-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/activity-tab.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACtB,MAAM,yCAAyC,CAAC;AAmEjD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,iBAAiB,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC7C;AAmED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,mEAAmE;IACnE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,eAAe,EAAE,EAC1B,QAAQ,CAAC,EAAE,qBAAqB,EAAE,GACjC,iBAAiB,EAAE,CAgErB;AA6BD,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,gBAAgB,2CAqE3F"}
@@ -24,18 +24,12 @@ function getEffectiveDuration(timing, now) {
24
24
  function hasRunningPhase(timings) {
25
25
  return timings.some((t) => !t.phase.startsWith('run:') && !t.completedAt && t.startedAt);
26
26
  }
27
- /** Returns true if any non-lifecycle phase is currently waiting for approval. */
28
- function hasWaitingForApprovalPhase(timings) {
29
- return timings.some((t) => !t.phase.startsWith('run:') && !!t.waitingApprovalAt && !t.approvalWaitMs);
30
- }
31
- /** Hook that ticks every second while there are running or approval-waiting phases. */
27
+ /** Hook that ticks every second while there are running phases. */
32
28
  function useTickingNow(timings) {
33
29
  const [now, setNow] = useState(Date.now);
34
30
  const intervalRef = useRef(null);
35
31
  useEffect(() => {
36
- const running = timings
37
- ? hasRunningPhase(timings) || hasWaitingForApprovalPhase(timings)
38
- : false;
32
+ const running = timings ? hasRunningPhase(timings) : false;
39
33
  if (running) {
40
34
  // Tick every second
41
35
  intervalRef.current = setInterval(() => setNow(Date.now()), 1000);
@@ -319,21 +313,12 @@ function NodeTimingRow({ timing, maxDurationMs, now, }) {
319
313
  backgroundImage: 'linear-gradient(90deg, transparent 0%, rgb(59 130 246) 50%, transparent 100%)',
320
314
  backgroundSize: '200% 100%',
321
315
  animation: 'shimmer 1.5s ease-in-out infinite',
322
- } })) : (_jsx("div", { className: `h-full rounded-full transition-all duration-300 ${barColorClass}`, style: { width: `${Math.min(barPercent, 100)}%` } })) }), _jsx("span", { className: "text-muted-foreground w-14 shrink-0 text-right text-sm font-medium tabular-nums", children: formatDuration(durationMs) })] }), _jsxs("div", { className: "ml-[28px] flex items-center gap-3 text-xs", children: [timing.startedAt ? (_jsx("span", { className: "text-muted-foreground/60 tabular-nums", children: formatTimestamp(timing.startedAt) })) : null, totalTokens != null && totalTokens > 0 ? (_jsxs("span", { className: "text-muted-foreground/70 inline-flex items-center gap-0.5", children: [_jsx(Zap, { className: "h-3 w-3 opacity-50" }), formatTokens(totalTokens)] })) : null, timing.costUsd != null && timing.costUsd > 0 ? (_jsxs("span", { className: "text-muted-foreground/70 inline-flex items-center gap-0.5", children: [_jsx(DollarSign, { className: "h-3 w-3 opacity-50" }), formatCost(timing.costUsd)] })) : null] }), (timing.approvalWaitMs != null && timing.approvalWaitMs > 0) ||
323
- (timing.waitingApprovalAt && !timing.approvalWaitMs) ? (_jsx(ApprovalWaitRow, { timing: timing, maxDurationMs: maxDurationMs, now: now })) : null] }));
316
+ } })) : (_jsx("div", { className: `h-full rounded-full transition-all duration-300 ${barColorClass}`, style: { width: `${Math.min(barPercent, 100)}%` } })) }), _jsx("span", { className: "text-muted-foreground w-14 shrink-0 text-right text-sm font-medium tabular-nums", children: formatDuration(durationMs) })] }), _jsxs("div", { className: "ml-[28px] flex items-center gap-3 text-xs", children: [timing.startedAt ? (_jsx("span", { className: "text-muted-foreground/60 tabular-nums", children: formatTimestamp(timing.startedAt) })) : null, totalTokens != null && totalTokens > 0 ? (_jsxs("span", { className: "text-muted-foreground/70 inline-flex items-center gap-0.5", children: [_jsx(Zap, { className: "h-3 w-3 opacity-50" }), formatTokens(totalTokens)] })) : null, timing.costUsd != null && timing.costUsd > 0 ? (_jsxs("span", { className: "text-muted-foreground/70 inline-flex items-center gap-0.5", children: [_jsx(DollarSign, { className: "h-3 w-3 opacity-50" }), formatCost(timing.costUsd)] })) : null] }), timing.approvalWaitMs != null && timing.approvalWaitMs > 0 ? (_jsx(ApprovalWaitRow, { timing: timing, maxDurationMs: maxDurationMs })) : null] }));
324
317
  }
325
- function ApprovalWaitRow({ timing, maxDurationMs, now, }) {
326
- // isWaiting = approval requested but not yet resolved (live state)
327
- const isWaiting = !!timing.waitingApprovalAt && !timing.approvalWaitMs;
328
- const waitMs = isWaiting
329
- ? Math.max(0, now - new Date(String(timing.waitingApprovalAt)).getTime())
330
- : (timing.approvalWaitMs ?? 0);
318
+ function ApprovalWaitRow({ timing, maxDurationMs, }) {
319
+ const waitMs = timing.approvalWaitMs ?? 0;
331
320
  const barPercent = maxDurationMs > 0 ? Math.max(2, (waitMs / maxDurationMs) * 100) : 2;
332
- return (_jsxs("div", { "data-testid": `approval-wait-${timing.phase}`, className: "ml-[26px] flex items-center gap-2 rounded-md bg-amber-50/50 px-1.5 py-1 dark:bg-amber-950/20", children: [_jsx(Timer, { className: `h-3.5 w-3.5 shrink-0 text-amber-500 ${isWaiting ? 'animate-pulse' : ''}` }), _jsx("span", { className: "text-muted-foreground w-16 shrink-0 text-xs", children: isWaiting ? 'awaiting' : 'approval' }), _jsx("div", { className: "bg-muted relative h-1.5 min-w-0 flex-1 overflow-hidden rounded-full", children: isWaiting ? (_jsx("div", { className: "absolute inset-0 rounded-full", style: {
333
- backgroundImage: 'linear-gradient(90deg, transparent 0%, rgb(245 158 11) 50%, transparent 100%)',
334
- backgroundSize: '200% 100%',
335
- animation: 'shimmer 1.5s ease-in-out infinite',
336
- } })) : (_jsx("div", { className: "h-full rounded-full bg-amber-500", style: { width: `${Math.min(barPercent, 100)}%` } })) }), _jsx("span", { className: "text-muted-foreground w-14 shrink-0 text-right text-xs tabular-nums", children: formatDuration(waitMs) })] }));
321
+ return (_jsxs("div", { "data-testid": `approval-wait-${timing.phase}`, className: "ml-[26px] flex items-center gap-2 rounded-md bg-amber-50/50 px-1.5 py-1 dark:bg-amber-950/20", children: [_jsx(Timer, { className: "h-3.5 w-3.5 shrink-0 text-amber-500" }), _jsx("span", { className: "text-muted-foreground w-16 shrink-0 text-xs", children: "approval" }), _jsx("div", { className: "bg-muted h-1.5 min-w-0 flex-1 overflow-hidden rounded-full", children: _jsx("div", { className: "h-full rounded-full bg-amber-500", style: { width: `${Math.min(barPercent, 100)}%` } }) }), _jsx("span", { className: "text-muted-foreground w-14 shrink-0 text-right text-xs tabular-nums", children: formatDuration(waitMs) })] }));
337
322
  }
338
323
  function SummaryTotals({ totalExecMs, totalWaitMs, totalInputTokens, totalOutputTokens, totalCostUsd, }) {
339
324
  const totalTokens = totalInputTokens + totalOutputTokens;
@@ -32,20 +32,4 @@ export declare const WithApprovalWaits: Story;
32
32
  * Shows the full pattern: start → work → rejected → resumed → work → rejected → resumed → completed
33
33
  */
34
34
  export declare const FullLifecycle: Story;
35
- /**
36
- * Waiting for approval (live) — simulates the case where the agent has completed
37
- * a phase and is currently waiting for user approval. The "awaiting" sub-row shows
38
- * a pulsing amber indicator with a live-ticking timer.
39
- *
40
- * This covers the bug where the second merge iteration (after rejection + fixes)
41
- * did not show any approval wait indicator.
42
- */
43
- export declare const WaitingForApproval: Story;
44
- /**
45
- * Second iteration waiting for approval — simulates the exact reported bug:
46
- * after rejecting the merge step, the agent fixed things and is now waiting
47
- * for merge approval again in iteration 2. The activity tab must show the
48
- * "awaiting" indicator for merge:2.
49
- */
50
- export declare const SecondIterationWaitingForApproval: Story;
51
35
  //# sourceMappingURL=activity-tab.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"activity-tab.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,WAAW,CAclC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;AAsM1C,2EAA2E;AAC3E,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,0CAA0C;AAC1C,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,aAAa,EAAE,KAsE3B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAwEhC,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,iBAAiB,EAAE,KAgC/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,KAiI3B,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAoChC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,EAAE,KA0E/C,CAAC"}
1
+ {"version":3,"file":"activity-tab.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,WAAW,CAclC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;AAsM1C,2EAA2E;AAC3E,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,0CAA0C;AAC1C,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,aAAa,EAAE,KAsE3B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAwEhC,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,iBAAiB,EAAE,KAgC/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,KAiI3B,CAAC"}
@@ -570,129 +570,3 @@ export const FullLifecycle = {
570
570
  error: null,
571
571
  },
572
572
  };
573
- /**
574
- * Waiting for approval (live) — simulates the case where the agent has completed
575
- * a phase and is currently waiting for user approval. The "awaiting" sub-row shows
576
- * a pulsing amber indicator with a live-ticking timer.
577
- *
578
- * This covers the bug where the second merge iteration (after rejection + fixes)
579
- * did not show any approval wait indicator.
580
- */
581
- export const WaitingForApproval = {
582
- args: {
583
- timings: [
584
- {
585
- agentRunId: 'run-1',
586
- phase: 'run:started',
587
- startedAt: new Date(Date.now() - 120000).toISOString(),
588
- durationMs: 0,
589
- },
590
- {
591
- agentRunId: 'run-1',
592
- phase: 'analyze',
593
- startedAt: new Date(Date.now() - 119000).toISOString(),
594
- completedAt: new Date(Date.now() - 105000).toISOString(),
595
- durationMs: 14000,
596
- },
597
- {
598
- agentRunId: 'run-1',
599
- phase: 'implement',
600
- startedAt: new Date(Date.now() - 105000).toISOString(),
601
- completedAt: new Date(Date.now() - 60000).toISOString(),
602
- durationMs: 45000,
603
- },
604
- {
605
- agentRunId: 'run-1',
606
- phase: 'merge',
607
- startedAt: new Date(Date.now() - 60000).toISOString(),
608
- completedAt: new Date(Date.now() - 30000).toISOString(),
609
- durationMs: 30000,
610
- // waitingApprovalAt set but approvalWaitMs absent = currently waiting
611
- waitingApprovalAt: new Date(Date.now() - 30000).toISOString(),
612
- },
613
- ],
614
- loading: false,
615
- error: null,
616
- },
617
- };
618
- /**
619
- * Second iteration waiting for approval — simulates the exact reported bug:
620
- * after rejecting the merge step, the agent fixed things and is now waiting
621
- * for merge approval again in iteration 2. The activity tab must show the
622
- * "awaiting" indicator for merge:2.
623
- */
624
- export const SecondIterationWaitingForApproval = {
625
- args: {
626
- timings: [
627
- // Iteration 1
628
- {
629
- agentRunId: 'run-1',
630
- phase: 'run:started',
631
- startedAt: new Date(Date.now() - 300000).toISOString(),
632
- durationMs: 0,
633
- },
634
- {
635
- agentRunId: 'run-1',
636
- phase: 'analyze',
637
- startedAt: new Date(Date.now() - 299000).toISOString(),
638
- completedAt: new Date(Date.now() - 285000).toISOString(),
639
- durationMs: 14000,
640
- },
641
- {
642
- agentRunId: 'run-1',
643
- phase: 'implement',
644
- startedAt: new Date(Date.now() - 285000).toISOString(),
645
- completedAt: new Date(Date.now() - 240000).toISOString(),
646
- durationMs: 45000,
647
- },
648
- {
649
- agentRunId: 'run-1',
650
- phase: 'merge',
651
- startedAt: new Date(Date.now() - 240000).toISOString(),
652
- completedAt: new Date(Date.now() - 210000).toISOString(),
653
- durationMs: 30000,
654
- waitingApprovalAt: new Date(Date.now() - 210000).toISOString(),
655
- approvalWaitMs: 15000,
656
- },
657
- {
658
- agentRunId: 'run-1',
659
- phase: 'run:rejected',
660
- startedAt: new Date(Date.now() - 195000).toISOString(),
661
- durationMs: 0,
662
- },
663
- // Iteration 2
664
- {
665
- agentRunId: 'run-1',
666
- phase: 'run:resumed',
667
- startedAt: new Date(Date.now() - 180000).toISOString(),
668
- durationMs: 0,
669
- },
670
- {
671
- agentRunId: 'run-1',
672
- phase: 'implement:2',
673
- startedAt: new Date(Date.now() - 180000).toISOString(),
674
- completedAt: new Date(Date.now() - 60000).toISOString(),
675
- durationMs: 120000,
676
- },
677
- {
678
- agentRunId: 'run-1',
679
- phase: 'merge:2',
680
- startedAt: new Date(Date.now() - 60000).toISOString(),
681
- completedAt: new Date(Date.now() - 30000).toISOString(),
682
- durationMs: 30000,
683
- // Currently waiting — approvalWaitMs absent
684
- waitingApprovalAt: new Date(Date.now() - 30000).toISOString(),
685
- },
686
- ],
687
- rejectionFeedback: [
688
- {
689
- iteration: 1,
690
- message: 'The PR has merge conflicts — rebase on main first',
691
- phase: 'merge',
692
- timestamp: new Date(Date.now() - 195000).toISOString(),
693
- },
694
- ],
695
- loading: false,
696
- error: null,
697
- },
698
- };