@shepai/cli 1.103.1 → 1.104.0-pr299.a2cc06c

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 (215) hide show
  1. package/dist/packages/core/src/application/use-cases/upgrade/upgrade-cli.use-case.d.ts +27 -0
  2. package/dist/packages/core/src/application/use-cases/upgrade/upgrade-cli.use-case.d.ts.map +1 -0
  3. package/dist/packages/core/src/application/use-cases/upgrade/upgrade-cli.use-case.js +128 -0
  4. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  5. package/dist/packages/core/src/infrastructure/di/container.js +5 -0
  6. package/dist/packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.d.ts.map +1 -1
  7. package/dist/packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.js +5 -3
  8. package/dist/packages/core/src/infrastructure/services/agents/sessions/claude-code-session.repository.js +1 -1
  9. package/dist/packages/core/src/infrastructure/services/deployment/deployment.service.d.ts +1 -1
  10. package/dist/packages/core/src/infrastructure/services/deployment/deployment.service.d.ts.map +1 -1
  11. package/dist/packages/core/src/infrastructure/services/deployment/deployment.service.js +8 -7
  12. package/dist/packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.d.ts.map +1 -1
  13. package/dist/packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.js +6 -8
  14. package/dist/packages/core/src/infrastructure/services/process/tree-kill.d.ts +12 -0
  15. package/dist/packages/core/src/infrastructure/services/process/tree-kill.d.ts.map +1 -0
  16. package/dist/packages/core/src/infrastructure/services/process/tree-kill.js +11 -0
  17. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.js +1 -1
  18. package/dist/packages/core/src/infrastructure/services/tool-installer/binary-exists.d.ts +25 -0
  19. package/dist/packages/core/src/infrastructure/services/tool-installer/binary-exists.d.ts.map +1 -0
  20. package/dist/packages/core/src/infrastructure/services/tool-installer/binary-exists.js +32 -0
  21. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.d.ts.map +1 -1
  22. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.js +4 -27
  23. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/alacritty.json +3 -2
  24. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/claude-code.json +3 -2
  25. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor-cli.json +3 -2
  26. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor.json +2 -1
  27. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/gh.json +2 -1
  28. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/git.json +2 -1
  29. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/vscode.json +2 -1
  30. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/warp.json +3 -2
  31. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/windsurf.json +3 -2
  32. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/zed.json +3 -2
  33. package/dist/src/presentation/cli/commands/daemon/start-daemon.d.ts.map +1 -1
  34. package/dist/src/presentation/cli/commands/daemon/start-daemon.js +1 -0
  35. package/dist/src/presentation/cli/commands/daemon/stop-daemon.d.ts.map +1 -1
  36. package/dist/src/presentation/cli/commands/daemon/stop-daemon.js +5 -4
  37. package/dist/src/presentation/cli/ui/symbols.d.ts +1 -1
  38. package/dist/src/presentation/web/app/actions/deploy-repository.d.ts.map +1 -1
  39. package/dist/src/presentation/web/app/actions/deploy-repository.js +2 -1
  40. package/dist/src/presentation/web/app/actions/open-folder.d.ts.map +1 -1
  41. package/dist/src/presentation/web/app/actions/open-folder.js +4 -2
  42. package/dist/src/presentation/web/app/actions/open-ide.d.ts.map +1 -1
  43. package/dist/src/presentation/web/app/actions/open-ide.js +2 -1
  44. package/dist/src/presentation/web/app/actions/open-shell.d.ts.map +1 -1
  45. package/dist/src/presentation/web/app/actions/open-shell.js +4 -2
  46. package/dist/src/presentation/web/app/api/cli-upgrade/route.d.ts +3 -0
  47. package/dist/src/presentation/web/app/api/cli-upgrade/route.d.ts.map +1 -0
  48. package/dist/src/presentation/web/app/api/cli-upgrade/route.js +31 -0
  49. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  50. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +1 -1
  51. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts.map +1 -1
  52. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.js +50 -8
  53. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +4 -1
  54. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -1
  55. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +31 -11
  56. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts.map +1 -1
  57. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.js +35 -2
  58. package/dist/src/presentation/web/components/common/merge-review/diff-view.js +1 -1
  59. package/dist/src/presentation/web/components/common/version-badge/version-badge.d.ts.map +1 -1
  60. package/dist/src/presentation/web/components/common/version-badge/version-badge.js +6 -2
  61. package/dist/src/presentation/web/components/common/version-badge/version-badge.stories.d.ts +2 -2
  62. package/dist/src/presentation/web/components/common/version-badge/version-badge.stories.d.ts.map +1 -1
  63. package/dist/src/presentation/web/components/common/version-badge/version-badge.stories.js +20 -3
  64. package/dist/src/presentation/web/hooks/use-cli-upgrade.d.ts +11 -0
  65. package/dist/src/presentation/web/hooks/use-cli-upgrade.d.ts.map +1 -0
  66. package/dist/src/presentation/web/hooks/use-cli-upgrade.js +73 -0
  67. package/dist/tsconfig.build.tsbuildinfo +1 -1
  68. package/package.json +3 -1
  69. package/web/.next/BUILD_ID +1 -1
  70. package/web/.next/app-path-routes-manifest.json +1 -0
  71. package/web/.next/build-manifest.json +2 -2
  72. package/web/.next/fallback-build-manifest.json +2 -2
  73. package/web/.next/prerender-manifest.json +3 -3
  74. package/web/.next/required-server-files.js +3 -3
  75. package/web/.next/required-server-files.json +3 -3
  76. package/web/.next/routes-manifest.json +6 -0
  77. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +20 -20
  78. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  79. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  80. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +25 -25
  81. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  82. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  83. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +25 -25
  84. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  85. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  86. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
  87. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  88. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  89. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +20 -20
  90. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  91. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  92. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +25 -25
  93. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  94. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  95. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +25 -25
  96. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  97. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  98. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +18 -18
  99. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  100. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  101. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
  102. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  103. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  104. package/web/.next/server/app/_global-error.html +2 -2
  105. package/web/.next/server/app/_global-error.rsc +1 -1
  106. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  107. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  108. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  109. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  110. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  111. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  112. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  113. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  114. package/web/.next/server/app/api/cli-upgrade/route/app-paths-manifest.json +3 -0
  115. package/web/.next/server/app/api/cli-upgrade/route/build-manifest.json +11 -0
  116. package/web/.next/server/app/api/cli-upgrade/route/server-reference-manifest.json +4 -0
  117. package/web/.next/server/app/api/cli-upgrade/route.js +6 -0
  118. package/web/.next/server/app/api/cli-upgrade/route.js.map +5 -0
  119. package/web/.next/server/app/api/cli-upgrade/route.js.nft.json +1 -0
  120. package/web/.next/server/app/api/cli-upgrade/route_client-reference-manifest.js +2 -0
  121. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  122. package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
  123. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  124. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  125. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  126. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  127. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  128. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  129. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  130. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  131. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  132. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  133. package/web/.next/server/app-paths-manifest.json +1 -0
  134. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_cli-upgrade_route_actions_dc509b52.js +3 -0
  135. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_cli-upgrade_route_actions_dc509b52.js.map +1 -0
  136. package/web/.next/server/chunks/[root-of-the-server]__d2c18946._.js +11 -0
  137. package/web/.next/server/chunks/[root-of-the-server]__d2c18946._.js.map +1 -0
  138. package/web/.next/server/chunks/[root-of-the-server]__f47bb8a5._.js +1 -1
  139. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  140. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  141. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_0a7546ed.js +1 -1
  142. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_0a7546ed.js.map +1 -1
  143. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_978cbb4c.js +1 -1
  144. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_978cbb4c.js.map +1 -1
  145. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
  146. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
  147. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js +2 -2
  148. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js.map +1 -1
  149. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  150. package/web/.next/server/chunks/ssr/[root-of-the-server]__51fc98b0._.js +1 -1
  151. package/web/.next/server/chunks/ssr/[root-of-the-server]__51fc98b0._.js.map +1 -1
  152. package/web/.next/server/chunks/ssr/[root-of-the-server]__57f37786._.js +1 -1
  153. package/web/.next/server/chunks/ssr/[root-of-the-server]__57f37786._.js.map +1 -1
  154. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
  155. package/web/.next/server/chunks/ssr/[root-of-the-server]__708dcad1._.js +1 -1
  156. package/web/.next/server/chunks/ssr/[root-of-the-server]__708dcad1._.js.map +1 -1
  157. package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js +1 -1
  158. package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js.map +1 -1
  159. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
  160. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js.map +1 -1
  161. package/web/.next/server/chunks/ssr/[root-of-the-server]__8e002910._.js +1 -1
  162. package/web/.next/server/chunks/ssr/[root-of-the-server]__8e002910._.js.map +1 -1
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
  164. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  165. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
  166. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
  167. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  168. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  169. package/web/.next/server/chunks/ssr/{_82e0cb85._.js → _2e3ec01b._.js} +2 -2
  170. package/web/.next/server/chunks/ssr/{_82e0cb85._.js.map → _2e3ec01b._.js.map} +1 -1
  171. package/web/.next/server/chunks/ssr/{_b3352e34._.js → _4038d4ba._.js} +2 -2
  172. package/web/.next/server/chunks/ssr/{_b3352e34._.js.map → _4038d4ba._.js.map} +1 -1
  173. package/web/.next/server/chunks/ssr/{_23e5ab2c._.js → _606f5d13._.js} +2 -2
  174. package/web/.next/server/chunks/ssr/{_23e5ab2c._.js.map → _606f5d13._.js.map} +1 -1
  175. package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
  176. package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
  177. package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
  178. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  179. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  180. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  181. package/web/.next/server/chunks/ssr/src_presentation_web_7275ce5d._.js +2 -2
  182. package/web/.next/server/chunks/ssr/src_presentation_web_7275ce5d._.js.map +1 -1
  183. package/web/.next/server/chunks/ssr/src_presentation_web_758dfa10._.js +2 -2
  184. package/web/.next/server/chunks/ssr/src_presentation_web_758dfa10._.js.map +1 -1
  185. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_84803221.js +1 -1
  186. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_84803221.js.map +1 -1
  187. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  188. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  189. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  190. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  191. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  192. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  193. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  194. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  195. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  196. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  197. package/web/.next/server/pages/500.html +2 -2
  198. package/web/.next/server/server-reference-manifest.js +1 -1
  199. package/web/.next/server/server-reference-manifest.json +30 -30
  200. package/web/.next/static/chunks/{a0f87e10178f4c0e.js → 04f85d1bb4c9bd9f.js} +1 -1
  201. package/web/.next/static/chunks/{d7cc1b6cf702a840.js → 106f17ea546b4873.js} +2 -2
  202. package/web/.next/static/chunks/{4fd27329675da3a8.js → 3a19191db405a122.js} +1 -1
  203. package/web/.next/static/chunks/3bb35e0689e8b6b7.js +1 -0
  204. package/web/.next/static/chunks/{2e2bbd77e10e036c.js → 57a806a72d427ce2.js} +1 -1
  205. package/web/.next/static/chunks/{2016bacd1f5fcc12.js → 58f603517ee8f671.js} +1 -1
  206. package/web/.next/static/chunks/{396a8b5222dfe0f1.js → 5cd861cac966b22e.js} +1 -1
  207. package/web/.next/static/chunks/{8d98f1d9341e7698.js → 7e08e1d6fc515719.js} +1 -1
  208. package/web/.next/static/chunks/{3e1f5c0f67be293f.js → 9ae5355ecbb986c4.js} +1 -1
  209. package/web/.next/static/chunks/{8b1d0f725365fc83.js → ad4c597b1d9f2868.js} +1 -1
  210. package/web/.next/static/chunks/fe424cb940ac3b65.js +2 -0
  211. package/web/.next/static/chunks/0c1c3c49b2145c9b.js +0 -2
  212. package/web/.next/static/chunks/2a6f05312c4f37ce.js +0 -1
  213. /package/web/.next/static/{7gAZbyat8KbbWMGw1K8nJ → KRcEMJYZ0qHENkXOfvNU-}/_buildManifest.js +0 -0
  214. /package/web/.next/static/{7gAZbyat8KbbWMGw1K8nJ → KRcEMJYZ0qHENkXOfvNU-}/_clientMiddlewareManifest.json +0 -0
  215. /package/web/.next/static/{7gAZbyat8KbbWMGw1K8nJ → KRcEMJYZ0qHENkXOfvNU-}/_ssgManifest.js +0 -0
