@alexjbarnes/cockpit 0.1.1 → 0.3.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 (707) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +28 -3
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +147 -3
  5. package/.next/react-loadable-manifest.json +19 -3
  6. package/.next/required-server-files.js +3 -0
  7. package/.next/required-server-files.json +3 -0
  8. package/.next/routes-manifest.json +162 -0
  9. package/.next/server/app/(app)/agents/[name]/page.js +3 -3
  10. package/.next/server/app/(app)/agents/[name]/page.js.nft.json +1 -1
  11. package/.next/server/app/(app)/agents/[name]/page_client-reference-manifest.js +1 -1
  12. package/.next/server/app/(app)/agents/page.js +2 -2
  13. package/.next/server/app/(app)/agents/page.js.nft.json +1 -1
  14. package/.next/server/app/(app)/agents/page_client-reference-manifest.js +1 -1
  15. package/.next/server/app/(app)/changes/page.js +2 -2
  16. package/.next/server/app/(app)/changes/page.js.nft.json +1 -1
  17. package/.next/server/app/(app)/changes/page_client-reference-manifest.js +1 -1
  18. package/.next/server/app/(app)/claude-md/edit/page.js +2 -2
  19. package/.next/server/app/(app)/claude-md/edit/page.js.nft.json +1 -1
  20. package/.next/server/app/(app)/claude-md/edit/page_client-reference-manifest.js +1 -1
  21. package/.next/server/app/(app)/claude-md/page.js +2 -2
  22. package/.next/server/app/(app)/claude-md/page.js.nft.json +1 -1
  23. package/.next/server/app/(app)/claude-md/page_client-reference-manifest.js +1 -1
  24. package/.next/server/app/(app)/commands/[name]/page.js +3 -3
  25. package/.next/server/app/(app)/commands/[name]/page.js.nft.json +1 -1
  26. package/.next/server/app/(app)/commands/[name]/page_client-reference-manifest.js +1 -1
  27. package/.next/server/app/(app)/commands/page.js +2 -2
  28. package/.next/server/app/(app)/commands/page.js.nft.json +1 -1
  29. package/.next/server/app/(app)/commands/page_client-reference-manifest.js +1 -1
  30. package/.next/server/app/(app)/files/page.js +2 -2
  31. package/.next/server/app/(app)/files/page.js.nft.json +1 -1
  32. package/.next/server/app/(app)/files/page_client-reference-manifest.js +1 -1
  33. package/.next/server/app/(app)/hooks/[event]/page.js +3 -3
  34. package/.next/server/app/(app)/hooks/[event]/page.js.nft.json +1 -1
  35. package/.next/server/app/(app)/hooks/[event]/page_client-reference-manifest.js +1 -1
  36. package/.next/server/app/(app)/hooks/page.js +2 -2
  37. package/.next/server/app/(app)/hooks/page.js.nft.json +1 -1
  38. package/.next/server/app/(app)/hooks/page_client-reference-manifest.js +1 -1
  39. package/.next/server/app/(app)/inbox/[id]/page.js +2 -0
  40. package/.next/server/app/(app)/inbox/[id]/page.js.nft.json +1 -0
  41. package/.next/server/app/(app)/inbox/[id]/page_client-reference-manifest.js +1 -0
  42. package/.next/server/app/(app)/inbox/page.js +2 -0
  43. package/.next/server/app/(app)/inbox/page.js.nft.json +1 -0
  44. package/.next/server/app/(app)/inbox/page_client-reference-manifest.js +1 -0
  45. package/.next/server/app/(app)/jobs/[id]/edit/page.js +2 -2
  46. package/.next/server/app/(app)/jobs/[id]/edit/page.js.nft.json +1 -1
  47. package/.next/server/app/(app)/jobs/[id]/edit/page_client-reference-manifest.js +1 -1
  48. package/.next/server/app/(app)/jobs/[id]/page.js +2 -2
  49. package/.next/server/app/(app)/jobs/[id]/page.js.nft.json +1 -1
  50. package/.next/server/app/(app)/jobs/[id]/page_client-reference-manifest.js +1 -1
  51. package/.next/server/app/(app)/jobs/[id]/runs/[runId]/page.js +2 -2
  52. package/.next/server/app/(app)/jobs/[id]/runs/[runId]/page.js.nft.json +1 -1
  53. package/.next/server/app/(app)/jobs/[id]/runs/[runId]/page_client-reference-manifest.js +1 -1
  54. package/.next/server/app/(app)/jobs/page.js +2 -2
  55. package/.next/server/app/(app)/jobs/page.js.nft.json +1 -1
  56. package/.next/server/app/(app)/jobs/page_client-reference-manifest.js +1 -1
  57. package/.next/server/app/(app)/mcp-servers/[name]/page.js +2 -2
  58. package/.next/server/app/(app)/mcp-servers/[name]/page.js.nft.json +1 -1
  59. package/.next/server/app/(app)/mcp-servers/[name]/page_client-reference-manifest.js +1 -1
  60. package/.next/server/app/(app)/mcp-servers/page.js +2 -2
  61. package/.next/server/app/(app)/mcp-servers/page.js.nft.json +1 -1
  62. package/.next/server/app/(app)/mcp-servers/page_client-reference-manifest.js +1 -1
  63. package/.next/server/app/(app)/page.js +2 -2
  64. package/.next/server/app/(app)/page.js.nft.json +1 -1
  65. package/.next/server/app/(app)/page_client-reference-manifest.js +1 -1
  66. package/.next/server/app/(app)/reviews/[owner]/[repo]/[number]/page.js +6 -6
  67. package/.next/server/app/(app)/reviews/[owner]/[repo]/[number]/page.js.nft.json +1 -1
  68. package/.next/server/app/(app)/reviews/[owner]/[repo]/[number]/page_client-reference-manifest.js +1 -1
  69. package/.next/server/app/(app)/reviews/[owner]/[repo]/page.js +2 -2
  70. package/.next/server/app/(app)/reviews/[owner]/[repo]/page.js.nft.json +1 -1
  71. package/.next/server/app/(app)/reviews/[owner]/[repo]/page_client-reference-manifest.js +1 -1
  72. package/.next/server/app/(app)/reviews/page.js +2 -2
  73. package/.next/server/app/(app)/reviews/page.js.nft.json +1 -1
  74. package/.next/server/app/(app)/reviews/page_client-reference-manifest.js +1 -1
  75. package/.next/server/app/(app)/sessions/[id]/page.js +2 -2
  76. package/.next/server/app/(app)/sessions/[id]/page.js.nft.json +1 -1
  77. package/.next/server/app/(app)/sessions/[id]/page_client-reference-manifest.js +1 -1
  78. package/.next/server/app/(app)/settings/appearance/page.js +2 -0
  79. package/.next/server/app/(app)/settings/appearance/page.js.nft.json +1 -0
  80. package/.next/server/app/(app)/settings/appearance/page_client-reference-manifest.js +1 -0
  81. package/.next/server/app/(app)/settings/notifications/page.js +2 -0
  82. package/.next/server/app/(app)/settings/notifications/page.js.nft.json +1 -0
  83. package/.next/server/app/(app)/settings/notifications/page_client-reference-manifest.js +1 -0
  84. package/.next/server/app/(app)/settings/page.js +2 -2
  85. package/.next/server/app/(app)/settings/page.js.nft.json +1 -1
  86. package/.next/server/app/(app)/settings/page_client-reference-manifest.js +1 -1
  87. package/.next/server/app/(app)/settings/providers/[id]/page.js +2 -0
  88. package/.next/server/app/(app)/settings/providers/[id]/page.js.nft.json +1 -0
  89. package/.next/server/app/(app)/settings/providers/[id]/page_client-reference-manifest.js +1 -0
  90. package/.next/server/app/(app)/settings/providers/new/page.js +2 -0
  91. package/.next/server/app/(app)/settings/providers/new/page.js.nft.json +1 -0
  92. package/.next/server/app/(app)/settings/providers/new/page_client-reference-manifest.js +1 -0
  93. package/.next/server/app/(app)/settings/providers/page.js +2 -0
  94. package/.next/server/app/(app)/settings/providers/page.js.nft.json +1 -0
  95. package/.next/server/app/(app)/settings/providers/page_client-reference-manifest.js +1 -0
  96. package/.next/server/app/(app)/settings/session/page.js +2 -0
  97. package/.next/server/app/(app)/settings/session/page.js.nft.json +1 -0
  98. package/.next/server/app/(app)/settings/session/page_client-reference-manifest.js +1 -0
  99. package/.next/server/app/(app)/skills/[name]/page.js +3 -3
  100. package/.next/server/app/(app)/skills/[name]/page.js.nft.json +1 -1
  101. package/.next/server/app/(app)/skills/[name]/page_client-reference-manifest.js +1 -1
  102. package/.next/server/app/(app)/skills/page.js +2 -2
  103. package/.next/server/app/(app)/skills/page.js.nft.json +1 -1
  104. package/.next/server/app/(app)/skills/page_client-reference-manifest.js +1 -1
  105. package/.next/server/app/_global-error/page.js +3 -3
  106. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  107. package/.next/server/app/_global-error.html +1 -1
  108. package/.next/server/app/_global-error.rsc +1 -1
  109. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  110. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  111. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  112. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  113. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  114. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  115. package/.next/server/app/_not-found/page.js +2 -2
  116. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  117. package/.next/server/app/_not-found.html +1 -1
  118. package/.next/server/app/_not-found.rsc +2 -2
  119. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  120. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  121. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  122. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  123. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  124. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  125. package/.next/server/app/agents.html +1 -1
  126. package/.next/server/app/agents.rsc +4 -4
  127. package/.next/server/app/agents.segments/!KGFwcCk/agents/__PAGE__.segment.rsc +2 -2
  128. package/.next/server/app/agents.segments/!KGFwcCk/agents.segment.rsc +1 -1
  129. package/.next/server/app/agents.segments/!KGFwcCk.segment.rsc +2 -2
  130. package/.next/server/app/agents.segments/_full.segment.rsc +4 -4
  131. package/.next/server/app/agents.segments/_head.segment.rsc +1 -1
  132. package/.next/server/app/agents.segments/_index.segment.rsc +2 -2
  133. package/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
  134. package/.next/server/app/api/agents/[name]/route.js +1 -1
  135. package/.next/server/app/api/agents/route.js +1 -1
  136. package/.next/server/app/api/auth/check/route.js +1 -1
  137. package/.next/server/app/api/auth/login/route.js +1 -1
  138. package/.next/server/app/api/auth/setup/route.js +1 -1
  139. package/.next/server/app/api/auth/ws-token/route.js +1 -1
  140. package/.next/server/app/api/btw/route.js +2 -2
  141. package/.next/server/app/api/claude-md/route.js +1 -1
  142. package/.next/server/app/api/commands/[name]/route.js +1 -1
  143. package/.next/server/app/api/commands/route.js +1 -1
  144. package/.next/server/app/api/defaults/route.js +1 -1
  145. package/.next/server/app/api/filesystem/browse/route.js +1 -1
  146. package/.next/server/app/api/filesystem/files/route.js +1 -1
  147. package/.next/server/app/api/filesystem/mkdir/route.js +1 -1
  148. package/.next/server/app/api/filesystem/read/route.js +1 -1
  149. package/.next/server/app/api/git/clone/route.js +1 -1
  150. package/.next/server/app/api/git/commit/route.js +1 -1
  151. package/.next/server/app/api/git/diff/route.js +1 -1
  152. package/.next/server/app/api/git/discard/route.js +1 -1
  153. package/.next/server/app/api/git/generate-message/route.js +2 -2
  154. package/.next/server/app/api/git/push/route.js +1 -1
  155. package/.next/server/app/api/git/status/route.js +1 -1
  156. package/.next/server/app/api/github/file-content/route.js +1 -1
  157. package/.next/server/app/api/github/orgs/route.js +1 -1
  158. package/.next/server/app/api/github/prs/checks/route.js +1 -1
  159. package/.next/server/app/api/github/prs/diff/route.js +1 -1
  160. package/.next/server/app/api/github/prs/review/route.js +1 -1
  161. package/.next/server/app/api/github/prs/route.js +1 -1
  162. package/.next/server/app/api/github/prs/view/route.js +1 -1
  163. package/.next/server/app/api/github/repos/route.js +1 -1
  164. package/.next/server/app/api/github/review-session/route.js +1 -1
  165. package/.next/server/app/api/github/review-session/route.js.nft.json +1 -1
  166. package/.next/server/app/api/health/route.js +1 -1
  167. package/.next/server/app/api/hooks/route.js +1 -1
  168. package/.next/server/app/api/inbox/[id]/route.js +5 -0
  169. package/.next/server/app/api/inbox/[id]/route.js.nft.json +1 -0
  170. package/.next/server/app/api/inbox/[id]/route_client-reference-manifest.js +1 -0
  171. package/.next/server/app/api/inbox/route.js +5 -0
  172. package/.next/server/app/api/inbox/route.js.nft.json +1 -0
  173. package/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -0
  174. package/.next/server/app/api/jobs/[id]/route.js +1 -1
  175. package/.next/server/app/api/jobs/[id]/route.js.nft.json +1 -1
  176. package/.next/server/app/api/jobs/[id]/runs/[runId]/route.js +1 -1
  177. package/.next/server/app/api/jobs/[id]/runs/[runId]/transcript/route.js +1 -1
  178. package/.next/server/app/api/jobs/[id]/runs/route.js +1 -1
  179. package/.next/server/app/api/jobs/[id]/trigger/route.js +1 -1
  180. package/.next/server/app/api/jobs/[id]/trigger/route.js.nft.json +1 -1
  181. package/.next/server/app/api/jobs/mcp-discover/route.js +1 -1
  182. package/.next/server/app/api/jobs/mcp-discover/route.js.nft.json +1 -1
  183. package/.next/server/app/api/jobs/route.js +1 -1
  184. package/.next/server/app/api/jobs/route.js.nft.json +1 -1
  185. package/.next/server/app/api/jobs/status/route.js +1 -1
  186. package/.next/server/app/api/mcp-servers/[name]/route.js +1 -1
  187. package/.next/server/app/api/mcp-servers/[name]/test/route.js +1 -1
  188. package/.next/server/app/api/mcp-servers/route.js +1 -1
  189. package/.next/server/app/api/notifications/route.js +1 -0
  190. package/.next/server/app/api/notifications/route.js.nft.json +1 -0
  191. package/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -0
  192. package/.next/server/app/api/notifications/test/route.js +5 -0
  193. package/.next/server/app/api/notifications/test/route.js.nft.json +1 -0
  194. package/.next/server/app/api/notifications/test/route_client-reference-manifest.js +1 -0
  195. package/.next/server/app/api/providers/[id]/route.js +1 -0
  196. package/.next/server/app/api/providers/[id]/route.js.nft.json +1 -0
  197. package/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -0
  198. package/.next/server/app/api/providers/route.js +1 -0
  199. package/.next/server/app/api/providers/route.js.nft.json +1 -0
  200. package/.next/server/app/api/providers/route_client-reference-manifest.js +1 -0
  201. package/.next/server/app/api/reviews/pinned/route.js +1 -0
  202. package/.next/server/app/api/reviews/pinned/route.js.nft.json +1 -0
  203. package/.next/server/app/api/reviews/pinned/route_client-reference-manifest.js +1 -0
  204. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  205. package/.next/server/app/api/sessions/[id]/mcp/route.js +1 -1
  206. package/.next/server/app/api/sessions/[id]/mcp/route.js.nft.json +1 -1
  207. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  208. package/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  209. package/.next/server/app/api/sessions/[id]/search/route.js +1 -1
  210. package/.next/server/app/api/sessions/[id]/tabs/route.js +1 -0
  211. package/.next/server/app/api/sessions/[id]/tabs/route.js.nft.json +1 -0
  212. package/.next/server/app/api/sessions/[id]/tabs/route_client-reference-manifest.js +1 -0
  213. package/.next/server/app/api/sessions/bulk-delete/route.js +1 -0
  214. package/.next/server/app/api/sessions/bulk-delete/route.js.nft.json +1 -0
  215. package/.next/server/app/api/sessions/bulk-delete/route_client-reference-manifest.js +1 -0
  216. package/.next/server/app/api/sessions/by-ids/route.js +1 -0
  217. package/.next/server/app/api/sessions/by-ids/route.js.nft.json +1 -0
  218. package/.next/server/app/api/sessions/by-ids/route_client-reference-manifest.js +1 -0
  219. package/.next/server/app/api/sessions/group/route.js +1 -0
  220. package/.next/server/app/api/sessions/group/route.js.nft.json +1 -0
  221. package/.next/server/app/api/sessions/group/route_client-reference-manifest.js +1 -0
  222. package/.next/server/app/api/sessions/pinned/route.js +1 -1
  223. package/.next/server/app/api/sessions/route.js +1 -1
  224. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  225. package/.next/server/app/api/sessions/search/route.js +1 -0
  226. package/.next/server/app/api/sessions/search/route.js.nft.json +1 -0
  227. package/.next/server/app/api/sessions/search/route_client-reference-manifest.js +1 -0
  228. package/.next/server/app/api/sessions/thinking/route.js +1 -0
  229. package/.next/server/app/api/sessions/thinking/route.js.nft.json +1 -0
  230. package/.next/server/app/api/sessions/thinking/route_client-reference-manifest.js +1 -0
  231. package/.next/server/app/api/skills/[name]/route.js +1 -1
  232. package/.next/server/app/api/skills/route.js +1 -1
  233. package/.next/server/app/api/terminal/[id]/route.js +1 -0
  234. package/.next/server/app/api/terminal/[id]/route.js.nft.json +1 -0
  235. package/.next/server/app/api/terminal/[id]/route_client-reference-manifest.js +1 -0
  236. package/.next/server/app/api/terminal/route.js +1 -0
  237. package/.next/server/app/api/terminal/route.js.nft.json +1 -0
  238. package/.next/server/app/api/terminal/route_client-reference-manifest.js +1 -0
  239. package/.next/server/app/api/usage/route.js +1 -1
  240. package/.next/server/app/api/version/changelog/route.js +1 -0
  241. package/.next/server/app/api/version/changelog/route.js.nft.json +1 -0
  242. package/.next/server/app/api/version/changelog/route_client-reference-manifest.js +1 -0
  243. package/.next/server/app/api/version/cockpit/changelog/route.js +1 -0
  244. package/.next/server/app/api/version/cockpit/changelog/route.js.nft.json +1 -0
  245. package/.next/server/app/api/version/cockpit/changelog/route_client-reference-manifest.js +1 -0
  246. package/.next/server/app/api/version/cockpit/route.js +1 -1
  247. package/.next/server/app/api/version/route.js +2 -2
  248. package/.next/server/app/changes.html +1 -1
  249. package/.next/server/app/changes.rsc +4 -4
  250. package/.next/server/app/changes.segments/!KGFwcCk/changes/__PAGE__.segment.rsc +2 -2
  251. package/.next/server/app/changes.segments/!KGFwcCk/changes.segment.rsc +1 -1
  252. package/.next/server/app/changes.segments/!KGFwcCk.segment.rsc +2 -2
  253. package/.next/server/app/changes.segments/_full.segment.rsc +4 -4
  254. package/.next/server/app/changes.segments/_head.segment.rsc +1 -1
  255. package/.next/server/app/changes.segments/_index.segment.rsc +2 -2
  256. package/.next/server/app/changes.segments/_tree.segment.rsc +2 -2
  257. package/.next/server/app/claude-md/edit.html +1 -1
  258. package/.next/server/app/claude-md/edit.rsc +4 -4
  259. package/.next/server/app/claude-md/edit.segments/!KGFwcCk/claude-md/edit/__PAGE__.segment.rsc +2 -2
  260. package/.next/server/app/claude-md/edit.segments/!KGFwcCk/claude-md/edit.segment.rsc +1 -1
  261. package/.next/server/app/claude-md/edit.segments/!KGFwcCk/claude-md.segment.rsc +1 -1
  262. package/.next/server/app/claude-md/edit.segments/!KGFwcCk.segment.rsc +2 -2
  263. package/.next/server/app/claude-md/edit.segments/_full.segment.rsc +4 -4
  264. package/.next/server/app/claude-md/edit.segments/_head.segment.rsc +1 -1
  265. package/.next/server/app/claude-md/edit.segments/_index.segment.rsc +2 -2
  266. package/.next/server/app/claude-md/edit.segments/_tree.segment.rsc +2 -2
  267. package/.next/server/app/claude-md.html +1 -1
  268. package/.next/server/app/claude-md.rsc +4 -4
  269. package/.next/server/app/claude-md.segments/!KGFwcCk/claude-md/__PAGE__.segment.rsc +2 -2
  270. package/.next/server/app/claude-md.segments/!KGFwcCk/claude-md.segment.rsc +1 -1
  271. package/.next/server/app/claude-md.segments/!KGFwcCk.segment.rsc +2 -2
  272. package/.next/server/app/claude-md.segments/_full.segment.rsc +4 -4
  273. package/.next/server/app/claude-md.segments/_head.segment.rsc +1 -1
  274. package/.next/server/app/claude-md.segments/_index.segment.rsc +2 -2
  275. package/.next/server/app/claude-md.segments/_tree.segment.rsc +2 -2
  276. package/.next/server/app/commands.html +1 -1
  277. package/.next/server/app/commands.rsc +4 -4
  278. package/.next/server/app/commands.segments/!KGFwcCk/commands/__PAGE__.segment.rsc +2 -2
  279. package/.next/server/app/commands.segments/!KGFwcCk/commands.segment.rsc +1 -1
  280. package/.next/server/app/commands.segments/!KGFwcCk.segment.rsc +2 -2
  281. package/.next/server/app/commands.segments/_full.segment.rsc +4 -4
  282. package/.next/server/app/commands.segments/_head.segment.rsc +1 -1
  283. package/.next/server/app/commands.segments/_index.segment.rsc +2 -2
  284. package/.next/server/app/commands.segments/_tree.segment.rsc +2 -2
  285. package/.next/server/app/files.html +1 -1
  286. package/.next/server/app/files.rsc +4 -4
  287. package/.next/server/app/files.segments/!KGFwcCk/files/__PAGE__.segment.rsc +2 -2
  288. package/.next/server/app/files.segments/!KGFwcCk/files.segment.rsc +1 -1
  289. package/.next/server/app/files.segments/!KGFwcCk.segment.rsc +2 -2
  290. package/.next/server/app/files.segments/_full.segment.rsc +4 -4
  291. package/.next/server/app/files.segments/_head.segment.rsc +1 -1
  292. package/.next/server/app/files.segments/_index.segment.rsc +2 -2
  293. package/.next/server/app/files.segments/_tree.segment.rsc +2 -2
  294. package/.next/server/app/hooks.html +1 -1
  295. package/.next/server/app/hooks.rsc +4 -4
  296. package/.next/server/app/hooks.segments/!KGFwcCk/hooks/__PAGE__.segment.rsc +2 -2
  297. package/.next/server/app/hooks.segments/!KGFwcCk/hooks.segment.rsc +1 -1
  298. package/.next/server/app/hooks.segments/!KGFwcCk.segment.rsc +2 -2
  299. package/.next/server/app/hooks.segments/_full.segment.rsc +4 -4
  300. package/.next/server/app/hooks.segments/_head.segment.rsc +1 -1
  301. package/.next/server/app/hooks.segments/_index.segment.rsc +2 -2
  302. package/.next/server/app/hooks.segments/_tree.segment.rsc +2 -2
  303. package/.next/server/app/inbox.html +1 -0
  304. package/.next/server/app/inbox.meta +16 -0
  305. package/.next/server/app/inbox.rsc +23 -0
  306. package/.next/server/app/inbox.segments/!KGFwcCk/inbox/__PAGE__.segment.rsc +9 -0
  307. package/.next/server/app/inbox.segments/!KGFwcCk/inbox.segment.rsc +5 -0
  308. package/.next/server/app/inbox.segments/!KGFwcCk.segment.rsc +7 -0
  309. package/.next/server/app/inbox.segments/_full.segment.rsc +23 -0
  310. package/.next/server/app/inbox.segments/_head.segment.rsc +6 -0
  311. package/.next/server/app/inbox.segments/_index.segment.rsc +5 -0
  312. package/.next/server/app/inbox.segments/_tree.segment.rsc +2 -0
  313. package/.next/server/app/index.html +1 -1
  314. package/.next/server/app/index.rsc +4 -4
  315. package/.next/server/app/index.segments/!KGFwcCk/__PAGE__.segment.rsc +2 -2
  316. package/.next/server/app/index.segments/!KGFwcCk.segment.rsc +2 -2
  317. package/.next/server/app/index.segments/_full.segment.rsc +4 -4
  318. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  319. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  320. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  321. package/.next/server/app/jobs.html +1 -1
  322. package/.next/server/app/jobs.rsc +4 -4
  323. package/.next/server/app/jobs.segments/!KGFwcCk/jobs/__PAGE__.segment.rsc +2 -2
  324. package/.next/server/app/jobs.segments/!KGFwcCk/jobs.segment.rsc +1 -1
  325. package/.next/server/app/jobs.segments/!KGFwcCk.segment.rsc +2 -2
  326. package/.next/server/app/jobs.segments/_full.segment.rsc +4 -4
  327. package/.next/server/app/jobs.segments/_head.segment.rsc +1 -1
  328. package/.next/server/app/jobs.segments/_index.segment.rsc +2 -2
  329. package/.next/server/app/jobs.segments/_tree.segment.rsc +2 -2
  330. package/.next/server/app/login/page.js +2 -2
  331. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  332. package/.next/server/app/login.html +1 -1
  333. package/.next/server/app/login.rsc +2 -2
  334. package/.next/server/app/login.segments/_full.segment.rsc +2 -2
  335. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  336. package/.next/server/app/login.segments/_index.segment.rsc +2 -2
  337. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  338. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  339. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  340. package/.next/server/app/mcp-servers.html +1 -1
  341. package/.next/server/app/mcp-servers.rsc +4 -4
  342. package/.next/server/app/mcp-servers.segments/!KGFwcCk/mcp-servers/__PAGE__.segment.rsc +2 -2
  343. package/.next/server/app/mcp-servers.segments/!KGFwcCk/mcp-servers.segment.rsc +1 -1
  344. package/.next/server/app/mcp-servers.segments/!KGFwcCk.segment.rsc +2 -2
  345. package/.next/server/app/mcp-servers.segments/_full.segment.rsc +4 -4
  346. package/.next/server/app/mcp-servers.segments/_head.segment.rsc +1 -1
  347. package/.next/server/app/mcp-servers.segments/_index.segment.rsc +2 -2
  348. package/.next/server/app/mcp-servers.segments/_tree.segment.rsc +2 -2
  349. package/.next/server/app/reviews.html +1 -1
  350. package/.next/server/app/reviews.rsc +4 -4
  351. package/.next/server/app/reviews.segments/!KGFwcCk/reviews/__PAGE__.segment.rsc +2 -2
  352. package/.next/server/app/reviews.segments/!KGFwcCk/reviews.segment.rsc +1 -1
  353. package/.next/server/app/reviews.segments/!KGFwcCk.segment.rsc +2 -2
  354. package/.next/server/app/reviews.segments/_full.segment.rsc +4 -4
  355. package/.next/server/app/reviews.segments/_head.segment.rsc +1 -1
  356. package/.next/server/app/reviews.segments/_index.segment.rsc +2 -2
  357. package/.next/server/app/reviews.segments/_tree.segment.rsc +2 -2
  358. package/.next/server/app/settings/appearance.html +1 -0
  359. package/.next/server/app/settings/appearance.meta +17 -0
  360. package/.next/server/app/settings/appearance.rsc +23 -0
  361. package/.next/server/app/settings/appearance.segments/!KGFwcCk/settings/appearance/__PAGE__.segment.rsc +9 -0
  362. package/.next/server/app/settings/appearance.segments/!KGFwcCk/settings/appearance.segment.rsc +5 -0
  363. package/.next/server/app/settings/appearance.segments/!KGFwcCk/settings.segment.rsc +5 -0
  364. package/.next/server/app/settings/appearance.segments/!KGFwcCk.segment.rsc +7 -0
  365. package/.next/server/app/settings/appearance.segments/_full.segment.rsc +23 -0
  366. package/.next/server/app/settings/appearance.segments/_head.segment.rsc +6 -0
  367. package/.next/server/app/settings/appearance.segments/_index.segment.rsc +5 -0
  368. package/.next/server/app/settings/appearance.segments/_tree.segment.rsc +2 -0
  369. package/.next/server/app/settings/notifications.html +1 -0
  370. package/.next/server/app/settings/notifications.meta +17 -0
  371. package/.next/server/app/settings/notifications.rsc +23 -0
  372. package/.next/server/app/settings/notifications.segments/!KGFwcCk/settings/notifications/__PAGE__.segment.rsc +9 -0
  373. package/.next/server/app/settings/notifications.segments/!KGFwcCk/settings/notifications.segment.rsc +5 -0
  374. package/.next/server/app/settings/notifications.segments/!KGFwcCk/settings.segment.rsc +5 -0
  375. package/.next/server/app/settings/notifications.segments/!KGFwcCk.segment.rsc +7 -0
  376. package/.next/server/app/settings/notifications.segments/_full.segment.rsc +23 -0
  377. package/.next/server/app/settings/notifications.segments/_head.segment.rsc +6 -0
  378. package/.next/server/app/settings/notifications.segments/_index.segment.rsc +5 -0
  379. package/.next/server/app/settings/notifications.segments/_tree.segment.rsc +2 -0
  380. package/.next/server/app/settings/providers/new.html +1 -0
  381. package/.next/server/app/settings/providers/new.meta +18 -0
  382. package/.next/server/app/settings/providers/new.rsc +23 -0
  383. package/.next/server/app/settings/providers/new.segments/!KGFwcCk/settings/providers/new/__PAGE__.segment.rsc +9 -0
  384. package/.next/server/app/settings/providers/new.segments/!KGFwcCk/settings/providers/new.segment.rsc +5 -0
  385. package/.next/server/app/settings/providers/new.segments/!KGFwcCk/settings/providers.segment.rsc +5 -0
  386. package/.next/server/app/settings/providers/new.segments/!KGFwcCk/settings.segment.rsc +5 -0
  387. package/.next/server/app/settings/providers/new.segments/!KGFwcCk.segment.rsc +7 -0
  388. package/.next/server/app/settings/providers/new.segments/_full.segment.rsc +23 -0
  389. package/.next/server/app/settings/providers/new.segments/_head.segment.rsc +6 -0
  390. package/.next/server/app/settings/providers/new.segments/_index.segment.rsc +5 -0
  391. package/.next/server/app/settings/providers/new.segments/_tree.segment.rsc +2 -0
  392. package/.next/server/app/settings/providers.html +1 -0
  393. package/.next/server/app/settings/providers.meta +17 -0
  394. package/.next/server/app/settings/providers.rsc +23 -0
  395. package/.next/server/app/settings/providers.segments/!KGFwcCk/settings/providers/__PAGE__.segment.rsc +9 -0
  396. package/.next/server/app/settings/providers.segments/!KGFwcCk/settings/providers.segment.rsc +5 -0
  397. package/.next/server/app/settings/providers.segments/!KGFwcCk/settings.segment.rsc +5 -0
  398. package/.next/server/app/settings/providers.segments/!KGFwcCk.segment.rsc +7 -0
  399. package/.next/server/app/settings/providers.segments/_full.segment.rsc +23 -0
  400. package/.next/server/app/settings/providers.segments/_head.segment.rsc +6 -0
  401. package/.next/server/app/settings/providers.segments/_index.segment.rsc +5 -0
  402. package/.next/server/app/settings/providers.segments/_tree.segment.rsc +2 -0
  403. package/.next/server/app/settings/session.html +1 -0
  404. package/.next/server/app/settings/session.meta +17 -0
  405. package/.next/server/app/settings/session.rsc +23 -0
  406. package/.next/server/app/settings/session.segments/!KGFwcCk/settings/session/__PAGE__.segment.rsc +9 -0
  407. package/.next/server/app/settings/session.segments/!KGFwcCk/settings/session.segment.rsc +5 -0
  408. package/.next/server/app/settings/session.segments/!KGFwcCk/settings.segment.rsc +5 -0
  409. package/.next/server/app/settings/session.segments/!KGFwcCk.segment.rsc +7 -0
  410. package/.next/server/app/settings/session.segments/_full.segment.rsc +23 -0
  411. package/.next/server/app/settings/session.segments/_head.segment.rsc +6 -0
  412. package/.next/server/app/settings/session.segments/_index.segment.rsc +5 -0
  413. package/.next/server/app/settings/session.segments/_tree.segment.rsc +2 -0
  414. package/.next/server/app/settings.html +1 -1
  415. package/.next/server/app/settings.rsc +4 -4
  416. package/.next/server/app/settings.segments/!KGFwcCk/settings/__PAGE__.segment.rsc +2 -2
  417. package/.next/server/app/settings.segments/!KGFwcCk/settings.segment.rsc +1 -1
  418. package/.next/server/app/settings.segments/!KGFwcCk.segment.rsc +2 -2
  419. package/.next/server/app/settings.segments/_full.segment.rsc +4 -4
  420. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  421. package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  422. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  423. package/.next/server/app/skills.html +1 -1
  424. package/.next/server/app/skills.rsc +4 -4
  425. package/.next/server/app/skills.segments/!KGFwcCk/skills/__PAGE__.segment.rsc +2 -2
  426. package/.next/server/app/skills.segments/!KGFwcCk/skills.segment.rsc +1 -1
  427. package/.next/server/app/skills.segments/!KGFwcCk.segment.rsc +2 -2
  428. package/.next/server/app/skills.segments/_full.segment.rsc +4 -4
  429. package/.next/server/app/skills.segments/_head.segment.rsc +1 -1
  430. package/.next/server/app/skills.segments/_index.segment.rsc +2 -2
  431. package/.next/server/app/skills.segments/_tree.segment.rsc +2 -2
  432. package/.next/server/app-paths-manifest.json +28 -3
  433. package/.next/server/chunks/1002.js +18 -0
  434. package/.next/server/chunks/1011.js +1 -0
  435. package/.next/server/chunks/1979.js +2 -2
  436. package/.next/server/chunks/{9012.js → 3006.js} +3 -3
  437. package/.next/server/chunks/3108.js +1 -0
  438. package/.next/server/chunks/3434.js +1 -0
  439. package/.next/server/chunks/{6142.js → 4342.js} +1 -1
  440. package/.next/server/chunks/4352.js +1 -0
  441. package/.next/server/chunks/4445.js +1 -1
  442. package/.next/server/chunks/5965.js +1 -1
  443. package/.next/server/chunks/7782.js +6 -0
  444. package/.next/server/chunks/8148.js +1 -0
  445. package/.next/server/chunks/9599.js +11 -0
  446. package/.next/server/middleware-build-manifest.js +1 -1
  447. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  448. package/.next/server/pages/404.html +1 -1
  449. package/.next/server/pages/500.html +1 -1
  450. package/.next/server/server-reference-manifest.json +1 -1
  451. package/.next/static/chunks/{35922.5bdf78a760129504.js → 13541.056c34ca7fde6869.js} +1 -1
  452. package/.next/static/chunks/26126-97874904b42befb8.js +1 -0
  453. package/.next/static/chunks/{22086-756d490e3320ad15.js → 31010-6e87f77b97544424.js} +1 -1
  454. package/.next/static/chunks/3765-d323c6675307a63e.js +20 -0
  455. package/.next/static/chunks/41487-d802643f4a8fad3c.js +199 -0
  456. package/.next/static/chunks/48273-bbd15bac6733dfc4.js +6 -0
  457. package/.next/static/chunks/{80392.bca860d8b5972706.js → 58011.3de5770e8b0d8759.js} +1 -1
  458. package/.next/static/chunks/63606.a387b0261d6523ab.js +1 -0
  459. package/.next/static/chunks/6935-f436a624267529fb.js +1 -0
  460. package/.next/static/chunks/{69427.755a0a4013596f7a.js → 69427.a0b463c808aa54c8.js} +1 -1
  461. package/.next/static/chunks/86939-dfc6f8eb395caa89.js +1 -0
  462. package/.next/static/chunks/app/(app)/agents/[name]/page-8bdd0359043537d4.js +8 -0
  463. package/.next/static/chunks/app/(app)/agents/page-6fcfd7ab6781814e.js +1 -0
  464. package/.next/static/chunks/app/(app)/changes/page-4549a5bd72d77e3e.js +1 -0
  465. package/.next/static/chunks/app/(app)/claude-md/edit/page-08e6e120e71979f4.js +1 -0
  466. package/.next/static/chunks/app/(app)/claude-md/page-cd9e2176a12ba241.js +1 -0
  467. package/.next/static/chunks/app/(app)/commands/[name]/page-7cdfdef29ded0aa0.js +6 -0
  468. package/.next/static/chunks/app/(app)/commands/page-f126b608b04747ac.js +1 -0
  469. package/.next/static/chunks/app/(app)/files/page-f526eb95821e000e.js +1 -0
  470. package/.next/static/chunks/app/(app)/hooks/[event]/page-28038323fd29adfa.js +6 -0
  471. package/.next/static/chunks/app/(app)/hooks/page-f1f39284e53c0344.js +1 -0
  472. package/.next/static/chunks/app/(app)/inbox/[id]/page-bc1ff3a0db0114a4.js +1 -0
  473. package/.next/static/chunks/app/(app)/inbox/page-82e03870103ce9bd.js +1 -0
  474. package/.next/static/chunks/app/(app)/jobs/[id]/edit/page-7fb788f772ff2129.js +1 -0
  475. package/.next/static/chunks/app/(app)/jobs/[id]/page-a5856b9ae967ff59.js +1 -0
  476. package/.next/static/chunks/app/(app)/jobs/[id]/runs/[runId]/page-b7c513402db11db6.js +1 -0
  477. package/.next/static/chunks/app/(app)/jobs/page-e9bbd6c116b9699f.js +1 -0
  478. package/.next/static/chunks/app/(app)/layout-ce9e1be301c60fe5.js +1 -0
  479. package/.next/static/chunks/app/(app)/mcp-servers/[name]/page-d6d805a27ec0b0c0.js +1 -0
  480. package/.next/static/chunks/app/(app)/mcp-servers/page-4b7276d43451cd43.js +1 -0
  481. package/.next/static/chunks/app/(app)/page-027a5382da30ddb9.js +1 -0
  482. package/.next/static/chunks/app/(app)/reviews/[owner]/[repo]/[number]/page-9ab2955c455bb5fa.js +13 -0
  483. package/.next/static/chunks/app/(app)/reviews/[owner]/[repo]/page-c5fd013309ab3eba.js +1 -0
  484. package/.next/static/chunks/app/(app)/reviews/page-47530d93bb9d4a76.js +1 -0
  485. package/.next/static/chunks/app/(app)/sessions/[id]/page-94f891e1b54fd05f.js +1 -0
  486. package/.next/static/chunks/app/(app)/settings/appearance/page-95902da748ac5f1e.js +1 -0
  487. package/.next/static/chunks/app/(app)/settings/notifications/page-229f1db6beb1d19c.js +1 -0
  488. package/.next/static/chunks/app/(app)/settings/page-8ed16a66fdde10cd.js +1 -0
  489. package/.next/static/chunks/app/(app)/settings/providers/[id]/page-13654263246617b3.js +1 -0
  490. package/.next/static/chunks/app/(app)/settings/providers/new/page-e1798e321ccbc6df.js +1 -0
  491. package/.next/static/chunks/app/(app)/settings/providers/page-0bb4c1db2ee35b3d.js +1 -0
  492. package/.next/static/chunks/app/(app)/settings/session/page-ab216a8fa37a0f76.js +1 -0
  493. package/.next/static/chunks/app/(app)/skills/[name]/page-8ab85d5090967ee4.js +6 -0
  494. package/.next/static/chunks/app/(app)/skills/page-c52773eacb27c04e.js +1 -0
  495. package/.next/static/chunks/app/_global-error/page-fc747760bd4c8a4b.js +1 -0
  496. package/.next/static/chunks/app/api/agents/[name]/route-fc747760bd4c8a4b.js +1 -0
  497. package/.next/static/chunks/app/api/agents/route-fc747760bd4c8a4b.js +1 -0
  498. package/.next/static/chunks/app/api/auth/check/route-fc747760bd4c8a4b.js +1 -0
  499. package/.next/static/chunks/app/api/auth/login/route-fc747760bd4c8a4b.js +1 -0
  500. package/.next/static/chunks/app/api/auth/setup/route-fc747760bd4c8a4b.js +1 -0
  501. package/.next/static/chunks/app/api/auth/ws-token/route-fc747760bd4c8a4b.js +1 -0
  502. package/.next/static/chunks/app/api/btw/route-fc747760bd4c8a4b.js +1 -0
  503. package/.next/static/chunks/app/api/claude-md/route-fc747760bd4c8a4b.js +1 -0
  504. package/.next/static/chunks/app/api/commands/[name]/route-fc747760bd4c8a4b.js +1 -0
  505. package/.next/static/chunks/app/api/commands/route-fc747760bd4c8a4b.js +1 -0
  506. package/.next/static/chunks/app/api/defaults/route-fc747760bd4c8a4b.js +1 -0
  507. package/.next/static/chunks/app/api/filesystem/browse/route-fc747760bd4c8a4b.js +1 -0
  508. package/.next/static/chunks/app/api/filesystem/files/route-fc747760bd4c8a4b.js +1 -0
  509. package/.next/static/chunks/app/api/filesystem/mkdir/route-fc747760bd4c8a4b.js +1 -0
  510. package/.next/static/chunks/app/api/filesystem/read/route-fc747760bd4c8a4b.js +1 -0
  511. package/.next/static/chunks/app/api/git/clone/route-fc747760bd4c8a4b.js +1 -0
  512. package/.next/static/chunks/app/api/git/commit/route-fc747760bd4c8a4b.js +1 -0
  513. package/.next/static/chunks/app/api/git/diff/route-fc747760bd4c8a4b.js +1 -0
  514. package/.next/static/chunks/app/api/git/discard/route-fc747760bd4c8a4b.js +1 -0
  515. package/.next/static/chunks/app/api/git/generate-message/route-fc747760bd4c8a4b.js +1 -0
  516. package/.next/static/chunks/app/api/git/push/route-fc747760bd4c8a4b.js +1 -0
  517. package/.next/static/chunks/app/api/git/status/route-fc747760bd4c8a4b.js +1 -0
  518. package/.next/static/chunks/app/api/github/file-content/route-fc747760bd4c8a4b.js +1 -0
  519. package/.next/static/chunks/app/api/github/orgs/route-fc747760bd4c8a4b.js +1 -0
  520. package/.next/static/chunks/app/api/github/prs/checks/route-fc747760bd4c8a4b.js +1 -0
  521. package/.next/static/chunks/app/api/github/prs/diff/route-fc747760bd4c8a4b.js +1 -0
  522. package/.next/static/chunks/app/api/github/prs/review/route-fc747760bd4c8a4b.js +1 -0
  523. package/.next/static/chunks/app/api/github/prs/route-fc747760bd4c8a4b.js +1 -0
  524. package/.next/static/chunks/app/api/github/prs/view/route-fc747760bd4c8a4b.js +1 -0
  525. package/.next/static/chunks/app/api/github/repos/route-fc747760bd4c8a4b.js +1 -0
  526. package/.next/static/chunks/app/api/github/review-session/route-fc747760bd4c8a4b.js +1 -0
  527. package/.next/static/chunks/app/api/health/route-fc747760bd4c8a4b.js +1 -0
  528. package/.next/static/chunks/app/api/hooks/route-fc747760bd4c8a4b.js +1 -0
  529. package/.next/static/chunks/app/api/inbox/[id]/route-fc747760bd4c8a4b.js +1 -0
  530. package/.next/static/chunks/app/api/inbox/route-fc747760bd4c8a4b.js +1 -0
  531. package/.next/static/chunks/app/api/jobs/[id]/route-fc747760bd4c8a4b.js +1 -0
  532. package/.next/static/chunks/app/api/jobs/[id]/runs/[runId]/route-fc747760bd4c8a4b.js +1 -0
  533. package/.next/static/chunks/app/api/jobs/[id]/runs/[runId]/transcript/route-fc747760bd4c8a4b.js +1 -0
  534. package/.next/static/chunks/app/api/jobs/[id]/runs/route-fc747760bd4c8a4b.js +1 -0
  535. package/.next/static/chunks/app/api/jobs/[id]/trigger/route-fc747760bd4c8a4b.js +1 -0
  536. package/.next/static/chunks/app/api/jobs/mcp-discover/route-fc747760bd4c8a4b.js +1 -0
  537. package/.next/static/chunks/app/api/jobs/route-fc747760bd4c8a4b.js +1 -0
  538. package/.next/static/chunks/app/api/jobs/status/route-fc747760bd4c8a4b.js +1 -0
  539. package/.next/static/chunks/app/api/mcp-servers/[name]/route-fc747760bd4c8a4b.js +1 -0
  540. package/.next/static/chunks/app/api/mcp-servers/[name]/test/route-fc747760bd4c8a4b.js +1 -0
  541. package/.next/static/chunks/app/api/mcp-servers/route-fc747760bd4c8a4b.js +1 -0
  542. package/.next/static/chunks/app/api/notifications/route-fc747760bd4c8a4b.js +1 -0
  543. package/.next/static/chunks/app/api/notifications/test/route-fc747760bd4c8a4b.js +1 -0
  544. package/.next/static/chunks/app/api/providers/[id]/route-fc747760bd4c8a4b.js +1 -0
  545. package/.next/static/chunks/app/api/providers/route-fc747760bd4c8a4b.js +1 -0
  546. package/.next/static/chunks/app/api/reviews/pinned/route-fc747760bd4c8a4b.js +1 -0
  547. package/.next/static/chunks/app/api/sessions/[id]/context/route-fc747760bd4c8a4b.js +1 -0
  548. package/.next/static/chunks/app/api/sessions/[id]/mcp/route-fc747760bd4c8a4b.js +1 -0
  549. package/.next/static/chunks/app/api/sessions/[id]/route-fc747760bd4c8a4b.js +1 -0
  550. package/.next/static/chunks/app/api/sessions/[id]/search/route-fc747760bd4c8a4b.js +1 -0
  551. package/.next/static/chunks/app/api/sessions/[id]/tabs/route-fc747760bd4c8a4b.js +1 -0
  552. package/.next/static/chunks/app/api/sessions/bulk-delete/route-fc747760bd4c8a4b.js +1 -0
  553. package/.next/static/chunks/app/api/sessions/by-ids/route-fc747760bd4c8a4b.js +1 -0
  554. package/.next/static/chunks/app/api/sessions/group/route-fc747760bd4c8a4b.js +1 -0
  555. package/.next/static/chunks/app/api/sessions/pinned/route-fc747760bd4c8a4b.js +1 -0
  556. package/.next/static/chunks/app/api/sessions/route-fc747760bd4c8a4b.js +1 -0
  557. package/.next/static/chunks/app/api/sessions/search/route-fc747760bd4c8a4b.js +1 -0
  558. package/.next/static/chunks/app/api/sessions/thinking/route-fc747760bd4c8a4b.js +1 -0
  559. package/.next/static/chunks/app/api/skills/[name]/route-fc747760bd4c8a4b.js +1 -0
  560. package/.next/static/chunks/app/api/skills/route-fc747760bd4c8a4b.js +1 -0
  561. package/.next/static/chunks/app/api/terminal/[id]/route-fc747760bd4c8a4b.js +1 -0
  562. package/.next/static/chunks/app/api/terminal/route-fc747760bd4c8a4b.js +1 -0
  563. package/.next/static/chunks/app/api/usage/route-fc747760bd4c8a4b.js +1 -0
  564. package/.next/static/chunks/app/api/version/changelog/route-fc747760bd4c8a4b.js +1 -0
  565. package/.next/static/chunks/app/api/version/cockpit/changelog/route-fc747760bd4c8a4b.js +1 -0
  566. package/.next/static/chunks/app/api/version/cockpit/route-fc747760bd4c8a4b.js +1 -0
  567. package/.next/static/chunks/app/api/version/route-fc747760bd4c8a4b.js +1 -0
  568. package/.next/static/chunks/e868780c.f24b6da08e62c7b2.js +18 -0
  569. package/.next/static/chunks/next/dist/client/components/builtin/app-error-fc747760bd4c8a4b.js +1 -0
  570. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-fc747760bd4c8a4b.js +1 -0
  571. package/.next/static/chunks/next/dist/client/components/builtin/not-found-fc747760bd4c8a4b.js +1 -0
  572. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-fc747760bd4c8a4b.js +1 -0
  573. package/.next/static/chunks/webpack-e31bb45fa59caed8.js +1 -0
  574. package/.next/static/css/3f8af4ae6f812d5c.css +1 -0
  575. package/.next/static/zr8XZzqb74eHitdlkpo-C/_buildManifest.js +1 -0
  576. package/README.md +14 -4
  577. package/bin/cockpit-hook-bridge.mjs +101 -0
  578. package/dist/server.js +49 -2
  579. package/dist/src/lib/models.js +48 -7
  580. package/dist/src/server/auth.js +32 -10
  581. package/dist/src/server/claude-settings.js +153 -0
  582. package/dist/src/server/cli-init-fetch.js +86 -0
  583. package/dist/src/server/cron-utils.js +16 -5
  584. package/dist/src/server/debug-logger.js +2 -2
  585. package/dist/src/server/defaults.js +18 -7
  586. package/dist/src/server/fs-watcher.js +50 -0
  587. package/dist/src/server/hook-bridge-path.js +34 -0
  588. package/dist/src/server/hook-event-translator.js +211 -0
  589. package/dist/src/server/hook-router.js +150 -0
  590. package/dist/src/server/inbox.js +136 -0
  591. package/dist/src/server/job-lock.js +103 -0
  592. package/dist/src/server/job-scheduler.js +170 -43
  593. package/dist/src/server/job-storage.js +32 -20
  594. package/dist/src/server/notification-settings.js +43 -0
  595. package/dist/src/server/notifications.js +125 -0
  596. package/dist/src/server/paths.js +23 -0
  597. package/dist/src/server/plans.js +8 -5
  598. package/dist/src/server/providers.js +128 -0
  599. package/dist/src/server/pty-runtime.js +324 -0
  600. package/dist/src/server/pty-session.js +178 -0
  601. package/dist/src/server/session-manager.js +838 -152
  602. package/dist/src/server/session-prefs.js +33 -8
  603. package/dist/src/server/singleton.js +18 -0
  604. package/dist/src/server/stream-processor.js +61 -48
  605. package/dist/src/server/terminal-manager.js +153 -0
  606. package/dist/src/server/todo-watcher.js +178 -0
  607. package/dist/src/server/transcript-watcher.js +91 -0
  608. package/dist/src/server/transcript.js +444 -13
  609. package/dist/src/server/ws-handler.js +251 -74
  610. package/next.config.ts +1 -0
  611. package/package.json +10 -3
  612. package/public/fonts/symbols-nerd-font-mono.woff2 +0 -0
  613. package/.next/server/chunks/1941.js +0 -9
  614. package/.next/server/chunks/2444.js +0 -6
  615. package/.next/server/chunks/8346.js +0 -1
  616. package/.next/static/V2EfPtTUC96VYyF12K0om/_buildManifest.js +0 -1
  617. package/.next/static/chunks/30120-1535e9064b17ce74.js +0 -20
  618. package/.next/static/chunks/66997-652baf5596173fea.js +0 -199
  619. package/.next/static/chunks/93273-c5cb6dcedef67c81.js +0 -6
  620. package/.next/static/chunks/app/(app)/agents/[name]/page-44c5691c80f17d38.js +0 -8
  621. package/.next/static/chunks/app/(app)/agents/page-4ce7a715bc0145dc.js +0 -1
  622. package/.next/static/chunks/app/(app)/changes/page-84cf4cd3ca347d98.js +0 -1
  623. package/.next/static/chunks/app/(app)/claude-md/edit/page-fb7117171d0f94d2.js +0 -1
  624. package/.next/static/chunks/app/(app)/claude-md/page-9503f1415e660911.js +0 -1
  625. package/.next/static/chunks/app/(app)/commands/[name]/page-6ef571e73b105248.js +0 -6
  626. package/.next/static/chunks/app/(app)/commands/page-e8a506da73d1c280.js +0 -1
  627. package/.next/static/chunks/app/(app)/files/page-67a95d351a685d79.js +0 -1
  628. package/.next/static/chunks/app/(app)/hooks/[event]/page-03f85595561b068a.js +0 -6
  629. package/.next/static/chunks/app/(app)/hooks/page-5578c83ad353e307.js +0 -1
  630. package/.next/static/chunks/app/(app)/jobs/[id]/edit/page-51d784c59737778c.js +0 -1
  631. package/.next/static/chunks/app/(app)/jobs/[id]/page-7d00e7a01c70a261.js +0 -1
  632. package/.next/static/chunks/app/(app)/jobs/[id]/runs/[runId]/page-665191da233fde19.js +0 -1
  633. package/.next/static/chunks/app/(app)/jobs/page-8b4ee1166a53d5e1.js +0 -1
  634. package/.next/static/chunks/app/(app)/layout-8dad55d6ce637a01.js +0 -1
  635. package/.next/static/chunks/app/(app)/mcp-servers/[name]/page-c30f0d78daf7719e.js +0 -1
  636. package/.next/static/chunks/app/(app)/mcp-servers/page-737b87d338afdb49.js +0 -1
  637. package/.next/static/chunks/app/(app)/page-40052655d2a9a84f.js +0 -1
  638. package/.next/static/chunks/app/(app)/reviews/[owner]/[repo]/[number]/page-1d9179bf5a4de7a4.js +0 -13
  639. package/.next/static/chunks/app/(app)/reviews/[owner]/[repo]/page-d8a9ee39e7cc056a.js +0 -1
  640. package/.next/static/chunks/app/(app)/reviews/page-098e6e6fe3123e02.js +0 -1
  641. package/.next/static/chunks/app/(app)/sessions/[id]/page-a74f7fe8322678ba.js +0 -1
  642. package/.next/static/chunks/app/(app)/settings/page-1fa46b8ac8e22927.js +0 -1
  643. package/.next/static/chunks/app/(app)/skills/[name]/page-e6572062a6ad90df.js +0 -6
  644. package/.next/static/chunks/app/(app)/skills/page-8fca8814aa818ae6.js +0 -1
  645. package/.next/static/chunks/app/_global-error/page-b277aba73f9e0212.js +0 -1
  646. package/.next/static/chunks/app/api/agents/[name]/route-b277aba73f9e0212.js +0 -1
  647. package/.next/static/chunks/app/api/agents/route-b277aba73f9e0212.js +0 -1
  648. package/.next/static/chunks/app/api/auth/check/route-b277aba73f9e0212.js +0 -1
  649. package/.next/static/chunks/app/api/auth/login/route-b277aba73f9e0212.js +0 -1
  650. package/.next/static/chunks/app/api/auth/setup/route-b277aba73f9e0212.js +0 -1
  651. package/.next/static/chunks/app/api/auth/ws-token/route-b277aba73f9e0212.js +0 -1
  652. package/.next/static/chunks/app/api/btw/route-b277aba73f9e0212.js +0 -1
  653. package/.next/static/chunks/app/api/claude-md/route-b277aba73f9e0212.js +0 -1
  654. package/.next/static/chunks/app/api/commands/[name]/route-b277aba73f9e0212.js +0 -1
  655. package/.next/static/chunks/app/api/commands/route-b277aba73f9e0212.js +0 -1
  656. package/.next/static/chunks/app/api/defaults/route-b277aba73f9e0212.js +0 -1
  657. package/.next/static/chunks/app/api/filesystem/browse/route-b277aba73f9e0212.js +0 -1
  658. package/.next/static/chunks/app/api/filesystem/files/route-b277aba73f9e0212.js +0 -1
  659. package/.next/static/chunks/app/api/filesystem/mkdir/route-b277aba73f9e0212.js +0 -1
  660. package/.next/static/chunks/app/api/filesystem/read/route-b277aba73f9e0212.js +0 -1
  661. package/.next/static/chunks/app/api/git/clone/route-b277aba73f9e0212.js +0 -1
  662. package/.next/static/chunks/app/api/git/commit/route-b277aba73f9e0212.js +0 -1
  663. package/.next/static/chunks/app/api/git/diff/route-b277aba73f9e0212.js +0 -1
  664. package/.next/static/chunks/app/api/git/discard/route-b277aba73f9e0212.js +0 -1
  665. package/.next/static/chunks/app/api/git/generate-message/route-b277aba73f9e0212.js +0 -1
  666. package/.next/static/chunks/app/api/git/push/route-b277aba73f9e0212.js +0 -1
  667. package/.next/static/chunks/app/api/git/status/route-b277aba73f9e0212.js +0 -1
  668. package/.next/static/chunks/app/api/github/file-content/route-b277aba73f9e0212.js +0 -1
  669. package/.next/static/chunks/app/api/github/orgs/route-b277aba73f9e0212.js +0 -1
  670. package/.next/static/chunks/app/api/github/prs/checks/route-b277aba73f9e0212.js +0 -1
  671. package/.next/static/chunks/app/api/github/prs/diff/route-b277aba73f9e0212.js +0 -1
  672. package/.next/static/chunks/app/api/github/prs/review/route-b277aba73f9e0212.js +0 -1
  673. package/.next/static/chunks/app/api/github/prs/route-b277aba73f9e0212.js +0 -1
  674. package/.next/static/chunks/app/api/github/prs/view/route-b277aba73f9e0212.js +0 -1
  675. package/.next/static/chunks/app/api/github/repos/route-b277aba73f9e0212.js +0 -1
  676. package/.next/static/chunks/app/api/github/review-session/route-b277aba73f9e0212.js +0 -1
  677. package/.next/static/chunks/app/api/health/route-b277aba73f9e0212.js +0 -1
  678. package/.next/static/chunks/app/api/hooks/route-b277aba73f9e0212.js +0 -1
  679. package/.next/static/chunks/app/api/jobs/[id]/route-b277aba73f9e0212.js +0 -1
  680. package/.next/static/chunks/app/api/jobs/[id]/runs/[runId]/route-b277aba73f9e0212.js +0 -1
  681. package/.next/static/chunks/app/api/jobs/[id]/runs/[runId]/transcript/route-b277aba73f9e0212.js +0 -1
  682. package/.next/static/chunks/app/api/jobs/[id]/runs/route-b277aba73f9e0212.js +0 -1
  683. package/.next/static/chunks/app/api/jobs/[id]/trigger/route-b277aba73f9e0212.js +0 -1
  684. package/.next/static/chunks/app/api/jobs/mcp-discover/route-b277aba73f9e0212.js +0 -1
  685. package/.next/static/chunks/app/api/jobs/route-b277aba73f9e0212.js +0 -1
  686. package/.next/static/chunks/app/api/jobs/status/route-b277aba73f9e0212.js +0 -1
  687. package/.next/static/chunks/app/api/mcp-servers/[name]/route-b277aba73f9e0212.js +0 -1
  688. package/.next/static/chunks/app/api/mcp-servers/[name]/test/route-b277aba73f9e0212.js +0 -1
  689. package/.next/static/chunks/app/api/mcp-servers/route-b277aba73f9e0212.js +0 -1
  690. package/.next/static/chunks/app/api/sessions/[id]/context/route-b277aba73f9e0212.js +0 -1
  691. package/.next/static/chunks/app/api/sessions/[id]/mcp/route-b277aba73f9e0212.js +0 -1
  692. package/.next/static/chunks/app/api/sessions/[id]/route-b277aba73f9e0212.js +0 -1
  693. package/.next/static/chunks/app/api/sessions/[id]/search/route-b277aba73f9e0212.js +0 -1
  694. package/.next/static/chunks/app/api/sessions/pinned/route-b277aba73f9e0212.js +0 -1
  695. package/.next/static/chunks/app/api/sessions/route-b277aba73f9e0212.js +0 -1
  696. package/.next/static/chunks/app/api/skills/[name]/route-b277aba73f9e0212.js +0 -1
  697. package/.next/static/chunks/app/api/skills/route-b277aba73f9e0212.js +0 -1
  698. package/.next/static/chunks/app/api/usage/route-b277aba73f9e0212.js +0 -1
  699. package/.next/static/chunks/app/api/version/cockpit/route-b277aba73f9e0212.js +0 -1
  700. package/.next/static/chunks/app/api/version/route-b277aba73f9e0212.js +0 -1
  701. package/.next/static/chunks/next/dist/client/components/builtin/app-error-b277aba73f9e0212.js +0 -1
  702. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-b277aba73f9e0212.js +0 -1
  703. package/.next/static/chunks/next/dist/client/components/builtin/not-found-b277aba73f9e0212.js +0 -1
  704. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-b277aba73f9e0212.js +0 -1
  705. package/.next/static/chunks/webpack-2a5835e108df6f34.js +0 -1
  706. package/.next/static/css/1e1239c76b265910.css +0 -1
  707. /package/.next/static/{V2EfPtTUC96VYyF12K0om → zr8XZzqb74eHitdlkpo-C}/_ssgManifest.js +0 -0
