vibepulse 0.1.12 → 0.2.0

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 (336) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +4 -0
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/cache/.previewinfo +1 -1
  5. package/.next/cache/.rscinfo +1 -1
  6. package/.next/cache/.tsbuildinfo +1 -1
  7. package/.next/cache/config.json +3 -3
  8. package/.next/fallback-build-manifest.json +2 -2
  9. package/.next/prerender-manifest.json +3 -3
  10. package/.next/routes-manifest.json +24 -0
  11. package/.next/server/app/_global-error/page.js +1 -1
  12. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  13. package/.next/server/app/_global-error.html +2 -2
  14. package/.next/server/app/_global-error.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  17. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  18. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  19. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  20. package/.next/server/app/_not-found/page.js +1 -1
  21. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  22. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  23. package/.next/server/app/_not-found.html +1 -1
  24. package/.next/server/app/_not-found.rsc +2 -2
  25. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  26. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  27. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  28. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  29. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  30. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  31. package/.next/server/app/api/node/events/route/app-paths-manifest.json +3 -0
  32. package/.next/server/app/api/node/events/route/build-manifest.json +11 -0
  33. package/.next/server/app/api/node/events/route/server-reference-manifest.json +4 -0
  34. package/.next/server/app/api/node/events/route.js +7 -0
  35. package/.next/server/app/api/node/events/route.js.map +5 -0
  36. package/.next/server/app/api/node/events/route.js.nft.json +1 -0
  37. package/.next/server/app/api/node/events/route_client-reference-manifest.js +2 -0
  38. package/.next/server/app/api/node/health/route/app-paths-manifest.json +3 -0
  39. package/.next/server/app/api/node/health/route/build-manifest.json +11 -0
  40. package/.next/server/app/api/node/health/route/server-reference-manifest.json +4 -0
  41. package/.next/server/app/api/node/health/route.js +6 -0
  42. package/.next/server/app/api/node/health/route.js.map +5 -0
  43. package/.next/server/app/api/node/health/route.js.nft.json +1 -0
  44. package/.next/server/app/api/node/health/route_client-reference-manifest.js +2 -0
  45. package/.next/server/app/api/node/sessions/route/app-paths-manifest.json +3 -0
  46. package/.next/server/app/api/node/sessions/route/build-manifest.json +11 -0
  47. package/.next/server/app/api/node/sessions/route/server-reference-manifest.json +4 -0
  48. package/.next/server/app/api/node/sessions/route.js +9 -0
  49. package/.next/server/app/api/node/sessions/route.js.map +5 -0
  50. package/.next/server/app/api/node/sessions/route.js.nft.json +1 -0
  51. package/.next/server/app/api/node/sessions/route_client-reference-manifest.js +2 -0
  52. package/.next/server/app/api/nodes/route/app-paths-manifest.json +3 -0
  53. package/.next/server/app/api/nodes/route/build-manifest.json +11 -0
  54. package/.next/server/app/api/nodes/route/server-reference-manifest.json +4 -0
  55. package/.next/server/app/api/nodes/route.js +8 -0
  56. package/.next/server/app/api/nodes/route.js.map +5 -0
  57. package/.next/server/app/api/nodes/route.js.nft.json +1 -0
  58. package/.next/server/app/api/nodes/route_client-reference-manifest.js +2 -0
  59. package/.next/server/app/api/opencode-config/route.js +1 -1
  60. package/.next/server/app/api/opencode-config/route.js.nft.json +1 -1
  61. package/.next/server/app/api/opencode-config/status/route.js +1 -1
  62. package/.next/server/app/api/opencode-config/status/route.js.nft.json +1 -1
  63. package/.next/server/app/api/opencode-events/route.js +4 -2
  64. package/.next/server/app/api/opencode-events/route.js.nft.json +1 -1
  65. package/.next/server/app/api/profiles/[id]/apply/route.js +1 -1
  66. package/.next/server/app/api/profiles/[id]/apply/route.js.nft.json +1 -1
  67. package/.next/server/app/api/profiles/[id]/export/route.js +2 -2
  68. package/.next/server/app/api/profiles/[id]/export/route.js.nft.json +1 -1
  69. package/.next/server/app/api/profiles/[id]/route.js +2 -2
  70. package/.next/server/app/api/profiles/[id]/route.js.nft.json +1 -1
  71. package/.next/server/app/api/profiles/import/route.js +2 -2
  72. package/.next/server/app/api/profiles/import/route.js.nft.json +1 -1
  73. package/.next/server/app/api/profiles/route.js +2 -2
  74. package/.next/server/app/api/profiles/route.js.nft.json +1 -1
  75. package/.next/server/app/api/sessions/[id]/archive/route.js +1 -1
  76. package/.next/server/app/api/sessions/[id]/archive/route.js.nft.json +1 -1
  77. package/.next/server/app/api/sessions/[id]/delete/route.js +1 -1
  78. package/.next/server/app/api/sessions/[id]/delete/route.js.nft.json +1 -1
  79. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  80. package/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  81. package/.next/server/app/api/sessions/route.js +3 -3
  82. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  83. package/.next/server/app/favicon.ico/route.js +1 -1
  84. package/.next/server/app/favicon.ico/route.js.nft.json +1 -1
  85. package/.next/server/app/index.html +1 -1
  86. package/.next/server/app/index.rsc +3 -3
  87. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  88. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  89. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  90. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  91. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  92. package/.next/server/app/page.js +1 -1
  93. package/.next/server/app/page.js.nft.json +1 -1
  94. package/.next/server/app/page_client-reference-manifest.js +1 -1
  95. package/.next/server/app-paths-manifest.json +4 -0
  96. package/.next/server/chunks/{[root-of-the-server]__172a07b6._.js → [externals]_next_dist_84e7390b._.js} +2 -2
  97. package/.next/server/chunks/[root-of-the-server]__0b017945._.js +3 -0
  98. package/.next/server/chunks/[root-of-the-server]__0b017945._.js.map +1 -0
  99. package/.next/server/chunks/[root-of-the-server]__16a9eb0a._.js +5 -0
  100. package/.next/server/chunks/[root-of-the-server]__16a9eb0a._.js.map +1 -0
  101. package/.next/server/chunks/[root-of-the-server]__192ed2f4._.js +3 -0
  102. package/.next/server/chunks/[root-of-the-server]__192ed2f4._.js.map +1 -0
  103. package/.next/server/chunks/[root-of-the-server]__1e118bd3._.js +3 -0
  104. package/.next/server/chunks/[root-of-the-server]__1e118bd3._.js.map +1 -0
  105. package/.next/server/chunks/{[externals]_next_dist_16542d6b._.js → [root-of-the-server]__56690af0._.js} +2 -2
  106. package/.next/server/chunks/{[root-of-the-server]__172a07b6._.js.map → [root-of-the-server]__56690af0._.js.map} +1 -1
  107. package/.next/server/chunks/[root-of-the-server]__56f5f249._.js +3 -0
  108. package/.next/server/chunks/[root-of-the-server]__56f5f249._.js.map +1 -0
  109. package/.next/server/chunks/[root-of-the-server]__59175de4._.js +3 -0
  110. package/.next/server/chunks/[root-of-the-server]__59175de4._.js.map +1 -0
  111. package/.next/server/chunks/[root-of-the-server]__64fffc02._.js +3 -0
  112. package/.next/server/chunks/[root-of-the-server]__64fffc02._.js.map +1 -0
  113. package/.next/server/chunks/[root-of-the-server]__6979e732._.js +3 -0
  114. package/.next/server/chunks/[root-of-the-server]__6979e732._.js.map +1 -0
  115. package/.next/server/chunks/[root-of-the-server]__7e757f50._.js +3 -0
  116. package/.next/server/chunks/[root-of-the-server]__7e757f50._.js.map +1 -0
  117. package/.next/server/chunks/[root-of-the-server]__89c5eeab._.js +3 -0
  118. package/.next/server/chunks/[root-of-the-server]__89c5eeab._.js.map +1 -0
  119. package/.next/server/chunks/[root-of-the-server]__8da6c5a8._.js +3 -0
  120. package/.next/server/chunks/[root-of-the-server]__8da6c5a8._.js.map +1 -0
  121. package/.next/server/chunks/[root-of-the-server]__a7b4d79d._.js +3 -0
  122. package/.next/server/chunks/[root-of-the-server]__a7b4d79d._.js.map +1 -0
  123. package/.next/server/chunks/[root-of-the-server]__b698889b._.js +3 -0
  124. package/.next/server/chunks/[root-of-the-server]__b698889b._.js.map +1 -0
  125. package/.next/server/chunks/[root-of-the-server]__b796d06c._.js +3 -0
  126. package/.next/server/chunks/{[root-of-the-server]__2c3e3de2._.js.map → [root-of-the-server]__b796d06c._.js.map} +1 -1
  127. package/.next/server/chunks/[root-of-the-server]__c2ce5c0f._.js +3 -0
  128. package/.next/server/chunks/[root-of-the-server]__c2ce5c0f._.js.map +1 -0
  129. package/.next/server/chunks/[root-of-the-server]__ddc251b7._.js +3 -0
  130. package/.next/server/chunks/[root-of-the-server]__ddc251b7._.js.map +1 -0
  131. package/.next/server/chunks/_next-internal_server_app_api_node_events_route_actions_f1abd32d.js +3 -0
  132. package/.next/server/chunks/_next-internal_server_app_api_node_events_route_actions_f1abd32d.js.map +1 -0
  133. package/.next/server/chunks/_next-internal_server_app_api_node_health_route_actions_c4c4c077.js +3 -0
  134. package/.next/server/chunks/_next-internal_server_app_api_node_health_route_actions_c4c4c077.js.map +1 -0
  135. package/.next/server/chunks/_next-internal_server_app_api_node_sessions_route_actions_6b564c5a.js +3 -0
  136. package/.next/server/chunks/_next-internal_server_app_api_node_sessions_route_actions_6b564c5a.js.map +1 -0
  137. package/.next/server/chunks/_next-internal_server_app_api_nodes_route_actions_3e496ee8.js +3 -0
  138. package/.next/server/chunks/_next-internal_server_app_api_nodes_route_actions_3e496ee8.js.map +1 -0
  139. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_aca45402.js +3 -0
  140. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_aca45402.js.map +1 -0
  141. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_b054aff3.js +1 -1
  142. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_b054aff3.js.map +1 -1
  143. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_fa835ac3.js +5 -0
  144. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_fa835ac3.js.map +1 -0
  145. package/.next/server/chunks/ssr/[root-of-the-server]__b0788643._.js +3 -0
  146. package/.next/server/chunks/ssr/{[root-of-the-server]__39eef6a5._.js → [root-of-the-server]__efc52f08._.js} +2 -2
  147. package/.next/server/chunks/ssr/src_app_page_tsx_a7111f3e._.js +3 -3
  148. package/.next/server/chunks/ssr/src_app_page_tsx_a7111f3e._.js.map +1 -1
  149. package/.next/server/pages/404.html +1 -1
  150. package/.next/server/pages/500.html +2 -2
  151. package/.next/server/server-reference-manifest.js +1 -1
  152. package/.next/server/server-reference-manifest.json +1 -1
  153. package/.next/standalone/.next/BUILD_ID +1 -1
  154. package/.next/standalone/.next/app-path-routes-manifest.json +4 -0
  155. package/.next/standalone/.next/build-manifest.json +2 -2
  156. package/.next/standalone/.next/prerender-manifest.json +3 -3
  157. package/.next/standalone/.next/routes-manifest.json +24 -0
  158. package/.next/standalone/.next/server/app/_global-error/page.js +1 -1
  159. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  160. package/.next/standalone/.next/server/app/_global-error.html +2 -2
  161. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  162. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  163. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  164. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  165. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  166. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  167. package/.next/standalone/.next/server/app/_not-found/page.js +1 -1
  168. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  169. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  170. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  171. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  172. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  173. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  174. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  175. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  176. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  177. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  178. package/.next/standalone/.next/server/app/api/node/events/route/app-paths-manifest.json +3 -0
  179. package/.next/standalone/.next/server/app/api/node/events/route/build-manifest.json +11 -0
  180. package/.next/standalone/.next/server/app/api/node/events/route/server-reference-manifest.json +4 -0
  181. package/.next/standalone/.next/server/app/api/node/events/route.js +7 -0
  182. package/.next/standalone/.next/server/app/api/node/events/route.js.map +5 -0
  183. package/.next/standalone/.next/server/app/api/node/events/route.js.nft.json +1 -0
  184. package/.next/standalone/.next/server/app/api/node/events/route_client-reference-manifest.js +2 -0
  185. package/.next/standalone/.next/server/app/api/node/health/route/app-paths-manifest.json +3 -0
  186. package/.next/standalone/.next/server/app/api/node/health/route/build-manifest.json +11 -0
  187. package/.next/standalone/.next/server/app/api/node/health/route/server-reference-manifest.json +4 -0
  188. package/.next/standalone/.next/server/app/api/node/health/route.js +6 -0
  189. package/.next/standalone/.next/server/app/api/node/health/route.js.map +5 -0
  190. package/.next/standalone/.next/server/app/api/node/health/route.js.nft.json +1 -0
  191. package/.next/standalone/.next/server/app/api/node/health/route_client-reference-manifest.js +2 -0
  192. package/.next/standalone/.next/server/app/api/node/sessions/route/app-paths-manifest.json +3 -0
  193. package/.next/standalone/.next/server/app/api/node/sessions/route/build-manifest.json +11 -0
  194. package/.next/standalone/.next/server/app/api/node/sessions/route/server-reference-manifest.json +4 -0
  195. package/.next/standalone/.next/server/app/api/node/sessions/route.js +9 -0
  196. package/.next/standalone/.next/server/app/api/node/sessions/route.js.map +5 -0
  197. package/.next/standalone/.next/server/app/api/node/sessions/route.js.nft.json +1 -0
  198. package/.next/standalone/.next/server/app/api/node/sessions/route_client-reference-manifest.js +2 -0
  199. package/.next/standalone/.next/server/app/api/nodes/route/app-paths-manifest.json +3 -0
  200. package/.next/standalone/.next/server/app/api/nodes/route/build-manifest.json +11 -0
  201. package/.next/standalone/.next/server/app/api/nodes/route/server-reference-manifest.json +4 -0
  202. package/.next/standalone/.next/server/app/api/nodes/route.js +8 -0
  203. package/.next/standalone/.next/server/app/api/nodes/route.js.map +5 -0
  204. package/.next/standalone/.next/server/app/api/nodes/route.js.nft.json +1 -0
  205. package/.next/standalone/.next/server/app/api/nodes/route_client-reference-manifest.js +2 -0
  206. package/.next/standalone/.next/server/app/api/opencode-config/route.js +1 -1
  207. package/.next/standalone/.next/server/app/api/opencode-config/route.js.nft.json +1 -1
  208. package/.next/standalone/.next/server/app/api/opencode-config/status/route.js +1 -1
  209. package/.next/standalone/.next/server/app/api/opencode-config/status/route.js.nft.json +1 -1
  210. package/.next/standalone/.next/server/app/api/opencode-events/route.js +4 -2
  211. package/.next/standalone/.next/server/app/api/opencode-events/route.js.nft.json +1 -1
  212. package/.next/standalone/.next/server/app/api/profiles/[id]/apply/route.js +1 -1
  213. package/.next/standalone/.next/server/app/api/profiles/[id]/apply/route.js.nft.json +1 -1
  214. package/.next/standalone/.next/server/app/api/profiles/[id]/export/route.js +2 -2
  215. package/.next/standalone/.next/server/app/api/profiles/[id]/export/route.js.nft.json +1 -1
  216. package/.next/standalone/.next/server/app/api/profiles/[id]/route.js +2 -2
  217. package/.next/standalone/.next/server/app/api/profiles/[id]/route.js.nft.json +1 -1
  218. package/.next/standalone/.next/server/app/api/profiles/import/route.js +2 -2
  219. package/.next/standalone/.next/server/app/api/profiles/import/route.js.nft.json +1 -1
  220. package/.next/standalone/.next/server/app/api/profiles/route.js +2 -2
  221. package/.next/standalone/.next/server/app/api/profiles/route.js.nft.json +1 -1
  222. package/.next/standalone/.next/server/app/api/sessions/[id]/archive/route.js +1 -1
  223. package/.next/standalone/.next/server/app/api/sessions/[id]/archive/route.js.nft.json +1 -1
  224. package/.next/standalone/.next/server/app/api/sessions/[id]/delete/route.js +1 -1
  225. package/.next/standalone/.next/server/app/api/sessions/[id]/delete/route.js.nft.json +1 -1
  226. package/.next/standalone/.next/server/app/api/sessions/[id]/route.js +1 -1
  227. package/.next/standalone/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  228. package/.next/standalone/.next/server/app/api/sessions/route.js +3 -3
  229. package/.next/standalone/.next/server/app/api/sessions/route.js.nft.json +1 -1
  230. package/.next/standalone/.next/server/app/favicon.ico/route.js +1 -1
  231. package/.next/standalone/.next/server/app/favicon.ico/route.js.nft.json +1 -1
  232. package/.next/standalone/.next/server/app/index.html +1 -1
  233. package/.next/standalone/.next/server/app/index.rsc +3 -3
  234. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  235. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
  236. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  237. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  238. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  239. package/.next/standalone/.next/server/app/page.js +1 -1
  240. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  241. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  242. package/.next/standalone/.next/server/app-paths-manifest.json +4 -0
  243. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__172a07b6._.js → [externals]_next_dist_84e7390b._.js} +2 -2
  244. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0b017945._.js +3 -0
  245. package/.next/standalone/.next/server/chunks/[root-of-the-server]__16a9eb0a._.js +5 -0
  246. package/.next/standalone/.next/server/chunks/[root-of-the-server]__192ed2f4._.js +3 -0
  247. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1e118bd3._.js +3 -0
  248. package/.next/standalone/.next/server/chunks/{[externals]_next_dist_16542d6b._.js → [root-of-the-server]__56690af0._.js} +2 -2
  249. package/.next/standalone/.next/server/chunks/[root-of-the-server]__56f5f249._.js +3 -0
  250. package/.next/standalone/.next/server/chunks/[root-of-the-server]__59175de4._.js +3 -0
  251. package/.next/standalone/.next/server/chunks/[root-of-the-server]__64fffc02._.js +3 -0
  252. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6979e732._.js +3 -0
  253. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7e757f50._.js +3 -0
  254. package/.next/standalone/.next/server/chunks/[root-of-the-server]__89c5eeab._.js +3 -0
  255. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8da6c5a8._.js +3 -0
  256. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a7b4d79d._.js +3 -0
  257. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b698889b._.js +3 -0
  258. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b796d06c._.js +3 -0
  259. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c2ce5c0f._.js +3 -0
  260. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ddc251b7._.js +3 -0
  261. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_node_events_route_actions_f1abd32d.js +3 -0
  262. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_node_health_route_actions_c4c4c077.js +3 -0
  263. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_node_sessions_route_actions_6b564c5a.js +3 -0
  264. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_nodes_route_actions_3e496ee8.js +3 -0
  265. package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_aca45402.js +3 -0
  266. package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_b054aff3.js +1 -1
  267. package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_fa835ac3.js +5 -0
  268. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__b0788643._.js +3 -0
  269. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__39eef6a5._.js → [root-of-the-server]__efc52f08._.js} +2 -2
  270. package/.next/standalone/.next/server/chunks/ssr/src_app_page_tsx_a7111f3e._.js +3 -3
  271. package/.next/standalone/.next/server/pages/404.html +1 -1
  272. package/.next/standalone/.next/server/pages/500.html +2 -2
  273. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  274. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  275. package/.next/standalone/.next/static/chunks/9f8c22002e7395e8.js +13 -0
  276. package/.next/standalone/.next/static/chunks/f1b55db60e7ed6f3.css +3 -0
  277. package/.next/standalone/package.json +4 -2
  278. package/.next/standalone/public/readme-cover.png +0 -0
  279. package/.next/static/chunks/9f8c22002e7395e8.js +13 -0
  280. package/.next/static/chunks/f1b55db60e7ed6f3.css +3 -0
  281. package/.next/trace +1 -1
  282. package/.next/trace-build +1 -1
  283. package/.next/types/routes.d.ts +5 -1
  284. package/.next/types/validator.ts +36 -0
  285. package/README.md +28 -11
  286. package/bin/dev-runtime.js +58 -0
  287. package/bin/vibepulse.js +72 -39
  288. package/package.json +4 -2
  289. package/public/readme-cover.png +0 -0
  290. package/.next/server/chunks/[root-of-the-server]__07488412._.js +0 -3
  291. package/.next/server/chunks/[root-of-the-server]__07488412._.js.map +0 -1
  292. package/.next/server/chunks/[root-of-the-server]__07649a30._.js +0 -3
  293. package/.next/server/chunks/[root-of-the-server]__07649a30._.js.map +0 -1
  294. package/.next/server/chunks/[root-of-the-server]__1bf88ae0._.js +0 -3
  295. package/.next/server/chunks/[root-of-the-server]__1bf88ae0._.js.map +0 -1
  296. package/.next/server/chunks/[root-of-the-server]__2c3e3de2._.js +0 -3
  297. package/.next/server/chunks/[root-of-the-server]__560e7c61._.js +0 -3
  298. package/.next/server/chunks/[root-of-the-server]__560e7c61._.js.map +0 -1
  299. package/.next/server/chunks/[root-of-the-server]__9f034d03._.js +0 -5
  300. package/.next/server/chunks/[root-of-the-server]__9f034d03._.js.map +0 -1
  301. package/.next/server/chunks/[root-of-the-server]__a84faf4b._.js +0 -3
  302. package/.next/server/chunks/[root-of-the-server]__a84faf4b._.js.map +0 -1
  303. package/.next/server/chunks/[root-of-the-server]__b92251ea._.js +0 -3
  304. package/.next/server/chunks/[root-of-the-server]__b92251ea._.js.map +0 -1
  305. package/.next/server/chunks/[root-of-the-server]__e7a766a0._.js +0 -3
  306. package/.next/server/chunks/[root-of-the-server]__e7a766a0._.js.map +0 -1
  307. package/.next/server/chunks/[root-of-the-server]__f234882e._.js +0 -3
  308. package/.next/server/chunks/[root-of-the-server]__f234882e._.js.map +0 -1
  309. package/.next/server/chunks/[root-of-the-server]__f85221b8._.js +0 -3
  310. package/.next/server/chunks/[root-of-the-server]__f85221b8._.js.map +0 -1
  311. package/.next/server/chunks/ssr/[root-of-the-server]__535a2208._.js +0 -3
  312. package/.next/standalone/.next/server/chunks/[root-of-the-server]__07488412._.js +0 -3
  313. package/.next/standalone/.next/server/chunks/[root-of-the-server]__07649a30._.js +0 -3
  314. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1bf88ae0._.js +0 -3
  315. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2c3e3de2._.js +0 -3
  316. package/.next/standalone/.next/server/chunks/[root-of-the-server]__560e7c61._.js +0 -3
  317. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9f034d03._.js +0 -5
  318. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a84faf4b._.js +0 -3
  319. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b92251ea._.js +0 -3
  320. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e7a766a0._.js +0 -3
  321. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f234882e._.js +0 -3
  322. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f85221b8._.js +0 -3
  323. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__535a2208._.js +0 -3
  324. package/.next/standalone/.next/static/chunks/ca49cb2092c277d2.js +0 -13
  325. package/.next/standalone/.next/static/chunks/dc07499869593595.css +0 -3
  326. package/.next/static/chunks/ca49cb2092c277d2.js +0 -13
  327. package/.next/static/chunks/dc07499869593595.css +0 -3
  328. /package/.next/server/chunks/{[externals]_next_dist_16542d6b._.js.map → [externals]_next_dist_84e7390b._.js.map} +0 -0
  329. /package/.next/server/chunks/ssr/{[root-of-the-server]__535a2208._.js.map → [root-of-the-server]__b0788643._.js.map} +0 -0
  330. /package/.next/server/chunks/ssr/{[root-of-the-server]__39eef6a5._.js.map → [root-of-the-server]__efc52f08._.js.map} +0 -0
  331. /package/.next/standalone/.next/static/{78EwnRx2m70qyfCL0X4sH → L_tmqf71LaeMzApO4SiU-}/_buildManifest.js +0 -0
  332. /package/.next/standalone/.next/static/{78EwnRx2m70qyfCL0X4sH → L_tmqf71LaeMzApO4SiU-}/_clientMiddlewareManifest.json +0 -0
  333. /package/.next/standalone/.next/static/{78EwnRx2m70qyfCL0X4sH → L_tmqf71LaeMzApO4SiU-}/_ssgManifest.js +0 -0
  334. /package/.next/static/{78EwnRx2m70qyfCL0X4sH → L_tmqf71LaeMzApO4SiU-}/_buildManifest.js +0 -0
  335. /package/.next/static/{78EwnRx2m70qyfCL0X4sH → L_tmqf71LaeMzApO4SiU-}/_clientMiddlewareManifest.json +0 -0
  336. /package/.next/static/{78EwnRx2m70qyfCL0X4sH → L_tmqf71LaeMzApO4SiU-}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/app/api/node/sessions/route.ts","../../../node_modules/next/dist/esm/build/templates/app-route.js"],"sourcesContent":["import { createOpencodeClient } from '@opencode-ai/sdk';\nimport { execSync } from 'child_process';\nimport path from 'path';\nimport {\n discoverOpencodePortsWithMeta,\n discoverOpencodeProcessCwdsWithoutPortWithMeta,\n} from '@/lib/opencodeDiscovery';\nimport { readConfig } from '@/lib/opencodeConfig';\nimport { composeSourceKey } from '@/lib/hostIdentity';\nimport {\n NODE_PROTOCOL_VERSION,\n createNodeFailureResponse,\n guardNodeRequest,\n toNodeRequestGuardResponse,\n type NodeFailureReason,\n} from '@/lib/nodeProtocol';\nimport {\n clearSessionForceUnarchived,\n markSessionForceUnarchived,\n pruneSessionStickyStatusBlocked,\n pruneSessionForceUnarchived,\n shouldForceSessionUnarchived,\n takeSessionStickyStatusBlocked,\n} from '@/lib/sessionArchiveOverrides';\n\ntype SessionLike = {\n id: string;\n slug?: string;\n title?: string;\n directory: string;\n debugReason?: string;\n parentID?: string;\n time?: {\n created: number;\n updated: number;\n archived?: number;\n };\n};\n\ntype ProcessHint = {\n pid: number;\n directory: string;\n projectName: string;\n reason: 'process_without_api_port';\n};\n\nconst CHILD_ACTIVE_WINDOW_MS = 30 * 60 * 1000;\nconst CHILD_UNKNOWN_STATE_BUSY_WINDOW_MS = 2 * 60 * 1000;\nconst CHILD_STATUS_MESSAGE_CHECK_LIMIT = 50;\nconst STALL_DETECTION_WINDOW_MS = 30 * 1000;\nconst STATUS_STICKY_RETENTION_MS = 24 * 60 * 60 * 1000;\nconst STATUS_STICKY_ABSENT_RETENTION_MS = 30 * 60 * 1000;\nconst DEFAULT_STATUS_STICKY_MAX_ENTRIES = 5000;\nconst GIT_COMMAND_TIMEOUT_MS = 1200;\nconst sessionListTimeoutMs = readPositiveTimeoutEnv('OPENCODE_SESSIONS_LIST_TIMEOUT_MS', 6000);\nconst sessionStatusTimeoutMs = readPositiveTimeoutEnv('OPENCODE_SESSIONS_STATUS_TIMEOUT_MS', 4000);\nconst sessionMessagesTimeoutMs = readPositiveTimeoutEnv('OPENCODE_SESSIONS_MESSAGES_TIMEOUT_MS', 2500);\n\nconst LOCAL_SOURCE = {\n hostId: 'local',\n hostLabel: 'Local',\n hostKind: 'local',\n} as const;\n\ntype StableRealtimeStatus = 'idle' | 'busy' | 'retry';\n\ntype StatusStickyState = {\n lastBusyAt: number;\n lastSeenAt: number;\n};\n\ntype HostAwareFields = {\n hostId?: typeof LOCAL_SOURCE.hostId;\n hostLabel?: typeof LOCAL_SOURCE.hostLabel;\n hostKind?: typeof LOCAL_SOURCE.hostKind;\n rawSessionId?: string;\n sourceSessionKey?: string;\n readOnly?: boolean;\n};\n\ntype ChildEntry = HostAwareFields & {\n id: string;\n slug?: string;\n title?: string;\n directory?: string;\n debugReason?: string;\n parentID?: string;\n time?: { created: number; updated: number; archived?: number };\n realTimeStatus: string;\n waitingForUser: boolean;\n};\n\ntype EnrichedSession = SessionLike & HostAwareFields & {\n projectName: string;\n branch: string | null;\n realTimeStatus: StableRealtimeStatus;\n waitingForUser: boolean;\n children: ChildEntry[];\n};\n\ntype SessionStatusStabilizationTarget = {\n id: string;\n time?: {\n archived?: number;\n };\n realTimeStatus: string;\n waitingForUser: boolean;\n children: Array<{\n id: string;\n time?: {\n archived?: number;\n };\n realTimeStatus: string;\n waitingForUser: boolean;\n }>;\n};\n\ntype MessageStateStatus = string;\n\ntype MessagePart = {\n state?: {\n status?: unknown;\n };\n};\n\ntype LocalResultMeta = {\n online: boolean;\n degraded?: boolean;\n reason?: string;\n};\n\ntype LocalSessionsSuccessPayload = {\n sessions: EnrichedSession[];\n processHints: ProcessHint[];\n failedPorts?: Array<{ port: number; reason: string }>;\n degraded?: boolean;\n};\n\ntype LocalSessionsResult =\n | {\n ok: true;\n payload: LocalSessionsSuccessPayload;\n meta: LocalResultMeta;\n }\n | {\n ok: false;\n reason: NodeFailureReason;\n extras: Record<string, unknown>;\n };\n\ntype LocalHostStatus = {\n hostId: typeof LOCAL_SOURCE.hostId;\n hostLabel: typeof LOCAL_SOURCE.hostLabel;\n hostKind: typeof LOCAL_SOURCE.hostKind;\n online: boolean;\n degraded?: boolean;\n reason?: string;\n};\n\ntype NodeSessionsSuccessPayload = {\n ok: true;\n role: 'node';\n protocolVersion: typeof NODE_PROTOCOL_VERSION;\n source: typeof LOCAL_SOURCE;\n upstream: {\n kind: 'opencode';\n reachable: true;\n };\n sessions: EnrichedSession[];\n processHints: ProcessHint[];\n hosts: [LocalHostStatus];\n hostStatuses: [LocalHostStatus];\n failedPorts?: Array<{ port: number; reason: string }>;\n degraded?: true;\n};\n\nconst statusStickyState = new Map<string, StatusStickyState>();\n\nconst WAITING_PART_STATUSES = new Set<string>([\n 'awaiting-input',\n 'awaiting_input',\n 'input-required',\n 'input_required',\n 'requires-input',\n 'requires_input',\n 'blocked',\n 'paused',\n]);\n\nexport const dynamic = 'force-dynamic';\n\nexport async function GET(request: Request) {\n const guardResult = guardNodeRequest(request);\n if (!guardResult.ok) {\n return toNodeRequestGuardResponse(guardResult);\n }\n\n const stickyBusyDelayMs = await readStickyBusyDelayMs();\n const result = await getLocalSessionsResult(stickyBusyDelayMs);\n\n if (!result.ok) {\n return createNodeFailureResponse(result.reason, result.extras);\n }\n\n const hostStatus = toLocalHostStatus(result.meta);\n\n const payload: NodeSessionsSuccessPayload = {\n ok: true,\n role: 'node',\n protocolVersion: NODE_PROTOCOL_VERSION,\n source: LOCAL_SOURCE,\n upstream: {\n kind: 'opencode',\n reachable: true,\n },\n sessions: result.payload.sessions.map((session) => addLocalHostMetadataToSession(session)),\n processHints: result.payload.processHints,\n hosts: [hostStatus],\n hostStatuses: [hostStatus],\n ...(result.payload.failedPorts ? { failedPorts: result.payload.failedPorts } : {}),\n ...(result.payload.degraded ? { degraded: true as const } : {}),\n };\n\n return Response.json(payload);\n}\n\nfunction readPositiveTimeoutEnv(name: string, fallback: number): number {\n const raw = process.env[name];\n const parsed = Number(raw);\n if (Number.isFinite(parsed) && parsed > 0) {\n return Math.floor(parsed);\n }\n return fallback;\n}\n\nfunction withTimeout<T>(operation: (signal: AbortSignal) => Promise<T>, timeoutMs: number, label: string): Promise<T> {\n const timeoutError = new Error(`${label} timed out after ${timeoutMs}ms`);\n const timeoutController = new AbortController();\n let timeoutHandle: NodeJS.Timeout | undefined;\n const timeoutPromise = new Promise<never>((_, reject) => {\n timeoutHandle = setTimeout(() => {\n timeoutController.abort();\n reject(timeoutError);\n }, timeoutMs);\n });\n\n const operationPromise = operation(timeoutController.signal).catch((error) => {\n if (timeoutController.signal.aborted) {\n throw timeoutError;\n }\n\n throw error;\n });\n\n return Promise.race([operationPromise, timeoutPromise]).finally(() => {\n if (timeoutHandle) {\n clearTimeout(timeoutHandle);\n }\n });\n}\n\nfunction normalizePartStatus(status: string): string {\n return status.trim().toLowerCase();\n}\n\nfunction isWaitingPartStatus(status: string): boolean {\n return WAITING_PART_STATUSES.has(normalizePartStatus(status));\n}\n\nfunction collectPartStatuses(messages: Array<{ parts?: MessagePart[] }>): MessageStateStatus[] {\n const partStatuses: MessageStateStatus[] = [];\n\n for (const message of messages) {\n for (const part of message.parts || []) {\n const status = part?.state?.status;\n if (typeof status === 'string') {\n const normalized = normalizePartStatus(status);\n if (normalized) {\n partStatuses.push(normalized);\n }\n }\n }\n }\n\n return partStatuses;\n}\n\nasync function fetchPartStatuses(\n client: ReturnType<typeof createOpencodeClient>,\n sessionId: string,\n timeoutMs: number\n): Promise<MessageStateStatus[]> {\n const messagesResult = await withTimeout(\n (signal) =>\n client.session.messages({\n path: { id: sessionId },\n query: { limit: 8 },\n signal,\n }),\n timeoutMs,\n `session.messages(${sessionId})`\n );\n const messages = (messagesResult.data || []) as Array<{ parts?: MessagePart[] }>;\n return collectPartStatuses(messages);\n}\n\nfunction getUpdatedAt(session: { time?: { updated?: number; created?: number } }): number {\n return session.time?.updated || session.time?.created || 0;\n}\n\nfunction normalizeRealtimeStatus(value: string | undefined): StableRealtimeStatus {\n if (value === 'busy' || value === 'retry') return value;\n return 'idle';\n}\n\nfunction clearStickyStatusState(sessionId: string): void {\n statusStickyState.delete(sessionId);\n statusStickyState.delete(`child:${sessionId}`);\n}\n\nfunction applyStickyBusyStatus(\n id: string,\n status: StableRealtimeStatus,\n now: number,\n stickyBusyWindowMs: number\n): StableRealtimeStatus {\n const existing = statusStickyState.get(id) ?? { lastBusyAt: 0, lastSeenAt: now };\n\n if (status === 'busy') {\n existing.lastBusyAt = now;\n existing.lastSeenAt = now;\n statusStickyState.set(id, existing);\n return status;\n }\n\n if (status === 'retry') {\n existing.lastSeenAt = now;\n statusStickyState.set(id, existing);\n return status;\n }\n\n const shouldKeepBusy = existing.lastBusyAt > 0 && now - existing.lastBusyAt <= stickyBusyWindowMs;\n existing.lastSeenAt = now;\n statusStickyState.set(id, existing);\n return shouldKeepBusy ? 'busy' : 'idle';\n}\n\nfunction getStickyStateMaxEntries(): number {\n const raw = Number(process.env.OPENCODE_STATUS_STICKY_MAX_ENTRIES);\n if (Number.isFinite(raw) && raw > 0) {\n return Math.floor(raw);\n }\n return DEFAULT_STATUS_STICKY_MAX_ENTRIES;\n}\n\nfunction pruneStickyState(now: number, activeIds: Set<string>): void {\n for (const [id, state] of statusStickyState) {\n const ageMs = now - state.lastSeenAt;\n const isActive = activeIds.has(id);\n if (ageMs > STATUS_STICKY_RETENTION_MS || (!isActive && ageMs > STATUS_STICKY_ABSENT_RETENTION_MS)) {\n statusStickyState.delete(id);\n }\n }\n\n const maxEntries = getStickyStateMaxEntries();\n if (statusStickyState.size <= maxEntries) {\n return;\n }\n\n const overflow = statusStickyState.size - maxEntries;\n const sortedByLastSeen = Array.from(statusStickyState.entries()).sort((a, b) => a[1].lastSeenAt - b[1].lastSeenAt);\n\n let removed = 0;\n for (const [id] of sortedByLastSeen) {\n if (removed >= overflow) break;\n if (activeIds.has(id)) continue;\n statusStickyState.delete(id);\n removed++;\n }\n\n if (removed >= overflow) {\n return;\n }\n\n for (const [id] of sortedByLastSeen) {\n if (removed >= overflow) break;\n if (!statusStickyState.has(id)) continue;\n statusStickyState.delete(id);\n removed++;\n }\n}\n\nfunction hasRecentActivity(session: { time?: { updated?: number } }, now: number): boolean {\n const updatedAt = session.time?.updated;\n if (!updatedAt) return false;\n return now - updatedAt <= STALL_DETECTION_WINDOW_MS;\n}\n\nfunction toChildEntry(\n child: SessionLike,\n status: StableRealtimeStatus,\n waitingForUser = false\n): ChildEntry {\n return {\n id: child.id,\n slug: child.slug,\n title: child.title,\n directory: child.directory,\n debugReason: child.debugReason,\n parentID: child.parentID,\n time: child.time,\n realTimeStatus: status,\n waitingForUser,\n };\n}\n\nfunction clearSessionStabilizationState(session: SessionStatusStabilizationTarget): void {\n clearStickyStatusState(session.id);\n clearSessionForceUnarchived(session.id);\n for (const child of session.children) {\n clearStickyStatusState(`child:${child.id}`);\n clearSessionForceUnarchived(child.id);\n }\n}\n\nfunction shouldSkipSessionStatusStabilization(\n session: SessionStatusStabilizationTarget,\n now: number\n): boolean {\n if (takeSessionStickyStatusBlocked(session.id, now)) {\n clearSessionStabilizationState(session);\n return true;\n }\n\n if (session.time?.archived) {\n clearSessionStabilizationState(session);\n return true;\n }\n\n return false;\n}\n\nfunction applyStickyStatusStabilization(\n session: SessionStatusStabilizationTarget,\n stickyNow: number,\n stickyBusyDelayMs: number\n): void {\n for (const child of session.children) {\n if (child.time?.archived) {\n clearStickyStatusState(`child:${child.id}`);\n clearSessionForceUnarchived(child.id);\n continue;\n }\n\n const normalizedChildStatus = normalizeRealtimeStatus(child.realTimeStatus);\n const childStatusForStabilization =\n child.waitingForUser && normalizedChildStatus === 'idle' ? 'retry' : normalizedChildStatus;\n child.realTimeStatus = applyStickyBusyStatus(\n `child:${child.id}`,\n childStatusForStabilization,\n stickyNow,\n stickyBusyDelayMs\n );\n\n if (child.realTimeStatus === 'busy' || child.realTimeStatus === 'retry' || child.waitingForUser) {\n markSessionForceUnarchived(child.id, stickyNow);\n }\n }\n\n const normalizedSessionStatus = normalizeRealtimeStatus(session.realTimeStatus);\n const sessionStatusForStabilization =\n session.waitingForUser && normalizedSessionStatus === 'idle' ? 'retry' : normalizedSessionStatus;\n session.realTimeStatus = applyStickyBusyStatus(\n session.id,\n sessionStatusForStabilization,\n stickyNow,\n stickyBusyDelayMs\n );\n\n const hasActiveChildren = session.children.some(\n (child) => child.realTimeStatus === 'busy' || child.realTimeStatus === 'retry' || child.waitingForUser\n );\n const shouldAutoUnarchive =\n session.realTimeStatus === 'busy' ||\n session.realTimeStatus === 'retry' ||\n session.waitingForUser ||\n hasActiveChildren;\n\n if (shouldAutoUnarchive) {\n markSessionForceUnarchived(session.id, stickyNow);\n }\n}\n\nfunction getProjectName(directory: string): string {\n return path.basename(directory);\n}\n\nfunction isGitRepo(directory: string): boolean {\n try {\n const result = execSync('git rev-parse --is-inside-work-tree', {\n cwd: directory,\n encoding: 'utf-8',\n stdio: ['ignore', 'pipe', 'ignore'],\n timeout: GIT_COMMAND_TIMEOUT_MS,\n });\n return result.trim() === 'true';\n } catch {\n return false;\n }\n}\n\nfunction getGitBranch(directory: string): string | null {\n if (!isGitRepo(directory)) return null;\n try {\n const branch = execSync('git branch --show-current', {\n cwd: directory,\n encoding: 'utf-8',\n stdio: ['ignore', 'pipe', 'ignore'],\n timeout: GIT_COMMAND_TIMEOUT_MS,\n });\n return branch.trim() || null;\n } catch {\n return null;\n }\n}\n\nasync function readStickyBusyDelayMs(): Promise<number> {\n let stickyBusyDelayMs = 1000;\n try {\n const config = await readConfig();\n const vibepulseRaw =\n config.vibepulse && typeof config.vibepulse === 'object' && !Array.isArray(config.vibepulse)\n ? config.vibepulse\n : {};\n const vibepulse = vibepulseRaw as Record<string, unknown>;\n const stickyDelay = vibepulse['stickyBusyDelayMs'] as number | undefined;\n if (typeof stickyDelay === 'number' && Number.isFinite(stickyDelay) && stickyDelay >= 0) {\n stickyBusyDelayMs = stickyDelay;\n }\n } catch {\n }\n\n return stickyBusyDelayMs;\n}\n\nfunction sortChildEntries(children: ChildEntry[]): void {\n children.sort((a, b) => {\n const aActive = a.realTimeStatus === 'busy' || a.realTimeStatus === 'retry';\n const bActive = b.realTimeStatus === 'busy' || b.realTimeStatus === 'retry';\n\n if (aActive && !bActive) return -1;\n if (!aActive && bActive) return 1;\n\n const aTime = a.time?.updated || a.time?.created || 0;\n const bTime = b.time?.updated || b.time?.created || 0;\n return bTime - aTime;\n });\n}\n\nfunction addLocalHostMetadataToChildEntry(child: ChildEntry): ChildEntry {\n const rawSessionId = child.rawSessionId ?? child.id;\n const sourceSessionKey = composeSourceKey(LOCAL_SOURCE.hostId, rawSessionId);\n\n return {\n ...child,\n id: sourceSessionKey,\n parentID: child.parentID ? composeSourceKey(LOCAL_SOURCE.hostId, child.parentID) : child.parentID,\n hostId: LOCAL_SOURCE.hostId,\n hostLabel: LOCAL_SOURCE.hostLabel,\n hostKind: LOCAL_SOURCE.hostKind,\n rawSessionId,\n sourceSessionKey,\n readOnly: false,\n };\n}\n\nfunction addLocalHostMetadataToSession(session: EnrichedSession): EnrichedSession {\n const rawSessionId = session.rawSessionId ?? session.id;\n const sourceSessionKey = composeSourceKey(LOCAL_SOURCE.hostId, rawSessionId);\n\n return {\n ...session,\n id: sourceSessionKey,\n parentID: session.parentID ? composeSourceKey(LOCAL_SOURCE.hostId, session.parentID) : session.parentID,\n hostId: LOCAL_SOURCE.hostId,\n hostLabel: LOCAL_SOURCE.hostLabel,\n hostKind: LOCAL_SOURCE.hostKind,\n rawSessionId,\n sourceSessionKey,\n readOnly: false,\n children: session.children.map((child) => addLocalHostMetadataToChildEntry(child)),\n };\n}\n\nfunction toLocalHostStatus(meta: LocalResultMeta): LocalHostStatus {\n return {\n hostId: LOCAL_SOURCE.hostId,\n hostLabel: LOCAL_SOURCE.hostLabel,\n hostKind: LOCAL_SOURCE.hostKind,\n online: meta.online,\n ...(meta.degraded ? { degraded: true } : {}),\n ...(meta.reason ? { reason: meta.reason } : {}),\n };\n}\n\nfunction isTimeoutErrorMessage(value: string): boolean {\n return value.toLowerCase().includes('timed out');\n}\n\nfunction getFailureMeta(reason: NodeFailureReason): { statusReason: string; reachable: false } {\n if (reason === 'upstream_timeout') {\n return {\n statusReason: 'OpenCode discovery timed out',\n reachable: false,\n };\n }\n\n return {\n statusReason: 'OpenCode server not found',\n reachable: false,\n };\n}\n\nfunction createLocalFailureResult(\n reason: NodeFailureReason,\n processHints: ProcessHint[],\n extras: Record<string, unknown> = {}\n): Extract<LocalSessionsResult, { ok: false }> {\n const failureMeta = getFailureMeta(reason);\n const hostStatus = toLocalHostStatus({\n online: false,\n degraded: true,\n reason: failureMeta.statusReason,\n });\n\n return {\n ok: false,\n reason,\n extras: {\n role: 'node',\n source: LOCAL_SOURCE,\n upstream: {\n kind: 'opencode',\n reachable: failureMeta.reachable,\n },\n processHints,\n hosts: [hostStatus],\n hostStatuses: [hostStatus],\n ...extras,\n },\n };\n}\n\nfunction resolveFailureReasonFromMessages(messages: string[]): NodeFailureReason {\n if (messages.length > 0 && messages.every(isTimeoutErrorMessage)) {\n return 'upstream_timeout';\n }\n\n return 'upstream_unreachable';\n}\n\nasync function getLocalSessionsResult(stickyBusyDelayMs: number): Promise<LocalSessionsResult> {\n const { processes: rawProcessHints, timedOut: processDiscoveryTimedOut } =\n discoverOpencodeProcessCwdsWithoutPortWithMeta();\n const processHintsByDirectory = new Map<string, ProcessHint>();\n for (const process of rawProcessHints) {\n if (!process.cwd || process.cwd.startsWith('/private/tmp/opencode')) {\n continue;\n }\n if (processHintsByDirectory.has(process.cwd)) {\n continue;\n }\n processHintsByDirectory.set(process.cwd, {\n pid: process.pid,\n directory: process.cwd,\n projectName: getProjectName(process.cwd),\n reason: 'process_without_api_port',\n });\n }\n\n const processHints = Array.from(processHintsByDirectory.values());\n const { ports, timedOut: portDiscoveryTimedOut } = discoverOpencodePortsWithMeta();\n\n if (!ports.length) {\n if (portDiscoveryTimedOut || processDiscoveryTimedOut) {\n return createLocalFailureResult('upstream_timeout', processHints);\n }\n\n return createLocalFailureResult('upstream_unreachable', processHints);\n }\n\n try {\n const results = await Promise.allSettled(\n ports.map(async (port) => {\n const client = createOpencodeClient({ baseUrl: `http://localhost:${port}` });\n const sessionsResult = await withTimeout(\n (signal) => client.session.list({ signal }),\n sessionListTimeoutMs,\n `session.list(${port})`\n );\n const statusResult = await withTimeout(\n (signal) => client.session.status({ signal }),\n sessionStatusTimeoutMs,\n `session.status(${port})`\n ).catch(() => ({ data: {} }));\n return { port, client, sessions: sessionsResult.data || [], status: statusResult.data || {} };\n })\n );\n\n const allSessions: SessionLike[] = [];\n const statusMap: Record<string, { type: StableRealtimeStatus }> = {};\n const clientByPort: Record<number, ReturnType<typeof createOpencodeClient>> = {};\n const sessionPortMap: Record<string, number> = {};\n const failedPorts: Array<{ port: number; reason: string }> = [];\n\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n const port = ports[i];\n\n if (result.status !== 'fulfilled') {\n failedPorts.push({\n port,\n reason: result.reason instanceof Error ? result.reason.message : String(result.reason),\n });\n continue;\n }\n\n allSessions.push(...(result.value.sessions as SessionLike[]));\n Object.assign(statusMap, result.value.status);\n clientByPort[result.value.port] = result.value.client;\n for (const session of result.value.sessions as SessionLike[]) {\n if (!(session.id in sessionPortMap)) {\n sessionPortMap[session.id] = result.value.port;\n }\n }\n }\n\n const uniqueSessions: SessionLike[] = [];\n const seen = new Set<string>();\n for (const session of allSessions) {\n if (seen.has(session.id)) {\n continue;\n }\n seen.add(session.id);\n uniqueSessions.push(session);\n }\n\n const parentSessions = uniqueSessions.filter((session) => !session.parentID);\n const childSessions = uniqueSessions.filter((session) => !!session.parentID);\n\n const lifecycleNow = Date.now();\n pruneSessionForceUnarchived(lifecycleNow);\n pruneSessionStickyStatusBlocked(lifecycleNow);\n\n for (const session of parentSessions) {\n if (session.time?.archived !== undefined && shouldForceSessionUnarchived(session.id, lifecycleNow)) {\n session.time = {\n ...session.time,\n archived: undefined,\n };\n }\n }\n\n for (const child of childSessions) {\n if (child.time?.archived !== undefined && shouldForceSessionUnarchived(child.id, lifecycleNow)) {\n child.time = {\n ...child.time,\n archived: undefined,\n };\n }\n }\n\n if (results.length > 0 && failedPorts.length === results.length) {\n pruneStickyState(Date.now(), new Set<string>());\n return createLocalFailureResult(resolveFailureReasonFromMessages(failedPorts.map((entry) => entry.reason)), processHints, {\n failedPorts,\n });\n }\n\n const enrichedSessions: EnrichedSession[] = parentSessions.map((session) => ({\n ...session,\n projectName: getProjectName(session.directory),\n branch: getGitBranch(session.directory),\n realTimeStatus: statusMap[session.id]?.type || 'idle',\n waitingForUser: false,\n children: [],\n }));\n\n const parentById = new Map(enrichedSessions.map((session) => [session.id, session]));\n const now = Date.now();\n const unresolvedChildren: Array<{ parentId: string; child: SessionLike; childUpdatedAt: number }> = [];\n\n for (const child of childSessions) {\n let parent = child.parentID ? parentById.get(child.parentID) : undefined;\n\n if (!parent) {\n const candidates = enrichedSessions\n .filter((session) => session.directory === child.directory)\n .sort((a, b) => getUpdatedAt(b) - getUpdatedAt(a));\n\n parent =\n candidates.find((session) => session.realTimeStatus === 'busy' || session.realTimeStatus === 'retry') ||\n candidates[0];\n }\n\n if (!parent) {\n continue;\n }\n\n const statusFromMap = statusMap[child.id]?.type;\n const childUpdatedAt = getUpdatedAt(child);\n const isRecent = childUpdatedAt > 0 && now - childUpdatedAt <= CHILD_ACTIVE_WINDOW_MS;\n const shouldSkipArchivedChild = !!child.time?.archived && !statusFromMap && !isRecent;\n\n if (shouldSkipArchivedChild) {\n continue;\n }\n\n if (statusFromMap && statusFromMap !== 'idle') {\n parent.children.push(toChildEntry(child, statusFromMap));\n } else if (isRecent) {\n if (unresolvedChildren.length < CHILD_STATUS_MESSAGE_CHECK_LIMIT) {\n unresolvedChildren.push({ parentId: parent.id, child, childUpdatedAt });\n }\n }\n }\n\n if (unresolvedChildren.length > 0) {\n const unresolvedChecks = await Promise.allSettled(\n unresolvedChildren.map(async ({ parentId, child, childUpdatedAt }) => {\n const port = sessionPortMap[child.id] ?? sessionPortMap[parentId];\n const client = port ? clientByPort[port] : undefined;\n const assumeBusyForUnknown = childUpdatedAt > 0 && now - childUpdatedAt <= CHILD_UNKNOWN_STATE_BUSY_WINDOW_MS;\n if (!client) {\n return {\n parentId,\n child,\n childStatus: assumeBusyForUnknown ? ('busy' as const) : ('idle' as const),\n };\n }\n\n try {\n const partStatuses = await fetchPartStatuses(client, child.id, sessionMessagesTimeoutMs);\n const hasRunningState = partStatuses.some((status) => status === 'running');\n const hasWaitingState = !hasRunningState && partStatuses.some(isWaitingPartStatus);\n const hasActiveState = hasWaitingState || hasRunningState;\n const recentlyActive = childUpdatedAt > 0 && now - childUpdatedAt <= 5 * 60 * 1000;\n\n return {\n parentId,\n child,\n childWaitingForUser: hasWaitingState,\n childStatus: hasActiveState\n ? ('busy' as const)\n : recentlyActive || assumeBusyForUnknown\n ? ('busy' as const)\n : ('idle' as const),\n };\n } catch {\n return {\n parentId,\n child,\n childWaitingForUser: false,\n childStatus: assumeBusyForUnknown ? ('busy' as const) : ('idle' as const),\n };\n }\n })\n );\n\n for (const result of unresolvedChecks) {\n if (result.status !== 'fulfilled') continue;\n if (result.value.childStatus === 'idle') continue;\n const parent = parentById.get(result.value.parentId);\n if (!parent) continue;\n parent.children.push(toChildEntry(result.value.child, result.value.childStatus, result.value.childWaitingForUser));\n }\n }\n\n const parentStatusFallbackCandidates = enrichedSessions\n .filter((session) => {\n if (session.realTimeStatus !== 'idle') return false;\n const updatedAt = getUpdatedAt(session);\n if (updatedAt > 0 && now - updatedAt <= CHILD_ACTIVE_WINDOW_MS) return true;\n return !!session.time?.archived;\n })\n .sort((a, b) => getUpdatedAt(b) - getUpdatedAt(a))\n .slice(0, CHILD_STATUS_MESSAGE_CHECK_LIMIT);\n\n if (parentStatusFallbackCandidates.length > 0) {\n const parentFallbackChecks = await Promise.allSettled(\n parentStatusFallbackCandidates.map(async (session) => {\n const updatedAt = getUpdatedAt(session);\n const assumeBusyForUnknown = updatedAt > 0 && now - updatedAt <= CHILD_UNKNOWN_STATE_BUSY_WINDOW_MS;\n const port = sessionPortMap[session.id];\n const client = port ? clientByPort[port] : undefined;\n\n if (!client) {\n return {\n sessionId: session.id,\n status: assumeBusyForUnknown ? ('busy' as const) : ('idle' as const),\n waitingForUser: false,\n };\n }\n\n try {\n const partStatuses = await fetchPartStatuses(client, session.id, sessionMessagesTimeoutMs);\n const hasRunningState = partStatuses.some((status) => status === 'running');\n const hasWaitingState = !hasRunningState && partStatuses.some(isWaitingPartStatus);\n const hasCompletedState = partStatuses.length > 0 && partStatuses.every((status) => status === 'completed');\n const recentlyActive = hasRecentActivity(session, now);\n\n return {\n sessionId: session.id,\n status: hasRunningState || hasWaitingState\n ? ('busy' as const)\n : hasCompletedState && !recentlyActive\n ? ('idle' as const)\n : assumeBusyForUnknown || recentlyActive\n ? ('busy' as const)\n : ('idle' as const),\n waitingForUser: hasWaitingState,\n };\n } catch {\n return {\n sessionId: session.id,\n status: assumeBusyForUnknown ? ('busy' as const) : ('idle' as const),\n waitingForUser: false,\n };\n }\n })\n );\n\n for (const result of parentFallbackChecks) {\n if (result.status !== 'fulfilled') continue;\n if (result.value.status === 'idle') continue;\n const session = parentById.get(result.value.sessionId);\n if (!session) continue;\n session.realTimeStatus = result.value.status;\n if (result.value.waitingForUser) {\n session.waitingForUser = true;\n }\n }\n }\n\n for (const session of enrichedSessions) {\n if (session.children.length > 0) {\n sortChildEntries(session.children);\n }\n }\n\n const sessionsForInteractionChecks = enrichedSessions.filter(\n (session) =>\n session.realTimeStatus === 'busy' ||\n !!session.time?.archived ||\n session.children.some((child) => child.realTimeStatus === 'busy' || child.realTimeStatus === 'retry')\n );\n\n if (sessionsForInteractionChecks.length > 0) {\n const pendingChecks = await Promise.allSettled(\n sessionsForInteractionChecks.map(async (session) => {\n const port = sessionPortMap[session.id];\n const client = port ? clientByPort[port] : undefined;\n if (!client) {\n return {\n sessionId: session.id,\n parentWaiting: false,\n running: false,\n waitingChildIds: new Set<string>(),\n };\n }\n\n try {\n const partStatuses = await fetchPartStatuses(client, session.id, sessionMessagesTimeoutMs);\n const hasRunning = partStatuses.some((status) => status === 'running');\n const hasInteractionWait = !hasRunning && partStatuses.some(isWaitingPartStatus);\n\n const childStateChecks = await Promise.allSettled(\n session.children\n .filter((child) => child.realTimeStatus === 'busy' || child.realTimeStatus === 'retry')\n .map(async (child) => {\n const childPort = sessionPortMap[child.id] ?? sessionPortMap[session.id];\n const childClient = childPort ? clientByPort[childPort] : undefined;\n if (!childClient) {\n return { childId: child.id, waiting: false };\n }\n\n try {\n const childStatuses = await fetchPartStatuses(childClient, child.id, sessionMessagesTimeoutMs);\n const childHasRunning = childStatuses.some((status) => status === 'running');\n return {\n childId: child.id,\n waiting: !childHasRunning && childStatuses.some(isWaitingPartStatus),\n };\n } catch {\n return { childId: child.id, waiting: false };\n }\n })\n );\n\n const waitingChildIds = new Set(\n childStateChecks\n .filter((entry): entry is PromiseFulfilledResult<{ childId: string; waiting: boolean }> => entry.status === 'fulfilled')\n .filter((entry) => entry.value.waiting)\n .map((entry) => entry.value.childId)\n );\n\n return {\n sessionId: session.id,\n parentWaiting: hasInteractionWait,\n running: hasRunning,\n waitingChildIds,\n };\n } catch {\n return {\n sessionId: session.id,\n parentWaiting: false,\n running: false,\n waitingChildIds: new Set<string>(),\n };\n }\n })\n );\n\n for (const result of pendingChecks) {\n if (result.status !== 'fulfilled') continue;\n const session = enrichedSessions.find((candidate) => candidate.id === result.value.sessionId);\n if (!session) continue;\n\n for (const child of session.children) {\n if (result.value.waitingChildIds.has(child.id)) {\n child.waitingForUser = true;\n }\n }\n\n if (result.value.running) {\n session.realTimeStatus = 'busy';\n }\n if (result.value.parentWaiting) {\n session.waitingForUser = true;\n }\n }\n }\n\n const stickyNow = Date.now();\n const activeStickyIds = new Set<string>();\n for (const session of enrichedSessions) {\n activeStickyIds.add(session.id);\n for (const child of session.children) {\n activeStickyIds.add(`child:${child.id}`);\n }\n }\n\n for (const session of enrichedSessions) {\n if (shouldSkipSessionStatusStabilization(session, stickyNow)) {\n continue;\n }\n\n applyStickyStatusStabilization(session, stickyNow, stickyBusyDelayMs);\n }\n\n pruneStickyState(stickyNow, activeStickyIds);\n\n const knownDirectories = new Set<string>();\n for (const session of uniqueSessions) {\n if (session.directory) {\n knownDirectories.add(session.directory);\n }\n }\n\n const filteredProcessHints = processHints.filter((hint) => !knownDirectories.has(hint.directory));\n\n return {\n ok: true,\n payload: {\n sessions: enrichedSessions,\n processHints: filteredProcessHints,\n ...(failedPorts.length > 0 ? { failedPorts, degraded: true } : {}),\n },\n meta: {\n online: true,\n ...(failedPorts.length > 0 ? { degraded: true } : {}),\n },\n };\n } catch (error) {\n console.error('Error fetching node-local sessions:', error);\n return createLocalFailureResult(\n error instanceof Error && isTimeoutErrorMessage(error.message) ? 'upstream_timeout' : 'upstream_unreachable',\n processHints,\n {\n details: error instanceof Error ? error.message : String(error),\n }\n );\n }\n}\n","import { AppRouteRouteModule } from \"next/dist/esm/server/route-modules/app-route/module.compiled\";\nimport { RouteKind } from \"next/dist/esm/server/route-kind\";\nimport { patchFetch as _patchFetch } from \"next/dist/esm/server/lib/patch-fetch\";\nimport { addRequestMeta, getRequestMeta } from \"next/dist/esm/server/request-meta\";\nimport { getTracer, SpanKind } from \"next/dist/esm/server/lib/trace/tracer\";\nimport { setManifestsSingleton } from \"next/dist/esm/server/app-render/manifests-singleton\";\nimport { normalizeAppPath } from \"next/dist/esm/shared/lib/router/utils/app-paths\";\nimport { NodeNextRequest, NodeNextResponse } from \"next/dist/esm/server/base-http/node\";\nimport { NextRequestAdapter, signalFromNodeResponse } from \"next/dist/esm/server/web/spec-extension/adapters/next-request\";\nimport { BaseServerSpan } from \"next/dist/esm/server/lib/trace/constants\";\nimport { getRevalidateReason } from \"next/dist/esm/server/instrumentation/utils\";\nimport { sendResponse } from \"next/dist/esm/server/send-response\";\nimport { fromNodeOutgoingHttpHeaders, toNodeOutgoingHttpHeaders } from \"next/dist/esm/server/web/utils\";\nimport { getCacheControlHeader } from \"next/dist/esm/server/lib/cache-control\";\nimport { INFINITE_CACHE, NEXT_CACHE_TAGS_HEADER } from \"next/dist/esm/lib/constants\";\nimport { NoFallbackError } from \"next/dist/esm/shared/lib/no-fallback-error.external\";\nimport { CachedRouteKind } from \"next/dist/esm/server/response-cache\";\nimport * as userland from \"INNER_APP_ROUTE\";\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\nconst nextConfigOutput = \"standalone\"\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: \"/api/node/sessions/route\",\n pathname: \"/api/node/sessions\",\n filename: \"route\",\n bundlePath: \"\"\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '',\n resolvedPagePath: \"[project]/src/app/api/node/sessions/route.ts\",\n nextConfigOutput,\n userland\n});\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule;\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage\n });\n}\nexport { routeModule, workAsyncStorage, workUnitAsyncStorage, serverHooks, patchFetch, };\nexport async function handler(req, res, ctx) {\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint());\n }\n let srcPage = \"/api/node/sessions/route\";\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (process.env.TURBOPACK) {\n srcPage = srcPage.replace(/\\/index$/, '') || '/';\n } else if (srcPage === '/index') {\n // we always normalize /index specifically\n srcPage = '/';\n }\n const multiZoneDraftMode = process.env.__NEXT_MULTI_ZONE_DRAFT_MODE;\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage,\n multiZoneDraftMode\n });\n if (!prepareResult) {\n res.statusCode = 400;\n res.end('Bad Request');\n ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve());\n return null;\n }\n const { buildId, params, nextConfig, parsedUrl, isDraftMode, prerenderManifest, routerServerContext, isOnDemandRevalidate, revalidateOnlyGenerated, resolvedPathname, clientReferenceManifest, serverActionsManifest } = prepareResult;\n const normalizedSrcPage = normalizeAppPath(srcPage);\n let isIsr = Boolean(prerenderManifest.dynamicRoutes[normalizedSrcPage] || prerenderManifest.routes[resolvedPathname]);\n const render404 = async ()=>{\n // TODO: should route-module itself handle rendering the 404\n if (routerServerContext == null ? void 0 : routerServerContext.render404) {\n await routerServerContext.render404(req, res, parsedUrl, false);\n } else {\n res.end('This page could not be found');\n }\n return null;\n };\n if (isIsr && !isDraftMode) {\n const isPrerendered = Boolean(prerenderManifest.routes[resolvedPathname]);\n const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage];\n if (prerenderInfo) {\n if (prerenderInfo.fallback === false && !isPrerendered) {\n if (nextConfig.experimental.adapterPath) {\n return await render404();\n }\n throw new NoFallbackError();\n }\n }\n }\n let cacheKey = null;\n if (isIsr && !routeModule.isDev && !isDraftMode) {\n cacheKey = resolvedPathname;\n // ensure /index and / is normalized to one key\n cacheKey = cacheKey === '/index' ? '/' : cacheKey;\n }\n const supportsDynamicResponse = // If we're in development, we always support dynamic HTML\n routeModule.isDev === true || // If this is not SSG or does not have static paths, then it supports\n // dynamic HTML.\n !isIsr;\n // This is a revalidation request if the request is for a static\n // page and it is not being resumed from a postponed render and\n // it is not a dynamic RSC request then it is a revalidation\n // request.\n const isStaticGeneration = isIsr && !supportsDynamicResponse;\n // Before rendering (which initializes component tree modules), we have to\n // set the reference manifests to our global store so Server Action's\n // encryption util can access to them at the top level of the page module.\n if (serverActionsManifest && clientReferenceManifest) {\n setManifestsSingleton({\n page: srcPage,\n clientReferenceManifest,\n serverActionsManifest\n });\n }\n const method = req.method || 'GET';\n const tracer = getTracer();\n const activeSpan = tracer.getActiveScopeSpan();\n const context = {\n params,\n prerenderManifest,\n renderOpts: {\n experimental: {\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts)\n },\n cacheComponents: Boolean(nextConfig.cacheComponents),\n supportsDynamicResponse,\n incrementalCache: getRequestMeta(req, 'incrementalCache'),\n cacheLifeProfiles: nextConfig.cacheLife,\n waitUntil: ctx.waitUntil,\n onClose: (cb)=>{\n res.on('close', cb);\n },\n onAfterTaskError: undefined,\n onInstrumentationRequestError: (error, _request, errorContext, silenceLog)=>routeModule.onRequestError(req, error, errorContext, silenceLog, routerServerContext)\n },\n sharedContext: {\n buildId\n }\n };\n const nodeNextReq = new NodeNextRequest(req);\n const nodeNextRes = new NodeNextResponse(res);\n const nextReq = NextRequestAdapter.fromNodeNextRequest(nodeNextReq, signalFromNodeResponse(res));\n try {\n const invokeRouteModule = async (span)=>{\n return routeModule.handle(nextReq, context).finally(()=>{\n if (!span) return;\n span.setAttributes({\n 'http.status_code': res.statusCode,\n 'next.rsc': false\n });\n const rootSpanAttributes = tracer.getRootSpanAttributes();\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return;\n }\n if (rootSpanAttributes.get('next.span_type') !== BaseServerSpan.handleRequest) {\n console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`);\n return;\n }\n const route = rootSpanAttributes.get('next.route');\n if (route) {\n const name = `${method} ${route}`;\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name\n });\n span.updateName(name);\n } else {\n span.updateName(`${method} ${srcPage}`);\n }\n });\n };\n const isMinimalMode = Boolean(process.env.MINIMAL_MODE || getRequestMeta(req, 'minimalMode'));\n const handleResponse = async (currentSpan)=>{\n var _cacheEntry_value;\n const responseGenerator = async ({ previousCacheEntry })=>{\n try {\n if (!isMinimalMode && isOnDemandRevalidate && revalidateOnlyGenerated && !previousCacheEntry) {\n res.statusCode = 404;\n // on-demand revalidate always sets this header\n res.setHeader('x-nextjs-cache', 'REVALIDATED');\n res.end('This page could not be found');\n return null;\n }\n const response = await invokeRouteModule(currentSpan);\n req.fetchMetrics = context.renderOpts.fetchMetrics;\n let pendingWaitUntil = context.renderOpts.pendingWaitUntil;\n // Attempt using provided waitUntil if available\n // if it's not we fallback to sendResponse's handling\n if (pendingWaitUntil) {\n if (ctx.waitUntil) {\n ctx.waitUntil(pendingWaitUntil);\n pendingWaitUntil = undefined;\n }\n }\n const cacheTags = context.renderOpts.collectedTags;\n // If the request is for a static response, we can cache it so long\n // as it's not edge.\n if (isIsr) {\n const blob = await response.blob();\n // Copy the headers from the response.\n const headers = toNodeOutgoingHttpHeaders(response.headers);\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags;\n }\n if (!headers['content-type'] && blob.type) {\n headers['content-type'] = blob.type;\n }\n const revalidate = typeof context.renderOpts.collectedRevalidate === 'undefined' || context.renderOpts.collectedRevalidate >= INFINITE_CACHE ? false : context.renderOpts.collectedRevalidate;\n const expire = typeof context.renderOpts.collectedExpire === 'undefined' || context.renderOpts.collectedExpire >= INFINITE_CACHE ? undefined : context.renderOpts.collectedExpire;\n // Create the cache entry for the response.\n const cacheEntry = {\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n status: response.status,\n body: Buffer.from(await blob.arrayBuffer()),\n headers\n },\n cacheControl: {\n revalidate,\n expire\n }\n };\n return cacheEntry;\n } else {\n // send response without caching if not ISR\n await sendResponse(nodeNextReq, nodeNextRes, response, context.renderOpts.pendingWaitUntil);\n return null;\n }\n } catch (err) {\n // if this is a background revalidate we need to report\n // the request error here as it won't be bubbled\n if (previousCacheEntry == null ? void 0 : previousCacheEntry.isStale) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: srcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n throw err;\n }\n };\n const cacheEntry = await routeModule.handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind: RouteKind.APP_ROUTE,\n isFallback: false,\n prerenderManifest,\n isRoutePPREnabled: false,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil: ctx.waitUntil,\n isMinimalMode\n });\n // we don't create a cacheEntry for ISR\n if (!isIsr) {\n return null;\n }\n if ((cacheEntry == null ? void 0 : (_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== CachedRouteKind.APP_ROUTE) {\n var _cacheEntry_value1;\n throw Object.defineProperty(new Error(`Invariant: app-route received invalid cache entry ${cacheEntry == null ? void 0 : (_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`), \"__NEXT_ERROR_CODE\", {\n value: \"E701\",\n enumerable: false,\n configurable: true\n });\n }\n if (!isMinimalMode) {\n res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT');\n }\n // Draft mode should never be cached\n if (isDraftMode) {\n res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate');\n }\n const headers = fromNodeOutgoingHttpHeaders(cacheEntry.value.headers);\n if (!(isMinimalMode && isIsr)) {\n headers.delete(NEXT_CACHE_TAGS_HEADER);\n }\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (cacheEntry.cacheControl && !res.getHeader('Cache-Control') && !headers.get('Cache-Control')) {\n headers.set('Cache-Control', getCacheControlHeader(cacheEntry.cacheControl));\n }\n await sendResponse(nodeNextReq, nodeNextRes, // @ts-expect-error - Argument of type 'Buffer<ArrayBufferLike>' is not assignable to parameter of type 'BodyInit | null | undefined'.\n new Response(cacheEntry.value.body, {\n headers,\n status: cacheEntry.value.status || 200\n }));\n return null;\n };\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (activeSpan) {\n await handleResponse(activeSpan);\n } else {\n await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(BaseServerSpan.handleRequest, {\n spanName: `${method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url\n }\n }, handleResponse));\n }\n } catch (err) {\n if (!(err instanceof NoFallbackError)) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n // rethrow so that we can handle serving error page\n // If this is during static generation, throw the error again.\n if (isIsr) throw err;\n // Otherwise, send a 500 response.\n await sendResponse(nodeNextReq, nodeNextRes, new Response(null, {\n status: 500\n }));\n return null;\n }\n}\n\n//# sourceMappingURL=app-route.js.map\n"],"names":[],"mappings":"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","ignoreList":[1]}
