@alexjbarnes/cockpit 0.3.0 → 0.4.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 (760) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +11 -3
  3. package/.next/build-manifest.json +4 -4
  4. package/.next/next-server.js.nft.json +1 -1
  5. package/.next/prerender-manifest.json +21 -45
  6. package/.next/react-loadable-manifest.json +279 -267
  7. package/.next/routes-manifest.json +68 -12
  8. package/.next/server/app/(app)/agents/[name]/page.js +3 -3
  9. package/.next/server/app/(app)/agents/[name]/page.js.nft.json +1 -1
  10. package/.next/server/app/(app)/agents/[name]/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/(app)/agents/page.js +2 -2
  12. package/.next/server/app/(app)/agents/page.js.nft.json +1 -1
  13. package/.next/server/app/(app)/agents/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/(app)/claude-md/edit/page.js +2 -2
  15. package/.next/server/app/(app)/claude-md/edit/page.js.nft.json +1 -1
  16. package/.next/server/app/(app)/claude-md/edit/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/(app)/claude-md/page.js +2 -2
  18. package/.next/server/app/(app)/claude-md/page.js.nft.json +1 -1
  19. package/.next/server/app/(app)/claude-md/page_client-reference-manifest.js +1 -1
  20. package/.next/server/app/(app)/commands/[name]/page.js +3 -3
  21. package/.next/server/app/(app)/commands/[name]/page.js.nft.json +1 -1
  22. package/.next/server/app/(app)/commands/[name]/page_client-reference-manifest.js +1 -1
  23. package/.next/server/app/(app)/commands/page.js +2 -2
  24. package/.next/server/app/(app)/commands/page.js.nft.json +1 -1
  25. package/.next/server/app/(app)/commands/page_client-reference-manifest.js +1 -1
  26. package/.next/server/app/(app)/hooks/[event]/page.js +3 -3
  27. package/.next/server/app/(app)/hooks/[event]/page.js.nft.json +1 -1
  28. package/.next/server/app/(app)/hooks/[event]/page_client-reference-manifest.js +1 -1
  29. package/.next/server/app/(app)/hooks/page.js +2 -2
  30. package/.next/server/app/(app)/hooks/page.js.nft.json +1 -1
  31. package/.next/server/app/(app)/hooks/page_client-reference-manifest.js +1 -1
  32. package/.next/server/app/(app)/inbox/[id]/page.js +2 -2
  33. package/.next/server/app/(app)/inbox/[id]/page.js.nft.json +1 -1
  34. package/.next/server/app/(app)/inbox/[id]/page_client-reference-manifest.js +1 -1
  35. package/.next/server/app/(app)/inbox/page.js +2 -2
  36. package/.next/server/app/(app)/inbox/page.js.nft.json +1 -1
  37. package/.next/server/app/(app)/inbox/page_client-reference-manifest.js +1 -1
  38. package/.next/server/app/(app)/jobs/[id]/edit/page.js +2 -2
  39. package/.next/server/app/(app)/jobs/[id]/edit/page.js.nft.json +1 -1
  40. package/.next/server/app/(app)/jobs/[id]/edit/page_client-reference-manifest.js +1 -1
  41. package/.next/server/app/(app)/jobs/[id]/page.js +2 -2
  42. package/.next/server/app/(app)/jobs/[id]/page.js.nft.json +1 -1
  43. package/.next/server/app/(app)/jobs/[id]/page_client-reference-manifest.js +1 -1
  44. package/.next/server/app/(app)/jobs/[id]/runs/[runId]/page.js +2 -2
  45. package/.next/server/app/(app)/jobs/[id]/runs/[runId]/page.js.nft.json +1 -1
  46. package/.next/server/app/(app)/jobs/[id]/runs/[runId]/page_client-reference-manifest.js +1 -1
  47. package/.next/server/app/(app)/jobs/page.js +2 -2
  48. package/.next/server/app/(app)/jobs/page.js.nft.json +1 -1
  49. package/.next/server/app/(app)/jobs/page_client-reference-manifest.js +1 -1
  50. package/.next/server/app/(app)/mcp-servers/[name]/page.js +2 -2
  51. package/.next/server/app/(app)/mcp-servers/[name]/page.js.nft.json +1 -1
  52. package/.next/server/app/(app)/mcp-servers/[name]/page_client-reference-manifest.js +1 -1
  53. package/.next/server/app/(app)/mcp-servers/page.js +2 -2
  54. package/.next/server/app/(app)/mcp-servers/page.js.nft.json +1 -1
  55. package/.next/server/app/(app)/mcp-servers/page_client-reference-manifest.js +1 -1
  56. package/.next/server/app/(app)/page.js +2 -2
  57. package/.next/server/app/(app)/page.js.nft.json +1 -1
  58. package/.next/server/app/(app)/page_client-reference-manifest.js +1 -1
  59. package/.next/server/app/(app)/plugins/page.js +2 -0
  60. package/.next/server/app/(app)/{files → plugins}/page.js.nft.json +1 -1
  61. package/.next/server/app/(app)/plugins/page_client-reference-manifest.js +1 -0
  62. package/.next/server/app/(app)/reviews/[owner]/[repo]/[number]/page.js +4 -4
  63. package/.next/server/app/(app)/reviews/[owner]/[repo]/[number]/page.js.nft.json +1 -1
  64. package/.next/server/app/(app)/reviews/[owner]/[repo]/[number]/page_client-reference-manifest.js +1 -1
  65. package/.next/server/app/(app)/reviews/[owner]/[repo]/page.js +2 -2
  66. package/.next/server/app/(app)/reviews/[owner]/[repo]/page.js.nft.json +1 -1
  67. package/.next/server/app/(app)/reviews/[owner]/[repo]/page_client-reference-manifest.js +1 -1
  68. package/.next/server/app/(app)/reviews/page.js +2 -2
  69. package/.next/server/app/(app)/reviews/page.js.nft.json +1 -1
  70. package/.next/server/app/(app)/reviews/page_client-reference-manifest.js +1 -1
  71. package/.next/server/app/(app)/sessions/[id]/page.js +2 -2
  72. package/.next/server/app/(app)/sessions/[id]/page.js.nft.json +1 -1
  73. package/.next/server/app/(app)/sessions/[id]/page_client-reference-manifest.js +1 -1
  74. package/.next/server/app/(app)/settings/appearance/page.js +2 -2
  75. package/.next/server/app/(app)/settings/appearance/page.js.nft.json +1 -1
  76. package/.next/server/app/(app)/settings/appearance/page_client-reference-manifest.js +1 -1
  77. package/.next/server/app/(app)/settings/notifications/page.js +2 -2
  78. package/.next/server/app/(app)/settings/notifications/page.js.nft.json +1 -1
  79. package/.next/server/app/(app)/settings/notifications/page_client-reference-manifest.js +1 -1
  80. package/.next/server/app/(app)/settings/page.js +2 -2
  81. package/.next/server/app/(app)/settings/page.js.nft.json +1 -1
  82. package/.next/server/app/(app)/settings/page_client-reference-manifest.js +1 -1
  83. package/.next/server/app/(app)/settings/providers/[id]/page.js +2 -2
  84. package/.next/server/app/(app)/settings/providers/[id]/page.js.nft.json +1 -1
  85. package/.next/server/app/(app)/settings/providers/[id]/page_client-reference-manifest.js +1 -1
  86. package/.next/server/app/(app)/settings/providers/new/page.js +2 -2
  87. package/.next/server/app/(app)/settings/providers/new/page.js.nft.json +1 -1
  88. package/.next/server/app/(app)/settings/providers/new/page_client-reference-manifest.js +1 -1
  89. package/.next/server/app/(app)/settings/providers/page.js +2 -2
  90. package/.next/server/app/(app)/settings/providers/page.js.nft.json +1 -1
  91. package/.next/server/app/(app)/settings/providers/page_client-reference-manifest.js +1 -1
  92. package/.next/server/app/(app)/settings/session/page.js +2 -2
  93. package/.next/server/app/(app)/settings/session/page.js.nft.json +1 -1
  94. package/.next/server/app/(app)/settings/session/page_client-reference-manifest.js +1 -1
  95. package/.next/server/app/(app)/skills/[name]/page.js +3 -3
  96. package/.next/server/app/(app)/skills/[name]/page.js.nft.json +1 -1
  97. package/.next/server/app/(app)/skills/[name]/page_client-reference-manifest.js +1 -1
  98. package/.next/server/app/(app)/skills/page.js +2 -2
  99. package/.next/server/app/(app)/skills/page.js.nft.json +1 -1
  100. package/.next/server/app/(app)/skills/page_client-reference-manifest.js +1 -1
  101. package/.next/server/app/_global-error/page.js +3 -3
  102. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  103. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  104. package/.next/server/app/_global-error.html +1 -1
  105. package/.next/server/app/_global-error.rsc +1 -1
  106. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  107. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  108. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  109. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  110. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  111. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  112. package/.next/server/app/_not-found/page.js +2 -2
  113. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  114. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  115. package/.next/server/app/_not-found.html +1 -1
  116. package/.next/server/app/_not-found.rsc +2 -2
  117. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  118. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  119. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  120. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  121. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  122. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  123. package/.next/server/app/agents.html +1 -1
  124. package/.next/server/app/agents.rsc +4 -4
  125. package/.next/server/app/agents.segments/!KGFwcCk/agents/__PAGE__.segment.rsc +2 -2
  126. package/.next/server/app/agents.segments/!KGFwcCk/agents.segment.rsc +1 -1
  127. package/.next/server/app/agents.segments/!KGFwcCk.segment.rsc +2 -2
  128. package/.next/server/app/agents.segments/_full.segment.rsc +4 -4
  129. package/.next/server/app/agents.segments/_head.segment.rsc +1 -1
  130. package/.next/server/app/agents.segments/_index.segment.rsc +2 -2
  131. package/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
  132. package/.next/server/app/api/agents/[name]/route.js +1 -1
  133. package/.next/server/app/api/agents/route.js +1 -1
  134. package/.next/server/app/api/assistant-session/route.js +1 -0
  135. package/.next/server/app/api/assistant-session/route.js.nft.json +1 -0
  136. package/.next/server/app/api/assistant-session/route_client-reference-manifest.js +1 -0
  137. package/.next/server/app/api/auth/check/route.js +1 -1
  138. package/.next/server/app/api/auth/login/route.js +1 -1
  139. package/.next/server/app/api/auth/setup/route.js +1 -1
  140. package/.next/server/app/api/auth/ws-token/route.js +1 -1
  141. package/.next/server/app/api/btw/route.js +2 -2
  142. package/.next/server/app/api/claude-md/route.js +1 -1
  143. package/.next/server/app/api/commands/[name]/route.js +1 -1
  144. package/.next/server/app/api/commands/route.js +1 -1
  145. package/.next/server/app/api/config/cwd/route.js +1 -0
  146. package/.next/server/app/api/config/cwd/route.js.nft.json +1 -0
  147. package/.next/server/app/api/config/cwd/route_client-reference-manifest.js +1 -0
  148. package/.next/server/app/api/defaults/route.js +1 -1
  149. package/.next/server/app/api/filesystem/browse/route.js +1 -1
  150. package/.next/server/app/api/filesystem/files/route.js +1 -1
  151. package/.next/server/app/api/filesystem/mkdir/route.js +1 -1
  152. package/.next/server/app/api/filesystem/read/route.js +1 -1
  153. package/.next/server/app/api/git/clone/route.js +1 -1
  154. package/.next/server/app/api/git/commit/route.js +1 -1
  155. package/.next/server/app/api/git/diff/route.js +1 -1
  156. package/.next/server/app/api/git/discard/route.js +1 -1
  157. package/.next/server/app/api/git/generate-message/route.js +2 -2
  158. package/.next/server/app/api/git/push/route.js +1 -1
  159. package/.next/server/app/api/git/status/route.js +1 -1
  160. package/.next/server/app/api/github/file-content/route.js +1 -1
  161. package/.next/server/app/api/github/orgs/route.js +1 -1
  162. package/.next/server/app/api/github/prs/checks/route.js +1 -1
  163. package/.next/server/app/api/github/prs/diff/route.js +1 -1
  164. package/.next/server/app/api/github/prs/review/route.js +1 -1
  165. package/.next/server/app/api/github/prs/route.js +1 -1
  166. package/.next/server/app/api/github/prs/view/route.js +1 -1
  167. package/.next/server/app/api/github/repos/route.js +1 -1
  168. package/.next/server/app/api/github/review-session/route.js +1 -1
  169. package/.next/server/app/api/github/review-session/route.js.nft.json +1 -1
  170. package/.next/server/app/api/health/route.js +1 -1
  171. package/.next/server/app/api/hooks/route.js +1 -1
  172. package/.next/server/app/api/inbox/[id]/route.js +1 -5
  173. package/.next/server/app/api/inbox/[id]/route.js.nft.json +1 -1
  174. package/.next/server/app/api/inbox/route.js +1 -5
  175. package/.next/server/app/api/inbox/route.js.nft.json +1 -1
  176. package/.next/server/app/api/jobs/[id]/route.js +1 -1
  177. package/.next/server/app/api/jobs/[id]/route.js.nft.json +1 -1
  178. package/.next/server/app/api/jobs/[id]/runs/[runId]/route.js +1 -1
  179. package/.next/server/app/api/jobs/[id]/runs/[runId]/transcript/route.js +1 -1
  180. package/.next/server/app/api/jobs/[id]/runs/[runId]/transcript/route.js.nft.json +1 -1
  181. package/.next/server/app/api/jobs/[id]/runs/route.js +1 -1
  182. package/.next/server/app/api/jobs/[id]/stop/route.js +1 -0
  183. package/.next/server/app/api/jobs/[id]/stop/route.js.nft.json +1 -0
  184. package/.next/server/app/api/jobs/[id]/stop/route_client-reference-manifest.js +1 -0
  185. package/.next/server/app/api/jobs/[id]/trigger/route.js +1 -1
  186. package/.next/server/app/api/jobs/[id]/trigger/route.js.nft.json +1 -1
  187. package/.next/server/app/api/jobs/mcp-discover/route.js +1 -1
  188. package/.next/server/app/api/jobs/mcp-discover/route.js.nft.json +1 -1
  189. package/.next/server/app/api/jobs/route.js +1 -1
  190. package/.next/server/app/api/jobs/route.js.nft.json +1 -1
  191. package/.next/server/app/api/jobs/status/route.js +1 -1
  192. package/.next/server/app/api/mcp-servers/[name]/route.js +1 -1
  193. package/.next/server/app/api/mcp-servers/[name]/test/route.js +1 -1
  194. package/.next/server/app/api/mcp-servers/[name]/tools/route.js +1 -0
  195. package/.next/server/app/api/mcp-servers/[name]/tools/route.js.nft.json +1 -0
  196. package/.next/server/app/api/mcp-servers/[name]/tools/route_client-reference-manifest.js +1 -0
  197. package/.next/server/app/api/mcp-servers/route.js +1 -1
  198. package/.next/server/app/api/notifications/route.js +1 -1
  199. package/.next/server/app/api/notifications/test/route.js +3 -3
  200. package/.next/server/app/api/plugins/[id]/route.js +1 -0
  201. package/.next/server/app/api/plugins/[id]/route.js.nft.json +1 -0
  202. package/.next/server/app/api/plugins/[id]/route_client-reference-manifest.js +1 -0
  203. package/.next/server/app/api/plugins/install/route.js +1 -0
  204. package/.next/server/app/api/plugins/install/route.js.nft.json +1 -0
  205. package/.next/server/app/api/plugins/install/route_client-reference-manifest.js +1 -0
  206. package/.next/server/app/api/plugins/marketplaces/[name]/route.js +1 -0
  207. package/.next/server/app/api/plugins/marketplaces/[name]/route.js.nft.json +1 -0
  208. package/.next/server/app/api/plugins/marketplaces/[name]/route_client-reference-manifest.js +1 -0
  209. package/.next/server/app/api/plugins/marketplaces/route.js +1 -0
  210. package/.next/server/app/api/plugins/marketplaces/route.js.nft.json +1 -0
  211. package/.next/server/app/api/plugins/marketplaces/route_client-reference-manifest.js +1 -0
  212. package/.next/server/app/api/plugins/route.js +1 -0
  213. package/.next/server/app/api/plugins/route.js.nft.json +1 -0
  214. package/.next/server/app/api/plugins/route_client-reference-manifest.js +1 -0
  215. package/.next/server/app/api/providers/[id]/route.js +1 -1
  216. package/.next/server/app/api/providers/route.js +1 -1
  217. package/.next/server/app/api/reviews/pinned/route.js +1 -1
  218. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  219. package/.next/server/app/api/sessions/[id]/context/route.js.nft.json +1 -1
  220. package/.next/server/app/api/sessions/[id]/mcp/route.js +1 -1
  221. package/.next/server/app/api/sessions/[id]/mcp/route.js.nft.json +1 -1
  222. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  223. package/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  224. package/.next/server/app/api/sessions/[id]/search/route.js +1 -1
  225. package/.next/server/app/api/sessions/[id]/search/route.js.nft.json +1 -1
  226. package/.next/server/app/api/sessions/[id]/tabs/route.js +1 -1
  227. package/.next/server/app/api/sessions/bulk-delete/route.js +1 -1
  228. package/.next/server/app/api/sessions/bulk-delete/route.js.nft.json +1 -1
  229. package/.next/server/app/api/sessions/by-ids/route.js +1 -1
  230. package/.next/server/app/api/sessions/by-ids/route.js.nft.json +1 -1
  231. package/.next/server/app/api/sessions/group/route.js +1 -1
  232. package/.next/server/app/api/sessions/group/route.js.nft.json +1 -1
  233. package/.next/server/app/api/sessions/pinned/route.js +1 -1
  234. package/.next/server/app/api/sessions/route.js +1 -1
  235. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  236. package/.next/server/app/api/sessions/search/route.js +1 -1
  237. package/.next/server/app/api/sessions/search/route.js.nft.json +1 -1
  238. package/.next/server/app/api/sessions/thinking/route.js +1 -1
  239. package/.next/server/app/api/sessions/thinking/route.js.nft.json +1 -1
  240. package/.next/server/app/api/skills/[name]/route.js +1 -1
  241. package/.next/server/app/api/skills/route.js +1 -1
  242. package/.next/server/app/api/terminal/[id]/route.js +1 -1
  243. package/.next/server/app/api/terminal/[id]/route.js.nft.json +1 -1
  244. package/.next/server/app/api/terminal/route.js +1 -1
  245. package/.next/server/app/api/terminal/route.js.nft.json +1 -1
  246. package/.next/server/app/api/usage/route.js +1 -1
  247. package/.next/server/app/api/version/changelog/route.js +1 -1
  248. package/.next/server/app/api/version/cockpit/changelog/route.js +1 -1
  249. package/.next/server/app/api/version/cockpit/route.js +1 -1
  250. package/.next/server/app/api/version/route.js +2 -2
  251. package/.next/server/app/claude-md/edit.html +1 -1
  252. package/.next/server/app/claude-md/edit.rsc +4 -4
  253. package/.next/server/app/claude-md/edit.segments/!KGFwcCk/claude-md/edit/__PAGE__.segment.rsc +2 -2
  254. package/.next/server/app/claude-md/edit.segments/!KGFwcCk/claude-md/edit.segment.rsc +1 -1
  255. package/.next/server/app/claude-md/edit.segments/!KGFwcCk/claude-md.segment.rsc +1 -1
  256. package/.next/server/app/claude-md/edit.segments/!KGFwcCk.segment.rsc +2 -2
  257. package/.next/server/app/claude-md/edit.segments/_full.segment.rsc +4 -4
  258. package/.next/server/app/claude-md/edit.segments/_head.segment.rsc +1 -1
  259. package/.next/server/app/claude-md/edit.segments/_index.segment.rsc +2 -2
  260. package/.next/server/app/claude-md/edit.segments/_tree.segment.rsc +2 -2
  261. package/.next/server/app/claude-md.html +1 -1
  262. package/.next/server/app/claude-md.rsc +4 -4
  263. package/.next/server/app/claude-md.segments/!KGFwcCk/claude-md/__PAGE__.segment.rsc +2 -2
  264. package/.next/server/app/claude-md.segments/!KGFwcCk/claude-md.segment.rsc +1 -1
  265. package/.next/server/app/claude-md.segments/!KGFwcCk.segment.rsc +2 -2
  266. package/.next/server/app/claude-md.segments/_full.segment.rsc +4 -4
  267. package/.next/server/app/claude-md.segments/_head.segment.rsc +1 -1
  268. package/.next/server/app/claude-md.segments/_index.segment.rsc +2 -2
  269. package/.next/server/app/claude-md.segments/_tree.segment.rsc +2 -2
  270. package/.next/server/app/commands.html +1 -1
  271. package/.next/server/app/commands.rsc +4 -4
  272. package/.next/server/app/commands.segments/!KGFwcCk/commands/__PAGE__.segment.rsc +2 -2
  273. package/.next/server/app/commands.segments/!KGFwcCk/commands.segment.rsc +1 -1
  274. package/.next/server/app/commands.segments/!KGFwcCk.segment.rsc +2 -2
  275. package/.next/server/app/commands.segments/_full.segment.rsc +4 -4
  276. package/.next/server/app/commands.segments/_head.segment.rsc +1 -1
  277. package/.next/server/app/commands.segments/_index.segment.rsc +2 -2
  278. package/.next/server/app/commands.segments/_tree.segment.rsc +2 -2
  279. package/.next/server/app/hooks.html +1 -1
  280. package/.next/server/app/hooks.rsc +4 -4
  281. package/.next/server/app/hooks.segments/!KGFwcCk/hooks/__PAGE__.segment.rsc +2 -2
  282. package/.next/server/app/hooks.segments/!KGFwcCk/hooks.segment.rsc +1 -1
  283. package/.next/server/app/hooks.segments/!KGFwcCk.segment.rsc +2 -2
  284. package/.next/server/app/hooks.segments/_full.segment.rsc +4 -4
  285. package/.next/server/app/hooks.segments/_head.segment.rsc +1 -1
  286. package/.next/server/app/hooks.segments/_index.segment.rsc +2 -2
  287. package/.next/server/app/hooks.segments/_tree.segment.rsc +2 -2
  288. package/.next/server/app/inbox.html +1 -1
  289. package/.next/server/app/inbox.rsc +4 -4
  290. package/.next/server/app/inbox.segments/!KGFwcCk/inbox/__PAGE__.segment.rsc +2 -2
  291. package/.next/server/app/inbox.segments/!KGFwcCk/inbox.segment.rsc +1 -1
  292. package/.next/server/app/inbox.segments/!KGFwcCk.segment.rsc +2 -2
  293. package/.next/server/app/inbox.segments/_full.segment.rsc +4 -4
  294. package/.next/server/app/inbox.segments/_head.segment.rsc +1 -1
  295. package/.next/server/app/inbox.segments/_index.segment.rsc +2 -2
  296. package/.next/server/app/inbox.segments/_tree.segment.rsc +2 -2
  297. package/.next/server/app/index.html +1 -1
  298. package/.next/server/app/index.rsc +4 -4
  299. package/.next/server/app/index.segments/!KGFwcCk/__PAGE__.segment.rsc +2 -2
  300. package/.next/server/app/index.segments/!KGFwcCk.segment.rsc +2 -2
  301. package/.next/server/app/index.segments/_full.segment.rsc +4 -4
  302. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  303. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  304. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  305. package/.next/server/app/jobs.html +1 -1
  306. package/.next/server/app/jobs.rsc +4 -4
  307. package/.next/server/app/jobs.segments/!KGFwcCk/jobs/__PAGE__.segment.rsc +2 -2
  308. package/.next/server/app/jobs.segments/!KGFwcCk/jobs.segment.rsc +1 -1
  309. package/.next/server/app/jobs.segments/!KGFwcCk.segment.rsc +2 -2
  310. package/.next/server/app/jobs.segments/_full.segment.rsc +4 -4
  311. package/.next/server/app/jobs.segments/_head.segment.rsc +1 -1
  312. package/.next/server/app/jobs.segments/_index.segment.rsc +2 -2
  313. package/.next/server/app/jobs.segments/_tree.segment.rsc +2 -2
  314. package/.next/server/app/login/page.js +2 -2
  315. package/.next/server/app/login/page.js.nft.json +1 -1
  316. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  317. package/.next/server/app/login.html +1 -1
  318. package/.next/server/app/login.rsc +3 -3
  319. package/.next/server/app/login.segments/_full.segment.rsc +3 -3
  320. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  321. package/.next/server/app/login.segments/_index.segment.rsc +2 -2
  322. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  323. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  324. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  325. package/.next/server/app/mcp-servers.html +1 -1
  326. package/.next/server/app/mcp-servers.rsc +4 -4
  327. package/.next/server/app/mcp-servers.segments/!KGFwcCk/mcp-servers/__PAGE__.segment.rsc +2 -2
  328. package/.next/server/app/mcp-servers.segments/!KGFwcCk/mcp-servers.segment.rsc +1 -1
  329. package/.next/server/app/mcp-servers.segments/!KGFwcCk.segment.rsc +2 -2
  330. package/.next/server/app/mcp-servers.segments/_full.segment.rsc +4 -4
  331. package/.next/server/app/mcp-servers.segments/_head.segment.rsc +1 -1
  332. package/.next/server/app/mcp-servers.segments/_index.segment.rsc +2 -2
  333. package/.next/server/app/mcp-servers.segments/_tree.segment.rsc +2 -2
  334. package/.next/server/app/plugins.html +1 -0
  335. package/.next/server/app/{changes.meta → plugins.meta} +3 -3
  336. package/.next/server/app/{changes.rsc → plugins.rsc} +4 -4
  337. package/.next/server/app/{files.segments/!KGFwcCk/files → plugins.segments/!KGFwcCk/plugins}/__PAGE__.segment.rsc +2 -2
  338. package/.next/server/app/{changes.segments/!KGFwcCk/changes.segment.rsc → plugins.segments/!KGFwcCk/plugins.segment.rsc} +1 -1
  339. package/.next/server/app/{changes.segments → plugins.segments}/!KGFwcCk.segment.rsc +2 -2
  340. package/.next/server/app/{changes.segments → plugins.segments}/_full.segment.rsc +4 -4
  341. package/.next/server/app/{changes.segments → plugins.segments}/_head.segment.rsc +1 -1
  342. package/.next/server/app/{files.segments → plugins.segments}/_index.segment.rsc +2 -2
  343. package/.next/server/app/{changes.segments → plugins.segments}/_tree.segment.rsc +2 -2
  344. package/.next/server/app/reviews.html +1 -1
  345. package/.next/server/app/reviews.rsc +4 -4
  346. package/.next/server/app/reviews.segments/!KGFwcCk/reviews/__PAGE__.segment.rsc +2 -2
  347. package/.next/server/app/reviews.segments/!KGFwcCk/reviews.segment.rsc +1 -1
  348. package/.next/server/app/reviews.segments/!KGFwcCk.segment.rsc +2 -2
  349. package/.next/server/app/reviews.segments/_full.segment.rsc +4 -4
  350. package/.next/server/app/reviews.segments/_head.segment.rsc +1 -1
  351. package/.next/server/app/reviews.segments/_index.segment.rsc +2 -2
  352. package/.next/server/app/reviews.segments/_tree.segment.rsc +2 -2
  353. package/.next/server/app/settings/appearance.html +1 -1
  354. package/.next/server/app/settings/appearance.rsc +4 -4
  355. package/.next/server/app/settings/appearance.segments/!KGFwcCk/settings/appearance/__PAGE__.segment.rsc +2 -2
  356. package/.next/server/app/settings/appearance.segments/!KGFwcCk/settings/appearance.segment.rsc +1 -1
  357. package/.next/server/app/settings/appearance.segments/!KGFwcCk/settings.segment.rsc +1 -1
  358. package/.next/server/app/settings/appearance.segments/!KGFwcCk.segment.rsc +2 -2
  359. package/.next/server/app/settings/appearance.segments/_full.segment.rsc +4 -4
  360. package/.next/server/app/settings/appearance.segments/_head.segment.rsc +1 -1
  361. package/.next/server/app/settings/appearance.segments/_index.segment.rsc +2 -2
  362. package/.next/server/app/settings/appearance.segments/_tree.segment.rsc +2 -2
  363. package/.next/server/app/settings/notifications.html +1 -1
  364. package/.next/server/app/settings/notifications.rsc +4 -4
  365. package/.next/server/app/settings/notifications.segments/!KGFwcCk/settings/notifications/__PAGE__.segment.rsc +2 -2
  366. package/.next/server/app/settings/notifications.segments/!KGFwcCk/settings/notifications.segment.rsc +1 -1
  367. package/.next/server/app/settings/notifications.segments/!KGFwcCk/settings.segment.rsc +1 -1
  368. package/.next/server/app/settings/notifications.segments/!KGFwcCk.segment.rsc +2 -2
  369. package/.next/server/app/settings/notifications.segments/_full.segment.rsc +4 -4
  370. package/.next/server/app/settings/notifications.segments/_head.segment.rsc +1 -1
  371. package/.next/server/app/settings/notifications.segments/_index.segment.rsc +2 -2
  372. package/.next/server/app/settings/notifications.segments/_tree.segment.rsc +2 -2
  373. package/.next/server/app/settings/providers/new.html +1 -1
  374. package/.next/server/app/settings/providers/new.rsc +4 -4
  375. package/.next/server/app/settings/providers/new.segments/!KGFwcCk/settings/providers/new/__PAGE__.segment.rsc +2 -2
  376. package/.next/server/app/settings/providers/new.segments/!KGFwcCk/settings/providers/new.segment.rsc +1 -1
  377. package/.next/server/app/settings/providers/new.segments/!KGFwcCk/settings/providers.segment.rsc +1 -1
  378. package/.next/server/app/settings/providers/new.segments/!KGFwcCk/settings.segment.rsc +1 -1
  379. package/.next/server/app/settings/providers/new.segments/!KGFwcCk.segment.rsc +2 -2
  380. package/.next/server/app/settings/providers/new.segments/_full.segment.rsc +4 -4
  381. package/.next/server/app/settings/providers/new.segments/_head.segment.rsc +1 -1
  382. package/.next/server/app/settings/providers/new.segments/_index.segment.rsc +2 -2
  383. package/.next/server/app/settings/providers/new.segments/_tree.segment.rsc +2 -2
  384. package/.next/server/app/settings/providers.html +1 -1
  385. package/.next/server/app/settings/providers.rsc +4 -4
  386. package/.next/server/app/settings/providers.segments/!KGFwcCk/settings/providers/__PAGE__.segment.rsc +2 -2
  387. package/.next/server/app/settings/providers.segments/!KGFwcCk/settings/providers.segment.rsc +1 -1
  388. package/.next/server/app/settings/providers.segments/!KGFwcCk/settings.segment.rsc +1 -1
  389. package/.next/server/app/settings/providers.segments/!KGFwcCk.segment.rsc +2 -2
  390. package/.next/server/app/settings/providers.segments/_full.segment.rsc +4 -4
  391. package/.next/server/app/settings/providers.segments/_head.segment.rsc +1 -1
  392. package/.next/server/app/settings/providers.segments/_index.segment.rsc +2 -2
  393. package/.next/server/app/settings/providers.segments/_tree.segment.rsc +2 -2
  394. package/.next/server/app/settings/session.html +1 -1
  395. package/.next/server/app/settings/session.rsc +4 -4
  396. package/.next/server/app/settings/session.segments/!KGFwcCk/settings/session/__PAGE__.segment.rsc +2 -2
  397. package/.next/server/app/settings/session.segments/!KGFwcCk/settings/session.segment.rsc +1 -1
  398. package/.next/server/app/settings/session.segments/!KGFwcCk/settings.segment.rsc +1 -1
  399. package/.next/server/app/settings/session.segments/!KGFwcCk.segment.rsc +2 -2
  400. package/.next/server/app/settings/session.segments/_full.segment.rsc +4 -4
  401. package/.next/server/app/settings/session.segments/_head.segment.rsc +1 -1
  402. package/.next/server/app/settings/session.segments/_index.segment.rsc +2 -2
  403. package/.next/server/app/settings/session.segments/_tree.segment.rsc +2 -2
  404. package/.next/server/app/settings.html +1 -1
  405. package/.next/server/app/settings.rsc +4 -4
  406. package/.next/server/app/settings.segments/!KGFwcCk/settings/__PAGE__.segment.rsc +2 -2
  407. package/.next/server/app/settings.segments/!KGFwcCk/settings.segment.rsc +1 -1
  408. package/.next/server/app/settings.segments/!KGFwcCk.segment.rsc +2 -2
  409. package/.next/server/app/settings.segments/_full.segment.rsc +4 -4
  410. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  411. package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  412. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  413. package/.next/server/app/skills.html +1 -1
  414. package/.next/server/app/skills.rsc +4 -4
  415. package/.next/server/app/skills.segments/!KGFwcCk/skills/__PAGE__.segment.rsc +2 -2
  416. package/.next/server/app/skills.segments/!KGFwcCk/skills.segment.rsc +1 -1
  417. package/.next/server/app/skills.segments/!KGFwcCk.segment.rsc +2 -2
  418. package/.next/server/app/skills.segments/_full.segment.rsc +4 -4
  419. package/.next/server/app/skills.segments/_head.segment.rsc +1 -1
  420. package/.next/server/app/skills.segments/_index.segment.rsc +2 -2
  421. package/.next/server/app/skills.segments/_tree.segment.rsc +2 -2
  422. package/.next/server/app-paths-manifest.json +11 -3
  423. package/.next/server/chunks/1011.js +1 -1
  424. package/.next/server/chunks/1327.js +1 -1
  425. package/.next/server/chunks/1979.js +7 -2
  426. package/.next/server/chunks/2666.js +1 -0
  427. package/.next/server/chunks/3136.js +11 -0
  428. package/.next/server/chunks/319.js +45 -0
  429. package/.next/server/chunks/3445.js +2 -2
  430. package/.next/server/chunks/3764.js +1 -1
  431. package/.next/server/chunks/4053.js +4971 -0
  432. package/.next/server/chunks/5292.js +201 -0
  433. package/.next/server/chunks/5318.js +1 -1
  434. package/.next/server/chunks/5472.js +1 -1
  435. package/.next/server/chunks/6304.js +1 -1
  436. package/.next/server/chunks/6705.js +1 -1
  437. package/.next/server/chunks/7539.js +5 -0
  438. package/.next/server/chunks/7891.js +1 -0
  439. package/.next/server/chunks/8578.js +1 -1
  440. package/.next/server/chunks/8728.js +1 -0
  441. package/.next/server/middleware-build-manifest.js +1 -1
  442. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  443. package/.next/server/pages/404.html +1 -1
  444. package/.next/server/pages/500.html +1 -1
  445. package/.next/server/server-reference-manifest.json +1 -1
  446. package/.next/static/chunks/12644.84908edd1bec8b5a.js +1 -0
  447. package/.next/static/chunks/1550-9a32fa02f6722fc7.js +25 -0
  448. package/.next/static/chunks/18977.393a8bc1bef44fc4.js +1 -0
  449. package/.next/static/chunks/{2503.bb9d3528c3c7ccae.js → 2503.68e12779c4b14adb.js} +1 -1
  450. package/.next/static/chunks/25781-c77dc5d11fb85d82.js +201 -0
  451. package/.next/static/chunks/{27455.1bce740b63d7c3cc.js → 27455.8f2189c777c63368.js} +1 -1
  452. package/.next/static/chunks/33072.3d32bb7b2a85ca9b.js +1 -0
  453. package/.next/static/chunks/39267.0c93a6bed8e46ac0.js +1 -0
  454. package/.next/static/chunks/52333.ff3bf0753b68875e.js +1 -0
  455. package/.next/static/chunks/69940.42e1ca99efc62caf.js +1 -0
  456. package/.next/static/chunks/70400.ffe0412efe741888.js +1 -0
  457. package/.next/static/chunks/7113.336a2a8deabe2aa5.js +1 -0
  458. package/.next/static/chunks/{71642.852436e8f0287b89.js → 71642.e11bcaa30efbf1f2.js} +1 -1
  459. package/.next/static/chunks/{72839.a5325a99f8c12fed.js → 72839.225c36dd5e767a20.js} +1 -1
  460. package/.next/static/chunks/{69427.a0b463c808aa54c8.js → 81272.b0027c9bc80050aa.js} +1 -1
  461. package/.next/static/chunks/85853.421f0c913b3d332b.js +1 -0
  462. package/.next/static/chunks/86155.3c5c1468fa2f446e.js +1 -0
  463. package/.next/static/chunks/86339.ba009abde9765665.js +1 -0
  464. package/.next/static/chunks/86939-51ae17d3d12c0310.js +1 -0
  465. package/.next/static/chunks/93794-b87eef7d177fe7b3.js +32 -0
  466. package/.next/static/chunks/989-6074551b2b54a168.js +3 -0
  467. package/.next/static/chunks/app/(app)/agents/[name]/page-6954a12623e4bdcf.js +8 -0
  468. package/.next/static/chunks/app/(app)/agents/{page-6fcfd7ab6781814e.js → page-b984c01f39aed22e.js} +1 -1
  469. package/.next/static/chunks/app/(app)/claude-md/edit/page-575c5ccdc585516c.js +1 -0
  470. package/.next/static/chunks/app/(app)/claude-md/{page-cd9e2176a12ba241.js → page-aab6df0c14c657f3.js} +1 -1
  471. package/.next/static/chunks/app/(app)/commands/[name]/page-ea86a4400fd29210.js +6 -0
  472. package/.next/static/chunks/app/(app)/commands/{page-f126b608b04747ac.js → page-3867a45c1378c6fe.js} +1 -1
  473. package/.next/static/chunks/app/(app)/hooks/[event]/{page-28038323fd29adfa.js → page-2c41e810c15a1149.js} +2 -2
  474. package/.next/static/chunks/app/(app)/hooks/{page-f1f39284e53c0344.js → page-49f9dbb78a3f97df.js} +1 -1
  475. package/.next/static/chunks/app/(app)/inbox/[id]/page-885a258b67e47b00.js +1 -0
  476. package/.next/static/chunks/app/(app)/inbox/page-592249fc155b9fe4.js +1 -0
  477. package/.next/static/chunks/app/(app)/jobs/[id]/edit/page-121bf977a839488c.js +1 -0
  478. package/.next/static/chunks/app/(app)/jobs/[id]/page-ba516fa01db89ea0.js +1 -0
  479. package/.next/static/chunks/app/(app)/jobs/[id]/runs/[runId]/page-0650e6f678fae5b8.js +1 -0
  480. package/.next/static/chunks/app/(app)/jobs/page-da3fe23a43277e67.js +1 -0
  481. package/.next/static/chunks/app/(app)/{layout-ce9e1be301c60fe5.js → layout-3cd80708648e0723.js} +1 -1
  482. package/.next/static/chunks/app/(app)/mcp-servers/[name]/{page-d6d805a27ec0b0c0.js → page-9290a7940a32d9ac.js} +1 -1
  483. package/.next/static/chunks/app/(app)/mcp-servers/page-1e828264f81ee08c.js +1 -0
  484. package/.next/static/chunks/app/(app)/{page-027a5382da30ddb9.js → page-2d171ffc3e1945e1.js} +1 -1
  485. package/.next/static/chunks/app/(app)/plugins/page-7e70e0b3ead44a99.js +1 -0
  486. package/.next/static/chunks/app/(app)/reviews/[owner]/[repo]/[number]/page-4396e9d6df189336.js +13 -0
  487. package/.next/static/chunks/app/(app)/reviews/[owner]/[repo]/{page-c5fd013309ab3eba.js → page-76a072cbfe3d9f0e.js} +1 -1
  488. package/.next/static/chunks/app/(app)/reviews/{page-47530d93bb9d4a76.js → page-deaa44f0ce253da8.js} +1 -1
  489. package/.next/static/chunks/app/(app)/sessions/[id]/page-95bcce2e0b9f827a.js +1 -0
  490. package/.next/static/chunks/app/(app)/settings/appearance/{page-95902da748ac5f1e.js → page-433fcfb9b95fb22e.js} +1 -1
  491. package/.next/static/chunks/app/(app)/settings/notifications/page-e5309337f125a059.js +1 -0
  492. package/.next/static/chunks/app/(app)/settings/{page-8ed16a66fdde10cd.js → page-353ef8c508418af1.js} +1 -1
  493. package/.next/static/chunks/app/(app)/settings/providers/[id]/page-2cacea2e60ba435c.js +1 -0
  494. package/.next/static/chunks/app/(app)/settings/providers/new/page-d40acef3abfc7c19.js +1 -0
  495. package/.next/static/chunks/app/(app)/settings/providers/page-098d8f399c663944.js +1 -0
  496. package/.next/static/chunks/app/(app)/settings/session/page-706118ba33c2b99f.js +1 -0
  497. package/.next/static/chunks/app/(app)/skills/[name]/page-7dd7c0f316742c01.js +6 -0
  498. package/.next/static/chunks/app/(app)/skills/{page-c52773eacb27c04e.js → page-48d0bbe201180fc8.js} +1 -1
  499. package/.next/static/chunks/app/_global-error/page-bf8153dffcb47d46.js +1 -0
  500. package/.next/static/chunks/app/api/agents/[name]/route-bf8153dffcb47d46.js +1 -0
  501. package/.next/static/chunks/app/api/agents/route-bf8153dffcb47d46.js +1 -0
  502. package/.next/static/chunks/app/api/assistant-session/route-bf8153dffcb47d46.js +1 -0
  503. package/.next/static/chunks/app/api/auth/check/route-bf8153dffcb47d46.js +1 -0
  504. package/.next/static/chunks/app/api/auth/login/route-bf8153dffcb47d46.js +1 -0
  505. package/.next/static/chunks/app/api/auth/setup/route-bf8153dffcb47d46.js +1 -0
  506. package/.next/static/chunks/app/api/auth/ws-token/route-bf8153dffcb47d46.js +1 -0
  507. package/.next/static/chunks/app/api/btw/route-bf8153dffcb47d46.js +1 -0
  508. package/.next/static/chunks/app/api/claude-md/route-bf8153dffcb47d46.js +1 -0
  509. package/.next/static/chunks/app/api/commands/[name]/route-bf8153dffcb47d46.js +1 -0
  510. package/.next/static/chunks/app/api/commands/route-bf8153dffcb47d46.js +1 -0
  511. package/.next/static/chunks/app/api/config/cwd/route-bf8153dffcb47d46.js +1 -0
  512. package/.next/static/chunks/app/api/defaults/route-bf8153dffcb47d46.js +1 -0
  513. package/.next/static/chunks/app/api/filesystem/browse/route-bf8153dffcb47d46.js +1 -0
  514. package/.next/static/chunks/app/api/filesystem/files/route-bf8153dffcb47d46.js +1 -0
  515. package/.next/static/chunks/app/api/filesystem/mkdir/route-bf8153dffcb47d46.js +1 -0
  516. package/.next/static/chunks/app/api/filesystem/read/route-bf8153dffcb47d46.js +1 -0
  517. package/.next/static/chunks/app/api/git/clone/route-bf8153dffcb47d46.js +1 -0
  518. package/.next/static/chunks/app/api/git/commit/route-bf8153dffcb47d46.js +1 -0
  519. package/.next/static/chunks/app/api/git/diff/route-bf8153dffcb47d46.js +1 -0
  520. package/.next/static/chunks/app/api/git/discard/route-bf8153dffcb47d46.js +1 -0
  521. package/.next/static/chunks/app/api/git/generate-message/route-bf8153dffcb47d46.js +1 -0
  522. package/.next/static/chunks/app/api/git/push/route-bf8153dffcb47d46.js +1 -0
  523. package/.next/static/chunks/app/api/git/status/route-bf8153dffcb47d46.js +1 -0
  524. package/.next/static/chunks/app/api/github/file-content/route-bf8153dffcb47d46.js +1 -0
  525. package/.next/static/chunks/app/api/github/orgs/route-bf8153dffcb47d46.js +1 -0
  526. package/.next/static/chunks/app/api/github/prs/checks/route-bf8153dffcb47d46.js +1 -0
  527. package/.next/static/chunks/app/api/github/prs/diff/route-bf8153dffcb47d46.js +1 -0
  528. package/.next/static/chunks/app/api/github/prs/review/route-bf8153dffcb47d46.js +1 -0
  529. package/.next/static/chunks/app/api/github/prs/route-bf8153dffcb47d46.js +1 -0
  530. package/.next/static/chunks/app/api/github/prs/view/route-bf8153dffcb47d46.js +1 -0
  531. package/.next/static/chunks/app/api/github/repos/route-bf8153dffcb47d46.js +1 -0
  532. package/.next/static/chunks/app/api/github/review-session/route-bf8153dffcb47d46.js +1 -0
  533. package/.next/static/chunks/app/api/health/route-bf8153dffcb47d46.js +1 -0
  534. package/.next/static/chunks/app/api/hooks/route-bf8153dffcb47d46.js +1 -0
  535. package/.next/static/chunks/app/api/inbox/[id]/route-bf8153dffcb47d46.js +1 -0
  536. package/.next/static/chunks/app/api/inbox/route-bf8153dffcb47d46.js +1 -0
  537. package/.next/static/chunks/app/api/jobs/[id]/route-bf8153dffcb47d46.js +1 -0
  538. package/.next/static/chunks/app/api/jobs/[id]/runs/[runId]/route-bf8153dffcb47d46.js +1 -0
  539. package/.next/static/chunks/app/api/jobs/[id]/runs/[runId]/transcript/route-bf8153dffcb47d46.js +1 -0
  540. package/.next/static/chunks/app/api/jobs/[id]/runs/route-bf8153dffcb47d46.js +1 -0
  541. package/.next/static/chunks/app/api/jobs/[id]/stop/route-bf8153dffcb47d46.js +1 -0
  542. package/.next/static/chunks/app/api/jobs/[id]/trigger/route-bf8153dffcb47d46.js +1 -0
  543. package/.next/static/chunks/app/api/jobs/mcp-discover/route-bf8153dffcb47d46.js +1 -0
  544. package/.next/static/chunks/app/api/jobs/route-bf8153dffcb47d46.js +1 -0
  545. package/.next/static/chunks/app/api/jobs/status/route-bf8153dffcb47d46.js +1 -0
  546. package/.next/static/chunks/app/api/mcp-servers/[name]/route-bf8153dffcb47d46.js +1 -0
  547. package/.next/static/chunks/app/api/mcp-servers/[name]/test/route-bf8153dffcb47d46.js +1 -0
  548. package/.next/static/chunks/app/api/mcp-servers/[name]/tools/route-bf8153dffcb47d46.js +1 -0
  549. package/.next/static/chunks/app/api/mcp-servers/route-bf8153dffcb47d46.js +1 -0
  550. package/.next/static/chunks/app/api/notifications/route-bf8153dffcb47d46.js +1 -0
  551. package/.next/static/chunks/app/api/notifications/test/route-bf8153dffcb47d46.js +1 -0
  552. package/.next/static/chunks/app/api/plugins/[id]/route-bf8153dffcb47d46.js +1 -0
  553. package/.next/static/chunks/app/api/plugins/install/route-bf8153dffcb47d46.js +1 -0
  554. package/.next/static/chunks/app/api/plugins/marketplaces/[name]/route-bf8153dffcb47d46.js +1 -0
  555. package/.next/static/chunks/app/api/plugins/marketplaces/route-bf8153dffcb47d46.js +1 -0
  556. package/.next/static/chunks/app/api/plugins/route-bf8153dffcb47d46.js +1 -0
  557. package/.next/static/chunks/app/api/providers/[id]/route-bf8153dffcb47d46.js +1 -0
  558. package/.next/static/chunks/app/api/providers/route-bf8153dffcb47d46.js +1 -0
  559. package/.next/static/chunks/app/api/reviews/pinned/route-bf8153dffcb47d46.js +1 -0
  560. package/.next/static/chunks/app/api/sessions/[id]/context/route-bf8153dffcb47d46.js +1 -0
  561. package/.next/static/chunks/app/api/sessions/[id]/mcp/route-bf8153dffcb47d46.js +1 -0
  562. package/.next/static/chunks/app/api/sessions/[id]/route-bf8153dffcb47d46.js +1 -0
  563. package/.next/static/chunks/app/api/sessions/[id]/search/route-bf8153dffcb47d46.js +1 -0
  564. package/.next/static/chunks/app/api/sessions/[id]/tabs/route-bf8153dffcb47d46.js +1 -0
  565. package/.next/static/chunks/app/api/sessions/bulk-delete/route-bf8153dffcb47d46.js +1 -0
  566. package/.next/static/chunks/app/api/sessions/by-ids/route-bf8153dffcb47d46.js +1 -0
  567. package/.next/static/chunks/app/api/sessions/group/route-bf8153dffcb47d46.js +1 -0
  568. package/.next/static/chunks/app/api/sessions/pinned/route-bf8153dffcb47d46.js +1 -0
  569. package/.next/static/chunks/app/api/sessions/route-bf8153dffcb47d46.js +1 -0
  570. package/.next/static/chunks/app/api/sessions/search/route-bf8153dffcb47d46.js +1 -0
  571. package/.next/static/chunks/app/api/sessions/thinking/route-bf8153dffcb47d46.js +1 -0
  572. package/.next/static/chunks/app/api/skills/[name]/route-bf8153dffcb47d46.js +1 -0
  573. package/.next/static/chunks/app/api/skills/route-bf8153dffcb47d46.js +1 -0
  574. package/.next/static/chunks/app/api/terminal/[id]/route-bf8153dffcb47d46.js +1 -0
  575. package/.next/static/chunks/app/api/terminal/route-bf8153dffcb47d46.js +1 -0
  576. package/.next/static/chunks/app/api/usage/route-bf8153dffcb47d46.js +1 -0
  577. package/.next/static/chunks/app/api/version/changelog/route-bf8153dffcb47d46.js +1 -0
  578. package/.next/static/chunks/app/api/version/cockpit/changelog/route-bf8153dffcb47d46.js +1 -0
  579. package/.next/static/chunks/app/api/version/cockpit/route-bf8153dffcb47d46.js +1 -0
  580. package/.next/static/chunks/app/api/version/route-bf8153dffcb47d46.js +1 -0
  581. package/.next/static/chunks/{framework-6fd9f138158c42e0.js → framework-45a1aae1a0f575fd.js} +1 -1
  582. package/.next/static/chunks/{main-5dac9bfffcc23702.js → main-eb9ff0b73c75808a.js} +3 -3
  583. package/.next/static/chunks/next/dist/client/components/builtin/app-error-bf8153dffcb47d46.js +1 -0
  584. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-bf8153dffcb47d46.js +1 -0
  585. package/.next/static/chunks/next/dist/client/components/builtin/not-found-bf8153dffcb47d46.js +1 -0
  586. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-bf8153dffcb47d46.js +1 -0
  587. package/.next/static/chunks/webpack-76a545b642140725.js +1 -0
  588. package/.next/static/css/483101dd9c42fb97.css +1 -0
  589. package/.next/static/mmHo0MmzQHWjZATtI-VbH/_buildManifest.js +1 -0
  590. package/README.md +13 -4
  591. package/bin/cockpit-hook-bridge.mjs +93 -24
  592. package/dist/server.js +10 -0
  593. package/dist/src/lib/cli-commands.js +147 -0
  594. package/dist/src/lib/models.js +8 -0
  595. package/dist/src/lib/paste-detect.js +161 -0
  596. package/dist/src/server/assistant-settings.js +35 -0
  597. package/dist/src/server/claude-bin.js +21 -0
  598. package/dist/src/server/cli-init-fetch.js +6 -1
  599. package/dist/src/server/inbox.js +2 -2
  600. package/dist/src/server/job-scheduler.js +146 -4
  601. package/dist/src/server/job-storage.js +33 -0
  602. package/dist/src/server/mcp/cockpit-agent-prompt.js +5 -0
  603. package/dist/src/server/mcp/cockpit-config-server.js +632 -0
  604. package/dist/src/server/mcp/run-context.js +23 -0
  605. package/dist/src/server/notifications.js +51 -10
  606. package/dist/src/server/plugins.js +103 -0
  607. package/dist/src/server/providers.js +25 -2
  608. package/dist/src/server/pty-runtime.js +112 -3
  609. package/dist/src/server/pty-session.js +7 -4
  610. package/dist/src/server/session-manager.js +338 -100
  611. package/dist/src/server/singleton.js +9 -0
  612. package/dist/src/server/terminal-buffer.js +17 -0
  613. package/dist/src/server/terminal-manager.js +9 -13
  614. package/dist/src/server/transcript.js +39 -22
  615. package/dist/src/server/ws-handler.js +18 -6
  616. package/next.config.ts +1 -0
  617. package/package.json +3 -2
  618. package/.next/server/app/(app)/changes/page.js +0 -2
  619. package/.next/server/app/(app)/changes/page.js.nft.json +0 -1
  620. package/.next/server/app/(app)/changes/page_client-reference-manifest.js +0 -1
  621. package/.next/server/app/(app)/files/page.js +0 -2
  622. package/.next/server/app/(app)/files/page_client-reference-manifest.js +0 -1
  623. package/.next/server/app/changes.html +0 -1
  624. package/.next/server/app/changes.segments/!KGFwcCk/changes/__PAGE__.segment.rsc +0 -9
  625. package/.next/server/app/changes.segments/_index.segment.rsc +0 -5
  626. package/.next/server/app/files.html +0 -1
  627. package/.next/server/app/files.meta +0 -16
  628. package/.next/server/app/files.rsc +0 -23
  629. package/.next/server/app/files.segments/!KGFwcCk/files.segment.rsc +0 -5
  630. package/.next/server/app/files.segments/!KGFwcCk.segment.rsc +0 -7
  631. package/.next/server/app/files.segments/_full.segment.rsc +0 -23
  632. package/.next/server/app/files.segments/_head.segment.rsc +0 -6
  633. package/.next/server/app/files.segments/_tree.segment.rsc +0 -2
  634. package/.next/server/chunks/3006.js +0 -199
  635. package/.next/server/chunks/4342.js +0 -1
  636. package/.next/server/chunks/4352.js +0 -1
  637. package/.next/server/chunks/4445.js +0 -1
  638. package/.next/server/chunks/63.js +0 -45
  639. package/.next/server/chunks/7782.js +0 -6
  640. package/.next/server/chunks/8148.js +0 -1
  641. package/.next/server/chunks/9599.js +0 -11
  642. package/.next/static/chunks/18977.a98edaf19c6df2d4.js +0 -1
  643. package/.next/static/chunks/26126-97874904b42befb8.js +0 -1
  644. package/.next/static/chunks/31010-6e87f77b97544424.js +0 -1
  645. package/.next/static/chunks/33072.9c3cd19e8d515dea.js +0 -1
  646. package/.next/static/chunks/3765-d323c6675307a63e.js +0 -20
  647. package/.next/static/chunks/39267.ef60669ade47cf4c.js +0 -1
  648. package/.next/static/chunks/41487-d802643f4a8fad3c.js +0 -199
  649. package/.next/static/chunks/48273-bbd15bac6733dfc4.js +0 -6
  650. package/.next/static/chunks/52333.f98d1cca9a127b34.js +0 -1
  651. package/.next/static/chunks/6935-f436a624267529fb.js +0 -1
  652. package/.next/static/chunks/70400.1816c247ad90f9bc.js +0 -1
  653. package/.next/static/chunks/7113.39704408fef3d26e.js +0 -1
  654. package/.next/static/chunks/85853.39872899093b140a.js +0 -1
  655. package/.next/static/chunks/86155.40f687f9aaa13854.js +0 -1
  656. package/.next/static/chunks/86339.4dbd51a9b9871f65.js +0 -1
  657. package/.next/static/chunks/86939-dfc6f8eb395caa89.js +0 -1
  658. package/.next/static/chunks/93794-5f89a674d8cefcff.js +0 -32
  659. package/.next/static/chunks/989-94bf2b9d242776c3.js +0 -3
  660. package/.next/static/chunks/app/(app)/agents/[name]/page-8bdd0359043537d4.js +0 -8
  661. package/.next/static/chunks/app/(app)/changes/page-4549a5bd72d77e3e.js +0 -1
  662. package/.next/static/chunks/app/(app)/claude-md/edit/page-08e6e120e71979f4.js +0 -1
  663. package/.next/static/chunks/app/(app)/commands/[name]/page-7cdfdef29ded0aa0.js +0 -6
  664. package/.next/static/chunks/app/(app)/files/page-f526eb95821e000e.js +0 -1
  665. package/.next/static/chunks/app/(app)/inbox/[id]/page-bc1ff3a0db0114a4.js +0 -1
  666. package/.next/static/chunks/app/(app)/inbox/page-82e03870103ce9bd.js +0 -1
  667. package/.next/static/chunks/app/(app)/jobs/[id]/edit/page-7fb788f772ff2129.js +0 -1
  668. package/.next/static/chunks/app/(app)/jobs/[id]/page-a5856b9ae967ff59.js +0 -1
  669. package/.next/static/chunks/app/(app)/jobs/[id]/runs/[runId]/page-b7c513402db11db6.js +0 -1
  670. package/.next/static/chunks/app/(app)/jobs/page-e9bbd6c116b9699f.js +0 -1
  671. package/.next/static/chunks/app/(app)/mcp-servers/page-4b7276d43451cd43.js +0 -1
  672. package/.next/static/chunks/app/(app)/reviews/[owner]/[repo]/[number]/page-9ab2955c455bb5fa.js +0 -13
  673. package/.next/static/chunks/app/(app)/sessions/[id]/page-94f891e1b54fd05f.js +0 -1
  674. package/.next/static/chunks/app/(app)/settings/notifications/page-229f1db6beb1d19c.js +0 -1
  675. package/.next/static/chunks/app/(app)/settings/providers/[id]/page-13654263246617b3.js +0 -1
  676. package/.next/static/chunks/app/(app)/settings/providers/new/page-e1798e321ccbc6df.js +0 -1
  677. package/.next/static/chunks/app/(app)/settings/providers/page-0bb4c1db2ee35b3d.js +0 -1
  678. package/.next/static/chunks/app/(app)/settings/session/page-ab216a8fa37a0f76.js +0 -1
  679. package/.next/static/chunks/app/(app)/skills/[name]/page-8ab85d5090967ee4.js +0 -6
  680. package/.next/static/chunks/app/_global-error/page-fc747760bd4c8a4b.js +0 -1
  681. package/.next/static/chunks/app/api/agents/[name]/route-fc747760bd4c8a4b.js +0 -1
  682. package/.next/static/chunks/app/api/agents/route-fc747760bd4c8a4b.js +0 -1
  683. package/.next/static/chunks/app/api/auth/check/route-fc747760bd4c8a4b.js +0 -1
  684. package/.next/static/chunks/app/api/auth/login/route-fc747760bd4c8a4b.js +0 -1
  685. package/.next/static/chunks/app/api/auth/setup/route-fc747760bd4c8a4b.js +0 -1
  686. package/.next/static/chunks/app/api/auth/ws-token/route-fc747760bd4c8a4b.js +0 -1
  687. package/.next/static/chunks/app/api/btw/route-fc747760bd4c8a4b.js +0 -1
  688. package/.next/static/chunks/app/api/claude-md/route-fc747760bd4c8a4b.js +0 -1
  689. package/.next/static/chunks/app/api/commands/[name]/route-fc747760bd4c8a4b.js +0 -1
  690. package/.next/static/chunks/app/api/commands/route-fc747760bd4c8a4b.js +0 -1
  691. package/.next/static/chunks/app/api/defaults/route-fc747760bd4c8a4b.js +0 -1
  692. package/.next/static/chunks/app/api/filesystem/browse/route-fc747760bd4c8a4b.js +0 -1
  693. package/.next/static/chunks/app/api/filesystem/files/route-fc747760bd4c8a4b.js +0 -1
  694. package/.next/static/chunks/app/api/filesystem/mkdir/route-fc747760bd4c8a4b.js +0 -1
  695. package/.next/static/chunks/app/api/filesystem/read/route-fc747760bd4c8a4b.js +0 -1
  696. package/.next/static/chunks/app/api/git/clone/route-fc747760bd4c8a4b.js +0 -1
  697. package/.next/static/chunks/app/api/git/commit/route-fc747760bd4c8a4b.js +0 -1
  698. package/.next/static/chunks/app/api/git/diff/route-fc747760bd4c8a4b.js +0 -1
  699. package/.next/static/chunks/app/api/git/discard/route-fc747760bd4c8a4b.js +0 -1
  700. package/.next/static/chunks/app/api/git/generate-message/route-fc747760bd4c8a4b.js +0 -1
  701. package/.next/static/chunks/app/api/git/push/route-fc747760bd4c8a4b.js +0 -1
  702. package/.next/static/chunks/app/api/git/status/route-fc747760bd4c8a4b.js +0 -1
  703. package/.next/static/chunks/app/api/github/file-content/route-fc747760bd4c8a4b.js +0 -1
  704. package/.next/static/chunks/app/api/github/orgs/route-fc747760bd4c8a4b.js +0 -1
  705. package/.next/static/chunks/app/api/github/prs/checks/route-fc747760bd4c8a4b.js +0 -1
  706. package/.next/static/chunks/app/api/github/prs/diff/route-fc747760bd4c8a4b.js +0 -1
  707. package/.next/static/chunks/app/api/github/prs/review/route-fc747760bd4c8a4b.js +0 -1
  708. package/.next/static/chunks/app/api/github/prs/route-fc747760bd4c8a4b.js +0 -1
  709. package/.next/static/chunks/app/api/github/prs/view/route-fc747760bd4c8a4b.js +0 -1
  710. package/.next/static/chunks/app/api/github/repos/route-fc747760bd4c8a4b.js +0 -1
  711. package/.next/static/chunks/app/api/github/review-session/route-fc747760bd4c8a4b.js +0 -1
  712. package/.next/static/chunks/app/api/health/route-fc747760bd4c8a4b.js +0 -1
  713. package/.next/static/chunks/app/api/hooks/route-fc747760bd4c8a4b.js +0 -1
  714. package/.next/static/chunks/app/api/inbox/[id]/route-fc747760bd4c8a4b.js +0 -1
  715. package/.next/static/chunks/app/api/inbox/route-fc747760bd4c8a4b.js +0 -1
  716. package/.next/static/chunks/app/api/jobs/[id]/route-fc747760bd4c8a4b.js +0 -1
  717. package/.next/static/chunks/app/api/jobs/[id]/runs/[runId]/route-fc747760bd4c8a4b.js +0 -1
  718. package/.next/static/chunks/app/api/jobs/[id]/runs/[runId]/transcript/route-fc747760bd4c8a4b.js +0 -1
  719. package/.next/static/chunks/app/api/jobs/[id]/runs/route-fc747760bd4c8a4b.js +0 -1
  720. package/.next/static/chunks/app/api/jobs/[id]/trigger/route-fc747760bd4c8a4b.js +0 -1
  721. package/.next/static/chunks/app/api/jobs/mcp-discover/route-fc747760bd4c8a4b.js +0 -1
  722. package/.next/static/chunks/app/api/jobs/route-fc747760bd4c8a4b.js +0 -1
  723. package/.next/static/chunks/app/api/jobs/status/route-fc747760bd4c8a4b.js +0 -1
  724. package/.next/static/chunks/app/api/mcp-servers/[name]/route-fc747760bd4c8a4b.js +0 -1
  725. package/.next/static/chunks/app/api/mcp-servers/[name]/test/route-fc747760bd4c8a4b.js +0 -1
  726. package/.next/static/chunks/app/api/mcp-servers/route-fc747760bd4c8a4b.js +0 -1
  727. package/.next/static/chunks/app/api/notifications/route-fc747760bd4c8a4b.js +0 -1
  728. package/.next/static/chunks/app/api/notifications/test/route-fc747760bd4c8a4b.js +0 -1
  729. package/.next/static/chunks/app/api/providers/[id]/route-fc747760bd4c8a4b.js +0 -1
  730. package/.next/static/chunks/app/api/providers/route-fc747760bd4c8a4b.js +0 -1
  731. package/.next/static/chunks/app/api/reviews/pinned/route-fc747760bd4c8a4b.js +0 -1
  732. package/.next/static/chunks/app/api/sessions/[id]/context/route-fc747760bd4c8a4b.js +0 -1
  733. package/.next/static/chunks/app/api/sessions/[id]/mcp/route-fc747760bd4c8a4b.js +0 -1
  734. package/.next/static/chunks/app/api/sessions/[id]/route-fc747760bd4c8a4b.js +0 -1
  735. package/.next/static/chunks/app/api/sessions/[id]/search/route-fc747760bd4c8a4b.js +0 -1
  736. package/.next/static/chunks/app/api/sessions/[id]/tabs/route-fc747760bd4c8a4b.js +0 -1
  737. package/.next/static/chunks/app/api/sessions/bulk-delete/route-fc747760bd4c8a4b.js +0 -1
  738. package/.next/static/chunks/app/api/sessions/by-ids/route-fc747760bd4c8a4b.js +0 -1
  739. package/.next/static/chunks/app/api/sessions/group/route-fc747760bd4c8a4b.js +0 -1
  740. package/.next/static/chunks/app/api/sessions/pinned/route-fc747760bd4c8a4b.js +0 -1
  741. package/.next/static/chunks/app/api/sessions/route-fc747760bd4c8a4b.js +0 -1
  742. package/.next/static/chunks/app/api/sessions/search/route-fc747760bd4c8a4b.js +0 -1
  743. package/.next/static/chunks/app/api/sessions/thinking/route-fc747760bd4c8a4b.js +0 -1
  744. package/.next/static/chunks/app/api/skills/[name]/route-fc747760bd4c8a4b.js +0 -1
  745. package/.next/static/chunks/app/api/skills/route-fc747760bd4c8a4b.js +0 -1
  746. package/.next/static/chunks/app/api/terminal/[id]/route-fc747760bd4c8a4b.js +0 -1
  747. package/.next/static/chunks/app/api/terminal/route-fc747760bd4c8a4b.js +0 -1
  748. package/.next/static/chunks/app/api/usage/route-fc747760bd4c8a4b.js +0 -1
  749. package/.next/static/chunks/app/api/version/changelog/route-fc747760bd4c8a4b.js +0 -1
  750. package/.next/static/chunks/app/api/version/cockpit/changelog/route-fc747760bd4c8a4b.js +0 -1
  751. package/.next/static/chunks/app/api/version/cockpit/route-fc747760bd4c8a4b.js +0 -1
  752. package/.next/static/chunks/app/api/version/route-fc747760bd4c8a4b.js +0 -1
  753. package/.next/static/chunks/next/dist/client/components/builtin/app-error-fc747760bd4c8a4b.js +0 -1
  754. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-fc747760bd4c8a4b.js +0 -1
  755. package/.next/static/chunks/next/dist/client/components/builtin/not-found-fc747760bd4c8a4b.js +0 -1
  756. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-fc747760bd4c8a4b.js +0 -1
  757. package/.next/static/chunks/webpack-e31bb45fa59caed8.js +0 -1
  758. package/.next/static/css/3f8af4ae6f812d5c.css +0 -1
  759. package/.next/static/zr8XZzqb74eHitdlkpo-C/_buildManifest.js +0 -1
  760. /package/.next/static/{zr8XZzqb74eHitdlkpo-C → mmHo0MmzQHWjZATtI-VbH}/_ssgManifest.js +0 -0
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.dispatchNotification = dispatchNotification;
4
4
  exports.sendTestNotification = sendTestNotification;