@@ -2,13 +2,17 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../ui/tooltip.js';
4
4
  import { useNpmVersionCheck } from '../../../hooks/use-npm-version-check.js';
5
+ import { useCliUpgrade } from '../../../hooks/use-cli-upgrade.js';
5
6
  export function VersionBadge({ version, branch, commitHash, isDev = false, packageName = '@shepai/cli', description, instancePath, }) {
6
7
  const shortHash = commitHash?.slice(0, 7);
7
8
  const { latest, updateAvailable } = useNpmVersionCheck(version);
9
+ const { status: upgradeStatus, startUpgrade } = useCliUpgrade();
8
10
  // In dev mode show "1.92.2-dev", in production show "v1.92.2"
9
11
  const displayVersion = isDev ? `${version}-dev` : `v${version}`;
10
- const npmUrl = `https://www.npmjs.com/package/${packageName}`;
11
- return (_jsx(TooltipProvider, { delayDuration: 200, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("span", { className: "text-muted-foreground/80 hover:text-muted-foreground relative cursor-default text-[11px] leading-tight transition-colors", "data-testid": "version-label", children: [displayVersion, updateAvailable ? (_jsx("span", { className: "absolute -top-0.5 -right-1.5 size-1.5 rounded-full bg-emerald-400", "data-testid": "update-dot" })) : null] }) }), _jsxs(TooltipContent, { side: "right", className: "max-w-[280px] space-y-1 p-3 text-left", children: [_jsx("div", { className: "mb-1.5 text-xs font-semibold", children: packageName }), description ? (_jsx("div", { className: "text-[10px] leading-snug opacity-70", children: description })) : null, _jsxs("div", { className: "border-t border-white/10 pt-1.5", children: [_jsx(Row, { label: "Version", value: displayVersion }), isDev && branch ? _jsx(Row, { label: "Branch", value: branch }) : null, isDev && shortHash ? _jsx(Row, { label: "Commit", value: shortHash, mono: true }) : null, isDev && instancePath ? _jsx(Row, { label: "Path", value: instancePath, mono: true }) : null, latest ? (_jsx(Row, { label: "Latest", value: `v${latest}`, highlight: updateAvailable })) : null] }), updateAvailable ? (_jsx("div", { className: "border-t border-white/10 pt-1.5", children: _jsxs("a", { href: npmUrl, target: "_blank", rel: "noopener noreferrer", className: "inline-flex items-center gap-1 text-[10px] font-medium text-emerald-400 transition-colors hover:text-emerald-300", "data-testid": "upgrade-link", children: ["Upgrade to v", latest, " \u2192"] }) })) : null] })] }) }));
12
+ const isUpgrading = upgradeStatus === 'upgrading';
13
+ const didUpgrade = upgradeStatus === 'upgraded';
14
+ const upgradeError = upgradeStatus === 'error';
15
+ return (_jsx(TooltipProvider, { delayDuration: 200, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("span", { className: "text-muted-foreground/80 hover:text-muted-foreground relative cursor-default text-[11px] leading-tight transition-colors", "data-testid": "version-label", children: [displayVersion, updateAvailable && !didUpgrade ? (_jsx("span", { className: "absolute -top-0.5 -right-1.5 size-1.5 rounded-full bg-emerald-400", "data-testid": "update-dot" })) : null] }) }), _jsxs(TooltipContent, { side: "right", className: "max-w-[280px] space-y-1 p-3 text-left", children: [_jsx("div", { className: "mb-1.5 text-xs font-semibold", children: packageName }), description ? (_jsx("div", { className: "text-[10px] leading-snug opacity-70", children: description })) : null, _jsxs("div", { className: "border-t border-white/10 pt-1.5", children: [_jsx(Row, { label: "Version", value: displayVersion }), isDev && branch ? _jsx(Row, { label: "Branch", value: branch }) : null, isDev && shortHash ? _jsx(Row, { label: "Commit", value: shortHash, mono: true }) : null, isDev && instancePath ? _jsx(Row, { label: "Path", value: instancePath, mono: true }) : null, latest ? (_jsx(Row, { label: "Latest", value: `v${latest}`, highlight: updateAvailable })) : null] }), didUpgrade ? (_jsx("div", { className: "border-t border-white/10 pt-1.5", children: _jsx("span", { className: "text-[10px] font-medium text-emerald-400", "data-testid": "upgrade-success", children: "Upgraded successfully \u2014 restart to apply" }) })) : upgradeError ? (_jsx("div", { className: "border-t border-white/10 pt-1.5", children: _jsx("span", { className: "text-[10px] font-medium text-red-400", "data-testid": "upgrade-error", children: "Upgrade failed" }) })) : updateAvailable ? (_jsx("div", { className: "border-t border-white/10 pt-1.5", children: _jsx("button", { type: "button", onClick: startUpgrade, disabled: isUpgrading, className: "inline-flex items-center gap-1 text-[10px] font-medium text-emerald-400 transition-colors hover:text-emerald-300 disabled:opacity-50", "data-testid": "upgrade-button", children: isUpgrading ? 'Upgrading...' : `Upgrade to v${latest}` }) })) : null] })] }) }));
12
16
  }
