@shepai/cli 1.164.0 → 1.164.1-pr516.9c778cf

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 (223) hide show
  1. package/apis/json-schema/StageTimeouts.yaml +7 -2
  2. package/dist/packages/core/src/application/ports/output/agents/interactive-agent-executor.interface.d.ts +3 -1
  3. package/dist/packages/core/src/application/ports/output/agents/interactive-agent-executor.interface.d.ts.map +1 -1
  4. package/dist/packages/core/src/application/ports/output/repositories/interactive-session-repository.interface.d.ts +19 -0
  5. package/dist/packages/core/src/application/ports/output/repositories/interactive-session-repository.interface.d.ts.map +1 -1
  6. package/dist/packages/core/src/application/ports/output/services/interactive-session-service.interface.d.ts +7 -1
  7. package/dist/packages/core/src/application/ports/output/services/interactive-session-service.interface.d.ts.map +1 -1
  8. package/dist/packages/core/src/application/use-cases/interactive/send-interactive-message.use-case.d.ts +2 -0
  9. package/dist/packages/core/src/application/use-cases/interactive/send-interactive-message.use-case.d.ts.map +1 -1
  10. package/dist/packages/core/src/application/use-cases/interactive/send-interactive-message.use-case.js +1 -1
  11. package/dist/packages/core/src/domain/generated/output.d.ts +6 -2
  12. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  13. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +1 -0
  14. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  15. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +3 -0
  16. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-add-session-usage-tracking.d.ts +18 -0
  17. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-add-session-usage-tracking.d.ts.map +1 -0
  18. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-add-session-usage-tracking.js +32 -0
  19. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-add-stage-timeout-fast-implement-ms.d.ts +15 -0
  20. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-add-stage-timeout-fast-implement-ms.d.ts.map +1 -0
  21. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-add-stage-timeout-fast-implement-ms.js +22 -0
  22. package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.d.ts +12 -0
  23. package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.d.ts.map +1 -1
  24. package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.js +31 -0
  25. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.d.ts +38 -7
  26. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.d.ts.map +1 -1
  27. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.js +152 -45
  28. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +2 -2
  29. package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.d.ts +17 -1
  30. package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.d.ts.map +1 -1
  31. package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.js +131 -47
  32. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/messages/route.d.ts.map +1 -1
  33. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/messages/route.js +3 -1
  34. package/dist/src/presentation/web/components/assistant-ui/thread.js +8 -1
  35. package/dist/src/presentation/web/components/features/chat/ChatTab.d.ts.map +1 -1
  36. package/dist/src/presentation/web/components/features/chat/ChatTab.js +13 -7
  37. package/dist/src/presentation/web/components/features/chat/useChatRuntime.d.ts +16 -0
  38. package/dist/src/presentation/web/components/features/chat/useChatRuntime.d.ts.map +1 -1
  39. package/dist/src/presentation/web/components/features/chat/useChatRuntime.js +98 -7
  40. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.d.ts.map +1 -1
  41. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.js +1 -1
  42. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.d.ts.map +1 -1
  43. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.js +11 -0
  44. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.d.ts.map +1 -1
  45. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.js +2 -0
  46. package/dist/tsconfig.build.tsbuildinfo +1 -1
  47. package/package.json +2 -2
  48. package/web/.next/BUILD_ID +1 -1
  49. package/web/.next/build-manifest.json +2 -2
  50. package/web/.next/fallback-build-manifest.json +2 -2
  51. package/web/.next/prerender-manifest.json +3 -3
  52. package/web/.next/required-server-files.js +3 -3
  53. package/web/.next/required-server-files.json +3 -3
  54. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  55. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  56. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  57. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  58. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  59. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  60. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
  61. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  62. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  63. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  64. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  65. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  66. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +37 -37
  67. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  68. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  69. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  70. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  71. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  72. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  73. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  74. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  75. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  76. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  77. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  78. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
  79. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  80. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  81. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  82. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  83. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  84. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +37 -37
  85. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  86. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  87. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  88. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  89. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  90. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  91. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  92. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  93. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  94. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  95. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  96. package/web/.next/server/app/_global-error.html +2 -2
  97. package/web/.next/server/app/_global-error.rsc +1 -1
  98. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  99. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  100. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  101. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  102. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  103. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  104. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  105. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  106. package/web/.next/server/app/settings/page/server-reference-manifest.json +9 -9
  107. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  108. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  109. package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
  110. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  111. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  112. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  113. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  114. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  115. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  116. package/web/.next/server/app/version/page.js.nft.json +1 -1
  117. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  118. package/web/.next/server/chunks/[root-of-the-server]__2b71641f._.js +1 -1
  119. package/web/.next/server/chunks/[root-of-the-server]__2b71641f._.js.map +1 -1
  120. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  121. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -1
  122. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  123. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  124. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  125. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
  126. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  127. package/web/.next/server/chunks/ssr/[root-of-the-server]__1abe77bb._.js +2 -2
  128. package/web/.next/server/chunks/ssr/[root-of-the-server]__1abe77bb._.js.map +1 -1
  129. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +1 -1
  130. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +1 -1
  131. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  132. package/web/.next/server/chunks/ssr/[root-of-the-server]__563e4faf._.js +1 -1
  133. package/web/.next/server/chunks/ssr/[root-of-the-server]__563e4faf._.js.map +1 -1
  134. package/web/.next/server/chunks/ssr/[root-of-the-server]__7562afc6._.js +2 -2
  135. package/web/.next/server/chunks/ssr/[root-of-the-server]__7562afc6._.js.map +1 -1
  136. package/web/.next/server/chunks/ssr/[root-of-the-server]__821a11c1._.js +1 -1
  137. package/web/.next/server/chunks/ssr/[root-of-the-server]__821a11c1._.js.map +1 -1
  138. package/web/.next/server/chunks/ssr/[root-of-the-server]__86ff0bc5._.js +2 -2
  139. package/web/.next/server/chunks/ssr/[root-of-the-server]__86ff0bc5._.js.map +1 -1
  140. package/web/.next/server/chunks/ssr/[root-of-the-server]__8b0aac03._.js +1 -1
  141. package/web/.next/server/chunks/ssr/[root-of-the-server]__98740ee4._.js +1 -1
  142. package/web/.next/server/chunks/ssr/[root-of-the-server]__98740ee4._.js.map +1 -1
  143. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +1 -1
  144. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +1 -1
  145. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba9f9e11._.js +1 -1
  146. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba9f9e11._.js.map +1 -1
  147. package/web/.next/server/chunks/ssr/[root-of-the-server]__e0be67c7._.js +1 -1
  148. package/web/.next/server/chunks/ssr/[root-of-the-server]__e0be67c7._.js.map +1 -1
  149. package/web/.next/server/chunks/ssr/{_8b57edb8._.js → _0020fddd._.js} +2 -2
  150. package/web/.next/server/chunks/ssr/_0020fddd._.js.map +1 -0
  151. package/web/.next/server/chunks/ssr/_02e01240._.js +1 -1
  152. package/web/.next/server/chunks/ssr/_02e01240._.js.map +1 -1
  153. package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
  154. package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
  155. package/web/.next/server/chunks/ssr/_0727935d._.js +1 -1
  156. package/web/.next/server/chunks/ssr/_0727935d._.js.map +1 -1
  157. package/web/.next/server/chunks/ssr/_0dc06d07._.js.map +1 -1
  158. package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
  159. package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
  160. package/web/.next/server/chunks/ssr/_18886033._.js +1 -1
  161. package/web/.next/server/chunks/ssr/_18886033._.js.map +1 -1
  162. package/web/.next/server/chunks/ssr/_22e00a14._.js +1 -1
  163. package/web/.next/server/chunks/ssr/_22e00a14._.js.map +1 -1
  164. package/web/.next/server/chunks/ssr/_5119a3df._.js.map +1 -1
  165. package/web/.next/server/chunks/ssr/{_52403a07._.js → _53b5f7b5._.js} +2 -2
  166. package/web/.next/server/chunks/ssr/{_52403a07._.js.map → _53b5f7b5._.js.map} +1 -1
  167. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  168. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  169. package/web/.next/server/chunks/ssr/{_c9f903f2._.js → _68dabb57._.js} +2 -2
  170. package/web/.next/server/chunks/ssr/{_c9f903f2._.js.map → _68dabb57._.js.map} +1 -1
  171. package/web/.next/server/chunks/ssr/{_2f8f89fb._.js → _70f14d9e._.js} +2 -2
  172. package/web/.next/server/chunks/ssr/{_2f8f89fb._.js.map → _70f14d9e._.js.map} +1 -1
  173. package/web/.next/server/chunks/ssr/_9215e9ec._.js +1 -1
  174. package/web/.next/server/chunks/ssr/_9215e9ec._.js.map +1 -1
  175. package/web/.next/server/chunks/ssr/_a5a5901d._.js +1 -1
  176. package/web/.next/server/chunks/ssr/_a5a5901d._.js.map +1 -1
  177. package/web/.next/server/chunks/ssr/_ad09f271._.js +1 -1
  178. package/web/.next/server/chunks/ssr/_ad09f271._.js.map +1 -1
  179. package/web/.next/server/chunks/ssr/_c3f595c6._.js +1 -1
  180. package/web/.next/server/chunks/ssr/_c3f595c6._.js.map +1 -1
  181. package/web/.next/server/chunks/ssr/_ea9e1556._.js +1 -1
  182. package/web/.next/server/chunks/ssr/_ea9e1556._.js.map +1 -1
  183. package/web/.next/server/chunks/ssr/_f1ba9be6._.js +2 -2
  184. package/web/.next/server/chunks/ssr/_f1ba9be6._.js.map +1 -1
  185. package/web/.next/server/chunks/ssr/_f33cd07e._.js +2 -2
  186. package/web/.next/server/chunks/ssr/_f33cd07e._.js.map +1 -1
  187. package/web/.next/server/chunks/ssr/_f8b45233._.js +1 -1
  188. package/web/.next/server/chunks/ssr/_f8b45233._.js.map +1 -1
  189. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  190. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  191. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  192. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
  193. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
  194. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
  195. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
  196. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  197. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  198. package/web/.next/server/pages/500.html +2 -2
  199. package/web/.next/server/server-reference-manifest.js +1 -1
  200. package/web/.next/server/server-reference-manifest.json +47 -47
  201. package/web/.next/static/chunks/{29f0d874b1fde3d6.js → 16eea21868510afd.js} +2 -2
  202. package/web/.next/static/chunks/{cf000ba1a3f11439.js → 21efe3244a3e1610.js} +1 -1
  203. package/web/.next/static/chunks/{dc21cf85bfa262a7.js → 430238cf067e66aa.js} +2 -2
  204. package/web/.next/static/chunks/{498e45f8e05a5491.js → 4974ffa68eab69a4.js} +1 -1
  205. package/web/.next/static/chunks/{d9e4d90ef254da84.js → 61ad85357df68678.js} +1 -1
  206. package/web/.next/static/chunks/{ce0316338f7e01e6.js → 663cf4611ef0432b.js} +1 -1
  207. package/web/.next/static/chunks/{cf75fade434602c6.js → 79ef6bdb4838de19.js} +2 -2
  208. package/web/.next/static/chunks/7dff58788783cea9.js +1 -0
  209. package/web/.next/static/chunks/{2609c8fc6f14cb26.js → 8cfad4be1a81323a.js} +1 -1
  210. package/web/.next/static/chunks/{56955fa252a9f3ed.js → 9a806f75dd698ae6.js} +2 -2
  211. package/web/.next/static/chunks/{ecfd93d61bf4d933.js → c26fe035d26ca8ac.js} +1 -1
  212. package/web/.next/static/chunks/{25e894a1de46b5fb.js → c4088aeb1c91bfd9.js} +1 -1
  213. package/web/.next/static/chunks/{ce87ded6cc38b4de.js → ca79a9906362b1fa.js} +1 -1
  214. package/web/.next/static/chunks/{a8243f8d06bdcef0.js → dedf6ca63c5468fa.js} +2 -2
  215. package/web/.next/static/chunks/eeadf13c0ea6cbe0.css +1 -0
  216. package/web/.next/static/chunks/f99bdea5c10a003d.js +1 -0
  217. package/web/.next/server/chunks/ssr/_8b57edb8._.js.map +0 -1
  218. package/web/.next/static/chunks/400e93efac983a76.css +0 -1
  219. package/web/.next/static/chunks/7f491899a2fe2fd7.js +0 -1
  220. package/web/.next/static/chunks/e6398f94cffe9bc2.js +0 -1
  221. /package/web/.next/static/{rav6zzO3q2NtCKwg9XZXP → w5r9TcIGb7dnpyUuP4NdJ}/_buildManifest.js +0 -0
  222. /package/web/.next/static/{rav6zzO3q2NtCKwg9XZXP → w5r9TcIGb7dnpyUuP4NdJ}/_clientMiddlewareManifest.json +0 -0
  223. /package/web/.next/static/{rav6zzO3q2NtCKwg9XZXP → w5r9TcIGb7dnpyUuP4NdJ}/_ssgManifest.js +0 -0
