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

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 (140) hide show
  1. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  2. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +2 -2
  3. package/dist/packages/core/src/application/use-cases/repositories/add-repository.use-case.d.ts.map +1 -1
  4. package/dist/packages/core/src/application/use-cases/repositories/add-repository.use-case.js +6 -2
  5. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.js +4 -4
  6. package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.js +4 -4
  7. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts.map +1 -1
  8. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.js +9 -0
  9. package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts.map +1 -1
  10. package/dist/packages/core/src/infrastructure/services/git/worktree.service.js +16 -3
  11. package/dist/src/presentation/web/app/build-graph-nodes.d.ts.map +1 -1
  12. package/dist/src/presentation/web/app/build-graph-nodes.js +8 -5
  13. package/dist/src/presentation/web/lib/derive-graph.d.ts.map +1 -1
  14. package/dist/src/presentation/web/lib/derive-graph.js +4 -2
  15. package/dist/tsconfig.build.tsbuildinfo +1 -1
  16. package/package.json +1 -1
  17. package/web/.next/BUILD_ID +1 -1
  18. package/web/.next/build-manifest.json +2 -2
  19. package/web/.next/fallback-build-manifest.json +2 -2
  20. package/web/.next/prerender-manifest.json +3 -3
  21. package/web/.next/required-server-files.js +1 -1
  22. package/web/.next/required-server-files.json +1 -1
  23. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +20 -20
  24. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  25. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  26. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +25 -25
  27. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  28. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  29. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +25 -25
  30. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  31. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  32. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
  33. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  34. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  35. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +20 -20
  36. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  37. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  38. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +25 -25
  39. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  40. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  41. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +25 -25
  42. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  43. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  44. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +18 -18
  45. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  46. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  47. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
  48. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  49. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  50. package/web/.next/server/app/_global-error.html +2 -2
  51. package/web/.next/server/app/_global-error.rsc +1 -1
  52. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  53. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  54. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  55. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  56. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  57. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  58. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  59. package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
  60. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  61. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  62. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  63. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  64. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  65. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  66. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  67. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  68. package/web/.next/server/chunks/[root-of-the-server]__f47bb8a5._.js +1 -1
  69. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  70. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  71. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_0a7546ed.js +1 -1
  72. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_0a7546ed.js.map +1 -1
  73. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_978cbb4c.js +1 -1
  74. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_978cbb4c.js.map +1 -1
  75. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
  76. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
  77. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js +2 -2
  78. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  79. package/web/.next/server/chunks/ssr/[root-of-the-server]__51fc98b0._.js +1 -1
  80. package/web/.next/server/chunks/ssr/[root-of-the-server]__51fc98b0._.js.map +1 -1
  81. package/web/.next/server/chunks/ssr/[root-of-the-server]__57f37786._.js +1 -1
  82. package/web/.next/server/chunks/ssr/[root-of-the-server]__57f37786._.js.map +1 -1
  83. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
  84. package/web/.next/server/chunks/ssr/[root-of-the-server]__708dcad1._.js +1 -1
  85. package/web/.next/server/chunks/ssr/[root-of-the-server]__708dcad1._.js.map +1 -1
  86. package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js +1 -1
  87. package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js.map +1 -1
  88. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
  89. package/web/.next/server/chunks/ssr/[root-of-the-server]__8e002910._.js +1 -1
  90. package/web/.next/server/chunks/ssr/[root-of-the-server]__8e002910._.js.map +1 -1
  91. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
  92. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  93. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
  94. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
  95. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  96. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  97. package/web/.next/server/chunks/ssr/{_6b3932e4._.js → _7707524a._.js} +2 -2
  98. package/web/.next/server/chunks/ssr/{_6b3932e4._.js.map → _7707524a._.js.map} +1 -1
  99. package/web/.next/server/chunks/ssr/{_3c9b7604._.js → _7f7ccdd5._.js} +2 -2
  100. package/web/.next/server/chunks/ssr/{_3c9b7604._.js.map → _7f7ccdd5._.js.map} +1 -1
  101. package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
  102. package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
  103. package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
  104. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  105. package/web/.next/server/chunks/ssr/{_21faa7a8._.js → _cfc0ef91._.js} +2 -2
  106. package/web/.next/server/chunks/ssr/{_21faa7a8._.js.map → _cfc0ef91._.js.map} +1 -1
  107. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  108. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  109. package/web/.next/server/chunks/ssr/src_presentation_web_7275ce5d._.js +2 -2
  110. package/web/.next/server/chunks/ssr/src_presentation_web_7275ce5d._.js.map +1 -1
  111. package/web/.next/server/chunks/ssr/src_presentation_web_758dfa10._.js +2 -2
  112. package/web/.next/server/chunks/ssr/src_presentation_web_758dfa10._.js.map +1 -1
  113. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_84803221.js +1 -1
  114. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_84803221.js.map +1 -1
  115. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  116. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  117. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  118. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  119. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js +1 -1
  120. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js.map +1 -1
  121. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  122. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  123. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  124. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  125. package/web/.next/server/pages/500.html +2 -2
  126. package/web/.next/server/server-reference-manifest.js +1 -1
  127. package/web/.next/server/server-reference-manifest.json +30 -30
  128. package/web/.next/static/chunks/{48db2a822b89f817.js → 59298ebd0507163d.js} +2 -2
  129. package/web/.next/static/chunks/{9304a6dda9017bb0.js → 71e88022be966501.js} +1 -1
  130. package/web/.next/static/chunks/{6a5510e46cf04519.js → 828d913baac44b82.js} +1 -1
  131. package/web/.next/static/chunks/{e4dc6f9400db01b6.js → 8547d7d7b5f40283.js} +1 -1
  132. package/web/.next/static/chunks/{9fdce60808c54c55.js → a7446b1b490fd8c0.js} +1 -1
  133. package/web/.next/static/chunks/{15c8dc5e159c50bb.js → a9fc1ee7282686f5.js} +1 -1
  134. package/web/.next/static/chunks/{d2f7c63190cab6c8.js → b6fb4d5449269dfc.js} +1 -1
  135. package/web/.next/static/chunks/{38b2b88e069fd487.js → c7bc9c4e43faa4e3.js} +1 -1
  136. package/web/.next/static/chunks/{ee8503b7a524f327.js → e63c5ad81fd3f0cf.js} +1 -1
  137. package/web/.next/static/chunks/{0636f7c25b8f05c8.js → eca0c53562427042.js} +2 -2
  138. /package/web/.next/static/{KaNaYUUpavz7Wmyn1I8tE → ilo_SDPYkC4anXF5lwI9E}/_buildManifest.js +0 -0
  139. /package/web/.next/static/{KaNaYUUpavz7Wmyn1I8tE → ilo_SDPYkC4anXF5lwI9E}/_clientMiddlewareManifest.json +0 -0
  140. /package/web/.next/static/{KaNaYUUpavz7Wmyn1I8tE → ilo_SDPYkC4anXF5lwI9E}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"create-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/use-cases/features/create/create-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AAMtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oEAAoE,CAAC;AAC7G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8DAA8D,CAAC;AACrG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iEAAiE,CAAC;AACnH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gEAAgE,CAAC;AAC1G,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8DAA8D,CAAC;AAC5G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uEAAuE,CAAC;AACnH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4DAA4D,CAAC;AAGhG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mEAAmE,CAAC;AAC7G,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE9F,qBACa,oBAAoB;IAG7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAlBjB,WAAW,EAAE,kBAAkB,EAE/B,eAAe,EAAE,gBAAgB,EAEjC,YAAY,EAAE,2BAA2B,EAEzC,aAAa,EAAE,mBAAmB,EAElC,eAAe,EAAE,uBAAuB,EAExC,iBAAiB,EAAE,iBAAiB,EAEpC,YAAY,EAAE,YAAY,EAE1B,cAAc,EAAE,qBAAqB,EAErC,YAAY,EAAE,aAAa,EAE3B,iBAAiB,EAAE,wBAAwB;IAG9D;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMtE;;;;OAIG;IACG,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwH1E;;;OAGG;IACG,kBAAkB,CACtB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,kBAAkB,EACzB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,CAAC;CAoG1D"}