5
+ const debug_logger_1 = require("./debug-logger");
5
6
  const notification_settings_1 = require("./notification-settings");
6
7
  function buildFullUrl(path, baseUrl) {
7
8
  if (!path)
@@ -17,11 +18,57 @@ function formatPlainMessage(payload, baseUrl) {
17
18
  const link = url ? `\n\n${url}` : "";
18
19
  return `${prefix}${payload.title}\n\n${payload.body}${link}`;
19
20
  }
21
+ const MAX_NOTIFY_ATTEMPTS = 3;
22
+ const NOTIFY_TIMEOUT_MS = 10_000;
23
+ function notifyBackoffMs(attempt) {
24
+ // No backoff under vitest so retry tests stay fast.
25
+ if (process.env.VITEST || process.env.NODE_ENV === "test")
26
+ return 0;
27
+ return 300 * 2 ** (attempt - 1);
28
+ }
29
+ /**
30
+ * POST a notification with a per-attempt timeout and bounded retry.
31
+ * dispatchNotification fires this without awaiting, so without it a single
32
+ * transient failure — a hung keep-alive socket (no timeout means it hangs
33
+ * forever and never even logs), an ntfy rate-limit, a network blip — silently
34
+ * drops the push while the inbox entry has already persisted. Retries network
35
+ * and timeout errors plus 429/5xx; fails fast on other 4xx (config errors that
36
+ * will not recover by retrying).
37
+ */
38
+ async function postWithRetry(label, url, init) {
39
+ let lastErr;
40
+ for (let attempt = 1; attempt <= MAX_NOTIFY_ATTEMPTS; attempt++) {
41
+ const controller = new AbortController();
42
+ const timer = setTimeout(() => controller.abort(), NOTIFY_TIMEOUT_MS);
43
+ let permanent = false;
44
+ try {
45
+ const res = await fetch(url, { ...init, signal: controller.signal });
46
+ if (res.ok)
47
+ return;
48
+ const body = await res.text().catch(() => "");
49
+ lastErr = new Error(`${label} ${res.status}: ${body}`);
50
+ permanent = res.status < 500 && res.status !== 429;
51
+ }
52
+ catch (err) {
53
+ lastErr = err; // network error or timeout abort — retryable
54
+ }
55
+ finally {
56
+ clearTimeout(timer);
57
+ }
58
+ if (permanent)
59
+ break;
60
+ if (attempt < MAX_NOTIFY_ATTEMPTS) {
61
+ (0, debug_logger_1.debugLog)(`[notifications] ${label} attempt ${attempt}/${MAX_NOTIFY_ATTEMPTS} failed, retrying: ${lastErr instanceof Error ? lastErr.message : String(lastErr)}`);
62
+ await new Promise((r) => setTimeout(r, notifyBackoffMs(attempt)));
63
+ }
64
+ }
65
+ throw lastErr instanceof Error ? lastErr : new Error(`${label}: ${String(lastErr)}`);
66
+ }
20
67
  const telegramProvider = {
21
68
  async send(payload, config, baseUrl) {
22
69
  const text = formatPlainMessage(payload, baseUrl);
23
70
  const url = `https://api.telegram.org/bot${config.botToken}/sendMessage`;
24
- const res = await fetch(url, {
71
+ await postWithRetry("Telegram API", url, {
25
72
  method: "POST",
26
73
  headers: { "Content-Type": "application/json" },
27
74
  body: JSON.stringify({
@@ -30,10 +77,6 @@ const telegramProvider = {
30
77
  disable_web_page_preview: true,
31
78
  }),
32
79
  });
33
- if (!res.ok) {
34
- const body = await res.text();
35
- throw new Error(`Telegram API ${res.status}: ${body}`);
36
- }
37
80
  },
38
81
  };
39
82
  const ntfyProvider = {
@@ -51,15 +94,11 @@ const ntfyProvider = {
51
94
  if (fullUrl) {
52
95
  headers.Click = fullUrl;
53
96
  }
54
- const res = await fetch(url, {
97
+ await postWithRetry("ntfy", url, {
55
98
  method: "POST",
56
99
  headers,
57
100
  body: payload.body,
58
101
  });
59
- if (!res.ok) {
60
- const body = await res.text();
61
- throw new Error(`ntfy ${res.status}: ${body}`);
62
- }
63
102
  },
64
103
  };
65
104
  function getProvider(type) {
@@ -100,7 +139,9 @@ function dispatchNotification(payload) {
100
139
  if (!provider)
101
140
  continue;
102
141
  provider.send(payload, entry.config, settings.baseUrl).catch((err) => {
142
+ const message = err instanceof Error ? err.message : String(err);
103
143
  console.error(`[notifications] ${entry.type}/${entry.name} failed:`, err);
144
+ (0, debug_logger_1.debugLog)(`[notifications] ${entry.type}/${entry.name} failed after retries: ${message}`);
104
145
  });
105
146
  }
106
147
  }
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.coercePluginScope = coercePluginScope;
4
+ exports.runClaudePlugin = runClaudePlugin;
5
+ exports.listPlugins = listPlugins;
6
+ exports.listMarketplaces = listMarketplaces;
7
+ exports.setPluginEnabled = setPluginEnabled;
8
+ exports.uninstallPlugin = uninstallPlugin;
9
+ exports.installPlugin = installPlugin;
10
+ exports.updatePlugin = updatePlugin;
11
+ exports.addMarketplace = addMarketplace;
12
+ exports.removeMarketplace = removeMarketplace;
13
+ exports.updateMarketplace = updateMarketplace;
14
+ const node_child_process_1 = require("node:child_process");
15
+ const node_util_1 = require("node:util");
16
+ const claude_bin_1 = require("../server/claude-bin");
17
+ const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
18
+ // Marketplace refresh and `install`/`update` shell out to git, which can be slow
19
+ // on a cold cache. Read commands are sub-second, but share the same ceiling.
20
+ const PLUGIN_CMD_TIMEOUT_MS = 120_000;
21
+ // The `--available` catalog JSON is ~110KB today (200+ plugins); leave headroom.
22
+ const PLUGIN_CMD_MAX_BUFFER = 32 * 1024 * 1024;
23
+ const PLUGIN_SCOPES = new Set(["user", "project", "local"]);
24
+ /** Narrow an arbitrary string to a PluginScope, or undefined to let the CLI decide. */
25
+ function coercePluginScope(value) {
26
+ return value && PLUGIN_SCOPES.has(value) ? value : undefined;
27
+ }
28
+ /**
29
+ * Run `claude plugin <args...>` non-interactively and capture its output.
30
+ * Never throws on a non-zero exit -- the caller inspects `ok` and `stderr` so
31
+ * CLI errors surface to the UI instead of crashing the route.
32
+ */
33
+ async function runClaudePlugin(args) {
34
+ try {
35
+ const { stdout, stderr } = await execFileAsync((0, claude_bin_1.getClaudeBin)(), ["plugin", ...args], {
36
+ encoding: "utf-8",
37
+ timeout: PLUGIN_CMD_TIMEOUT_MS,
38
+ maxBuffer: PLUGIN_CMD_MAX_BUFFER,
39
+ });
40
+ return { ok: true, stdout, stderr };
41
+ }
42
+ catch (err) {
43
+ const e = err;
44
+ return { ok: false, stdout: e.stdout ?? "", stderr: e.stderr || e.message || "plugin command failed" };
45
+ }
46
+ }
47
+ /** Installed plugins plus the full marketplace catalog, in one CLI call. */
48
+ async function listPlugins() {
49
+ const res = await runClaudePlugin(["list", "--available", "--json"]);
50
+ if (!res.ok)
51
+ throw new Error(res.stderr);
52
+ const parsed = JSON.parse(res.stdout);
53
+ return { installed: parsed.installed ?? [], available: parsed.available ?? [] };
54
+ }
55
+ async function listMarketplaces() {
56
+ const res = await runClaudePlugin(["marketplace", "list", "--json"]);
57
+ if (!res.ok)
58
+ throw new Error(res.stderr);
59
+ return JSON.parse(res.stdout);
60
+ }
61
+ /** Enable or disable an installed plugin. Scope defaults to the CLI's auto-detect. */
62
+ async function setPluginEnabled(id, enabled, scope) {
63
+ const args = [enabled ? "enable" : "disable", id];
64
+ if (scope)
65
+ args.push("-s", scope);
66
+ return runClaudePlugin(args);
67
+ }
68
+ /** Uninstall a plugin. `-y` is required because cockpit runs the CLI without a TTY. */
69
+ async function uninstallPlugin(id, scope) {
70
+ const args = ["uninstall", id, "-y"];
71
+ if (scope)
72
+ args.push("-s", scope);
73
+ return runClaudePlugin(args);
74
+ }
75
+ /** Install a plugin (id is "name@marketplace"). Clones from the marketplace source, so it can be slow. */
76
+ async function installPlugin(id, scope = "user") {
77
+ return runClaudePlugin(["install", id, "-s", scope]);
78
+ }
79
+ /** Update an installed plugin from its marketplace source. Runs git pull on the plugin's source. */
80
+ async function updatePlugin(id) {
81
+ return runClaudePlugin(["update", id]);
82
+ }
83
+ /** Add a marketplace from a URL, path, or GitHub repo. Clones from the source, so it can be slow. Scope defaults to user. */
84
+ async function addMarketplace(source, scope) {
85
+ const args = ["marketplace", "add", source];
86
+ if (scope)
87
+ args.push("--scope", scope);
88
+ return runClaudePlugin(args);
89
+ }
90
+ /** Remove a configured marketplace. Omitting scope removes its declaration from every settings scope. */
91
+ async function removeMarketplace(name, scope) {
92
+ const args = ["marketplace", "remove", name];
93
+ if (scope)
94
+ args.push("--scope", scope);
95
+ return runClaudePlugin(args);
96
+ }
97
+ /** Update one marketplace from its source, or all when name is omitted. Hits git, so it can be slow. */
98
+ async function updateMarketplace(name) {
99
+ const args = ["marketplace", "update"];
100
+ if (name)
101
+ args.push(name);
102
+ return runClaudePlugin(args);
103
+ }
@@ -35,6 +35,21 @@ function buildAnthropicProvider() {
35
35
  };
36
36
  }
37
37
  let cache = null;
38
+ // mtime of providers.json at the last load. Cockpit runs as two separate module
39
+ // graphs — the custom server (dist/, which spawns sessions) and the Next.js API
40
+ // routes (settings CRUD) — so a provider added/edited via settings only resets
41
+ // that graph's `cache`, never the spawner's, leaving new sessions on a stale list
42
+ // until restart. Gating the cache on the file mtime makes either graph (and a
43
+ // hand-edit of the file) reload when the file changes.
44
+ let cacheMtimeMs = 0;
45
+ function providersMtimeMs() {
46
+ try {
47
+ return (0, node_fs_1.statSync)(providersFile()).mtimeMs;
48
+ }
49
+ catch {
50
+ return 0; // file absent — no custom providers yet
51
+ }
52
+ }
38
53
  function loadCustom() {
39
54
  try {
40
55
  return JSON.parse((0, node_fs_1.readFileSync)(providersFile(), "utf-8"));
@@ -53,8 +68,10 @@ function saveCustom(providers) {
53
68
  }
54
69
  }
55
70
  function getProviders() {
56
- if (!cache) {
71
+ const mtime = providersMtimeMs();
72
+ if (cache === null || mtime !== cacheMtimeMs) {
57
73
  cache = [buildAnthropicProvider(), ...loadCustom()];
74
+ cacheMtimeMs = mtime;
58
75
  }
59
76
  return cache;
60
77
  }
@@ -69,6 +86,7 @@ function addProvider(provider) {
69
86
  custom.push(newProvider);
70
87
  saveCustom(custom);
71
88
  cache = [buildAnthropicProvider(), ...custom];
89
+ cacheMtimeMs = providersMtimeMs();
72
90
  return newProvider;
73
91
  }
74
92
  function updateProvider(id, partial) {
@@ -84,6 +102,7 @@ function updateProvider(id, partial) {
84
102
  custom[idx] = merged;
85
103
  saveCustom(custom);
86
104
  cache = [buildAnthropicProvider(), ...custom];
105
+ cacheMtimeMs = providersMtimeMs();
87
106
  return custom[idx];
88
107
  }
89
108
  function deleteProvider(id) {
@@ -96,6 +115,7 @@ function deleteProvider(id) {
96
115
  }
97
116
  saveCustom(custom);
98
117
  cache = [buildAnthropicProvider(), ...custom];
118
+ cacheMtimeMs = providersMtimeMs();
99
119
  }
100
120
  function setProviders(providers) {
101
121
  const custom = providers.filter((p) => !p.isBuiltin);
@@ -103,6 +123,7 @@ function setProviders(providers) {
103
123
  validateProvider(p);
104
124
  saveCustom(custom);
105
125
  cache = [buildAnthropicProvider(), ...custom];
126
+ cacheMtimeMs = providersMtimeMs();
106
127
  }
107
128
  function resolveProviderModel(modelId) {
108
129
  if (!modelId)
@@ -110,7 +131,9 @@ function resolveProviderModel(modelId) {
110
131
  const colon = modelId.indexOf(":");
111
132
  if (colon > 0) {
112
133
  const providerId = modelId.slice(0, colon);
113
- const bareModel = modelId.slice(colon + 1);
134
+ // Strip a legacy context suffix (e.g. "deepseek-v4-pro[1m]") so a job whose
135
+ // stored model still carries one resolves to the cleaned provider model.
136
+ const bareModel = modelId.slice(colon + 1).replace(/\[.*\]$/, "");
114
137
  const provider = getProvider(providerId);
115
138
  if (provider) {
116
139
  const model = provider.models.find((m) => m.modelId === bareModel);
@@ -4,8 +4,10 @@ exports.PtyRuntime = void 0;
4
4
  const uuid_1 = require("uuid");
5
5
  const claude_settings_1 = require("./claude-settings");
6
6
  const cli_init_fetch_1 = require("./cli-init-fetch");
7
+ const debug_logger_1 = require("./debug-logger");
7
8
  const hook_event_translator_1 = require("./hook-event-translator");
8
9
  const pty_session_1 = require("./pty-session");
10
+ const transcript_1 = require("./transcript");
9
11
  /**
10
12
  * Owns a claude PTY process plus its HookRouter registration. Translates
11
13
  * hook payloads into ParsedEvents and pumps them through opts.onEvents so
@@ -25,6 +27,8 @@ class PtyRuntime {
25
27
  pendingPermissions = new Map();
26
28
  exited = false;
27
29
  cleaned = false;
30
+ /** Resolver armed by deliverInitialPrompt; fired when UserPromptSubmit confirms the first prompt landed. */
31
+ promptAccepted = null;
28
32
  ptyOutputBuffer = "";
29
33
  errorDebounce = null;
30
34
  constructor(opts) {
@@ -38,6 +42,8 @@ class PtyRuntime {
38
42
  }
39
43
  async start(initialText) {
40
44
  const { sessionId, cwd, hookRouter } = this.opts;
45
+ const startAt = Date.now();
46
+ (0, debug_logger_1.logDiag)(sessionId, "pty:start-enter", { hasInitialText: !!initialText });
41
47
  const token = hookRouter.register(sessionId, this.buildHandler());
42
48
  const { settingsPath, env } = await (0, claude_settings_1.prepareHookSettings)({
43
49
  sessionId,
@@ -47,6 +53,7 @@ class PtyRuntime {
47
53
  denyList: this.opts.denyList,
48
54
  });
49
55
  this.settingsPath = settingsPath;
56
+ (0, debug_logger_1.logDiag)(sessionId, "pty:hooks-ready", { elapsedMs: Date.now() - startAt });
50
57
  this.pty = new pty_session_1.PtySession({
51
58
  cwd,
52
59
  settingsPath,
@@ -67,29 +74,103 @@ class PtyRuntime {
67
74
  await this.pty.start();
68
75
  }
69
76
  catch (err) {
77
+ (0, debug_logger_1.logDiag)(sessionId, "pty:process-start-failed", {
78
+ elapsedMs: Date.now() - startAt,
79
+ error: err instanceof Error ? err.message : String(err),
80
+ });
70
81
  await this.cleanup();
71
82
  throw err;
72
83
  }
84
+ (0, debug_logger_1.logDiag)(sessionId, "pty:process-started", { pid: this.pid, elapsedMs: Date.now() - startAt });
73
85
  if (initialText) {
74
- await this.pty.sendText(initialText);
86
+ await this.deliverInitialPrompt(initialText);
75
87
  }
88
+ (0, debug_logger_1.logDiag)(sessionId, "pty:start-complete", { elapsedMs: Date.now() - startAt });
76
89
  this.fetchInitData();
77
90
  }
91
+ /**
92
+ * Type the first prompt into the freshly spawned TUI and confirm the CLI
93
+ * accepted it. waitForReplReady is only a heuristic (first 100 bytes plus a
94
+ * 2s settle), so on a slow or quiet machine the input box may not be live
95
+ * when the keystrokes land and they are swallowed with no error. Without a
96
+ * check the turn never starts and the only backstop is the caller's watchdog,
97
+ * which for scheduled jobs is a silent 30-60 minute timeout with an empty
98
+ * transcript. Resend until the UserPromptSubmit hook confirms acceptance,
99
+ * then fail fast so the job reports an error instead of hanging.
100
+ */
101
+ async deliverInitialPrompt(text) {
102
+ const { sessionId } = this.opts;
103
+ const MAX_ATTEMPTS = 4;
104
+ const CONFIRM_TIMEOUT_MS = 8000;
105
+ // A submitted prompt writes a user turn to the JSONL transcript. Growth past
106
+ // this baseline proves the CLI accepted the prompt even when the
107
+ // UserPromptSubmit hook never arrives — that hook is the only other
108
+ // acceptance signal, and its loss used to fail an actively-working run (it
109
+ // resent the 7KB prompt into a live turn, then killed the process). The
110
+ // transcript is hook- and echo-independent, so we check it at the end of
111
+ // each attempt's window before resending or failing.
112
+ const baselineMsgs = (0, transcript_1.countTranscriptMessages)(this.opts.cliSessionId, this.opts.cwd);
113
+ const turnStarted = () => (0, transcript_1.countTranscriptMessages)(this.opts.cliSessionId, this.opts.cwd) > baselineMsgs;
114
+ (0, debug_logger_1.logDiag)(sessionId, "pty:deliver-begin", { textLen: text.length, maxAttempts: MAX_ATTEMPTS, baselineMsgs });
115
+ for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {
116
+ const pty = this.pty;
117
+ if (this.exited || !pty) {
118
+ (0, debug_logger_1.logDiag)(sessionId, "pty:deliver-aborted", { attempt, exited: this.exited, hasPty: !!pty });
119
+ throw new Error("claude exited before the initial prompt was delivered");
120
+ }
121
+ let timer = null;
122
+ const accepted = new Promise((resolve) => {
123
+ this.promptAccepted = () => resolve(true);
124
+ timer = setTimeout(() => resolve(false), CONFIRM_TIMEOUT_MS);
125
+ });
126
+ const attemptAt = Date.now();
127
+ (0, debug_logger_1.logDiag)(sessionId, "pty:deliver-attempt", { attempt, screenBefore: this.recentScreen() });
128
+ await pty.sendText(text);
129
+ const ok = await accepted;
130
+ if (timer)
131
+ clearTimeout(timer);
132
+ this.promptAccepted = null;
133
+ if (ok) {
134
+ (0, debug_logger_1.logDiag)(sessionId, "pty:deliver-accepted", { attempt, waitedMs: Date.now() - attemptAt });
135
+ return;
136
+ }
137
+ // The hook did not fire in this window. It can be lost even though the CLI
138
+ // accepted the prompt and started working, so before resending or failing,
139
+ // check whether a turn has actually started. If it has, the prompt landed;
140
+ // do not resend into a live turn or kill a working run.
141
+ if (turnStarted()) {
142
+ (0, debug_logger_1.logDiag)(sessionId, "pty:deliver-accepted-via-transcript", { attempt, waitedMs: Date.now() - attemptAt });
143
+ return;
144
+ }
145
+ (0, debug_logger_1.logDiag)(sessionId, "pty:deliver-timeout", { attempt, waitedMs: Date.now() - attemptAt, screenAfter: this.recentScreen() });
146
+ console.log(`[pty-runtime] initial prompt not confirmed for ${sessionId.slice(0, 8)} (attempt ${attempt}/${MAX_ATTEMPTS}), resending`);
147
+ }
148
+ (0, debug_logger_1.logDiag)(sessionId, "pty:deliver-failed", { attempts: MAX_ATTEMPTS });
149
+ throw new Error(`claude did not accept the initial prompt after ${MAX_ATTEMPTS} attempts`);
150
+ }
78
151
  fetchInitData() {
79
- const sid = this.opts.sessionId.slice(0, 8);
152
+ const { sessionId } = this.opts;
153
+ const sid = sessionId.slice(0, 8);
80
154
  console.log(`[pty-runtime] fetching CLI init data for session ${sid}`);
155
+ (0, debug_logger_1.logDiag)(sessionId, "pty:init-fetch-begin");
81
156
  (0, cli_init_fetch_1.fetchCliInitData)({ cwd: this.opts.cwd, bin: this.opts.claudeBin })
82
157
  .then((initData) => {
83
158
  if (initData && !this.exited) {
84
159
  console.log(`[pty-runtime] emitting init event for session ${sid}: ${initData.slashCommands.length} commands`);
160
+ (0, debug_logger_1.logDiag)(sessionId, "pty:init-fetch-done", {
161
+ slashCommands: initData.slashCommands.length,
162
+ mcpServers: initData.mcpServers?.length ?? 0,
163
+ });
85
164
  this.emit([{ type: "init", initData }]);
86
165
  }
87
166
  else {
88
167
  console.log(`[pty-runtime] init fetch returned ${initData ? "data but session exited" : "null"} for session ${sid}`);
168
+ (0, debug_logger_1.logDiag)(sessionId, "pty:init-fetch-empty", { exited: this.exited, hadData: !!initData });
89
169
  }
90
170
  })
91
171
  .catch((err) => {
92
172
  console.log(`[pty-runtime] init fetch failed for session ${sid}: ${err}`);
173
+ (0, debug_logger_1.logDiag)(sessionId, "pty:init-fetch-failed", { error: err instanceof Error ? err.message : String(err) });
93
174
  });
94
175
  }
95
176
  async sendText(text) {
@@ -136,9 +217,16 @@ class PtyRuntime {
136
217
  /** Called by SessionManager.respondToPermission when this session is on the pty runtime. */
137
218
  notifyPermissionDecision(requestId, decision) {
138
219
  const resolver = this.pendingPermissions.get(requestId);
139
- if (!resolver)
220
+ if (!resolver) {
221
+ (0, debug_logger_1.logDiag)(this.opts.sessionId, "pty:permission-decision-unmatched", { requestId, behavior: decision.behavior });
140
222
  return false;
223
+ }
141
224
  this.pendingPermissions.delete(requestId);
225
+ (0, debug_logger_1.logDiag)(this.opts.sessionId, "pty:permission-decision", {
226
+ requestId,
227
+ behavior: decision.behavior,
228
+ pending: this.pendingPermissions.size,
229
+ });
142
230
  resolver(decision);
143
231
  return true;
144
232
  }
@@ -182,11 +270,14 @@ class PtyRuntime {
182
270
  onUserPromptSubmit: (payload) => {
183
271
  this.cancelErrorDebounce();
184
272
  this.ptyOutputBuffer = "";
273
+ (0, debug_logger_1.logDiag)(this.opts.sessionId, "pty:hook-user-prompt-submit", { armed: !!this.promptAccepted });
274
+ this.promptAccepted?.();
185
275
  this.emit((0, hook_event_translator_1.translateHookEvent)("UserPromptSubmit", payload));
186
276
  },
187
277
  onUserPromptExpansion: (payload) => {
188
278
  this.cancelErrorDebounce();
189
279
  this.ptyOutputBuffer = "";
280
+ this.promptAccepted?.();
190
281
  const cmd = typeof payload.command_name === "string" ? payload.command_name : "unknown";
191
282
  const sid = this.opts.sessionId.slice(0, 8);
192
283
  console.log(`[pty-runtime] UserPromptExpansion: command=${cmd}, session=${sid}`);
@@ -243,6 +334,7 @@ class PtyRuntime {
243
334
  toolInput: toolInput ? JSON.stringify(toolInput) : "",
244
335
  rawToolInput: toolInput,
245
336
  };
337
+ (0, debug_logger_1.logDiag)(this.opts.sessionId, "pty:permission-request", { requestId, toolName });
246
338
  return new Promise((resolve) => {
247
339
  this.pendingPermissions.set(requestId, resolve);
248
340
  try {
@@ -250,6 +342,7 @@ class PtyRuntime {
250
342
  }
251
343
  catch (err) {
252
344
  this.pendingPermissions.delete(requestId);
345
+ (0, debug_logger_1.logDiag)(this.opts.sessionId, "pty:permission-handler-error", { requestId, toolName, error: String(err) });
253
346
  resolve({ behavior: "deny", message: `cockpit handler error: ${String(err)}` });
254
347
  }
255
348
  });
@@ -271,6 +364,22 @@ class PtyRuntime {
271
364
  this.errorDebounce = null;
272
365
  }
273
366
  }
367
+ /**
368
+ * ANSI/control-stripped, whitespace-collapsed tail of the recent PTY output.
369
+ * Debug aid for diagnosing why an initial prompt isn't accepted — shows what
370
+ * the TUI is actually displaying (input box, a startup interstitial, a stuck
371
+ * dialog) at the moment we type or time out.
372
+ */
373
+ recentScreen(maxChars = 600) {
374
+ const clean = this.ptyOutputBuffer
375
+ .replace(ANSI_RE, "")
376
+ // biome-ignore lint/suspicious/noControlCharactersInRegex: strip terminal control chars
377
+ .replace(/[\x00-\x08\x0b\x0c\x0e-\x1f]/g, "")
378
+ .replace(/[ \t]+/g, " ")
379
+ .replace(/\n{2,}/g, "\n")
380
+ .trim();
381
+ return clean.length > maxChars ? clean.slice(-maxChars) : clean;
382
+ }
274
383
  scanForErrors(chunk) {
275
384
  this.ptyOutputBuffer += chunk;
276
385
  if (this.ptyOutputBuffer.length > 8 * 1024) {
@@ -29,12 +29,15 @@ class PtySession {
29
29
  throw new Error("PtySession already started");
30
30
  const bin = this.opts.bin ?? "claude";
31
31
  const args = ["--verbose", "--settings", this.opts.settingsPath, ...(this.opts.extraArgs ?? [])];
32
- const env = {
33
- ...process.env,
34
- ...(this.opts.env ?? {}),
35
- };
32
+ const env = { ...process.env };
36
33
  delete env.CLAUDECODE;
37
34
  delete env.CLAUDE_CODE_ENTRYPOINT;
35
+ // Drop any inherited 1M-context override BEFORE applying the caller's env, so a
36
+ // CLAUDE_CODE_DISABLE_1M_CONTEXT sitting in cockpit's own environment can't pin
37
+ // every session to 200k and defeat a 1m pick. The caller sets it per-session
38
+ // via opts.env (200k → "1"; 1m → absent), which is applied on top here.
39
+ delete env.CLAUDE_CODE_DISABLE_1M_CONTEXT;
40
+ Object.assign(env, this.opts.env ?? {});
38
41
  const spawnFile = process.platform === "darwin" ? "/bin/zsh" : bin;
39
42
  const spawnArgs = process.platform === "darwin" ? ["-l", "-c", `exec ${[bin, ...args].map(shellQuote).join(" ")}`] : args;
40
43
  let diagInfo = `platform=${process.platform}, file=${spawnFile}, cwd=${this.opts.cwd}`;