@@ -5,6 +5,28 @@
5
5
  * @anthropic-ai/claude-agent-sdk V2 session API. This is the ONLY file
6
6
  * that imports from the SDK.
7
7
  *
8
+ * ## V2 API Stability Notice
9
+ *
10
+ * This file uses the `unstable_v2_*` session API. The V2 API is chosen over
11
+ * the stable V1 `query()` API because V2 maintains a persistent agent process
12
+ * across turns, providing near-instant turn responses. V1 `query()` spawns a
13
+ * new process per turn with `resume`, adding 5-15s latency — unacceptable
14
+ * for interactive chat.
15
+ *
16
+ * The SDK version is pinned exactly in package.json to prevent surprise
17
+ * breakage. If Anthropic removes the V2 API, migrate to V1 `query()` with
18
+ * `resume: sessionId` — the InteractiveAgentSessionHandle interface is
19
+ * designed to support either backend transparently.
20
+ *
21
+ * ## V2 Limitations (vs V1 query())
22
+ *
23
+ * SDKSessionOptions does NOT support: `cwd`, `maxTurns`, `maxBudgetUsd`,
24
+ * `abortController`, `settingSources`, `persistSession`, `effort`.
25
+ * These must be handled at the service layer:
26
+ * - cwd: Handled via process.chdir() mutex (see withCwd)
27
+ * - abort: Handled via SDKSession.close() which kills the process
28
+ * - maxTurns/maxBudgetUsd: Should be tracked by InteractiveSessionService
29
+ *
8
30
  * Design decisions:
