@shepai/cli 1.151.2-pr438.6135e39 → 1.151.2-pr460.ba381d8

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 (701) hide show
  1. package/apis/json-schema/InteractiveAgentConfig.yaml +25 -0
  2. package/apis/json-schema/InteractiveMessage.yaml +23 -0
  3. package/apis/json-schema/InteractiveMessageRole.yaml +7 -0
  4. package/apis/json-schema/InteractiveSession.yaml +30 -0
  5. package/apis/json-schema/InteractiveSessionStatus.yaml +9 -0
  6. package/apis/json-schema/Settings.yaml +3 -0
  7. package/apis/json-schema/WorkflowConfig.yaml +0 -5
  8. package/dist/packages/core/src/application/ports/output/agents/agent-executor-factory.interface.d.ts +17 -0
  9. package/dist/packages/core/src/application/ports/output/agents/agent-executor-factory.interface.d.ts.map +1 -1
  10. package/dist/packages/core/src/application/ports/output/agents/index.d.ts +1 -0
  11. package/dist/packages/core/src/application/ports/output/agents/index.d.ts.map +1 -1
  12. package/dist/packages/core/src/application/ports/output/agents/interactive-agent-executor.interface.d.ts +53 -0
  13. package/dist/packages/core/src/application/ports/output/agents/interactive-agent-executor.interface.d.ts.map +1 -0
  14. package/dist/packages/core/src/application/ports/output/agents/interactive-agent-executor.interface.js +13 -0
  15. package/dist/packages/core/src/application/ports/output/repositories/index.d.ts +2 -0
  16. package/dist/packages/core/src/application/ports/output/repositories/index.d.ts.map +1 -1
  17. package/dist/packages/core/src/application/ports/output/repositories/interactive-message-repository.interface.d.ts +37 -0
  18. package/dist/packages/core/src/application/ports/output/repositories/interactive-message-repository.interface.d.ts.map +1 -0
  19. package/dist/packages/core/src/application/ports/output/repositories/interactive-message-repository.interface.js +10 -0
  20. package/dist/packages/core/src/application/ports/output/repositories/interactive-session-repository.interface.d.ts +54 -0
  21. package/dist/packages/core/src/application/ports/output/repositories/interactive-session-repository.interface.d.ts.map +1 -0
  22. package/dist/packages/core/src/application/ports/output/repositories/interactive-session-repository.interface.js +10 -0
  23. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +0 -28
  24. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
  25. package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.d.ts +0 -37
  26. package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.d.ts.map +1 -1
  27. package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.js +0 -12
  28. package/dist/packages/core/src/application/ports/output/services/index.d.ts +4 -5
  29. package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
  30. package/dist/packages/core/src/application/ports/output/services/index.js +1 -2
  31. package/dist/packages/core/src/application/ports/output/services/interactive-session-service.interface.d.ts +169 -0
  32. package/dist/packages/core/src/application/ports/output/services/interactive-session-service.interface.d.ts.map +1 -0
  33. package/dist/packages/core/src/application/ports/output/services/interactive-session-service.interface.js +12 -0
  34. package/dist/packages/core/src/application/use-cases/interactive/get-interactive-chat-state.use-case.d.ts +26 -0
  35. package/dist/packages/core/src/application/use-cases/interactive/get-interactive-chat-state.use-case.d.ts.map +1 -0
  36. package/dist/packages/core/src/application/use-cases/interactive/get-interactive-chat-state.use-case.js +41 -0
  37. package/dist/packages/core/src/application/use-cases/interactive/index.d.ts +14 -0
  38. package/dist/packages/core/src/application/use-cases/interactive/index.d.ts.map +1 -0
  39. package/dist/packages/core/src/application/use-cases/interactive/index.js +9 -0
  40. package/dist/packages/core/src/application/use-cases/interactive/send-interactive-message.use-case.d.ts +31 -0
  41. package/dist/packages/core/src/application/use-cases/interactive/send-interactive-message.use-case.d.ts.map +1 -0
  42. package/dist/packages/core/src/application/use-cases/interactive/send-interactive-message.use-case.js +43 -0
  43. package/dist/packages/core/src/application/use-cases/interactive/start-interactive-session.use-case.d.ts +34 -0
  44. package/dist/packages/core/src/application/use-cases/interactive/start-interactive-session.use-case.d.ts.map +1 -0
  45. package/dist/packages/core/src/application/use-cases/interactive/start-interactive-session.use-case.js +43 -0
  46. package/dist/packages/core/src/application/use-cases/interactive/stop-interactive-session.use-case.d.ts +27 -0
  47. package/dist/packages/core/src/application/use-cases/interactive/stop-interactive-session.use-case.d.ts.map +1 -0
  48. package/dist/packages/core/src/application/use-cases/interactive/stop-interactive-session.use-case.js +42 -0
  49. package/dist/packages/core/src/domain/errors/concurrent-session-limit.error.d.ts +13 -0
  50. package/dist/packages/core/src/domain/errors/concurrent-session-limit.error.d.ts.map +1 -0
  51. package/dist/packages/core/src/domain/errors/concurrent-session-limit.error.js +19 -0
  52. package/dist/packages/core/src/domain/generated/output.d.ts +77 -185
  53. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  54. package/dist/packages/core/src/domain/generated/output.js +12 -0
  55. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  56. package/dist/packages/core/src/infrastructure/di/container.js +47 -4
  57. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/interactive-message.mapper.d.ts +36 -0
  58. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/interactive-message.mapper.d.ts.map +1 -0
  59. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/interactive-message.mapper.js +41 -0
  60. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/interactive-session.mapper.d.ts +37 -0
  61. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/interactive-session.mapper.d.ts.map +1 -0
  62. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/interactive-session.mapper.js +45 -0
  63. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +3 -0
  64. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  65. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +10 -0
  66. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-create-interactive-tables.d.ts +22 -0
  67. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-create-interactive-tables.d.ts.map +1 -0
  68. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-create-interactive-tables.js +52 -0
  69. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/046-add-interactive-agent-settings.d.ts +16 -0
  70. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/046-add-interactive-agent-settings.d.ts.map +1 -0
  71. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/046-add-interactive-agent-settings.js +27 -0
  72. package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-message.repository.d.ts +18 -0
  73. package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-message.repository.d.ts.map +1 -0
  74. package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-message.repository.js +58 -0
  75. package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.d.ts +23 -0
  76. package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.d.ts.map +1 -0
  77. package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.js +85 -0
  78. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
  79. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +10 -3
  80. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts +18 -0
  81. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts.map +1 -1
  82. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.js +27 -0
  83. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.d.ts +43 -0
  84. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.d.ts.map +1 -0
  85. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.js +280 -0
  86. package/dist/packages/core/src/infrastructure/services/agents/common/executors/mock-executor-factory.service.d.ts +3 -0
  87. package/dist/packages/core/src/infrastructure/services/agents/common/executors/mock-executor-factory.service.d.ts.map +1 -1
  88. package/dist/packages/core/src/infrastructure/services/agents/common/executors/mock-executor-factory.service.js +6 -0
  89. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +1 -1
  90. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts +1 -3
  91. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts.map +1 -1
  92. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.js +1 -37
  93. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +1 -2
  94. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
  95. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +0 -21
  96. package/dist/packages/core/src/infrastructure/services/interactive/feature-context.builder.d.ts +26 -0
  97. package/dist/packages/core/src/infrastructure/services/interactive/feature-context.builder.d.ts.map +1 -0
  98. package/dist/packages/core/src/infrastructure/services/interactive/feature-context.builder.js +140 -0
  99. package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.d.ts +87 -0
  100. package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.d.ts.map +1 -0
  101. package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.js +786 -0
  102. package/dist/src/presentation/cli/index.js +0 -2
  103. package/dist/src/presentation/web/app/(dashboard)/@drawer/chat/page.d.ts +3 -0
  104. package/dist/src/presentation/web/app/(dashboard)/@drawer/chat/page.d.ts.map +1 -0
  105. package/dist/src/presentation/web/app/(dashboard)/@drawer/chat/page.js +6 -0
  106. package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.d.ts.map +1 -1
  107. package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -2
  108. package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.d.ts.map +1 -1
  109. package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -2
  110. package/dist/src/presentation/web/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.d.ts +11 -0
  111. package/dist/src/presentation/web/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.d.ts.map +1 -0
  112. package/dist/src/presentation/web/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +18 -0
  113. package/dist/src/presentation/web/app/(dashboard)/chat/page.d.ts +3 -0
  114. package/dist/src/presentation/web/app/(dashboard)/chat/page.d.ts.map +1 -0
  115. package/dist/src/presentation/web/app/(dashboard)/chat/page.js +4 -0
  116. package/dist/src/presentation/web/app/(dashboard)/repository/[repositoryId]/[tab]/page.d.ts +3 -0
  117. package/dist/src/presentation/web/app/(dashboard)/repository/[repositoryId]/[tab]/page.d.ts.map +1 -0
  118. package/dist/src/presentation/web/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +4 -0
  119. package/dist/src/presentation/web/app/api/agent-events/route.d.ts +6 -0
  120. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  121. package/dist/src/presentation/web/app/api/agent-events/route.js +54 -1
  122. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/messages/route.d.ts +24 -0
  123. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/messages/route.d.ts.map +1 -0
  124. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/messages/route.js +76 -0
  125. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stop/route.d.ts +16 -0
  126. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stop/route.d.ts.map +1 -0
  127. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stop/route.js +21 -0
  128. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.d.ts +21 -0
  129. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.d.ts.map +1 -0
  130. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.js +87 -0
  131. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/messages/route.d.ts +19 -0
  132. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/messages/route.d.ts.map +1 -0
  133. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/messages/route.js +78 -0
  134. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/route.d.ts +18 -0
  135. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/route.d.ts.map +1 -0
  136. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/route.js +43 -0
  137. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.d.ts +19 -0
  138. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.d.ts.map +1 -0
  139. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.js +92 -0
  140. package/dist/src/presentation/web/app/api/interactive/sessions/route.d.ts +12 -0
  141. package/dist/src/presentation/web/app/api/interactive/sessions/route.d.ts.map +1 -0
  142. package/dist/src/presentation/web/app/api/interactive/sessions/route.js +37 -0
  143. package/dist/src/presentation/web/app/layout.d.ts.map +1 -1
  144. package/dist/src/presentation/web/app/layout.js +2 -1
  145. package/dist/src/presentation/web/components/assistant-ui/thread.d.ts +6 -0
  146. package/dist/src/presentation/web/components/assistant-ui/thread.d.ts.map +1 -0
  147. package/dist/src/presentation/web/components/assistant-ui/thread.js +192 -0
  148. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts +1 -1
  149. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts.map +1 -1
  150. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +1 -0
  151. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +1 -1
  152. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -1
  153. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +1 -0
  154. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts +3 -1
  155. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  156. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +5 -6
  157. package/dist/src/presentation/web/components/common/control-center-drawer/global-chat-drawer-client.d.ts +2 -0
  158. package/dist/src/presentation/web/components/common/control-center-drawer/global-chat-drawer-client.d.ts.map +1 -0
  159. package/dist/src/presentation/web/components/common/control-center-drawer/global-chat-drawer-client.js +17 -0
  160. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.d.ts +3 -1
  161. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.d.ts.map +1 -1
  162. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.js +15 -8
  163. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +7 -1
  164. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -1
  165. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +11 -4
  166. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  167. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +7 -2
  168. package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.d.ts +1 -0
  169. package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.d.ts.map +1 -1
  170. package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.js +6 -14
  171. package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
  172. package/dist/src/presentation/web/components/common/repository-node/repository-node.js +6 -2
  173. package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.d.ts +21 -0
  174. package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.d.ts.map +1 -0
  175. package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.js +46 -0
  176. package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.stories.d.ts +20 -0
  177. package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.stories.d.ts.map +1 -0
  178. package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.stories.js +52 -0
  179. package/dist/src/presentation/web/components/features/chat/ChatComposer.d.ts +18 -0
  180. package/dist/src/presentation/web/components/features/chat/ChatComposer.d.ts.map +1 -0
  181. package/dist/src/presentation/web/components/features/chat/ChatComposer.js +16 -0
  182. package/dist/src/presentation/web/components/features/chat/ChatInput.d.ts +19 -0
  183. package/dist/src/presentation/web/components/features/chat/ChatInput.d.ts.map +1 -0
  184. package/dist/src/presentation/web/components/features/chat/ChatInput.js +42 -0
  185. package/dist/src/presentation/web/components/features/chat/ChatInput.stories.d.ts +14 -0
  186. package/dist/src/presentation/web/components/features/chat/ChatInput.stories.d.ts.map +1 -0
  187. package/dist/src/presentation/web/components/features/chat/ChatInput.stories.js +56 -0
  188. package/dist/src/presentation/web/components/features/chat/ChatMessageBubble.d.ts +21 -0
  189. package/dist/src/presentation/web/components/features/chat/ChatMessageBubble.d.ts.map +1 -0
  190. package/dist/src/presentation/web/components/features/chat/ChatMessageBubble.js +43 -0
  191. package/dist/src/presentation/web/components/features/chat/ChatMessageBubble.stories.d.ts +24 -0
  192. package/dist/src/presentation/web/components/features/chat/ChatMessageBubble.stories.d.ts.map +1 -0
  193. package/dist/src/presentation/web/components/features/chat/ChatMessageBubble.stories.js +84 -0
  194. package/dist/src/presentation/web/components/features/chat/ChatMessageList.d.ts +25 -0
  195. package/dist/src/presentation/web/components/features/chat/ChatMessageList.d.ts.map +1 -0
  196. package/dist/src/presentation/web/components/features/chat/ChatMessageList.js +36 -0
  197. package/dist/src/presentation/web/components/features/chat/ChatSheet.d.ts +2 -0
  198. package/dist/src/presentation/web/components/features/chat/ChatSheet.d.ts.map +1 -0
  199. package/dist/src/presentation/web/components/features/chat/ChatSheet.js +243 -0
  200. package/dist/src/presentation/web/components/features/chat/ChatTab.d.ts +6 -0
  201. package/dist/src/presentation/web/components/features/chat/ChatTab.d.ts.map +1 -0
  202. package/dist/src/presentation/web/components/features/chat/ChatTab.js +67 -0
  203. package/dist/src/presentation/web/components/features/chat/ChatTab.stories.d.ts +25 -0
  204. package/dist/src/presentation/web/components/features/chat/ChatTab.stories.d.ts.map +1 -0
  205. package/dist/src/presentation/web/components/features/chat/ChatTab.stories.js +237 -0
  206. package/dist/src/presentation/web/components/features/chat/useChatRuntime.d.ts +34 -0
  207. package/dist/src/presentation/web/components/features/chat/useChatRuntime.d.ts.map +1 -0
  208. package/dist/src/presentation/web/components/features/chat/useChatRuntime.js +266 -0
  209. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  210. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +8 -8
  211. package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.d.ts +13 -0
  212. package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.d.ts.map +1 -0
  213. package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.js +30 -0
  214. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts +1 -2
  215. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  216. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +5 -13
  217. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  218. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +45 -2
  219. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
  220. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +13 -65
  221. package/dist/src/presentation/web/components/providers/query-provider.d.ts +4 -0
  222. package/dist/src/presentation/web/components/providers/query-provider.d.ts.map +1 -0
  223. package/dist/src/presentation/web/components/providers/query-provider.js +16 -0
  224. package/dist/src/presentation/web/hooks/use-attachments.d.ts +26 -0
  225. package/dist/src/presentation/web/hooks/use-attachments.d.ts.map +1 -0
  226. package/dist/src/presentation/web/hooks/use-attachments.js +227 -0
  227. package/dist/tsconfig.build.tsbuildinfo +1 -1
  228. package/package.json +3 -1
  229. package/web/.next/BUILD_ID +1 -1
  230. package/web/.next/app-path-routes-manifest.json +11 -0
  231. package/web/.next/build-manifest.json +5 -5
  232. package/web/.next/fallback-build-manifest.json +2 -2
  233. package/web/.next/prerender-manifest.json +3 -3
  234. package/web/.next/required-server-files.js +1 -1
  235. package/web/.next/required-server-files.json +1 -1
  236. package/web/.next/routes-manifest.json +69 -0
  237. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/build-manifest.json +3 -3
  238. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +82 -82
  239. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +2 -2
  240. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  241. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  242. package/web/.next/server/app/(dashboard)/@drawer/chat/page/app-paths-manifest.json +3 -0
  243. package/web/.next/server/app/(dashboard)/@drawer/chat/page/build-manifest.json +18 -0
  244. package/web/.next/server/app/(dashboard)/@drawer/chat/page/next-font-manifest.json +6 -0
  245. package/web/.next/server/app/(dashboard)/@drawer/chat/page/react-loadable-manifest.json +8 -0
  246. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +395 -0
  247. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +22 -0
  248. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.map +5 -0
  249. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -0
  250. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +2 -0
  251. package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +3 -3
  252. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +84 -84
  253. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +2 -2
  254. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  255. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  256. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/build-manifest.json +3 -3
  257. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +98 -98
  258. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -2
  259. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  260. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  261. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +3 -3
  262. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +98 -98
  263. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -2
  264. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  265. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  266. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/app-paths-manifest.json +3 -0
  267. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/build-manifest.json +18 -0
  268. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/next-font-manifest.json +6 -0
  269. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/react-loadable-manifest.json +8 -0
  270. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +395 -0
  271. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +22 -0
  272. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.map +5 -0
  273. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -0
  274. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +2 -0
  275. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +3 -3
  276. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +78 -78
  277. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +2 -2
  278. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  279. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  280. package/web/.next/server/app/(dashboard)/chat/page/app-paths-manifest.json +3 -0
  281. package/web/.next/server/app/(dashboard)/chat/page/build-manifest.json +18 -0
  282. package/web/.next/server/app/(dashboard)/chat/page/next-font-manifest.json +6 -0
  283. package/web/.next/server/app/(dashboard)/chat/page/react-loadable-manifest.json +8 -0
  284. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +395 -0
  285. package/web/.next/server/app/(dashboard)/chat/page.js +22 -0
  286. package/web/.next/server/app/(dashboard)/chat/page.js.map +5 -0
  287. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -0
  288. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +2 -0
  289. package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +3 -3
  290. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +84 -84
  291. package/web/.next/server/app/(dashboard)/create/page.js +2 -2
  292. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  293. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  294. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/build-manifest.json +3 -3
  295. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +98 -98
  296. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +2 -2
  297. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  298. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  299. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +3 -3
  300. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +98 -98
  301. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -2
  302. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  303. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  304. package/web/.next/server/app/(dashboard)/page/build-manifest.json +3 -3
  305. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +78 -78
  306. package/web/.next/server/app/(dashboard)/page.js +2 -2
  307. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  308. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  309. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/app-paths-manifest.json +3 -0
  310. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/build-manifest.json +18 -0
  311. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/next-font-manifest.json +6 -0
  312. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/react-loadable-manifest.json +8 -0
  313. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +395 -0
  314. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +22 -0
  315. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.map +5 -0
  316. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -0
  317. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +2 -0
  318. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +3 -3
  319. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +78 -78
  320. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +2 -2
  321. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  322. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  323. package/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
  324. package/web/.next/server/app/_global-error.html +2 -2
  325. package/web/.next/server/app/_global-error.rsc +1 -1
  326. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  327. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  328. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  329. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  330. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  331. package/web/.next/server/app/_not-found/page/build-manifest.json +3 -3
  332. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +36 -6
  333. package/web/.next/server/app/_not-found/page.js +2 -2
  334. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  335. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  336. package/web/.next/server/app/api/attachments/preview/route.js +1 -1
  337. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  338. package/web/.next/server/app/api/evidence/route.js +1 -1
  339. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  340. package/web/.next/server/app/api/graph-data/route.js +1 -1
  341. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  342. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route/app-paths-manifest.json +3 -0
  343. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route/build-manifest.json +11 -0
  344. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route/server-reference-manifest.json +4 -0
  345. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js +7 -0
  346. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.map +5 -0
  347. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -0
  348. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route_client-reference-manifest.js +2 -0
  349. package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route/app-paths-manifest.json +3 -0
  350. package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route/build-manifest.json +11 -0
  351. package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route/server-reference-manifest.json +4 -0
  352. package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route.js +7 -0
  353. package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route.js.map +5 -0
  354. package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route.js.nft.json +1 -0
  355. package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route_client-reference-manifest.js +2 -0
  356. package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route/app-paths-manifest.json +3 -0
  357. package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route/build-manifest.json +11 -0
  358. package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route/server-reference-manifest.json +4 -0
  359. package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js +6 -0
  360. package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js.map +5 -0
  361. package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js.nft.json +1 -0
  362. package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route_client-reference-manifest.js +2 -0
  363. package/web/.next/server/app/api/interactive/sessions/[id]/messages/route/app-paths-manifest.json +3 -0
  364. package/web/.next/server/app/api/interactive/sessions/[id]/messages/route/build-manifest.json +11 -0
  365. package/web/.next/server/app/api/interactive/sessions/[id]/messages/route/server-reference-manifest.json +4 -0
  366. package/web/.next/server/app/api/interactive/sessions/[id]/messages/route.js +7 -0
  367. package/web/.next/server/app/api/interactive/sessions/[id]/messages/route.js.map +5 -0
  368. package/web/.next/server/app/api/interactive/sessions/[id]/messages/route.js.nft.json +1 -0
  369. package/web/.next/server/app/api/interactive/sessions/[id]/messages/route_client-reference-manifest.js +2 -0
  370. package/web/.next/server/app/api/interactive/sessions/[id]/route/app-paths-manifest.json +3 -0
  371. package/web/.next/server/app/api/interactive/sessions/[id]/route/build-manifest.json +11 -0
  372. package/web/.next/server/app/api/interactive/sessions/[id]/route/server-reference-manifest.json +4 -0
  373. package/web/.next/server/app/api/interactive/sessions/[id]/route.js +7 -0
  374. package/web/.next/server/app/api/interactive/sessions/[id]/route.js.map +5 -0
  375. package/web/.next/server/app/api/interactive/sessions/[id]/route.js.nft.json +1 -0
  376. package/web/.next/server/app/api/interactive/sessions/[id]/route_client-reference-manifest.js +2 -0
  377. package/web/.next/server/app/api/interactive/sessions/[id]/stream/route/app-paths-manifest.json +3 -0
  378. package/web/.next/server/app/api/interactive/sessions/[id]/stream/route/build-manifest.json +11 -0
  379. package/web/.next/server/app/api/interactive/sessions/[id]/stream/route/server-reference-manifest.json +4 -0
  380. package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js +6 -0
  381. package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js.map +5 -0
  382. package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js.nft.json +1 -0
  383. package/web/.next/server/app/api/interactive/sessions/[id]/stream/route_client-reference-manifest.js +2 -0
  384. package/web/.next/server/app/api/interactive/sessions/route/app-paths-manifest.json +3 -0
  385. package/web/.next/server/app/api/interactive/sessions/route/build-manifest.json +11 -0
  386. package/web/.next/server/app/api/interactive/sessions/route/server-reference-manifest.json +4 -0
  387. package/web/.next/server/app/api/interactive/sessions/route.js +7 -0
  388. package/web/.next/server/app/api/interactive/sessions/route.js.map +5 -0
  389. package/web/.next/server/app/api/interactive/sessions/route.js.nft.json +1 -0
  390. package/web/.next/server/app/api/interactive/sessions/route_client-reference-manifest.js +2 -0
  391. package/web/.next/server/app/api/sessions/route.js.nft.json +1 -1
  392. package/web/.next/server/app/api/sessions-batch/route.js.nft.json +1 -1
  393. package/web/.next/server/app/api/tools/route.js +2 -2
  394. package/web/.next/server/app/settings/page/build-manifest.json +3 -3
  395. package/web/.next/server/app/settings/page/server-reference-manifest.json +42 -42
  396. package/web/.next/server/app/settings/page.js +3 -3
  397. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  398. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  399. package/web/.next/server/app/skills/page/build-manifest.json +3 -3
  400. package/web/.next/server/app/skills/page/server-reference-manifest.json +46 -16
  401. package/web/.next/server/app/skills/page.js +3 -3
  402. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  403. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  404. package/web/.next/server/app/tools/page/build-manifest.json +3 -3
  405. package/web/.next/server/app/tools/page/server-reference-manifest.json +46 -16
  406. package/web/.next/server/app/tools/page.js +3 -3
  407. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  408. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  409. package/web/.next/server/app/version/page/build-manifest.json +3 -3
  410. package/web/.next/server/app/version/page/server-reference-manifest.json +36 -6
  411. package/web/.next/server/app/version/page.js +2 -2
  412. package/web/.next/server/app/version/page.js.nft.json +1 -1
  413. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  414. package/web/.next/server/app-paths-manifest.json +11 -0
  415. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +8 -2
  416. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
  417. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_interactive_sessions_route_actions_f2e7447f.js +3 -0
  418. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_interactive_sessions_route_actions_f2e7447f.js.map +1 -0
  419. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_[featureId]_messages_route_actions_f98e5802.js +3 -0
  420. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_[featureId]_messages_route_actions_f98e5802.js.map +1 -0
  421. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_[featureId]_stop_route_actions_36518d35.js +3 -0
  422. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_[featureId]_stop_route_actions_36518d35.js.map +1 -0
  423. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_[featureId]_stream_route_actions_e6210931.js +3 -0
  424. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_[featureId]_stream_route_actions_e6210931.js.map +1 -0
  425. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_sessions_[id]_messages_route_actions_be179971.js +3 -0
  426. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_sessions_[id]_messages_route_actions_be179971.js.map +1 -0
  427. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_sessions_[id]_stream_route_actions_58ab2b5b.js +3 -0
  428. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_sessions_[id]_stream_route_actions_58ab2b5b.js.map +1 -0
  429. package/web/.next/server/chunks/[root-of-the-server]__10852c5c._.js +3 -0
  430. package/web/.next/server/chunks/[root-of-the-server]__10852c5c._.js.map +1 -0
  431. package/web/.next/server/chunks/[root-of-the-server]__2b71641f._.js +3 -0
  432. package/web/.next/server/chunks/[root-of-the-server]__2b71641f._.js.map +1 -0
  433. package/web/.next/server/chunks/[root-of-the-server]__2bb675ff._.js +3 -0
  434. package/web/.next/server/chunks/[root-of-the-server]__2bb675ff._.js.map +1 -0
  435. package/web/.next/server/chunks/[root-of-the-server]__4408a5ba._.js +12 -0
  436. package/web/.next/server/chunks/[root-of-the-server]__4408a5ba._.js.map +1 -0
  437. package/web/.next/server/chunks/[root-of-the-server]__6565a045._.js +3 -0
  438. package/web/.next/server/chunks/[root-of-the-server]__6565a045._.js.map +1 -0
  439. package/web/.next/server/chunks/[root-of-the-server]__8a281f8d._.js +18 -0
  440. package/web/.next/server/chunks/[root-of-the-server]__8a281f8d._.js.map +1 -0
  441. package/web/.next/server/chunks/[root-of-the-server]__8f8d6afe._.js +3 -0
  442. package/web/.next/server/chunks/[root-of-the-server]__8f8d6afe._.js.map +1 -0
  443. package/web/.next/server/chunks/[root-of-the-server]__9191749c._.js +1 -1
  444. package/web/.next/server/chunks/[root-of-the-server]__9191749c._.js.map +1 -1
  445. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  446. package/web/.next/server/chunks/{[root-of-the-server]__26565141._.js → [root-of-the-server]__acea6565._.js} +2 -2
  447. package/web/.next/server/chunks/{[root-of-the-server]__26565141._.js.map → [root-of-the-server]__acea6565._.js.map} +1 -1
  448. package/web/.next/server/chunks/[root-of-the-server]__beda892a._.js +3 -0
  449. package/web/.next/server/chunks/[root-of-the-server]__beda892a._.js.map +1 -0
  450. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  451. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  452. package/web/.next/server/chunks/{[root-of-the-server]__25f23d5d._.js → [root-of-the-server]__e3692208._.js} +2 -2
  453. package/web/.next/server/chunks/{[root-of-the-server]__25f23d5d._.js.map → [root-of-the-server]__e3692208._.js.map} +1 -1
  454. package/web/.next/server/chunks/f3a1f__next-internal_server_app_api_interactive_sessions_[id]_route_actions_a4ea4d16.js +3 -0
  455. package/web/.next/server/chunks/f3a1f__next-internal_server_app_api_interactive_sessions_[id]_route_actions_a4ea4d16.js.map +1 -0
  456. package/web/.next/server/chunks/ssr/403f9_next_dist_c9d9b4d7._.js +1 -1
  457. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_2c44200f.js +4 -0
  458. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_2c44200f.js.map +1 -0
  459. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_56f4f121.js +4 -0
  460. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_56f4f121.js.map +1 -0
  461. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_77436e06.js +4 -0
  462. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_77436e06.js.map +1 -0
  463. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_b9bb0443.js +4 -0
  464. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_b9bb0443.js.map +1 -0
  465. package/web/.next/server/chunks/ssr/744ca_web_app_(dashboard)_repository_[repositoryId]_[tab]_page_tsx_2e9a3025._.js +3 -0
  466. package/web/.next/server/chunks/ssr/744ca_web_app_(dashboard)_repository_[repositoryId]_[tab]_page_tsx_2e9a3025._.js.map +1 -0
  467. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  468. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  469. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +7 -0
  470. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -0
  471. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_4b319ae6._.js +3 -0
  472. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_4b319ae6._.js.map +1 -0
  473. package/web/.next/server/chunks/ssr/[root-of-the-server]__0b150ddf._.js +1 -1
  474. package/web/.next/server/chunks/ssr/[root-of-the-server]__0b150ddf._.js.map +1 -1
  475. package/web/.next/server/chunks/ssr/[root-of-the-server]__17ed7ed1._.js +4 -0
  476. package/web/.next/server/chunks/ssr/[root-of-the-server]__17ed7ed1._.js.map +1 -0
  477. package/web/.next/server/chunks/ssr/[root-of-the-server]__28d0d265._.js +4 -0
  478. package/web/.next/server/chunks/ssr/[root-of-the-server]__28d0d265._.js.map +1 -0
  479. package/web/.next/server/chunks/ssr/[root-of-the-server]__31f1c3b0._.js +7 -0
  480. package/web/.next/server/chunks/ssr/[root-of-the-server]__31f1c3b0._.js.map +1 -0
  481. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  482. package/web/.next/server/chunks/ssr/[root-of-the-server]__42bf1807._.js +4 -0
  483. package/web/.next/server/chunks/ssr/[root-of-the-server]__42bf1807._.js.map +1 -0
  484. package/web/.next/server/chunks/ssr/[root-of-the-server]__56b70465._.js +4 -0
  485. package/web/.next/server/chunks/ssr/[root-of-the-server]__56b70465._.js.map +1 -0
  486. package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js +1 -1
  487. package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js.map +1 -1
  488. package/web/.next/server/chunks/ssr/[root-of-the-server]__7528eb6f._.js +3 -0
  489. package/web/.next/server/chunks/ssr/[root-of-the-server]__7528eb6f._.js.map +1 -0
  490. package/web/.next/server/chunks/ssr/[root-of-the-server]__88f7e8e6._.js +4 -0
  491. package/web/.next/server/chunks/ssr/[root-of-the-server]__88f7e8e6._.js.map +1 -0
  492. package/web/.next/server/chunks/ssr/[root-of-the-server]__8b0aac03._.js +4 -0
  493. package/web/.next/server/chunks/ssr/[root-of-the-server]__8b0aac03._.js.map +1 -0
  494. package/web/.next/server/chunks/ssr/[root-of-the-server]__b14946f5._.js +2 -2
  495. package/web/.next/server/chunks/ssr/[root-of-the-server]__b8d4bd27._.js +3 -0
  496. package/web/.next/server/chunks/ssr/[root-of-the-server]__b8d4bd27._.js.map +1 -0
  497. package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js +1 -1
  498. package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js.map +1 -1
  499. package/web/.next/server/chunks/ssr/[root-of-the-server]__c30f1f82._.js +4 -0
  500. package/web/.next/server/chunks/ssr/[root-of-the-server]__c30f1f82._.js.map +1 -0
  501. package/web/.next/server/chunks/ssr/[root-of-the-server]__ede6df1f._.js +3 -0
  502. package/web/.next/server/chunks/ssr/[root-of-the-server]__ede6df1f._.js.map +1 -0
  503. package/web/.next/server/chunks/ssr/[root-of-the-server]__f80bfc75._.js +4 -0
  504. package/web/.next/server/chunks/ssr/[root-of-the-server]__f80bfc75._.js.map +1 -0
  505. package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
  506. package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
  507. package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
  508. package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
  509. package/web/.next/server/chunks/ssr/_3a0b989f._.js +6 -0
  510. package/web/.next/server/chunks/ssr/_3a0b989f._.js.map +1 -0
  511. package/web/.next/server/chunks/ssr/_48e5757d._.js +9 -0
  512. package/web/.next/server/chunks/ssr/_48e5757d._.js.map +1 -0
  513. package/web/.next/server/chunks/ssr/{_4093a637._.js → _4c42590e._.js} +2 -2
  514. package/web/.next/server/chunks/ssr/_4c42590e._.js.map +1 -0
  515. package/web/.next/server/chunks/ssr/{_6c7faa01._.js → _507a8382._.js} +2 -2
  516. package/web/.next/server/chunks/ssr/_507a8382._.js.map +1 -0
  517. package/web/.next/server/chunks/ssr/_56b9d60f._.js +3 -0
  518. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -0
  519. package/web/.next/server/chunks/ssr/_5f69c13f._.js +4 -0
  520. package/web/.next/server/chunks/ssr/_5f69c13f._.js.map +1 -0
  521. package/web/.next/server/chunks/ssr/_78ff6f1d._.js +3 -0
  522. package/web/.next/server/chunks/ssr/_78ff6f1d._.js.map +1 -0
  523. package/web/.next/server/chunks/ssr/_7c5b97c6._.js +4 -0
  524. package/web/.next/server/chunks/ssr/_7c5b97c6._.js.map +1 -0
  525. package/web/.next/server/chunks/ssr/_8219712a._.js +3 -0
  526. package/web/.next/server/chunks/ssr/_8219712a._.js.map +1 -0
  527. package/web/.next/server/chunks/ssr/_82c57f10._.js +4 -0
  528. package/web/.next/server/chunks/ssr/_82c57f10._.js.map +1 -0
  529. package/web/.next/server/chunks/ssr/{_0020fddd._.js → _8b57edb8._.js} +2 -2
  530. package/web/.next/server/chunks/ssr/_8b57edb8._.js.map +1 -0
  531. package/web/.next/server/chunks/ssr/_8d733ce4._.js +3 -0
  532. package/web/.next/server/chunks/ssr/_8d733ce4._.js.map +1 -0
  533. package/web/.next/server/chunks/ssr/{_6256a985._.js → _9495d50b._.js} +3 -3
  534. package/web/.next/server/chunks/ssr/{_6256a985._.js.map → _9495d50b._.js.map} +1 -1
  535. package/web/.next/server/chunks/ssr/_a0e3f7e4._.js +4 -0
  536. package/web/.next/server/chunks/ssr/_a0e3f7e4._.js.map +1 -0
  537. package/web/.next/server/chunks/ssr/_ac4a3873._.js +3 -0
  538. package/web/.next/server/chunks/ssr/_ac4a3873._.js.map +1 -0
  539. package/web/.next/server/chunks/ssr/_ca0aa7f0._.js +4 -0
  540. package/web/.next/server/chunks/ssr/_ca0aa7f0._.js.map +1 -0
  541. package/web/.next/server/chunks/ssr/_cb5a021e._.js +4 -0
  542. package/web/.next/server/chunks/ssr/_cb5a021e._.js.map +1 -0
  543. package/web/.next/server/chunks/ssr/_cfbd1d7e._.js +1 -1
  544. package/web/.next/server/chunks/ssr/_cfbd1d7e._.js.map +1 -1
  545. package/web/.next/server/chunks/ssr/_d4b20e29._.js +1 -1
  546. package/web/.next/server/chunks/ssr/_d4b20e29._.js.map +1 -1
  547. package/web/.next/server/chunks/ssr/_d86175ae._.js +4 -0
  548. package/web/.next/server/chunks/ssr/_d86175ae._.js.map +1 -0
  549. package/web/.next/server/chunks/ssr/_d8bedf13._.js +4 -0
  550. package/web/.next/server/chunks/ssr/_d8bedf13._.js.map +1 -0
  551. package/web/.next/server/chunks/ssr/_de71404e._.js +3 -0
  552. package/web/.next/server/chunks/ssr/_de71404e._.js.map +1 -0
  553. package/web/.next/server/chunks/ssr/{_c2ca0f1b._.js → _eb9467e9._.js} +3 -3
  554. package/web/.next/server/chunks/ssr/_eb9467e9._.js.map +1 -0
  555. package/web/.next/server/chunks/ssr/_fa7efce3._.js +6 -0
  556. package/web/.next/server/chunks/ssr/_fa7efce3._.js.map +1 -0
  557. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  558. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  559. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_global-chat-drawer-client_tsx_158c4b12._.js +3 -0
  560. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_global-chat-drawer-client_tsx_158c4b12._.js.map +1 -0
  561. package/web/.next/server/chunks/ssr/node_modules__pnpm_8ec2c790._.js +3 -0
  562. package/web/.next/server/chunks/ssr/node_modules__pnpm_8ec2c790._.js.map +1 -0
  563. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_cdc632e3.js +3 -0
  564. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_cdc632e3.js.map +1 -0
  565. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_39ca0924.js +3 -0
  566. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_39ca0924.js.map +1 -0
  567. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_chat_page_tsx_85327270._.js +3 -0
  568. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_chat_page_tsx_85327270._.js.map +1 -0
  569. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
  570. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  571. package/web/.next/server/chunks/ssr/src_presentation_web_components_357e3eb0._.js +3 -0
  572. package/web/.next/server/chunks/ssr/src_presentation_web_components_357e3eb0._.js.map +1 -0
  573. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  574. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  575. package/web/.next/server/middleware-build-manifest.js +3 -3
  576. package/web/.next/server/pages/500.html +2 -2
  577. package/web/.next/server/server-reference-manifest.js +1 -1
  578. package/web/.next/server/server-reference-manifest.json +1346 -562
  579. package/web/.next/static/chunks/0c38793438b8c038.js +1 -0
  580. package/web/.next/static/chunks/0e73b25a355804a2.js +5 -0
  581. package/web/.next/static/chunks/11091b676d1b3bd4.js +1 -0
  582. package/web/.next/static/chunks/16f6471485cbfed1.css +1 -0
  583. package/web/.next/static/chunks/22c459f1877b1e4f.js +1 -0
  584. package/web/.next/static/chunks/2354d39c63978576.js +1 -0
  585. package/web/.next/static/chunks/40b6bcf1a2de4a0f.js +1 -0
  586. package/web/.next/static/chunks/476ebad4abb27ee8.js +7 -0
  587. package/web/.next/static/chunks/487a3d47f76ba2ce.js +1 -0
  588. package/web/.next/static/chunks/4b2c4a5c35ebb70d.js +1 -0
  589. package/web/.next/static/chunks/5ae60a052ab5f437.js +5 -0
  590. package/web/.next/static/chunks/6a5c79587318fe1e.js +1 -0
  591. package/web/.next/static/chunks/{091de81012e2bc48.js → 73b5be3394d27358.js} +2 -2
  592. package/web/.next/static/chunks/9dd319c237b73197.js +1 -0
  593. package/web/.next/static/chunks/b546fac6810f555b.js +1 -0
  594. package/web/.next/static/chunks/c80523e4d172cdea.js +3 -0
  595. package/web/.next/static/chunks/cd54b758f58061d0.js +1 -0
  596. package/web/.next/static/chunks/ce18a48f7d5d53c0.js +1 -0
  597. package/web/.next/static/chunks/{cfe4dc9904fcfddb.js → d0e04c4bd51d2553.js} +1 -1
  598. package/web/.next/static/chunks/e51493c981deb9fd.js +1 -0
  599. package/web/.next/static/chunks/ec7cd7e136a1b320.js +1 -0
  600. package/web/.next/static/chunks/f0b1a5ded6ab6885.js +1 -0
  601. package/web/.next/static/chunks/feed0046c419c228.js +5 -0
  602. package/web/.next/static/chunks/{turbopack-c2d183e05f30c7dc.js → turbopack-432ef324fc27240c.js} +1 -1
  603. package/web/package.json +7 -2
  604. package/apis/json-schema/AgentRunDetail.yaml +0 -28
  605. package/apis/json-schema/DoctorDiagnosticReport.yaml +0 -76
  606. package/apis/json-schema/FailedRunSummary.yaml +0 -22
  607. package/apis/json-schema/SystemInfo.yaml +0 -22
  608. package/apis/json-schema/WorkerLogEntry.yaml +0 -27
  609. package/dist/packages/core/src/application/ports/output/services/github-issue-service.interface.d.ts +0 -57
  610. package/dist/packages/core/src/application/ports/output/services/github-issue-service.interface.d.ts.map +0 -1
  611. package/dist/packages/core/src/application/ports/output/services/github-issue-service.interface.js +0 -39
  612. package/dist/packages/core/src/application/use-cases/doctor/doctor-diagnose.use-case.d.ts +0 -64
  613. package/dist/packages/core/src/application/use-cases/doctor/doctor-diagnose.use-case.d.ts.map +0 -1
  614. package/dist/packages/core/src/application/use-cases/doctor/doctor-diagnose.use-case.js +0 -493
  615. package/dist/packages/core/src/infrastructure/services/external/github-issue-creator.service.d.ts +0 -17
  616. package/dist/packages/core/src/infrastructure/services/external/github-issue-creator.service.d.ts.map +0 -1
  617. package/dist/packages/core/src/infrastructure/services/external/github-issue-creator.service.js +0 -69
  618. package/dist/src/presentation/cli/commands/doctor.command.d.ts +0 -20
  619. package/dist/src/presentation/cli/commands/doctor.command.d.ts.map +0 -1
  620. package/dist/src/presentation/cli/commands/doctor.command.js +0 -129
  621. package/web/.next/server/chunks/[root-of-the-server]__c6e32a23._.js +0 -3
  622. package/web/.next/server/chunks/[root-of-the-server]__c6e32a23._.js.map +0 -1
  623. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_8b618f7d._.js +0 -3
  624. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_8b618f7d._.js.map +0 -1
  625. package/web/.next/server/chunks/ssr/[root-of-the-server]__2138fa7e._.js +0 -4
  626. package/web/.next/server/chunks/ssr/[root-of-the-server]__2138fa7e._.js.map +0 -1
  627. package/web/.next/server/chunks/ssr/[root-of-the-server]__29580090._.js +0 -4
  628. package/web/.next/server/chunks/ssr/[root-of-the-server]__29580090._.js.map +0 -1
  629. package/web/.next/server/chunks/ssr/[root-of-the-server]__3ef34e4c._.js +0 -4
  630. package/web/.next/server/chunks/ssr/[root-of-the-server]__3ef34e4c._.js.map +0 -1
  631. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js +0 -4
  632. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js.map +0 -1
  633. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js +0 -4
  634. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js.map +0 -1
  635. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +0 -7
  636. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +0 -1
  637. package/web/.next/server/chunks/ssr/[root-of-the-server]__c094882b._.js +0 -4
  638. package/web/.next/server/chunks/ssr/[root-of-the-server]__c094882b._.js.map +0 -1
  639. package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js +0 -3
  640. package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js.map +0 -1
  641. package/web/.next/server/chunks/ssr/[root-of-the-server]__dac5dbf1._.js +0 -4
  642. package/web/.next/server/chunks/ssr/[root-of-the-server]__dac5dbf1._.js.map +0 -1
  643. package/web/.next/server/chunks/ssr/[root-of-the-server]__df7c1cd3._.js +0 -3
  644. package/web/.next/server/chunks/ssr/[root-of-the-server]__df7c1cd3._.js.map +0 -1
  645. package/web/.next/server/chunks/ssr/[root-of-the-server]__fae8b355._.js +0 -4
  646. package/web/.next/server/chunks/ssr/[root-of-the-server]__fae8b355._.js.map +0 -1
  647. package/web/.next/server/chunks/ssr/_0020fddd._.js.map +0 -1
  648. package/web/.next/server/chunks/ssr/_01046927._.js +0 -9
  649. package/web/.next/server/chunks/ssr/_01046927._.js.map +0 -1
  650. package/web/.next/server/chunks/ssr/_0c473fef._.js +0 -6
  651. package/web/.next/server/chunks/ssr/_0c473fef._.js.map +0 -1
  652. package/web/.next/server/chunks/ssr/_1b719e7f._.js +0 -4
  653. package/web/.next/server/chunks/ssr/_1b719e7f._.js.map +0 -1
  654. package/web/.next/server/chunks/ssr/_37e8548b._.js +0 -4
  655. package/web/.next/server/chunks/ssr/_37e8548b._.js.map +0 -1
  656. package/web/.next/server/chunks/ssr/_4093a637._.js.map +0 -1
  657. package/web/.next/server/chunks/ssr/_55d763e2._.js +0 -4
  658. package/web/.next/server/chunks/ssr/_55d763e2._.js.map +0 -1
  659. package/web/.next/server/chunks/ssr/_6c7faa01._.js.map +0 -1
  660. package/web/.next/server/chunks/ssr/_8fcc39d4._.js +0 -3
  661. package/web/.next/server/chunks/ssr/_8fcc39d4._.js.map +0 -1
  662. package/web/.next/server/chunks/ssr/_b71645b4._.js +0 -4
  663. package/web/.next/server/chunks/ssr/_b71645b4._.js.map +0 -1
  664. package/web/.next/server/chunks/ssr/_c2ca0f1b._.js.map +0 -1
  665. package/web/.next/server/chunks/ssr/_d8575088._.js +0 -3
  666. package/web/.next/server/chunks/ssr/_d8575088._.js.map +0 -1
  667. package/web/.next/server/chunks/ssr/_dc9a9d32._.js +0 -3
  668. package/web/.next/server/chunks/ssr/_dc9a9d32._.js.map +0 -1
  669. package/web/.next/server/chunks/ssr/_e9e9ed20._.js +0 -6
  670. package/web/.next/server/chunks/ssr/_e9e9ed20._.js.map +0 -1
  671. package/web/.next/server/chunks/ssr/node_modules__pnpm_55c7a131._.js +0 -3
  672. package/web/.next/server/chunks/ssr/node_modules__pnpm_55c7a131._.js.map +0 -1
  673. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js +0 -3
  674. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js.map +0 -1
  675. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js +0 -3
  676. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js.map +0 -1
  677. package/web/.next/server/chunks/ssr/src_presentation_web_aa941041._.js +0 -3
  678. package/web/.next/server/chunks/ssr/src_presentation_web_aa941041._.js.map +0 -1
  679. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +0 -3
  680. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +0 -1
  681. package/web/.next/static/chunks/08baac5434d9528e.js +0 -13
  682. package/web/.next/static/chunks/25889ca8401d1bc0.js +0 -1
  683. package/web/.next/static/chunks/359b2815c5ed39cc.js +0 -1
  684. package/web/.next/static/chunks/49057cf8cd37e262.js +0 -1
  685. package/web/.next/static/chunks/4a28fd1bca225386.js +0 -1
  686. package/web/.next/static/chunks/4cec255f2754e5ec.js +0 -1
  687. package/web/.next/static/chunks/5e1877d1f1bcfd77.js +0 -1
  688. package/web/.next/static/chunks/601d93593f5f664f.js +0 -1
  689. package/web/.next/static/chunks/76a3f345f8cf2608.js +0 -1
  690. package/web/.next/static/chunks/79eae02d0342fb73.js +0 -1
  691. package/web/.next/static/chunks/80915095cec414bf.js +0 -1
  692. package/web/.next/static/chunks/87b72b8a10f8255b.js +0 -5
  693. package/web/.next/static/chunks/9b8678597fa1db84.css +0 -1
  694. package/web/.next/static/chunks/b70dd4985a814b27.js +0 -1
  695. package/web/.next/static/chunks/c2388f8bc58b2a21.js +0 -1
  696. package/web/.next/static/chunks/e760b952ba1a10d4.js +0 -1
  697. package/web/.next/static/chunks/ed9408f100149c34.js +0 -1
  698. package/web/.next/static/chunks/f66c996402a430f5.js +0 -1
  699. /package/web/.next/static/{-o7QIcv1p5C722dwF4EFd → VIJH9LQh8Ro1-nip3v-Am}/_buildManifest.js +0 -0
  700. /package/web/.next/static/{-o7QIcv1p5C722dwF4EFd → VIJH9LQh8Ro1-nip3v-Am}/_clientMiddlewareManifest.json +0 -0
  701. /package/web/.next/static/{-o7QIcv1p5C722dwF4EFd → VIJH9LQh8Ro1-nip3v-Am}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatTab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/chat/ChatTab.tsx"],"names":[],"mappings":"AAaA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,OAAO,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,YAAY,2CAgGhE"}
