@shepai/cli 1.104.0 → 1.104.1-pr299.6a46a49

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 (177) hide show
  1. package/dist/packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.d.ts.map +1 -1
  2. package/dist/packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.js +5 -3
  3. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/evidence-prompts.d.ts.map +1 -1
  4. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/evidence-prompts.js +4 -3
  5. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.d.ts.map +1 -1
  6. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.js +2 -1
  7. package/dist/packages/core/src/infrastructure/services/agents/sessions/claude-code-session.repository.js +1 -1
  8. package/dist/packages/core/src/infrastructure/services/attachment-storage.service.js +3 -3
  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/git/worktree.service.js +1 -1
  13. package/dist/packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.js +1 -1
  14. package/dist/packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.d.ts.map +1 -1
  15. package/dist/packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.js +6 -8
  16. package/dist/packages/core/src/infrastructure/services/process/tree-kill.d.ts +12 -0
  17. package/dist/packages/core/src/infrastructure/services/process/tree-kill.d.ts.map +1 -0
  18. package/dist/packages/core/src/infrastructure/services/process/tree-kill.js +11 -0
  19. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.js +1 -1
  20. package/dist/packages/core/src/infrastructure/services/tool-installer/binary-exists.d.ts +25 -0
  21. package/dist/packages/core/src/infrastructure/services/tool-installer/binary-exists.d.ts.map +1 -0
  22. package/dist/packages/core/src/infrastructure/services/tool-installer/binary-exists.js +32 -0
  23. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.d.ts.map +1 -1
  24. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.js +4 -27
  25. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/alacritty.json +3 -2
  26. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/claude-code.json +3 -2
  27. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor-cli.json +3 -2
  28. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor.json +2 -1
  29. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/gh.json +2 -1
  30. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/git.json +2 -1
  31. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/vscode.json +2 -1
  32. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/warp.json +3 -2
  33. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/windsurf.json +3 -2
  34. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/zed.json +3 -2
  35. package/dist/src/presentation/cli/commands/daemon/start-daemon.d.ts.map +1 -1
  36. package/dist/src/presentation/cli/commands/daemon/start-daemon.js +1 -0
  37. package/dist/src/presentation/cli/commands/daemon/stop-daemon.d.ts.map +1 -1
  38. package/dist/src/presentation/cli/commands/daemon/stop-daemon.js +5 -4
  39. package/dist/src/presentation/cli/commands/upgrade.command.d.ts.map +1 -1
  40. package/dist/src/presentation/cli/commands/upgrade.command.js +4 -0
  41. package/dist/src/presentation/web/app/actions/deploy-repository.d.ts.map +1 -1
  42. package/dist/src/presentation/web/app/actions/deploy-repository.js +2 -1
  43. package/dist/src/presentation/web/app/actions/open-folder.d.ts.map +1 -1
  44. package/dist/src/presentation/web/app/actions/open-folder.js +4 -2
  45. package/dist/src/presentation/web/app/actions/open-ide.d.ts.map +1 -1
  46. package/dist/src/presentation/web/app/actions/open-ide.js +2 -1
  47. package/dist/src/presentation/web/app/actions/open-shell.d.ts.map +1 -1
  48. package/dist/src/presentation/web/app/actions/open-shell.js +4 -2
  49. package/dist/src/presentation/web/components/common/merge-review/diff-view.js +1 -1
  50. package/dist/tsconfig.build.tsbuildinfo +1 -1
  51. package/package.json +10 -6
  52. package/web/.next/BUILD_ID +1 -1
  53. package/web/.next/build-manifest.json +2 -2
  54. package/web/.next/fallback-build-manifest.json +2 -2
  55. package/web/.next/prerender-manifest.json +3 -3
  56. package/web/.next/required-server-files.js +3 -3
  57. package/web/.next/required-server-files.json +3 -3
  58. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +20 -20
  59. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  60. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  61. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +25 -25
  62. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  63. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  64. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +25 -25
  65. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  66. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  67. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
  68. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  69. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  70. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +20 -20
  71. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  72. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  73. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +25 -25
  74. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  75. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  76. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +25 -25
  77. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  78. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  79. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +18 -18
  80. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  81. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  82. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
  83. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  84. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  85. package/web/.next/server/app/_global-error.html +2 -2
  86. package/web/.next/server/app/_global-error.rsc +1 -1
  87. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  88. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  89. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  90. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  91. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  92. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  93. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  94. package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
  95. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  96. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  97. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  98. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  99. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  100. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  101. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  102. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  103. package/web/.next/server/chunks/[root-of-the-server]__f47bb8a5._.js +1 -1
  104. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  105. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  106. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_0a7546ed.js +1 -1
  107. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_0a7546ed.js.map +1 -1
  108. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_978cbb4c.js +1 -1
  109. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_978cbb4c.js.map +1 -1
  110. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
  111. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
  112. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js +2 -2
  113. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js.map +1 -1
  114. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  115. package/web/.next/server/chunks/ssr/[root-of-the-server]__51fc98b0._.js +1 -1
  116. package/web/.next/server/chunks/ssr/[root-of-the-server]__51fc98b0._.js.map +1 -1
  117. package/web/.next/server/chunks/ssr/[root-of-the-server]__57f37786._.js +1 -1
  118. package/web/.next/server/chunks/ssr/[root-of-the-server]__57f37786._.js.map +1 -1
  119. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
  120. package/web/.next/server/chunks/ssr/[root-of-the-server]__708dcad1._.js +1 -1
  121. package/web/.next/server/chunks/ssr/[root-of-the-server]__708dcad1._.js.map +1 -1
  122. package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js +1 -1
  123. package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js.map +1 -1
  124. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
  125. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js.map +1 -1
  126. package/web/.next/server/chunks/ssr/[root-of-the-server]__8e002910._.js +1 -1
  127. package/web/.next/server/chunks/ssr/[root-of-the-server]__8e002910._.js.map +1 -1
  128. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
  129. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  130. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
  131. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
  132. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  133. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  134. package/web/.next/server/chunks/ssr/{_c189deb2._.js → _21faa7a8._.js} +2 -2
  135. package/web/.next/server/chunks/ssr/{_c189deb2._.js.map → _21faa7a8._.js.map} +1 -1
  136. package/web/.next/server/chunks/ssr/{_1e9bf571._.js → _3c9b7604._.js} +2 -2
  137. package/web/.next/server/chunks/ssr/{_1e9bf571._.js.map → _3c9b7604._.js.map} +1 -1
  138. package/web/.next/server/chunks/ssr/{_eafbd006._.js → _6b3932e4._.js} +2 -2
  139. package/web/.next/server/chunks/ssr/{_eafbd006._.js.map → _6b3932e4._.js.map} +1 -1
  140. package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
  141. package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
  142. package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
  143. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  144. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  145. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  146. package/web/.next/server/chunks/ssr/src_presentation_web_7275ce5d._.js +2 -2
  147. package/web/.next/server/chunks/ssr/src_presentation_web_7275ce5d._.js.map +1 -1
  148. package/web/.next/server/chunks/ssr/src_presentation_web_758dfa10._.js +2 -2
  149. package/web/.next/server/chunks/ssr/src_presentation_web_758dfa10._.js.map +1 -1
  150. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_84803221.js +1 -1
  151. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_84803221.js.map +1 -1
  152. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  153. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  154. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  155. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  156. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  157. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js.map +1 -1
  158. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  159. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js.map +1 -1
  160. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  161. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  162. package/web/.next/server/pages/500.html +2 -2
  163. package/web/.next/server/server-reference-manifest.js +1 -1
  164. package/web/.next/server/server-reference-manifest.json +30 -30
  165. package/web/.next/static/chunks/{114abb475679448b.js → 0636f7c25b8f05c8.js} +2 -2
  166. package/web/.next/static/chunks/{37b1807da4cd1ea0.js → 15c8dc5e159c50bb.js} +1 -1
  167. package/web/.next/static/chunks/{7f84301a5dd54554.js → 38b2b88e069fd487.js} +1 -1
  168. package/web/.next/static/chunks/{e87a7aacbfc2862a.js → 48db2a822b89f817.js} +2 -2
  169. package/web/.next/static/chunks/{85b34b1ecd6b8562.js → 6a5510e46cf04519.js} +1 -1
  170. package/web/.next/static/chunks/{4cef83745ab38234.js → 9304a6dda9017bb0.js} +1 -1
  171. package/web/.next/static/chunks/{dcf2a8f422f008df.js → 9fdce60808c54c55.js} +1 -1
  172. package/web/.next/static/chunks/{b352ef3d923492dc.js → d2f7c63190cab6c8.js} +1 -1
  173. package/web/.next/static/chunks/{e8c5a627803b1701.js → e4dc6f9400db01b6.js} +1 -1
  174. package/web/.next/static/chunks/{3596ba73f2cbc86f.js → ee8503b7a524f327.js} +1 -1
  175. /package/web/.next/static/{gjuhrSkwZrfQPA7lKPGEW → KaNaYUUpavz7Wmyn1I8tE}/_buildManifest.js +0 -0
  176. /package/web/.next/static/{gjuhrSkwZrfQPA7lKPGEW → KaNaYUUpavz7Wmyn1I8tE}/_clientMiddlewareManifest.json +0 -0
  177. /package/web/.next/static/{gjuhrSkwZrfQPA7lKPGEW → KaNaYUUpavz7Wmyn1I8tE}/_ssgManifest.js +0 -0