9
31
  * - The CLAUDECODE env var is stripped to prevent nested-session detection
10
32
  * errors when shep itself is running inside a Claude Code session.
@@ -14,30 +36,49 @@
14
36
  import { unstable_v2_createSession, unstable_v2_resumeSession, } from '@anthropic-ai/claude-agent-sdk';
15
37
  /** Default model used when options.model is not specified. */
16
38
  const DEFAULT_MODEL = 'claude-sonnet-4-6';
39
+ /**
40
+ * Process-level mutex for process.chdir().
41
+ *
42
+ * SDKSessionOptions (V2) does not support a `cwd` parameter, so we
43
+ * temporarily change process.cwd() during session creation. Although
44
+ * session creation itself is synchronous, concurrent API requests can
45
+ * interleave between chdir calls. This mutex serializes all chdir
46
+ * operations to prevent one session from inheriting another's cwd.
47
+ */
48
+ let cwdMutexPromise = Promise.resolve();
17
49
  export class ClaudeCodeInteractiveExecutor {
18
50
  async createSession(options) {
19
- const sdkSession = this.withCwd(options.cwd, () => unstable_v2_createSession(this.buildSdkOptions(options)));
51
+ const sdkSession = await this.withCwd(options.cwd, () => unstable_v2_createSession(this.buildSdkOptions(options)));
20
52
  return this.wrapSession(sdkSession);
21
53
  }
22
54
  async resumeSession(sessionId, options) {
23
- const sdkSession = this.withCwd(options.cwd, () => unstable_v2_resumeSession(sessionId, this.buildSdkOptions(options)));
55
+ const sdkSession = await this.withCwd(options.cwd, () => unstable_v2_resumeSession(sessionId, this.buildSdkOptions(options)));
24
56
  return this.wrapSession(sdkSession);
25
57
  }
26
58
  /**
27
- * SDKSessionOptions (V2) does not support a `cwd` parameter.
28
- * Temporarily change process.cwd() for session creation, then restore.
29
- * This is safe because Node.js is single-threaded and SDK session creation
30
- * is synchronous (returns immediately, spawns process in background).
59
+ * Acquire a process-level mutex, change cwd, run the synchronous factory
60
+ * function, restore cwd, and release the mutex.
61
+ *
62
+ * This prevents concurrent session creations from seeing each other's cwd.
63
+ * The mutex is async to serialize across concurrent API request handlers.
31
64
  */
32
65
  withCwd(cwd, fn) {
33
- const originalCwd = process.cwd();
34
- try {
35
- process.chdir(cwd);
36
- return fn();
37
- }
38
- finally {
39
- process.chdir(originalCwd);
40
- }
66
+ const prev = cwdMutexPromise;
67
+ let resolve;
68
+ cwdMutexPromise = new Promise((r) => {
69
+ resolve = r;
70
+ });
71
+ return prev.then(() => {
72
+ const originalCwd = process.cwd();
73
+ try {
74
+ process.chdir(cwd);
75
+ return fn();
76
+ }
77
+ finally {
78
+ process.chdir(originalCwd);
79
+ resolve();
80
+ }
81
+ });
41
82
  }
42
83
  buildSdkOptions(options) {
43
84
  // Strip CLAUDECODE env var to prevent nested-session detection errors.
@@ -57,28 +98,49 @@ export class ClaudeCodeInteractiveExecutor {
57
98
  };
58
99
  }
59
100
  wrapSession(sdkSession) {
101
+ // SDK session ID is not available until after the first message exchange.
102
+ // Track it via a mutable variable updated by the stream mapper.
103
+ let resolvedSessionId = '';
60
104
  return {
61
105
  get sessionId() {
62
- // SDK session ID is not available until after the first message exchange.
63
- // Return empty string before that — callers should read it after streaming.
64
- try {
65
- return sdkSession.sessionId;
66
- }
67
- catch {
68
- return '';
69
- }
106
+ return resolvedSessionId;
70
107
  },
71
108
  send: (message) => sdkSession.send(message),
72
- stream: () => this.mapStream(sdkSession),
109
+ stream: () => this.mapStream(sdkSession, (id) => (resolvedSessionId = id)),
73
110
  close: async () => sdkSession.close(),
111
+ abort: () => {
112
+ // V2 SDKSession.close() synchronously kills the agent process.
113
+ // This is the only abort mechanism V2 provides.
114
+ sdkSession.close();
115
+ },
74
116
  };
75
117
  }
76
- async *mapStream(sdkSession) {
118
+ /**
119
+ * Map the SDK message stream to domain events.
120
+ *
121
+ * Tracks whether streaming deltas (`stream_event`) have been emitted for
122
+ * the current turn. When deltas are available, the `assistant` message's
123
+ * text blocks are skipped to prevent double-emission of the same content.
124
+ */
125
+ async *mapStream(sdkSession, onSessionId) {
126
+ let hasStreamedDeltas = false;
77
127
  for await (const msg of sdkSession.stream()) {
78
- const events = this.mapSdkMessage(msg);
128
+ // Capture sessionId from messages that carry it
129
+ if ('session_id' in msg && typeof msg.session_id === 'string' && msg.session_id) {
130
+ onSessionId(msg.session_id);
131
+ }
132
+ const events = this.mapSdkMessage(msg, hasStreamedDeltas);
79
133
  for (const event of events) {
80
134
  yield event;
81
135
  }
136
+ // Track whether we've seen streaming deltas for this turn
137
+ if (msg.type === 'stream_event') {
138
+ hasStreamedDeltas = true;
139
+ }
140
+ // Reset delta tracking on turn boundaries
141
+ if (msg.type === 'result') {
142
+ hasStreamedDeltas = false;
143
+ }
82
144
  }
83
145
  }
84
146
  /**
@@ -87,14 +149,15 @@ export class ClaudeCodeInteractiveExecutor {
87
149
  * SDK message types we handle:
88
150
  * - stream_event (SDKPartialAssistantMessage): streaming content deltas
89
151
  * - assistant (SDKAssistantMessage): complete assistant turn with tool_use blocks
90
- * - result (SDKResultMessage): success or error result
91
- * - system (SDKStatusMessage / SDKSystemMessage): status updates
152
+ * - result (SDKResultMessage): success or error result with distinct subtypes
153
+ * - system (SDKStatusMessage / SDKSystemMessage): status updates, compaction
92
154
  * - tool_use_summary: tool execution summaries
93
155
  * - tool_progress: tool execution progress
156
+ * - rate_limit_event: rate limit notifications
94
157
  *
95
- * Other message types are silently ignored (user replays, auth, etc.)
158
+ * Other message types are silently ignored (user replays, auth, hooks, etc.)
96
159
  */
97
- mapSdkMessage(msg) {
160
+ mapSdkMessage(msg, hasStreamedDeltas) {
98
161
  const events = [];
99
162
  switch (msg.type) {
100
163
  case 'stream_event': {
@@ -113,16 +176,17 @@ export class ClaudeCodeInteractiveExecutor {
113
176
  }
114
177
  case 'assistant': {
115
178
  // SDKAssistantMessage — complete assistant turn with text + tool_use blocks.
116
- // Text blocks contain the agent's reasoning between tool calls (e.g.,
117
- // "Let me read that file..." or "I see, now I'll..."). These MUST be
118
- // emitted as deltas — stream_event deltas may not be available in V2.
119
179
  if ('message' in msg && msg.message?.content) {
120
180
  for (const block of msg.message.content) {
121
181
  if (block.type === 'text' && block.text) {
122
- events.push({
123
- type: 'delta',
124
- content: block.text,
125
- });
182
+ // Skip text blocks if we already emitted streaming deltas for
183
+ // this turn — otherwise the same content appears twice.
184
+ if (!hasStreamedDeltas) {
185
+ events.push({
186
+ type: 'delta',
187
+ content: block.text,
188
+ });
189
+ }
126
190
  }
127
191
  else if (block.type === 'tool_use') {
128
192
  events.push({
@@ -143,7 +207,7 @@ export class ClaudeCodeInteractiveExecutor {
143
207
  break;
144
208
  }
145
209
  case 'result': {
146
- // SDKResultMessage — success or error
210
+ // SDKResultMessage — success or error with distinct subtypes
147
211
  if (msg.subtype === 'success') {
148
212
  events.push({
149
213
  type: 'done',
@@ -158,11 +222,35 @@ export class ClaudeCodeInteractiveExecutor {
158
222
  });
159
223
  }
160
224
  else {
161
- // SDKResultError
162
- const errorMsg = 'errors' in msg && Array.isArray(msg.errors) ? msg.errors.join('; ') : msg.subtype;
225
+ // Distinguish error subtypes so the UI can show specific messages
226
+ const errorMessages = 'errors' in msg && Array.isArray(msg.errors) ? msg.errors.join('; ') : '';
227
+ let content;
228
+ switch (msg.subtype) {
229
+ case 'error_max_turns':
230
+ content = `Agent reached the maximum number of turns${errorMessages ? `: ${errorMessages}` : ''}`;
231
+ break;
232
+ case 'error_max_budget_usd':
233
+ content = `Agent exceeded the budget limit${errorMessages ? `: ${errorMessages}` : ''}`;
234
+ break;
235
+ case 'error_max_structured_output_retries':
236
+ content = `Agent exceeded structured output retries${errorMessages ? `: ${errorMessages}` : ''}`;
237
+ break;
238
+ case 'error_during_execution':
239
+ default:
240
+ content = errorMessages || 'Agent encountered an error during execution';
241
+ break;
242
+ }
163
243
  events.push({
164
244
  type: 'error',
165
- content: errorMsg,
245
+ content,
246
+ // Attach usage data even on errors — cost was still incurred
247
+ usage: {
248
+ costUsd: msg.total_cost_usd,
249
+ inputTokens: msg.usage?.input_tokens,
250
+ outputTokens: msg.usage?.output_tokens,
251
+ numTurns: msg.num_turns,
252
+ durationMs: msg.duration_ms,
253
+ },
166
254
  });
167
255
  }
168
256
  break;
@@ -184,14 +272,23 @@ export class ClaudeCodeInteractiveExecutor {
184
272
  });
185
273
  }
186
274
  break;
187
- case 'status':
188
- if ('status' in msg) {
275
+ case 'status': {
276
+ // Status updates including context compaction
277
+ const status = 'status' in msg ? msg.status : null;
278
+ if (status === 'compacting') {
189
279
  events.push({
190
280
  type: 'status',
191
- content: String(msg.status ?? 'ready'),
281
+ content: 'Compacting context — older conversation will be summarized',
282
+ });
283
+ }
284
+ else if (status !== null) {
285
+ events.push({
286
+ type: 'status',
287
+ content: String(status),
192
288
  });
193
289
  }
194
290
  break;
291
+ }
195
292
  case 'api_retry':
196
293
  // API retry — let user know agent is retrying
197
294
  if ('attempt' in msg) {
@@ -277,11 +374,21 @@ export class ClaudeCodeInteractiveExecutor {
277
374
  }
278
375
  break;
279
376
  }
280
- default:
281
- // Ignore: user, user_replay, auth_status, compact_boundary,
377
+ default: {
378
+ // SDKCompactBoundaryMessage context was compacted.
379
+ // Not in the TS discriminant union, so handle via string check.
380
+ const msgType = msg.type;
381
+ if (msgType === 'compact_boundary') {
382
+ events.push({
383
+ type: 'status',
384
+ content: 'Context compacted — older conversation has been summarized',
385
+ });
386
+ }
387
+ // Otherwise ignore: user, user_replay, auth_status,
282
388
  // local_command_output, hook_*, files_persisted,
283
389
  // elicitation_complete, prompt_suggestion
284
390
  break;
391
+ }
285
392
  }
286
393
  return events;
287
394
  }
@@ -50,7 +50,7 @@ export function readSpecFile(specDir, filename) {
50
50
  const DEFAULT_STAGE_TIMEOUT_MS = 1_800_000;
51
51
  /**
52
52
  * Map from node name to the corresponding StageTimeouts field.
53
- * `fast-implement` reuses the implement timeout; `evidence` also reuses implement.
53
+ * `fast-implement` has its own dedicated timeout; `evidence` reuses implement.
54
54
  */
55
55
  const STAGE_TIMEOUT_KEY = {
56
56
  analyze: 'analyzeMs',
@@ -58,7 +58,7 @@ const STAGE_TIMEOUT_KEY = {
58
58
  research: 'researchMs',
59
59
  plan: 'planMs',
60
60
  implement: 'implementMs',
61
- 'fast-implement': 'implementMs',
61
+ 'fast-implement': 'fastImplementMs',
62
62
  evidence: 'implementMs',
63
63
  merge: 'mergeMs',
64
64
  };
@@ -41,6 +41,14 @@ export declare class InteractiveSessionService implements IInteractiveSessionSer
41
41
  private sessions;
42
42
  /** Cached agentSessionIds from stopped sessions, keyed by featureId. */
43
43
  private stoppedAgentSessionIds;
44
+ /**
45
+ * Feature-level subscribers that survive session restarts.
46
+ *
47
+ * Unlike session-level subscribers (in SessionState.subscribers), these
48
+ * persist when a session dies and a new one boots. SSE connections
49
+ * subscribe here so they continue receiving events from new sessions.
50
+ */
51
+ private featureSubscribers;
44
52
  constructor(sessionRepo: IInteractiveSessionRepository, messageRepo: IInteractiveMessageRepository, executorFactory: IAgentExecutorFactory, featureRepo: IFeatureRepository, contextBuilder: FeatureContextBuilder);
45
53
  startSession(featureId: string, worktreePath: string, model?: string, agentType?: string): Promise<InteractiveSession>;
46
54
  /**
@@ -60,7 +68,7 @@ export declare class InteractiveSessionService implements IInteractiveSessionSer
60
68
  clearMessages(featureId: string): Promise<void>;
61
69
  getSession(sessionId: string): Promise<InteractiveSession | null>;
62
70
  subscribe(sessionId: string, onChunk: (chunk: StreamChunk) => void): UnsubscribeFn;
63
- sendUserMessage(featureId: string, content: string, worktreePath: string): Promise<InteractiveMessage>;
71
+ sendUserMessage(featureId: string, content: string, worktreePath: string, model?: string, agentType?: string): Promise<InteractiveMessage>;
64
72
  getChatState(featureId: string): Promise<ChatState>;
65
73
  subscribeByFeature(featureId: string, onChunk: (chunk: StreamChunk) => void): UnsubscribeFn;
66
74
  stopByFeature(featureId: string): Promise<void>;
@@ -78,6 +86,14 @@ export declare class InteractiveSessionService implements IInteractiveSessionSer
78
86
  * Each event gets its own bubble in the chat thread.
79
87
  */
80
88
  private persistToolEvent;
89
+ /**
90
+ * Dispatch a StreamChunk to all subscribers for a session.
91
+ *
92
+ * Sends to both session-level subscribers (legacy, for sessionId-based
93
+ * subscribe()) and feature-level subscribers (for SSE connections that
94
+ * must survive session restarts).
95
+ */
96
+ private notify;
81
97
  /** Start or restart the idle timeout timer for a session. */
82
98
  private resetTimer;
83
99
  /** Cancel the idle timer for a session. */
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-session.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/interactive/interactive-session.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interactive-session.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/interactive/interactive-session.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EACV,0BAA0B,EAC1B,WAAW,EACX,aAAa,EACb,SAAS,EACV,MAAM,qFAAqF,CAAC;AAC7F,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,4FAA4F,CAAC;AAChJ,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,4FAA4F,CAAC;AAChJ,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8EAA8E,CAAC;AAE1H,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gFAAgF,CAAC;AACzH,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AASlG,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AA0C1E;;;;;;;;;;;;;;GAcG;AACH,qBAAa,yBAA0B,YAAW,0BAA0B;IAexE,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAlBjC,0CAA0C;IAC1C,OAAO,CAAC,QAAQ,CAAmC;IACnD,wEAAwE;IACxE,OAAO,CAAC,sBAAsB,CAA6B;IAC3D;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB,CAAwD;gBAG/D,WAAW,EAAE,6BAA6B,EAC1C,WAAW,EAAE,6BAA6B,EAC1C,eAAe,EAAE,qBAAqB,EACtC,WAAW,EAAE,kBAAkB,EAC/B,cAAc,EAAE,qBAAqB;IAOlD,YAAY,CAChB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC;IAgE9B;;;;;OAKG;YACW,iBAAiB;IAgRzB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0C7C,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAuClF;;OAEG;YACW,qBAAqB;IAyP7B,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAI7E,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW/C,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAIvE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,aAAa;IAc5E,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC;IA2ExB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAmFzD,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,aAAa;IAkBrF,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc1C,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAInE,wBAAwB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAI9D,oEAAoE;IACpE,OAAO,CAAC,yBAAyB;IAWjC,oEAAoE;IACpE,OAAO,CAAC,gBAAgB;IAUxB,mEAAmE;IACnE,OAAO,CAAC,iBAAiB;IAezB;;;OAGG;YACW,gBAAgB;IA0B9B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM;IAYd,6DAA6D;IAC7D,OAAO,CAAC,UAAU;IAQlB,2CAA2C;IAC3C,OAAO,CAAC,UAAU;IAOlB,mEAAmE;IACnE,OAAO,CAAC,YAAY;IAOpB,6EAA6E;IAC7E,OAAO,CAAC,MAAM;CAKf"}