13
17
  function Row({ label, value, highlight, mono, }) {
14
18
  return (_jsxs("div", { className: "flex items-center justify-between gap-4 text-[10px]", children: [_jsx("span", { className: "opacity-60", children: label }), _jsx("span", { className: [
@@ -11,9 +11,9 @@ export declare const Development: Story;
11
11
  export declare const LongBranch: Story;
12
12
  /** Minimal info — no optional fields. */
13
13
  export declare const Minimal: Story;
14
- /** Update available — green dot appears, tooltip shows "Upgrade to v2.0.0" link. */
14
+ /** Update available — green dot appears, tooltip shows "Upgrade to v2.0.0" button. */
15
15
  export declare const UpdateAvailable: Story;
16
- /** Update available in dev mode — green dot + upgrade link alongside dev info. */
16
+ /** Update available in dev mode — green dot + upgrade button alongside dev info. */
17
17
  export declare const UpdateAvailableDev: Story;
18
18
  /** Fetch error — no update info shown, badge behaves normally. */
19
19
  export declare const FetchError: Story;
@@ -1 +1 @@
1
- {"version":3,"file":"version-badge.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/version-badge/version-badge.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAa,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAmC/C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,YAAY,CAOnC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,YAAY,CAAC,CAAC;AAE3C,mFAAmF;AACnF,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAC;AAEF,wFAAwF;AACxF,eAAO,MAAM,WAAW,EAAE,KAWzB,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,UAAU,EAAE,KAWxB,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,oFAAoF;AACpF,eAAO,MAAM,eAAe,EAAE,KAO7B,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,kBAAkB,EAAE,KAWhC,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAC"}
1
+ {"version":3,"file":"version-badge.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/version-badge/version-badge.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAa,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAwD/C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,YAAY,CAOnC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,YAAY,CAAC,CAAC;AAE3C,mFAAmF;AACnF,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAC;AAEF,wFAAwF;AACxF,eAAO,MAAM,WAAW,EAAE,KAWzB,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,UAAU,EAAE,KAWxB,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,sFAAsF;AACtF,eAAO,MAAM,eAAe,EAAE,KAO7B,CAAC;AAEF,oFAAoF;AACpF,eAAO,MAAM,kBAAkB,EAAE,KAWhC,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { VersionBadge } from './version-badge.js';
3
3
  /**
4
- * Decorator that mocks the /api/npm-version endpoint to return a specific latest version.
4
+ * Decorator that mocks the /api/npm-version endpoint to return a specific latest version
5
+ * and the /api/cli-upgrade endpoint to simulate an upgrade.
5
6
  */
6
7
  function withNpmVersion(latest) {
7
8
  return (Story) => {
@@ -14,6 +15,22 @@ function withNpmVersion(latest) {
14
15
  headers: { 'Content-Type': 'application/json' },
15
16
  });
16
17
  }
18
+ if (url.includes('/api/cli-upgrade')) {
19
+ const encoder = new TextEncoder();
20
+ const stream = new ReadableStream({
21
+ start(controller) {
22
+ controller.enqueue(encoder.encode(`data: Upgrading to v${latest}...\n\n`));
23
+ setTimeout(() => {
24
+ controller.enqueue(encoder.encode(`event: done\ndata: ${JSON.stringify({ status: 'upgraded', currentVersion: '1.90.0', latestVersion: latest })}\n\n`));
25
+ controller.close();
26
+ }, 1000);
27
+ },
28
+ });
29
+ return new Response(stream, {
30
+ status: 200,
31
+ headers: { 'Content-Type': 'text/event-stream' },
32
+ });
33
+ }
17
34
  return originalFetch(input, init);
18
35
  });
19
36
  return _jsx(Story, {});
@@ -82,7 +99,7 @@ export const Minimal = {
82
99
  version: '1.0.0',
83
100
  },
84
101
  };
85
- /** Update available — green dot appears, tooltip shows "Upgrade to v2.0.0" link. */
102
+ /** Update available — green dot appears, tooltip shows "Upgrade to v2.0.0" button. */
86
103
  export const UpdateAvailable = {
87
104
  decorators: [withNpmVersion('2.0.0')],
88
105
  args: {
@@ -91,7 +108,7 @@ export const UpdateAvailable = {
91
108
  description: 'Autonomous AI Native SDLC Platform',
92
109
  },
93
110
  };
94
- /** Update available in dev mode — green dot + upgrade link alongside dev info. */
111
+ /** Update available in dev mode — green dot + upgrade button alongside dev info. */
95
112
  export const UpdateAvailableDev = {
96
113
  decorators: [withNpmVersion('2.0.0')],
97
114
  args: {
@@ -0,0 +1,11 @@
1
+ export type UpgradeStatus = 'idle' | 'upgrading' | 'upgraded' | 'up-to-date' | 'error';
2
+ export interface CliUpgradeState {
3
+ status: UpgradeStatus;
4
+ output: string;
5
+ errorMessage?: string;
6
+ }
7
+ export interface CliUpgradeActions {
8
+ startUpgrade: () => void;
9
+ }
10
+ export declare function useCliUpgrade(): CliUpgradeState & CliUpgradeActions;
11
+ //# sourceMappingURL=use-cli-upgrade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-cli-upgrade.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/use-cli-upgrade.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,YAAY,GAAG,OAAO,CAAC;AAEvF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,wBAAgB,aAAa,IAAI,eAAe,GAAG,iBAAiB,CA6EnE"}
@@ -0,0 +1,73 @@
1
+ 'use client';
2
+ import { useCallback, useRef, useState } from 'react';
3
+ export function useCliUpgrade() {
4
+ const [status, setStatus] = useState('idle');
5
+ const [output, setOutput] = useState('');
6
+ const [errorMessage, setErrorMessage] = useState();
7
+ const abortRef = useRef(null);
8
+ const startUpgrade = useCallback(() => {
9
+ if (status === 'upgrading')
10
+ return;
11
+ setStatus('upgrading');
12
+ setOutput('');
13
+ setErrorMessage(undefined);
14
+ const controller = new AbortController();
15
+ abortRef.current = controller;
16
+ fetch('/api/cli-upgrade', { method: 'POST', signal: controller.signal })
17
+ .then(async (response) => {
18
+ if (!response.ok || !response.body) {
19
+ setStatus('error');
20
+ setErrorMessage(`Server returned ${response.status}`);
21
+ return;
22
+ }
23
+ const reader = response.body.getReader();
24
+ const decoder = new TextDecoder();
25
+ let buffer = '';
26
+ while (true) {
27
+ const { done, value } = await reader.read();
28
+ if (done)
29
+ break;
30
+ buffer += decoder.decode(value, { stream: true });
31
+ const lines = buffer.split('\n');
32
+ buffer = lines.pop() ?? '';
33
+ for (const line of lines) {
34
+ if (line.startsWith('event: done')) {
35
+ // Next data line contains the final result
36
+ continue;
37
+ }
38
+ if (line.startsWith('data: ')) {
39
+ const payload = line.slice(6);
40
+ // Try to parse as final JSON result
41
+ try {
42
+ const result = JSON.parse(payload);
43
+ if (result.status === 'upgraded') {
44
+ setStatus('upgraded');
45
+ }
46
+ else if (result.status === 'up-to-date') {
47
+ setStatus('up-to-date');
48
+ }
49
+ else if (result.status === 'error') {
50
+ setStatus('error');
51
+ setErrorMessage(result.errorMessage);
52
+ }
53
+ }
54
+ catch {
55
+ // Regular output line
56
+ setOutput((prev) => prev + payload);
57
+ }
58
+ }
59
+ }
60
+ }
61
+ })
62
+ .catch((err) => {
63
+ if (err instanceof DOMException && err.name === 'AbortError')
64
+ return;
65
+ setStatus('error');
66
+ setErrorMessage(err instanceof Error ? err.message : 'Upgrade failed');
67
+ });
68
+ return () => {
69
+ controller.abort();
70
+ };
71
+ }, [status]);
72
+ return { status, output, errorMessage, startUpgrade };
73
+ }