@@ -18,6 +18,7 @@
18
18
  *
19
19
  * @param daemonService - IDaemonService instance (injected by caller for testability, NFR-4)
20
20
  */
21
+ import { treeKill } from '../../../../../packages/core/src/infrastructure/services/process/tree-kill.js';
21
22
  import { messages } from '../../ui/index.js';
22
23
  const POLL_INTERVAL_MS = 200;
23
24
  const MAX_WAIT_MS = 5000;
@@ -54,15 +55,15 @@ export async function stopDaemon(daemonService) {
54
55
  }
55
56
  try {
56
57
  messages.info(`Stopping Shep daemon (PID ${pid})...`);
57
- // Send SIGTERM — request graceful shutdown
58
- process.kill(pid, 'SIGTERM');
58
+ // Send SIGTERM to process tree — request graceful shutdown
59
+ treeKill(pid, 'SIGTERM');
59
60
  // Poll for up to 5s waiting for the process to exit
60
61
  const died = await pollUntilDead(daemonService, pid, MAX_WAIT_MS, POLL_INTERVAL_MS);
61
62
  if (!died) {
62
- // Graceful shutdown timed out — force kill
63
+ // Graceful shutdown timed out — force kill process tree
63
64
  messages.info('Daemon did not stop gracefully, sending SIGKILL...');
64
65
  try {
65
- process.kill(pid, 'SIGKILL');
66
+ treeKill(pid, 'SIGKILL');
66
67
  }
67
68
  catch {
68
69
  // Process may have exited between the check and the kill — ignore
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.command.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/cli/commands/upgrade.command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,IAAI,YAAY,EAAqB,MAAM,oBAAoB,CAAC;AAQ9E,KAAK,OAAO,GAAG,OAAO,YAAY,CAAC;AAyEnC;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,OAAsB,GAAG,OAAO,CA+D7E"}
1
+ {"version":3,"file":"upgrade.command.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/cli/commands/upgrade.command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,IAAI,YAAY,EAAqB,MAAM,oBAAoB,CAAC;AAQ9E,KAAK,OAAO,GAAG,OAAO,YAAY,CAAC;AA8EnC;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,OAAsB,GAAG,OAAO,CA+D7E"}
@@ -13,6 +13,8 @@ import { messages } from '../ui/index.js';
13
13
  import { stopDaemon } from './daemon/stop-daemon.js';
14
14
  import { startDaemon } from './daemon/start-daemon.js';
15
15
  const VERSION_CHECK_TIMEOUT_MS = 10_000;
16
+ /** On Windows, npm is a .cmd batch file — spawn() needs shell: true to resolve it. */
17
+ const IS_WINDOWS = process.platform === 'win32';
16
18
  /**
17
19
  * Get the latest published version of @shepai/cli from npm registry.
18
20
  * Returns null if the check fails (fail-open).
@@ -23,6 +25,7 @@ function getLatestVersion(spawnFn) {
23
25
  let settled = false;
24
26
  const child = spawnFn('npm', ['view', '@shepai/cli', 'version'], {
25
27
  stdio: ['ignore', 'pipe', 'pipe'],
28
+ ...(IS_WINDOWS && { shell: true }),
26
29
  });
27
30
  const timeout = setTimeout(() => {
28
31
  if (!settled) {
@@ -65,6 +68,7 @@ function runNpmInstall(spawnFn) {
65
68
  return new Promise((resolve, reject) => {
66
69
  const child = spawnFn('npm', ['i', '-g', '@shepai/cli@latest'], {
67
70
  stdio: 'inherit',
71
+ ...(IS_WINDOWS && { shell: true }),
68
72
  });
69
73
  child.on('close', (code) => {
70
74
  resolve(code ?? 1);
@@ -1 +1 @@
1
- {"version":3,"file":"deploy-repository.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/deploy-repository.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAIvE,wBAAsB,gBAAgB,CACpC,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,eAAe,CAAA;CAAE,CAAC,CAyBxE"}
1
+ {"version":3,"file":"deploy-repository.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/deploy-repository.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAIvE,wBAAsB,gBAAgB,CACpC,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,eAAe,CAAA;CAAE,CAAC,CAyBxE"}
@@ -1,12 +1,13 @@
1
1
  'use server';
2
2
  import { existsSync } from 'node:fs';
3
+ import { isAbsolute } from 'node:path';
3
4
  import { resolve } from '../../lib/server-container.js';
4
5
  import { createDeploymentLogger } from '../../../../../packages/core/src/infrastructure/services/deployment/deployment-logger.js';
5
6
  import { DeploymentState } from '../../../../../packages/core/src/domain/generated/output.js';
6
7
  const log = createDeploymentLogger('[deployRepository]');
7
8
  export async function deployRepository(repositoryPath) {
8
9
  log.info(`called — repositoryPath="${repositoryPath}"`);
9
- if (!repositoryPath?.startsWith('/')) {
10
+ if (!repositoryPath || !isAbsolute(repositoryPath)) {
10
11
  log.warn('rejected — not an absolute path');
11
12
  return { success: false, error: 'repositoryPath must be an absolute path' };
12
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"open-folder.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-folder.ts"],"names":[],"mappings":"AAeA,wBAAsB,UAAU,CAC9B,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA8B9D"}
1
+ {"version":3,"file":"open-folder.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-folder.ts"],"names":[],"mappings":"AAiBA,wBAAsB,UAAU,CAC9B,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA8B9D"}
@@ -1,6 +1,7 @@
1
1
  'use server';
2
2
  import { existsSync } from 'node:fs';
3
3
  import { platform } from 'node:os';
4
+ import { isAbsolute } from 'node:path';
4
5
  import { spawn } from 'node:child_process';
5
6
  // Use a record lookup instead of if/else to prevent the bundler from
6
7
  // tree-shaking platform branches at build time. Turbopack evaluates
@@ -9,9 +10,10 @@ import { spawn } from 'node:child_process';
9
10
  const FOLDER_COMMANDS = {
10
11
  darwin: { cmd: 'open', args: (p) => [p] },
11
12
  linux: { cmd: 'xdg-open', args: (p) => [p] },
13
+ win32: { cmd: 'explorer', args: (p) => [p] },
12
14
  };
13
15
  export async function openFolder(repositoryPath) {
14
- if (!repositoryPath?.startsWith('/')) {
16
+ if (!repositoryPath || !isAbsolute(repositoryPath)) {
15
17
  return { success: false, error: 'repositoryPath must be an absolute path' };
16
18
  }
17
19
  try {
@@ -22,7 +24,7 @@ export async function openFolder(repositoryPath) {
22
24
  if (!entry) {
23
25
  return {
24
26
  success: false,
25
- error: `Unsupported platform: ${platform()}. Folder open is supported on macOS and Linux only.`,
27
+ error: `Unsupported platform: ${platform()}`,
26
28
  };
27
29
  }
28
30
  const child = spawn(entry.cmd, entry.args(repositoryPath), {
@@ -1 +1 @@
1
- {"version":3,"file":"open-ide.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-ide.ts"],"names":[],"mappings":"AAMA,UAAU,YAAY;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,OAAO,CAC3B,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAuB/E"}
1
+ {"version":3,"file":"open-ide.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-ide.ts"],"names":[],"mappings":"AAOA,UAAU,YAAY;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,OAAO,CAC3B,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAuB/E"}
@@ -1,9 +1,10 @@
1
1
  'use server';
2
+ import { isAbsolute } from 'node:path';
2
3
  import { getSettings } from '../../../../../packages/core/src/infrastructure/services/settings.service.js';
3
4
  import { resolve } from '../../lib/server-container.js';
4
5
  export async function openIde(input) {
5
6
  const { repositoryPath, branch } = input;
6
- if (!repositoryPath?.startsWith('/')) {
7
+ if (!repositoryPath || !isAbsolute(repositoryPath)) {
7
8
  return { success: false, error: 'repositoryPath must be an absolute path' };
8
9
  }
9
10
  const settings = getSettings();
@@ -1 +1 @@
1
- {"version":3,"file":"open-shell.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-shell.ts"],"names":[],"mappings":"AAiBA,UAAU,cAAc;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,SAAS,CAC7B,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAoC9E"}
1
+ {"version":3,"file":"open-shell.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-shell.ts"],"names":[],"mappings":"AAmBA,UAAU,cAAc;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,SAAS,CAC7B,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAoC9E"}
@@ -1,6 +1,7 @@
1
1
  'use server';
2
2
  import { existsSync } from 'node:fs';
3
3
  import { platform } from 'node:os';
4
+ import { isAbsolute } from 'node:path';
4
5
  import { spawn } from 'node:child_process';
5
6
  import { getSettings } from '../../../../../packages/core/src/infrastructure/services/settings.service.js';
6
7
  import { computeWorktreePath } from '../../../../../packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.js';
@@ -11,10 +12,11 @@ import { computeWorktreePath } from '../../../../../packages/core/src/infrastruc
11
12
  const SHELL_COMMANDS = {
12
13
  darwin: { cmd: 'open', args: (p) => ['-a', 'Terminal', p] },
13
14
  linux: { cmd: 'x-terminal-emulator', args: (p) => [`--working-directory=${p}`] },
15
+ win32: { cmd: 'powershell', args: (p) => ['-NoExit', '-Command', `Set-Location "${p}"`] },
14
16
  };
15
17
  export async function openShell(input) {
16
18
  const { repositoryPath, branch } = input;
17
- if (!repositoryPath?.startsWith('/')) {
19
+ if (!repositoryPath || !isAbsolute(repositoryPath)) {
18
20
  return { success: false, error: 'repositoryPath must be an absolute path' };
19
21
  }
20
22
  try {
@@ -28,7 +30,7 @@ export async function openShell(input) {
28
30
  if (!entry) {
29
31
  return {
30
32
  success: false,
31
- error: `Unsupported platform: ${platform()}. Shell launch is supported on macOS and Linux only.`,
33
+ error: `Unsupported platform: ${platform()}`,
32
34
  };
33
35
  }
34
36
  const child = spawn(entry.cmd, entry.args(targetPath), {
@@ -26,5 +26,5 @@ function FileDiffItem({ file }) {
26
26
  export function DiffView({ fileDiffs }) {
27
27
  if (fileDiffs.length === 0)
28
28
  return null;
29
- return (_jsxs("div", { className: "border-border rounded-lg border", children: [_jsx("div", { className: "px-4 py-3", children: _jsxs("div", { className: "mb-2 flex items-center gap-2", children: [_jsx(FileText, { className: "text-muted-foreground h-4 w-4" }), _jsx("span", { className: "text-foreground text-xs font-semibold", children: "Changed Files" }), _jsxs("span", { className: "text-muted-foreground text-[10px]", children: ["(", fileDiffs.length, ")"] })] }) }), _jsx("div", { className: "border-border border-t", children: fileDiffs.map((file) => (_jsx(FileDiffItem, { file: file }, file.path))) })] }));
29
+ return (_jsxs("div", { className: "border-border rounded-lg border", children: [_jsx("div", { className: "px-4 py-3", children: _jsxs("div", { className: "mb-2 flex items-center gap-2", children: [_jsx(FileText, { className: "text-muted-foreground h-4 w-4" }), _jsx("span", { className: "text-foreground text-xs font-semibold", children: "Changed Files" }), _jsxs("span", { className: "text-muted-foreground text-[10px]", children: ["(", fileDiffs.length, ")"] })] }) }), _jsx("div", { className: "border-border border-t", children: fileDiffs.map((file) => (_jsx(FileDiffItem, { file: file }, `${file.status}-${file.path}`))) })] }));
30
30
  }