@@ -1,3 +1,3 @@
1
- module.exports=[86100,e=>{"use strict";var t=e.i(47909),i=e.i(74017),r=e.i(96250),n=e.i(59756),s=e.i(61916),a=e.i(74677),o=e.i(69741),l=e.i(16795),d=e.i(87718),u=e.i(95169),c=e.i(47587),p=e.i(66012),f=e.i(70101),h=e.i(26937),m=e.i(10372),S=e.i(93695);e.i(52474);var g=e.i(220);e.i(39354);var y=e.i(34959),v=e.i(33405),w=e.i(14747),E=e.i(99686),T=e.i(57181),R=e.i(74579);let b=new Map;function O(e){b.delete(e),b.delete(`child:${e}`)}function C(e,t){let i=Number(process.env[e]);return Number.isFinite(i)&&i>0?Math.floor(i):t}function I(e,t,i){let r;return Promise.race([e,new Promise((e,n)=>{r=setTimeout(()=>{n(Error(`${i} timed out after ${t}ms`))},t)})]).finally(()=>{r&&clearTimeout(r)})}let A=new Set(["awaiting-input","awaiting_input","input-required","input_required","requires-input","requires_input","blocked","paused"]);function U(e){return e.trim().toLowerCase()}function _(e){return A.has(U(e))}async function P(e,t,i){var r=(await I(e.session.messages({path:{id:t},query:{limit:8}}),i,`session.messages(${t})`)).data||[];let n=[];for(let e of r)for(let t of e.parts||[]){let e=t?.state?.status;if("string"==typeof e){let t=U(e);t&&n.push(t)}}return n}function N(e){return e.time?.updated||e.time?.created||0}function x(e){return"busy"===e||"retry"===e?e:"idle"}function F(e,t,i,r){let n=b.get(e)??{lastBusyAt:0,lastSeenAt:i};if("busy"===t)return n.lastBusyAt=i,n.lastSeenAt=i,b.set(e,n),t;if("retry"===t)return n.lastSeenAt=i,b.set(e,n),t;let s=n.lastBusyAt>0&&i-n.lastBusyAt<=r;return n.lastSeenAt=i,b.set(e,n),s?"busy":"idle"}function M(e,t){let i;for(let[i,r]of b){let n=e-r.lastSeenAt,s=t.has(i);(n>864e5||!s&&n>18e5)&&b.delete(i)}let r=Number.isFinite(i=Number(process.env.OPENCODE_STATUS_STICKY_MAX_ENTRIES))&&i>0?Math.floor(i):5e3;if(b.size<=r)return;let n=b.size-r,s=Array.from(b.entries()).sort((e,t)=>e[1].lastSeenAt-t[1].lastSeenAt),a=0;for(let[e]of s){if(a>=n)break;!t.has(e)&&(b.delete(e),a++)}if(!(a>=n))for(let[e]of s){if(a>=n)break;b.has(e)&&(b.delete(e),a++)}}function D(e,t,i=!1){return{id:e.id,slug:e.slug,title:e.title,directory:e.directory,debugReason:e.debugReason,parentID:e.parentID,time:e.time,realTimeStatus:t,waitingForUser:i}}function k(e,t){return!!((0,R.takeSessionStickyStatusBlocked)(e.id,t)||e.time?.archived)&&(function(e){for(let t of(O(e.id),(0,R.clearSessionForceUnarchived)(e.id),e.children))O(`child:${t.id}`),(0,R.clearSessionForceUnarchived)(t.id)}(e),!0)}function $(e,t,i){for(let r of e.children){if(r.time?.archived){O(`child:${r.id}`),(0,R.clearSessionForceUnarchived)(r.id);continue}let e=x(r.realTimeStatus),n=r.waitingForUser&&"idle"===e?"retry":e;r.realTimeStatus=F(`child:${r.id}`,n,t,i),("busy"===r.realTimeStatus||"retry"===r.realTimeStatus||r.waitingForUser)&&(0,R.markSessionForceUnarchived)(r.id,t)}let r=x(e.realTimeStatus),n=e.waitingForUser&&"idle"===r?"retry":r;e.realTimeStatus=F(e.id,n,t,i);let s=e.children.some(e=>"busy"===e.realTimeStatus||"retry"===e.realTimeStatus||e.waitingForUser);("busy"===e.realTimeStatus||"retry"===e.realTimeStatus||e.waitingForUser||s)&&(0,R.markSessionForceUnarchived)(e.id,t)}function q(e){return w.default.basename(e)}async function H(){let e=1e3;try{let t=await (0,T.readConfig)(),i=(t.vibepulse&&"object"==typeof t.vibepulse&&!Array.isArray(t.vibepulse)?t.vibepulse:{}).stickyBusyDelayMs;"number"==typeof i&&Number.isFinite(i)&&i>=0&&(e=i)}catch{}let{processes:t,timedOut:i}=(0,E.discoverOpencodeProcessCwdsWithoutPortWithMeta)(),r=new Map;for(let e of t)!(!e.cwd||e.cwd.startsWith("/private/tmp/opencode"))&&(r.has(e.cwd)||r.set(e.cwd,{pid:e.pid,directory:e.cwd,projectName:q(e.cwd),reason:"process_without_api_port"}));let{ports:n,timedOut:s}=(0,E.discoverOpencodePortsWithMeta)();if(!n.length){let e=Array.from(r.values());return s||i?Response.json({error:"OpenCode discovery timed out",hint:"Host process discovery exceeded timeout. Retry shortly, or increase OPENCODE_DISCOVERY_TIMEOUT_MS.",...e.length>0?{processHints:e}:{}},{status:503}):e.length>0?Response.json({sessions:[],processHints:e}):Response.json({error:"OpenCode server not found",hint:"Make sure OpenCode is running with an exposed API port. Example: opencode --port <PORT> (VibePulse auto-detects active ports)."},{status:503})}try{let t=await Promise.allSettled(n.map(async e=>{let t=(0,y.createOpencodeClient)({baseUrl:`http://localhost:${e}`}),i=await I(t.session.list(),j,`session.list(${e})`),r=await I(t.session.status(),B,`session.status(${e})`).catch(()=>({data:{}}));return{port:e,client:t,sessions:i.data||[],status:r.data||{}}})),i=[],s={},a={},o={},l=[];for(let e=0;e<t.length;e++){let r=t[e],d=n[e];if("fulfilled"!==r.status){l.push({port:d,reason:r.reason instanceof Error?r.reason.message:String(r.reason)});continue}for(let e of(i.push(...r.value.sessions),Object.assign(s,r.value.status),a[r.value.port]=r.value.client,r.value.sessions))e.id in o||(o[e.id]=r.value.port)}let d=new Set,u=i.filter(e=>!d.has(e.id)&&(d.add(e.id),!0)),c=u.filter(e=>!e.parentID),p=u.filter(e=>!!e.parentID),f=Date.now();for(let e of((0,R.pruneSessionForceUnarchived)(f),(0,R.pruneSessionStickyStatusBlocked)(f),c))e.time?.archived!==void 0&&(0,R.shouldForceSessionUnarchived)(e.id,f)&&(e.time={...e.time,archived:void 0});for(let e of p)e.time?.archived!==void 0&&(0,R.shouldForceSessionUnarchived)(e.id,f)&&(e.time={...e.time,archived:void 0});if(t.length>0&&l.length===t.length)return M(Date.now(),new Set),Response.json({error:"Failed to fetch sessions from OpenCode ports",hint:"All discovered OpenCode API ports timed out or failed. Retry shortly or increase OPENCODE_SESSIONS_LIST_TIMEOUT_MS.",failedPorts:l},{status:503});if(l.length>0&&0===c.length&&0===p.length){M(Date.now(),new Set);let e=Array.from(r.values());return Response.json({sessions:[],processHints:e,failedPorts:l,degraded:!0})}let h=c.map(e=>{let t=q(e.directory),i=function(e){if(!function(e){try{let t=(0,v.execSync)("git rev-parse --is-inside-work-tree",{cwd:e,encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1200});return"true"===t.trim()}catch{return!1}}(e))return null;try{return(0,v.execSync)("git branch --show-current",{cwd:e,encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1200}).trim()||null}catch{return null}}(e.directory);return{...e,projectName:t,branch:i,realTimeStatus:s[e.id]?.type||"idle",waitingForUser:!1,children:[]}}),m=new Map(h.map(e=>[e.id,e])),S=Date.now(),g=[];for(let e of p){let t=e.parentID?h.find(t=>t.id===e.parentID):null;if(!t){let i=h.filter(t=>t.directory===e.directory).sort((e,t)=>N(t)-N(e));t=i.find(e=>"busy"===e.realTimeStatus||"retry"===e.realTimeStatus)||i[0]}if(!t)continue;let i=s[e.id]?.type,r=N(e),n=r>0&&S-r<=18e5;if(!(e.time?.archived&&!i&&!n))if(i&&"idle"!==i)t.children.push(D(e,i));else{if(!n)continue;g.length<50&&g.push({parentId:t.id,child:e,childUpdatedAt:r})}}if(g.length>0)for(let e of(await Promise.allSettled(g.map(async({parentId:e,child:t,childUpdatedAt:i})=>{let r=o[t.id]??o[e],n=r?a[r]:void 0,s=i>0&&S-i<=12e4;if(!n)return{parentId:e,child:t,childStatus:s?"busy":"idle"};try{let r=await P(n,t.id,W),a=r.some(e=>"running"===e),o=!a&&r.some(_);return{parentId:e,child:t,childWaitingForUser:o,childStatus:o||a||i>0&&S-i<=3e5||s?"busy":"idle"}}catch{return{parentId:e,child:t,childWaitingForUser:!1,childStatus:s?"busy":"idle"}}})))){if("fulfilled"!==e.status||"idle"===e.value.childStatus)continue;let t=m.get(e.value.parentId);t&&t.children.push(D(e.value.child,e.value.childStatus,e.value.childWaitingForUser))}let w=h.filter(e=>{if("idle"!==e.realTimeStatus)return!1;let t=N(e);return t>0&&S-t<=18e5||!!e.time?.archived}).sort((e,t)=>N(t)-N(e)).slice(0,50);if(w.length>0)for(let e of(await Promise.allSettled(w.map(async e=>{let t=N(e),i=t>0&&S-t<=12e4,r=o[e.id],n=r?a[r]:void 0;if(!n)return{sessionId:e.id,status:i?"busy":"idle",waitingForUser:!1};try{let t,r=await P(n,e.id,W),s=r.some(e=>"running"===e),a=!s&&r.some(_),o=r.length>0&&r.every(e=>"completed"===e),l=!!(t=e.time?.updated)&&S-t<=3e4;return{sessionId:e.id,status:s||a?"busy":o&&!l?"idle":i||l?"busy":"idle",waitingForUser:a}}catch{return{sessionId:e.id,status:i?"busy":"idle",waitingForUser:!1}}})))){if("fulfilled"!==e.status||"idle"===e.value.status)continue;let t=m.get(e.value.sessionId);t&&(t.realTimeStatus=e.value.status,e.value.waitingForUser&&(t.waitingForUser=!0))}for(let e of h)e.children.length>0&&e.children.sort((e,t)=>{let i="busy"===e.realTimeStatus||"retry"===e.realTimeStatus,r="busy"===t.realTimeStatus||"retry"===t.realTimeStatus;if(i&&!r)return -1;if(!i&&r)return 1;let n=e.time?.updated||e.time?.created||0;return(t.time?.updated||t.time?.created||0)-n});let E=h.filter(e=>"busy"===e.realTimeStatus||!!e.time?.archived||e.children.some(e=>"busy"===e.realTimeStatus||"retry"===e.realTimeStatus));if(E.length>0){for(let e of(await Promise.allSettled(E.map(async e=>{let t=o[e.id],i=t?a[t]:void 0;if(!i)return{sessionId:e.id,parentWaiting:!1,waiting:!1,running:!1,waitingChildIds:new Set};try{let t=await P(i,e.id,W),r=t.some(e=>"running"===e),n=!r&&t.some(_),s=await Promise.allSettled(e.children.filter(e=>"busy"===e.realTimeStatus||"retry"===e.realTimeStatus).map(async t=>{let i=o[t.id]??o[e.id],r=i?a[i]:void 0;if(!r)return{childId:t.id,waiting:!1};try{let e=await P(r,t.id,W),i=e.some(e=>"running"===e);return{childId:t.id,waiting:!i&&e.some(_)}}catch{return{childId:t.id,waiting:!1}}})),l=new Set(s.filter(e=>"fulfilled"===e.status).filter(e=>e.value.waiting).map(e=>e.value.childId)),d=l.size>0||e.children.some(e=>e.waitingForUser||"retry"===e.realTimeStatus);return{sessionId:e.id,parentWaiting:n,waiting:n||d,running:r,waitingChildIds:l}}catch{return{sessionId:e.id,parentWaiting:!1,waiting:!1,running:!1,waitingChildIds:new Set}}}))))if("fulfilled"===e.status){let t=h.find(t=>t.id===e.value.sessionId);if(!t)continue;for(let i of t.children)e.value.waitingChildIds.has(i.id)&&(i.waitingForUser=!0);e.value.running&&(t.realTimeStatus="busy"),e.value.parentWaiting&&(t.waitingForUser=!0)}}let T=Date.now(),b=new Set;for(let e of h)for(let t of(b.add(e.id),e.children))b.add(`child:${t.id}`);for(let t of h)k(t,T)||$(t,T,e);M(T,b);let O=new Set;for(let e of u)e.directory&&O.add(e.directory);let C=Array.from(r.values()).filter(e=>!O.has(e.directory)),A={sessions:h,processHints:C};return l.length>0&&(A.failedPorts=l,A.degraded=!0),Response.json(A)}catch(e){return console.error("Error fetching sessions:",e),Response.json({error:"Failed to fetch sessions",details:e instanceof Error?e.message:String(e),hint:"Make sure OpenCode is running with an exposed API port. Example: opencode --port <PORT> (VibePulse auto-detects active ports)."},{status:500})}}let j=C("OPENCODE_SESSIONS_LIST_TIMEOUT_MS",6e3),B=C("OPENCODE_SESSIONS_STATUS_TIMEOUT_MS",4e3),W=C("OPENCODE_SESSIONS_MESSAGES_TIMEOUT_MS",2500);e.s(["GET",()=>H,"applyStickyBusyStatus",()=>F,"applyStickyStatusStabilization",()=>$,"shouldSkipSessionStatusStabilization",()=>k],72626);var K=e.i(72626);let L=new t.AppRouteRouteModule({definition:{kind:i.RouteKind.APP_ROUTE,page:"/api/sessions/route",pathname:"/api/sessions",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/sessions/route.ts",nextConfigOutput:"standalone",userland:K}),{workAsyncStorage:z,workUnitAsyncStorage:V,serverHooks:G}=L;function X(){return(0,r.patchFetch)({workAsyncStorage:z,workUnitAsyncStorage:V})}async function Y(e,t,r){L.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let y="/api/sessions/route";y=y.replace(/\/index$/,"")||"/";let v=await L.prepare(e,t,{srcPage:y,multiZoneDraftMode:!1});if(!v)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:w,params:E,nextConfig:T,parsedUrl:R,isDraftMode:b,prerenderManifest:O,routerServerContext:C,isOnDemandRevalidate:I,revalidateOnlyGenerated:A,resolvedPathname:U,clientReferenceManifest:_,serverActionsManifest:P}=v,N=(0,o.normalizeAppPath)(y),x=!!(O.dynamicRoutes[N]||O.routes[U]),F=async()=>((null==C?void 0:C.render404)?await C.render404(e,t,R,!1):t.end("This page could not be found"),null);if(x&&!b){let e=!!O.routes[U],t=O.dynamicRoutes[N];if(t&&!1===t.fallback&&!e){if(T.experimental.adapterPath)return await F();throw new S.NoFallbackError}}let M=null;!x||L.isDev||b||(M="/index"===(M=U)?"/":M);let D=!0===L.isDev||!x,k=x&&!D;P&&_&&(0,a.setManifestsSingleton)({page:y,clientReferenceManifest:_,serverActionsManifest:P});let $=e.method||"GET",q=(0,s.getTracer)(),H=q.getActiveScopeSpan(),j={params:E,prerenderManifest:O,renderOpts:{experimental:{authInterrupts:!!T.experimental.authInterrupts},cacheComponents:!!T.cacheComponents,supportsDynamicResponse:D,incrementalCache:(0,n.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:T.cacheLife,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,i,r,n)=>L.onRequestError(e,t,r,n,C)},sharedContext:{buildId:w}},B=new l.NodeNextRequest(e),W=new l.NodeNextResponse(t),K=d.NextRequestAdapter.fromNodeNextRequest(B,(0,d.signalFromNodeResponse)(t));try{let a=async e=>L.handle(K,j).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let i=q.getRootSpanAttributes();if(!i)return;if(i.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${i.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=i.get("next.route");if(r){let t=`${$} ${r}`;e.setAttributes({"next.route":r,"http.route":r,"next.span_name":t}),e.updateName(t)}else e.updateName(`${$} ${y}`)}),o=!!(0,n.getRequestMeta)(e,"minimalMode"),l=async n=>{var s,l;let d=async({previousCacheEntry:i})=>{try{if(!o&&I&&A&&!i)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await a(n);e.fetchMetrics=j.renderOpts.fetchMetrics;let l=j.renderOpts.pendingWaitUntil;l&&r.waitUntil&&(r.waitUntil(l),l=void 0);let d=j.renderOpts.collectedTags;if(!x)return await (0,p.sendResponse)(B,W,s,j.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(s.headers);d&&(t[m.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let i=void 0!==j.renderOpts.collectedRevalidate&&!(j.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&j.renderOpts.collectedRevalidate,r=void 0===j.renderOpts.collectedExpire||j.renderOpts.collectedExpire>=m.INFINITE_CACHE?void 0:j.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:i,expire:r}}}}catch(t){throw(null==i?void 0:i.isStale)&&await L.onRequestError(e,t,{routerKind:"App Router",routePath:y,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:k,isOnDemandRevalidate:I})},!1,C),t}},u=await L.handleResponse({req:e,nextConfig:T,cacheKey:M,routeKind:i.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:O,isRoutePPREnabled:!1,isOnDemandRevalidate:I,revalidateOnlyGenerated:A,responseGenerator:d,waitUntil:r.waitUntil,isMinimalMode:o});if(!x)return null;if((null==u||null==(s=u.value)?void 0:s.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==u||null==(l=u.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});o||t.setHeader("x-nextjs-cache",I?"REVALIDATED":u.isMiss?"MISS":u.isStale?"STALE":"HIT"),b&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let S=(0,f.fromNodeOutgoingHttpHeaders)(u.value.headers);return o&&x||S.delete(m.NEXT_CACHE_TAGS_HEADER),!u.cacheControl||t.getHeader("Cache-Control")||S.get("Cache-Control")||S.set("Cache-Control",(0,h.getCacheControlHeader)(u.cacheControl)),await (0,p.sendResponse)(B,W,new Response(u.value.body,{headers:S,status:u.value.status||200})),null};H?await l(H):await q.withPropagatedContext(e.headers,()=>q.trace(u.BaseServerSpan.handleRequest,{spanName:`${$} ${y}`,kind:s.SpanKind.SERVER,attributes:{"http.method":$,"http.target":e.url}},l))}catch(t){if(t instanceof S.NoFallbackError||await L.onRequestError(e,t,{routerKind:"App Router",routePath:N,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:k,isOnDemandRevalidate:I})},!1,C),x)throw t;return await (0,p.sendResponse)(B,W,new Response(null,{status:500})),null}}e.s(["handler",()=>Y,"patchFetch",()=>X,"routeModule",()=>L,"serverHooks",()=>G,"workAsyncStorage",()=>z,"workUnitAsyncStorage",()=>V],86100)}];
1
+ module.exports=[86100,e=>{"use strict";var t=e.i(47909),r=e.i(74017),s=e.i(96250),i=e.i(59756),n=e.i(61916),a=e.i(74677),o=e.i(69741),l=e.i(16795),d=e.i(87718),u=e.i(95169),c=e.i(47587),p=e.i(66012),f=e.i(70101),h=e.i(26937),y=e.i(10372),g=e.i(93695);e.i(52474);var m=e.i(220);e.i(39354);var S=e.i(34959),w=e.i(33405),v=e.i(14747),b=e.i(99686),I=e.i(57181),E=e.i(74579),T=e.i(586),R=e.i(68817),A=e.i(82414),O=e.i(81951);let _=H("OPENCODE_SESSIONS_LIST_TIMEOUT_MS",6e3),C=H("OPENCODE_SESSIONS_STATUS_TIMEOUT_MS",4e3),U=H("OPENCODE_SESSIONS_MESSAGES_TIMEOUT_MS",2500),P=H("VIBEPULSE_NODE_SESSIONS_TIMEOUT_MS",6e3),M=new Map;function N(e){M.delete(e),M.delete(`child:${e}`)}let D={hostId:"local",hostLabel:"Local",hostKind:"local"};async function F(){return ef()}async function x(e){return eh(e)}function H(e,t){let r=Number(process.env[e]);return Number.isFinite(r)&&r>0?Math.floor(r):t}function k(e,t,r){let s,i=Error(`${r} timed out after ${t}ms`),n=new AbortController,a=new Promise((e,r)=>{s=setTimeout(()=>{n.abort(),r(i)},t)});return Promise.race([e(n.signal).catch(e=>{if(n.signal.aborted)throw i;throw e}),a]).finally(()=>{s&&clearTimeout(s)})}let K=new Set(["awaiting-input","awaiting_input","input-required","input_required","requires-input","requires_input","blocked","paused"]);function L(e){return e.trim().toLowerCase()}function $(e){return K.has(L(e))}async function j(e,t,r){var s=(await k(r=>e.session.messages({path:{id:t},query:{limit:8},signal:r}),r,`session.messages(${t})`)).data||[];let i=[];for(let e of s)for(let t of e.parts||[]){let e=t?.state?.status;if("string"==typeof e){let t=L(e);t&&i.push(t)}}return i}function q(e){return e.time?.updated||e.time?.created||0}function B(e){return"busy"===e||"retry"===e?e:"idle"}function W(e,t,r,s){let i=M.get(e)??{lastBusyAt:0,lastSeenAt:r};if("busy"===t)return i.lastBusyAt=r,i.lastSeenAt=r,M.set(e,i),t;if("retry"===t)return i.lastSeenAt=r,M.set(e,i),t;let n=i.lastBusyAt>0&&r-i.lastBusyAt<=s;return i.lastSeenAt=r,M.set(e,i),n?"busy":"idle"}function V(e,t){let r;for(let[r,s]of M){let i=e-s.lastSeenAt,n=t.has(r);(i>864e5||!n&&i>18e5)&&M.delete(r)}let s=Number.isFinite(r=Number(process.env.OPENCODE_STATUS_STICKY_MAX_ENTRIES))&&r>0?Math.floor(r):5e3;if(M.size<=s)return;let i=M.size-s,n=Array.from(M.entries()).sort((e,t)=>e[1].lastSeenAt-t[1].lastSeenAt),a=0;for(let[e]of n){if(a>=i)break;!t.has(e)&&(M.delete(e),a++)}if(!(a>=i))for(let[e]of n){if(a>=i)break;M.has(e)&&(M.delete(e),a++)}}function z(e,t,r=!1){return{id:e.id,slug:e.slug,title:e.title,directory:e.directory,debugReason:e.debugReason,parentID:e.parentID,time:e.time,realTimeStatus:t,waitingForUser:r}}function G(e,t){return!!((0,E.takeSessionStickyStatusBlocked)(e.id,t)||e.time?.archived)&&(function(e){for(let t of(N(e.id),(0,E.clearSessionForceUnarchived)(e.id),e.children))N(`child:${t.id}`),(0,E.clearSessionForceUnarchived)(t.id)}(e),!0)}function X(e,t,r){for(let s of e.children){if(s.time?.archived){N(`child:${s.id}`),(0,E.clearSessionForceUnarchived)(s.id);continue}let e=B(s.realTimeStatus),i=s.waitingForUser&&"idle"===e?"retry":e;s.realTimeStatus=W(`child:${s.id}`,i,t,r),("busy"===s.realTimeStatus||"retry"===s.realTimeStatus||s.waitingForUser)&&(0,E.markSessionForceUnarchived)(s.id,t)}let s=B(e.realTimeStatus),i=e.waitingForUser&&"idle"===s?"retry":s;e.realTimeStatus=W(e.id,i,t,r);let n=e.children.some(e=>"busy"===e.realTimeStatus||"retry"===e.realTimeStatus||e.waitingForUser);("busy"===e.realTimeStatus||"retry"===e.realTimeStatus||e.waitingForUser||n)&&(0,E.markSessionForceUnarchived)(e.id,t)}function Y(e){return v.default.basename(e)}async function J(){let e=1e3;try{let t=await (0,I.readConfig)(),r=(t.vibepulse&&"object"==typeof t.vibepulse&&!Array.isArray(t.vibepulse)?t.vibepulse:{}).stickyBusyDelayMs;"number"==typeof r&&Number.isFinite(r)&&r>=0&&(e=r)}catch{}return e}function Z(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function Q(e){return"remote"===e.hostKind}function ee(e){return"idle"===e||"busy"===e||"retry"===e}function et(e){if(!Z(e))return!1;let t=e.created,r=e.updated,s=e.archived;return"number"==typeof t&&"number"==typeof r&&(void 0===s||"number"==typeof s)}function er(e){if(!Z(e))return null;let t="string"==typeof e.hostId?e.hostId.trim():e.hostId,r="string"==typeof e.hostLabel?e.hostLabel.trim():e.hostLabel,s=e.hostKind;if(t===D.hostId&&r===D.hostLabel&&s===D.hostKind)return D;let i=e.baseUrl,n=e.enabled;if("string"!=typeof t||"string"!=typeof r||"remote"!==s||"string"!=typeof i||"boolean"!=typeof n)return null;let a=function(e){let t=e.trim();if(!t)return null;try{let e=new URL(t);if("http:"!==e.protocol&&"https:"!==e.protocol||e.username||e.password)return null;return e.hash="",e.toString().replace(/\/+$/,"")}catch{return null}}(i);return a?{hostId:t,hostLabel:r,hostKind:s,baseUrl:a,enabled:n}:null}function es(e){return e.status?Response.json(e.payload,{status:e.status}):Response.json(e.payload)}function ei(e,t){return{hostId:e.hostId,hostLabel:e.hostLabel,hostKind:e.hostKind,online:t.online,...t.degraded?{degraded:!0}:{},...t.reason?{reason:t.reason}:{},...Q(e)?{baseUrl:e.baseUrl}:{}}}function en(e,t){return{...e,hosts:t,hostStatuses:t}}function ea(e){if(!e.includes(":"))return e;try{return(0,T.parseSourceKey)(e).sessionId}catch{return e}}function eo(e,t){try{return(0,T.composeSourceKey)(e,t)}catch{return}}function el(e,t){let r=e.rawSessionId??ea(e.id),s=e.parentID?ea(e.parentID):e.parentID,i=eo(t.hostId,r);if(!i)return null;let n=s?eo(t.hostId,s)??void 0:void 0,a=[];for(let r of e.children){let e=function(e,t){let r=e.rawSessionId??ea(e.id),s=e.parentID?ea(e.parentID):e.parentID,i=eo(t.hostId,r);if(!i)return null;let n=s?eo(t.hostId,s)??void 0:void 0;return{...e,id:i,parentID:n,hostId:t.hostId,hostLabel:t.hostLabel,hostKind:t.hostKind,rawSessionId:r,sourceSessionKey:i,readOnly:"remote"===t.hostKind}}(r,t);e&&a.push(e)}return{...e,id:i,parentID:n,hostId:t.hostId,hostLabel:t.hostLabel,hostKind:t.hostKind,rawSessionId:r,sourceSessionKey:i,readOnly:"remote"===t.hostKind,children:a}}async function ed(e){try{return await e.json()}catch{return null}}async function eu(e,t){let r=`node.sessions(${e.hostId})`,s=new AbortController,i=!1,n=setTimeout(()=>{i=!0,s.abort()},P);try{return await fetch(`${t.baseUrl}/api/node/sessions`,{method:"GET",headers:(0,R.createNodeRequestHeaders)(t.token),signal:s.signal})}catch(e){if(i)throw Error(`${r} timed out after ${P}ms`);throw e}finally{clearTimeout(n)}}async function ec(e,t){if(!t)return{payload:{sessions:[],processHints:[],degraded:!0},sourceMeta:{online:!1,degraded:!0,reason:"node_not_configured"}};if(!t.enabled)return{payload:{sessions:[],processHints:[],degraded:!0},sourceMeta:{online:!1,degraded:!0,reason:"node_disabled"}};try{let r=await eu(e,t),s=await ed(r);if(!r.ok){let e=Z(s)&&"string"==typeof s.reason?s.reason:`node_request_failed_${r.status}`;return{payload:{sessions:[],processHints:[],degraded:!0},sourceMeta:{online:!0,degraded:!0,reason:e}}}let i=function(e){if(!Z(e)||!0!==e.ok||"node"!==e.role||e.protocolVersion!==R.NODE_PROTOCOL_VERSION)return null;let t=e.source;if(!Z(t)||"local"!==t.hostId||"Local"!==t.hostLabel||"local"!==t.hostKind)return null;let r=e.upstream;if(!Z(r)||"opencode"!==r.kind||"boolean"!=typeof r.reachable)return null;let s=e.sessions,i=e.processHints;return!Array.isArray(s)||s.some(e=>!function(e){if(!Z(e)||"string"!=typeof e.id||"string"!=typeof e.directory||"string"!=typeof e.projectName)return!1;let t=e.branch;if(null!=t&&"string"!=typeof t||!ee(e.realTimeStatus)||"boolean"!=typeof e.waitingForUser)return!1;let r=e.children;if(!Array.isArray(r)||r.some(e=>!function(e){if(!Z(e)||"string"!=typeof e.id||!ee(e.realTimeStatus)||"boolean"!=typeof e.waitingForUser)return!1;let t=e.parentID,r=e.directory,s=e.time;return(void 0===t||"string"==typeof t)&&(void 0===r||"string"==typeof r)&&(void 0===s||!!et(s))}(e)))return!1;let s=e.time;return void 0===s||!!et(s)}(e))||!Array.isArray(i)||i.some(e=>!(Z(e)&&"number"==typeof e.pid&&"string"==typeof e.directory&&"string"==typeof e.projectName&&"process_without_api_port"===e.reason))?null:{sessions:s,processHints:i,degraded:!0===e.degraded}}(s);if(!i)return{payload:{sessions:[],processHints:[],degraded:!0},sourceMeta:{online:!0,degraded:!0,reason:"node_payload_invalid"}};return{payload:{sessions:i.sessions,processHints:i.processHints,...i.degraded?{degraded:!0}:{}},sourceMeta:{online:!0,...i.degraded?{degraded:!0}:{}}}}catch(e){return{payload:{sessions:[],processHints:[],degraded:!0},sourceMeta:{online:!1,degraded:!0,reason:e instanceof Error?e.message:String(e)}}}}async function ep(e){let{processes:t,timedOut:r}=(0,b.discoverOpencodeProcessCwdsWithoutPortWithMeta)(),s=new Map;for(let e of t)!(!e.cwd||e.cwd.startsWith("/private/tmp/opencode"))&&(s.has(e.cwd)||s.set(e.cwd,{pid:e.pid,directory:e.cwd,projectName:Y(e.cwd),reason:"process_without_api_port"}));let{ports:i,timedOut:n}=(0,b.discoverOpencodePortsWithMeta)();if(!i.length){let e=Array.from(s.values());return n||r?{payload:{error:"OpenCode discovery timed out",hint:"Host process discovery exceeded timeout. Retry shortly, or increase OPENCODE_DISCOVERY_TIMEOUT_MS.",...e.length>0?{processHints:e}:{}},status:503,sourceMeta:{online:!1,degraded:!0,reason:"OpenCode discovery timed out"}}:e.length>0?{payload:{sessions:[],processHints:e},sourceMeta:{online:!1,reason:"OpenCode server not found"}}:{payload:{error:"OpenCode server not found",hint:"Make sure OpenCode is running with an exposed API port. Example: opencode --port <PORT> (VibePulse auto-detects active ports)."},status:503,sourceMeta:{online:!1,reason:"OpenCode server not found"}}}try{let t=await Promise.allSettled(i.map(async e=>{let t=(0,S.createOpencodeClient)({baseUrl:`http://localhost:${e}`}),r=await k(e=>t.session.list({signal:e}),_,`session.list(${e})`),s=await k(e=>t.session.status({signal:e}),C,`session.status(${e})`).catch(()=>({data:{}}));return{port:e,client:t,sessions:r.data||[],status:s.data||{}}})),r=[],n={},a={},o={},l=[];for(let e=0;e<t.length;e++){let s=t[e],d=i[e];if("fulfilled"!==s.status){l.push({port:d,reason:s.reason instanceof Error?s.reason.message:String(s.reason)});continue}for(let e of(r.push(...s.value.sessions),Object.assign(n,s.value.status),a[s.value.port]=s.value.client,s.value.sessions))e.id in o||(o[e.id]=s.value.port)}let d=new Set,u=r.filter(e=>!d.has(e.id)&&(d.add(e.id),!0)),c=u.filter(e=>!e.parentID),p=u.filter(e=>!!e.parentID),f=Date.now();for(let e of((0,E.pruneSessionForceUnarchived)(f),(0,E.pruneSessionStickyStatusBlocked)(f),c))e.time?.archived!==void 0&&(0,E.shouldForceSessionUnarchived)(e.id,f)&&(e.time={...e.time,archived:void 0});for(let e of p)e.time?.archived!==void 0&&(0,E.shouldForceSessionUnarchived)(e.id,f)&&(e.time={...e.time,archived:void 0});if(t.length>0&&l.length===t.length)return V(Date.now(),new Set),{payload:{error:"Failed to fetch sessions from OpenCode ports",hint:"All discovered OpenCode API ports timed out or failed. Retry shortly or increase OPENCODE_SESSIONS_LIST_TIMEOUT_MS.",failedPorts:l},status:503,sourceMeta:{online:!1,degraded:!0,reason:"Failed to fetch sessions from OpenCode ports"}};if(l.length>0&&0===c.length&&0===p.length){V(Date.now(),new Set);let e=Array.from(s.values());return{payload:{sessions:[],processHints:e,failedPorts:l,degraded:!0},sourceMeta:{online:!0,degraded:!0}}}let h=c.map(e=>{let t=Y(e.directory),r=function(e){if(!function(e){try{let t=(0,w.execSync)("git rev-parse --is-inside-work-tree",{cwd:e,encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1200});return"true"===t.trim()}catch{return!1}}(e))return null;try{return(0,w.execSync)("git branch --show-current",{cwd:e,encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1200}).trim()||null}catch{return null}}(e.directory);return{...e,projectName:t,branch:r,realTimeStatus:n[e.id]?.type||"idle",waitingForUser:!1,children:[]}}),y=new Map(h.map(e=>[e.id,e])),g=Date.now(),m=[];for(let e of p){let t=e.parentID?h.find(t=>t.id===e.parentID):null;if(!t){let r=h.filter(t=>t.directory===e.directory).sort((e,t)=>q(t)-q(e));t=r.find(e=>"busy"===e.realTimeStatus||"retry"===e.realTimeStatus)||r[0]}if(!t)continue;let r=n[e.id]?.type,s=q(e),i=s>0&&g-s<=18e5;if(!(e.time?.archived&&!r&&!i))if(r&&"idle"!==r)t.children.push(z(e,r));else{if(!i)continue;m.length<50&&m.push({parentId:t.id,child:e,childUpdatedAt:s})}}if(m.length>0)for(let e of(await Promise.allSettled(m.map(async({parentId:e,child:t,childUpdatedAt:r})=>{let s=o[t.id]??o[e],i=s?a[s]:void 0,n=r>0&&g-r<=12e4;if(!i)return{parentId:e,child:t,childStatus:n?"busy":"idle"};try{let s=await j(i,t.id,U),a=s.some(e=>"running"===e),o=!a&&s.some($);return{parentId:e,child:t,childWaitingForUser:o,childStatus:o||a||r>0&&g-r<=3e5||n?"busy":"idle"}}catch{return{parentId:e,child:t,childWaitingForUser:!1,childStatus:n?"busy":"idle"}}})))){if("fulfilled"!==e.status||"idle"===e.value.childStatus)continue;let t=y.get(e.value.parentId);t&&t.children.push(z(e.value.child,e.value.childStatus,e.value.childWaitingForUser))}let v=h.filter(e=>{if("idle"!==e.realTimeStatus)return!1;let t=q(e);return t>0&&g-t<=18e5||!!e.time?.archived}).sort((e,t)=>q(t)-q(e)).slice(0,50);if(v.length>0)for(let e of(await Promise.allSettled(v.map(async e=>{let t=q(e),r=t>0&&g-t<=12e4,s=o[e.id],i=s?a[s]:void 0;if(!i)return{sessionId:e.id,status:r?"busy":"idle",waitingForUser:!1};try{let t,s=await j(i,e.id,U),n=s.some(e=>"running"===e),a=!n&&s.some($),o=s.length>0&&s.every(e=>"completed"===e),l=!!(t=e.time?.updated)&&g-t<=3e4;return{sessionId:e.id,status:n||a?"busy":o&&!l?"idle":r||l?"busy":"idle",waitingForUser:a}}catch{return{sessionId:e.id,status:r?"busy":"idle",waitingForUser:!1}}})))){if("fulfilled"!==e.status||"idle"===e.value.status)continue;let t=y.get(e.value.sessionId);t&&(t.realTimeStatus=e.value.status,e.value.waitingForUser&&(t.waitingForUser=!0))}for(let e of h)e.children.length>0&&e.children.sort((e,t)=>{let r="busy"===e.realTimeStatus||"retry"===e.realTimeStatus,s="busy"===t.realTimeStatus||"retry"===t.realTimeStatus;if(r&&!s)return -1;if(!r&&s)return 1;let i=e.time?.updated||e.time?.created||0;return(t.time?.updated||t.time?.created||0)-i});let b=h.filter(e=>"busy"===e.realTimeStatus||!!e.time?.archived||e.children.some(e=>"busy"===e.realTimeStatus||"retry"===e.realTimeStatus));if(b.length>0){for(let e of(await Promise.allSettled(b.map(async e=>{let t=o[e.id],r=t?a[t]:void 0;if(!r)return{sessionId:e.id,parentWaiting:!1,waiting:!1,running:!1,waitingChildIds:new Set};try{let t=await j(r,e.id,U),s=t.some(e=>"running"===e),i=!s&&t.some($),n=await Promise.allSettled(e.children.filter(e=>"busy"===e.realTimeStatus||"retry"===e.realTimeStatus).map(async t=>{let r=o[t.id]??o[e.id],s=r?a[r]:void 0;if(!s)return{childId:t.id,waiting:!1};try{let e=await j(s,t.id,U),r=e.some(e=>"running"===e);return{childId:t.id,waiting:!r&&e.some($)}}catch{return{childId:t.id,waiting:!1}}})),l=new Set(n.filter(e=>"fulfilled"===e.status).filter(e=>e.value.waiting).map(e=>e.value.childId)),d=l.size>0||e.children.some(e=>e.waitingForUser||"retry"===e.realTimeStatus);return{sessionId:e.id,parentWaiting:i,waiting:i||d,running:s,waitingChildIds:l}}catch{return{sessionId:e.id,parentWaiting:!1,waiting:!1,running:!1,waitingChildIds:new Set}}}))))if("fulfilled"===e.status){let t=h.find(t=>t.id===e.value.sessionId);if(!t)continue;for(let r of t.children)e.value.waitingChildIds.has(r.id)&&(r.waitingForUser=!0);e.value.running&&(t.realTimeStatus="busy"),e.value.parentWaiting&&(t.waitingForUser=!0)}}let I=Date.now(),T=new Set;for(let e of h)for(let t of(T.add(e.id),e.children))T.add(`child:${t.id}`);for(let t of h)G(t,I)||X(t,I,e);V(I,T);let R=new Set;for(let e of u)e.directory&&R.add(e.directory);let A=Array.from(s.values()).filter(e=>!R.has(e.directory)),O={sessions:h,processHints:A};return l.length>0&&(O.failedPorts=l,O.degraded=!0),{payload:O,sourceMeta:{online:!0,...l.length>0?{degraded:!0}:{}}}}catch(e){return console.error("Error fetching sessions:",e),{payload:{error:"Failed to fetch sessions",details:e instanceof Error?e.message:String(e),hint:"Make sure OpenCode is running with an exposed API port. Example: opencode --port <PORT> (VibePulse auto-detects active ports)."},status:500,sourceMeta:{online:!1,degraded:!0,reason:"Failed to fetch sessions"}}}}async function ef(){let e=await J();return es(await ep(e))}async function eh(e){let t;try{let r=await e.json();t=function(e){if(!Z(e)||!Array.isArray(e.sources)||0===e.sources.length)throw Error("Invalid sources payload");let t=e.sources.map(er);if(t.some(e=>null===e))throw Error("Invalid sources payload");return t}(r)}catch{return Response.json({error:"Invalid sources payload",hint:"POST /api/sessions expects a JSON body with a non-empty sources array."},{status:400})}let r="node"===process.env[O.RUNTIME_ROLE_ENV_VAR]?[D]:t.filter(e=>"local"===e.hostKind||e.enabled);if(0===r.length)return Response.json({sessions:[],processHints:[],hosts:[],hostStatuses:[]});if(1===r.length&&"local"===r[0].hostKind){let e=await J(),t=await ep(e),r=t.sourceMeta??{online:!t.status,...t.status?{degraded:!0}:{}},s=r.online?r:{...r,degraded:!0},i=ei(D,s),n=!s.online&&Z(t.payload)?en({sessions:[],processHints:Array.isArray(t.payload.processHints)?t.payload.processHints:[],degraded:!0},[i]):null;if(n){let e=t.status??503;return Response.json(n,{status:e})}return es({...t,payload:Z(t.payload)?en(function(e,t){if(!Array.isArray(e.sessions))return e;let r=[],s=0;for(let i of e.sessions){let e=el(i,t);if(e){r.push(e);continue}s+=1}let i=!0===e.degraded;return{...e,sessions:r,...i||s>0?{degraded:!0}:{}}}(t.payload,D),[i]):t.payload})}let s=r.some(e=>"local"===e.hostKind)?await J():0,i=new Map((await (0,A.listNodeRecords)()).map(e=>[e.nodeId,e])),n=r.map(e=>{if(!Q(e))return e;let t=i.get(e.hostId);return t?{...e,baseUrl:t.baseUrl,enabled:t.enabled}:e}),a=await Promise.allSettled(n.map(async e=>({source:e,result:"local"===e.hostKind?await ep(s):await ec(e,i.get(e.hostId))}))),o=[],l=[],d=[],u=!1;for(let e of a){if("fulfilled"!==e.status){u=!0;continue}let{source:t,result:r}=e.value,s=r.sourceMeta??{online:!r.status,...r.status?{degraded:!0}:{}},i=function(e){if(!Z(e.payload))return{sessions:[],processHints:[]};let t=Array.isArray(e.payload.sessions)?e.payload.sessions:[],r=Array.isArray(e.payload.processHints)?e.payload.processHints:[],s=Array.isArray(e.payload.failedPorts)?e.payload.failedPorts:void 0,i=!0===e.payload.degraded;return{sessions:t,processHints:r,...s?{failedPorts:s}:{},...i?{degraded:!0}:{}}}(r),n=!1;for(let e of(d.push(...i.processHints),i.sessions)){let r=el(e,t);if(r){l.push(r);continue}n=!0}let a=n?{...s,degraded:!0,reason:s.reason??"node_payload_invalid_session_id"}:s;o.push(ei(t,a)),(!a.online||a.degraded||i.degraded)&&(u=!0)}return Response.json({sessions:l,processHints:d,hosts:o,hostStatuses:o,...u?{degraded:!0}:{}})}e.s(["GET",()=>F,"POST",()=>x,"applyStickyBusyStatus",()=>W,"applyStickyStatusStabilization",()=>X,"dynamic",0,"force-dynamic","shouldSkipSessionStatusStabilization",()=>G],72626);var ey=e.i(72626);let eg=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/sessions/route",pathname:"/api/sessions",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/sessions/route.ts",nextConfigOutput:"standalone",userland:ey}),{workAsyncStorage:em,workUnitAsyncStorage:eS,serverHooks:ew}=eg;function ev(){return(0,s.patchFetch)({workAsyncStorage:em,workUnitAsyncStorage:eS})}async function eb(e,t,s){eg.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let S="/api/sessions/route";S=S.replace(/\/index$/,"")||"/";let w=await eg.prepare(e,t,{srcPage:S,multiZoneDraftMode:!1});if(!w)return t.statusCode=400,t.end("Bad Request"),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve()),null;let{buildId:v,params:b,nextConfig:I,parsedUrl:E,isDraftMode:T,prerenderManifest:R,routerServerContext:A,isOnDemandRevalidate:O,revalidateOnlyGenerated:_,resolvedPathname:C,clientReferenceManifest:U,serverActionsManifest:P}=w,M=(0,o.normalizeAppPath)(S),N=!!(R.dynamicRoutes[M]||R.routes[C]),D=async()=>((null==A?void 0:A.render404)?await A.render404(e,t,E,!1):t.end("This page could not be found"),null);if(N&&!T){let e=!!R.routes[C],t=R.dynamicRoutes[M];if(t&&!1===t.fallback&&!e){if(I.experimental.adapterPath)return await D();throw new g.NoFallbackError}}let F=null;!N||eg.isDev||T||(F="/index"===(F=C)?"/":F);let x=!0===eg.isDev||!N,H=N&&!x;P&&U&&(0,a.setManifestsSingleton)({page:S,clientReferenceManifest:U,serverActionsManifest:P});let k=e.method||"GET",K=(0,n.getTracer)(),L=K.getActiveScopeSpan(),$={params:b,prerenderManifest:R,renderOpts:{experimental:{authInterrupts:!!I.experimental.authInterrupts},cacheComponents:!!I.cacheComponents,supportsDynamicResponse:x,incrementalCache:(0,i.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:I.cacheLife,waitUntil:s.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,s,i)=>eg.onRequestError(e,t,s,i,A)},sharedContext:{buildId:v}},j=new l.NodeNextRequest(e),q=new l.NodeNextResponse(t),B=d.NextRequestAdapter.fromNodeNextRequest(j,(0,d.signalFromNodeResponse)(t));try{let a=async e=>eg.handle(B,$).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=K.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=r.get("next.route");if(s){let t=`${k} ${s}`;e.setAttributes({"next.route":s,"http.route":s,"next.span_name":t}),e.updateName(t)}else e.updateName(`${k} ${S}`)}),o=!!(0,i.getRequestMeta)(e,"minimalMode"),l=async i=>{var n,l;let d=async({previousCacheEntry:r})=>{try{if(!o&&O&&_&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await a(i);e.fetchMetrics=$.renderOpts.fetchMetrics;let l=$.renderOpts.pendingWaitUntil;l&&s.waitUntil&&(s.waitUntil(l),l=void 0);let d=$.renderOpts.collectedTags;if(!N)return await (0,p.sendResponse)(j,q,n,$.renderOpts.pendingWaitUntil),null;{let e=await n.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(n.headers);d&&(t[y.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==$.renderOpts.collectedRevalidate&&!($.renderOpts.collectedRevalidate>=y.INFINITE_CACHE)&&$.renderOpts.collectedRevalidate,s=void 0===$.renderOpts.collectedExpire||$.renderOpts.collectedExpire>=y.INFINITE_CACHE?void 0:$.renderOpts.collectedExpire;return{value:{kind:m.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:s}}}}catch(t){throw(null==r?void 0:r.isStale)&&await eg.onRequestError(e,t,{routerKind:"App Router",routePath:S,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:O})},!1,A),t}},u=await eg.handleResponse({req:e,nextConfig:I,cacheKey:F,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:R,isRoutePPREnabled:!1,isOnDemandRevalidate:O,revalidateOnlyGenerated:_,responseGenerator:d,waitUntil:s.waitUntil,isMinimalMode:o});if(!N)return null;if((null==u||null==(n=u.value)?void 0:n.kind)!==m.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==u||null==(l=u.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});o||t.setHeader("x-nextjs-cache",O?"REVALIDATED":u.isMiss?"MISS":u.isStale?"STALE":"HIT"),T&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let g=(0,f.fromNodeOutgoingHttpHeaders)(u.value.headers);return o&&N||g.delete(y.NEXT_CACHE_TAGS_HEADER),!u.cacheControl||t.getHeader("Cache-Control")||g.get("Cache-Control")||g.set("Cache-Control",(0,h.getCacheControlHeader)(u.cacheControl)),await (0,p.sendResponse)(j,q,new Response(u.value.body,{headers:g,status:u.value.status||200})),null};L?await l(L):await K.withPropagatedContext(e.headers,()=>K.trace(u.BaseServerSpan.handleRequest,{spanName:`${k} ${S}`,kind:n.SpanKind.SERVER,attributes:{"http.method":k,"http.target":e.url}},l))}catch(t){if(t instanceof g.NoFallbackError||await eg.onRequestError(e,t,{routerKind:"App Router",routePath:M,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:O})},!1,A),N)throw t;return await (0,p.sendResponse)(j,q,new Response(null,{status:500})),null}}e.s(["handler",()=>eb,"patchFetch",()=>ev,"routeModule",()=>eg,"serverHooks",()=>ew,"workAsyncStorage",()=>em,"workUnitAsyncStorage",()=>eS],86100)}];
2
2
 
3
3
  //# sourceMappingURL=node_modules_next_dist_esm_build_templates_app-route_b054aff3.js.map