1
+ {"version":3,"file":"create-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/use-cases/features/create/create-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AAMtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oEAAoE,CAAC;AAC7G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8DAA8D,CAAC;AACrG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iEAAiE,CAAC;AACnH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gEAAgE,CAAC;AAC1G,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8DAA8D,CAAC;AAC5G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uEAAuE,CAAC;AACnH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4DAA4D,CAAC;AAGhG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mEAAmE,CAAC;AAC7G,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE9F,qBACa,oBAAoB;IAG7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAlBjB,WAAW,EAAE,kBAAkB,EAE/B,eAAe,EAAE,gBAAgB,EAEjC,YAAY,EAAE,2BAA2B,EAEzC,aAAa,EAAE,mBAAmB,EAElC,eAAe,EAAE,uBAAuB,EAExC,iBAAiB,EAAE,iBAAiB,EAEpC,YAAY,EAAE,YAAY,EAE1B,cAAc,EAAE,qBAAqB,EAErC,YAAY,EAAE,aAAa,EAE3B,iBAAiB,EAAE,wBAAwB;IAG9D;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMtE;;;;OAIG;IACG,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAyH1E;;;OAGG;IACG,kBAAkB,CACtB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,kBAAkB,EACzB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,CAAC;CAoG1D"}
@@ -77,7 +77,7 @@ let CreateFeatureUseCase = class CreateFeatureUseCase {
77
77
  ? SdlcLifecycle.Implementation
78
78
  : SdlcLifecycle.Requirements;
79
79
  let shouldSpawn = true;
80
- let effectiveRepoPath = input.repositoryPath;
80
+ let effectiveRepoPath = input.repositoryPath.replace(/\\/g, '/');
81
81
  if (input.parentId) {
82
82
  const parent = await this.featureRepo.findById(input.parentId);
83
83
  if (!parent) {
@@ -106,7 +106,7 @@ let CreateFeatureUseCase = class CreateFeatureUseCase {
106
106
  }
107
107
  }
108
108
  // Resolve or create repository entity for this path
109
- const normalizedPath = effectiveRepoPath.replace(/\/+$/, '') || effectiveRepoPath;
109
+ const normalizedPath = effectiveRepoPath.replace(/\\/g, '/').replace(/\/+$/, '') || effectiveRepoPath;
110
110
  let repository = await this.repositoryRepo.findByPath(normalizedPath);
111
111
  const now = new Date();
112
112
  if (!repository) {
@@ -1 +1 @@
1
- {"version":3,"file":"add-repository.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/repositories/add-repository.use-case.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oEAAoE,CAAC;AAEhH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAUD,qBACa,oBAAoB;IAG7B,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAAd,cAAc,EAAE,qBAAqB;IAGlD,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;CA8B9D"}
1
+ {"version":3,"file":"add-repository.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/repositories/add-repository.use-case.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oEAAoE,CAAC;AAEhH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAcD,qBACa,oBAAoB;IAG7B,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAAd,cAAc,EAAE,qBAAqB;IAGlD,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;CA8B9D"}
@@ -19,11 +19,15 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
19
19
  import { injectable, inject } from 'tsyringe';
20
20
  import { randomUUID } from 'node:crypto';
21
21
  /**
22
- * Normalizes a path by removing trailing slashes.
22
+ * Normalizes a path: backslashes forward slashes, trailing slashes removed.
23
+ * On Windows, the folder picker returns backslashes (C:\Users\...) while
24
+ * the CLI uses forward slashes (C:/Users/...). Normalize to forward slashes
25
+ * so the same directory is never stored under two different path strings.
23
26
  */
24
27
  function normalizePath(p) {
28
+ const forwardSlash = p.replace(/\\/g, '/');
25
29
  // Remove trailing slashes but keep root "/"
26
- return p.length > 1 ? p.replace(/\/+$/, '') : p;
30
+ return forwardSlash.length > 1 ? forwardSlash.replace(/\/+$/, '') : forwardSlash;
27
31
  }
28
32
  let AddRepositoryUseCase = class AddRepositoryUseCase {
29
33
  repositoryRepo;
@@ -71,8 +71,8 @@ let SQLiteFeatureRepository = class SQLiteFeatureRepository {
71
71
  return fromDatabase(rows[0]);
72
72
  }
73
73
  async findBySlug(slug, repositoryPath) {
74
- const stmt = this.db.prepare('SELECT * FROM features WHERE slug = ? AND repository_path = ? AND deleted_at IS NULL');
75
- const row = stmt.get(slug, repositoryPath);
74
+ const stmt = this.db.prepare("SELECT * FROM features WHERE slug = ? AND REPLACE(repository_path, '\\', '/') = ? AND deleted_at IS NULL");
75
+ const row = stmt.get(slug, repositoryPath.replace(/\\/g, '/'));
76
76
  if (!row) {
77
77
  return null;
78
78
  }
@@ -85,8 +85,8 @@ let SQLiteFeatureRepository = class SQLiteFeatureRepository {
85
85
  conditions.push('deleted_at IS NULL');
86
86
  }
87
87
  if (filters?.repositoryPath) {
88
- conditions.push('repository_path = ?');
89
- params.push(filters.repositoryPath);
88
+ conditions.push("REPLACE(repository_path, '\\', '/') = ?");
89
+ params.push(filters.repositoryPath.replace(/\\/g, '/'));
90
90
  }
91
91
  if (filters?.lifecycle) {
92
92
  conditions.push('lifecycle = ?');
@@ -36,8 +36,8 @@ let SQLiteRepositoryRepository = class SQLiteRepositoryRepository {
36
36
  return row ? fromDatabase(row) : null;
37
37
  }
38
38
  async findByPath(path) {
39
- const stmt = this.db.prepare('SELECT * FROM repositories WHERE path = ? AND deleted_at IS NULL');
40
- const row = stmt.get(path);
39
+ const stmt = this.db.prepare("SELECT * FROM repositories WHERE REPLACE(path, '\\', '/') = ? AND deleted_at IS NULL");
40
+ const row = stmt.get(path.replace(/\\/g, '/'));
41
41
  return row ? fromDatabase(row) : null;
42
42
  }
43
43
  async list() {
@@ -50,8 +50,8 @@ let SQLiteRepositoryRepository = class SQLiteRepositoryRepository {
50
50
  stmt.run(id);
51
51
  }
52
52
  async findByPathIncludingDeleted(path) {
53
- const stmt = this.db.prepare('SELECT * FROM repositories WHERE path = ?');
54
- const row = stmt.get(path);
53
+ const stmt = this.db.prepare("SELECT * FROM repositories WHERE REPLACE(path, '\\', '/') = ?");
54
+ const row = stmt.get(path.replace(/\\/g, '/'));
55
55
  return row ? fromDatabase(row) : null;
56
56
  }
57
57
  async softDelete(id) {
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,4EAA4E,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAYjD;;;GAGG;AACH,qBAAa,yBAA0B,YAAW,cAAc;IAMlD,OAAO,CAAC,QAAQ,CAAC,KAAK;IALlC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAA8B;IAE3D,4EAA4E;IAC5E,OAAO,CAAC,MAAM,CAAS;gBAEM,KAAK,EAAE,aAAa;IAEjD,4EAA4E;IAC5E,OAAO,CAAC,GAAG;IAML,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAmHtF,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,CAAC,yBAAyB,CAAC;IA+F3C;;;OAGG;IACH,OAAO,CAAC,cAAc;IAmCtB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAI/C,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,eAAe;IAiCvB,OAAO,CAAC,eAAe;CAkExB"}
1
+ {"version":3,"file":"claude-code-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,4EAA4E,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAYjD;;;GAGG;AACH,qBAAa,yBAA0B,YAAW,cAAc;IAMlD,OAAO,CAAC,QAAQ,CAAC,KAAK;IALlC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAA8B;IAE3D,4EAA4E;IAC5E,OAAO,CAAC,MAAM,CAAS;gBAEM,KAAK,EAAE,aAAa;IAEjD,4EAA4E;IAC5E,OAAO,CAAC,GAAG;IAML,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAmHtF,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,CAAC,yBAAyB,CAAC;IA+F3C;;;OAGG;IACH,OAAO,CAAC,cAAc;IAmCtB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAI/C,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,iBAAiB;IAyBzB,OAAO,CAAC,eAAe;IAiCvB,OAAO,CAAC,eAAe;CAkExB"}
@@ -291,6 +291,15 @@ export class ClaudeCodeExecutorService {
291
291
  const spawnOpts = {};
292
292
  if (options?.cwd)
293
293
  spawnOpts.cwd = options.cwd;
294
+ // Explicitly pipe stdio so streams are available even when parent disconnects
295
+ spawnOpts.stdio = ['pipe', 'pipe', 'pipe'];
296
+ // On Windows: windowsHide=true to prevent blank console windows.
297
+ // Do NOT use shell=true — it causes DEP0190 argument escaping issues
298
+ // and mangles prompts with special characters. The claude CLI is a
299
+ // native .exe, so spawn() finds it on PATH without shell.
300
+ if (process.platform === 'win32') {
301
+ spawnOpts.windowsHide = true;
302
+ }
294
303
  // Strip CLAUDECODE env var to prevent "nested session" error when shep
295
304
  // is invoked from within a Claude Code session. The claude CLI checks for
296
305
  // this variable and refuses to start if it's set.
@@ -1 +1 @@
1
- {"version":3,"file":"worktree.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/git/worktree.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,0EAA0E,CAAC;AAOlF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEjD,qBACa,eAAgB,YAAW,gBAAgB;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,YAAY;IAErE,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC;IAqBlB,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5D,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAO/C,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK1D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWhE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWtE,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC1D,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAMzD,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,aAAa;IAgCrB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,qBAAqB;CAU9B"}
1
+ {"version":3,"file":"worktree.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/git/worktree.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,0EAA0E,CAAC;AAOlF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEjD,qBACa,eAAgB,YAAW,gBAAgB;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,YAAY;IAErE,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC;IAuBlB,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5D,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAO/C,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK1D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWhE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWtE,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC1D,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAMzD,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,aAAa;IAgCrB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,qBAAqB;CAsB9B"}
@@ -18,7 +18,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
18
18
  return function (target, key) { decorator(target, key, paramIndex); }
19
19
  };
20
20
  import { createHash } from 'node:crypto';
21
- import { mkdirSync } from 'node:fs';
21
+ import { mkdirSync, realpathSync } from 'node:fs';
22
22
  import path from 'node:path';
23
23
  import { injectable, inject } from 'tsyringe';
24
24
  const GIT_AUTO_INIT_USER = 'shep-ai[bot]';
@@ -40,9 +40,10 @@ let WorktreeService = class WorktreeService {
40
40
  catch (error) {
41
41
  throw this.parseGitError(error);
42
42
  }
43
- // Get info about the created worktree
43
+ // Get info about the created worktree — match by branch (reliable) then path
44
44
  const worktrees = await this.list(repoPath);
45
- const created = worktrees.find((w) => this.arePathsEquivalent(w.path, worktreePath));
45
+ const created = worktrees.find((w) => w.branch === branch) ??
46
+ worktrees.find((w) => this.arePathsEquivalent(w.path, worktreePath));
46
47
  if (!created) {
47
48
  throw new WorktreeError('Worktree created but not found in list', WorktreeErrorCode.GIT_ERROR);
48
49
  }
@@ -178,6 +179,18 @@ let WorktreeService = class WorktreeService {
178
179
  return this.normalizeWorktreePath(a) === this.normalizeWorktreePath(b);
179
180
  }
180
181
  normalizeWorktreePath(input) {
182
+ // On Windows, git outputs forward slashes but path.normalize uses backslashes.
183
+ // Normalize to forward slashes before comparing, case-insensitive.
184
+ if (process.platform === 'win32') {
185
+ let normalized = path.normalize(input).replace(/\\/g, '/').replace(/\/+$/, '');
186
+ try {
187
+ normalized = realpathSync(normalized).replace(/\\/g, '/');
188
+ }
189
+ catch {
190
+ // Path may not exist yet — use as-is
191
+ }
192
+ return normalized.toLowerCase();
193
+ }
181
194
  const normalized = path.normalize(input).replace(/\/+$/, '');
182
195
  // On macOS, git can report /private/var/... while callers use /var/...
183
196
  if (process.platform === 'darwin' && normalized.startsWith('/private/var/')) {
@@ -1 +1 @@
1
- {"version":3,"file":"build-graph-nodes.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/app/build-graph-nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAM1F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAG1C,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,UAAU,EAAE,EAC1B,gBAAgB,EAAE,cAAc,EAAE,GACjC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAuE5C"}
1
+ {"version":3,"file":"build-graph-nodes.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/app/build-graph-nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAM1F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAG1C,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,UAAU,EAAE,EAC1B,gBAAgB,EAAE,cAAc,EAAE,GACjC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CA2E5C"}
@@ -8,10 +8,12 @@ import { deriveNodeState, deriveProgress, deriveLifecycle, } from '../components
8
8
  * renders empty when features exist but their repository rows are missing.
9
9
  */
10
10
  export function buildGraphNodes(repositories, featuresWithRuns) {
11
- // Group features by repository path
11
+ // Normalize path separators so Windows backslash paths match forward-slash paths
12
+ const normalizePath = (p) => p.replace(/\\/g, '/');
13
+ // Group features by normalized repository path
12
14
  const featuresByRepo = {};
13
15
  featuresWithRuns.forEach((entry) => {
14
- const repoKey = entry.feature.repositoryPath;
16
+ const repoKey = normalizePath(entry.feature.repositoryPath);
15
17
  if (!featuresByRepo[repoKey]) {
16
18
  featuresByRepo[repoKey] = [];
17
19
  }
@@ -23,7 +25,8 @@ export function buildGraphNodes(repositories, featuresWithRuns) {
23
25
  const coveredPaths = new Set();
24
26
  // First, add nodes for all persisted repositories (including those without features)
25
27
  for (const repo of repositories) {
26
- coveredPaths.add(repo.path);
28
+ const normalizedRepoPath = normalizePath(repo.path);
29
+ coveredPaths.add(normalizedRepoPath);
27
30
  const repoNodeId = `repo-${repo.id}`;
28
31
  nodes.push({
29
32
  id: repoNodeId,
@@ -31,12 +34,12 @@ export function buildGraphNodes(repositories, featuresWithRuns) {
31
34
  position: { x: 0, y: 0 },
32
35
  data: {
33
36
  name: repo.name,
34
- repositoryPath: repo.path,
37
+ repositoryPath: normalizedRepoPath,
35
38
  id: repo.id,
36
39
  createdAt: repo.createdAt instanceof Date ? repo.createdAt.getTime() : Number(repo.createdAt),
37
40
  },
38
41
  });
39
- const repoFeatures = featuresByRepo[repo.path] ?? [];
42
+ const repoFeatures = featuresByRepo[normalizedRepoPath] ?? [];
40
43
  appendFeatureNodes(repoFeatures, repoNodeId, featuresWithRuns, nodes, edges, repo.name);
41
44
  }
42
45
  // Second pass: group orphaned features under virtual repository nodes
@@ -1 +1 @@
1
- {"version":3,"file":"derive-graph.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/lib/derive-graph.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,eAAe,CAAC;IACtB,sGAAsG;IACtG,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wDAAwD;AACxD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,4FAA4F;IAC5F,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,qEAAqE;IACrE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,8CAA8C;IAC9C,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACjE,6EAA6E;IAC7E,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,iDAAiD;IACjD,kBAAkB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACrC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAC/B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACrC,SAAS,CAAC,EAAE,cAAc,GACzB;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAgI5C"}
1
+ {"version":3,"file":"derive-graph.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/lib/derive-graph.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,eAAe,CAAC;IACtB,sGAAsG;IACtG,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wDAAwD;AACxD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,4FAA4F;IAC5F,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,qEAAqE;IACrE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,8CAA8C;IAC9C,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACjE,6EAA6E;IAC7E,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,iDAAiD;IACjD,kBAAkB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACrC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAC/B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACrC,SAAS,CAAC,EAAE,cAAc,GACzB;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAmI5C"}
@@ -17,11 +17,13 @@
17
17
  export function deriveGraph(featureMap, repoMap, pendingMap, callbacks) {
18
18
  const nodes = [];
19
19
  const edges = [];
20
+ // Normalize path separators so Windows backslash paths match forward-slash paths
21
+ const normalizePath = (p) => p.replace(/\\/g, '/');
20
22
  // Build a lookup: repositoryPath → repoNodeId
21
23
  const repoByPath = new Map();
22
24
  for (const [nodeId, entry] of repoMap) {
23
25
  if (entry.data.repositoryPath) {
24
- repoByPath.set(entry.data.repositoryPath, nodeId);
26
+ repoByPath.set(normalizePath(entry.data.repositoryPath), nodeId);
25
27
  }
26
28
  }
27
29
  // Virtual repo nodes created for orphaned features (not in repoMap)
@@ -114,7 +116,7 @@ export function deriveGraph(featureMap, repoMap, pendingMap, callbacks) {
114
116
  }
115
117
  else {
116
118
  // Repo→feature edge (matched by repositoryPath)
117
- const repositoryPath = entry.data.repositoryPath;
119
+ const repositoryPath = normalizePath(entry.data.repositoryPath);
118
120
  const repoNodeId = repoByPath.get(repositoryPath) ?? getOrCreateVirtualRepo(repositoryPath);
119
121
  edges.push({
120
122
  id: `edge-${repoNodeId}-${nodeId}`,