@@ -0,0 +1,67 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useCallback, useState } from 'react';
4
+ import { AssistantRuntimeProvider } from '@assistant-ui/react';
5
+ import { Trash2, Square, Cpu } from 'lucide-react';
6
+ import { cn } from '../../../lib/utils.js';
7
+ import { Thread } from '../../assistant-ui/thread.js';
8
+ import { useAttachments } from '../../../hooks/use-attachments.js';
9
+ import { composeUserInput } from '../../../app/actions/compose-user-input.js';
10
+ import { AgentModelPicker } from '../../features/settings/AgentModelPicker/index.js';
11
+ import { useChatRuntime } from './useChatRuntime.js';
12
+ import { ChatComposer } from './ChatComposer.js';
13
+ export function ChatTab({ featureId, worktreePath }) {
14
+ const [overrideAgent, setOverrideAgent] = useState(undefined);
15
+ const [overrideModel, setOverrideModel] = useState(undefined);
16
+ const att = useAttachments();
17
+ const contentTransform = useCallback((content) => composeUserInput(content, att.completedAttachments.map((a) => ({ path: a.path, name: a.name, notes: a.notes }))), [att.completedAttachments]);
18
+ const { runtime, status, clearChat, stopAgent, sessionInfo, isChatLoading } = useChatRuntime(featureId, worktreePath, { contentTransform, onMessageSent: att.clearAttachments });
19
+ const handlePickFiles = useCallback(async () => {
20
+ try {
21
+ const res = await fetch('/api/dialog/pick-files');
22
+ if (!res.ok)
23
+ return;
24
+ const data = (await res.json());
25
+ if (!data.paths?.length)
26
+ return;
27
+ for (const filePath of data.paths) {
28
+ const uploadRes = await fetch('/api/attachments/upload-from-path', {
29
+ method: 'POST',
30
+ headers: { 'Content-Type': 'application/json' },
31
+ body: JSON.stringify({ path: filePath, sessionId: `chat-${featureId}` }),
32
+ });
33
+ if (!uploadRes.ok)
34
+ continue;
35
+ const uploaded = (await uploadRes.json());
36
+ att.addAttachment(uploaded);
37
+ }
38
+ }
39
+ catch {
40
+ // Native picker not available — ignore
41
+ }
42
+ // eslint-disable-next-line react-hooks/exhaustive-deps -- att.addAttachment is a stable callback from useAttachments
43
+ }, [featureId, att.addAttachment]);
44
+ const composer = (_jsx(ChatComposer, { attachments: att.attachments, isDragOver: att.isDragOver, uploadError: att.uploadError, onDragEnter: att.handleDragEnter, onDragLeave: att.handleDragLeave, onDragOver: att.handleDragOver, onDrop: att.handleDrop, onPaste: att.handlePaste, onRemoveAttachment: att.removeAttachment, onNotesChange: att.updateNotes, onPickFiles: handlePickFiles, agentPicker: _jsx(AgentModelPicker, { initialAgentType: overrideAgent ?? 'claude-code', initialModel: overrideModel ?? 'claude-sonnet-4-6', mode: "override", onAgentModelChange: (agent, model) => {
45
+ setOverrideAgent(agent);
46
+ setOverrideModel(model);
47
+ }, className: "w-55" }) }));
48
+ return (_jsxs("div", { className: "flex h-full min-h-0 flex-col", children: [_jsx(ChatHeader, { sessionInfo: sessionInfo, isAgentActive: status.isRunning, onClear: clearChat, onStop: stopAgent }), _jsx("div", { className: "flex min-h-0 flex-1 flex-col", children: isChatLoading ? (_jsx(ChatSkeleton, {})) : (_jsx(AssistantRuntimeProvider, { runtime: runtime, children: _jsx(Thread, { composer: composer }) })) })] }));
49
+ }
50
+ // ── Loading skeleton ────────────────────────────────────────────────────────
51
+ function ChatSkeleton() {
52
+ return (_jsxs("div", { className: "flex flex-1 flex-col gap-3 p-4 pt-6", children: [_jsxs("div", { className: "flex items-start gap-2.5", children: [_jsx("div", { className: "bg-muted h-6 w-6 animate-pulse rounded-full" }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("div", { className: "bg-muted h-4 w-48 animate-pulse rounded-lg" }), _jsx("div", { className: "bg-muted h-4 w-72 animate-pulse rounded-lg" }), _jsx("div", { className: "bg-muted h-4 w-36 animate-pulse rounded-lg" })] })] }), _jsxs("div", { className: "flex items-start gap-2.5", children: [_jsx("div", { className: "bg-muted h-6 w-6 animate-pulse rounded-full" }), _jsx("div", { className: "bg-muted h-4 w-32 animate-pulse rounded-lg" })] }), _jsxs("div", { className: "flex items-start gap-2.5", children: [_jsx("div", { className: "bg-muted h-6 w-6 animate-pulse rounded-full" }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("div", { className: "bg-muted h-4 w-56 animate-pulse rounded-lg" }), _jsx("div", { className: "bg-muted h-4 w-64 animate-pulse rounded-lg" })] })] })] }));
53
+ }
54
+ // ── Chat header — compact session info + actions ─────────────────────────────
55
+ function ChatHeader({ sessionInfo, isAgentActive, onClear, onStop, }) {
56
+ return (_jsxs("div", { className: "flex h-8 shrink-0 items-center border-b px-3", children: [_jsx("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: sessionInfo ? (_jsxs(_Fragment, { children: [isAgentActive ? (_jsx("span", { className: "h-1.5 w-1.5 shrink-0 animate-pulse rounded-full bg-emerald-500" })) : (_jsx(Cpu, { className: "text-muted-foreground/40 h-3 w-3 shrink-0" })), _jsxs("span", { className: "text-muted-foreground font-mono text-[10px]", children: [sessionInfo.model ?? 'agent', sessionInfo.sessionId ? ` · ${sessionInfo.sessionId.slice(0, 8)}` : ''] })] })) : (_jsx("span", { className: "text-muted-foreground/40 text-[11px]", children: "No session" })) }), _jsxs("div", { className: "flex items-center gap-1 pl-2", children: [sessionInfo ? (_jsxs(_Fragment, { children: [_jsxs(ToolbarButton, { onClick: () => {
57
+ void onStop();
58
+ }, title: "Force stop agent process", variant: "danger", children: [_jsx(Square, { className: "h-2.5 w-2.5 fill-current" }), _jsx("span", { children: "Stop" })] }), _jsx("span", { className: "text-border mx-0.5", children: "|" })] })) : null, _jsxs(ToolbarButton, { onClick: () => {
59
+ void onClear();
60
+ }, title: "Clear chat history", children: [_jsx(Trash2, { className: "h-2.5 w-2.5" }), _jsx("span", { children: "Clear" })] })] })] }));
61
+ }
62
+ // ── Toolbar button ──────────────────────────────────────────────────────────
63
+ function ToolbarButton({ children, onClick, title, variant, }) {
64
+ return (_jsx("button", { type: "button", onClick: onClick, title: title, className: cn('inline-flex items-center gap-1 rounded-md px-2 py-1 text-xs transition-colors', variant === 'danger'
65
+ ? 'text-destructive hover:bg-destructive/10'
66
+ : 'text-muted-foreground hover:text-foreground hover:bg-muted'), children: children }));
67
+ }
@@ -0,0 +1,25 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import type { ThreadMessageLike } from '@assistant-ui/react';
3
+ /**
4
+ * Wrapper component for stories — accepts props that configure the mock.
5
+ */
6
+ declare function ChatStory({ initialMessages, simulateStreaming, }: {
7
+ initialMessages?: ThreadMessageLike[];
8
+ simulateStreaming?: boolean;
9
+ }): import("react/jsx-runtime").JSX.Element;
10
+ declare const meta: Meta<typeof ChatStory>;
11
+ export default meta;
12
+ type Story = StoryObj<typeof ChatStory>;
13
+ /** Empty state — no messages, prompt always visible. Type a message to chat. */
14
+ export declare const Empty: Story;
15
+ /** Pre-populated conversation with code blocks, markdown, and multiple turns. */
16
+ export declare const WithHistory: Story;
17
+ /** Agent auto-boot message — shown when agent starts on first message. */
18
+ export declare const AutoBoot: Story;
19
+ /** Rich markdown — headers, bold, lists, blockquotes, links, inline code. */
20
+ export declare const RichMarkdown: Story;
21
+ /** Long conversation — many messages to test scrolling behavior. */
22
+ export declare const LongConversation: Story;
23
+ /** Non-streaming mode — response appears all at once after delay. */
24
+ export declare const NonStreaming: Story;
25
+ //# sourceMappingURL=ChatTab.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatTab.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/chat/ChatTab.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,qBAAqB,CAAC;AA2G5E;;GAEG;AACH,iBAAS,SAAS,CAAC,EACjB,eAAoB,EACpB,iBAAwB,GACzB,EAAE;IACD,eAAe,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACtC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,2CAMA;AAED,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,SAAS,CAqBhC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,SAAS,CAAC,CAAC;AAExC,gFAAgF;AAChF,eAAO,MAAM,KAAK,EAAE,KAKnB,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,WAAW,EAAE,KA0CzB,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,QAAQ,EAAE,KAYtB,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,YAAY,EAAE,KA6C1B,CAAC;AAEF,oEAAoE;AACpE,eAAO,MAAM,gBAAgB,EAAE,KAkB9B,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,YAAY,EAAE,KAK1B,CAAC"}
@@ -0,0 +1,237 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState, useCallback } from 'react';
3
+ import { AssistantRuntimeProvider, useExternalStoreRuntime } from '@assistant-ui/react';
4
+ import { Thread } from '../../assistant-ui/thread.js';
5
+ // ── Mock runtime wrapper for Storybook ──────────────────────────────────────
6
+ function MockChatProvider({ initialMessages = [], simulateDelay = 1500, simulateStreaming = true, children, }) {
7
+ const [messages, setMessages] = useState(initialMessages);
8
+ const [isRunning, setIsRunning] = useState(false);
9
+ const onNew = useCallback(async (message) => {
10
+ const textPart = message.content.find((c) => c.type === 'text');
11
+ if (textPart?.type !== 'text')
12
+ return;
13
+ // Add user message
14
+ const userMsg = {
15
+ id: `user-${Date.now()}`,
16
+ role: 'user',
17
+ content: [{ type: 'text', text: textPart.text }],
18
+ createdAt: new Date(),
19
+ };
20
+ setMessages((prev) => [...prev, userMsg]);
21
+ setIsRunning(true);
22
+ if (simulateStreaming) {
23
+ // Simulate streaming response
24
+ const fullResponse = generateMockResponse(textPart.text);
25
+ const assistantId = `assistant-${Date.now()}`;
26
+ const assistantMsg = {
27
+ id: assistantId,
28
+ role: 'assistant',
29
+ content: [{ type: 'text', text: '' }],
30
+ createdAt: new Date(),
31
+ };
32
+ setMessages((prev) => [...prev, assistantMsg]);
33
+ // Stream tokens
34
+ const words = fullResponse.split(' ');
35
+ let accumulated = '';
36
+ for (let i = 0; i < words.length; i++) {
37
+ await new Promise((r) => setTimeout(r, 30 + Math.random() * 50));
38
+ accumulated += (i > 0 ? ' ' : '') + words[i];
39
+ const text = accumulated;
40
+ setMessages((prev) => prev.map((m) => m.id === assistantId ? { ...m, content: [{ type: 'text', text }] } : m));
41
+ }
42
+ }
43
+ else {
44
+ await new Promise((r) => setTimeout(r, simulateDelay));
45
+ const assistantMsg = {
46
+ id: `assistant-${Date.now()}`,
47
+ role: 'assistant',
48
+ content: [{ type: 'text', text: generateMockResponse(textPart.text) }],
49
+ createdAt: new Date(),
50
+ };
51
+ setMessages((prev) => [...prev, assistantMsg]);
52
+ }
53
+ setIsRunning(false);
54
+ }, [simulateDelay, simulateStreaming]);
55
+ const runtime = useExternalStoreRuntime({
56
+ messages,
57
+ convertMessage: useCallback((msg) => msg, []),
58
+ isRunning,
59
+ onNew,
60
+ });
61
+ return _jsx(AssistantRuntimeProvider, { runtime: runtime, children: children });
62
+ }
63
+ function generateMockResponse(userMessage) {
64
+ const lower = userMessage.toLowerCase();
65
+ if (lower.includes('test')) {
66
+ return `## Test Results\n\nI ran the test suite and here are the results:\n\n- **42 tests passed**\n- **0 tests failed**\n- **Coverage: 87%**\n\nThe main gaps are in:\n1. OAuth callback handler (3 uncovered branches)\n2. Token refresh logic (missing edge case)\n\n\`\`\`typescript\ndescribe("auth", () => {\n it("should refresh token", async () => {\n const token = await refreshToken("expired");\n expect(token).toBeDefined();\n });\n});\n\`\`\`\n\nWant me to write the missing tests?`;
67
+ }
68
+ if (lower.includes('fix') || lower.includes('bug')) {
69
+ return `I found the issue. The problem is in the \`handleRequest\` function where the error boundary doesn't catch async rejections.\n\n**Root cause:** The \`try/catch\` block wraps synchronous code, but the database query is awaited outside of it.\n\n**Fix:**\n\`\`\`typescript\nasync function handleRequest(req: Request) {\n try {\n const result = await db.query(req.params.id);\n return Response.json(result);\n } catch (error) {\n logger.error("Request failed", { error });\n return Response.json({ error: "Internal error" }, { status: 500 });\n }\n}\n\`\`\`\n\nI've applied this fix. Let me know if you want me to add error handling elsewhere.`;
70
+ }
71
+ if (lower.includes('help') || lower.includes('what')) {
72
+ return `I can help you with this feature! Here's what I can do:\n\n1. **Run tests** and analyze coverage\n2. **Fix bugs** by tracing through the code\n3. **Implement features** following the project's patterns\n4. **Review code** for quality and security issues\n\n> Just describe what you need and I'll get started.\n\nFor example, try saying:\n- "Run the auth module tests"\n- "Fix the database connection timeout"\n- "Add input validation to the API endpoint"`;
73
+ }
74
+ return `I understand your request. Let me analyze the codebase and work on this.\n\nLooking at the relevant files:\n- \`src/handlers/main.ts\` — entry point\n- \`src/services/core.ts\` — business logic\n- \`src/utils/helpers.ts\` — shared utilities\n\nI'll make the necessary changes and let you know when it's ready. This should take just a moment.`;
75
+ }
76
+ // ── Storybook meta ──────────────────────────────────────────────────────────
77
+ /**
78
+ * Wrapper component for stories — accepts props that configure the mock.
79
+ */
80
+ function ChatStory({ initialMessages = [], simulateStreaming = true, }) {
81
+ return (_jsx(MockChatProvider, { initialMessages: initialMessages, simulateStreaming: simulateStreaming, children: _jsx(Thread, {}) }));
82
+ }
83
+ const meta = {
84
+ title: 'Features/Chat/ChatTab',
85
+ component: ChatStory,
86
+ tags: ['autodocs'],
87
+ parameters: {
88
+ layout: 'fullscreen',
89
+ },
90
+ decorators: [
91
+ (Story) => (_jsx("div", { style: {
92
+ height: '600px',
93
+ maxWidth: '640px',
94
+ margin: '0 auto',
95
+ border: '1px solid #e5e7eb',
96
+ }, children: _jsx(Story, {}) })),
97
+ ],
98
+ };
99
+ export default meta;
100
+ /** Empty state — no messages, prompt always visible. Type a message to chat. */
101
+ export const Empty = {
102
+ args: {
103
+ initialMessages: [],
104
+ simulateStreaming: true,
105
+ },
106
+ };
107
+ /** Pre-populated conversation with code blocks, markdown, and multiple turns. */
108
+ export const WithHistory = {
109
+ args: {
110
+ initialMessages: [
111
+ {
112
+ id: 'msg-1',
113
+ role: 'user',
114
+ content: [
115
+ { type: 'text', text: 'Can you check the test coverage for the auth module?' },
116
+ ],
117
+ createdAt: new Date(Date.now() - 300000),
118
+ },
119
+ {
120
+ id: 'msg-2',
121
+ role: 'assistant',
122
+ content: [
123
+ {
124
+ type: 'text',
125
+ text: '## Test Results\n\nI ran the test suite and here are the results:\n\n- **42 tests passed**\n- **0 tests failed**\n- **Coverage: 87%**\n\nThe main gaps are in:\n1. OAuth callback handler (3 uncovered branches)\n2. Token refresh logic (missing edge case)\n\n```typescript\ndescribe("auth", () => {\n it("should refresh token", async () => {\n const token = await refreshToken("expired");\n expect(token).toBeDefined();\n });\n});\n```\n\nWant me to write the missing tests?',
126
+ },
127
+ ],
128
+ createdAt: new Date(Date.now() - 240000),
129
+ },
130
+ {
131
+ id: 'msg-3',
132
+ role: 'user',
133
+ content: [{ type: 'text', text: 'Yes, please write the missing tests' }],
134
+ createdAt: new Date(Date.now() - 180000),
135
+ },
136
+ {
137
+ id: 'msg-4',
138
+ role: 'assistant',
139
+ content: [
140
+ {
141
+ type: 'text',
142
+ text: 'I\'ve added the missing tests:\n\n```typescript\ndescribe("OAuth callback", () => {\n it("should handle expired state parameter", async () => {\n const result = await handleCallback({ state: "expired" });\n expect(result.error).toBe("invalid_state");\n });\n\n it("should handle missing code parameter", async () => {\n const result = await handleCallback({ state: "valid" });\n expect(result.error).toBe("missing_code");\n });\n\n it("should handle provider timeout", async () => {\n jest.spyOn(provider, "exchange").mockRejectedValue(new Error("timeout"));\n const result = await handleCallback({ state: "valid", code: "abc" });\n expect(result.error).toBe("provider_error");\n });\n});\n```\n\nCoverage is now at **94%**. The remaining 6% is defensive error handling that\'s hard to trigger in tests.',
143
+ },
144
+ ],
145
+ createdAt: new Date(Date.now() - 120000),
146
+ },
147
+ ],
148
+ simulateStreaming: true,
149
+ },
150
+ };
151
+ /** Agent auto-boot message — shown when agent starts on first message. */
152
+ export const AutoBoot = {
153
+ args: {
154
+ initialMessages: [
155
+ {
156
+ id: 'status-boot',
157
+ role: 'assistant',
158
+ content: [{ type: 'text', text: 'Agent is waking up...' }],
159
+ createdAt: new Date(),
160
+ },
161
+ ],
162
+ simulateStreaming: true,
163
+ },
164
+ };
165
+ /** Rich markdown — headers, bold, lists, blockquotes, links, inline code. */
166
+ export const RichMarkdown = {
167
+ args: {
168
+ initialMessages: [
169
+ {
170
+ id: 'msg-1',
171
+ role: 'user',
172
+ content: [{ type: 'text', text: 'What can you help me with?' }],
173
+ createdAt: new Date(Date.now() - 60000),
174
+ },
175
+ {
176
+ id: 'msg-2',
177
+ role: 'assistant',
178
+ content: [
179
+ {
180
+ type: 'text',
181
+ text: 'I can help you with this feature! Here\'s what I can do:\n\n1. **Run tests** and analyze coverage\n2. **Fix bugs** by tracing through the code\n3. **Implement features** following the project\'s patterns\n4. **Review code** for quality and security issues\n\n> Just describe what you need and I\'ll get started.\n\nFor example, try saying:\n- "Run the auth module tests"\n- "Fix the database connection timeout"\n- "Add input validation to the API endpoint"',
182
+ },
183
+ ],
184
+ createdAt: new Date(Date.now() - 55000),
185
+ },
186
+ {
187
+ id: 'msg-3',
188
+ role: 'user',
189
+ content: [
190
+ {
191
+ type: 'text',
192
+ text: 'Fix the database connection timeout bug. The CI logs show it fails after 30 seconds but only on the CI runner, not locally.',
193
+ },
194
+ ],
195
+ createdAt: new Date(Date.now() - 50000),
196
+ },
197
+ {
198
+ id: 'msg-4',
199
+ role: 'assistant',
200
+ content: [
201
+ {
202
+ type: 'text',
203
+ text: 'I found the issue. The problem is in the `handleRequest` function where the error boundary doesn\'t catch async rejections.\n\n**Root cause:** The `try/catch` block wraps synchronous code, but the database query is awaited outside of it.\n\n**Fix:**\n```typescript\nasync function handleRequest(req: Request) {\n try {\n const result = await db.query(req.params.id);\n return Response.json(result);\n } catch (error) {\n logger.error("Request failed", { error });\n return Response.json({ error: "Internal error" }, { status: 500 });\n }\n}\n```\n\nI\'ve applied this fix. Let me know if you want me to add error handling elsewhere.',
204
+ },
205
+ ],
206
+ createdAt: new Date(Date.now() - 40000),
207
+ },
208
+ ],
209
+ simulateStreaming: true,
210
+ },
211
+ };
212
+ /** Long conversation — many messages to test scrolling behavior. */
213
+ export const LongConversation = {
214
+ args: {
215
+ initialMessages: Array.from({ length: 12 }, (_, i) => ({
216
+ id: `msg-${i}`,
217
+ role: (i % 2 === 0 ? 'user' : 'assistant'),
218
+ content: [
219
+ {
220
+ type: 'text',
221
+ text: i % 2 === 0
222
+ ? `This is user message #${Math.floor(i / 2) + 1}. I'm asking about various aspects of the codebase.`
223
+ : `Here's my response to your question #${Math.floor(i / 2) + 1}. I've analyzed the code and found some interesting patterns.\n\nThe key insight is that the **architecture follows clean separation** of concerns, which makes it easy to test and maintain.\n\n\`\`\`typescript\nconst result = await service.process(input);\nconsole.log(result.status);\n\`\`\``,
224
+ },
225
+ ],
226
+ createdAt: new Date(Date.now() - (12 - i) * 30000),
227
+ })),
228
+ simulateStreaming: true,
229
+ },
230
+ };
231
+ /** Non-streaming mode — response appears all at once after delay. */
232
+ export const NonStreaming = {
233
+ args: {
234
+ initialMessages: [],
235
+ simulateStreaming: false,
236
+ },
237
+ };
@@ -0,0 +1,34 @@
1
+ interface SessionInfo {
2
+ pid: number | null;
3
+ sessionId: string | null;
4
+ model: string | null;
5
+ startedAt: string;
6
+ idleTimeoutMinutes: number;
7
+ lastActivityAt: string;
8
+ }
9
+ export interface ChatStatus {
10
+ /** Whether the agent is actively working (booting, thinking, streaming). */
11
+ isRunning: boolean;
12
+ /** Human-readable status text (e.g. "Agent is waking up...", "Using tool: Read"). */
13
+ statusText: string | null;
14
+ }
15
+ export interface ChatRuntimeOptions {
16
+ /** Transform message content before sending (e.g. append attachment refs). */
17
+ contentTransform?: (content: string) => string;
18
+ /** Called after a message is successfully sent (e.g. clear attachments). */
19
+ onMessageSent?: () => void;
20
+ }
21
+ /**
22
+ * `featureId` is a polymorphic scope key: a feature UUID, "repo-<id>", or "global".
23
+ * All API calls and SSE subscriptions are scoped to this key.
24
+ */
25
+ export declare function useChatRuntime(featureId: string, worktreePath?: string, options?: ChatRuntimeOptions): {
26
+ runtime: import("@assistant-ui/react").AssistantRuntime;
27
+ status: ChatStatus;
28
+ clearChat: () => Promise<void>;
29
+ stopAgent: () => Promise<void>;
30
+ sessionInfo: SessionInfo | null;
31
+ isChatLoading: boolean;
32
+ };
33
+ export {};
34
+ //# sourceMappingURL=useChatRuntime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useChatRuntime.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/chat/useChatRuntime.ts"],"names":[],"mappings":"AAiBA,UAAU,WAAW;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB;AAgDD,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,SAAS,EAAE,OAAO,CAAC;IACnB,qFAAqF;IACrF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAID,MAAM,WAAW,kBAAkB;IACjC,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/C,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,kBAAkB;;;;;;;EA0P7B"}
@@ -0,0 +1,266 @@
1
+ 'use client';
2
+ import { useState, useEffect, useRef, useCallback, useMemo } from 'react';
3
+ import { useExternalStoreRuntime } from '@assistant-ui/react';
4
+ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
5
+ import { InteractiveMessageRole } from '../../../../../../packages/core/src/domain/generated/output.js';
6
+ // ── API helpers ─────────────────────────────────────────────────────────────
7
+ async function fetchChatState(featureId) {
8
+ const res = await fetch(`/api/interactive/chat/${featureId}/messages`);
9
+ if (!res.ok) {
10
+ // eslint-disable-next-line no-console
11
+ console.error(`[ChatState] fetch failed: ${res.status}`, await res.text().catch(() => ''));
12
+ throw new Error(`Failed to fetch chat state: ${res.status}`);
13
+ }
14
+ return res.json();
15
+ }
16
+ async function postMessage(featureId, content, worktreePath) {
17
+ const res = await fetch(`/api/interactive/chat/${featureId}/messages`, {
18
+ method: 'POST',
19
+ headers: { 'Content-Type': 'application/json' },
20
+ body: JSON.stringify({ content, worktreePath }),
21
+ });
22
+ if (!res.ok)
23
+ throw new Error(`Failed to send message: ${res.status}`);
24
+ const data = (await res.json());
25
+ return data.message;
26
+ }
27
+ // ── Convert domain message to assistant-ui format ───────────────────────────
28
+ function toThreadMessage(msg) {
29
+ return {
30
+ id: msg.id,
31
+ role: msg.role === InteractiveMessageRole.user ? 'user' : 'assistant',
32
+ content: [{ type: 'text', text: msg.content }],
33
+ createdAt: msg.createdAt ? new Date(msg.createdAt) : undefined,
34
+ };
35
+ }
36
+ // ── Query key ───────────────────────────────────────────────────────────────
37
+ function chatQueryKey(featureId) {
38
+ return ['chat-messages', featureId];
39
+ }
40
+ /**
41
+ * `featureId` is a polymorphic scope key: a feature UUID, "repo-<id>", or "global".
42
+ * All API calls and SSE subscriptions are scoped to this key.
43
+ */
44
+ export function useChatRuntime(featureId, worktreePath, options) {
45
+ const queryClient = useQueryClient();
46
+ // ── TanStack Query: fetch messages from backend ─────────────────────────
47
+ const { data: chatState, isLoading: isChatLoading } = useQuery({
48
+ queryKey: chatQueryKey(featureId),
49
+ queryFn: () => fetchChatState(featureId),
50
+ refetchInterval: 3000, // Fallback polling every 3s
51
+ });
52
+ const messages = useMemo(() => chatState?.messages ?? [], [chatState?.messages]);
53
+ const sessionStatus = chatState?.sessionStatus ?? null;
54
+ const backendStreamingText = chatState?.streamingText ?? null;
55
+ // Cache last known sessionInfo so PID stays visible after process exits
56
+ const lastSessionInfoRef = useRef(null);
57
+ if (chatState?.sessionInfo) {
58
+ lastSessionInfoRef.current = chatState.sessionInfo;
59
+ }
60
+ const sessionInfo = chatState?.sessionInfo ?? lastSessionInfoRef.current;
61
+ // ── SSE: real-time streaming deltas ─────────────────────────────────────
62
+ const [streamingText, setStreamingText] = useState('');
63
+ const [statusLog, setStatusLog] = useState(null);
64
+ const [awaitingResponse, setAwaitingResponse] = useState(false);
65
+ const awaitingTimerRef = useRef(null);
66
+ const eventSourceRef = useRef(null);
67
+ // Delayed awaiting — only show Thinking bubble after 600ms to avoid flash
68
+ const startAwaiting = useCallback(() => {
69
+ if (awaitingTimerRef.current)
70
+ clearTimeout(awaitingTimerRef.current);
71
+ awaitingTimerRef.current = setTimeout(() => setAwaitingResponse(true), 600);
72
+ }, []);
73
+ const cancelAwaiting = useCallback(() => {
74
+ if (awaitingTimerRef.current) {
75
+ clearTimeout(awaitingTimerRef.current);
76
+ awaitingTimerRef.current = null;
77
+ }
78
+ setAwaitingResponse(false);
79
+ }, []);
80
+ // Clear awaitingResponse when backend delivers a new assistant message
81
+ const lastMsgRole = messages.length > 0 ? messages[messages.length - 1].role : null;
82
+ useEffect(() => {
83
+ if (lastMsgRole === InteractiveMessageRole.assistant) {
84
+ cancelAwaiting();
85
+ }
86
+ }, [lastMsgRole, messages.length, cancelAwaiting]);
87
+ useEffect(() => {
88
+ const es = new EventSource(`/api/interactive/chat/${featureId}/stream`);
89
+ eventSourceRef.current = es;
90
+ es.addEventListener('delta', (event) => {
91
+ try {
92
+ const data = JSON.parse(event.data);
93
+ if (data.delta) {
94
+ cancelAwaiting();
95
+ setStreamingText((prev) => prev + data.delta);
96
+ setStatusLog(null);
97
+ }
98
+ }
99
+ catch {
100
+ // Ignore
101
+ }
102
+ });
103
+ es.addEventListener('activity', () => {
104
+ cancelAwaiting();
105
+ // Tool events are already persisted to DB — just refetch to show them
106
+ void queryClient.invalidateQueries({ queryKey: chatQueryKey(featureId) });
107
+ });
108
+ es.addEventListener('log', (event) => {
109
+ try {
110
+ const data = JSON.parse(event.data);
111
+ if (data.log) {
112
+ cancelAwaiting();
113
+ setStatusLog(data.log);
114
+ }
115
+ }
116
+ catch {
117
+ // Ignore
118
+ }
119
+ });
120
+ es.addEventListener('done', () => {
121
+ setStatusLog(null);
122
+ cancelAwaiting();
123
+ // Refetch first, THEN clear local streaming state so there's no gap
124
+ void queryClient.invalidateQueries({ queryKey: chatQueryKey(featureId) }).then(() => {
125
+ setStreamingText('');
126
+ });
127
+ });
128
+ es.onerror = () => {
129
+ // SSE dropped — the 3s polling handles reliability
130
+ };
131
+ return () => {
132
+ es.close();
133
+ eventSourceRef.current = null;
134
+ };
135
+ }, [featureId, queryClient, cancelAwaiting]);
136
+ // ── Mutation: send user message ─────────────────────────────────────────
137
+ const sendMutation = useMutation({
138
+ mutationFn: (content) => postMessage(featureId, content, worktreePath ?? ''),
139
+ onMutate: async (content) => {
140
+ startAwaiting();
141
+ // Cancel in-flight refetches so our optimistic update isn't overwritten
142
+ await queryClient.cancelQueries({ queryKey: chatQueryKey(featureId) });
143
+ const previous = queryClient.getQueryData(chatQueryKey(featureId));
144
+ // Optimistically add user message
145
+ queryClient.setQueryData(chatQueryKey(featureId), (old) => ({
146
+ messages: [
147
+ ...(old?.messages ?? []),
148
+ {
149
+ id: `optimistic-${Date.now()}`,
150
+ featureId,
151
+ role: InteractiveMessageRole.user,
152
+ content,
153
+ createdAt: new Date(),
154
+ updatedAt: new Date(),
155
+ },
156
+ ],
157
+ sessionStatus: old?.sessionStatus ?? 'booting',
158
+ streamingText: null,
159
+ sessionInfo: old?.sessionInfo ?? null,
160
+ }));
161
+ return { previous };
162
+ },
163
+ onError: (_err, _content, context) => {
164
+ // Rollback on error
165
+ if (context?.previous) {
166
+ queryClient.setQueryData(chatQueryKey(featureId), context.previous);
167
+ }
168
+ },
169
+ onSettled: () => {
170
+ // Refetch to reconcile optimistic data with server
171
+ void queryClient.invalidateQueries({ queryKey: chatQueryKey(featureId) });
172
+ },
173
+ });
174
+ // ── Derive running state ────────────────────────────────────────────────
175
+ // Note: sendMutation.isPending is excluded — the 600ms awaitingResponse
176
+ // timer provides a smooth transition without flicker.
177
+ const isRunning = awaitingResponse || !!streamingText || !!statusLog || sessionStatus === 'booting';
178
+ // ── Build thread messages for assistant-ui ─────────────────────────────
179
+ const activeStreamText = streamingText ?? backendStreamingText ?? '';
180
+ const threadMessages = useMemo(() => {
181
+ const result = messages.map(toThreadMessage);
182
+ // Streaming text as the last message — may include a live activity suffix
183
+ if (activeStreamText.trim()) {
184
+ const parts = [{ type: 'text', text: activeStreamText }];
185
+ // Append live activity indicator when agent is doing tool work
186
+ if (statusLog) {
187
+ parts.push({ type: 'text', text: `*⏳ ${statusLog}*` });
188
+ }
189
+ result.push({ id: 'streaming', role: 'assistant', content: parts });
190
+ }
191
+ else if (statusLog) {
192
+ // No streaming text yet but agent is actively working (tool calls, etc.)
193
+ result.push({
194
+ id: 'streaming',
195
+ role: 'assistant',
196
+ content: [{ type: 'text', text: `*⏳ ${statusLog}*` }],
197
+ });
198
+ }
199
+ else if (awaitingResponse || sessionStatus === 'booting') {
200
+ // Note: sendMutation.isPending is NOT included here — the 600ms
201
+ // delay via startAwaiting() prevents flash on fast responses.
202
+ result.push({
203
+ id: 'streaming',
204
+ role: 'assistant',
205
+ content: [
206
+ {
207
+ type: 'text',
208
+ text: sessionStatus === 'booting' ? '*Agent is waking up...*' : '*Thinking...*',
209
+ },
210
+ ],
211
+ });
212
+ }
213
+ return result;
214
+ }, [messages, activeStreamText, awaitingResponse, sessionStatus, statusLog]);
215
+ // ── Status info for typing indicator ──────────────────────────────────
216
+ const status = useMemo(() => {
217
+ if (!isRunning)
218
+ return { isRunning: false, statusText: null };
219
+ return { isRunning: true, statusText: statusLog };
220
+ }, [isRunning, statusLog]);
221
+ // ── onNew: called by assistant-ui when user submits ─────────────────────
222
+ const onNew = useCallback(async (message) => {
223
+ const textPart = message.content.find((c) => c.type === 'text');
224
+ if (textPart?.type !== 'text' || !textPart.text.trim())
225
+ return;
226
+ const content = options?.contentTransform
227
+ ? options.contentTransform(textPart.text)
228
+ : textPart.text;
229
+ sendMutation.mutate(content, {
230
+ onSuccess: () => options?.onMessageSent?.(),
231
+ });
232
+ }, [sendMutation, options]);
233
+ // ── Clear chat ─────────────────────────────────────────────────────────
234
+ const clearChat = useCallback(async () => {
235
+ const res = await fetch(`/api/interactive/chat/${featureId}/messages`, { method: 'DELETE' });
236
+ if (!res.ok)
237
+ throw new Error(`Failed to clear chat: ${res.status}`);
238
+ setStreamingText('');
239
+ setStatusLog(null);
240
+ cancelAwaiting();
241
+ void queryClient.invalidateQueries({ queryKey: chatQueryKey(featureId) });
242
+ }, [featureId, queryClient, cancelAwaiting]);
243
+ // ── Stop agent ────────────────────────────────────────────────────────
244
+ const stopAgent = useCallback(async () => {
245
+ const res = await fetch(`/api/interactive/chat/${featureId}/stop`, { method: 'POST' });
246
+ if (!res.ok)
247
+ throw new Error(`Failed to stop agent: ${res.status}`);
248
+ setStreamingText('');
249
+ setStatusLog(null);
250
+ cancelAwaiting();
251
+ void queryClient.invalidateQueries({ queryKey: chatQueryKey(featureId) });
252
+ }, [featureId, queryClient, cancelAwaiting]);
253
+ // ── Build assistant-ui runtime ──────────────────────────────────────────
254
+ const runtime = useExternalStoreRuntime({
255
+ messages: threadMessages,
256
+ convertMessage: useCallback((msg) => msg, []),
257
+ isRunning,
258
+ onNew,
259
+ onCancel: useCallback(async () => {
260
+ setStreamingText('');
261
+ setStatusLog(null);
262
+ cancelAwaiting();
263
+ }, [cancelAwaiting]),
264
+ });
265
+ return { runtime, status, clearChat, stopAgent, sessionInfo, isChatLoading };
266
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"control-center-inner.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-inner.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,eAAe,CAAC;AAKpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAwB5E,UAAU,uBAAuB;IAC/B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,YAAY,EAAE,IAAI,EAAE,CAAC;CACtB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,uBAAuB,2CA0ZzF"}
1
+ {"version":3,"file":"control-center-inner.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-inner.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,eAAe,CAAC;AAIpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAwB5E,UAAU,uBAAuB;IAC/B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,YAAY,EAAE,IAAI,EAAE,CAAC;CACtB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,uBAAuB,2CAmZzF"}