@@ -0,0 +1,11 @@
1
+ "use strict";exports.id=9599,exports.ids=[9599],exports.modules={22211:(a,b,c)=>{c.d(b,{$K:()=>s,Z3:()=>n,Zi:()=>p,f9:()=>q,h1:()=>r,sO:()=>o});var d=c(73024),e=c(76760),f=c(78796),g=c(64423),h=c(99417);function i(){return(0,e.join)((0,h.j_)(),"providers.json")}function j(a){for(let b of a.models)if(!Array.isArray(b.contextSizes)||0===b.contextSizes.length)throw Error(`provider${a.id?` ${a.id}`:""}: model ${b.modelId} has empty contextSizes`)}function k(){return{id:"anthropic",name:"Anthropic",envVars:{},models:(0,g.J$)(),isBuiltin:!0}}let l=null;function m(a){try{(0,d.mkdirSync)((0,h.j_)(),{recursive:!0}),(0,d.writeFileSync)(i(),JSON.stringify(a,null,2)+"\n")}catch{}}function n(){return l||(l=[k(),...function(){try{return JSON.parse((0,d.readFileSync)(i(),"utf-8"))}catch{return[]}}()]),l}function o(a){return n().find(b=>b.id===a)}function p(a){let b={...a,id:(0,f.A)()};j(b);let c=n().filter(a=>!a.isBuiltin);return c.push(b),m(c),l=[k(),...c],b}function q(a,b){if("anthropic"===a)throw Error("Cannot modify built-in provider");let c=n().filter(a=>!a.isBuiltin),d=c.findIndex(b=>b.id===a);if(-1===d)throw Error(`Provider not found: ${a}`);let e={...c[d],...b,id:a};return j(e),c[d]=e,m(c),l=[k(),...c],c[d]}function r(a){if("anthropic"===a)throw Error("Cannot delete built-in provider");let b=n(),c=b.filter(b=>!b.isBuiltin&&b.id!==a);if(c.length===b.filter(a=>!a.isBuiltin).length)throw Error(`Provider not found: ${a}`);m(c),l=[k(),...c]}function s(a){if(!a)return null;let b=a.indexOf(":");if(b>0){let c=a.slice(0,b),d=a.slice(b+1),e=o(c);if(e){let a=e.models.find(a=>a.modelId===d);if(a)return{provider:e,model:a}}return null}for(let b of n()){let c=b.models.find(b=>b.modelId===a);if(c)return{provider:b,model:c}}return null}},51675:(a,b,c)=>{c.d(b,{P:()=>j,r:()=>i});var d=c(73024),e=c(76760),f=c(99417);function g(){return(0,e.join)((0,f.j_)(),"defaults.json")}let h={thinkingLevel:"high",bypassAllPermissions:!1,diffStyle:"split",dismissKeyboardOnSend:!0,thinkingExpanded:!1,readExpanded:!1,editExpanded:!1,toolCallsExpanded:!1,modelSlots:{main:"sonnet"},messageStitching:!0,reviewsEnabled:!0};function i(){try{let a=JSON.parse((0,d.readFileSync)(g(),"utf-8"));return a.model&&!a.modelSlots&&(a.modelSlots={main:a.model},delete a.model),{...h,...a}}catch{return{...h}}}function j(a){let b={...i(),...a};try{(0,d.mkdirSync)((0,f.j_)(),{recursive:!0}),(0,d.writeFileSync)(g(),JSON.stringify(b,null,2)+"\n")}catch{}return b}},99599:(a,b,c)=>{c.d(b,{hW:()=>_,Rb:()=>Z,wF:()=>Y,AU:()=>$});var d=c(31421),e=c(78474),f=c(73024),g=c(76760),h=c.n(g),i=c(78796),j=c(64423),k=c(99417),l=c(22211),m=c(13075),n=c(51675);class o{parseLine(a){let b,c=a.trim();if(!c)return[];try{b=JSON.parse(c)}catch{return[]}let d=b.type;if("assistant"===d)return this.parseAssistantEvent(b);if("user"===d)return this.parseUserEvent(b);if("result"===d)return this.parseResultEvent(b);if("control_request"===d)return this.parseControlRequest(b);if("tool_progress"===d){let a=b.tool_use_id,c=b.content;return a&&c?[{type:"tool_progress",toolId:a,text:c}]:[]}if("rate_limit_event"===d){let a=b.rate_limit_info;return a?[{type:"rate_limit",rateLimitInfo:{status:a.status||"unknown",retryAfterMs:a.retry_after_ms}}]:[]}if("prompt_suggestion"===d){let a=b.suggestions||b.prompt_suggestions;return a?.length?[{type:"prompt_suggestion",suggestions:a}]:[]}if("auth_status"===d)return[{type:"system_message",text:`__auth::${b.status||"unknown"}`}];if("tool_use_summary"===d||"stream_event"===d)return[];if("control_response"===d){let a=b.response;if(!a)return[];let c=a.subtype,d=a.response||a;if("success"!==c||!d.models)return[];let e=d.models||[],f=d.account,g=d.commands||[],h=d.agents||[];return[{type:"init",initData:{slashCommands:g.map(a=>a.name||""),skills:[],agents:h.map(a=>({name:a.name||"",description:a.description||void 0})),version:"",model:"",mcpServers:[],models:e.map(a=>({value:a.value||"",displayName:a.displayName||"",description:a.description||"",supportsEffort:a.supportsEffort,supportedEffortLevels:a.supportedEffortLevels,supportsAdaptiveThinking:a.supportsAdaptiveThinking,supportsFastMode:a.supportsFastMode,supportsAutoMode:a.supportsAutoMode})),account:f?{email:f.email||"",organization:f.organization||"",subscriptionType:f.subscriptionType||""}:void 0,commands:g.map(a=>({name:a.name||"",description:a.description||"",argumentHint:a.argumentHint}))}}]}if("system"===d){let a=b.subtype;if("compact_boundary"===a)return[{type:"system_message",text:"__compact_boundary__"}];if("status"===a&&"compacting"===b.status)return[{type:"system_message",text:"__compact::start"}];if("status"===a&&b.permissionMode){let a=b.permissionMode;return[{type:"system_message",text:`__permission_mode::${a}`}]}if("hook_started"===a){let a=b.hook_name||b.name||"unknown";return[{type:"system_message",text:`__hook::started::${a}`}]}if("hook_progress"===a){let a=b.content||"";return[{type:"system_message",text:`__hook::progress::${a}`}]}if("hook_response"===a)return[{type:"system_message",text:"__hook::done"}];if("task_started"===a)return[{type:"task_update",taskInfo:{taskId:b.task_id||"",toolUseId:b.tool_use_id||"",status:"running",description:b.description||""}}];if("task_progress"===a)return[{type:"task_update",taskInfo:{taskId:b.task_id||"",toolUseId:b.tool_use_id||"",status:"progress",description:b.description||""}}];if("task_notification"===a)return[{type:"task_update",taskInfo:{taskId:b.task_id||"",toolUseId:b.tool_use_id||"",status:"completed",description:b.description||"",summary:b.summary||""}}];if("init"===a){let a=b.slash_commands||[],c=b.skills||[],d=(b.agents||[]).map(a=>"string"==typeof a?{name:a}:{name:a.name||"",description:a.description}),e=b.claude_code_version||"";return[{type:"init",initData:{slashCommands:a,skills:c,agents:d,version:e,model:b.model||"",mcpServers:(b.mcp_servers||[]).map(a=>({name:a.name||"",status:a.status||""}))}}]}if(a)return[{type:"system_message",text:`__system::${a}`}]}return[]}parseAssistantEvent(a){let b=a.message;if(!b?.content)return[];b.model&&(this.lastAssistantModel=b.model);let c=b.id||void 0,d=[];for(let a of b.content)if("thinking"===a.type){let b=!a.thinking&&!!a.signature;if(!a.thinking&&!b)continue;d.push({type:"thinking",text:a.thinking??"",redacted:b,assistantMessageId:c})}else"text"===a.type&&a.text?d.push({type:"text_delta",text:a.text,assistantMessageId:c}):"tool_use"===a.type&&d.push({type:"tool_use_start",toolName:a.name||"unknown",toolId:a.id,toolInput:a.input?JSON.stringify(a.input):"",assistantMessageId:c});return d}parseUserEvent(a){let b=a.message;if(!b?.content||!Array.isArray(b.content))return[];let c=[];for(let a of b.content)if("tool_result"===a.type&&a.tool_use_id){let b=this.extractToolResultOutput(a),d=this.extractFilePath(a);c.push({type:"tool_result",toolId:a.tool_use_id,toolOutput:b,filePath:d})}return c}extractToolResultOutput(a){if("string"==typeof a.content)return a.content;if(Array.isArray(a.content)){let b=[];for(let c of a.content)"string"==typeof c?b.push(c):"text"===c.type&&c.text&&b.push(c.text);return b.join("\n")}return""}extractFilePath(a){if(Array.isArray(a.content)){for(let b of a.content)if("string"!=typeof b){let a=b.input;if(a){if("string"==typeof a.file_path)return a.file_path;if("string"==typeof a.filePath)return a.filePath;if("string"==typeof a.path)return a.path}}}}parseControlRequest(a){let b=a.request;return b?.subtype==="can_use_tool"?[{type:"permission_request",requestId:a.request_id,toolName:b.tool_name||"unknown",toolInput:b.input?JSON.stringify(b.input):"",rawToolInput:b.input,permissionSuggestions:b.permission_suggestions}]:[]}parseResultEvent(a){let b=a.result,c=a.uuid,d=a.subtype;return[{type:"message_done",message:{id:c||(0,i.A)(),role:"assistant",content:b||"",toolUses:[],blocks:[],timestamp:Date.now(),model:this.lastAssistantModel??void 0},interrupted:"error_during_execution"===d}]}constructor(){this.lastAssistantModel=null}}var p=c(51455),q=c(48161);let r=null,s=["PreToolUse","PostToolUse","Stop","StopFailure","UserPromptSubmit","UserPromptExpansion","SubagentStart","SubagentStop","Notification","PermissionRequest","PreCompact","PostCompact"];async function t(a){let b=function(){if(r)return r;let a=process.env.COCKPIT_HOOK_BRIDGE_BIN;if(a&&(0,f.existsSync)(a))return r=a,a;let b=h().resolve(process.cwd(),"bin","cockpit-hook-bridge.mjs");if((0,f.existsSync)(b))return r=b,b;throw Error(`cockpit-hook-bridge.mjs not found at ${b}`)}(),c=await v(),d=function(a){let b={};for(let d of s){var c;let e={type:"command",command:`node ${(c=a,/[\s"'\\$`]/.test(c)?`'${c.replace(/'/g,"'\\''")}'`:c)} ${d}`};"PermissionRequest"===d&&(e.timeout=86400),b[d]=[{matcher:"",hooks:[e]}]}return b}(b);for(let[a,b]of Object.entries(c.hooks??{}))Array.isArray(b)&&b.length>0&&d[a]&&(d[a]=[...b,...d[a]]);let e=Array.isArray(c.permissions?.allow)?c.permissions.allow:[],g=Array.isArray(c.permissions?.deny)?c.permissions.deny:[],i={...c,hooks:d,permissions:{...c.permissions??{},allow:[...e,...a.allowList??[]],deny:[...g,...a.denyList??[]]},skipDangerousModePermissionPrompt:!0},j=await y(),k=h().join(j,`${a.sessionId}.json`);return await (0,p.writeFile)(k,JSON.stringify(i,null,2),{mode:384}),{settingsPath:k,env:{COCKPIT_HOOK_URL:a.hookUrl,COCKPIT_HOOK_TOKEN:a.hookToken,COCKPIT_SESSION_ID:a.sessionId}}}async function u(a){let b=await y(),c=h().join(b,`${a}.json`);await (0,p.rm)(c,{force:!0})}async function v(){let a={};for(let b of[h().join((0,k.Wc)(),"settings.json"),h().join((0,k.Wc)(),"settings.local.json")])try{let c=await (0,p.readFile)(b,"utf-8"),d=JSON.parse(c);d&&"object"==typeof d&&!Array.isArray(d)&&(a=function a(b,c){let d={...b};for(let e of Object.keys(c)){let f=b[e],g=c[e];w(f)&&w(g)?d[e]=a(f,g):d[e]=g}return d}(a,d))}catch{}return a}function w(a){return null!==a&&"object"==typeof a&&!Array.isArray(a)}let x=null;async function y(){if(x)return x;let a=h().join((0,k.du)(),"hook-settings");try{return await (0,p.mkdir)(a,{recursive:!0}),x=a,a}catch{let a=h().join((0,q.tmpdir)(),"cockpit-hook-settings");return await (0,p.mkdir)(a,{recursive:!0}),x=a,a}}function z(a,b){var c,d,e,f,g,h;switch(a){case"PreToolUse":let j,k,l;return j=A((c=b).tool_name,"unknown"),k=c.tool_input,l=[{type:"system_message",text:"__tool_use_start"},{type:"tool_use_start",toolName:j,toolId:A(c.tool_use_id,"")||void 0,toolInput:k?JSON.stringify(k):""}],"EnterPlanMode"===j&&l.push({type:"system_message",text:"__permission_mode::plan"}),l;case"PostToolUse":let m,n,o,p;return m=A((d=b).tool_name,"unknown"),n=A(d.tool_use_id,""),o=d.tool_input,p=[{type:"tool_result",toolId:n||void 0,toolOutput:function(a){if(null==a)return"";if("string"==typeof a)return a;if("object"==typeof a){if("string"==typeof a.stdout){let b=a.stdout;return"string"==typeof a.stderr&&a.stderr.length>0&&(b+=`
2
+ ${a.stderr}`),b}return"string"==typeof a.content?a.content:JSON.stringify(a)}return String(a)}(d.tool_response),filePath:function(a){if(a){if("string"==typeof a.file_path)return a.file_path;if("string"==typeof a.filePath)return a.filePath;if("string"==typeof a.path)return a.path}}(o)}],"ExitPlanMode"===m&&p.push({type:"system_message",text:"__permission_mode::standard"}),p;case"Stop":let q;return q=A(b.last_assistant_message,""),[{type:"message_done",message:{id:(0,i.A)(),role:"assistant",content:q,toolUses:[],blocks:[],timestamp:Date.now()}}];case"StopFailure":let r,s;return r=A((e=b).error_type,"unknown"),s=A(e.error_message,"Unknown error"),[{type:"message_done",message:{id:(0,i.A)(),role:"assistant",content:"",toolUses:[],blocks:[],timestamp:Date.now()}},{type:"system_message",text:`__stop_failure::${r}::${s}`}];case"PermissionRequest":let t,u;return t=A((f=b).tool_name,"unknown"),u=f.tool_input,[{type:"permission_request",requestId:(0,i.A)(),toolName:t,toolInput:u?JSON.stringify(u):"",rawToolInput:u}];case"Notification":let v;return(v=A(b.message,""))?[{type:"system_message",text:`__notification::${v}`}]:[];case"SubagentStart":let w,x,y;return w=A((g=b).session_id,(0,i.A)()),x=A(g.agent_id,""),[{type:"task_update",taskInfo:{taskId:w,toolUseId:x,status:"running",title:(y=A(g.agent_type,""))||"Agent",description:A(g.description,"")||y||"Subagent running"}}];case"SubagentStop":let z,B,C,D;return z=A((h=b).session_id,""),B=A(h.agent_id,""),C=A(h.agent_type,""),D=A(h.last_assistant_message,""),[{type:"task_update",taskInfo:{taskId:z,toolUseId:B,status:"completed",title:C||"Agent",description:A(h.description,"")||C||"Subagent completed",summary:D.slice(0,500)||void 0}}];case"PreCompact":return[{type:"system_message",text:"__compact::hook_start"}];case"PostCompact":return[{type:"system_message",text:"__compact::hook_done"}];case"UserPromptSubmit":case"UserPromptExpansion":return[]}}function A(a,b){return"string"==typeof a?a:b}var B=c(14566);class C{constructor(a){this.pty=null,this.buffer="",this.exited=!1,this.exitCode=null,this.opts=a,this.cols=a.cols??160,this.rows=a.rows??50}get pid(){return this.pty?.pid??-1}async start(){if(this.pty)throw Error("PtySession already started");let a=this.opts.bin??"claude",b=["--verbose","--settings",this.opts.settingsPath,...this.opts.extraArgs??[]],c={...process.env,...this.opts.env??{}};delete c.CLAUDECODE,delete c.CLAUDE_CODE_ENTRYPOINT;let d="darwin"===process.platform?"/bin/zsh":a,e="darwin"===process.platform?["-l","-c",`exec ${[a,...b].map(E).join(" ")}`]:b,g=`platform=${process.platform}, file=${d}, cwd=${this.opts.cwd}`;try{let a=(0,f.existsSync)(d);if(g+=`, exists=${a}`,a){let a=(0,f.realpathSync)(d),b=(0,f.statSync)(a),c=`0${(4095&b.mode).toString(8)}`;g+=`, realpath=${a}, mode=${c}, size=${b.size}`}}catch(a){g+=`, diagError=${a instanceof Error?a.message:String(a)}`}console.log(`[pty-session] spawn diagnostic: ${g}`),console.log(`[pty-session] spawn args: ${JSON.stringify(e).slice(0,500)}`),console.log(`[pty-session] PATH: ${c.PATH?.split(":").slice(0,10).join(":")}`);try{this.pty=(0,B.spawn)(d,e,{name:"xterm-256color",cols:this.cols,rows:this.rows,cwd:this.opts.cwd,env:c})}catch(a){throw console.error(`[pty-session] spawn failed: ${a instanceof Error?a.message:String(a)}`),console.error(`[pty-session] full diagnostic: ${g}`),a}this.pty.onData(a=>{this.buffer+=a,this.buffer.length>65536&&(this.buffer=this.buffer.slice(-32768)),this.opts.onData?.(a)}),this.pty.onExit(a=>{this.exited=!0,this.exitCode=a.exitCode,this.opts.onExit?.(a),this.pty=null}),await this.handleTrustDialog(),await this.waitForReplReady()}async sendText(a){let b=this.requirePty();b.write("\x15"),b.write(a),await D(300),b.write("\r")}sendSlash(a){let b=a.startsWith("/")?a:`/${a}`;this.requirePty().write(`${b}\r`)}sendKey(a){this.requirePty().write(a)}resize(a,b){this.pty&&(a!==this.cols||b!==this.rows)&&(this.cols=a,this.rows=b,this.pty.resize(a,b))}kill(a){if(this.pty){try{this.pty.kill(a)}catch{}this.pty=null}}requirePty(){if(!this.pty)throw Error("PtySession not started or already exited");return this.pty}cleanOutput(){return this.buffer.replace(/\x1b\[[0-9;]*[a-zA-Z]/g,"").replace(/\x1b[>=?][^\x1b]*/g,"")}async handleTrustDialog(){let a=Date.now()+5e3,b=!1;for(;Date.now()<a;){if(this.exited)return;let a=this.cleanOutput();if(a.includes("trust")||a.includes("Yes,")){this.requirePty().write("\r"),b=!0;break}if(a.length>100)break;await D(200)}b&&await D(2e3)}async waitForReplReady(){let a=Date.now()+6e4;for(;Date.now()<a;){if(this.exited)throw Error(`claude exited during startup (code=${this.exitCode}, output=${this.cleanOutput().slice(0,200)})`);if(this.cleanOutput().length>=100){if(await D(2e3),this.exited)throw Error(`claude exited during startup (code=${this.exitCode}, output=${this.cleanOutput().slice(0,200)})`);return}await D(200)}let b=this.cleanOutput();throw Error(`Timed out after 60000ms waiting for claude REPL (got ${b.length} bytes: ${b.slice(0,200)})`)}}function D(a){return new Promise(b=>setTimeout(b,a))}function E(a){return/[\s"'\\$`!#&|;()<>]/.test(a)?`'${a.replace(/'/g,"'\\''")}'`:a}let F=/\x1b\[[0-9;]*[a-zA-Z]/g;class G{constructor(a){this.pty=null,this.settingsPath=null,this.pendingPermissions=new Map,this.exited=!1,this.cleaned=!1,this.ptyOutputBuffer="",this.errorDebounce=null,this.opts=a}get pid(){return this.pty?.pid??-1}get isAlive(){return!!this.pty&&!this.exited}async start(a){let{sessionId:b,cwd:c,hookRouter:d}=this.opts,e=d.register(b,this.buildHandler()),{settingsPath:f,env:g}=await t({sessionId:b,hookUrl:d.getUrl(),hookToken:e,allowList:this.opts.allowList,denyList:this.opts.denyList});this.settingsPath=f,this.pty=new C({cwd:c,settingsPath:f,env:{...g,...this.opts.extraEnv??{}},extraArgs:this.opts.extraArgs,bin:this.opts.claudeBin,onData:a=>{this.scanForErrors(a),this.opts.onPtyData?.(a)},onExit:a=>{this.exited=!0,this.opts.onExit(a),this.cleanup().catch(()=>{})}});try{await this.pty.start()}catch(a){throw await this.cleanup(),a}a&&await this.pty.sendText(a),this.fetchInitData()}fetchInitData(){var a;let b,c,e=this.opts.sessionId.slice(0,8);console.log(`[pty-runtime] fetching CLI init data for session ${e}`),(b=(a={cwd:this.opts.cwd,bin:this.opts.claudeBin}).bin??"claude",c=["-p","--verbose","--output-format","stream-json","hi"],new Promise(e=>{let f=!1,g=a=>{if(!f){f=!0;try{h.kill()}catch{}e(a)}};console.log(`[cli-init-fetch] spawning: ${b} ${c.join(" ")} (cwd=${a.cwd})`);let h=(0,d.spawn)(b,c,{cwd:a.cwd,stdio:["ignore","pipe","pipe"]}),i="",j="";h.stdout.on("data",a=>{let b=(i+=a.toString()).split("\n");for(let a of(i=b.pop()||"",b))if(a.trim())try{let b=JSON.parse(a);if("system"===b.type&&"init"===b.subtype){let a=function(a){let b=a.slash_commands||[],c=a.skills||[],d=(a.agents||[]).map(a=>"string"==typeof a?{name:a}:{name:a.name||"",description:a.description}),e=a.claude_code_version||"",f=a.model||"";return{slashCommands:b,skills:c,agents:d,version:e,model:f,mcpServers:(a.mcp_servers||[]).map(a=>({name:a.name||"",status:a.status||""}))}}(b);console.log(`[cli-init-fetch] got init: ${a.slashCommands.length} commands, ${a.skills.length} skills`),g(a);return}}catch{}}),h.stderr?.on("data",a=>{(j+=a.toString()).length>2048&&(j=j.slice(-1024))}),h.on("close",a=>{console.log(`[cli-init-fetch] process exited code=${a}${j?` stderr=${j.slice(0,200)}`:""}`),g(null)}),h.on("error",a=>{console.log(`[cli-init-fetch] spawn error: ${a.message}`),g(null)}),setTimeout(()=>{console.log("[cli-init-fetch] timeout reached, giving up"),g(null)},3e4)})).then(a=>{a&&!this.exited?(console.log(`[pty-runtime] emitting init event for session ${e}: ${a.slashCommands.length} commands`),this.emit([{type:"init",initData:a}])):console.log(`[pty-runtime] init fetch returned ${a?"data but session exited":"null"} for session ${e}`)}).catch(a=>{console.log(`[pty-runtime] init fetch failed for session ${e}: ${a}`)})}async sendText(a){if(!this.pty)throw Error("PtyRuntime not started");await this.pty.sendText(a)}sendSlash(a){if(!this.pty)throw Error("PtyRuntime not started");this.pty.sendSlash(a)}sendKey(a){if(!this.pty)throw Error("PtyRuntime not started");this.pty.sendKey(a)}interrupt(){if(this.pty){for(let[,a]of(this.pty.sendKey("\x1b"),this.pendingPermissions))a({behavior:"deny",message:"interrupted"});this.pendingPermissions.clear()}}resize(a,b){this.pty?.resize(a,b)}async kill(a){for(let[,b]of(this.cancelErrorDebounce(),this.pty&&(this.pty.kill(a),this.pty=null),this.pendingPermissions))b({behavior:"deny",message:"session ended"});this.pendingPermissions.clear(),await this.cleanup()}notifyPermissionDecision(a,b){let c=this.pendingPermissions.get(a);return!!c&&(this.pendingPermissions.delete(a),c(b),!0)}buildHandler(){return{onPreToolUse:a=>{this.cancelErrorDebounce(),this.ptyOutputBuffer="";let b="string"==typeof a.tool_name?a.tool_name:"unknown",c="string"==typeof a.session_id?a.session_id.slice(0,8):"none",d="string"==typeof a.tool_use_id?a.tool_use_id.slice(0,12):"none";console.log(`[pty-runtime] PreToolUse: tool=${b} cli_session=${c} tool_use_id=${d}`),this.emit(z("PreToolUse",a))},onPostToolUse:a=>{this.cancelErrorDebounce(),this.ptyOutputBuffer="";let b="string"==typeof a.tool_name?a.tool_name:"unknown",c="string"==typeof a.session_id?a.session_id.slice(0,8):"none",d="string"==typeof a.tool_use_id?a.tool_use_id.slice(0,12):"none";console.log(`[pty-runtime] PostToolUse: tool=${b} cli_session=${c} tool_use_id=${d}`),this.emit(z("PostToolUse",a))},onStop:a=>{this.cancelErrorDebounce(),this.ptyOutputBuffer="",console.log(`[pty-runtime] Stop hook received for session ${this.opts.sessionId.slice(0,8)}`);let b=z("Stop",a);console.log(`[pty-runtime] Stop translated to ${b.length} events: [${b.map(a=>a.type).join(", ")}]`),this.emit(b)},onStopFailure:a=>{this.cancelErrorDebounce(),this.ptyOutputBuffer="";let b="string"==typeof a.error_type?a.error_type:"unknown",c="string"==typeof a.error_message?a.error_message:"Unknown error";console.log(`[pty-runtime] StopFailure hook for session ${this.opts.sessionId.slice(0,8)}: ${b} - ${c}`),this.emit(z("StopFailure",a)),this.opts.onError(`${c} (${b})`)},onUserPromptSubmit:a=>{this.cancelErrorDebounce(),this.ptyOutputBuffer="",this.emit(z("UserPromptSubmit",a))},onUserPromptExpansion:a=>{this.cancelErrorDebounce(),this.ptyOutputBuffer="";let b="string"==typeof a.command_name?a.command_name:"unknown",c=this.opts.sessionId.slice(0,8);console.log(`[pty-runtime] UserPromptExpansion: command=${b}, session=${c}`),this.emit(z("UserPromptExpansion",a))},onSubagentStart:a=>{this.cancelErrorDebounce(),this.ptyOutputBuffer="";let b="string"==typeof a.session_id?a.session_id.slice(0,8):"none",c="string"==typeof a.tool_use_id?a.tool_use_id.slice(0,12):"none",d="string"==typeof a.agent_type?a.agent_type:"unknown",e="string"==typeof a.description?a.description.slice(0,80):"";console.log(`[pty-runtime] SubagentStart: cli_session=${b} tool_use_id=${c} type=${d} desc="${e}"`),console.log(`[pty-runtime] SubagentStart full payload keys: ${Object.keys(a).join(", ")}`),this.emit(z("SubagentStart",a))},onSubagentStop:a=>{this.cancelErrorDebounce(),this.ptyOutputBuffer="";let b="string"==typeof a.session_id?a.session_id.slice(0,8):"none",c="string"==typeof a.tool_use_id?a.tool_use_id.slice(0,12):"none",d="string"==typeof a.agent_type?a.agent_type:"unknown";console.log(`[pty-runtime] SubagentStop: cli_session=${b} tool_use_id=${c} type=${d}`),console.log(`[pty-runtime] SubagentStop full payload keys: ${Object.keys(a).join(", ")}`),this.emit(z("SubagentStop",a))},onPreCompact:a=>{this.cancelErrorDebounce(),this.ptyOutputBuffer="",console.log(`[pty-runtime] PreCompact for session ${this.opts.sessionId.slice(0,8)}`),this.emit(z("PreCompact",a))},onPostCompact:a=>{this.cancelErrorDebounce(),this.ptyOutputBuffer="",console.log(`[pty-runtime] PostCompact for session ${this.opts.sessionId.slice(0,8)}`),this.emit(z("PostCompact",a))},onNotification:a=>{this.cancelErrorDebounce(),this.emit(z("Notification",a))},onPermissionRequest:a=>this.handlePermissionRequest(a)}}handlePermissionRequest(a){let b=(0,i.A)(),c="string"==typeof a.tool_name?a.tool_name:"unknown",d=a.tool_input,e={type:"permission_request",requestId:b,toolName:c,toolInput:d?JSON.stringify(d):"",rawToolInput:d};return new Promise(a=>{this.pendingPermissions.set(b,a);try{this.opts.onEvents([e])}catch(c){this.pendingPermissions.delete(b),a({behavior:"deny",message:`cockpit handler error: ${String(c)}`})}})}emit(a){if(0!==a.length)try{this.opts.onEvents(a)}catch(a){console.error(`[pty-runtime] onEvents threw for session ${this.opts.sessionId.slice(0,8)}:`,a),this.opts.onError(a instanceof Error?a.message:String(a))}}cancelErrorDebounce(){this.errorDebounce&&(clearTimeout(this.errorDebounce),this.errorDebounce=null)}scanForErrors(a){if(this.ptyOutputBuffer+=a,this.ptyOutputBuffer.length>8192&&(this.ptyOutputBuffer=this.ptyOutputBuffer.slice(-4096)),this.errorDebounce)return;let b=this.ptyOutputBuffer.replace(F,"").replace(/[\x00-\x1f]/g,""),c=b.match(/API\s*Error:\s*(\d+)\s*([^✓✗❯]*)/)||b.match(/APIError:\s*(\d+)\s*(.*)/);if(!c)return;let d=c[1],e=c[2].trim().slice(0,200),f=e?`${e} (HTTP ${d})`:`API Error (HTTP ${d})`;this.errorDebounce=setTimeout(()=>{this.errorDebounce=null,this.ptyOutputBuffer="",console.log(`[pty-runtime] API error detected for session ${this.opts.sessionId.slice(0,8)}: ${f}`);let a={type:"message_done",message:{id:(0,i.A)(),role:"assistant",content:"",toolUses:[],blocks:[],timestamp:Date.now()}};try{this.opts.onEvents([a])}catch{}this.opts.onError(f)},1e4)}async cleanup(){!this.cleaned&&(this.cleaned=!0,this.opts.hookRouter.unregister(this.opts.sessionId),this.settingsPath&&(await u(this.opts.sessionId).catch(()=>{}),this.settingsPath=null))}}var H=c(13470);let I=new Set(["ls","cat","head","tail","wc","grep","rg","find","pwd","which","type","whereis","file","stat","du","df","tree","date","echo","printf","env","printenv","basename","dirname","realpath","readlink","uname","whoami","hostname","id","dir","findstr","where","more","sort"]),J=new Set(["status","log","diff","show","blame","branch","remote","ls-files","ls-tree","rev-parse","describe","tag","reflog"]),K=[/^gh\s+pr\s+(list|view|diff|status|checks)\b/,/^gh\s+issue\s+(list|view|status)\b/,/^gh\s+repo\s+(list|view|clone)\b/,/^gh\s+run\s+(list|view|watch)\b/,/^gh\s+search\b/,/^gh\s+api\b(?!.*-X\s*(POST|PUT|PATCH|DELETE))(?!.*--method\s*(POST|PUT|PATCH|DELETE))/],L=new Set(["Edit","Write","Bash","NotebookEdit"]),M=new Set(["ExitPlanMode","AskUserQuestion","EnterPlanMode"]);function N(){return{pendingToolUses:[],pendingBlocks:[],agentStack:[],currentAssistantMsgId:null,flushedOnMessageDone:!1,thinkingStartedAt:null}}function O(a,b,c){let d={emit:[],systemMessages:[],errors:[],intermediateMessages:[],snapshot:null,permissionActions:[],compactDone:!1};for(let e of a){if(e.assistantMessageId&&e.assistantMessageId!==b.currentAssistantMsgId&&0===b.agentStack.length){if(b.currentAssistantMsgId&&b.pendingBlocks.length>0){let a=b.pendingBlocks.filter(a=>"text"===a.type).map(a=>a.text).join(""),c={id:b.currentAssistantMsgId,role:"assistant",content:a,toolUses:[...b.pendingToolUses],blocks:[...b.pendingBlocks],timestamp:Date.now()};d.intermediateMessages.push(c),b.pendingToolUses.length=0,b.pendingBlocks.length=0}b.currentAssistantMsgId=e.assistantMessageId}if("thinking"===e.type&&(e.text||e.redacted)){if(b.agentStack.length>0)continue;let a=null!=b.thinkingStartedAt?Date.now()-b.thinkingStartedAt:void 0;e.durationMs=a;let c=b.pendingBlocks[b.pendingBlocks.length-1];c&&"thinking"===c.type?(c.text+=e.text??"",e.redacted&&(c.redacted=!0),void 0!==a&&(c.durationMs=a)):b.pendingBlocks.push({type:"thinking",text:e.text??"",redacted:e.redacted,durationMs:a})}else if("text_delta"===e.type&&e.text){if(b.agentStack.length>0)continue;b.thinkingStartedAt=null;let a=b.pendingBlocks[b.pendingBlocks.length-1];a&&"text"===a.type?a.text+=e.text:b.pendingBlocks.push({type:"text",text:e.text})}else if("tool_use_start"===e.type){b.thinkingStartedAt=null;let a={id:e.toolId||"",name:e.toolName||"",input:e.toolInput||"",output:"",status:"running"},c="Agent"===a.name,d=e.assistantMessageId===b.currentAssistantMsgId;if(e.isMainThread=d,b.agentStack.length>0&&!d){let c=b.agentStack[b.agentStack.length-1];c.children||(c.children=[]),c.children.push(a)}else b.pendingToolUses.push(a),b.pendingBlocks.push({type:"tool_use",toolUse:a});c&&b.agentStack.push(a)}else if("tool_result"===e.type){let a=b.agentStack.findIndex(a=>a.id===e.toolId);if(-1!==a)b.agentStack[a].output=e.toolOutput||"",e.filePath&&(b.agentStack[a].filePath=e.filePath),b.agentStack[a].status="done",b.agentStack.splice(a,1);else if(b.agentStack.length>0)for(let a of b.agentStack){let b=a.children?.find(a=>a.id===e.toolId);if(b){b.output=e.toolOutput||"",e.filePath&&(b.filePath=e.filePath),b.status="done";break}}else{let a=b.pendingToolUses.find(a=>a.id===e.toolId);a&&(a.output=e.toolOutput||"",e.filePath&&(a.filePath=e.filePath),a.status="done")}b.thinkingStartedAt=Date.now()}else if("tool_progress"===e.type&&e.toolId&&e.text){let a=b.agentStack.find(a=>a.id===e.toolId);if(a)a.output+=e.text;else if(b.agentStack.length>0){let a=!1;for(let c of b.agentStack){let b=c.children?.find(a=>a.id===e.toolId);if(b){b.output+=e.text,a=!0;break}}if(!a){let a=b.pendingToolUses.find(a=>a.id===e.toolId);a&&(a.output+=e.text)}}else{let a=b.pendingToolUses.find(a=>a.id===e.toolId);a&&(a.output+=e.text)}}else if("system_message"===e.type&&e.text){if(e.text.startsWith("__permission_mode::")){d.systemMessages.push(e.text);continue}d.systemMessages.push(e.text)}else if("message_done"===e.type&&e.message){if(b.thinkingStartedAt=null,console.log(`[stream-processor] message_done: interrupted=${!!e.interrupted}, pendingBlocks=${b.pendingBlocks.length}, pendingToolUses=${b.pendingToolUses.length}, currentMsgId=${b.currentAssistantMsgId?.slice(0,8)??"null"}, clearPending=${!!e.clearPending}`),e.interrupted){b.currentAssistantMsgId&&(e.message.id=b.currentAssistantMsgId),b.pendingBlocks.length>0&&(e.message.blocks=[...b.pendingBlocks],e.message.content=b.pendingBlocks.filter(a=>"text"===a.type).map(a=>a.text).join("")),b.pendingToolUses.length>0&&0===e.message.toolUses.length&&(e.message.toolUses=[...b.pendingToolUses]),b.pendingBlocks.length=0,b.pendingToolUses.length=0,b.agentStack.length=0,b.currentAssistantMsgId=null,d.statusChange="idle",b.flushedOnMessageDone=!0,d.emit.push(e),d.snapshot=null;continue}if(0===b.pendingBlocks.length&&0===b.pendingToolUses.length&&b.currentAssistantMsgId){b.currentAssistantMsgId=null,d.statusChange="idle",c.compacting&&(d.compactDone=!0),b.flushedOnMessageDone=!0,d.snapshot=null;continue}if(e.clearPending)b.pendingToolUses.length=0,b.pendingBlocks.length=0,b.agentStack.length=0,b.currentAssistantMsgId=null,d.statusChange="idle",c.compacting&&(d.compactDone=!0),b.flushedOnMessageDone=!0;else{b.currentAssistantMsgId&&(e.message.id=b.currentAssistantMsgId);let a=b.pendingBlocks.some(a=>"text"===a.type);if(e.message.content&&!a&&b.pendingBlocks.push({type:"text",text:e.message.content}),0===b.pendingToolUses.length){let a=b.pendingBlocks.filter(a=>"text"===a.type).map(a=>a.text).join("").trim();if("No response requested."===a){b.pendingBlocks.length=0,b.currentAssistantMsgId=null,d.statusChange="idle",b.flushedOnMessageDone=!0,d.snapshot=null;continue}let c=a.match(/^API Error: (\d+)\s/);if(c){let e=a.match(/"message"\s*:\s*"([^"]+)"/),f=e?`${e[1]} (HTTP ${c[1]})`:a.slice(0,200);b.pendingBlocks.length=0,b.pendingToolUses.length=0,b.agentStack.length=0,b.currentAssistantMsgId=null,d.statusChange="idle",d.errors.push(f),b.flushedOnMessageDone=!0,d.snapshot=null;continue}}e.message.blocks=[...b.pendingBlocks],0===e.message.toolUses.length&&b.pendingToolUses.length>0&&(e.message.toolUses=[...b.pendingToolUses]),b.pendingToolUses.length=0,b.pendingBlocks.length=0,b.agentStack.length=0,b.currentAssistantMsgId=null,d.statusChange="idle",c.compacting&&(d.compactDone=!0),b.flushedOnMessageDone=!0}}if("permission_request"===e.type&&e.requestId){let a=e.toolName||"";if(c.planMode){if("Bash"===a){if(function(a){let b=a.trim();if(!b||/(?:;|&&|\|\||>|<|`|\$\(|<\()/.test(b)||/(?:^|[^|])&(?!&)/.test(b))return!1;let c=b.split("|").map(a=>a.trim()).filter(Boolean);if(!c.length)return!1;for(let a of c){let[b,c]=a.split(/\s+/);if("git"===b){if(!c||!J.has(c))return!1;continue}if(!I.has(b))return!1}return!0}(e.rawToolInput?.command??"")){d.permissionActions.push({type:"auto_approve",requestId:e.requestId,toolName:a,rawToolInput:e.rawToolInput});continue}d.permissionActions.push({type:"auto_deny",requestId:e.requestId,toolName:a,denyReason:"Cockpit plan mode: Bash is restricted to read-only commands (ls, cat, head, tail, wc, grep, rg, find, stat, file, du, df, tree, git status/log/diff/show/blame, etc.). Shell operators ';', '&&', '||', '>', '<', '$(...)', backticks are not allowed. Use Read/Grep/Glob for file access, or call ExitPlanMode when ready to implement."});continue}if(L.has(a)){d.permissionActions.push({type:"auto_deny",requestId:e.requestId,toolName:a,denyReason:`Cockpit plan mode: ${a} is blocked. Plan mode is read-only; call ExitPlanMode to submit the plan before making changes.`});continue}if(!M.has(a)){d.permissionActions.push({type:"auto_approve",requestId:e.requestId,toolName:a,rawToolInput:e.rawToolInput});continue}}if("Bash"===a&&e.rawToolInput){let b=e.rawToolInput.command||"";if(b.trimStart().startsWith("gh ")&&function(a){let b=a.trim();return K.some(a=>a.test(b))}(b)){d.permissionActions.push({type:"auto_approve",requestId:e.requestId,toolName:a,rawToolInput:e.rawToolInput});continue}}d.permissionActions.push({type:"store",requestId:e.requestId,toolName:a,toolInput:e.toolInput,rawToolInput:e.rawToolInput,permissionSuggestions:e.permissionSuggestions})}d.emit.push(e),d.snapshot=function(a){if(a.currentAssistantMsgId&&a.pendingBlocks.length>0){let b=a.pendingBlocks.filter(a=>"text"===a.type).map(a=>a.text).join("");return{messageId:a.currentAssistantMsgId,content:b,toolUses:a.pendingToolUses.map(a=>({...a,children:a.children?[...a.children]:void 0})),blocks:a.pendingBlocks.map(a=>"tool_use"===a.type?{...a,toolUse:{...a.toolUse}}:{...a})}}return null}(b)}return d.statusChange&&console.log(`[stream-processor] statusChange=${d.statusChange}, emitting ${d.emit.length} events: [${d.emit.map(a=>a.type).join(", ")}]`),d}class P{constructor(a,b){this.cliSessionId=a,this.onUpdate=b,this.watchers=[],this.polling=!1,this.timer=null,this.lastJson="",this.stopped=!1;const c=(0,k.Wc)();this.todosDir=(0,g.join)(c,"todos"),this.tasksDir=(0,g.join)(c,"tasks",a)}start(){this.watchDir(this.todosDir),this.watchDir(this.tasksDir),this.reload()}stop(){for(let a of(this.stopped=!0,this.timer&&(clearTimeout(this.timer),this.timer=null),this.watchers))a.close();if(this.watchers=[],this.polling){try{(0,f.unwatchFile)(this.todosDir)}catch{}try{(0,f.unwatchFile)(this.tasksDir)}catch{}this.polling=!1}}watchDir(a){if(!(0,f.existsSync)(a))return void this.pollDir(a);try{let b=(0,f.watch)(a,()=>this.scheduleReload());this.watchers.push(b)}catch{this.pollDir(a)}}pollDir(a){this.polling=!0,(0,f.watchFile)(a,{interval:1e3},()=>{if(!this.stopped){if((0,f.existsSync)(a)){(0,f.unwatchFile)(a);try{let b=(0,f.watch)(a,()=>this.scheduleReload());this.watchers.push(b)}catch{}}this.scheduleReload()}})}scheduleReload(){this.stopped||(this.timer&&clearTimeout(this.timer),this.timer=setTimeout(()=>this.reload(),300))}readOnce(){let a=this.readTodos(),b=this.readTasks();return a.length>0?a:b}reload(){let a=this.readTodos(),b=this.readTasks(),c=a.length>0?a:b;if(0===c.length&&""===this.lastJson)return;let d=JSON.stringify(c);d!==this.lastJson&&(this.lastJson=d,this.onUpdate(c))}readTodos(){try{if(!(0,f.existsSync)(this.todosDir))return[];let a=`${this.cliSessionId}-agent-`,b=(0,f.readdirSync)(this.todosDir).filter(b=>b.startsWith(a)&&b.endsWith(".json"));if(0===b.length)return[];let c=b.sort().pop(),d=JSON.parse((0,f.readFileSync)((0,g.join)(this.todosDir,c),"utf-8"));if(!Array.isArray(d))return[];return d.filter(a=>a.content&&a.status).map(a=>({content:a.content,status:a.status,activeForm:a.activeForm||void 0}))}catch{return[]}}readTasks(){try{if(!(0,f.existsSync)(this.tasksDir))return[];let b=(0,f.readdirSync)(this.tasksDir).filter(a=>a.endsWith(".json"));if(0===b.length)return[];let c=[];for(let d of b)try{var a;let b=JSON.parse((0,f.readFileSync)((0,g.join)(this.tasksDir,d),"utf-8"));if("deleted"===b.status)continue;c.push({content:b.subject||b.description||"",status:(a=b.status,"in_progress"===a?"in_progress":"completed"===a?"completed":"pending"),activeForm:b.activeForm||void 0})}catch{}return c}catch{return[]}}}var Q=c(16987);class R{constructor(a,b,c){this.sessionId=a,this.cwd=b,this.onUpdate=c,this.watcher=null,this.polling=!1,this.timer=null,this.lastSize=0,this.stopped=!1,this.filePath=(0,Q.kw)(a,b)}start(){(0,f.existsSync)(this.filePath)?this.watchWithInotify():this.watchWithPoll()}async stop(){this.stopped=!0,this.timer&&(clearTimeout(this.timer),this.timer=null),this.watcher&&(this.watcher.close(),this.watcher=null),this.polling&&((0,f.unwatchFile)(this.filePath),this.polling=!1),await this.reload()}watchWithInotify(){try{this.watcher=(0,f.watch)(this.filePath,()=>this.scheduleReload())}catch{this.watchWithPoll()}}watchWithPoll(){this.polling=!0,(0,f.watchFile)(this.filePath,{interval:500},()=>{this.stopped||(!this.watcher&&(0,f.existsSync)(this.filePath)&&((0,f.unwatchFile)(this.filePath),this.polling=!1,this.watchWithInotify()),this.scheduleReload())})}scheduleReload(){this.stopped||(this.timer&&clearTimeout(this.timer),this.timer=setTimeout(()=>this.reload(),250))}async reload(){try{let a=await (0,Q.vi)(this.sessionId,this.cwd,{tailLines:150});a.totalSize!==this.lastSize&&(this.lastSize=a.totalSize,this.onUpdate(a.messages,a.lastUsage))}catch{this.stopped||(this.timer=setTimeout(()=>this.reload(),100))}}}let S=null;function T(){if(S)return S;let a="win32"===process.platform?"where":"which";try{S=(0,d.execFileSync)(a,["claude"],{encoding:"utf-8"}).trim().split("\n")[0]}catch{S="claude"}return S}let U=(a,b)=>{if(!(0,m.TT)())return;let c=new Date().toISOString().slice(11,23),d=a.slice(0,8);console.log(`[session:${d}] ${c} ${b}`)};class V{constructor(){this.sessions=new Map,setInterval(()=>{for(let[a,b]of this.sessions)if("running"===b.info.status&&!b.process&&!b.ptyRuntime?.isAlive){let c=a.slice(0,8);(0,m.cY)(`[session:${c}] stale check: status=running but no live process, correcting to idle`),(0,m._N)(a,"idle:stale-check"),b.info.status="idle",b.emitter.emit("status",a,"idle")}},15e3)}createSession(a,b,c){let d=(0,i.A)(),f=Date.now(),g=(0,n.r)(),k={main:g.modelSlots.main??"sonnet"},l=c?.runtime??"stream",m={id:d,name:b||h().basename(a)||a,cwd:a,createdAt:f,lastActiveAt:f,status:"idle",model:k.main,contextSize:g.modelSlots?.mainContext??j.w6,runtime:l,pendingRequestCount:0};return this.sessions.set(d,{info:m,process:null,stdin:null,emitter:new e.EventEmitter,hasSpawnedBefore:!1,cliSessionId:d,previousCliSessionIds:[],bypassAllPermissions:c?.bypassPermissions??g.bypassAllPermissions,planMode:!1,needsRespawnForPermissions:!1,compacting:!1,thinkingLevel:g.thinkingLevel,streamState:null,contextUsage:null,contextWindowSize:(0,j.oh)(m.contextSize??j.w6),todoItems:[],pendingRequests:new Map,controlCallbacks:new Map,streamingSnapshot:null,queuedMessages:[],queuePaused:!1,modelSlots:k,transcriptBuffer:[],transcriptByteOffset:0,transcriptTotalSize:0,bufferCliSessionId:d,paginationPrevIds:[],runtime:l,ptyRuntime:null,transcriptWatcher:null,todoWatcher:null,attachmentPaths:[],totalTokens:{input:0,output:0,cacheCreate:0,cacheRead:0}}),(0,H.JG)(d,{runtime:l}),m}ensureSession(a,b){let c=this.sessions.get(a);if(!c){let d=(0,H.XP)(a),f=d?.cliSessionId||a,g=d?.previousCliSessionIds||[],i=a.slice(0,8);(0,m.cY)(`[session:${i}] ensureSession: cliSessionId=${f.slice(0,8)}, prevIds=[${g.map(a=>a.slice(0,8)).join(",")}], hasPrefs=${!!d}`);let k=(0,n.r)(),l=Date.now(),o=d?.modelSlots??(d?.model?{main:d.model}:{main:k.modelSlots.main??"sonnet"}),p=d?.runtime??"stream",q=d?.contextSize??d?.modelSlots?.mainContext??j.w6;c={info:{id:a,name:d?.name||h().basename(b)||b,cwd:b,createdAt:l,lastActiveAt:l,status:"idle",model:o.main,contextSize:q,runtime:p,pendingRequestCount:0},process:null,stdin:null,emitter:new e.EventEmitter,hasSpawnedBefore:!0,cliSessionId:f,previousCliSessionIds:g,bypassAllPermissions:d?.bypassAllPermissions??k.bypassAllPermissions,planMode:d?.planMode??!1,pendingPlanReminder:d?.planMode??!1,needsRespawnForPermissions:!1,compacting:!1,thinkingLevel:d?.thinkingLevel??(0,j.Mi)((0,j.AX)((d?.model||k.modelSlots.main)??"sonnet"))??k.thinkingLevel,streamState:null,contextUsage:null,contextWindowSize:(0,j.oh)(q),todoItems:[],pendingRequests:new Map,controlCallbacks:new Map,initData:d?.initData,streamingSnapshot:null,queuedMessages:[],queuePaused:!1,modelSlots:o,transcriptBuffer:[],transcriptByteOffset:0,transcriptTotalSize:0,bufferCliSessionId:f,paginationPrevIds:[],runtime:p,ptyRuntime:null,transcriptWatcher:null,todoWatcher:null,attachmentPaths:[],totalTokens:{input:0,output:0,cacheCreate:0,cacheRead:0}},this.sessions.set(a,c)}return c}async getSession(a){let b=this.sessions.get(a);if(!b){let c=(0,H.XP)(a),d=await (0,Q.gT)(c?.cliSessionId||a)||await (0,Q.gT)(a);if(!d)return null;this.ensureSession(a,d),b=this.sessions.get(a)}let c=(0,n.r)().messageStitching,d=c&&b.previousCliSessionIds.length>0,{messages:e,byteOffset:f,totalSize:g,lastUsage:i}=await (0,Q.vi)(b.cliSessionId,b.info.cwd,d?void 0:{tailLines:150});if(b.bufferCliSessionId=b.cliSessionId,d)for(let a=b.previousCliSessionIds.length-1;a>=0;a--){let c=b.previousCliSessionIds[a],d=await (0,Q.vi)(c,b.info.cwd,{tailLines:150});if(d.messages.length>0){let g={id:`clear-boundary-${a}`,role:"system",content:"__context_reset__",toolUses:[],blocks:[],timestamp:Date.now()};e=[...d.messages,g,...e],f=d.byteOffset,i=i||d.lastUsage,b.bufferCliSessionId=c}}b.transcriptBuffer=e,b.transcriptByteOffset=f,b.transcriptTotalSize=g,b.paginationPrevIds=c?[...b.previousCliSessionIds]:[];let j=e.length>50?e.slice(-50):e,k=e.length>50||f>0||c&&b.previousCliSessionIds.length>0,l=h().basename(b.info.cwd)||b.info.cwd;if(b.info.name===l&&e.length>0){let a=e.find(a=>"user"===a.role&&a.content&&!a.content.startsWith("[")&&!a.content.startsWith("<"));a&&(b.info.name=a.content.slice(0,120))}let m=[...b.previousCliSessionIds,b.cliSessionId],o=await Promise.all(m.map(a=>(0,Q.tS)(a,b.info.cwd))),p=new Set,q=[];for(let a of o)for(let b of a)p.has(b)||(p.add(b),q.push(b));let r=i?{used:i.used,total:b.contextWindowSize}:null;return{info:b.info,messages:j,hasMore:k,lastUsage:r,promptHistory:q}}async getSessionByCwd(a,b){this.ensureSession(a,b);let c=this.sessions.get(a),d=(0,n.r)().messageStitching,e=d&&c.previousCliSessionIds.length>0,{messages:f,byteOffset:g,totalSize:i,lastUsage:j}=await (0,Q.vi)(c.cliSessionId,b,e?void 0:{tailLines:150});if(c.bufferCliSessionId=c.cliSessionId,e)for(let a=c.previousCliSessionIds.length-1;a>=0;a--){let d=c.previousCliSessionIds[a],e=await (0,Q.vi)(d,b,{tailLines:150});if(e.messages.length>0){let b={id:`clear-boundary-${a}`,role:"system",content:"__context_reset__",toolUses:[],blocks:[],timestamp:Date.now()};f=[...e.messages,b,...f],g=e.byteOffset,j=j||e.lastUsage,c.bufferCliSessionId=d}}c.transcriptBuffer=f,c.transcriptByteOffset=g,c.transcriptTotalSize=i,c.paginationPrevIds=d?[...c.previousCliSessionIds]:[];let k=f.length>50?f.slice(-50):f,l=f.length>50||g>0||d&&c.previousCliSessionIds.length>0,m=h().basename(b)||b;if(c.info.name===m&&f.length>0){let a=f.find(a=>"user"===a.role&&a.content&&!a.content.startsWith("[")&&!a.content.startsWith("<"));a&&(c.info.name=a.content.slice(0,120))}let o=[...c.previousCliSessionIds,c.cliSessionId],p=await Promise.all(o.map(a=>(0,Q.tS)(a,b))),q=new Set,r=[];for(let a of p)for(let b of a)q.has(b)||(q.add(b),r.push(b));let s=j?{used:j.used,total:c.contextWindowSize}:null;return{info:c.info,messages:k,hasMore:l,lastUsage:s,promptHistory:r}}async getCliSessionView(a,b){if(!(0,Q.Br)(a,b))return null;let c=(0,H.Kw)(a),d=c?c.truncatedPrevIds:[],e=(0,n.r)().messageStitching&&d.length>0,{messages:f,lastUsage:g}=await (0,Q.vi)(a,b,e?void 0:{tailLines:150});if(e)for(let a=d.length-1;a>=0;a--){let c=await (0,Q.vi)(d[a],b,{tailLines:150});if(c.messages.length>0){let b={id:`clear-boundary-${a}`,role:"system",content:"__context_reset__",toolUses:[],blocks:[],timestamp:Date.now()};f=[...c.messages,b,...f],g=g||c.lastUsage}}let i=f.length>50?f.slice(-50):f,k=h().basename(b)||b;if(f.length>0){let a=f.find(a=>"user"===a.role&&a.content&&!a.content.startsWith("[")&&!a.content.startsWith("<"));a&&(k=a.content.slice(0,120))}let l=[...d,a],m=await Promise.all(l.map(a=>(0,Q.tS)(a,b))),o=new Set,p=[];for(let a of m)for(let b of a)o.has(b)||(o.add(b),p.push(b));let q=(0,H.XP)(a),r=q?.contextSize??q?.modelSlots?.mainContext??j.w6,s=g?{used:g.used,total:(0,j.oh)(r)}:null;return{info:{id:a,name:k,cwd:b,createdAt:Date.now(),lastActiveAt:Date.now(),status:"idle"},messages:i,hasMore:f.length>50,lastUsage:s,promptHistory:p}}async getMoreHistory(a,b){let c=this.sessions.get(a);if(!c)return{messages:[],hasMore:!1};let d=c.paginationPrevIds,e=c.transcriptBuffer,f=e.findIndex(a=>a.id===b);if(f>0){let a=Math.max(0,f-50);return{messages:e.slice(a,f),hasMore:a>0||c.transcriptByteOffset>0||d.length>0}}if(c.transcriptByteOffset<=0){for(;d.length>0&&d[d.length-1]===c.bufferCliSessionId;)d.pop();if(0===d.length)return{messages:[],hasMore:!1};let a=d[d.length-1],f=await (0,Q.vi)(a,c.info.cwd,{tailLines:150});d.pop(),c.transcriptByteOffset=f.byteOffset,c.bufferCliSessionId=a,c.transcriptBuffer=[...f.messages,...e];let g=c.transcriptBuffer,h=g.findIndex(a=>a.id===b);if(h>0){let a=Math.max(0,h-50);return{messages:g.slice(a,h),hasMore:a>0||c.transcriptByteOffset>0||d.length>0}}return{messages:f.messages.slice(-50),hasMore:f.byteOffset>0||d.length>0}}let g=c.info.cwd,h=await (0,Q.y)(c.bufferCliSessionId,g,c.transcriptByteOffset,150);c.transcriptByteOffset=h.newByteOffset,c.transcriptBuffer=[...h.messages,...e];let i=c.transcriptBuffer,j=i.findIndex(a=>a.id===b);if(j>0){let a=Math.max(0,j-50);return{messages:i.slice(a,j),hasMore:a>0||c.transcriptByteOffset>0||d.length>0}}return{messages:h.messages.slice(-50),hasMore:h.newByteOffset>0||d.length>0}}getTranscriptBuffer(a){return this.sessions.get(a)?.transcriptBuffer??[]}getStreamingSnapshot(a){return this.sessions.get(a)?.streamingSnapshot??null}isCompacting(a){return this.sessions.get(a)?.compacting??!1}getRuntime(a){return this.sessions.get(a)?.runtime??"stream"}getSessionCwd(a){return this.sessions.get(a)?.info.cwd??null}getCliSessionId(a){return this.sessions.get(a)?.cliSessionId??null}getSessionModel(a){return this.sessions.get(a)?.info.model??null}listActiveSessions(){return Array.from(this.sessions.values()).filter(a=>null!==a.process||!!a.ptyRuntime?.isAlive).map(a=>a.info)}listKnownSessions(){return Array.from(this.sessions.values()).map(a=>a.info)}getKnownMcpServers(){let a=new Set;for(let b of this.sessions.values())for(let c of b.initData?.mcpServers||[])a.add(c.name);if(0===a.size)for(let b of function(){try{let a=W();if(!(0,f.existsSync)(a))return[];return JSON.parse((0,f.readFileSync)(a,"utf-8"))}catch{return[]}}())a.add(b);return Array.from(a)}isProcessAlive(a){let b=this.sessions.get(a);return!!b?.process||!!b?.ptyRuntime?.isAlive}hasRunningProcess(a){let b=this.sessions.get(a);return!!b?.process||!!b?.ptyRuntime?.isAlive}fixStaleStatus(a){let b=this.sessions.get(a);!b||"running"!==b.info.status||b.process||b.ptyRuntime?.isAlive||(b.info.status="idle",b.pendingRequests.clear(),this.notifyPendingChanged(b,a))}restartSession(a){let b=this.sessions.get(a);return!!b&&("running"===b.info.status?(this.emitSystem(b,a,"Cannot restart while running. Interrupt first."),!1):(this.killProcess(b),(0,Q.Br)(b.cliSessionId,b.info.cwd)||(b.hasSpawnedBefore=!1),b.pendingRequests.clear(),this.notifyPendingChanged(b,a),b.streamingSnapshot=null,b.info.status="idle",b.emitter.emit("status",a,"idle"),this.spawnProcess(b,a),this.emitSystem(b,a,"Session restarted — agents and commands reloaded"),!0))}destroySession(a){let b=this.sessions.get(a);if(!b)return!1;if(b.process&&this.endProcess(b,"session_destroyed"),b.ptyRuntime){let a=b.ptyRuntime;b.ptyRuntime=null,a.kill().catch(()=>{})}return b.transcriptWatcher&&(b.transcriptWatcher.stop(),b.transcriptWatcher=null),b.todoWatcher&&(b.todoWatcher.stop(),b.todoWatcher=null),this.cleanupAttachments(b),b.emitter.removeAllListeners(),this.sessions.delete(a),!0}subscribe(a,b){let c=this.sessions.get(a);if(!c)return null;let d=(a,c)=>{b(c)};return c.emitter.on("event",d),()=>c.emitter.off("event",d)}onStatus(a,b){let c=this.sessions.get(a);if(!c)return U(a,"onStatus: session not in memory, returning null"),null;let d=(a,c)=>{b(c)};return c.emitter.on("status",d),()=>c.emitter.off("status",d)}onPending(a,b){let c=this.sessions.get(a);if(!c)return null;let d=(a,c)=>{b(c)};return c.emitter.on("pending",d),()=>c.emitter.off("pending",d)}onError(a,b){let c=this.sessions.get(a);if(!c)return null;let d=(a,c)=>{b(c)};return c.emitter.on("error",d),()=>c.emitter.off("error",d)}onTranscript(a,b){let c=this.sessions.get(a);if(!c)return null;let d=(a,c)=>b(c);return c.emitter.on("transcript",d),()=>c.emitter.off("transcript",d)}interrupt(a){let b=this.sessions.get(a);if(!b)return(0,m._N)(a,"interrupt:no-process",{hasSession:!1}),!1;if(b.queuedMessages.length>0&&(b.queuePaused=!0),"pty"===b.runtime)return b.ptyRuntime?.isAlive?((0,m._N)(a,"interrupt:pty-esc"),b.ptyRuntime.interrupt(),"running"===b.info.status&&(b.info.status="idle",b.streamingSnapshot=null,b.streamState&&(b.streamState.pendingBlocks.length=0,b.streamState.pendingToolUses.length=0,b.streamState.agentStack.length=0,b.streamState.currentAssistantMsgId=null,b.streamState.flushedOnMessageDone=!1),b.emitter.emit("status",a,"idle")),b.pendingRequests.clear(),this.notifyPendingChanged(b,a),!0):((0,m._N)(a,"interrupt:no-pty"),!1);if(!b.process)return(0,m._N)(a,"interrupt:no-process",{hasSession:!0}),!1;if(b.stdin){let c={type:"control_request",request_id:`interrupt-${Date.now()}`,request:{subtype:"interrupt"}};return(0,m._N)(a,"interrupt:stdin",{requestId:c.request_id}),b.stdin.write(JSON.stringify(c)+"\n"),b.pendingRequests.clear(),this.notifyPendingChanged(b,a),!0}return(0,m._N)(a,"interrupt:kill-fallback"),this.killProcessGroup(b.process),b.pendingRequests.clear(),this.notifyPendingChanged(b,a),!0}addPendingRequest(a,b){let c=this.sessions.get(a);c&&(c.pendingRequests.set(b.requestId,b),this.notifyPendingChanged(c,a))}removePendingRequest(a,b){let c=this.sessions.get(a);if(c){let d=c.pendingRequests.has(b),e=c.pendingRequests.get(b)?.type==="question";c.pendingRequests.delete(b),e&&console.log(`[question-debug] removePendingRequest: session=${a.slice(0,8)}, requestId=${b}, existed=${d}, remaining=${c.pendingRequests.size}`),this.notifyPendingChanged(c,a)}}getPendingRequests(a){let b=this.sessions.get(a);return b?Array.from(b.pendingRequests.values()):[]}getPendingRequest(a,b){return this.sessions.get(a)?.pendingRequests.get(b)}respondToPermission(a,b,c,d,e,f){let g=this.sessions.get(a);if(!g)return!1;if("pty"===g.runtime)return!!g.ptyRuntime?.isAlive&&(g.pendingRequests.delete(b),this.notifyPendingChanged(g,a),g.ptyRuntime.notifyPermissionDecision(b,c?{behavior:"allow",...d?{updatedInput:d}:{}}:{behavior:"deny",message:f??"User denied"}));if(!g.stdin)return!1;g.pendingRequests.delete(b),this.notifyPendingChanged(g,a);let h={type:"control_response",response:{subtype:"success",request_id:b,response:c?{behavior:"allow",updatedInput:d??{},...e?.length?{updatedPermissions:e}:{}}:{behavior:"deny",message:f??"User denied"}}};return g.stdin.write(JSON.stringify(h)+"\n"),!0}sendPermissionMode(a,b,c){if(!a.stdin)return;let d={type:"control_request",request_id:`perm-${Date.now()}`,request:{subtype:"set_permission_mode",mode:c}};this.log(b,`sending set_permission_mode: ${c}`),a.stdin.write(JSON.stringify(d)+"\n")}setBypassAllPermissions(a){let b=this.sessions.get(a);b&&!b.bypassAllPermissions&&(b.bypassAllPermissions=!0,(0,H.JG)(a,{bypassAllPermissions:!0}),b.planMode||(this.sendPermissionMode(b,a,"bypassPermissions"),this.scheduleRespawnForPermissions(b)),this.emitSystem(b,a,"__bypass_state::on"))}clearBypassAllPermissions(a){let b=this.sessions.get(a);b?.bypassAllPermissions&&(b.bypassAllPermissions=!1,(0,H.JG)(a,{bypassAllPermissions:!1}),b.planMode||(this.sendPermissionMode(b,a,"default"),this.scheduleRespawnForPermissions(b)),this.emitSystem(b,a,"__bypass_state::off"))}scheduleRespawnForPermissions(a){(a.process||a.ptyRuntime?.isAlive)&&("idle"===a.info.status?(this.killProcess(a),a.hasSpawnedBefore=(0,Q.Br)(a.cliSessionId,a.info.cwd)):a.needsRespawnForPermissions=!0)}setRuntime(a,b){let c=this.sessions.get(a);return!!c&&c.runtime!==b&&(c.runtime=b,c.info.runtime=b,(0,H.JG)(a,{runtime:b}),this.killProcess(c),this.emitInfoUpdated(c,a),!0)}isBypassActive(a){let b=this.sessions.get(a);return b?.bypassAllPermissions??!1}setPlanMode(a){let b=this.sessions.get(a);b&&(b.planMode=!0,b.pendingPlanReminder=!0,(0,H.JG)(a,{planMode:!0}),(b.process||b.ptyRuntime?.isAlive)&&(this.killProcess(b),b.info.status="idle",b.emitter.emit("status",a,"idle")),b.pendingRequests.clear(),this.notifyPendingChanged(b,a),this.emitSystem(b,a,"__plan_state::on"))}clearPlanMode(a){let b=this.sessions.get(a);b?.planMode&&(b.planMode=!1,(0,H.JG)(a,{planMode:!1}),(b.process||b.ptyRuntime?.isAlive)&&(this.killProcess(b),b.info.status="idle",b.emitter.emit("status",a,"idle")),b.pendingRequests.clear(),this.notifyPendingChanged(b,a),this.emitSystem(b,a,"__plan_state::off"),b.bypassAllPermissions&&this.emitSystem(b,a,"__bypass_state::on"))}isPlanModeActive(a){let b=this.sessions.get(a);return b?.planMode??!1}setModel(a,b,c){let d,e,f=this.sessions.get(a);if(this.log(a,`setModel: requested=${b} size=${c??"(unspecified)"}, current=${f?.info.model} currentSize=${f?.info.contextSize??"(unset)"}, hasStdin=${!!f?.stdin}, hasPty=${!!f?.ptyRuntime}`),!f)return;let g=f.info.contextSize??j.w6,h=c??g,i=(d=(0,j.AX)(b)?.contextSizes)&&0!==d.length?d.includes(h)?h:d[0]:h,k=g!==i;if(f.info.model===b&&!k)return void this.log(a,`setModel: skipping (already ${b} with size ${i})`);f.info.model=b,f.info.contextSize=i,f.modelSlots={...f.modelSlots,main:b,mainContext:i},(0,H.JG)(a,{model:b,contextSize:i,modelSlots:f.modelSlots});let l=(0,j.AX)(b),m=l?(0,j.i3)(f.thinkingLevel,l):0===(e=this.modelEffortLevels(b)).length?null:e.includes(f.thinkingLevel)?f.thinkingLevel:e[e.length-1];if(null!==m&&m!==f.thinkingLevel&&(f.thinkingLevel=m,(0,H.JG)(a,{thinkingLevel:m}),this.emitSystem(f,a,`__thinking_level::${m}`)),f.stdin&&!k){this.log(a,`setModel: sending control_request set_model=${b}`);let c={type:"control_request",request_id:`model-${Date.now()}`,request:{subtype:"set_model",model:b}};if(f.stdin.write(JSON.stringify(c)+"\n"),this.modelEffortLevels(b).length>0){let a={type:"control_request",request_id:`effort-${Date.now()}`,request:{subtype:"apply_flag_settings",settings:{effort:f.thinkingLevel}}};f.stdin.write(JSON.stringify(a)+"\n")}}else this.log(a,`setModel: killing process (hasStdin=${!!f.stdin}, contextChanged=${k})`),this.killProcess(f),(0,Q.Br)(f.cliSessionId,f.info.cwd)||(f.hasSpawnedBefore=!1),f.queuedMessages.length=0,f.queuePaused=!1,f.info.status="idle",f.emitter.emit("status",a,"idle");this.emitInfoUpdated(f,a),k&&(f.contextWindowSize=(0,j.oh)(i));let n=f.contextUsage;n&&f.emitter.emit("usage",a,{used:n.used,total:f.contextWindowSize})}setModelSlot(a,b,c){let d=this.sessions.get(a);if(!d)return;let e={...d.modelSlots};e[b]=c,d.modelSlots=e,(0,H.JG)(a,{modelSlots:e}),"main"===b?this.setModel(a,c):(this.killProcess(d),d.queuedMessages.length=0,d.queuePaused=!1,d.info.status="idle",d.emitter.emit("status",a,"idle"),this.emitInfoUpdated(d,a))}getModel(a){return this.sessions.get(a)?.info.model||"sonnet"}setThinkingLevel(a,b){let c=this.sessions.get(a);if(!c||c.thinkingLevel===b)return;c.thinkingLevel=b,(0,H.JG)(a,{thinkingLevel:b});let d=this.modelEffortLevels(c.info.model).length>0;if(c.stdin&&d){let a={type:"control_request",request_id:`effort-${Date.now()}`,request:{subtype:"apply_flag_settings",settings:{effort:b}}};c.stdin.write(JSON.stringify(a)+"\n")}else c.stdin||(this.killProcess(c),c.queuedMessages.length=0,c.queuePaused=!1,c.info.status="idle",c.emitter.emit("status",a,"idle"));this.emitSystem(c,a,`__thinking_level::${b}`)}getThinkingLevel(a){return this.sessions.get(a)?.thinkingLevel??"high"}sendControlRequest(a,b,c=1e4){let d=this.sessions.get(a);if(!d?.stdin)return Promise.reject(Error("Session not connected"));let e=`ctrl-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,f={type:"control_request",request_id:e,request:b};return new Promise((a,b)=>{let g=setTimeout(()=>{d.controlCallbacks.delete(e),b(Error("Control request timed out"))},c);d.controlCallbacks.set(e,b=>{clearTimeout(g),d.controlCallbacks.delete(e),a(b)}),d.stdin.write(JSON.stringify(f)+"\n")})}async mcpStatus(a){return this.sendControlRequest(a,{subtype:"mcp_status"})}async mcpToggle(a,b,c){let d=await this.sendControlRequest(a,{subtype:"mcp_toggle",serverName:b,enabled:c});return this.updateMcpServerStatus(a,b,c?"connected":"disabled"),d}async mcpReconnect(a,b){let c=await this.sendControlRequest(a,{subtype:"mcp_reconnect",serverName:b});return this.updateMcpServerStatus(a,b,"connected"),c}updateMcpServerStatus(a,b,c){let d=this.sessions.get(a);if(!d?.initData)return;let e=d.initData.mcpServers.find(a=>a.name===b);e&&(e.status=c),d.emitter.emit("init",a,d.initData),(0,H.JG)(a,{initData:d.initData})}getContextUsage(a){return this.sessions.get(a)?.contextUsage??null}hasQueuedMessage(a){let b=this.sessions.get(a);return!!b&&b.queuedMessages.length>0}getQueuedCount(a){return this.sessions.get(a)?.queuedMessages.length??0}cancelQueuedMessage(a){let b=this.sessions.get(a);return b&&0!==b.queuedMessages.length?b.queuedMessages.pop().text:null}deleteQueuedMessage(a,b){let c=this.sessions.get(a);if(!c)return!1;let d=c.queuedMessages.findIndex(a=>a.id===b);return -1!==d&&(c.queuedMessages.splice(d,1),!0)}editQueuedMessage(a,b){let c=this.sessions.get(a);if(!c)return null;let d=c.queuedMessages.findIndex(a=>a.id===b);return -1===d?null:c.queuedMessages.splice(d,1)[0].text}pauseQueue(a){let b=this.sessions.get(a);b&&(b.queuePaused=!0)}resumeQueue(a){let b=this.sessions.get(a);b&&(b.queuePaused=!1,this.flushQueuedMessage(b,a))}getQueuedMessages(a){let b=this.sessions.get(a);return b?b.queuedMessages.map(a=>({id:a.id,text:a.text})):[]}isQueuePaused(a){return this.sessions.get(a)?.queuePaused??!1}onQueued(a,b){let c=this.sessions.get(a);if(!c)return null;let d=(a,c,d)=>b(c,d);return c.emitter.on("queued",d),()=>c.emitter.off("queued",d)}flushQueuedMessage(a,b){if(a.queuePaused||0===a.queuedMessages.length)return;let c=a.queuedMessages.shift();a.emitter.emit("queued",b,a.queuedMessages.length,c.text),this.sendMessage(b,c.text,c.images,c.documents)}onUsage(a,b){let c=this.sessions.get(a);if(!c)return null;let d=(a,c)=>b(c);return c.emitter.on("usage",d),()=>c.emitter.off("usage",d)}getTodos(a){return this.sessions.get(a)?.todoItems??[]}onTodos(a,b){let c=this.sessions.get(a);if(!c)return null;let d=(a,c)=>b(c);return c.emitter.on("todos",d),()=>c.emitter.off("todos",d)}getInitData(a){return this.sessions.get(a)?.initData||(0,H.XP)(a)?.initData}setInitData(a,b){let c=this.sessions.get(a);if(!c)return;let d=c.initData||(0,H.XP)(a)?.initData;c.initData={slashCommands:b.slashCommands.length>0?b.slashCommands:d?.slashCommands||[],skills:b.skills.length>0?b.skills:d?.skills||[],agents:b.agents.length>0?b.agents:d?.agents||[],version:b.version||d?.version||"",model:b.model||d?.model||"",mcpServers:b.mcpServers.length>0?b.mcpServers:d?.mcpServers||[],models:b.models||d?.models,account:b.account||d?.account,commands:b.commands||d?.commands},c.emitter.emit("init",a,c.initData),(0,H.JG)(a,{initData:c.initData}),c.initData.mcpServers.length>0&&function(a){try{let b=W(),c=h().dirname(b);(0,f.mkdirSync)(c,{recursive:!0}),(0,f.writeFileSync)(b,JSON.stringify(a))}catch{}}(this.getKnownMcpServers())}onInit(a,b){let c=this.sessions.get(a);if(!c)return null;let d=(a,c)=>b(c);return c.emitter.on("init",d),()=>c.emitter.off("init",d)}loadTodosFromFiles(a){let b=this.sessions.get(a);if(!b||b.todoItems.length>0)return;let c=new P(b.cliSessionId,()=>{}).readOnce();0!==c.length&&(b.todoItems=c,b.emitter.emit("todos",a,[...b.todoItems]))}startTodoWatcher(a,b){a.todoWatcher&&a.todoWatcher.stop();let c=new P(a.cliSessionId,c=>{a.todoItems=c,a.emitter.emit("todos",b,[...c])});a.todoWatcher=c,c.start()}extractUsage(a,b,c){try{let d=JSON.parse(c.trim());if("assistant"!==d.type||!d.message?.usage||"<synthetic>"===d.message.model)return;let e=d.message.usage,f={used:(e.input_tokens||0)+(e.cache_creation_input_tokens||0)+(e.cache_read_input_tokens||0),total:a.contextWindowSize};a.contextUsage=f,a.emitter.emit("usage",b,f),a.totalTokens.input+=e.input_tokens||0,a.totalTokens.output+=e.output_tokens||0,a.totalTokens.cacheCreate+=e.cache_creation_input_tokens||0,a.totalTokens.cacheRead+=e.cache_read_input_tokens||0}catch{}}killProcessGroup(a){if(a.pid)try{"win32"===process.platform?(0,d.spawn)("taskkill",["/PID",String(a.pid),"/T","/F"],{stdio:"ignore"}):process.kill(-a.pid,"SIGTERM")}catch{}}endProcess(a,b){if(!a.process)return;let c=a.process;if(a.stdin){let d={type:"control_request",request_id:`end-session-${Date.now()}`,request:{subtype:"end_session",reason:b}};a.stdin.write(JSON.stringify(d)+"\n");let e=setTimeout(()=>{this.killProcessGroup(c)},3e3);c.once("close",()=>clearTimeout(e))}else this.killProcessGroup(c)}killProcess(a){if(a.process&&(a.process.on("close",()=>{}),this.endProcess(a,"session_reset"),a.process=null,a.stdin=null),a.ptyRuntime){let b=a.ptyRuntime;a.ptyRuntime=null,b.kill().catch(()=>{})}a.compacting=!1}emitSystem(a,b,c){a.emitter.emit("system",b,c)}notifyPendingChanged(a,b){let c=a.pendingRequests.size;a.info.pendingRequestCount!==c&&(a.info.pendingRequestCount=c,a.emitter.emit("pending",b,c))}applyProcessedResult(a,b,c){let d=c.emit.map(a=>a.type).join(", ");for(let e of(d&&console.log(`[sm] applyProcessedResult for ${b.slice(0,8)}: events=[${d}], statusChange=${c.statusChange??"none"}, currentStatus=${a.info.status}`),c.intermediateMessages))a.emitter.emit("event",b,{type:"message_done",message:e}),e.toolUses.some(a=>"Agent"===a.name)&&this.loadAgentChildren(a,b,e.id,a.info.cwd);for(let d of c.systemMessages){if("__tool_use_start"===d){a.info.status="running",console.log(`[sm] emit status running (via tool_use_start) for ${b.slice(0,8)} (runtime=${a.runtime})`),a.emitter.emit("status",b,"running");continue}if("__compact::hook_start"===d){a.compacting||((0,m._N)(b,"compact:hook-start"),a.compacting=!0,this.emitSystem(a,b,"__compact::start"));continue}if("__compact::hook_done"===d){if(a.compacting){(0,m._N)(b,"compact:hook-done"),a.compacting=!1,this.emitSystem(a,b,"__compact::done");let c={used:Math.round(.1*a.contextWindowSize),total:a.contextWindowSize};a.contextUsage=c,a.emitter.emit("usage",b,c),a.info.status="idle",a.emitter.emit("status",b,"idle"),this.flushQueuedMessage(a,b)}continue}let c="__permission_mode::";if(d.startsWith(c)){let e=d.slice(c.length);"plan"!==e||a.planMode?"plan"!==e&&a.planMode&&(a.planMode=!1,(0,H.JG)(b,{planMode:!1}),a.needsRespawnForPermissions=!0,this.emitSystem(a,b,"__plan_state::off")):(a.planMode=!0,(0,H.JG)(b,{planMode:!0}),this.emitSystem(a,b,"__plan_state::on"))}else this.emitSystem(a,b,d)}for(let d of c.errors)a.emitter.emit("error",b,d);let e=new Set;for(let d of c.permissionActions)if("auto_approve"===d.type)this.respondToPermission(b,d.requestId,!0,d.rawToolInput);else if("auto_deny"===d.type)this.respondToPermission(b,d.requestId,!1,void 0,void 0,d.denyReason);else if(a.bypassAllPermissions&&!a.planMode&&"AskUserQuestion"!==d.toolName)this.respondToPermission(b,d.requestId,!0,d.rawToolInput),e.add(d.requestId);else{let c="ExitPlanMode"===d.toolName?function(){try{let a=(0,g.join)((0,k.Wc)(),"plans"),b=(0,f.readdirSync)(a).filter(a=>a.endsWith(".md")&&!a.includes("-agent-"));if(0===b.length)return;let c=b[0],d=0;for(let e of b){let b=(0,f.statSync)((0,g.join)(a,e)).mtimeMs;b>d&&(d=b,c=e)}return(0,g.join)(a,c)}catch{return}}():void 0,e="AskUserQuestion"===d.toolName?"question":"permission";"question"===e&&console.log(`[question-debug] adding pending question: session=${b.slice(0,8)}, requestId=${d.requestId}, total=${a.pendingRequests.size+1}`),a.pendingRequests.set(d.requestId,{type:e,requestId:d.requestId,toolName:d.toolName,toolInput:d.toolInput||"",rawToolInput:d.rawToolInput,permissionSuggestions:d.permissionSuggestions,planFilePath:c,planContent:c?function(a){try{return(0,f.readFileSync)(a,"utf-8")}catch{return}}(c):void 0}),this.notifyPendingChanged(a,b)}if(c.compactDone){a.compacting=!1,this.emitSystem(a,b,"__compact::done");let c={used:Math.round(.1*a.contextWindowSize),total:a.contextWindowSize};a.contextUsage=c,a.emitter.emit("usage",b,c)}for(let d of(c.emit.length>0&&0===a.emitter.listenerCount("event")&&U(b,`applyProcessedResult: ${c.emit.length} events but 0 event listeners`),c.emit))"permission_request"===d.type&&d.requestId&&e.has(d.requestId)||a.emitter.emit("event",b,d);a.streamingSnapshot=c.snapshot;let h=c.emit[c.emit.length-1];h?.type==="message_done"&&h.message&&(h.message.toolUses.some(a=>"Agent"===a.name)&&this.loadAgentChildren(a,b,h.message.id,a.info.cwd),a.needsRespawnForPermissions&&(a.needsRespawnForPermissions=!1,this.killProcess(a),a.info.status="idle",a.emitter.emit("status",b,"idle"))),"idle"===c.statusChange&&(a.info.status="idle",console.log(`[sm] emit status idle for ${b.slice(0,8)} (runtime=${a.runtime})`),a.emitter.emit("status",b,"idle"),this.flushQueuedMessage(a,b))}emitInfoUpdated(a,b){a.emitter.emit("info_updated",b,{...a.info})}onSystem(a,b){let c=this.sessions.get(a);if(!c)return null;let d=(a,c)=>b(c);return c.emitter.on("system",d),()=>c.emitter.off("system",d)}onClear(a,b){let c=this.sessions.get(a);if(!c)return null;let d=()=>b();return c.emitter.on("clear",d),()=>c.emitter.off("clear",d)}onInfoUpdated(a,b){let c=this.sessions.get(a);if(!c)return null;let d=(a,c)=>b(c);return c.emitter.on("info_updated",d),()=>c.emitter.off("info_updated",d)}handleCommand(a,b){let c=this.sessions.get(a);if(!c)return!1;let d=b.trim().split(/\s+/),e=d[0].toLowerCase(),f=d.slice(1).join(" ");switch(e){case"/clear":case"/reset":case"/new":return this.killProcess(c),c.previousCliSessionIds.push(c.cliSessionId),c.cliSessionId=(0,i.A)(),c.hasSpawnedBefore=!1,c.queuedMessages.length=0,c.queuePaused=!1,c.todoItems=[],c.info.status="idle",c.emitter.emit("clear",a),c.emitter.emit("status",a,"idle"),(0,H.JG)(a,{cliSessionId:c.cliSessionId,previousCliSessionIds:c.previousCliSessionIds}),!0;case"/model":if(!f){let b=c.info.model||"sonnet";return this.emitSystem(c,a,`__model_picker::${b}`),!0}return this.log(a,`/model command: args="${f}", was=${c.info.model}`),this.killProcess(c),c.info.model=f,c.info.status="idle",c.emitter.emit("status",a,"idle"),(0,H.JG)(a,{model:f}),this.emitSystem(c,a,`Model switched to ${f}`),this.emitInfoUpdated(c,a),!0;case"/rename":if(!f)return this.emitSystem(c,a,"Usage: /rename <name>"),!0;return c.info.name=f,(0,H.JG)(a,{name:f}),this.emitSystem(c,a,`Session renamed to "${f}"`),this.emitInfoUpdated(c,a),!0;case"/help":return this.emitSystem(c,a,"Cockpit commands:\n /clear, /reset, /new - Clear conversation and start fresh\n /model [name] - Show or switch model\n /rename <name> - Rename this session\n /cost - Show session token usage\n /context - Show context window usage\n /status - Show session status\n /help - Show this help message\n\nOther commands (/compact, /commit, /review, etc.) are passed to Claude when possible."),!0;case"/cost":{let b=c.totalTokens,d=[`Input tokens: ${b.input.toLocaleString()}`,`Output tokens: ${b.output.toLocaleString()}`,`Cache write tokens: ${b.cacheCreate.toLocaleString()}`,`Cache read tokens: ${b.cacheRead.toLocaleString()}`];return this.emitSystem(c,a,d.join("\n")),!0}case"/context":{if(!c.contextUsage)return this.emitSystem(c,a,"Context usage data not available yet."),!0;let b=c.contextWindowSize>0?Math.round(c.contextUsage.used/c.contextWindowSize*100):0;return this.emitSystem(c,a,`Context window: ${c.contextUsage.used.toLocaleString()} / ${c.contextWindowSize.toLocaleString()} (${b}%)`),!0}case"/status":{let b=c.info.model||"sonnet",d=c.runtime,e=c.planMode?" [plan]":"";return this.emitSystem(c,a,`Model: ${b} Runtime: ${d}${e}`),!0}}if(c.ptyRuntime?.isAlive){let b=e.replace("/","");if(V.DIALOG_COMMANDS.has(b))return this.emitSystem(c,a,`"${e}" opens an interactive CLI dialog that isn't available in remote mode.`),!0}return!1}static{this.DIALOG_COMMANDS=new Set(["config","usage","session","stats","doctor","diff","mcp","permissions","hooks","tasks","agents","skills","memory","theme","fast","feedback","copy","branch","plan","chrome","desktop","ide","mobile","bridge","sandbox","export","login","logout","upgrade","rate-limit-options","privacy-settings","terminal-setup","install-github-app","remote-env","remote-setup","resume","add-dir","btw","extra-usage","passes","think-back","ultrareview","tag","exit","effort","color","files"])}static{this.MEDIA_EXT={"image/png":".png","image/jpeg":".jpg","image/gif":".gif","image/webp":".webp","application/pdf":".pdf"}}writeAttachments(a,b){if(!a?.length&&!b?.length)return[];let c=h().join((0,k.du)(),"attachments");(0,f.mkdirSync)(c,{recursive:!0});let d=[];for(let b of a??[]){let a=V.MEDIA_EXT[b.mediaType]||".png",e=h().join(c,`${(0,i.A)()}${a}`);(0,f.writeFileSync)(e,Buffer.from(b.data,"base64")),d.push(e)}for(let a of b??[]){let b=V.MEDIA_EXT[a.mediaType]||".pdf",e=h().join(c,`${(0,i.A)()}${b}`);(0,f.writeFileSync)(e,Buffer.from(a.data,"base64")),d.push(e)}return d}cleanupAttachments(a){for(let b of a.attachmentPaths)try{(0,f.unlinkSync)(b)}catch{}a.attachmentPaths=[]}buildPtyText(a,b){if(0===b.length)return a;let c=b.map(a=>`[Attached image: ${a}]`).join("\n");return`${c}
3
+ ${a}`}buildContent(a,b,c,d){let e=a.pendingPlanReminder?this.planModeReminderText():null;if(a.pendingPlanReminder&&(a.pendingPlanReminder=!1),!c?.length&&!d?.length&&!e)return b;let f=[];for(let a of(e&&f.push({type:"text",text:e}),c??[]))f.push({type:"image",source:{type:"base64",media_type:a.mediaType,data:a.data}});for(let a of d??[])f.push({type:"document",source:{type:"base64",media_type:a.mediaType,data:a.data}});return b&&f.push({type:"text",text:b}),f}planModeReminderText(){return`<system-reminder>
4
+ Cockpit plan mode is now active, layered on top of Claude Code's native plan mode.
5
+
6
+ Additional Cockpit rules beyond the CLI's defaults:
7
+ - Bash: only read-only commands are permitted (ls, cat, head, tail, wc, grep, rg, find, stat, file, du, df, tree, pwd, which, type, echo, env, date, basename, dirname, realpath, readlink, uname, whoami, hostname, id). Pipes are allowed; ';', '&&', '||', '>', '<', '$(...)', '\`...\`', '<(...)' are not.
8
+ - git: only read-only subcommands (status, log, diff, show, blame, branch, remote, ls-files, ls-tree, rev-parse, describe, tag, reflog).
9
+ - Edit, Write, NotebookEdit: blocked. Use ExitPlanMode to submit the plan before making changes.
10
+ - Read, Grep, Glob, and all other read-only tools: unrestricted.
11
+ </system-reminder>`}async recoverSession(a){if(this.sessions.has(a))return!0;U(a,"recovering session: not in memory, searching disk");let b=(0,H.XP)(a),c=await (0,Q.gT)(b?.cliSessionId||a)||await (0,Q.gT)(a);return c?(this.ensureSession(a,c),U(a,`recovery succeeded: restored from ${c}`),!0):(U(a,"recovery failed: no transcript found on disk"),!1)}estimateMessageTokens(a,b,c){let d=Math.ceil(a.length/4);return b&&(d+=2e3*b.length),c&&(d+=c.reduce((a,b)=>a+Math.ceil(b.data.length/5),0)),d}shouldPreCompact(a,b,c,d){if(!a.contextUsage||a.compacting||b.trim().toLowerCase().startsWith("/compact")||b.trim().startsWith("/"))return!1;let e=this.estimateMessageTokens(b,c,d),{used:f,total:g}=a.contextUsage;return f+e>.85*g}sendMessage(a,b,c,d){let e=this.sessions.get(a);if(!e)return U(a,"sendMessage: session not in memory, returning false"),(0,m._N)(a,"send:no-session"),!1;if(b.startsWith("/")){if(this.handleCommand(a,b))return!0;b.trim().toLowerCase().startsWith("/compact")&&((0,m._N)(a,"compact:start"),e.compacting=!0,this.emitSystem(e,a,"__compact::start"))}if("running"!==e.info.status&&this.shouldPreCompact(e,b,c,d))return this.log(a,"pre-send compact: message would exceed 85% of context window"),(0,m._N)(a,"compact:pre-send"),e.queuedMessages.push({id:`q-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,text:b,images:c,documents:d}),e.emitter.emit("queued",a,e.queuedMessages.length),e.compacting=!0,this.emitSystem(e,a,"__compact::start"),e.info.status="running",e.emitter.emit("status",a,"running"),e.ptyRuntime?.isAlive?e.ptyRuntime.sendText("/compact").catch(()=>{}):e.process&&e.stdin?e.stdin.write(JSON.stringify({type:"user",message:{role:"user",content:"/compact"}})+"\n"):this.spawnProcess(e,a,"/compact"),!0;let f=this.buildContent(e,b,c,d);if(e.queuePaused&&(e.queuedMessages.length=0,e.queuePaused=!1,e.emitter.emit("queued",a,0)),"running"===e.info.status)return e.queuedMessages.push({id:`q-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,text:b,images:c,documents:d}),e.emitter.emit("queued",a,e.queuedMessages.length),!0;if((0,m._N)(a,"running:send",{hasProcess:!!e.process,hasStdin:!!e.stdin,runtime:e.runtime,ptyAlive:!!e.ptyRuntime?.isAlive}),e.info.status="running",console.log(`[sm] emit status running for ${a.slice(0,8)} (runtime=${e.runtime})`),e.emitter.emit("status",a,"running"),"pty"===e.runtime&&e.ptyRuntime?.isAlive){e.streamState&&(e.streamState.thinkingStartedAt=Date.now()),this.cleanupAttachments(e);let f=this.writeAttachments(c,d);e.attachmentPaths.push(...f);let g=this.buildPtyText(b,f);return e.ptyRuntime.sendText(g).catch(b=>{this.log(a,`pty sendText failed: ${b instanceof Error?b.message:String(b)}`)}),!0}return e.process&&e.stdin?(e.streamState&&(e.streamState.thinkingStartedAt=Date.now()),e.stdin.write(JSON.stringify({type:"user",message:{role:"user",content:f}})+"\n"),!0):(this.spawnProcess(e,a,b,c,d),!0)}log(a,b){if(!(0,m.TT)())return;let c=new Date().toISOString().slice(11,23),d=a.slice(0,8);console.log(`[session:${d}] ${c} ${b}`)}ensureProcess(a){let b=this.sessions.get(a);!b||b.process||b.ptyRuntime?.isAlive||this.spawnProcess(b,a)}modelEffortLevels(a){if(!a)return[];let b=(0,j.AX)(a);if(b)return(0,j.iz)(b);let c=(0,l.$K)(a);return c?c.model.effortLevels:[]}spawnProcess(a,b,c,e,g){if("pty"===a.runtime)return void this.spawnPtyProcess(a,b,c,e,g);this.log(b,`spawning CLI process (resume=${a.hasSpawnedBefore}, model=${a.info.model||"sonnet"})`);let h=["-p","--verbose","--output-format","stream-json","--input-format","stream-json"];a.planMode||h.push("--allow-dangerously-skip-permissions"),h.push("--permission-prompt-tool","stdio"),a.planMode?h.push("--permission-mode","plan"):a.bypassAllPermissions&&h.push("--permission-mode","bypassPermissions"),a.hasSpawnedBefore||(0,Q.Br)(a.cliSessionId,a.info.cwd)?h.push("--resume",a.cliSessionId):h.push("--session-id",a.cliSessionId);let i=(0,l.$K)(a.info.model??"sonnet"),k=i?i.model.modelId:a.info.model;this.log(b,`spawn: info.model=${a.info.model}, resolved=${i?`${i.provider.id}:${i.model.modelId}`:"null"}, cliModel=${k}`),k&&h.push("--model",k),this.modelEffortLevels(a.info.model).length>0&&h.push("--effort",a.thinkingLevel);let n={...process.env};delete n.CLAUDECODE,delete n.CLAUDE_CODE_ENTRYPOINT,i&&Object.assign(n,i.provider.envVars);let p=a.info.contextSize??j.w6;if(j.XR[p].disableEnv&&(n.CLAUDE_CODE_DISABLE_1M_CONTEXT="1"),a.modelSlots.subagent&&a.modelSlots.subagent!==a.modelSlots.main){let b=(0,l.$K)(a.modelSlots.subagent);n.ANTHROPIC_SMALL_FAST_MODEL=b?b.model.modelId:a.modelSlots.subagent}(0,f.mkdirSync)(a.info.cwd,{recursive:!0});let q="win32"===process.platform,r=(0,d.spawn)(T(),h,{cwd:a.info.cwd,env:n,stdio:["pipe","pipe","pipe"],...q?{shell:!0}:{detached:!0}});a.process=r,a.stdin=r.stdin,a.hasSpawnedBefore=!0,this.log(b,`CLI process spawned (pid=${r.pid})`),this.startTodoWatcher(a,b);let s={type:"control_request",request_id:`init-${Date.now()}`,request:{subtype:"initialize"}};if(r.stdin.write(JSON.stringify(s)+"\n"),a.planMode?this.sendPermissionMode(a,b,"plan"):a.bypassAllPermissions&&this.sendPermissionMode(a,b,"bypassPermissions"),c){let b=this.buildContent(a,c,e,g);r.stdin.write(JSON.stringify({type:"user",message:{role:"user",content:b}})+"\n")}r.stdin.on("error",a=>{this.log(b,`stdin pipe error: ${a.message}`)}),r.stdout.on("error",a=>{this.log(b,`stdout pipe error: ${a.message}`)}),r.stderr.on("error",a=>{this.log(b,`stderr pipe error: ${a.message}`)});let t=new o,u="",v=N();a.streamState=v,v.thinkingStartedAt=Date.now();let w="";r.stdout.on("data",c=>{let d=(w+=c.toString()).split(/\r?\n/);if((w=d.pop()||"").trimStart().startsWith("{")&&w.trimEnd().endsWith("}"))try{JSON.parse(w),d.push(w),w=""}catch{}for(let c of d){if((0,m.H6)(b,c),a.controlCallbacks.size>0&&c.includes('"control_response"'))try{let b=JSON.parse(c);if("control_response"===b.type&&b.request_id){let c=a.controlCallbacks.get(b.request_id);if(c){c(b.response||b);continue}}}catch{}0===v.agentStack.length&&this.extractUsage(a,b,c);let d=O(t.parseLine(c),v,{planMode:a.planMode,compacting:a.compacting});this.applyProcessedResult(a,b,d)}}),r.stderr.on("data",a=>{u+=a.toString()}),r.on("close",(c,d)=>{if(this.log(b,`CLI process exited (code=${c}, signal=${d}, pid=${r.pid})`),null!==a.process&&a.process!==r)return void this.log(b,`skipping close cleanup: newer process already running (pid=${a.process.pid})`);if(w.trim()){let c=O(t.parseLine(w),v,{planMode:a.planMode,compacting:a.compacting});this.applyProcessedResult(a,b,c)}if(a.process=null,a.stdin=null,a.streamingSnapshot=null,(0,m._N)(b,"idle:process-close",{code:c,flushedOnMessageDone:v.flushedOnMessageDone}),a.info.status="idle",a.emitter.emit("status",b,"idle"),a.compacting){(0,m._N)(b,"compact:done-on-close"),a.compacting=!1,this.emitSystem(a,b,"__compact::done");let c={used:Math.round(.1*a.contextWindowSize),total:a.contextWindowSize};a.contextUsage=c,a.emitter.emit("usage",b,c)}a.todoItems.length>0&&a.todoItems.every(a=>"completed"===a.status)&&(a.todoItems=[],a.emitter.emit("todos",b,[])),0!==c&&u.trim()&&a.emitter.emit("error",b,u.trim()),v.flushedOnMessageDone||this.flushQueuedMessage(a,b)}),r.on("error",c=>{this.log(b,`CLI process error: ${c.message}`),(0,m._N)(b,"idle:process-error",{error:c.message}),a.process=null,a.stdin=null,a.info.status="idle",a.emitter.emit("status",b,"idle"),a.emitter.emit("error",b,c.message),this.flushQueuedMessage(a,b)})}spawnPtyProcess(a,b,c,d,e){if(a.ptyRuntime?.isAlive){let b=a.ptyRuntime;a.ptyRuntime=null,b.kill().catch(()=>{})}let g=_();if(!g){let c="PTY runtime requires the hook router; server boot did not register one";this.log(b,c),a.info.status="idle",a.emitter.emit("status",b,"idle"),a.emitter.emit("error",b,c);return}this.log(b,`spawning PTY claude (resume=${a.hasSpawnedBefore}, model=${a.info.model||"sonnet"})`),(0,f.mkdirSync)(a.info.cwd,{recursive:!0});let h=N();a.streamState=h,h.thinkingStartedAt=Date.now();let i=[];a.hasSpawnedBefore||(0,Q.Br)(a.cliSessionId,a.info.cwd)?i.push("--resume",a.cliSessionId):i.push("--session-id",a.cliSessionId);let k=(0,l.$K)(a.info.model??"sonnet"),n=k?k.model.modelId:a.info.model;n&&i.push("--model",n),this.modelEffortLevels(a.info.model).length>0&&i.push("--effort",a.thinkingLevel),a.planMode?i.push("--permission-mode","plan"):a.bypassAllPermissions&&i.push("--permission-mode","bypassPermissions");let o={};k&&Object.assign(o,k.provider.envVars);let p=a.info.contextSize??j.w6;if(j.XR[p].disableEnv&&(o.CLAUDE_CODE_DISABLE_1M_CONTEXT="1"),a.modelSlots.subagent&&a.modelSlots.subagent!==a.modelSlots.main){let b=(0,l.$K)(a.modelSlots.subagent);o.ANTHROPIC_SMALL_FAST_MODEL=b?b.model.modelId:a.modelSlots.subagent}let q=new G({sessionId:b,cwd:a.info.cwd,cliSessionId:a.cliSessionId,hookRouter:g,claudeBin:T(),extraArgs:i,extraEnv:o,onEvents:c=>{let d=c.map(a=>a.type).join(", ");console.log(`[sm] pty onEvents for ${b.slice(0,8)}: [${d}]`);let e=O(c,h,{planMode:a.planMode,compacting:a.compacting});this.applyProcessedResult(a,b,e)},onError:c=>{this.log(b,`pty runtime error: ${c}`),a.emitter.emit("error",b,c)},onExit:({exitCode:c,signal:d})=>{if(this.log(b,`PTY claude exited (code=${c}, signal=${d??"none"})`),a.ptyRuntime===q){if(a.ptyRuntime=null,a.streamingSnapshot=null,(0,m._N)(b,"idle:pty-exit",{exitCode:c,flushedOnMessageDone:h.flushedOnMessageDone}),a.transcriptWatcher&&(a.transcriptWatcher.stop(),a.transcriptWatcher=null),a.info.status="idle",a.emitter.emit("status",b,"idle"),a.compacting){(0,m._N)(b,"compact:done-on-pty-exit"),a.compacting=!1,this.emitSystem(a,b,"__compact::done");let c={used:Math.round(.1*a.contextWindowSize),total:a.contextWindowSize};a.contextUsage=c,a.emitter.emit("usage",b,c)}a.todoItems.length>0&&a.todoItems.every(a=>"completed"===a.status)&&(a.todoItems=[],a.emitter.emit("todos",b,[])),h.flushedOnMessageDone||this.flushQueuedMessage(a,b)}}});a.ptyRuntime=q,a.hasSpawnedBefore=!0,this.cleanupAttachments(a);let r=this.writeAttachments(d,e);a.attachmentPaths.push(...r);let s=c?this.buildPtyText(c,r):c,t=new R(a.cliSessionId,a.info.cwd,(c,d)=>{if(a.emitter.emit("transcript",b,c),d){let c={used:d.used,total:a.contextWindowSize};a.contextUsage=c,a.emitter.emit("usage",b,c)}if(a.compacting&&c.some(a=>"__compacted__"===a.content)){(0,m._N)(b,"compact:done-on-transcript"),a.compacting=!1,this.emitSystem(a,b,"__compact::done");let c={used:Math.round(.1*a.contextWindowSize),total:a.contextWindowSize};a.contextUsage=c,a.emitter.emit("usage",b,c),a.info.status="idle",a.emitter.emit("status",b,"idle"),this.flushQueuedMessage(a,b)}});a.transcriptWatcher=t,this.startTodoWatcher(a,b),q.start(s).then(()=>{this.log(b,`PTY claude ready (pid=${q.pid})`),t.start()}).catch(c=>{let d=c instanceof Error?c.message:String(c);this.log(b,`pty runtime start failed: ${d}`),a.ptyRuntime=null,a.info.status="idle",a.emitter.emit("status",b,"idle"),a.emitter.emit("error",b,d)})}async loadAgentChildren(a,b,c,d){try{let e=(await (0,Q.vi)(a.cliSessionId,d)).messages.find(a=>a.id===c);if(!e)return;for(let d of e.toolUses)"Agent"===d.name&&d.children&&0!==d.children.length&&a.emitter.emit("event",b,{type:"tool_children",messageId:c,toolId:d.id,children:d.children})}catch{}}}function W(){return h().join((0,k.j_)(),"mcp-servers.json")}let X="__cockpit_session_manager__";function Y(){let a=globalThis;return a[X]||(a[X]=new V),a[X]}function Z(){return globalThis.__cockpit_job_scheduler__||null}function $(){return globalThis.__cockpit_terminal_manager__||null}function _(){return globalThis.__cockpit_hook_router__||null}}};
@@ -1 +1 @@
1
- globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/V2EfPtTUC96VYyF12K0om/_buildManifest.js","static/V2EfPtTUC96VYyF12K0om/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-2a5835e108df6f34.js","static/chunks/4bd1b696-7281820e82fc5615.js","static/chunks/93794-5f89a674d8cefcff.js","static/chunks/main-app-6ef98a75f3b6a5ff.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
1
+ globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/zr8XZzqb74eHitdlkpo-C/_buildManifest.js","static/zr8XZzqb74eHitdlkpo-C/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-e31bb45fa59caed8.js","static/chunks/4bd1b696-7281820e82fc5615.js","static/chunks/93794-5f89a674d8cefcff.js","static/chunks/main-app-6ef98a75f3b6a5ff.js"],rootMainFilesTree:{},pages:{"/_app":[]}};